diff --git a/pyproject.toml b/pyproject.toml index 6657a3e..eb7ec6b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ [project] name = "Pilgrim" - version = "0.0.3" + version = "0.0.4" authors = [ { name="Gustavo Henrique Santos Souza de Miranda", email="gustavohssmiranda@gmail.com" } ] diff --git a/src/pilgrim/ui/screens/about_screen.py b/src/pilgrim/ui/screens/about_screen.py index 52626bf..eb6cd80 100644 --- a/src/pilgrim/ui/screens/about_screen.py +++ b/src/pilgrim/ui/screens/about_screen.py @@ -3,7 +3,7 @@ from textual.binding import Binding from textual.screen import Screen from textual.widgets import Header, Footer, Button, Label, TextArea from textual.containers import Container - +from importlib.metadata import version class AboutScreen(Screen[bool]): """Screen to display application information.""" @@ -20,7 +20,7 @@ class AboutScreen(Screen[bool]): self.app_title = Label("Pilgrim", id="AboutScreen_AboutTitle",classes="AboutScreen_AboutTitle") self.content = Label("A TUI Based Travel Diary Application", id="AboutScreen_AboutContent", classes="AboutScreen_AboutContent") - self.version = Label("Version: 0.0.1", id="AboutScreen_AboutVersion", + self.version = Label(f"Version: {version('Pilgrim')}", id="AboutScreen_AboutVersion", classes="AboutScreen_AboutVersion") self.developer = Label("Developed By: Gustavo Henrique Miranda ", id="AboutScreen_AboutAuthor") self.contact = Label("git.gustavomiranda.xyz", id="AboutScreen_AboutContact", diff --git a/src/pilgrim/ui/screens/diary_list_screen.py b/src/pilgrim/ui/screens/diary_list_screen.py index 066fbae..b553ed2 100644 --- a/src/pilgrim/ui/screens/diary_list_screen.py +++ b/src/pilgrim/ui/screens/diary_list_screen.py @@ -206,29 +206,17 @@ class DiaryListScreen(Screen): """Action to create new diary""" self.app.push_screen(NewDiaryModal(),self._on_new_diary_submitted) - def _on_new_diary_submitted(self,result): - self.notify(str(result)) - if result: - self.notify(f"Creating Diary:{result}'...") - self.call_later(self._async_create_diary,result) + def _on_new_diary_submitted(self, result): + """Callback after diary creation""" + if result: # Se result não é string vazia, o diário foi criado + self.notify(f"Returning to diary list...") + # Atualiza a lista de diários + self.refresh_diaries() else: - self.notify(f"Canceled...") - - async def _async_create_diary(self,name: str): - - try: - service = self.app.service_manager.get_travel_diary_service() - created_diary = await service.async_create(name) - if created_diary: - self.diary_id_map[created_diary.id] = created_diary.id - await self.async_refresh_diaries() - self.notify(f"Diary: '{name}' created!") - else: - self.notify("Error Creating the diary") - except Exception as e: - self.notify(f"Exception on creating the diary: {str(e)}") - + self.notify(f"Creation canceled...") + def _on_screen_resume(self) -> None: + self.refresh_diaries() def action_edit_selected_diary(self): """Action to edit selected diary""" diff --git a/src/pilgrim/ui/screens/edit_diary_modal.py b/src/pilgrim/ui/screens/edit_diary_modal.py index 4f577eb..e54b71f 100644 --- a/src/pilgrim/ui/screens/edit_diary_modal.py +++ b/src/pilgrim/ui/screens/edit_diary_modal.py @@ -8,6 +8,7 @@ from textual.widgets import Label, Input, Button class EditDiaryModal(ModalScreen[tuple[int,str]]): BINDINGS = [ Binding("escape", "cancel", "Cancel"), + Binding("enter", "edit_diary", "Save",priority=True), ] def __init__(self, diary_id: int): @@ -32,17 +33,28 @@ class EditDiaryModal(ModalScreen[tuple[int,str]]): def on_button_pressed(self, event: Button.Pressed) -> None: if event.button.id == "save_diary_button": - new_diary_name = self.name_input.value.strip() - if new_diary_name and new_diary_name != self.current_diary_name: - self.dismiss((self.diary_id, new_diary_name)) - elif new_diary_name == self.current_diary_name: - self.notify("No changes made.", severity="warning") - self.dismiss(None) - else: - self.notify("Diary name cannot be empty.", severity="warning") - self.name_input.focus() + self.action_edit_diary() elif event.button.id == "cancel_button": self.dismiss(None) + def on_key(self, event): + if event.key == "enter": + self.action_edit_diary() + event.prevent_default() + + def action_edit_diary(self) -> None: + new_diary_name = self.name_input.value.strip() + if new_diary_name and new_diary_name != self.current_diary_name: + self.dismiss((self.diary_id, new_diary_name)) + elif new_diary_name == self.current_diary_name: + self.notify("No changes made.", severity="warning") + self.dismiss(None) + else: + self.notify("Diary name cannot be empty.", severity="warning") + self.name_input.focus() + + def on_input_submitted(self, event: Input.Submitted) -> None: + if event.input.id == "edit_diary_name_input": + self.action_edit_diary() def action_cancel(self) -> None: self.dismiss(None) \ No newline at end of file diff --git a/src/pilgrim/ui/screens/new_diary_modal.py b/src/pilgrim/ui/screens/new_diary_modal.py index 2695216..e91f516 100644 --- a/src/pilgrim/ui/screens/new_diary_modal.py +++ b/src/pilgrim/ui/screens/new_diary_modal.py @@ -4,13 +4,17 @@ from textual.containers import Vertical, Horizontal from textual.screen import ModalScreen from textual.widgets import Label, Input, Button +from pilgrim.ui.screens.edit_entry_screen import EditEntryScreen + class NewDiaryModal(ModalScreen[str]): BINDINGS = [ Binding("escape", "cancel", "Cancel"), + Binding("enter", "create_diary", "Create",priority=True), ] - def __init__(self): + def __init__(self,autoopen=True): super().__init__() + self.auto_open = autoopen self.name_input = Input(id="NewDiaryModal-NameInput",classes="NewDiaryModal-NameInput") # This ID is fine, it's specific to the input def compose(self) -> ComposeResult: @@ -31,15 +35,46 @@ class NewDiaryModal(ModalScreen[str]): def on_button_pressed(self, event: Button.Pressed) -> None: """Handles button clicks.""" if event.button.id == "create_diary_button": - diary_name = self.name_input.value.strip() - if diary_name: - self.dismiss(diary_name) - else: - self.notify("Diary name cannot be empty.", severity="warning") - self.name_input.focus() + self.action_create_diary() elif event.button.id == "cancel_button": - self.dismiss("") + self.dismiss() def action_cancel(self) -> None: """Action to cancel the modal.""" - self.dismiss("") \ No newline at end of file + self.dismiss("") + + def action_create_diary(self) -> None: + diary_name = self.name_input.value.strip() + if diary_name: + + self.call_later(self._async_create_diary, diary_name) + + else: + self.notify("Diary name cannot be empty.", severity="warning") + self.name_input.focus() + + def on_input_submitted(self, event: Input.Submitted) -> None: + if event.input.id == "NewDiaryModal-NameInput": + self.action_create_diary() + + async def _async_create_diary(self, name: str): + + try: + service = self.app.service_manager.get_travel_diary_service() + created_diary = await service.async_create(name) + if created_diary: + self.dismiss(name) + + if self.auto_open: + self.app.push_screen(EditEntryScreen(diary_id=created_diary.id)) + + self.notify(f"Diary: '{name}' created!") + else: + self.notify("Error Creating the diary") + except Exception as e: + self.notify(f"Exception on creating the diary: {str(e)}") + + + + +