fix: add "centered" flag for grid columns
This commit is contained in:
parent
356eb21713
commit
4307b5a9eb
3 changed files with 72 additions and 0 deletions
|
|
@ -123,6 +123,12 @@ class Grid: # pylint: disable=too-many-instance-attributes,too-many-public-meth
|
|||
|
||||
See also :meth:`get_label()` and :meth:`set_label()`.
|
||||
|
||||
.. attribute:: centered
|
||||
|
||||
Dict of column "centered" flags.
|
||||
|
||||
See also :meth:`is_centered()` and :meth:`set_centered()`.
|
||||
|
||||
.. attribute:: renderers
|
||||
|
||||
Dict of column (cell) value renderer overrides.
|
||||
|
|
@ -397,6 +403,7 @@ class Grid: # pylint: disable=too-many-instance-attributes,too-many-public-meth
|
|||
columns=None,
|
||||
data=None,
|
||||
labels=None,
|
||||
centered=None,
|
||||
renderers=None,
|
||||
enums=None,
|
||||
checkable=False,
|
||||
|
|
@ -438,6 +445,7 @@ class Grid: # pylint: disable=too-many-instance-attributes,too-many-public-meth
|
|||
self.app = self.config.get_app()
|
||||
|
||||
self.set_columns(columns or self.get_columns())
|
||||
self.centered = centered or {}
|
||||
self.renderers = {}
|
||||
if renderers:
|
||||
for k, val in renderers.items():
|
||||
|
|
@ -650,6 +658,32 @@ class Grid: # pylint: disable=too-many-instance-attributes,too-many-public-meth
|
|||
return self.labels[key]
|
||||
return self.app.make_title(key)
|
||||
|
||||
def set_centered(self, key, centered=True):
|
||||
"""
|
||||
Set/override the "centered" flag for a column.
|
||||
|
||||
:param key: Name of column.
|
||||
|
||||
:param centered: Whether the column data should be centered.
|
||||
|
||||
See also :meth:`is_centered()`. Column flags are tracked via
|
||||
:attr:`centered`.
|
||||
"""
|
||||
self.centered[key] = centered
|
||||
|
||||
def is_centered(self, key):
|
||||
"""
|
||||
Check if the given column should be centered.
|
||||
|
||||
:param key: Name of column.
|
||||
|
||||
:rtype: boolean
|
||||
|
||||
See also :meth:`set_centered()`. Column flags are tracked via
|
||||
:attr:`centered`.
|
||||
"""
|
||||
return self.centered.get(key, False)
|
||||
|
||||
def set_renderer(self, key, renderer, **kwargs):
|
||||
"""
|
||||
Set/override the value renderer for a column.
|
||||
|
|
|
|||
|
|
@ -169,6 +169,9 @@
|
|||
<${b}-table-column field="${column['field']}"
|
||||
label="${column['label']}"
|
||||
v-slot="props"
|
||||
% if grid.is_centered(column['field']):
|
||||
centered
|
||||
% endif
|
||||
:sortable="${json.dumps(column.get('sortable', False))|n}"
|
||||
:searchable="${json.dumps(column.get('searchable', False))|n}"
|
||||
cell-class="c_${column['field']}">
|
||||
|
|
|
|||
|
|
@ -219,6 +219,41 @@ class TestGrid(WebTestCase):
|
|||
grid.set_label("foo", "Different")
|
||||
self.assertEqual(grid.get_label("foo"), "Different")
|
||||
|
||||
def test_set_centered(self):
|
||||
model = self.app.model
|
||||
|
||||
grid = self.make_grid(model_class=model.Setting)
|
||||
self.assertEqual(grid.centered, {})
|
||||
|
||||
# set flag
|
||||
grid.set_centered("name")
|
||||
self.assertIn("name", grid.centered)
|
||||
self.assertTrue(grid.centered["name"])
|
||||
|
||||
# clear flag
|
||||
grid.set_centered("name", False)
|
||||
self.assertIn("name", grid.centered)
|
||||
self.assertFalse(grid.centered["name"])
|
||||
|
||||
def test_is_centered(self):
|
||||
model = self.app.model
|
||||
|
||||
grid = self.make_grid(model_class=model.Setting)
|
||||
self.assertEqual(grid.centered, {})
|
||||
self.assertFalse(grid.is_centered("name"))
|
||||
|
||||
# set flag
|
||||
grid.set_centered("name")
|
||||
self.assertIn("name", grid.centered)
|
||||
self.assertTrue(grid.centered["name"])
|
||||
self.assertTrue(grid.is_centered("name"))
|
||||
|
||||
# clear flag
|
||||
grid.set_centered("name", False)
|
||||
self.assertIn("name", grid.centered)
|
||||
self.assertFalse(grid.centered["name"])
|
||||
self.assertFalse(grid.is_centered("name"))
|
||||
|
||||
def test_set_renderer(self):
|
||||
grid = self.make_grid(columns=["foo", "bar"])
|
||||
self.assertEqual(grid.renderers, {})
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue