diff --git a/src/main.py b/src/main.py index 1a9d456..a966ef8 100755 --- a/src/main.py +++ b/src/main.py @@ -1,10 +1,16 @@ #!/usr/bin/env python3 + +from pathlib import Path + +from bookstore.inventory import Inventory from ui.app import App def main() -> None: - app = App() + db_path = Path("db.sqlite3") + inventory = Inventory(db_path) + app = App(inventory) app.run() diff --git a/src/ui/app.py b/src/ui/app.py index acb3b1d..5e28d7f 100644 --- a/src/ui/app.py +++ b/src/ui/app.py @@ -1,9 +1,34 @@ -import npyscreen as nps - -from .forms import AddBookForm, BookForm +import customtkinter as ctk +from bookstore.book import Book +from bookstore.inventory import Inventory -class App(nps.NPSAppManaged): - def onStart(self): - self.addForm("MAIN", BookForm, name="Bookstore") - self.addForm("ADD_BOOK", AddBookForm, name="Add Book") +class App(ctk.CTk): + def __init__(self, inventory: Inventory, *args, **kwargs) -> None: + super(App, self).__init__(*args, **kwargs) + self.inventory = inventory + + self.geometry("600x400") + self.title("Bookstore") + ctk.set_appearance_mode("system") + self.resizable(width=True, height=True) + self.data = inventory.list_all() + + self.display_table() + + def display_table(self) -> None: + headers = Book.fields() + for col, header in enumerate(headers): + label = ctk.CTkLabel(self, text=header) + label.grid(row=0, column=col, padx=10, pady=5) + + widths = [100, 100, 100, 100, 100] + for row, book in enumerate(self.data, start=1): + for col, value in enumerate(book): + entry = ctk.CTkLabel(self, width=widths[col], text=value) + entry.grid(row=row, column=col, padx=10, pady=5) + + + def run(self) -> None: + self.mainloop() + diff --git a/src/ui/forms.py b/src/ui/forms.py deleted file mode 100644 index 66f684e..0000000 --- a/src/ui/forms.py +++ /dev/null @@ -1,24 +0,0 @@ -import npyscreen as nps -from bookstore.book import Book - -from .utils import INVENTORY -from .widget import BookGrid - - -class BookForm(nps.FormBaseNew): - def create(self): - self.grid = self.add_widget(BookGrid, columns=5, select_whole_line=True, col_titles=Book.fields()) - self.grid.values = [book.values() for book in INVENTORY.list_all()] - - -class AddBookForm(nps.ActionForm): - def create(self): - self.isbn = self.add(nps.TitleText, name="ISBN:") - self.title = self.add(nps.TitleText, name="Title:") - self.author = self.add(nps.TitleText, name="Author:") - self.price = self.add(nps.TitleText, name="Price:") - self.stock = self.add(nps.TitleText, name="Stock:") - - def on_ok(self): - book = Book(self.isbn.value, self.title.value, self.author.value, self.price.value, self.stock.value) - INVENTORY.add(book) diff --git a/src/ui/utils.py b/src/ui/utils.py deleted file mode 100644 index 8fc6ae6..0000000 --- a/src/ui/utils.py +++ /dev/null @@ -1,5 +0,0 @@ -from pathlib import Path - -from bookstore.inventory import Inventory - -INVENTORY = Inventory(Path("db.sqlite3")) diff --git a/src/ui/widget.py b/src/ui/widget.py deleted file mode 100644 index 4f54768..0000000 --- a/src/ui/widget.py +++ /dev/null @@ -1,13 +0,0 @@ -import npyscreen as nps - - -class BookGrid(nps.GridColTitles): - def custom_print_cell(self, actual_cell, cell_display_value): - if actual_cell == 4: - if int(cell_display_value) == 0: - actual_cell.color = "DANGER" - elif int(cell_display_value) < 5: - actual_cell.color = "WARNING" - else: - actual_cell.color = "DEFAULT" - return super().custom_print_cell(actual_cell, cell_display_value)