diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/controller.py b/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/controller.py index 20ca325..c73aa5a 100644 --- a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/controller.py +++ b/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/controller.py @@ -18,6 +18,7 @@ from widgets.new_file_widget import NewFileWidget from widgets.rename_widget import RenameWidget from widgets.file_exists_widget import FileExistsWidget from widgets.about_widget import AboutWidget +from widgets.appchooser_widget import AppchooserWidget from .ui import UI @@ -49,15 +50,15 @@ class Controller(UI, SignalsMixins, Controller_Data): def _setup_signals(self): ... - # NOTE: Really we will move these to the UI/(New) Window - # 'base' controller after we're done cleaning and refactoring - # to use fewer mixins. + # NOTE: Really we will move these to the UI/(New) Window 'base' controller + # after we're done cleaning and refactoring to use fewer mixins. def _load_widgets(self): ContextMenuWidget() NewFileWidget() RenameWidget() FileExistsWidget() AboutWidget() + AppchooserWidget() def _subscribe_to_events(self): event_system.subscribe("handle_file_from_ipc", self.handle_file_from_ipc) @@ -65,6 +66,9 @@ class Controller(UI, SignalsMixins, Controller_Data): event_system.subscribe("display_message", self.display_message) event_system.subscribe("go_to_path", self.go_to_path) event_system.subscribe("do_action_from_menu_controls", self.do_action_from_menu_controls) + # NOTE: Needs to be moved (probably just to file actions class) after reducing mixins usage + event_system.subscribe("open_with_files", self.open_with_files) + def tear_down(self, widget=None, eve=None): if not settings.is_trace_debug(): @@ -136,7 +140,7 @@ class Controller(UI, SignalsMixins, Controller_Data): if action == "open": self.open_files() if action == "open_with": - self.show_appchooser_menu() + event_system.emit("show_appchooser_menu") if action == "execute": self.execute_files() if action == "execute_in_terminal": diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/mixins/show_hide_mixin.py b/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/mixins/show_hide_mixin.py index 780fb63..e0585e3 100644 --- a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/mixins/show_hide_mixin.py +++ b/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/mixins/show_hide_mixin.py @@ -12,30 +12,6 @@ class ShowHideMixin: def show_messages_popup(self, type, text, seconds=None): self.message_popup_widget.popup() - def stop_file_searching(self, widget=None, eve=None): - self.is_searching = False - - def show_appchooser_menu(self, widget=None, eve=None): - appchooser_menu = self.builder.get_object("appchooser_menu") - appchooser_widget = self.builder.get_object("appchooser_widget") - response = appchooser_menu.run() - - if response == Gtk.ResponseType.OK: - self.open_with_files(appchooser_widget) - self.hide_appchooser_menu() - - if response == Gtk.ResponseType.CANCEL: - self.hide_appchooser_menu() - - - def hide_appchooser_menu(self, widget=None, eve=None): - self.builder.get_object("appchooser_menu").hide() - - def run_appchooser_launch(self, widget=None, eve=None): - dialog = widget.get_parent().get_parent() - dialog.response(Gtk.ResponseType.OK) - - def show_plugins_popup(self, widget=None, eve=None): self.builder.get_object("plugin_controls").popup() diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/mixins/signals/file_action_signals_mixin.py b/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/mixins/signals/file_action_signals_mixin.py index 01ae10d..96c97f7 100644 --- a/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/mixins/signals/file_action_signals_mixin.py +++ b/src/versions/solarfm-0.0.1/SolarFM/solarfm/core/mixins/signals/file_action_signals_mixin.py @@ -130,9 +130,8 @@ class FileActionSignalsMixin: for file in uris: state.tab.open_file_locally(file) - def open_with_files(self, appchooser_widget): + def open_with_files(self, app_info): state = self.get_current_state() - app_info = appchooser_widget.get_app_info() uris = self.format_to_uris(state.store, state.wid, state.tid, self.selected_files) state.tab.app_chooser_exec(app_info, uris) diff --git a/src/versions/solarfm-0.0.1/SolarFM/solarfm/widgets/appchooser_widget.py b/src/versions/solarfm-0.0.1/SolarFM/solarfm/widgets/appchooser_widget.py new file mode 100644 index 0000000..5d6c971 --- /dev/null +++ b/src/versions/solarfm-0.0.1/SolarFM/solarfm/widgets/appchooser_widget.py @@ -0,0 +1,72 @@ +# Python imports + +# Lib imports +import inspect +import gi +gi.require_version('Gtk', '3.0') +gi.require_version('Gdk', '3.0') +from gi.repository import Gtk +from gi.repository import Gdk + +# Application imports + + +class AppchooserWidget: + """docstring for AppchooserWidget.""" + + def __init__(self): + super(AppchooserWidget, self).__init__() + _GLADE_FILE = f"{settings.get_ui_widgets_path()}/appchooser_ui.glade" + builder = settings.get_builder() + self._builder = Gtk.Builder() + + self._builder.add_from_file(_GLADE_FILE) + self._appchooser_menu = self._builder.get_object("appchooser_menu") + self._appchooser_widget = self._builder.get_object("appchooser_widget") + + builder.expose_object(f"appchooser_menu", self._appchooser_menu) + builder.expose_object(f"appchooser_widget", self._appchooser_widget) + + self._setup_styling() + self._setup_signals() + self._load_widgets() + + + def _setup_styling(self): + ... + + def _setup_signals(self): + event_system.subscribe("show_appchooser_menu", self.show_appchooser_menu) + event_system.subscribe("hide_appchooser_menu", self.hide_appchooser_menu) + event_system.subscribe("run_appchooser_launch", self.run_appchooser_launch) + + classes = [self] + handlers = {} + for c in classes: + methods = None + try: + methods = inspect.getmembers(c, predicate=inspect.ismethod) + handlers.update(methods) + except Exception as e: + print(repr(e)) + + self._builder.connect_signals(handlers) + + def _load_widgets(self): + ... + + def show_appchooser_menu(self, widget=None, eve=None): + response = self._appchooser_menu.run() + if response == Gtk.ResponseType.OK: + app_info = self._appchooser_widget.get_app_info() + event_system.emit("open_with_files", app_info) + self.hide_appchooser_menu() + if response == Gtk.ResponseType.CANCEL: + self.hide_appchooser_menu() + + + def hide_appchooser_menu(self, widget=None, eve=None): + self._appchooser_menu.hide() + + def run_appchooser_launch(self, widget=None, eve=None): + self._appchooser_menu.response(Gtk.ResponseType.OK) diff --git a/user_config/usr/share/solarfm/Main_Window.glade b/user_config/usr/share/solarfm/Main_Window.glade index 7c277cb..1dde1b1 100644 --- a/user_config/usr/share/solarfm/Main_Window.glade +++ b/user_config/usr/share/solarfm/Main_Window.glade @@ -2,76 +2,6 @@ - - False - mouse - splashscreen - south - - - - False - vertical - 2 - - - False - end - - - gtk-cancel - True - True - True - True - - - True - True - 0 - - - - - Select - True - True - True - - - True - True - 1 - - - - - False - False - 0 - - - - - True - False - False - True - - - - False - True - 1 - - - - - - button31 - appchooser_select_btn - - True False diff --git a/user_config/usr/share/solarfm/ui_widgets/appchooser_ui.glade b/user_config/usr/share/solarfm/ui_widgets/appchooser_ui.glade new file mode 100644 index 0000000..6959306 --- /dev/null +++ b/user_config/usr/share/solarfm/ui_widgets/appchooser_ui.glade @@ -0,0 +1,75 @@ + + + + + + False + mouse + splashscreen + south + + + + False + vertical + 2 + + + False + end + + + gtk-cancel + True + True + True + True + + + True + True + 0 + + + + + Select + True + True + True + + + True + True + 1 + + + + + False + False + 0 + + + + + True + False + False + True + + + + False + True + 1 + + + + + + button31 + appchooser_select_btn + + +