develop #11
| @@ -1,6 +1,5 @@ | |||||||
| # Python imports | # Python imports | ||||||
| import os | import os | ||||||
| import gc |  | ||||||
| import time | import time | ||||||
|  |  | ||||||
| # Lib imports | # Lib imports | ||||||
| @@ -13,25 +12,29 @@ from gi.repository import GLib | |||||||
| from .controller_data import Controller_Data | from .controller_data import Controller_Data | ||||||
| from .mixins.signals_mixins import SignalsMixins | from .mixins.signals_mixins import SignalsMixins | ||||||
|  |  | ||||||
| from widgets.popups.message_popup_widget import MessagePopupWidget | from .ui.dialogs.about_widget import AboutWidget | ||||||
| from widgets.popups.path_menu_popup_widget import PathMenuPopupWidget | from .ui.dialogs.appchooser_widget import AppchooserWidget | ||||||
| from widgets.popups.plugins_popup_widget import PluginsPopupWidget | from .ui.dialogs.file_exists_widget import FileExistsWidget | ||||||
| from widgets.popups.io_popup_widget import IOPopupWidget | from .ui.dialogs.new_file_widget import NewFileWidget | ||||||
|  | from .ui.dialogs.message_widget import MessageWidget | ||||||
|  | from .ui.dialogs.rename_widget import RenameWidget | ||||||
|  | from .ui.dialogs.save_load_widget import SaveLoadWidget | ||||||
|  |  | ||||||
| from widgets.context_menu_widget import ContextMenuWidget | from .ui.popups.message_popup_widget import MessagePopupWidget | ||||||
| from widgets.new_file_widget import NewFileWidget | from .ui.popups.path_menu_popup_widget import PathMenuPopupWidget | ||||||
| from widgets.rename_widget import RenameWidget | from .ui.popups.plugins_popup_widget import PluginsPopupWidget | ||||||
| from widgets.file_exists_widget import FileExistsWidget | from .ui.popups.io_popup_widget import IOPopupWidget | ||||||
| from widgets.about_widget import AboutWidget |  | ||||||
| from widgets.appchooser_widget import AppchooserWidget |  | ||||||
|  |  | ||||||
| from .ui import UI | from .ui.context_menu_widget import ContextMenuWidget | ||||||
|  |  | ||||||
|  | from .ui_mixin import UIMixin | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| class Controller(UI, SignalsMixins, Controller_Data): | class Controller(UIMixin, SignalsMixins, Controller_Data): | ||||||
|     """ Controller coordinates the mixins and is somewhat the root hub of it all. """ |     """ Controller coordinates the mixins and is somewhat the root hub of it all. """ | ||||||
|  |  | ||||||
|     def __init__(self, args, unknownargs): |     def __init__(self, args, unknownargs): | ||||||
|         self._setup_styling() |         self._setup_styling() | ||||||
|         self._setup_signals() |         self._setup_signals() | ||||||
| @@ -49,33 +52,39 @@ class Controller(UI, SignalsMixins, Controller_Data): | |||||||
|                 message = f"FILE|{arg}" |                 message = f"FILE|{arg}" | ||||||
|                 event_system.emit("post_file_to_ipc", message) |                 event_system.emit("post_file_to_ipc", message) | ||||||
|  |  | ||||||
|  |  | ||||||
|     def _setup_styling(self): |     def _setup_styling(self): | ||||||
|         ... |         ... | ||||||
|  |  | ||||||
|     def _setup_signals(self): |     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. |  | ||||||
|     def _load_widgets(self): |  | ||||||
|         MessagePopupWidget() |  | ||||||
|         PathMenuPopupWidget() |  | ||||||
|         PluginsPopupWidget() |  | ||||||
|         IOPopupWidget() |  | ||||||
|         ContextMenuWidget() |  | ||||||
|         NewFileWidget() |  | ||||||
|         RenameWidget() |  | ||||||
|         FileExistsWidget() |  | ||||||
|         AboutWidget() |  | ||||||
|         AppchooserWidget() |  | ||||||
|  |  | ||||||
|     def _subscribe_to_events(self): |     def _subscribe_to_events(self): | ||||||
|         event_system.subscribe("handle_file_from_ipc", self.handle_file_from_ipc) |         event_system.subscribe("handle_file_from_ipc", self.handle_file_from_ipc) | ||||||
|  |         event_system.subscribe("clear_notebooks", self.clear_notebooks) | ||||||
|         event_system.subscribe("get_current_state", self.get_current_state) |         event_system.subscribe("get_current_state", self.get_current_state) | ||||||
|         event_system.subscribe("go_to_path", self.go_to_path) |         event_system.subscribe("go_to_path", self.go_to_path) | ||||||
|         event_system.subscribe("do_action_from_menu_controls", self.do_action_from_menu_controls) |         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 |         # 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) |         event_system.subscribe("open_with_files", self.open_with_files) | ||||||
|  |         event_system.subscribe("generate_windows", self.generate_windows) | ||||||
|  |  | ||||||
|  |     # 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): | ||||||
|  |         IOPopupWidget() | ||||||
|  |         MessagePopupWidget() | ||||||
|  |         PathMenuPopupWidget() | ||||||
|  |         PluginsPopupWidget() | ||||||
|  |  | ||||||
|  |         AboutWidget() | ||||||
|  |         AppchooserWidget() | ||||||
|  |         ContextMenuWidget() | ||||||
|  |         NewFileWidget() | ||||||
|  |         RenameWidget() | ||||||
|  |         FileExistsWidget() | ||||||
|  |         SaveLoadWidget() | ||||||
|  |         self.message_dialog = MessageWidget() | ||||||
|  |  | ||||||
|  |  | ||||||
|     def tear_down(self, widget=None, eve=None): |     def tear_down(self, widget=None, eve=None): | ||||||
| @@ -87,54 +96,6 @@ class Controller(UI, SignalsMixins, Controller_Data): | |||||||
|         Gtk.main_quit() |         Gtk.main_quit() | ||||||
|  |  | ||||||
|  |  | ||||||
|     def save_load_session(self, action="save_session"): |  | ||||||
|         wid, tid          = self.fm_controller.get_active_wid_and_tid() |  | ||||||
|         tab               = self.get_fm_window(wid).get_tab_by_id(tid) |  | ||||||
|         save_load_dialog  = self.builder.get_object("save_load_dialog") |  | ||||||
|  |  | ||||||
|         if action == "save_session": |  | ||||||
|             if not settings.is_trace_debug(): |  | ||||||
|                 self.fm_controller.save_state() |  | ||||||
|  |  | ||||||
|             return |  | ||||||
|         elif action == "save_session_as": |  | ||||||
|             save_load_dialog.set_action(Gtk.FileChooserAction.SAVE) |  | ||||||
|         elif action == "load_session": |  | ||||||
|             save_load_dialog.set_action(Gtk.FileChooserAction.OPEN) |  | ||||||
|         else: |  | ||||||
|             raise Exception(f"Unknown action given:  {action}") |  | ||||||
|  |  | ||||||
|         save_load_dialog.set_current_folder(tab.get_current_directory()) |  | ||||||
|         save_load_dialog.set_current_name("session.json") |  | ||||||
|         response = save_load_dialog.run() |  | ||||||
|         if response == Gtk.ResponseType.OK: |  | ||||||
|             if action == "save_session_as": |  | ||||||
|                 path = f"{save_load_dialog.get_current_folder()}/{save_load_dialog.get_current_name()}" |  | ||||||
|                 self.fm_controller.save_state(path) |  | ||||||
|             elif action == "load_session": |  | ||||||
|                 path         = f"{save_load_dialog.get_file().get_path()}" |  | ||||||
|                 session_json = self.fm_controller.get_state_from_file(path) |  | ||||||
|                 self.load_session(session_json) |  | ||||||
|         if (response == Gtk.ResponseType.CANCEL) or (response == Gtk.ResponseType.DELETE_EVENT): |  | ||||||
|             ... |  | ||||||
|  |  | ||||||
|         save_load_dialog.hide() |  | ||||||
|  |  | ||||||
|     def load_session(self, session_json): |  | ||||||
|         if settings.is_debug(): |  | ||||||
|             logger.debug(f"Session Data: {session_json}") |  | ||||||
|  |  | ||||||
|         self.ctrl_down  = False |  | ||||||
|         self.shift_down = False |  | ||||||
|         self.alt_down   = False |  | ||||||
|         for notebook in self.notebooks: |  | ||||||
|             self.clear_children(notebook) |  | ||||||
|  |  | ||||||
|         self.fm_controller.unload_tabs_and_windows() |  | ||||||
|         self.generate_windows(session_json) |  | ||||||
|         gc.collect() |  | ||||||
|  |  | ||||||
|  |  | ||||||
|     def do_action_from_menu_controls(self, widget, eve = None): |     def do_action_from_menu_controls(self, widget, eve = None): | ||||||
|         if not isinstance(widget, str): |         if not isinstance(widget, str): | ||||||
|             action = widget.get_name() |             action = widget.get_name() | ||||||
| @@ -166,7 +127,7 @@ class Controller(UI, SignalsMixins, Controller_Data): | |||||||
|         if action == "create": |         if action == "create": | ||||||
|             self.create_files() |             self.create_files() | ||||||
|         if action in ["save_session", "save_session_as", "load_session"]: |         if action in ["save_session", "save_session_as", "load_session"]: | ||||||
|             self.save_load_session(action) |             event_system.emit("save_load_session", (action)) | ||||||
|  |  | ||||||
|         if action == "about_page": |         if action == "about_page": | ||||||
|             event_system.emit("show_about_page") |             event_system.emit("show_about_page") | ||||||
|   | |||||||
| @@ -20,6 +20,8 @@ from plugins.plugins_controller import PluginsController | |||||||
|  |  | ||||||
| @dataclass(slots=True) | @dataclass(slots=True) | ||||||
| class State: | class State: | ||||||
|  |     fm_controller: any = None | ||||||
|  |     notebooks: any     = None | ||||||
|     wid: int  = None |     wid: int  = None | ||||||
|     tid: int  = None |     tid: int  = None | ||||||
|     tab: type = None |     tab: type = None | ||||||
| @@ -28,7 +30,7 @@ class State: | |||||||
|     selected_files: [] = None |     selected_files: [] = None | ||||||
|     to_copy_files:  [] = None |     to_copy_files:  [] = None | ||||||
|     to_cut_files:   [] = None |     to_cut_files:   [] = None | ||||||
|     warning_alert: type = None |     message_dialog: type = None | ||||||
|  |  | ||||||
|  |  | ||||||
| class Controller_Data: | class Controller_Data: | ||||||
| @@ -108,11 +110,13 @@ class Controller_Data: | |||||||
|                         state (obj): State |                         state (obj): State | ||||||
|         ''' |         ''' | ||||||
|         state                = State() |         state                = State() | ||||||
|  |         state.fm_controller  = self.fm_controller | ||||||
|  |         state.notebooks      = self.notebooks | ||||||
|         state.wid, state.tid = self.fm_controller.get_active_wid_and_tid() |         state.wid, state.tid = self.fm_controller.get_active_wid_and_tid() | ||||||
|         state.tab            = self.get_fm_window(state.wid).get_tab_by_id(state.tid) |         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.icon_grid      = self.builder.get_object(f"{state.wid}|{state.tid}|icon_grid") | ||||||
|         state.store          = state.icon_grid.get_model() |         state.store          = state.icon_grid.get_model() | ||||||
|         state.warning_alert  = self.warning_alert |         state.message_dialog  = self.message_dialog | ||||||
|  |  | ||||||
|         selected_files       = state.icon_grid.get_selected_items() |         selected_files       = state.icon_grid.get_selected_items() | ||||||
|         if selected_files: |         if selected_files: | ||||||
| @@ -153,6 +157,15 @@ class Controller_Data: | |||||||
|         ''' Checks if a given method exists. ''' |         ''' Checks if a given method exists. ''' | ||||||
|         return callable(getattr(obj, name, None)) |         return callable(getattr(obj, name, None)) | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     def clear_notebooks(self) -> None: | ||||||
|  |         self.ctrl_down  = False | ||||||
|  |         self.shift_down = False | ||||||
|  |         self.alt_down   = False | ||||||
|  |  | ||||||
|  |         for notebook in self.notebooks: | ||||||
|  |             self.clear_children(notebook) | ||||||
|  |  | ||||||
|     def clear_children(self, widget: type) -> None: |     def clear_children(self, widget: type) -> None: | ||||||
|         ''' Clear children of a gtk widget. ''' |         ''' Clear children of a gtk widget. ''' | ||||||
|         for child in widget.get_children(): |         for child in widget.get_children(): | ||||||
|   | |||||||
| @@ -13,7 +13,7 @@ from gi.repository import Gio | |||||||
|  |  | ||||||
|  |  | ||||||
| # Application imports | # Application imports | ||||||
| from widgets.io_widget import IOWidget | from ...ui.io_widget import IOWidget | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -13,9 +13,9 @@ from gi.repository import Gio | |||||||
| from gi.repository import GdkPixbuf | from gi.repository import GdkPixbuf | ||||||
|  |  | ||||||
| # Application imports | # Application imports | ||||||
| from widgets.tab_header_widget import TabHeaderWidget | from ...ui.tab_header_widget import TabHeaderWidget | ||||||
| from widgets.icon_grid_widget import IconGridWidget | from ...ui.icon_grid_widget import IconGridWidget | ||||||
| from widgets.icon_tree_widget import IconTreeWidget | from ...ui.icon_tree_widget import IconTreeWidget | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -0,0 +1,33 @@ | |||||||
|  | # Python imports | ||||||
|  |  | ||||||
|  | # Lib imports | ||||||
|  | import inspect | ||||||
|  | import gi | ||||||
|  | gi.require_version('Gtk', '3.0') | ||||||
|  | from gi.repository import Gtk | ||||||
|  |  | ||||||
|  | # Application imports | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class MessageWidget(Gtk.MessageDialog): | ||||||
|  |     """docstring for MessageWidget.""" | ||||||
|  |  | ||||||
|  |     def __init__(self): | ||||||
|  |         super(MessageWidget, self).__init__() | ||||||
|  |  | ||||||
|  |         self._setup_styling() | ||||||
|  |         self._setup_signals() | ||||||
|  |         self._load_widgets() | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     def _setup_styling(self): | ||||||
|  |         ... | ||||||
|  |  | ||||||
|  |     def _setup_signals(self): | ||||||
|  |         ... | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     def _load_widgets(self): | ||||||
|  |         ... | ||||||
| @@ -0,0 +1,83 @@ | |||||||
|  | # Python imports | ||||||
|  | import inspect | ||||||
|  | import gc | ||||||
|  |  | ||||||
|  | # Lib imports | ||||||
|  | import gi | ||||||
|  | gi.require_version('Gtk', '3.0') | ||||||
|  | from gi.repository import Gtk | ||||||
|  |  | ||||||
|  | # Application imports | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class SaveLoadWidget: | ||||||
|  |     """docstring for SaveLoadWidget.""" | ||||||
|  |  | ||||||
|  |     def __init__(self): | ||||||
|  |         super(SaveLoadWidget, self).__init__() | ||||||
|  |         _GLADE_FILE   = f"{settings.get_ui_widgets_path()}/save_load_ui.glade" | ||||||
|  |         builder       = settings.get_builder() | ||||||
|  |         self._builder = Gtk.Builder() | ||||||
|  |  | ||||||
|  |         self._builder.add_from_file(_GLADE_FILE) | ||||||
|  |         self.save_load_dialog = self._builder.get_object("save_load_dialog") | ||||||
|  |  | ||||||
|  |         builder.expose_object(f"save_load_dialog", self.save_load_dialog) | ||||||
|  |  | ||||||
|  |         self._setup_styling() | ||||||
|  |         self._setup_signals() | ||||||
|  |         self._load_widgets() | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     def _setup_styling(self): | ||||||
|  |         ... | ||||||
|  |  | ||||||
|  |     def _setup_signals(self): | ||||||
|  |         event_system.subscribe("save_load_session", self.save_load_session) | ||||||
|  |  | ||||||
|  |     def _load_widgets(self): | ||||||
|  |         ... | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     def save_load_session(self, action="save_session"): | ||||||
|  |         state = event_system.emit_and_await("get_current_state") | ||||||
|  |  | ||||||
|  |         if action == "save_session": | ||||||
|  |             if not settings.is_trace_debug(): | ||||||
|  |                 state.fm_controller.save_state() | ||||||
|  |  | ||||||
|  |             return | ||||||
|  |         elif action == "save_session_as": | ||||||
|  |             self.save_load_dialog.set_action(Gtk.FileChooserAction.SAVE) | ||||||
|  |         elif action == "load_session": | ||||||
|  |             self.save_load_dialog.set_action(Gtk.FileChooserAction.OPEN) | ||||||
|  |         else: | ||||||
|  |             raise Exception(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") | ||||||
|  |         response = self.save_load_dialog.run() | ||||||
|  |         if response == Gtk.ResponseType.OK: | ||||||
|  |             if action == "save_session_as": | ||||||
|  |                 path = f"{self.save_load_dialog.get_current_folder()}/{self.save_load_dialog.get_current_name()}" | ||||||
|  |                 state.fm_controller.save_state(path) | ||||||
|  |             elif action == "load_session": | ||||||
|  |                 path         = f"{self.save_load_dialog.get_file().get_path()}" | ||||||
|  |                 session_json = state.fm_controller.get_state_from_file(path) | ||||||
|  |                 self.load_session(session_json) | ||||||
|  |         if (response == Gtk.ResponseType.CANCEL) or (response == Gtk.ResponseType.DELETE_EVENT): | ||||||
|  |             ... | ||||||
|  |  | ||||||
|  |         self.save_load_dialog.hide() | ||||||
|  |  | ||||||
|  |     def load_session(self, session_json): | ||||||
|  |         if settings.is_debug(): | ||||||
|  |             logger.debug(f"Session Data: {session_json}") | ||||||
|  |  | ||||||
|  |         state = event_system.emit_and_await("get_current_state") | ||||||
|  |         event_system.emit("clear_notebooks") | ||||||
|  |         state.fm_controller.unload_tabs_and_windows() | ||||||
|  |         event_system.emit("generate_windows", (session_json,)) | ||||||
|  |         gc.collect() | ||||||
| @@ -22,7 +22,6 @@ class PathMenuPopupWidget(Gtk.Popover): | |||||||
|         self._setup_styling() |         self._setup_styling() | ||||||
|         self._setup_signals() |         self._setup_signals() | ||||||
|         self._load_widgets() |         self._load_widgets() | ||||||
|         self.show_all() |  | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|     def _setup_styling(self): |     def _setup_styling(self): | ||||||
| @@ -48,6 +47,7 @@ class PathMenuPopupWidget(Gtk.Popover): | |||||||
|         self.builder.expose_object(f"path_menu_buttons", path_menu_buttons) |         self.builder.expose_object(f"path_menu_buttons", path_menu_buttons) | ||||||
|         view_port.add(path_menu_buttons) |         view_port.add(path_menu_buttons) | ||||||
|         scroll_window.add(view_port) |         scroll_window.add(view_port) | ||||||
|  |         scroll_window.show_all() | ||||||
|         self.add(scroll_window) |         self.add(scroll_window) | ||||||
| 
 | 
 | ||||||
|     def show_path_menu(self, widget=None, eve=None): |     def show_path_menu(self, widget=None, eve=None): | ||||||
| @@ -9,5 +9,5 @@ from .mixins.ui.window_mixin import WindowMixin | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class UI(PaneMixin, WindowMixin): | class UIMixin(PaneMixin, WindowMixin): | ||||||
|     ... |     ... | ||||||
| @@ -32,66 +32,6 @@ | |||||||
|     <property name="can-focus">False</property> |     <property name="can-focus">False</property> | ||||||
|     <property name="stock">gtk-stop</property> |     <property name="stock">gtk-stop</property> | ||||||
|   </object> |   </object> | ||||||
|   <object class="GtkFileChooserDialog" id="save_load_dialog"> |  | ||||||
|     <property name="can-focus">False</property> |  | ||||||
|     <property name="type-hint">dialog</property> |  | ||||||
|     <property name="do-overwrite-confirmation">True</property> |  | ||||||
|     <child internal-child="vbox"> |  | ||||||
|       <object class="GtkBox"> |  | ||||||
|         <property name="can-focus">False</property> |  | ||||||
|         <property name="orientation">vertical</property> |  | ||||||
|         <property name="spacing">2</property> |  | ||||||
|         <child internal-child="action_area"> |  | ||||||
|           <object class="GtkButtonBox"> |  | ||||||
|             <property name="can-focus">False</property> |  | ||||||
|             <property name="layout-style">end</property> |  | ||||||
|             <child> |  | ||||||
|               <object class="GtkButton" id="button11"> |  | ||||||
|                 <property name="label">gtk-cancel</property> |  | ||||||
|                 <property name="use-action-appearance">True</property> |  | ||||||
|                 <property name="visible">True</property> |  | ||||||
|                 <property name="can-focus">True</property> |  | ||||||
|                 <property name="receives-default">True</property> |  | ||||||
|                 <property name="use-stock">True</property> |  | ||||||
|               </object> |  | ||||||
|               <packing> |  | ||||||
|                 <property name="expand">True</property> |  | ||||||
|                 <property name="fill">True</property> |  | ||||||
|                 <property name="position">0</property> |  | ||||||
|               </packing> |  | ||||||
|             </child> |  | ||||||
|             <child> |  | ||||||
|               <object class="GtkButton" id="button12"> |  | ||||||
|                 <property name="label">gtk-ok</property> |  | ||||||
|                 <property name="use-action-appearance">True</property> |  | ||||||
|                 <property name="visible">True</property> |  | ||||||
|                 <property name="can-focus">True</property> |  | ||||||
|                 <property name="receives-default">True</property> |  | ||||||
|                 <property name="use-stock">True</property> |  | ||||||
|               </object> |  | ||||||
|               <packing> |  | ||||||
|                 <property name="expand">True</property> |  | ||||||
|                 <property name="fill">True</property> |  | ||||||
|                 <property name="position">1</property> |  | ||||||
|               </packing> |  | ||||||
|             </child> |  | ||||||
|           </object> |  | ||||||
|           <packing> |  | ||||||
|             <property name="expand">False</property> |  | ||||||
|             <property name="fill">False</property> |  | ||||||
|             <property name="position">0</property> |  | ||||||
|           </packing> |  | ||||||
|         </child> |  | ||||||
|         <child> |  | ||||||
|           <placeholder/> |  | ||||||
|         </child> |  | ||||||
|       </object> |  | ||||||
|     </child> |  | ||||||
|     <action-widgets> |  | ||||||
|       <action-widget response="-6">button11</action-widget> |  | ||||||
|       <action-widget response="-5">button12</action-widget> |  | ||||||
|     </action-widgets> |  | ||||||
|   </object> |  | ||||||
|   <object class="GtkImage" id="tggl_notebook_1_img"> |   <object class="GtkImage" id="tggl_notebook_1_img"> | ||||||
|     <property name="visible">True</property> |     <property name="visible">True</property> | ||||||
|     <property name="can-focus">False</property> |     <property name="can-focus">False</property> | ||||||
| @@ -901,79 +841,4 @@ | |||||||
|       </object> |       </object> | ||||||
|     </child> |     </child> | ||||||
|   </object> |   </object> | ||||||
|   <object class="GtkMessageDialog" id="warning_alert"> |  | ||||||
|     <property name="can-focus">False</property> |  | ||||||
|     <property name="resizable">False</property> |  | ||||||
|     <property name="modal">True</property> |  | ||||||
|     <property name="window-position">center</property> |  | ||||||
|     <property name="destroy-with-parent">True</property> |  | ||||||
|     <property name="type-hint">dialog</property> |  | ||||||
|     <property name="skip-taskbar-hint">True</property> |  | ||||||
|     <property name="skip-pager-hint">True</property> |  | ||||||
|     <property name="urgency-hint">True</property> |  | ||||||
|     <property name="decorated">False</property> |  | ||||||
|     <property name="deletable">False</property> |  | ||||||
|     <property name="gravity">center</property> |  | ||||||
|     <property name="message-type">warning</property> |  | ||||||
|     <property name="text" translatable="yes">Warning!</property> |  | ||||||
|     <child internal-child="vbox"> |  | ||||||
|       <object class="GtkBox"> |  | ||||||
|         <property name="can-focus">False</property> |  | ||||||
|         <property name="margin-left">5</property> |  | ||||||
|         <property name="margin-right">5</property> |  | ||||||
|         <property name="margin-top">5</property> |  | ||||||
|         <property name="margin-bottom">5</property> |  | ||||||
|         <property name="orientation">vertical</property> |  | ||||||
|         <property name="spacing">2</property> |  | ||||||
|         <child internal-child="action_area"> |  | ||||||
|           <object class="GtkButtonBox"> |  | ||||||
|             <property name="can-focus">False</property> |  | ||||||
|             <property name="homogeneous">True</property> |  | ||||||
|             <property name="layout-style">end</property> |  | ||||||
|             <child> |  | ||||||
|               <object class="GtkButton" id="button4"> |  | ||||||
|                 <property name="label">gtk-no</property> |  | ||||||
|                 <property name="visible">True</property> |  | ||||||
|                 <property name="can-focus">True</property> |  | ||||||
|                 <property name="receives-default">True</property> |  | ||||||
|                 <property name="use-stock">True</property> |  | ||||||
|               </object> |  | ||||||
|               <packing> |  | ||||||
|                 <property name="expand">True</property> |  | ||||||
|                 <property name="fill">True</property> |  | ||||||
|                 <property name="position">0</property> |  | ||||||
|               </packing> |  | ||||||
|             </child> |  | ||||||
|             <child> |  | ||||||
|               <object class="GtkButton" id="button3"> |  | ||||||
|                 <property name="label">gtk-yes</property> |  | ||||||
|                 <property name="visible">True</property> |  | ||||||
|                 <property name="can-focus">True</property> |  | ||||||
|                 <property name="has-focus">True</property> |  | ||||||
|                 <property name="receives-default">True</property> |  | ||||||
|                 <property name="use-stock">True</property> |  | ||||||
|               </object> |  | ||||||
|               <packing> |  | ||||||
|                 <property name="expand">True</property> |  | ||||||
|                 <property name="fill">True</property> |  | ||||||
|                 <property name="position">1</property> |  | ||||||
|               </packing> |  | ||||||
|             </child> |  | ||||||
|           </object> |  | ||||||
|           <packing> |  | ||||||
|             <property name="expand">False</property> |  | ||||||
|             <property name="fill">False</property> |  | ||||||
|             <property name="position">0</property> |  | ||||||
|           </packing> |  | ||||||
|         </child> |  | ||||||
|       </object> |  | ||||||
|     </child> |  | ||||||
|     <action-widgets> |  | ||||||
|       <action-widget response="-9">button4</action-widget> |  | ||||||
|       <action-widget response="-8">button3</action-widget> |  | ||||||
|     </action-widgets> |  | ||||||
|     <style> |  | ||||||
|       <class name="alert-border"/> |  | ||||||
|     </style> |  | ||||||
|   </object> |  | ||||||
| </interface> | </interface> | ||||||
|   | |||||||
							
								
								
									
										65
									
								
								user_config/usr/share/solarfm/ui_widgets/save_load_ui.glade
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								user_config/usr/share/solarfm/ui_widgets/save_load_ui.glade
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,65 @@ | |||||||
|  | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  | <!-- Generated with glade 3.40.0 --> | ||||||
|  | <interface> | ||||||
|  |   <requires lib="gtk+" version="3.22"/> | ||||||
|  |   <object class="GtkFileChooserDialog" id="save_load_dialog"> | ||||||
|  |     <property name="can-focus">False</property> | ||||||
|  |     <property name="type-hint">dialog</property> | ||||||
|  |     <property name="do-overwrite-confirmation">True</property> | ||||||
|  |     <child internal-child="vbox"> | ||||||
|  |       <object class="GtkBox"> | ||||||
|  |         <property name="can-focus">False</property> | ||||||
|  |         <property name="orientation">vertical</property> | ||||||
|  |         <property name="spacing">2</property> | ||||||
|  |         <child internal-child="action_area"> | ||||||
|  |           <object class="GtkButtonBox"> | ||||||
|  |             <property name="can-focus">False</property> | ||||||
|  |             <property name="layout-style">end</property> | ||||||
|  |             <child> | ||||||
|  |               <object class="GtkButton" id="button11"> | ||||||
|  |                 <property name="label">gtk-cancel</property> | ||||||
|  |                 <property name="use-action-appearance">True</property> | ||||||
|  |                 <property name="visible">True</property> | ||||||
|  |                 <property name="can-focus">True</property> | ||||||
|  |                 <property name="receives-default">True</property> | ||||||
|  |                 <property name="use-stock">True</property> | ||||||
|  |               </object> | ||||||
|  |               <packing> | ||||||
|  |                 <property name="expand">True</property> | ||||||
|  |                 <property name="fill">True</property> | ||||||
|  |                 <property name="position">0</property> | ||||||
|  |               </packing> | ||||||
|  |             </child> | ||||||
|  |             <child> | ||||||
|  |               <object class="GtkButton" id="button12"> | ||||||
|  |                 <property name="label">gtk-ok</property> | ||||||
|  |                 <property name="use-action-appearance">True</property> | ||||||
|  |                 <property name="visible">True</property> | ||||||
|  |                 <property name="can-focus">True</property> | ||||||
|  |                 <property name="receives-default">True</property> | ||||||
|  |                 <property name="use-stock">True</property> | ||||||
|  |               </object> | ||||||
|  |               <packing> | ||||||
|  |                 <property name="expand">True</property> | ||||||
|  |                 <property name="fill">True</property> | ||||||
|  |                 <property name="position">1</property> | ||||||
|  |               </packing> | ||||||
|  |             </child> | ||||||
|  |           </object> | ||||||
|  |           <packing> | ||||||
|  |             <property name="expand">False</property> | ||||||
|  |             <property name="fill">False</property> | ||||||
|  |             <property name="position">0</property> | ||||||
|  |           </packing> | ||||||
|  |         </child> | ||||||
|  |         <child> | ||||||
|  |           <placeholder/> | ||||||
|  |         </child> | ||||||
|  |       </object> | ||||||
|  |     </child> | ||||||
|  |     <action-widgets> | ||||||
|  |       <action-widget response="-6">button11</action-widget> | ||||||
|  |       <action-widget response="-5">button12</action-widget> | ||||||
|  |     </action-widgets> | ||||||
|  |   </object> | ||||||
|  | </interface> | ||||||
		Reference in New Issue
	
	Block a user