# 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 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) self.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)