From 8c26fe544e95de9ea0d4ed0c10fb5ab4ba91078b Mon Sep 17 00:00:00 2001 From: itdominator <1itdominator@gmail.com> Date: Sat, 1 Apr 2023 23:59:20 -0500 Subject: [PATCH] addeed dialogs --- src/core/controller.py | 2 + src/core/widgets/dialogs/__init__.py | 3 + src/core/widgets/dialogs/about_widget.py | 49 +++++++++++ src/core/widgets/dialogs/message_widget.py | 87 ++++++++++++++++++++ src/core/widgets/page_widget.py | 4 +- src/core/widgets/pages/pages_widget.py | 15 +++- src/core/widgets/sections/sections_widget.py | 8 +- 7 files changed, 162 insertions(+), 6 deletions(-) create mode 100644 src/core/widgets/dialogs/__init__.py create mode 100644 src/core/widgets/dialogs/about_widget.py create mode 100644 src/core/widgets/dialogs/message_widget.py diff --git a/src/core/controller.py b/src/core/controller.py index 577f72f..bd29512 100644 --- a/src/core/controller.py +++ b/src/core/controller.py @@ -12,6 +12,7 @@ from gi.repository import GLib # Application imports from .mixins.signals_mixins import SignalsMixins from .controller_data import ControllerData +from .widgets.dialogs.message_widget import MessageWidget from .widgets.create_notebook_widget import CreateNotebookWidget from .widgets.sections.sections_widget import Sections @@ -58,6 +59,7 @@ class Controller(SignalsMixins, ControllerData): event_system.subscribe("load_notebook_data", self._load_notebook_data) def _load_widgets(self): + MessageWidget() CreateNotebookWidget() def load_glade_file(self): diff --git a/src/core/widgets/dialogs/__init__.py b/src/core/widgets/dialogs/__init__.py new file mode 100644 index 0000000..56cc015 --- /dev/null +++ b/src/core/widgets/dialogs/__init__.py @@ -0,0 +1,3 @@ +""" + Dialogs module +""" diff --git a/src/core/widgets/dialogs/about_widget.py b/src/core/widgets/dialogs/about_widget.py new file mode 100644 index 0000000..931ca62 --- /dev/null +++ b/src/core/widgets/dialogs/about_widget.py @@ -0,0 +1,49 @@ +# Python imports + +# Lib imports +import gi +gi.require_version('Gtk', '3.0') +from gi.repository import Gtk + +# Application imports + + + + +class AboutWidget: + """docstring for AboutWidget.""" + + def __init__(self): + super(AboutWidget, self).__init__() + + _GLADE_FILE = f"{settings.get_ui_widgets_path()}/about_ui.glade" + self._builder = Gtk.Builder() + self._builder.add_from_file(_GLADE_FILE) + + self._setup_styling() + self._setup_signals() + self._load_widgets() + + + def _setup_styling(self): + ... + + def _setup_signals(self): + event_system.subscribe("show_about_page", self.show_about_page) + event_system.subscribe("hide_about_page", self.hide_about_page) + settings.register_signals_to_builder([self,], self._builder) + + def _load_widgets(self): + builder = settings.get_builder() + + self.about_page = self._builder.get_object("about_page") + builder.expose_object(f"about_page", self.about_page) + + + def show_about_page(self, widget=None, eve=None): + response = self.about_page.run() + if response in [Gtk.ResponseType.CANCEL, Gtk.ResponseType.DELETE_EVENT]: + self.hide_about_page() + + def hide_about_page(self, widget=None, eve=None): + self.about_page.hide() diff --git a/src/core/widgets/dialogs/message_widget.py b/src/core/widgets/dialogs/message_widget.py new file mode 100644 index 0000000..1029da4 --- /dev/null +++ b/src/core/widgets/dialogs/message_widget.py @@ -0,0 +1,87 @@ +# Python imports +import os +import shutil + +# Lib imports +import gi +gi.require_version('Gtk', '3.0') +from gi.repository import Gtk +from gi.repository import Gio + +# Application imports + + + +class MessageWidget(Gtk.MessageDialog): + """docstring for MessageWidget.""" + + def __init__(self): + super(MessageWidget, self).__init__() + + self._setup_styling() + self._setup_signals() + self._subscribe_to_events() + self._load_widgets() + + + def _setup_styling(self): + self.type = Gtk.MessageType.WARNING + + def _setup_signals(self): + ... + + def _subscribe_to_events(self): + event_system.subscribe("delete_files", self.delete_files) + + def _load_widgets(self): + message_area = self.get_message_area() + message_area.get_children()[0].set_label("Alert!") + message_area.show_all() + + self.set_image( Gtk.Image.new_from_icon_name("user-alert", 16) ) + self.add_buttons(Gtk.STOCK_NO, Gtk.ResponseType.NO) + self.add_buttons(Gtk.STOCK_YES, Gtk.ResponseType.YES) + + def delete_files(self, widget = None, eve = None, uris = None, msg = f"Do you really want to delete the file(s)?"): + response = None + + self.format_secondary_text(msg) + for uri in uris: + file = Gio.File.new_for_path(uri) + + if not response: + response = self.run() + self.hide() + + if response == Gtk.ResponseType.YES: + type = file.query_file_type(flags=Gio.FileQueryInfoFlags.NONE) + + if type == Gio.FileType.DIRECTORY: + self.delete_file( file.get_path() ) + else: + file.delete(cancellable = None) + else: + break + + return response + + def delete_file(self, to_delete_file): + try: + logger.debug(f"Deleting: {to_delete_file}") + if os.path.exists(to_delete_file): + if os.path.isfile(to_delete_file): + os.remove(to_delete_file) + elif os.path.isdir(to_delete_file): + shutil.rmtree(to_delete_file) + else: + logger.debug("An error occured deleting the file:") + return False + else: + logger.debug("The folder/file does not exist") + return False + except Exception as e: + logger.debug("An error occured deleting the file:") + logger.debug( repr(e) ) + return False + + return True diff --git a/src/core/widgets/page_widget.py b/src/core/widgets/page_widget.py index 333f51e..515b5d5 100644 --- a/src/core/widgets/page_widget.py +++ b/src/core/widgets/page_widget.py @@ -35,7 +35,6 @@ class Page(Gtk.ScrolledWindow): ... def _subscribe_to_events(self): - # event_system.subscribe("handle_file_from_ipc", self.handle_file_from_ipc) ... def _load_widgets(self): @@ -51,6 +50,9 @@ class Page(Gtk.ScrolledWindow): def get_tab_widget(self): return self._tab_widget + def get_manifest_pth(self): + return self._manifest_pth + def _load_page_manifest(self, manifest_pth = None): if manifest_pth: self._manifest_pth = manifest_pth diff --git a/src/core/widgets/pages/pages_widget.py b/src/core/widgets/pages/pages_widget.py index 335680c..05e8076 100644 --- a/src/core/widgets/pages/pages_widget.py +++ b/src/core/widgets/pages/pages_widget.py @@ -65,11 +65,17 @@ class Pages(Gtk.Notebook): if self.get_n_pages() == 1: return - page_num = self.page_num(page) - self.remove_page(page_num) + page_num = self.page_num(page) + manifest_pth = os.path.dirname( page.get_manifest_pth() ) + msg = f"Do you really want to delete the Section Page?" + response = event_system.emit_and_await("delete_files", (None, None, [manifest_pth,], msg)) + + if response == -8: + self.remove_page(page_num) + def create_page_view(self, widget = None, eve = None, manifest_pth = None): - page = Page(self._close_tab, self._section_pth, manifest_pth) + page = Page(self._close_tab, self._section_pth, manifest_pth) page_num = self.append_page(page, page.get_tab_widget()) self.set_tab_detachable(page, False) @@ -81,6 +87,9 @@ class Pages(Gtk.Notebook): def get_tab_widget(self): return self._tab_widget + def get_section_pth(self): + return self._section_pth + def _text_search(self, widget = None, eve = None): ... diff --git a/src/core/widgets/sections/sections_widget.py b/src/core/widgets/sections/sections_widget.py index f9188d1..5e81083 100644 --- a/src/core/widgets/sections/sections_widget.py +++ b/src/core/widgets/sections/sections_widget.py @@ -59,7 +59,11 @@ class Sections(Gtk.Notebook): return page_num = self.page_num(pages) - self.remove_page(page_num) + msg = f"Do you really want to delete the Notebook Section?" + response = event_system.emit_and_await("delete_files", (None, None, [pages.get_section_pth(),], msg)) + + if response == -8: + self.remove_page(page_num) def create_section_view(self, widget = None, eve = None, manifest_pth = None): self._manifest_pth = manifest_pth @@ -67,7 +71,7 @@ class Sections(Gtk.Notebook): self._manifest_pth = settings.generate_section_manifest() self._load_section_manifest() - pages_view = Pages(self._close_tab, self._name, self._manifest_pth) + pages_view = Pages(self._close_tab, self._name, self._manifest_pth) page_num = self.append_page(pages_view, pages_view.get_tab_widget()) self.set_tab_detachable(pages_view, True)