From 66cfe8caec3674115de430abd0146bd575d2d38d Mon Sep 17 00:00:00 2001 From: itdominator <1itdominator@gmail.com> Date: Sat, 4 Mar 2023 23:13:17 -0600 Subject: [PATCH] Cleaning up message widgets --- .../solarfm-0.0.1/solarfm/core/controller.py | 5 +-- .../solarfm/core/controller_data.py | 24 ++---------- .../core/fs_actions/file_system_actions.py | 1 + .../solarfm/core/fs_actions/handler_mixin.py | 7 +++- .../solarfm/core/mixins/ui/pane_mixin.py | 8 ++-- .../core/widgets/dialogs/message_widget.py | 4 ++ .../core/widgets/dialogs/save_load_widget.py | 5 ++- .../widgets/popups/message_popup_widget.py | 38 +++++++++++++------ .../solarfm-0.0.1/solarfm/core/window.py | 3 ++ 9 files changed, 52 insertions(+), 43 deletions(-) diff --git a/src/versions/solarfm-0.0.1/solarfm/core/controller.py b/src/versions/solarfm-0.0.1/solarfm/core/controller.py index d275a31..813f995 100644 --- a/src/versions/solarfm-0.0.1/solarfm/core/controller.py +++ b/src/versions/solarfm-0.0.1/solarfm/core/controller.py @@ -17,7 +17,6 @@ from .widgets.dialogs.about_widget import AboutWidget from .widgets.dialogs.appchooser_widget import AppchooserWidget from .widgets.dialogs.file_exists_widget import FileExistsWidget from .widgets.dialogs.new_file_widget import NewFileWidget -from .widgets.dialogs.message_widget import MessageWidget from .widgets.dialogs.rename_widget import RenameWidget from .widgets.dialogs.save_load_widget import SaveLoadWidget @@ -92,6 +91,7 @@ class Controller(UIMixin, SignalsMixins, Controller_Data): # after we're done cleaning and refactoring to use fewer mixins. def _load_widgets(self): BottomStatusInfoWidget() + IOPopupWidget() MessagePopupWidget() PathMenuPopupWidget() @@ -104,7 +104,6 @@ class Controller(UIMixin, SignalsMixins, Controller_Data): RenameWidget() FileExistsWidget() SaveLoadWidget() - self.message_dialog = MessageWidget() def reload_plugins(self, widget=None, eve=None): @@ -187,4 +186,4 @@ class Controller(UIMixin, SignalsMixins, Controller_Data): tab.execute([f"{tab.terminal_app}"], start_dir=tab.get_current_directory()) def go_to_path(self, path: str): - self.path_entry.set_text(path) + self.builder.get_object("path_entry").set_text(path) diff --git a/src/versions/solarfm-0.0.1/solarfm/core/controller_data.py b/src/versions/solarfm-0.0.1/solarfm/core/controller_data.py index c0105e3..57d06d4 100644 --- a/src/versions/solarfm-0.0.1/solarfm/core/controller_data.py +++ b/src/versions/solarfm-0.0.1/solarfm/core/controller_data.py @@ -1,5 +1,4 @@ # Python imports -import sys import os import subprocess from dataclasses import dataclass @@ -10,12 +9,13 @@ gi.require_version('Gtk', '3.0') from gi.repository import Gtk # Application imports +from .widgets.dialogs.message_widget import MessageWidget + from shellfm.windows.controller import WindowController from plugins.plugins_controller import PluginsController - @dataclass(slots=True) class State: fm_controller: any = None @@ -52,11 +52,6 @@ class Controller_Data: self.window3 = self.builder.get_object("window_3") self.window4 = self.builder.get_object("window_4") - self.path_entry = self.builder.get_object("path_entry") - # self.bottom_size_label = self.builder.get_object("bottom_size_label") - # self.bottom_file_count_label = self.builder.get_object("bottom_file_count_label") - # self.bottom_path_label = self.builder.get_object("bottom_path_label") - self.notebooks = [self.window1, self.window2, self.window3, self.window4] self.selected_files = [] self.to_copy_files = [] @@ -75,19 +70,6 @@ class Controller_Data: self.shift_down = False self.alt_down = False - # sys.excepthook = self.custom_except_hook - if settings.is_debug(): - self.window.set_interactive_debugging(True) - - - def custom_except_hook(self, exc_type, exc_value, exc_traceback): - if issubclass(exc_type, KeyboardInterrupt): - sys.__excepthook__(exc_type, exc_value, exc_traceback) - return - - logger.error("Uncaught exception", exc_info=(exc_type, exc_value, exc_traceback)) - - def get_current_state(self) -> State: ''' @@ -106,7 +88,7 @@ class Controller_Data: state.tab = self.get_fm_window(state.wid).get_tab_by_id(state.tid) state.icon_grid = self.builder.get_object(f"{state.wid}|{state.tid}|icon_grid") state.store = state.icon_grid.get_model() - state.message_dialog = self.message_dialog + state.message_dialog = MessageWidget() selected_files = state.icon_grid.get_selected_items() if selected_files: diff --git a/src/versions/solarfm-0.0.1/solarfm/core/fs_actions/file_system_actions.py b/src/versions/solarfm-0.0.1/solarfm/core/fs_actions/file_system_actions.py index 79db4b6..dc0bd56 100644 --- a/src/versions/solarfm-0.0.1/solarfm/core/fs_actions/file_system_actions.py +++ b/src/versions/solarfm-0.0.1/solarfm/core/fs_actions/file_system_actions.py @@ -15,6 +15,7 @@ class FileSystemActions(HandlerMixin, CRUDMixin): def __init__(self): super(FileSystemActions, self).__init__() + self._setup_styling() self._setup_signals() self._subscribe_to_events() diff --git a/src/versions/solarfm-0.0.1/solarfm/core/fs_actions/handler_mixin.py b/src/versions/solarfm-0.0.1/solarfm/core/fs_actions/handler_mixin.py index b9bb236..c0e05a2 100644 --- a/src/versions/solarfm-0.0.1/solarfm/core/fs_actions/handler_mixin.py +++ b/src/versions/solarfm-0.0.1/solarfm/core/fs_actions/handler_mixin.py @@ -12,6 +12,9 @@ from gi.repository import Gio from ..widgets.io_widget import IOWidget +class HandlerMixinException(Exception): + ... + class HandlerMixin: @@ -35,7 +38,7 @@ class HandlerMixin: file = Gio.File.new_for_path(path) if _target_path: if file.get_parent().get_path() == _target_path: - raise Exception("Parent dir of target and file locations are the same! Won't copy or move!") + raise HandlerMixinException("Parent dir of target and file locations are the same! Won't copy or move!") if os.path.isdir(_target_path): info = file.query_info("standard::display-name", 0, cancellable=None) @@ -153,7 +156,7 @@ class HandlerMixin: value = file_name[(file_name.find(start)+len(start)):] int(value) file_name = file_name.split(start)[0] - except Exception as e: + except HandlerMixinException as e: pass target = Gio.File.new_for_path(f"{base_path}/{file_name}-copy{i}{extension}") diff --git a/src/versions/solarfm-0.0.1/solarfm/core/mixins/ui/pane_mixin.py b/src/versions/solarfm-0.0.1/solarfm/core/mixins/ui/pane_mixin.py index 380efa7..68a6d54 100644 --- a/src/versions/solarfm-0.0.1/solarfm/core/mixins/ui/pane_mixin.py +++ b/src/versions/solarfm-0.0.1/solarfm/core/mixins/ui/pane_mixin.py @@ -45,16 +45,14 @@ class PaneMixin: state = self.run_flag_toggle(pane_index) if self.is_pane1_hidden and self.is_pane2_hidden and self.is_pane3_hidden and self.is_pane4_hidden: state = self.run_flag_toggle(pane_index) - self._save_state(state, pane_index) + self._set_fm_state(state, pane_index) return child = pane.get_child1() if pane_index in [1, 3] else pane.get_child2() self.toggle_pane(child) - self._save_state(state, pane_index) + self._set_fm_state(state, pane_index) - def _save_state(self, state, pane_index): + def _set_fm_state(self, state, pane_index): window = self.fm_controller.get_window_by_index(pane_index - 1) window.set_is_hidden(state) - if not settings.is_trace_debug(): - self.fm_controller.save_state() diff --git a/src/versions/solarfm-0.0.1/solarfm/core/widgets/dialogs/message_widget.py b/src/versions/solarfm-0.0.1/solarfm/core/widgets/dialogs/message_widget.py index 932b803..1f78be7 100644 --- a/src/versions/solarfm-0.0.1/solarfm/core/widgets/dialogs/message_widget.py +++ b/src/versions/solarfm-0.0.1/solarfm/core/widgets/dialogs/message_widget.py @@ -18,6 +18,7 @@ class MessageWidget(Gtk.MessageDialog): self._setup_styling() self._setup_signals() + self._subscribe_to_events() self._load_widgets() @@ -27,6 +28,9 @@ class MessageWidget(Gtk.MessageDialog): def _setup_signals(self): ... + def _subscribe_to_events(self): + ... + def _load_widgets(self): message_area = self.get_message_area() message_area.get_children()[0].set_label("Alert!") diff --git a/src/versions/solarfm-0.0.1/solarfm/core/widgets/dialogs/save_load_widget.py b/src/versions/solarfm-0.0.1/solarfm/core/widgets/dialogs/save_load_widget.py index b40ac80..3dc6f07 100644 --- a/src/versions/solarfm-0.0.1/solarfm/core/widgets/dialogs/save_load_widget.py +++ b/src/versions/solarfm-0.0.1/solarfm/core/widgets/dialogs/save_load_widget.py @@ -9,6 +9,9 @@ from gi.repository import Gtk # Application imports +class SaveLoadWidgetException(Exception): + ... + class SaveLoadWidget: @@ -52,7 +55,7 @@ class SaveLoadWidget: elif action == "load_session": self.save_load_dialog.set_action(Gtk.FileChooserAction.OPEN) else: - raise Exception(f"Unknown action given: {action}") + raise SaveLoadWidgetException(f"Unknown action given: {action}") self.save_load_dialog.set_current_folder(state.tab.get_current_directory()) self.save_load_dialog.set_current_name("session.json") diff --git a/src/versions/solarfm-0.0.1/solarfm/core/widgets/popups/message_popup_widget.py b/src/versions/solarfm-0.0.1/solarfm/core/widgets/popups/message_popup_widget.py index 7f44aa4..c607057 100644 --- a/src/versions/solarfm-0.0.1/solarfm/core/widgets/popups/message_popup_widget.py +++ b/src/versions/solarfm-0.0.1/solarfm/core/widgets/popups/message_popup_widget.py @@ -1,7 +1,9 @@ # Python imports +import datetime import inspect -import traceback +import sys import time +import traceback # Lib imports import gi @@ -26,6 +28,8 @@ class MessagePopupWidget(Gtk.Popover): self._message_buffer = None + sys.excepthook = self.custom_except_hook + self._setup_styling() self._setup_signals() self._load_widgets() @@ -35,7 +39,8 @@ class MessagePopupWidget(Gtk.Popover): self.set_relative_to( self.builder.get_object(f"main_menu_bar") ) self.set_modal(True) self.set_position(Gtk.PositionType.BOTTOM) - self.set_size_request(620, 580) + self.set_hexpand(True) + self.set_vexpand(True) def _setup_signals(self): event_system.subscribe("show_messages_popup", self.show_messages_popup) @@ -52,8 +57,6 @@ class MessagePopupWidget(Gtk.Popover): button.connect("released", self.save_debug_alerts) button.set_always_show_image(True) - vbox.set_vexpand(True) - vbox.set_hexpand(True) scroll_window.set_vexpand(True) scroll_window.set_hexpand(True) vbox.set_orientation(Gtk.Orientation.VERTICAL) @@ -61,9 +64,10 @@ class MessagePopupWidget(Gtk.Popover): self.builder.expose_object(f"message_popup_widget", self) self.builder.expose_object(f"message_text_view", message_text_view) - vbox.add(button) scroll_window.add(message_text_view) + vbox.add(button) vbox.add(scroll_window) + vbox.show_all() self.add(vbox) @@ -73,18 +77,30 @@ class MessagePopupWidget(Gtk.Popover): def hide_messages_popup(self): self.popup() + def custom_except_hook(self, exc_type, exc_value, exc_traceback): + if issubclass(exc_type, KeyboardInterrupt): + sys.__excepthook__(exc_type, exc_value, exc_traceback) + return + + logger.error("Uncaught exception", exc_info=(exc_type, exc_value, exc_traceback)) + self._exception_to_ui(exc_type, exc_value, exc_traceback) + + def _exception_to_ui(self, exc_type, exc_value, exc_traceback): + trace = ''.join(traceback.format_tb(exc_traceback)) + current_time = datetime.datetime.now() + data = f"{current_time}\nExec Type: {exc_type} <--> Value: {exc_value}\n\n{trace}\n\n" - def custom_except_hook(self, exec_type, value, _traceback): - trace = ''.join(traceback.format_tb(_traceback)) - data = f"Exec Type: {exec_type} <--> Value: {value}\n\n{trace}\n\n\n\n" - start_itr = self._message_buffer.get_start_iter() - self._message_buffer.place_cursor(start_itr) self.display_message(settings.get_error_color(), data) def display_message(self, type, text, seconds=None): + # start_itr = self._message_buffer.get_start_iter() + start_itr = self._message_buffer.get_iter_at_line(0) + + self._message_buffer.place_cursor(start_itr) self._message_buffer.insert_at_cursor(text) - self.popup() + if seconds: + self.popup() self.hide_message_timeout(seconds) @threaded diff --git a/src/versions/solarfm-0.0.1/solarfm/core/window.py b/src/versions/solarfm-0.0.1/solarfm/core/window.py index e6e27b9..d7efdd3 100644 --- a/src/versions/solarfm-0.0.1/solarfm/core/window.py +++ b/src/versions/solarfm-0.0.1/solarfm/core/window.py @@ -52,6 +52,9 @@ class Window(Gtk.ApplicationWindow): event_system.subscribe("tear_down", self._tear_down) def _load_widgets(self, args, unknownargs): + if settings.is_debug(): + self.set_interactive_debugging(True) + self._controller = Controller(args, unknownargs) if not self._controller: