3
0
Fork 0

fix: add "centered" flag for grid columns

This commit is contained in:
Lance Edgar 2026-02-14 20:30:44 -06:00
parent 356eb21713
commit 4307b5a9eb
3 changed files with 72 additions and 0 deletions

View file

@ -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()`. 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 .. attribute:: renderers
Dict of column (cell) value renderer overrides. 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, columns=None,
data=None, data=None,
labels=None, labels=None,
centered=None,
renderers=None, renderers=None,
enums=None, enums=None,
checkable=False, 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.app = self.config.get_app()
self.set_columns(columns or self.get_columns()) self.set_columns(columns or self.get_columns())
self.centered = centered or {}
self.renderers = {} self.renderers = {}
if renderers: if renderers:
for k, val in renderers.items(): 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.labels[key]
return self.app.make_title(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): def set_renderer(self, key, renderer, **kwargs):
""" """
Set/override the value renderer for a column. Set/override the value renderer for a column.

View file

@ -169,6 +169,9 @@
<${b}-table-column field="${column['field']}" <${b}-table-column field="${column['field']}"
label="${column['label']}" label="${column['label']}"
v-slot="props" v-slot="props"
% if grid.is_centered(column['field']):
centered
% endif
:sortable="${json.dumps(column.get('sortable', False))|n}" :sortable="${json.dumps(column.get('sortable', False))|n}"
:searchable="${json.dumps(column.get('searchable', False))|n}" :searchable="${json.dumps(column.get('searchable', False))|n}"
cell-class="c_${column['field']}"> cell-class="c_${column['field']}">

View file

@ -219,6 +219,41 @@ class TestGrid(WebTestCase):
grid.set_label("foo", "Different") grid.set_label("foo", "Different")
self.assertEqual(grid.get_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): def test_set_renderer(self):
grid = self.make_grid(columns=["foo", "bar"]) grid = self.make_grid(columns=["foo", "bar"])
self.assertEqual(grid.renderers, {}) self.assertEqual(grid.renderers, {})