# 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') init_books = db.get_books(conn) init_filters = [ 'Reading', models.all_genres, '' ] add_book_button = Gtk.Button(label='Ajouter un livre') add_book_button.connect('clicked', lambda _: BookForm(self, resources, library, conn, self._msg).present()) header = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL) utils.set_margin(header, 20) self._filters = Filters(init_books, init_filters, 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._books = BookFlow(self, resources, library, ereader, conn, init_books, init_filters, self._msg) box.append(self._books) self.set_child(box) def _msg(self, msg): match msg: case ['progress-selected', progress]: self._books.update_filters(self._filters.get()) case ['genre-selected', genre]: self._books.update_filters(self._filters.get()) case ['search-updated', search]: self._books.update_filters(self._filters.get()) case ['book-saved', book_id, data]: self._filters.select_progress(data['progress']) if not self._filters.get_genre() in data['genres']: self._filters.set_genre(models.all_genres) self._filters.actualize_genres(self._books.get()) if book_id in self._books.get(): self._books.remove(book_id) self._books.add(book_id, data) self._books.select_book(book_id) case ['book-deleted', book_id, data]: self._filters.actualize_genres(self._books.get()) self._books.remove(book_id)