]> git.phdru.name Git - m_librarian.git/blobdiff - m_librarian/wx/ListAuthors.py
Feat(wx): Catch `Escape` in the grid and close the window
[m_librarian.git] / m_librarian / wx / ListAuthors.py
index 96f5e8ba56e942bf8977adc2c8beda5b5097a3f4..8f18a7a6c29ec42aa1a96f103f363189e681fa07 100644 (file)
@@ -2,43 +2,18 @@
 
 import wx, wx.grid  # noqa: E401 multiple imports on one line
 from ..compat import string_type, unicode_type
+from ..search import books_by_author
 from ..translations import translations
-from .AWindow import AWindow
+from .Grids import GridWindow, GridPanel
 from .ListBooks import ListBooksWindow
 
 
-class ListAuthorsWindow(AWindow):
-
-    session_config_section_name = 'list_authors'
-    window_title = u"m_Librarian: Список авторов"
-
-    def __init__(self, parent, search_authors_results):
-        self.search_authors_results = search_authors_results
-        AWindow.__init__(self, parent)
-
-    def OnInit(self):
-        AWindow.OnInit(self)
-        ListAuthorsPanel(self, self.search_authors_results)
-
-
-class ListAuthorsPanel(wx.Panel):
-
-    def __init__(self, parent, search_authors_results):
-        wx.Panel.__init__(self, parent)
-        self.search_authors_results = search_authors_results
-
-        list_authors_sizer = wx.BoxSizer(wx.VERTICAL)
-        self.SetSizer(list_authors_sizer)
-
-        self.grid = grid = wx.grid.Grid(self)
-        list_authors_sizer.Add(grid, 0, wx.EXPAND, 0)
-
-        self.InitGrid()
+class ListAuthorsPanel(GridPanel):
 
     def InitGrid(self):
         _ = getattr(translations, 'ugettext', None) or translations.gettext
-        authors = self.search_authors_results['authors']
-        columns = self.search_authors_results['columns']
+        authors = self.param['authors']
+        columns = self.param['columns']
         grid = self.grid
         grid.CreateGrid(len(authors), len(columns))
         grid.EnableEditing(False)
@@ -61,21 +36,28 @@ class ListAuthorsPanel(wx.Panel):
         grid.AutoSizeColumns()
         grid.AutoSizeRows()
 
-        grid.Bind(wx.grid.EVT_GRID_CELL_LEFT_DCLICK, self.OnDClick)
-        grid.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
-
     def listBooks(self, row):
-        authors = self.search_authors_results['authors']
+        authors = self.param['authors']
         author = authors[row]
-        ListBooksWindow(self, author)
+        _books_by_author = books_by_author(author.id)
+        ListBooksWindow(self, _books_by_author)
 
     def OnDClick(self, event):
         row = event.GetRow()
         self.listBooks(row)
 
     def OnKeyDown(self, event):
-        if event.GetKeyCode() in (wx.WXK_RETURN, wx.WXK_NUMPAD_ENTER):
+        if event.GetKeyCode() == wx.WXK_ESCAPE:
+            self.Parent.Close()
+        elif event.GetKeyCode() in (wx.WXK_RETURN, wx.WXK_NUMPAD_ENTER):
             row = self.grid.GetGridCursorRow()
             self.listBooks(row)
         else:
             event.Skip()
+
+
+class ListAuthorsWindow(GridWindow):
+
+    session_config_section_name = 'list_authors'
+    window_title = u"m_Librarian: Список авторов"
+    GridPanelClass = ListAuthorsPanel