summaryrefslogtreecommitdiffstats
path: root/girok/calendar_cli/calendar_main.py
diff options
context:
space:
mode:
Diffstat (limited to 'girok/calendar_cli/calendar_main.py')
-rw-r--r--girok/calendar_cli/calendar_main.py194
1 files changed, 194 insertions, 0 deletions
diff --git a/girok/calendar_cli/calendar_main.py b/girok/calendar_cli/calendar_main.py
new file mode 100644
index 0000000..495deb4
--- /dev/null
+++ b/girok/calendar_cli/calendar_main.py
@@ -0,0 +1,194 @@
+import calendar
+from datetime import datetime
+
+from rich import box
+from rich.style import Style
+from rich.table import Column, Table
+from rich.text import Text
+from textual import log
+from textual.app import App, ComposeResult
+from textual.containers import Container, Horizontal, Vertical
+from textual.messages import Message
+from textual.reactive import reactive, var
+from textual.scroll_view import ScrollView
+from textual.widget import Widget
+from textual.widgets import Button, Footer, Header, Label, Placeholder, Static, Tree
+
+import girok.api.category as category_api
+import girok.calendar_cli.utils as calendar_utils
+
+from girok.calendar_cli.calendar_app import CalendarApp
+from girok.calendar_cli.calendar_container import Calendar, CalendarContainer
+from girok.calendar_cli.sidebar import CategoryTree, SidebarContainer, TagTree
+from girok.commands.task.display import display_events_by_list
+from girok.constants import TABLE_HEADER_DATE_COLOR
+
+
+class Entry(App):
+ CSS_PATH = "./calendar_main.css"
+ current_focused = "CategoryTree"
+ is_pop_up = False
+ BINDINGS = [
+ ("q", "quit", "Quit Nuro"),
+ ("u", "show_previous_month", "Show prev month"),
+ ("i", "show_next_month", "Show next month"),
+ ("y", "show_current_month", "Show current month"),
+ ("e", "focus_on_calendar", "Move to calendar"),
+ ("w", "focus_on_sidebar", "Move to sidebar"),
+ ("ctrl+j", "move_down_to_tag_tree", "Move down to tag tree"),
+ ("ctrl+k", "move_up_to_category_tree", "Move up to category tree"),
+ ("o", "close_pop_up", "Close pop up box"),
+ ("f", "toggle_files", "Toggle Files"),
+ ]
+ show_sidebar = reactive(True)
+ pilot = None
+
+ def on_mount(self):
+ self.set_focus(self.query_one(CategoryTree))
+
+ def compose(self):
+ yield CalendarApp()
+
+ # Display pop-up box when selecting a cell
+ def on_calendar_task_cell_selected(self, event: Calendar.TaskCellSelected):
+ cell_events = event.cell_events
+ year, month, day = event.year, event.month, event.day
+ table = display_events_by_list(cell_events)
+
+ self.query_one(CalendarContainer).mount(
+ Vertical(
+ Static(
+ Text(
+ f"{day} {calendar.month_name[month]} {year}",
+ style=Style(bold=True, color=TABLE_HEADER_DATE_COLOR),
+ ),
+ classes="task-pop-up-header",
+ ),
+ Container(
+ Static(table, classes="task-pop-up-table"),
+ classes="task-pop-up-table-container",
+ ),
+ classes="task-pop-up-container",
+ )
+ )
+ self.is_pop_up = True
+
+ def action_quit(self):
+ self.exit()
+
+ def action_show_next_month(self):
+ if self.is_pop_up:
+ return
+ calendar_container = self.query_one(CalendarContainer)
+ calendar_container.update_month_by_offset(1)
+
+ def action_show_previous_month(self):
+ if self.is_pop_up:
+ return
+ calendar_container = self.query_one(CalendarContainer)
+ calendar_container.update_month_by_offset(-1)
+
+ def action_show_current_month(self):
+ if self.is_pop_up:
+ return
+ calendar_container = self.query_one(CalendarContainer)
+ now = datetime.now()
+ cur_year, cur_month = now.year, now.month
+ calendar_container.update_year_and_month(cur_year, cur_month)
+
+ def action_focus_on_calendar(self):
+ if self.is_pop_up:
+ return
+ self.set_focus(self.query_one(Calendar))
+ self.current_focused = "Calendar"
+
+ cat_tree = self.query_one(CategoryTree)
+ tag_tree = self.query_one(TagTree)
+ calendar_utils.remove_left_arrow_tree(cat_tree.highlighted_node)
+ calendar_utils.remove_left_arrow_tree(tag_tree.highlighted_node)
+ calendar_utils.remove_highlight(cat_tree.highlighted_node)
+ calendar_utils.remove_highlight(tag_tree.highlighted_node)
+
+ def action_focus_on_sidebar(self):
+ if self.is_pop_up:
+ return
+ self.set_focus(self.query_one(CategoryTree))
+ self.current_focused = "CategoryTree"
+
+ cal = self.query_one(Calendar)
+
+ if self.is_pop_up:
+ return
+
+ cat_tree = self.query_one(CategoryTree)
+ calendar_utils.remove_left_arrow(cal.cur_focused_cell)
+ calendar_utils.add_highlight(cat_tree.highlighted_node)
+
+ ############# UNKNOWN ERROR - Temporary Fix ############
+ ngbrs = [
+ self.query_one("#cell0"),
+ self.query_one("#cell1"),
+ self.query_one("#cell2"),
+ self.query_one("#cell3"),
+ self.query_one("#cell4"),
+ self.query_one("#cell5"),
+ self.query_one("#cell6"),
+ ]
+ for ngbr_cell in ngbrs:
+ temp = []
+ while ngbr_cell.children:
+ child = ngbr_cell.children[0]
+ temp.append(child.render())
+ child.remove()
+
+ for child in temp:
+ ngbr_cell.mount(Static(child))
+ ######################################################
+
+ def action_move_down_to_tag_tree(self):
+ if self.is_pop_up:
+ return
+ if self.current_focused != "CategoryTree":
+ return
+ tag_tree = self.query_one(TagTree)
+ self.set_focus(tag_tree)
+ self.current_focused = "TagTree"
+ category_tree = self.query_one(CategoryTree)
+ calendar_utils.remove_highlight(category_tree.highlighted_node)
+ calendar_utils.remove_left_arrow_tree(category_tree.highlighted_node)
+ calendar_utils.add_left_arrow_tree(tag_tree.highlighted_node)
+ calendar_utils.add_highlight(tag_tree.highlighted_node)
+
+ def action_move_up_to_category_tree(self):
+ if self.is_pop_up:
+ return
+ if self.current_focused != "TagTree":
+ return
+ category_tree = self.query_one(CategoryTree)
+ self.set_focus(category_tree)
+ self.current_focused = "CategoryTree"
+ tag_tree = self.query_one(TagTree)
+ calendar_utils.remove_highlight(tag_tree.highlighted_node)
+ calendar_utils.remove_left_arrow_tree(tag_tree.highlighted_node)
+ calendar_utils.add_left_arrow_tree(category_tree.highlighted_node)
+ calendar_utils.add_highlight(category_tree.highlighted_node)
+
+ def action_close_pop_up(self):
+ if not self.is_pop_up:
+ return
+ self.query_one(".task-pop-up-container").remove()
+ self.query_one(Calendar).is_pop_up = False
+ self.is_pop_up = False
+
+ def action_toggle_files(self):
+ self.show_sidebar = not self.show_sidebar
+ sidebar_container = self.query_one(SidebarContainer)
+ if self.show_sidebar:
+ sidebar_container.styles.display = "block"
+ else:
+ sidebar_container.styles.display = "none"
+
+
+if __name__ == "__main__":
+ app = Entry()
+ app.run()