]> git.phdru.name Git - m_librarian.git/blob - m_librarian/wx/Grids.py
Feat(wx): Catch `Escape` in the grid and close the window
[m_librarian.git] / m_librarian / wx / Grids.py
1 import wx, wx.grid  # noqa: E401 multiple imports on one line
2 from .AWindow import AWindow
3
4
5 class GridPanel(wx.Panel):
6
7     def __init__(self, parent, param):
8         wx.Panel.__init__(self, parent)
9         self.param = param
10
11         vsizer = wx.BoxSizer(wx.VERTICAL)
12         self.SetSizer(vsizer)
13
14         self.grid = grid = wx.grid.Grid(self)
15         vsizer.Add(grid, 0, wx.EXPAND, 0)
16
17         grid.Bind(wx.grid.EVT_GRID_CELL_LEFT_DCLICK, self.OnDClick)
18         grid.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
19
20         self.InitGrid()
21         grid.SetFocus()
22
23         parent.Bind(wx.EVT_ACTIVATE, self.OnActivate)
24         parent.Bind(wx.EVT_SET_FOCUS, self.OnSetFocus)
25         self.Bind(wx.EVT_ACTIVATE, self.OnActivate)
26         self.Bind(wx.EVT_SET_FOCUS, self.OnSetFocus)
27
28     def InitGrid(self):
29         raise NotImplementedError
30
31     def OnDClick(self, event):
32         raise NotImplementedError
33
34     def OnKeyDown(self, event):
35         raise NotImplementedError
36
37     def OnActivate(self, event):
38         if event.GetActive():
39             self.grid.SetFocus()
40
41     def OnSetFocus(self, event):
42         self.grid.SetFocus()
43
44
45 class GridWindow(AWindow):
46
47     # Subclasses must override these
48     session_config_section_name = None
49     window_title = None
50     GridPanelClass = GridPanel
51
52     def __init__(self, parent, param):
53         self.param = param
54         AWindow.__init__(self, parent)
55
56     def OnInit(self):
57         AWindow.OnInit(self)
58         self.panel = self.GridPanelClass(self, self.param)