aboutsummaryrefslogtreecommitdiff
path: root/src/main_window.py
diff options
context:
space:
mode:
authorJoris Guyonvarch2025-12-29 17:35:51 +0100
committerJoris Guyonvarch2025-12-29 17:35:51 +0100
commit31d87c86ce2a5f2a8f8aa1d404e39a093e975da7 (patch)
tree3f5e7f20544c3c05137e58803ac24973346d458c /src/main_window.py
parent64be629f81dc30f865d84958fc3f68a6217e6482 (diff)
Allow filtering by genre
Diffstat (limited to 'src/main_window.py')
-rw-r--r--src/main_window.py71
1 files changed, 71 insertions, 0 deletions
diff --git a/src/main_window.py b/src/main_window.py
new file mode 100644
index 0000000..420b4ea
--- /dev/null
+++ b/src/main_window.py
@@ -0,0 +1,71 @@
+# To add CSS
+# https://github.com/Taiko2k/GTK4PythonTutorial/blob/main/README.md#adding-your-custom-css-stylesheet
+
+import gi
+gi.require_version('Gtk', '4.0')
+from gi.repository import Gtk
+
+from src.book_flow import BookFlow
+from src.filters import Filters
+from src.book_form import BookForm
+import src.utils as utils
+import src.db as db
+import src.models as models
+
+class MainWindow(Gtk.ApplicationWindow):
+ def __init__(self, resources, library, ereader, conn, *args, **kwargs):
+ super().__init__(*args, **kwargs)
+
+ utils.set_header_bar(self, 'Books')
+
+ # State
+ self._books = db.get_books(conn)
+ self._progress = 'Reading'
+ self._genres = models.get_genres(self._books)
+ self._genre = models.all_genres
+
+ scrolled_window = Gtk.ScrolledWindow()
+ self.set_child(scrolled_window)
+
+ add_book_button = Gtk.Button(label='Ajouter un livre')
+ add_book_button.connect('clicked', lambda _: BookForm(self, resources, library, conn, self._progress, self._msg).present())
+
+ header = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
+ utils.set_margin(header, 20)
+ self._filters = Filters(self._books, self._progress, self._genres, self._genre, self._msg)
+ self._filters.set_hexpand(True)
+ header.append(self._filters)
+ header.append(add_book_button)
+
+ box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=0)
+ box.append(header)
+ self._book_flow = BookFlow(self, resources, library, ereader, conn, self._books, self._progress, self._genre, self._msg)
+ box.append(self._book_flow)
+ scrolled_window.set_child(box)
+
+ def _msg(self, msg):
+ match msg:
+ case ['progress-selected', progress]:
+ self._progress = progress
+ self._book_flow.reset(self._books, self._progress, self._genre)
+ case ['genre-selected', genre]:
+ self._genre = genre
+ self._book_flow.reset(self._books, self._progress, self._genre)
+ case ['book-saved', book_id, data]:
+ self._books[book_id] = data
+ self._progress = data['progress']
+ self._filters.select_progress(data['progress'])
+ if not self._genre in data['genres']:
+ self._genre = models.all_genres
+ self._actualize_genres()
+ self._book_flow.reset(self._books, self._progress, self._genre, book_id)
+ self._book_flow.select_book(book_id)
+ case ['book-deleted', book_id, data]:
+ del self._books[book_id]
+ self._actualize_genres()
+ self._book_flow.reset(self._books, self._progress, self._genre)
+
+ def _actualize_genres(self):
+ self._genres = models.get_genres(self._books)
+ self._genre = self._genre if self._genre in self._genres else models.all_genres
+ self._filters.actualize_genres(self._genres, self._genre)