diff options
| author | Joris Guyonvarch | 2025-12-29 17:35:51 +0100 |
|---|---|---|
| committer | Joris Guyonvarch | 2025-12-29 17:35:51 +0100 |
| commit | 31d87c86ce2a5f2a8f8aa1d404e39a093e975da7 (patch) | |
| tree | 3f5e7f20544c3c05137e58803ac24973346d458c /src/main_window.py | |
| parent | 64be629f81dc30f865d84958fc3f68a6217e6482 (diff) | |
Allow filtering by genre
Diffstat (limited to 'src/main_window.py')
| -rw-r--r-- | src/main_window.py | 71 |
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) |
