Added keyboard support
This commit is contained in:
@@ -16,6 +16,7 @@ from myfasthtml.controls.DataGridColumnsManager import DataGridColumnsManager
|
|||||||
from myfasthtml.controls.DataGridFormattingEditor import DataGridFormattingEditor
|
from myfasthtml.controls.DataGridFormattingEditor import DataGridFormattingEditor
|
||||||
from myfasthtml.controls.DataGridQuery import DataGridQuery, DG_QUERY_FILTER
|
from myfasthtml.controls.DataGridQuery import DataGridQuery, DG_QUERY_FILTER
|
||||||
from myfasthtml.controls.DslEditor import DslEditorConf
|
from myfasthtml.controls.DslEditor import DslEditorConf
|
||||||
|
from myfasthtml.controls.Keyboard import Keyboard
|
||||||
from myfasthtml.controls.Mouse import Mouse
|
from myfasthtml.controls.Mouse import Mouse
|
||||||
from myfasthtml.controls.Panel import Panel, PanelConf
|
from myfasthtml.controls.Panel import Panel, PanelConf
|
||||||
from myfasthtml.controls.datagrid_objects import DataGridColumnState, DataGridRowState, \
|
from myfasthtml.controls.datagrid_objects import DataGridColumnState, DataGridRowState, \
|
||||||
@@ -157,6 +158,13 @@ class Commands(BaseCommands):
|
|||||||
self._owner.on_click
|
self._owner.on_click
|
||||||
).htmx(target=f"#tsm_{self._id}")
|
).htmx(target=f"#tsm_{self._id}")
|
||||||
|
|
||||||
|
def on_key_pressed(self):
|
||||||
|
return Command("OnKeyPressed",
|
||||||
|
"Key pressed on the table",
|
||||||
|
self._owner,
|
||||||
|
self._owner.on_key_pressed
|
||||||
|
).htmx(target=f"#tsm_{self._id}")
|
||||||
|
|
||||||
def on_mouse_selection(self):
|
def on_mouse_selection(self):
|
||||||
return Command("OnMouseSelection",
|
return Command("OnMouseSelection",
|
||||||
"Range selection with mouse",
|
"Range selection with mouse",
|
||||||
@@ -252,6 +260,10 @@ class DataGrid(MultipleInstance):
|
|||||||
"shift+click": {"command": self.commands.on_click(), "hx_vals": "js:getCellId()"},
|
"shift+click": {"command": self.commands.on_click(), "hx_vals": "js:getCellId()"},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
self._key_support = {
|
||||||
|
"esc": self.commands.on_key_pressed(),
|
||||||
|
}
|
||||||
|
|
||||||
logger.debug(f"DataGrid '{self.get_table_name()}' with id='{self._id}' created.")
|
logger.debug(f"DataGrid '{self.get_table_name()}' with id='{self._id}' created.")
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@@ -521,6 +533,14 @@ class DataGrid(MultipleInstance):
|
|||||||
|
|
||||||
return self.render_partial()
|
return self.render_partial()
|
||||||
|
|
||||||
|
def on_key_pressed(self, combination, has_focus, is_inside):
|
||||||
|
logger.debug(f"on_key_pressed {combination=} {has_focus=} {is_inside=}")
|
||||||
|
if combination == "esc":
|
||||||
|
self._update_current_position(None)
|
||||||
|
self._state.selection.extra_selected.clear()
|
||||||
|
|
||||||
|
return self.render_partial()
|
||||||
|
|
||||||
def on_column_changed(self):
|
def on_column_changed(self):
|
||||||
logger.debug("on_column_changed")
|
logger.debug("on_column_changed")
|
||||||
return self.render_partial("table")
|
return self.render_partial("table")
|
||||||
@@ -876,6 +896,7 @@ class DataGrid(MultipleInstance):
|
|||||||
self._panel.set_main(self.mk_table_wrapper()),
|
self._panel.set_main(self.mk_table_wrapper()),
|
||||||
Script(f"initDataGrid('{self._id}');"),
|
Script(f"initDataGrid('{self._id}');"),
|
||||||
Mouse(self, combinations=self._mouse_support, _id="-mouse"),
|
Mouse(self, combinations=self._mouse_support, _id="-mouse"),
|
||||||
|
Keyboard(self, combinations=self._key_support, _id="-keyboard"),
|
||||||
id=self._id,
|
id=self._id,
|
||||||
cls="grid",
|
cls="grid",
|
||||||
style="height: 100%; grid-template-rows: auto 1fr;"
|
style="height: 100%; grid-template-rows: auto 1fr;"
|
||||||
|
|||||||
Reference in New Issue
Block a user