Add a confirmation dialogue when deleting activites..

..which have >0 facts.

Re #2
This commit is contained in:
3wc 2023-12-25 19:28:42 -03:00
parent 2a1d13236b
commit fea15472e3
2 changed files with 60 additions and 5 deletions

View File

@ -18,7 +18,7 @@ DataTable:focus .datatable--cursor {
width: 50%; width: 50%;
} }
ActivityEditScreen, ActivityMappingScreen { ActivityEditScreen, ActivityMappingScreen, ActivityDeleteConfirmScreen {
align: center middle; align: center middle;
} }
@ -62,3 +62,25 @@ ActivityMappingScreen AutoComplete {
ActivityEditScreen Input { ActivityEditScreen Input {
width: 60; width: 60;
} }
#dialog {
grid-size: 2;
grid-gutter: 1 2;
grid-rows: 1fr 3;
padding: 0 1;
width: 60;
height: 11;
border: thick $background 80%;
background: $surface;
}
#question {
column-span: 2;
height: 1fr;
width: 1fr;
content-align: center middle;
}
Button {
width: 100%;
}

View File

@ -4,7 +4,7 @@ from textual import on
from textual.app import ComposeResult from textual.app import ComposeResult
from textual.binding import Binding from textual.binding import Binding
from textual.coordinate import Coordinate from textual.coordinate import Coordinate
from textual.containers import Horizontal, Vertical from textual.containers import Horizontal, Vertical, Grid
from textual.events import DescendantBlur from textual.events import DescendantBlur
from textual.screen import Screen, ModalScreen from textual.screen import Screen, ModalScreen
from textual.widgets import ( from textual.widgets import (
@ -16,6 +16,7 @@ from textual.widgets import (
Checkbox, Checkbox,
TabbedContent, TabbedContent,
TabPane, TabPane,
Button
) )
from peewee import fn, JOIN from peewee import fn, JOIN
@ -273,6 +274,29 @@ class ActivityMappingScreen(ModalScreen):
self.dismiss(None) self.dismiss(None)
class ActivityDeleteConfirmScreen(ModalScreen):
BINDINGS = [
("escape", "cancel", "Cancel"),
]
def compose(self) -> ComposeResult:
yield Grid(
Label("Are you sure you want to delete this activity?", id="question"),
Button("Confirm", variant="error", id="confirm"),
Button("Cancel", variant="primary", id="cancel"),
id="dialog",
)
def on_button_pressed(self, event: Button.Pressed) -> None:
if event.button.id == "quit":
self.dismiss(True)
else:
self.dismiss(False)
def action_cancel(self):
self.dismiss(False)
class ActivityList(ListPane): class ActivityList(ListPane):
BINDINGS = [ BINDINGS = [
("s", "sort", "Sort"), ("s", "sort", "Sort"),
@ -384,11 +408,20 @@ class ActivityList(ListPane):
) )
activity = HamsterActivity.get(id=activity_id) activity = HamsterActivity.get(id=activity_id)
def check_delete(delete: bool) -> None:
"""Called when QuitScreen is dismissed."""
if delete:
activity.delete_instance() activity.delete_instance()
# supply the row key to `remove_row` to delete the row. # supply the row key to `remove_row` to delete the row.
self.table.remove_row(row_key) self.table.remove_row(row_key)
if activity.facts.count() > 0:
self.app.push_screen(ActivityDeleteConfirmScreen(), check_delete)
else:
check_delete(True)
def action_move_facts(self) -> None: def action_move_facts(self) -> None:
row_idx: int = self.table.cursor_row row_idx: int = self.table.cursor_row
row_cells = self.table.get_row_at(row_idx) row_cells = self.table.get_row_at(row_idx)