mirror of https://github.com/gmbrax/Pilgrim.git
Merge 0adb230dd7 into 8f36e5a770
This commit is contained in:
commit
398e92379b
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "Pilgrim"
|
name = "Pilgrim"
|
||||||
version = "0.0.3"
|
version = "0.0.4"
|
||||||
authors = [
|
authors = [
|
||||||
{ name="Gustavo Henrique Santos Souza de Miranda", email="gustavohssmiranda@gmail.com" }
|
{ name="Gustavo Henrique Santos Souza de Miranda", email="gustavohssmiranda@gmail.com" }
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ from textual.binding import Binding
|
||||||
from textual.screen import Screen
|
from textual.screen import Screen
|
||||||
from textual.widgets import Header, Footer, Button, Label, TextArea
|
from textual.widgets import Header, Footer, Button, Label, TextArea
|
||||||
from textual.containers import Container
|
from textual.containers import Container
|
||||||
|
from importlib.metadata import version
|
||||||
class AboutScreen(Screen[bool]):
|
class AboutScreen(Screen[bool]):
|
||||||
"""Screen to display application information."""
|
"""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.app_title = Label("Pilgrim", id="AboutScreen_AboutTitle",classes="AboutScreen_AboutTitle")
|
||||||
self.content = Label("A TUI Based Travel Diary Application", id="AboutScreen_AboutContent",
|
self.content = Label("A TUI Based Travel Diary Application", id="AboutScreen_AboutContent",
|
||||||
classes="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")
|
classes="AboutScreen_AboutVersion")
|
||||||
self.developer = Label("Developed By: Gustavo Henrique Miranda ", id="AboutScreen_AboutAuthor")
|
self.developer = Label("Developed By: Gustavo Henrique Miranda ", id="AboutScreen_AboutAuthor")
|
||||||
self.contact = Label("git.gustavomiranda.xyz", id="AboutScreen_AboutContact",
|
self.contact = Label("git.gustavomiranda.xyz", id="AboutScreen_AboutContact",
|
||||||
|
|
|
||||||
|
|
@ -206,29 +206,18 @@ class DiaryListScreen(Screen):
|
||||||
"""Action to create new diary"""
|
"""Action to create new diary"""
|
||||||
self.app.push_screen(NewDiaryModal(),self._on_new_diary_submitted)
|
self.app.push_screen(NewDiaryModal(),self._on_new_diary_submitted)
|
||||||
|
|
||||||
def _on_new_diary_submitted(self,result):
|
def _on_new_diary_submitted(self, result):
|
||||||
self.notify(str(result))
|
"""Callback after diary creation"""
|
||||||
if result:
|
if result: # Se result não é string vazia, o diário foi criado
|
||||||
self.notify(f"Creating Diary:{result}'...")
|
self.notify(f"Returning to diary list...")
|
||||||
self.call_later(self._async_create_diary,result)
|
# Atualiza a lista de diários
|
||||||
|
self.refresh_diaries()
|
||||||
else:
|
else:
|
||||||
self.notify(f"Canceled...")
|
self.notify(f"Creation 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)}")
|
|
||||||
|
|
||||||
|
|
||||||
|
def _on_screen_resume(self) -> None:
|
||||||
|
super()._on_screen_resume()
|
||||||
|
self.refresh_diaries()
|
||||||
|
|
||||||
def action_edit_selected_diary(self):
|
def action_edit_selected_diary(self):
|
||||||
"""Action to edit selected diary"""
|
"""Action to edit selected diary"""
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ from textual.widgets import Label, Input, Button
|
||||||
class EditDiaryModal(ModalScreen[tuple[int,str]]):
|
class EditDiaryModal(ModalScreen[tuple[int,str]]):
|
||||||
BINDINGS = [
|
BINDINGS = [
|
||||||
Binding("escape", "cancel", "Cancel"),
|
Binding("escape", "cancel", "Cancel"),
|
||||||
|
Binding("enter", "edit_diary", "Save",priority=True),
|
||||||
]
|
]
|
||||||
|
|
||||||
def __init__(self, diary_id: int):
|
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:
|
def on_button_pressed(self, event: Button.Pressed) -> None:
|
||||||
if event.button.id == "save_diary_button":
|
if event.button.id == "save_diary_button":
|
||||||
new_diary_name = self.name_input.value.strip()
|
self.action_edit_diary()
|
||||||
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()
|
|
||||||
elif event.button.id == "cancel_button":
|
elif event.button.id == "cancel_button":
|
||||||
self.dismiss(None)
|
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:
|
def action_cancel(self) -> None:
|
||||||
self.dismiss(None)
|
self.dismiss(None)
|
||||||
|
|
@ -4,13 +4,17 @@ from textual.containers import Vertical, Horizontal
|
||||||
from textual.screen import ModalScreen
|
from textual.screen import ModalScreen
|
||||||
from textual.widgets import Label, Input, Button
|
from textual.widgets import Label, Input, Button
|
||||||
|
|
||||||
|
from pilgrim.ui.screens.edit_entry_screen import EditEntryScreen
|
||||||
|
|
||||||
|
|
||||||
class NewDiaryModal(ModalScreen[str]):
|
class NewDiaryModal(ModalScreen[str]):
|
||||||
BINDINGS = [
|
BINDINGS = [
|
||||||
Binding("escape", "cancel", "Cancel"),
|
Binding("escape", "cancel", "Cancel"),
|
||||||
|
Binding("enter", "create_diary", "Create",priority=True),
|
||||||
]
|
]
|
||||||
def __init__(self):
|
def __init__(self,autoopen=True):
|
||||||
super().__init__()
|
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
|
self.name_input = Input(id="NewDiaryModal-NameInput",classes="NewDiaryModal-NameInput") # This ID is fine, it's specific to the input
|
||||||
|
|
||||||
def compose(self) -> ComposeResult:
|
def compose(self) -> ComposeResult:
|
||||||
|
|
@ -31,15 +35,46 @@ class NewDiaryModal(ModalScreen[str]):
|
||||||
def on_button_pressed(self, event: Button.Pressed) -> None:
|
def on_button_pressed(self, event: Button.Pressed) -> None:
|
||||||
"""Handles button clicks."""
|
"""Handles button clicks."""
|
||||||
if event.button.id == "create_diary_button":
|
if event.button.id == "create_diary_button":
|
||||||
diary_name = self.name_input.value.strip()
|
self.action_create_diary()
|
||||||
if diary_name:
|
|
||||||
self.dismiss(diary_name)
|
|
||||||
else:
|
|
||||||
self.notify("Diary name cannot be empty.", severity="warning")
|
|
||||||
self.name_input.focus()
|
|
||||||
elif event.button.id == "cancel_button":
|
elif event.button.id == "cancel_button":
|
||||||
self.dismiss("")
|
self.dismiss()
|
||||||
|
|
||||||
def action_cancel(self) -> None:
|
def action_cancel(self) -> None:
|
||||||
"""Action to cancel the modal."""
|
"""Action to cancel the modal."""
|
||||||
self.dismiss("")
|
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)}")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue