]> git.phdru.name Git - m_librarian.git/commitdiff
Refactor(wx): Refactor common code
authorOleg Broytman <phd@phdru.name>
Sun, 7 Jan 2024 21:26:08 +0000 (00:26 +0300)
committerOleg Broytman <phd@phdru.name>
Sun, 7 Jan 2024 21:26:08 +0000 (00:26 +0300)
[skip ci]

m_librarian/wx/Grids.py [new file with mode: 0644]
m_librarian/wx/ListAuthors.py
m_librarian/wx/ListBooks.py

diff --git a/m_librarian/wx/Grids.py b/m_librarian/wx/Grids.py
new file mode 100644 (file)
index 0000000..415f684
--- /dev/null
@@ -0,0 +1,36 @@
+import wx, wx.grid  # noqa: E401 multiple imports on one line
+from .AWindow import AWindow
+
+
+class GridPanel(wx.Panel):
+
+    def __init__(self, parent, param):
+        wx.Panel.__init__(self, parent)
+        self.param = param
+
+        vsizer = wx.BoxSizer(wx.VERTICAL)
+        self.SetSizer(vsizer)
+
+        self.grid = grid = wx.grid.Grid(self)
+        vsizer.Add(grid, 0, wx.EXPAND, 0)
+
+        self.InitGrid()
+
+    def InitGrid(self):
+        raise NotImplementedError
+
+
+class GridWindow(AWindow):
+
+    # Subclasses must override these
+    session_config_section_name = None
+    window_title = None
+    GridPanelClass = GridPanel
+
+    def __init__(self, parent, param):
+        self.param = param
+        AWindow.__init__(self, parent)
+
+    def OnInit(self):
+        AWindow.OnInit(self)
+        self.GridPanelClass(self, self.param)
index 15cb59cf3c45c6054a7d9234745c6631b02bf557..3d73a2827c7d3949707afe07298b43ffe930b15e 100644 (file)
@@ -4,42 +4,16 @@ 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)
@@ -66,7 +40,7 @@ class ListAuthorsPanel(wx.Panel):
         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]
         _books_by_author = books_by_author(author.id)
         ListBooksWindow(self, _books_by_author)
@@ -81,3 +55,10 @@ class ListAuthorsPanel(wx.Panel):
             self.listBooks(row)
         else:
             event.Skip()
+
+
+class ListAuthorsWindow(GridWindow):
+
+    session_config_section_name = 'list_authors'
+    window_title = u"m_Librarian: Список авторов"
+    GridPanelClass = ListAuthorsPanel
index 955ef851782e3c40653b9d8fdacc0cf4edc79c20..3bcd331ab152c0d217657ad71490959e6ca3fbf6 100644 (file)
@@ -3,41 +3,15 @@
 import wx
 from ..compat import string_type, unicode_type
 from ..translations import translations
-from .AWindow import AWindow
+from .Grids import GridWindow, GridPanel
 
 
-class ListBooksWindow(AWindow):
-
-    session_config_section_name = 'list_books'
-    window_title = u"m_Librarian: Список книг"
-
-    def __init__(self, parent, books_by_author):
-        self.books_by_author = books_by_author
-        AWindow.__init__(self, parent)
-
-    def OnInit(self):
-        AWindow.OnInit(self)
-        ListBooksPanel(self, self.books_by_author)
-
-
-class ListBooksPanel(wx.Panel):
-
-    def __init__(self, parent, books_by_author):
-        wx.Panel.__init__(self, parent)
-        self.books_by_author = books_by_author
-
-        list_books_sizer = wx.BoxSizer(wx.VERTICAL)
-        self.SetSizer(list_books_sizer)
-
-        self.grid = grid = wx.grid.Grid(self)
-        list_books_sizer.Add(grid, 0, wx.EXPAND, 0)
-
-        self.InitGrid()
+class ListBooksPanel(GridPanel):
 
     def InitGrid(self):
         _ = getattr(translations, 'ugettext', None) or translations.gettext
-        books_by_author = self.books_by_author['books_by_author']
-        columns = self.books_by_author['columns']
+        books_by_author = self.param['books_by_author']
+        columns = self.param['columns']
         author = next(iter(books_by_author))
         books = books_by_author[author]
         series = {book.series for book in books}
@@ -77,3 +51,10 @@ class ListBooksPanel(wx.Panel):
             row += 1
         grid.AutoSizeColumns()
         grid.AutoSizeRows()
+
+
+class ListBooksWindow(GridWindow):
+
+    session_config_section_name = 'list_books'
+    window_title = u"m_Librarian: Список книг"
+    GridPanelClass = ListBooksPanel