From 3c72ad28014c3e56c4488520da71dc0131b2a56a Mon Sep 17 00:00:00 2001
From: itdominator <1itdominator@gmail.com>
Date: Sat, 4 Mar 2023 21:45:29 -0600
Subject: [PATCH] Cleanup of widgets, fixing or updating plugins
---
plugins/searcher/mixins/file_search_mixin.py | 4 +-
plugins/searcher/mixins/grep_search_mixin.py | 3 +
plugins/searcher/plugin.py | 6 +
plugins/searcher/search_dialog.glade | 21 +-
plugins/searcher/utils/ipc_server.py | 32 +--
plugins/searcher/utils/search.py | 11 +-
plugins/translate/plugin.py | 8 +-
plugins/youtube_download/download.sh | 2 +-
.../solarfm-0.0.1/solarfm/core/controller.py | 9 +-
.../solarfm/core/controller_data.py | 32 +--
.../solarfm/core/mixins/ui/window_mixin.py | 69 +------
.../core/widgets/bottom_status_info_widget.py | 101 ++++++++++
.../core/widgets/context_menu_widget.py | 21 +-
.../core/widgets/dialogs/about_widget.py | 26 +--
.../core/widgets/dialogs/appchooser_widget.py | 31 +--
.../widgets/dialogs/file_exists_widget.py | 49 ++---
.../core/widgets/dialogs/message_widget.py | 4 -
.../core/widgets/dialogs/new_file_widget.py | 35 ++--
.../core/widgets/dialogs/rename_widget.py | 35 ++--
.../core/widgets/dialogs/save_load_widget.py | 12 +-
.../core/widgets/fm_widget/__init__.py | 3 -
.../core/widgets/fm_widget/file_view.py | 71 -------
.../core/widgets/fm_widget/files_widget.py | 149 --------------
.../core/widgets/fm_widget/icon_view.py | 146 --------------
.../widgets/fm_widget/signals/__init__.py | 3 -
.../signals/icon_view_signals_mixin.py | 183 ------------------
.../solarfm/core/widgets/icon_grid_widget.py | 6 +-
.../solarfm/core/widgets/io_widget.py | 2 +
.../core/widgets/popups/io_popup_widget.py | 4 +-
.../widgets/popups/message_popup_widget.py | 5 +-
.../widgets/popups/path_menu_popup_widget.py | 3 +-
.../widgets/popups/plugins_popup_widget.py | 4 +-
.../solarfm/core/widgets/tab_header_widget.py | 2 +
.../solarfm-0.0.1/solarfm/core/window.py | 8 +-
.../solarfm/factories/__init__.py | 3 -
.../solarfm/factories/split_view_widget.py | 33 ----
.../shellfm/windows/tabs/icons/icon.py | 9 +-
.../solarfm/utils/settings/settings.py | 23 ++-
.../usr/share/solarfm/Main_Window.glade | 51 +----
.../ui_widgets/bottom_status_info_ui.glade | 50 +++++
40 files changed, 355 insertions(+), 914 deletions(-)
create mode 100644 src/versions/solarfm-0.0.1/solarfm/core/widgets/bottom_status_info_widget.py
delete mode 100644 src/versions/solarfm-0.0.1/solarfm/core/widgets/fm_widget/__init__.py
delete mode 100644 src/versions/solarfm-0.0.1/solarfm/core/widgets/fm_widget/file_view.py
delete mode 100644 src/versions/solarfm-0.0.1/solarfm/core/widgets/fm_widget/files_widget.py
delete mode 100644 src/versions/solarfm-0.0.1/solarfm/core/widgets/fm_widget/icon_view.py
delete mode 100644 src/versions/solarfm-0.0.1/solarfm/core/widgets/fm_widget/signals/__init__.py
delete mode 100644 src/versions/solarfm-0.0.1/solarfm/core/widgets/fm_widget/signals/icon_view_signals_mixin.py
delete mode 100644 src/versions/solarfm-0.0.1/solarfm/factories/__init__.py
delete mode 100644 src/versions/solarfm-0.0.1/solarfm/factories/split_view_widget.py
create mode 100644 user_config/usr/share/solarfm/ui_widgets/bottom_status_info_ui.glade
diff --git a/plugins/searcher/mixins/file_search_mixin.py b/plugins/searcher/mixins/file_search_mixin.py
index 889245c..1826822 100644
--- a/plugins/searcher/mixins/file_search_mixin.py
+++ b/plugins/searcher/mixins/file_search_mixin.py
@@ -64,6 +64,8 @@ class FileSearchMixin:
break
def _stop_fsearch_query(self, widget=None, eve=None):
+ self._spinner.stop()
+
# NOTE: Freeze IPC consumption
self.pause_fifo_update = True
self.search_query = ""
@@ -86,10 +88,10 @@ class FileSearchMixin:
self.search_query = query
target_dir = shlex.quote( self._fm_state.tab.get_current_directory() )
command = ["python", f"{self.path}/utils/search.py", "-t", "file_search", "-d", f"{target_dir}", "-q", f"{query}"]
+ self._spinner.start()
self._list_proc = subprocess.Popen(command, cwd=self.path, stdin=None, stdout=None, stderr=None)
-
def _load_file_ui(self, data):
Gtk.main_iteration()
diff --git a/plugins/searcher/mixins/grep_search_mixin.py b/plugins/searcher/mixins/grep_search_mixin.py
index f485e3c..a4d1dc3 100644
--- a/plugins/searcher/mixins/grep_search_mixin.py
+++ b/plugins/searcher/mixins/grep_search_mixin.py
@@ -64,6 +64,8 @@ class GrepSearchMixin:
break
def _stop_grep_query(self, widget=None, eve=None):
+ self._spinner.stop()
+
# NOTE: Freeze IPC consumption
self.pause_fifo_update = True
self.grep_query = ""
@@ -88,6 +90,7 @@ class GrepSearchMixin:
target_dir = shlex.quote( self._fm_state.tab.get_current_directory() )
command = ["python", f"{self.path}/utils/search.py", "-t", "grep_search", "-d", f"{target_dir}", "-q", f"{query}"]
+ self._spinner.start()
self._grep_proc = subprocess.Popen(command, cwd=self.path, stdin=None, stdout=None, stderr=None)
def _load_grep_ui(self, data):
diff --git a/plugins/searcher/plugin.py b/plugins/searcher/plugin.py
index 66e88a2..7af36ce 100644
--- a/plugins/searcher/plugin.py
+++ b/plugins/searcher/plugin.py
@@ -28,6 +28,7 @@ class Plugin(IPCServer, FileSearchMixin, GrepSearchMixin, PluginBase):
self.update_list_ui_buffer = ()
self._search_dialog = None
+ self._spinner = None
self._active_path = None
self.file_list_parent = None
self.grep_list_parent = None
@@ -55,6 +56,7 @@ class Plugin(IPCServer, FileSearchMixin, GrepSearchMixin, PluginBase):
self._search_dialog = self._builder.get_object("search_dialog")
self.fsearch = self._builder.get_object("fsearch")
+ self._spinner = self._builder.get_object("spinner")
self.grep_list_parent = self._builder.get_object("grep_list_parent")
self.file_list_parent = self._builder.get_object("file_list_parent")
@@ -72,6 +74,10 @@ class Plugin(IPCServer, FileSearchMixin, GrepSearchMixin, PluginBase):
item.set_always_show_image(True)
return item
+ def stop_spinner(self, ret_code):
+ print(f"Return Code: {ret_code}")
+ self._spinner.stop()
+
def _show_page(self, widget=None, eve=None):
self._event_system.emit("get_current_state")
diff --git a/plugins/searcher/search_dialog.glade b/plugins/searcher/search_dialog.glade
index dcc86dc..1d3312c 100644
--- a/plugins/searcher/search_dialog.glade
+++ b/plugins/searcher/search_dialog.glade
@@ -25,6 +25,17 @@
True
False
end
+
+
+
+ True
+ True
+ 0
+
+
@@ -52,7 +63,7 @@
True
True
- 1
+ 2
@@ -260,6 +271,12 @@
+
+
+
+
+
+
True
diff --git a/plugins/searcher/utils/ipc_server.py b/plugins/searcher/utils/ipc_server.py
index b8b0b14..b4c7f6c 100644
--- a/plugins/searcher/utils/ipc_server.py
+++ b/plugins/searcher/utils/ipc_server.py
@@ -59,23 +59,27 @@ class IPCServer:
while True:
msg = conn.recv()
- if "SEARCH|" in msg:
- ts, file = msg.split("SEARCH|")[1].strip().split("|", 1)
- try:
+ try:
+ if "SEARCH_DONE|" in msg:
+ ts, ret_code = msg.split("SEARCH_DONE|")[1].strip().split("|", 1)
timestamp = float(ts)
- if timestamp > self.fsearch_time_stamp and file:
- GLib.idle_add(self._load_file_ui, file, priority=GLib.PRIORITY_LOW)
- except Exception as e:
- ...
+ if self.fsearch_time_stamp or self.grep_time_stamp:
+ if (timestamp > self.fsearch_time_stamp) or (timestamp > self.grep_time_stamp):
+ GLib.idle_add(self.stop_spinner, (ret_code,), priority=GLib.PRIORITY_HIGH_IDLE)
- if "GREP|" in msg:
- ts, data = msg.split("GREP|")[1].strip().split("|", 1)
- try:
+ if "SEARCH|" in msg:
+ ts, file = msg.split("SEARCH|")[1].strip().split("|", 1)
timestamp = float(ts)
- if timestamp > self.grep_time_stamp and data:
- GLib.idle_add(self._load_grep_ui, data, priority=GLib.PRIORITY_LOW)
- except Exception as e:
- ...
+ if file and (timestamp > self.fsearch_time_stamp):
+ GLib.idle_add(self._load_file_ui, file, priority=GLib.PRIORITY_HIGH_IDLE)
+
+ if "GREP|" in msg:
+ ts, data = msg.split("GREP|")[1].strip().split("|", 1)
+ timestamp = float(ts)
+ if data and (timestamp > self.grep_time_stamp):
+ GLib.idle_add(self._load_grep_ui, data, priority=GLib.PRIORITY_HIGH_IDLE)
+ except Exception as e:
+ print( repr(e) )
conn.close()
diff --git a/plugins/searcher/utils/search.py b/plugins/searcher/utils/search.py
index b87ae6a..79c1e11 100755
--- a/plugins/searcher/utils/search.py
+++ b/plugins/searcher/utils/search.py
@@ -82,12 +82,11 @@ def grep_search(target=None, query=None):
collection[f"{b64_file}"] = {}
collection[f"{b64_file}"] = { f"{line_no}": b64_data}
-
- data = f"GREP|{ts}|{json.dumps(collection, separators=(',', ':'), indent=4)}"
- send_ipc_message(data)
except Exception as e:
traceback.print_exc()
+ data = f"GREP|{ts}|{json.dumps(collection, separators=(',', ':'), indent=4)}"
+ send_ipc_message(data)
collection = {}
@@ -112,5 +111,11 @@ if __name__ == "__main__":
# Read arguments (If any...)
args = parser.parse_args()
search(args)
+
+ data = f"SEARCH_DONE|{ts}|0"
+ send_ipc_message(data)
except Exception as e:
traceback.print_exc()
+
+ data = f"SEARCH_DONE|{ts}|1"
+ send_ipc_message(data)
diff --git a/plugins/translate/plugin.py b/plugins/translate/plugin.py
index 8d12ed5..3d5a0ea 100644
--- a/plugins/translate/plugin.py
+++ b/plugins/translate/plugin.py
@@ -60,7 +60,7 @@ class Plugin(PluginBase):
self._queue_translate = False
self._watcher_running = False
self._vqd_attrib = None
- self.from_trans = "jp"
+ self.from_trans = "ja"
self.to_trans = "en"
self.translate_tries = 0
@@ -138,14 +138,14 @@ class Plugin(PluginBase):
self.translate_tries += 1
tlink = f"https://duckduckgo.com/translation.js?vqd={self._vqd_attrib}&query=translate&from={self.from_trans}&to={self.to_trans}"
- response = requests.post(self.tlink, headers=self._headers, data=from_translate)
+ response = requests.post(tlink, headers=self._headers, data=from_translate)
if response.status_code == 200:
data = response.json()
self._translate_to_buffer.set_text(data["translated"])
self.translate_tries = 0
- if "detected_language" in data.keys():
+ if data["detected_language"]:
self._detected_language_lbl.set_label(f"Detected Language: {data['detected_language']}")
else:
self._detected_language_lbl.set_label(f"Selected Language: {self.from_trans}")
@@ -157,7 +157,7 @@ class Plugin(PluginBase):
msg = f"Could not translate... Response Code: {response.status_code}"
self._translate_to_buffer.set_text(msg)
-
+ # NOTE: https://github.com/deedy5/duckduckgo_search/blob/72acb900a346be576f0917dd3d6c0fbd618a71bf/duckduckgo_search/utils.py
def get_vqd(self):
response = requests.post(self.vqd_link, headers=self.vqd_headers, data=self.vqd_data, timeout=10)
if response.status_code == 200:
diff --git a/plugins/youtube_download/download.sh b/plugins/youtube_download/download.sh
index 9ff7786..de8e1ea 100755
--- a/plugins/youtube_download/download.sh
+++ b/plugins/youtube_download/download.sh
@@ -13,7 +13,7 @@ function main() {
LINK=`xclip -selection clipboard -o`
python "${HOME}/.config/solarfm/plugins/youtube_download/yt_dlp/__main__.py" \
- --cookies-from-browser firefox --write-sub --embed-sub --sub-langs en \
+ --write-sub --embed-sub --sub-langs en \
-o "${1}/%(title)s.%(ext)s" "${LINK}"
}
main "$@";
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 869af17..d275a31 100644
--- a/src/versions/solarfm-0.0.1/solarfm/core/controller.py
+++ b/src/versions/solarfm-0.0.1/solarfm/core/controller.py
@@ -27,6 +27,7 @@ from .widgets.popups.plugins_popup_widget import PluginsPopupWidget
from .widgets.popups.io_popup_widget import IOPopupWidget
from .widgets.context_menu_widget import ContextMenuWidget
+from .widgets.bottom_status_info_widget import BottomStatusInfoWidget
from .ui_mixin import UIMixin
@@ -56,7 +57,9 @@ class Controller(UIMixin, SignalsMixins, Controller_Data):
def _setup_styling(self):
- ...
+ self.window.connect("focus-out-event", self.unset_keys_and_data)
+ self.window.connect("key-press-event", self.on_global_key_press_controller)
+ self.window.connect("key-release-event", self.on_global_key_release_controller)
def _setup_signals(self):
FileSystemActions()
@@ -67,6 +70,7 @@ class Controller(UIMixin, SignalsMixins, Controller_Data):
event_system.subscribe("clear_notebooks", self.clear_notebooks)
event_system.subscribe("get_current_state", self.get_current_state)
event_system.subscribe("go_to_path", self.go_to_path)
+ event_system.subscribe("format_to_uris", self.format_to_uris)
event_system.subscribe("do_action_from_menu_controls", self.do_action_from_menu_controls)
event_system.subscribe("set_clipboard_data", self.set_clipboard_data)
@@ -78,7 +82,7 @@ class Controller(UIMixin, SignalsMixins, Controller_Data):
self.core_widget = self.builder.get_object("core_widget")
settings.set_builder(self.builder)
- settings.register_signals_to_builder([self,])
+ settings.register_signals_to_builder([self,], self.builder)
def get_core_widget(self):
return self.core_widget
@@ -87,6 +91,7 @@ class Controller(UIMixin, SignalsMixins, Controller_Data):
# 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):
+ BottomStatusInfoWidget()
IOPopupWidget()
MessagePopupWidget()
PathMenuPopupWidget()
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 4e70ae8..c0105e3 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
@@ -13,8 +13,6 @@ from gi.repository import Gtk
from shellfm.windows.controller import WindowController
from plugins.plugins_controller import PluginsController
-# from factories.split_view_widget import SplitViewWidget
-
@@ -49,21 +47,15 @@ class Controller_Data:
self.plugins = PluginsController()
self.fm_controller_data = self.fm_controller.get_state_from_file()
-
- # self.pane_master = self.builder.get_object("pane_master")
- # self.pane_master.pack1(SplitViewWidget(), True, True)
- # self.pane_master.pack2(SplitViewWidget(), True, True)
-
-
self.window1 = self.builder.get_object("window_1")
self.window2 = self.builder.get_object("window_2")
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.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 = []
@@ -132,6 +124,24 @@ class Controller_Data:
event_system.emit("update_state_info_plugins", state)
return state
+ def format_to_uris(self, store, wid, tid, treePaths, use_just_path=False):
+ tab = self.get_fm_window(wid).get_tab_by_id(tid)
+ dir = tab.get_current_directory()
+ uris = []
+
+ for path in treePaths:
+ itr = store.get_iter(path)
+ file = store.get(itr, 1)[0]
+ fpath = ""
+
+ if not use_just_path:
+ fpath = f"file://{dir}/{file}"
+ else:
+ fpath = f"{dir}/{file}"
+
+ uris.append(fpath)
+
+ return uris
def clear_console(self) -> None:
''' Clears the terminal screen. '''
diff --git a/src/versions/solarfm-0.0.1/solarfm/core/mixins/ui/window_mixin.py b/src/versions/solarfm-0.0.1/solarfm/core/mixins/ui/window_mixin.py
index 0121f7f..94655e7 100644
--- a/src/versions/solarfm-0.0.1/solarfm/core/mixins/ui/window_mixin.py
+++ b/src/versions/solarfm-0.0.1/solarfm/core/mixins/ui/window_mixin.py
@@ -72,75 +72,8 @@ class WindowMixin(TabMixin):
def get_fm_window(self, wid):
return self.fm_controller.get_window_by_nickname(f"window_{wid}")
- def format_to_uris(self, store, wid, tid, treePaths, use_just_path=False):
- tab = self.get_fm_window(wid).get_tab_by_id(tid)
- dir = tab.get_current_directory()
- uris = []
-
- for path in treePaths:
- itr = store.get_iter(path)
- file = store.get(itr, 1)[0]
- fpath = ""
-
- if not use_just_path:
- fpath = f"file://{dir}/{file}"
- else:
- fpath = f"{dir}/{file}"
-
- uris.append(fpath)
-
- return uris
-
-
def set_bottom_labels(self, tab):
- state = self.get_current_state()
- selected_files = state.icon_grid.get_selected_items()
- current_directory = tab.get_current_directory()
- path_file = Gio.File.new_for_path(current_directory)
- mount_file = path_file.query_filesystem_info(attributes="filesystem::*", cancellable=None)
- formatted_mount_free = sizeof_fmt( int(mount_file.get_attribute_as_string("filesystem::free")) )
- formatted_mount_size = sizeof_fmt( int(mount_file.get_attribute_as_string("filesystem::size")) )
-
- # NOTE: Hides empty trash and other desired buttons based on context.
- if settings.get_trash_files_path() == current_directory:
- event_system.emit("show_trash_buttons")
- else:
- event_system.emit("hide_trash_buttons")
-
- # If something selected
- self.bottom_size_label.set_label(f"{formatted_mount_free} free / {formatted_mount_size}")
- self.bottom_path_label.set_label(tab.get_current_directory())
- if selected_files:
- uris = self.format_to_uris(state.store, state.wid, state.tid, selected_files, True)
- combined_size = 0
- for uri in uris:
- try:
- file_info = Gio.File.new_for_path(uri).query_info(attributes="standard::size",
- flags=Gio.FileQueryInfoFlags.NONE,
- cancellable=None)
- file_size = file_info.get_size()
- combined_size += file_size
- except WindowException as e:
- logger.debug(repr(e))
-
- formatted_size = sizeof_fmt(combined_size)
- if tab.is_hiding_hidden():
- self.bottom_path_label.set_label(f" {len(uris)} / {tab.get_files_count()} ({formatted_size})")
- else:
- self.bottom_path_label.set_label(f" {len(uris)} / {tab.get_not_hidden_count()} ({formatted_size})")
-
- return
-
- # If nothing selected
- if tab.is_hiding_hidden():
- if tab.get_hidden_count() > 0:
- self.bottom_file_count_label.set_label(f"{tab.get_not_hidden_count()} visible ({tab.get_hidden_count()} hidden)")
- else:
- self.bottom_file_count_label.set_label(f"{tab.get_files_count()} items")
- else:
- self.bottom_file_count_label.set_label(f"{tab.get_files_count()} items")
-
-
+ event_system.emit("set_bottom_labels", (tab,))
def set_window_title(self):
wid, tid = self.fm_controller.get_active_wid_and_tid()
diff --git a/src/versions/solarfm-0.0.1/solarfm/core/widgets/bottom_status_info_widget.py b/src/versions/solarfm-0.0.1/solarfm/core/widgets/bottom_status_info_widget.py
new file mode 100644
index 0000000..ad50f47
--- /dev/null
+++ b/src/versions/solarfm-0.0.1/solarfm/core/widgets/bottom_status_info_widget.py
@@ -0,0 +1,101 @@
+# Python imports
+
+# Lib imports
+import gi
+gi.require_version('Gtk', '3.0')
+from gi.repository import Gtk
+from gi.repository import Gio
+
+# Application imports
+
+
+
+
+class BottomStatusInfoWidget:
+ """docstring for BottomStatusInfoWidget."""
+
+ def __init__(self):
+ super(BottomStatusInfoWidget, self).__init__()
+
+ _GLADE_FILE = f"{settings.get_ui_widgets_path()}/bottom_status_info_ui.glade"
+ self._builder = Gtk.Builder()
+ self._builder.add_from_file(_GLADE_FILE)
+
+ self._setup_styling()
+ self._setup_signals()
+ self._subscribe_to_events()
+ self._load_widgets()
+
+
+ def _setup_styling(self):
+ ...
+
+ def _setup_signals(self):
+ ...
+
+ def _subscribe_to_events(self):
+ event_system.subscribe("set_bottom_labels", self.set_bottom_labels)
+
+ def _load_widgets(self):
+ builder = settings.get_builder()
+
+ self.bottom_status_info = self._builder.get_object("bottom_status_info")
+ 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")
+
+ builder.expose_object(f"bottom_status_info", self.bottom_status_info)
+ builder.expose_object(f"bottom_size_label", self.bottom_size_label)
+ builder.expose_object(f"bottom_file_count_label", self.bottom_file_count_label)
+ builder.expose_object(f"bottom_path_label", self.bottom_path_label)
+
+ builder.get_object("core_widget").add(self.bottom_status_info)
+
+
+ def set_bottom_labels(self, tab):
+ state = event_system.emit_and_await("get_current_state")
+ selected_files = state.icon_grid.get_selected_items()
+ current_directory = tab.get_current_directory()
+ path_file = Gio.File.new_for_path(current_directory)
+ mount_file = path_file.query_filesystem_info(attributes="filesystem::*", cancellable=None)
+ formatted_mount_free = sizeof_fmt( int(mount_file.get_attribute_as_string("filesystem::free")) )
+ formatted_mount_size = sizeof_fmt( int(mount_file.get_attribute_as_string("filesystem::size")) )
+
+ # NOTE: Hides empty trash and other desired buttons based on context.
+ if settings.get_trash_files_path() == current_directory:
+ event_system.emit("show_trash_buttons")
+ else:
+ event_system.emit("hide_trash_buttons")
+
+ # If something selected
+ self.bottom_size_label.set_label(f"{formatted_mount_free} free / {formatted_mount_size}")
+ self.bottom_path_label.set_label(tab.get_current_directory())
+ if selected_files:
+ uris = event_system.emit_and_await("format_to_uris", (state.store, state.wid, state.tid, selected_files, True))
+ combined_size = 0
+ for uri in uris:
+ try:
+ file_info = Gio.File.new_for_path(uri).query_info(attributes="standard::size",
+ flags=Gio.FileQueryInfoFlags.NONE,
+ cancellable=None)
+ file_size = file_info.get_size()
+ combined_size += file_size
+ except WindowException as e:
+ logger.debug(repr(e))
+
+ formatted_size = sizeof_fmt(combined_size)
+ if tab.is_hiding_hidden():
+ self.bottom_path_label.set_label(f" {len(uris)} / {tab.get_files_count()} ({formatted_size})")
+ else:
+ self.bottom_path_label.set_label(f" {len(uris)} / {tab.get_not_hidden_count()} ({formatted_size})")
+
+ return
+
+ # If nothing selected
+ if tab.is_hiding_hidden():
+ if tab.get_hidden_count() > 0:
+ self.bottom_file_count_label.set_label(f"{tab.get_not_hidden_count()} visible ({tab.get_hidden_count()} hidden)")
+ else:
+ self.bottom_file_count_label.set_label(f"{tab.get_files_count()} items")
+ else:
+ self.bottom_file_count_label.set_label(f"{tab.get_files_count()} items")
diff --git a/src/versions/solarfm-0.0.1/solarfm/core/widgets/context_menu_widget.py b/src/versions/solarfm-0.0.1/solarfm/core/widgets/context_menu_widget.py
index 0d47e76..37329b9 100644
--- a/src/versions/solarfm-0.0.1/solarfm/core/widgets/context_menu_widget.py
+++ b/src/versions/solarfm-0.0.1/solarfm/core/widgets/context_menu_widget.py
@@ -1,5 +1,4 @@
# Python imports
-import inspect
# Lib imports
import gi
@@ -16,6 +15,7 @@ class ContextMenuWidget(Gtk.Menu):
def __init__(self):
super(ContextMenuWidget, self).__init__()
+
self.builder = settings.get_builder()
self._builder = Gtk.Builder()
self._context_menu_data = settings.get_context_menu_data()
@@ -32,22 +32,14 @@ class ContextMenuWidget(Gtk.Menu):
def _setup_signals(self):
event_system.subscribe("show_context_menu", self.show_context_menu)
event_system.subscribe("hide_context_menu", self.hide_context_menu)
-
- classes = [self]
- handlers = {}
- for c in classes:
- methods = None
- try:
- methods = inspect.getmembers(c, predicate=inspect.ismethod)
- handlers.update(methods)
- except Exception as e:
- logger.debug(repr(e))
-
- self._builder.connect_signals(handlers)
+ settings.register_signals_to_builder([self,], self._builder)
def _load_widgets(self):
self.build_context_menu()
+ def _emit(self, menu_item, type):
+ event_system.emit("do_action_from_menu_controls", type)
+
def make_submenu(self, name, data, keys):
menu = Gtk.Menu()
@@ -94,9 +86,6 @@ class ContextMenuWidget(Gtk.Menu):
if plugins_entry:
self.builder.expose_object("context_menu_plugins", plugins_entry.get_submenu())
- def _emit(self, menu_item, type):
- event_system.emit("do_action_from_menu_controls", type)
-
def show_context_menu(self, widget=None, eve=None):
self.builder.get_object("context_menu").popup_at_pointer(None)
diff --git a/src/versions/solarfm-0.0.1/solarfm/core/widgets/dialogs/about_widget.py b/src/versions/solarfm-0.0.1/solarfm/core/widgets/dialogs/about_widget.py
index 5997a6f..931ca62 100644
--- a/src/versions/solarfm-0.0.1/solarfm/core/widgets/dialogs/about_widget.py
+++ b/src/versions/solarfm-0.0.1/solarfm/core/widgets/dialogs/about_widget.py
@@ -1,5 +1,4 @@
# Python imports
-import inspect
# Lib imports
import gi
@@ -16,14 +15,10 @@ class AboutWidget:
def __init__(self):
super(AboutWidget, self).__init__()
+
_GLADE_FILE = f"{settings.get_ui_widgets_path()}/about_ui.glade"
- builder = settings.get_builder()
self._builder = Gtk.Builder()
-
self._builder.add_from_file(_GLADE_FILE)
- self.about_page = self._builder.get_object("about_page")
-
- builder.expose_object(f"about_page", self.about_page)
self._setup_styling()
self._setup_signals()
@@ -36,21 +31,14 @@ class AboutWidget:
def _setup_signals(self):
event_system.subscribe("show_about_page", self.show_about_page)
event_system.subscribe("hide_about_page", self.hide_about_page)
-
- classes = [self]
- handlers = {}
- for c in classes:
- methods = None
- try:
- methods = inspect.getmembers(c, predicate=inspect.ismethod)
- handlers.update(methods)
- except Exception as e:
- logger.debug(repr(e))
-
- self._builder.connect_signals(handlers)
+ 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()
diff --git a/src/versions/solarfm-0.0.1/solarfm/core/widgets/dialogs/appchooser_widget.py b/src/versions/solarfm-0.0.1/solarfm/core/widgets/dialogs/appchooser_widget.py
index 6401ad0..d9e8155 100644
--- a/src/versions/solarfm-0.0.1/solarfm/core/widgets/dialogs/appchooser_widget.py
+++ b/src/versions/solarfm-0.0.1/solarfm/core/widgets/dialogs/appchooser_widget.py
@@ -1,5 +1,4 @@
# Python imports
-import inspect
# Lib imports
import gi
@@ -16,16 +15,10 @@ class 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()
@@ -39,21 +32,17 @@ class AppchooserWidget:
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)
+ settings.register_signals_to_builder([self,], self._builder)
def _load_widgets(self):
- ...
+ builder = settings.get_builder()
+
+ 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)
+
def show_appchooser_menu(self, widget=None, eve=None):
response = self._appchooser_menu.run()
diff --git a/src/versions/solarfm-0.0.1/solarfm/core/widgets/dialogs/file_exists_widget.py b/src/versions/solarfm-0.0.1/solarfm/core/widgets/dialogs/file_exists_widget.py
index 5c8abce..d689a7f 100644
--- a/src/versions/solarfm-0.0.1/solarfm/core/widgets/dialogs/file_exists_widget.py
+++ b/src/versions/solarfm-0.0.1/solarfm/core/widgets/dialogs/file_exists_widget.py
@@ -1,5 +1,4 @@
# Python imports
-import inspect
# Lib imports
import gi
@@ -17,12 +16,27 @@ class FileExistsWidget:
def __init__(self):
super(FileExistsWidget, self).__init__()
- _GLADE_FILE = f"{settings.get_ui_widgets_path()}/file_exists_ui.glade"
- builder = settings.get_builder()
- self._builder = Gtk.Builder()
+ _GLADE_FILE = f"{settings.get_ui_widgets_path()}/file_exists_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("setup_exists_data", self.setup_exists_data)
+ event_system.subscribe("show_exists_page", self.show_exists_page)
+ settings.register_signals_to_builder([self,], self._builder)
+
+ def _load_widgets(self):
+ builder = settings.get_builder()
+
self.file_exists_dialog = self._builder.get_object("file_exists_dialog")
self._exists_file_label = self._builder.get_object("exists_file_label")
self._exists_file_diff_from = self._builder.get_object("exists_file_diff_from")
@@ -38,33 +52,6 @@ class FileExistsWidget:
builder.expose_object(f"exists_file_field", self._exists_file_field)
builder.expose_object(f"exists_file_rename_bttn", self._exists_file_rename_bttn)
- self._setup_styling()
- self._setup_signals()
- self._load_widgets()
-
-
- def _setup_styling(self):
- ...
-
- def _setup_signals(self):
- event_system.subscribe("setup_exists_data", self.setup_exists_data)
- event_system.subscribe("show_exists_page", self.show_exists_page)
-
-
- classes = [self]
- handlers = {}
- for c in classes:
- methods = None
- try:
- methods = inspect.getmembers(c, predicate=inspect.ismethod)
- handlers.update(methods)
- except Exception as e:
- logger.debug(repr(e))
-
- self._builder.connect_signals(handlers)
-
- def _load_widgets(self):
- ...
def show_exists_page(self, widget=None, eve=None):
response = self.file_exists_dialog.run()
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 dcfd4a7..932b803 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
@@ -1,5 +1,4 @@
# Python imports
-import inspect
# Lib imports
import gi
@@ -17,20 +16,17 @@ class MessageWidget(Gtk.MessageDialog):
def __init__(self):
super(MessageWidget, self).__init__()
-
self._setup_styling()
self._setup_signals()
self._load_widgets()
-
def _setup_styling(self):
self.type = Gtk.MessageType.WARNING
def _setup_signals(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/new_file_widget.py b/src/versions/solarfm-0.0.1/solarfm/core/widgets/dialogs/new_file_widget.py
index 3a071f7..a9d08e0 100644
--- a/src/versions/solarfm-0.0.1/solarfm/core/widgets/dialogs/new_file_widget.py
+++ b/src/versions/solarfm-0.0.1/solarfm/core/widgets/dialogs/new_file_widget.py
@@ -1,5 +1,4 @@
# Python imports
-import inspect
# Lib imports
import gi
@@ -18,18 +17,10 @@ class NewFileWidget:
def __init__(self):
super(NewFileWidget, self).__init__()
+
_GLADE_FILE = f"{settings.get_ui_widgets_path()}/new_file_ui.glade"
- builder = settings.get_builder()
self._builder = Gtk.Builder()
-
self._builder.add_from_file(_GLADE_FILE)
- self._new_file_menu = self._builder.get_object("new_file_menu")
- self._new_fname_field = self._builder.get_object("new_fname_field")
- self._new_file_toggle_type = self._builder.get_object("new_file_toggle_type")
-
- builder.expose_object(f"new_file_menu", self._new_file_menu)
- builder.expose_object(f"new_fname_field", self._new_fname_field)
- builder.expose_object(f"new_file_toggle_type", self._new_file_toggle_type)
self._setup_styling()
self._setup_signals()
@@ -42,21 +33,19 @@ class NewFileWidget:
def _setup_signals(self):
event_system.subscribe("show_new_file_menu", self.show_new_file_menu)
event_system.subscribe("hide_new_file_menu", self.hide_new_file_menu)
-
- 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)
+ settings.register_signals_to_builder([self,], self._builder)
def _load_widgets(self):
- ...
+ builder = settings.get_builder()
+
+ self._new_file_menu = self._builder.get_object("new_file_menu")
+ self._new_fname_field = self._builder.get_object("new_fname_field")
+ self._new_file_toggle_type = self._builder.get_object("new_file_toggle_type")
+
+ builder.expose_object(f"new_file_menu", self._new_file_menu)
+ builder.expose_object(f"new_fname_field", self._new_fname_field)
+ builder.expose_object(f"new_file_toggle_type", self._new_file_toggle_type)
+
def show_new_file_menu(self, widget=None, eve=None):
if widget:
diff --git a/src/versions/solarfm-0.0.1/solarfm/core/widgets/dialogs/rename_widget.py b/src/versions/solarfm-0.0.1/solarfm/core/widgets/dialogs/rename_widget.py
index 2347fa9..fb40155 100644
--- a/src/versions/solarfm-0.0.1/solarfm/core/widgets/dialogs/rename_widget.py
+++ b/src/versions/solarfm-0.0.1/solarfm/core/widgets/dialogs/rename_widget.py
@@ -1,5 +1,4 @@
# Python imports
-import inspect
# Lib imports
import gi
@@ -18,18 +17,10 @@ class RenameWidget:
def __init__(self):
super(RenameWidget, self).__init__()
+
_GLADE_FILE = f"{settings.get_ui_widgets_path()}/rename_ui.glade"
- builder = settings.get_builder()
self._builder = Gtk.Builder()
-
self._builder.add_from_file(_GLADE_FILE)
- self._rename_file_menu = self._builder.get_object("rename_file_menu")
- self._rename_fname = self._builder.get_object("rename_fname")
- self._file_to_rename_label = self._builder.get_object("file_to_rename_label")
-
- builder.expose_object(f"rename_file_menu", self._rename_file_menu)
- builder.expose_object(f"rename_fname", self._rename_fname)
- builder.expose_object(f"file_to_rename_label", self._file_to_rename_label)
self._setup_styling()
self._setup_signals()
@@ -42,21 +33,19 @@ class RenameWidget:
def _setup_signals(self):
event_system.subscribe("show_rename_file_menu", self.show_rename_file_menu)
event_system.subscribe("hide_rename_file_menu", self.hide_rename_file_menu)
-
- classes = [self]
- handlers = {}
- for c in classes:
- methods = None
- try:
- methods = inspect.getmembers(c, predicate=inspect.ismethod)
- handlers.update(methods)
- except Exception as e:
- logger.debug(repr(e))
-
- self._builder.connect_signals(handlers)
+ settings.register_signals_to_builder([self,], self._builder)
def _load_widgets(self):
- ...
+ builder = settings.get_builder()
+
+ self._rename_file_menu = self._builder.get_object("rename_file_menu")
+ self._rename_fname = self._builder.get_object("rename_fname")
+ self._file_to_rename_label = self._builder.get_object("file_to_rename_label")
+
+ builder.expose_object(f"rename_file_menu", self._rename_file_menu)
+ builder.expose_object(f"rename_fname", self._rename_fname)
+ builder.expose_object(f"file_to_rename_label", self._file_to_rename_label)
+
def show_rename_file_menu(self, widget=None, eve=None):
if widget:
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 8e86809..b40ac80 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
@@ -1,5 +1,4 @@
# Python imports
-import inspect
import gc
# Lib imports
@@ -17,14 +16,10 @@ class 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()
@@ -38,7 +33,10 @@ class SaveLoadWidget:
event_system.subscribe("save_load_session", self.save_load_session)
def _load_widgets(self):
- ...
+ builder = settings.get_builder()
+
+ self.save_load_dialog = self._builder.get_object("save_load_dialog")
+ builder.expose_object(f"save_load_dialog", self.save_load_dialog)
def save_load_session(self, action="save_session"):
diff --git a/src/versions/solarfm-0.0.1/solarfm/core/widgets/fm_widget/__init__.py b/src/versions/solarfm-0.0.1/solarfm/core/widgets/fm_widget/__init__.py
deleted file mode 100644
index 06e9c95..0000000
--- a/src/versions/solarfm-0.0.1/solarfm/core/widgets/fm_widget/__init__.py
+++ /dev/null
@@ -1,3 +0,0 @@
-"""
- FileView module
-"""
diff --git a/src/versions/solarfm-0.0.1/solarfm/core/widgets/fm_widget/file_view.py b/src/versions/solarfm-0.0.1/solarfm/core/widgets/fm_widget/file_view.py
deleted file mode 100644
index 5fd9931..0000000
--- a/src/versions/solarfm-0.0.1/solarfm/core/widgets/fm_widget/file_view.py
+++ /dev/null
@@ -1,71 +0,0 @@
-# Python imports
-
-# Lib imports
-import gi
-gi.require_version('Gtk', '3.0')
-from gi.repository import Gtk
-
-# Application imports
-from shellfm.windows.tabs.tab import Tab
-from .icon_view import IconView
-
-
-
-
-class FileView(Gtk.ScrolledWindow):
- """docstring for FileView."""
-
- def __init__(self):
- super(FileView, self).__init__()
- self.tab_state = Tab()
- self.icon_view = IconView(self.tab_state)
- self.tab_widget = self.create_tab_widget()
-
- self._setup_styling()
- self._setup_signals()
-
- self.add(self.icon_view)
- self.show_all()
-
-
- def _setup_styling(self):
- self.set_hexpand(True)
- self.set_vexpand(True)
-
- def _setup_signals(self):
- # self.connect("update-tab-title", self._update_tab_title)
- ...
-
- def _update_tab_title(self, widget=None, eve=None):
- label = self.tab_widget.get_children()[0]
- label.set_label(f"{self.tab_state.get_end_of_path()}")
- label.set_width_chars( len(self.tab_state.get_end_of_path()) )
-
- def set_path(self, path):
- if path:
- self.tab_state.set_path(path)
- self.icon_view.load_store()
- self._update_tab_title()
-
- def create_tab_widget(self):
- button_box = Gtk.ButtonBox()
- label = Gtk.Label()
- close = Gtk.Button()
- icon = Gtk.Image(stock=Gtk.STOCK_CLOSE)
-
- label.set_label(f"{self.tab_state.get_end_of_path()}")
- label.set_width_chars(len(self.tab_state.get_end_of_path()))
- label.set_xalign(0.0)
-
- close.add(icon)
- button_box.add(label)
- button_box.add(close)
-
- close.connect("released", self.close_tab)
-
- button_box.show_all()
- return button_box
-
-
- def close_tab(self, widget, eve=None):
- self.get_parent().emit('close-view', (self,))
diff --git a/src/versions/solarfm-0.0.1/solarfm/core/widgets/fm_widget/files_widget.py b/src/versions/solarfm-0.0.1/solarfm/core/widgets/fm_widget/files_widget.py
deleted file mode 100644
index 0073177..0000000
--- a/src/versions/solarfm-0.0.1/solarfm/core/widgets/fm_widget/files_widget.py
+++ /dev/null
@@ -1,149 +0,0 @@
-# Python imports
-
-# Lib imports
-import gi
-gi.require_version('Gtk', '3.0')
-from gi.repository import Gtk
-
-# Application imports
-from .file_view import FileView
-
-
-
-
-class FilesWidget(Gtk.Notebook):
- """docstring for FilesWidget."""
-
- ccount = 0
-
- def __new__(cls, *args, **kwargs):
- obj = super(FilesWidget, cls).__new__(cls)
- cls.ccount += 1
-
- return obj
-
- def __init__(self):
- super(FilesWidget, self).__init__()
-
- self.set_group_name("file_window")
-
- self.NAME = f"window_{self.ccount}"
- builder = settings.get_builder()
- builder.expose_object(self.NAME, self)
-
- self._add_action_widgets()
- self._setup_styling()
- self._setup_signals()
-
- self.show_all()
-
-
- def _setup_styling(self):
- self.set_scrollable(True)
- self.set_show_tabs(True)
- self.set_show_border(False)
- self.set_hexpand(True)
-
- self.set_margin_top(5)
- self.set_margin_bottom(5)
- self.set_margin_start(5)
- self.set_margin_end(5)
-
- def _setup_signals(self):
- # self.connect("close-view", self.close_view)
- event_system.subscribe("load-window-state", self.load_window_state)
-
- def _add_action_widgets(self):
- start_box = Gtk.Box()
- end_box = Gtk.Box()
-
- search = Gtk.SearchEntry()
- search.set_placeholder_text("Search...")
- search.connect("changed", self._do_query)
-
- home_btn = Gtk.Button()
- home_btn.set_image( Gtk.Image.new_from_icon_name("gtk-home", 4) )
- home_btn.set_always_show_image(True)
- home_btn.connect("released", self.do_action, ("go_home_dir"))
-
- up_btn = Gtk.Button()
- up_btn.set_image( Gtk.Image.new_from_icon_name("up", 4) )
- up_btn.set_always_show_image(True)
- up_btn.connect("released", self.do_action, ("go_up_dir"))
-
- refresh_btn = Gtk.Button()
- refresh_btn.set_image( Gtk.Image.new_from_icon_name("gtk-refresh", 4) )
- refresh_btn.set_always_show_image(True)
- refresh_btn.connect("released", self.do_action, ("refresh_dir"))
-
- add_btn = Gtk.Button()
- add_btn.set_image( Gtk.Image.new_from_icon_name("add", 4) )
- add_btn.set_always_show_image(True)
- add_btn.connect("released", self.create_view)
-
- start_box.add(home_btn)
- start_box.add(add_btn)
- end_box.add(search)
- end_box.add(up_btn)
- end_box.add(refresh_btn)
-
- start_box.show_all()
- end_box.show_all()
-
- # PACKTYPE: 0 Start, 1 = End
- self.set_action_widget(start_box, 0)
- self.set_action_widget(end_box, 1)
-
- def _do_query(self, widget):
- text = widget.get_text()
- page = self.get_nth_page( self.get_current_page() )
- page.icon_view.search_filter(text)
-
-
- def load_window_state(self, win_name=None, tabs=None):
- if win_name == self.NAME:
- if len(tabs) > 0:
- for tab in tabs:
- self.create_view()
- self.load_tab(tab)
- else:
- self.create_view()
-
- def create_view(self, widget = None):
- file_view = FileView()
- index = self.append_page(file_view, file_view.tab_widget)
- self.set_current_page(index)
-
- return file_view
-
- def load_tab(self, path = None):
- if path:
- file_view = self.get_nth_page( self.get_current_page() )
- file_view.set_path(path)
-
-
- def do_action(self, widget = None, action = None):
- file_view = self.get_nth_page( self.get_current_page() )
-
- if action == "refresh_dir":
- file_view.icon_view.refresh_dir()
-
- if action == "go_up_dir":
- file_view.icon_view.go_up_dir()
-
- if action == "go_home_dir":
- file_view.icon_view.go_home_dir()
-
-
- def close_view(self, parent, data = None):
- widget = data[0]
- page = self.page_num(widget)
-
- # watcher = widget.tab_state.get_dir_watcher()
- # watcher.cancel()
- if self.get_n_pages() > 1:
- self.remove_page(page)
-
- # NOTE: Will prob try and call a window custom signal...
- # self.fm_controller.save_state()
- # self.set_window_title()
diff --git a/src/versions/solarfm-0.0.1/solarfm/core/widgets/fm_widget/icon_view.py b/src/versions/solarfm-0.0.1/solarfm/core/widgets/fm_widget/icon_view.py
deleted file mode 100644
index 072a0f5..0000000
--- a/src/versions/solarfm-0.0.1/solarfm/core/widgets/fm_widget/icon_view.py
+++ /dev/null
@@ -1,146 +0,0 @@
-# Python imports
-
-# Lib imports
-import gi
-gi.require_version('Gtk', '3.0')
-gi.require_version('Gdk', '3.0')
-from gi.repository import Gtk
-from gi.repository import Gdk
-from gi.repository import GdkPixbuf
-from gi.repository import Gio
-
-# Application imports
-from .signals.icon_view_signals_mixin import IconViewSignalsMixin
-
-
-
-
-class IconView(IconViewSignalsMixin, Gtk.FlowBox):
- """docstring for IconView."""
-
- def __init__(self, _tab_state):
- super(IconView, self).__init__()
- self.tab_state = _tab_state
- self.selected_files = []
- self.icon_theme = settings.get_icon_theme()
-
- self._setup_styling()
- self._setup_signals()
- # self._setup_dnd()
- self.load_store()
-
- self.show_all()
-
-
- def _emmit_signal_to_file_view(self, signal_type):
- self.get_parent().get_parent().emit(signal_type, None)
-
- def _setup_styling(self):
- self.set_selection_mode(Gtk.SelectionMode.MULTIPLE)
- self.set_valign(Gtk.Align.START)
- self.set_column_spacing(15)
- self.set_row_spacing(15)
- self.set_homogeneous(True)
-
- def _setup_signals(self):
- self.set_activate_on_single_click(False)
- self.connect("child-activated", self.icon_double_click)
-
- # self.connect("drag-data-get", self.on_drag_set)
- # self.connect("drag-data-received", self.on_drag_data_received)
- # self.connect("drag-motion", self.on_drag_motion)
-
-
- # NOTE: This gets called by a txt box which then shows/hides the flowbox child
- # https://stackoverflow.com/questions/55828169/how-to-filter-gtk-flowbox-children-with-gtk-entrysearch
- def search_filter(self, text):
- def filter_func(fb_child, text):
- if text.lower() in fb_child.get_name().lower():
- return True
- else:
- return False
-
- self.set_filter_func(filter_func, text)
-
-
- def _setup_dnd(self):
- URI_TARGET_TYPE = 80
- uri_target = Gtk.TargetEntry.new('text/uri-list', Gtk.TargetFlags(0), URI_TARGET_TYPE)
- targets = [ uri_target ]
- action = Gdk.DragAction.COPY
- self.enable_model_drag_dest(targets, action)
- self.enable_model_drag_source(0, targets, action)
-
- def _clear_children(self, widget: type) -> None:
- ''' Clear children of a gtk widget. '''
- for child in widget.get_children():
- widget.remove(child)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# class IconView(IconViewSignalsMixin, Gtk.IconView):
-# """docstring for IconView."""
-#
-# def __init__(self, _tab_state):
-# super(IconView, self).__init__()
-# self.store = None
-# self.tab_state = _tab_state
-# self.selected_files = []
-# self.icon_theme = Gtk.IconTheme.get_default()
-#
-# self._setup_store()
-# self._setup_styling()
-# self._setup_signals()
-# self._setup_dnd()
-# self.load_store()
-#
-# self.show_all()
-#
-#
-# def _setup_store(self):
-# self.store = Gtk.ListStore(GdkPixbuf.Pixbuf or GdkPixbuf.PixbufAnimation or None, str or None)
-# self.set_model(self.store)
-# self.set_pixbuf_column(0)
-# self.set_text_column(1)
-#
-# def _setup_styling(self):
-# self.set_item_orientation(1)
-# self.set_selection_mode(3)
-# self.set_item_width(96)
-# self.set_item_padding(8)
-# self.set_margin(12)
-# self.set_row_spacing(18)
-# self.set_columns(-1)
-# self.set_spacing(12)
-# self.set_column_spacing(18)
-#
-# def _setup_signals(self):
-# # self.connect("button_release_event", self.icon_single_click)
-# self.connect("item-activated", self.icon_double_click)
-# self.connect("selection-changed", self.set_selected_items)
-# # self.connect("drag-data-get", self.on_drag_set)
-# # self.connect("drag-data-received", self.on_drag_data_received)
-# # self.connect("drag-motion", self.on_drag_motion)
-# pass
-#
-# def _setup_dnd(self):
-# URI_TARGET_TYPE = 80
-# uri_target = Gtk.TargetEntry.new('text/uri-list', Gtk.TargetFlags(0), URI_TARGET_TYPE)
-# targets = [ uri_target ]
-# action = Gdk.DragAction.COPY
-# self.enable_model_drag_dest(targets, action)
-# self.enable_model_drag_source(0, targets, action)
-#
-# def set_selected_items(self, icons_grid):
-# self.selected_files = self.get_selected_items()
diff --git a/src/versions/solarfm-0.0.1/solarfm/core/widgets/fm_widget/signals/__init__.py b/src/versions/solarfm-0.0.1/solarfm/core/widgets/fm_widget/signals/__init__.py
deleted file mode 100644
index 03c3ec2..0000000
--- a/src/versions/solarfm-0.0.1/solarfm/core/widgets/fm_widget/signals/__init__.py
+++ /dev/null
@@ -1,3 +0,0 @@
-"""
- Signals module
-"""
diff --git a/src/versions/solarfm-0.0.1/solarfm/core/widgets/fm_widget/signals/icon_view_signals_mixin.py b/src/versions/solarfm-0.0.1/solarfm/core/widgets/fm_widget/signals/icon_view_signals_mixin.py
deleted file mode 100644
index 19fc16f..0000000
--- a/src/versions/solarfm-0.0.1/solarfm/core/widgets/fm_widget/signals/icon_view_signals_mixin.py
+++ /dev/null
@@ -1,183 +0,0 @@
-# Python imports
-import os
-import traceback
-import threading
-import subprocess
-import time
-from os.path import isdir
-
-# Lib imports
-import gi
-
-gi.require_version("Gtk", "3.0")
-gi.require_version('Gdk', '3.0')
-from gi.repository import Gtk
-from gi.repository import GLib
-from gi.repository import Gdk
-from gi.repository import GdkPixbuf
-from gi.repository import Gio
-
-
-# Application imports
-
-
-
-
-class FileView(Gtk.Box):
- """docstring for FileView."""
-
- def __init__(self, _icon = None, _label = None):
- super(FileView, self).__init__()
- self.icon = None
- self.label = _label
-
- self.label.set_line_wrap(True)
- self.label.set_selectable(True)
- self.label.set_max_width_chars(20)
- self.label.set_justify(2)
- self.label.set_line_wrap_mode(2)
-
- self.add(self.label)
- self.set_orientation(1)
-
- self.show_all()
-
- def set_img(self, img):
- self.icon = img
- self.add(img)
- self.reorder_child(self.icon, 0)
-
-
-
-class IconViewSignalsMixin:
- """docstring for WidgetMixin"""
-
- def load_store(self):
- self._clear_children(self)
- self.search_filter("")
-
- dir = self.tab_state.get_current_directory()
- files = self.tab_state.get_files()
-
- for i, file in enumerate(files):
- label = Gtk.Label(label=file[0])
- child = Gtk.FlowBoxChild()
- child.set_name(file[0])
-
- file_view = FileView(_label=label)
- child.add( file_view )
- self.add(child)
- self.create_icon(file_view, dir, file[0])
-
- @threaded
- def create_icon(self, file_view, dir, file):
- icon = self.tab_state.create_icon(dir, file)
- GLib.idle_add(self.update_store, *(file_view, icon, dir, file,))
-
- def update_store(self, file_view, icon, dir, file):
- if not icon:
- path = f"{dir}/{file}"
- icon = self.get_system_thumbnail(path, self.tab_state.sys_icon_wh[0])
-
- if not icon:
- icon = GdkPixbuf.Pixbuf.new_from_file(self.tab_state.DEFAULT_ICON)
-
- img = Gtk.Image.new_from_pixbuf(icon)
- img.show()
- file_view.set_img(img)
- self.show_all()
-
-
- def get_system_thumbnail(self, filename, size):
- try:
- gio_file = Gio.File.new_for_path(filename)
- info = gio_file.query_info('standard::icon' , 0, None)
- icon = info.get_icon().get_names()[0]
- icon_path = self.icon_theme.lookup_icon(icon , size , 0).get_filename()
-
- return GdkPixbuf.Pixbuf.new_from_file(icon_path)
- except Exception:
- ...
-
- return None
-
-
- def icon_double_click(self, icons_grid, item, data=None):
- try:
- file_view = item.get_children()[0]
- file_name = file_view.label.get_label()
- dir = self.tab_state.get_current_directory()
- file = f"{dir}/{file_name}"
-
- if isdir(file):
- self.tab_state.set_path(file)
- self.load_store()
- self._emmit_signal_to_file_view('update-tab-title')
- else:
- event_system.emit("open_files", (self, file))
- except Exception as e:
- traceback.print_exc()
-
-
- def go_up_dir(self):
- self.tab_state.pop_from_path()
- self.load_store()
- self._emmit_signal_to_file_view('update-tab-title')
-
- def go_home_dir(self):
- self.tab_state.set_to_home()
- self.load_store()
- self._emmit_signal_to_file_view('update-tab-title')
-
- def go_to_path(self, path):
- self.tab_state.set_path(path)
- self.load_store()
- self._emmit_signal_to_file_view('update-tab-title')
-
- def refresh_dir(self):
- self.tab_state.load_directory()
- self.load_store()
-
- # def on_drag_set(self, icons_grid, drag_context, data, info, time):
- # action = icons_grid.get_name()
- # wid, tid = action.split("|")
- # store = icons_grid.get_model()
- # treePaths = icons_grid.get_selected_items()
- # # NOTE: Need URIs as URI format for DnD to work. Will strip 'file://'
- # # further down call chain when doing internal fm stuff.
- # uris = self.format_to_uris(store, wid, tid, treePaths)
- # uris_text = '\n'.join(uris)
- #
- # data.set_uris(uris)
- # data.set_text(uris_text, -1)
- #
- # def on_drag_motion(self, icons_grid, drag_context, x, y, data):
- # current = '|'.join(self.fm_controller.get_active_wid_and_tid())
- # target = icons_grid.get_name()
- # wid, tid = target.split("|")
- # store = icons_grid.get_model()
- # treePath = icons_grid.get_drag_dest_item().path
- #
- # if treePath:
- # uri = self.format_to_uris(store, wid, tid, treePath)[0].replace("file://", "")
- # self.override_drop_dest = uri if isdir(uri) else None
- #
- # if target not in current:
- # self.fm_controller.set_wid_and_tid(wid, tid)
- #
- #
- # def on_drag_data_received(self, widget, drag_context, x, y, data, info, time):
- # if info == 80:
- # wid, tid = self.fm_controller.get_active_wid_and_tid()
- # notebook = self.builder.get_object(f"window_{wid}")
- # store, tab_label = self.get_store_and_label_from_notebook(notebook, f"{wid}|{tid}")
- # tab = self.get_fm_window(wid).get_tab_by_id(tid)
- #
- # uris = data.get_uris()
- # dest = f"{tab.get_current_directory()}" if not self.override_drop_dest else self.override_drop_dest
- # if len(uris) == 0:
- # uris = data.get_text().split("\n")
- #
- # from_uri = '/'.join(uris[0].replace("file://", "").split("/")[:-1])
- # if from_uri != dest:
- # self.move_files(uris, dest)
diff --git a/src/versions/solarfm-0.0.1/solarfm/core/widgets/icon_grid_widget.py b/src/versions/solarfm-0.0.1/solarfm/core/widgets/icon_grid_widget.py
index 9f43d99..cad0503 100644
--- a/src/versions/solarfm-0.0.1/solarfm/core/widgets/icon_grid_widget.py
+++ b/src/versions/solarfm-0.0.1/solarfm/core/widgets/icon_grid_widget.py
@@ -29,8 +29,6 @@ class IconGridWidget(Gtk.IconView):
self.show_all()
- def get_store(self):
- return self._store
def _setup_styling(self):
self.set_pixbuf_column(0)
@@ -74,3 +72,7 @@ class IconGridWidget(Gtk.IconView):
action = Gdk.DragAction.COPY
self.enable_model_drag_dest(targets, action)
self.enable_model_drag_source(0, targets, action)
+
+
+ def get_store(self):
+ return self._store
diff --git a/src/versions/solarfm-0.0.1/solarfm/core/widgets/io_widget.py b/src/versions/solarfm-0.0.1/solarfm/core/widgets/io_widget.py
index 2b81388..c0bcce1 100644
--- a/src/versions/solarfm-0.0.1/solarfm/core/widgets/io_widget.py
+++ b/src/versions/solarfm-0.0.1/solarfm/core/widgets/io_widget.py
@@ -16,6 +16,7 @@ class IOWidget(Gtk.Box):
def __init__(self, action, file):
super(IOWidget, self).__init__()
+
self._action = action
self._file = file
self._basename = self._file.get_basename()
@@ -59,6 +60,7 @@ class IOWidget(Gtk.Box):
self.add(label)
self.add(stats)
+
def do_cancel(self, widget, container, eve):
logger.info(f"Canceling: [{self._action}] of {self._basename} ...")
eve.cancel()
diff --git a/src/versions/solarfm-0.0.1/solarfm/core/widgets/popups/io_popup_widget.py b/src/versions/solarfm-0.0.1/solarfm/core/widgets/popups/io_popup_widget.py
index eaf1360..3a52385 100644
--- a/src/versions/solarfm-0.0.1/solarfm/core/widgets/popups/io_popup_widget.py
+++ b/src/versions/solarfm-0.0.1/solarfm/core/widgets/popups/io_popup_widget.py
@@ -1,5 +1,4 @@
# Python imports
-import inspect
# Lib imports
import gi
@@ -16,8 +15,8 @@ class IOPopupWidget(Gtk.Popover):
def __init__(self):
super(IOPopupWidget, self).__init__()
- self._builder = settings.get_builder()
+ self._builder = settings.get_builder()
self._builder.expose_object(f"io_popup", self)
self._setup_styling()
@@ -42,5 +41,6 @@ class IOPopupWidget(Gtk.Popover):
self._builder.expose_object(f"io_list", vbox)
self.add(vbox)
+
def show_io_popup(self, widget=None, eve=None):
self.popup()
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 b89611e..7f44aa4 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
@@ -20,9 +20,10 @@ class MessagePopupWidget(Gtk.Popover):
def __init__(self):
super(MessagePopupWidget, self).__init__()
- self.builder = settings.get_builder()
+ self.builder = settings.get_builder()
self.builder.expose_object(f"message_popup_widget", self)
+
self._message_buffer = None
self._setup_styling()
@@ -40,7 +41,6 @@ class MessagePopupWidget(Gtk.Popover):
event_system.subscribe("show_messages_popup", self.show_messages_popup)
event_system.subscribe("hide_messages_popup", self.hide_messages_popup)
-
def _load_widgets(self):
self._message_buffer = Gtk.TextBuffer()
vbox = Gtk.Box()
@@ -66,6 +66,7 @@ class MessagePopupWidget(Gtk.Popover):
vbox.add(scroll_window)
self.add(vbox)
+
def show_messages_popup(self):
self.popup()
diff --git a/src/versions/solarfm-0.0.1/solarfm/core/widgets/popups/path_menu_popup_widget.py b/src/versions/solarfm-0.0.1/solarfm/core/widgets/popups/path_menu_popup_widget.py
index 479d0e3..36920e2 100644
--- a/src/versions/solarfm-0.0.1/solarfm/core/widgets/popups/path_menu_popup_widget.py
+++ b/src/versions/solarfm-0.0.1/solarfm/core/widgets/popups/path_menu_popup_widget.py
@@ -15,8 +15,8 @@ class PathMenuPopupWidget(Gtk.Popover):
def __init__(self):
super(PathMenuPopupWidget, self).__init__()
- self.builder = settings.get_builder()
+ self.builder = settings.get_builder()
self.builder.expose_object(f"path_menu", self)
self._setup_styling()
@@ -50,6 +50,7 @@ class PathMenuPopupWidget(Gtk.Popover):
scroll_window.show_all()
self.add(scroll_window)
+
def show_path_menu(self, widget=None, eve=None):
self.popup()
diff --git a/src/versions/solarfm-0.0.1/solarfm/core/widgets/popups/plugins_popup_widget.py b/src/versions/solarfm-0.0.1/solarfm/core/widgets/popups/plugins_popup_widget.py
index b8b11e5..c90992f 100644
--- a/src/versions/solarfm-0.0.1/solarfm/core/widgets/popups/plugins_popup_widget.py
+++ b/src/versions/solarfm-0.0.1/solarfm/core/widgets/popups/plugins_popup_widget.py
@@ -1,5 +1,4 @@
# Python imports
-import inspect
# Lib imports
import gi
@@ -16,8 +15,8 @@ class PluginsPopupWidget(Gtk.Popover):
def __init__(self):
super(PluginsPopupWidget, self).__init__()
- self.builder = settings.get_builder()
+ self.builder = settings.get_builder()
self.builder.expose_object(f"plugin_controls", self)
self._setup_styling()
@@ -43,6 +42,7 @@ class PluginsPopupWidget(Gtk.Popover):
self.builder.expose_object(f"plugin_control_list", vbox)
self.add(vbox)
+
def show_plugins_popup(self, widget=None, eve=None):
self.popup()
diff --git a/src/versions/solarfm-0.0.1/solarfm/core/widgets/tab_header_widget.py b/src/versions/solarfm-0.0.1/solarfm/core/widgets/tab_header_widget.py
index e3efccb..22ceb3d 100644
--- a/src/versions/solarfm-0.0.1/solarfm/core/widgets/tab_header_widget.py
+++ b/src/versions/solarfm-0.0.1/solarfm/core/widgets/tab_header_widget.py
@@ -15,6 +15,7 @@ class TabHeaderWidget(Gtk.ButtonBox):
def __init__(self, tab, close_tab):
super(TabHeaderWidget, self).__init__()
+
self._tab = tab
self._close_tab = close_tab # NOTE: Close method in tab_mixin
@@ -22,6 +23,7 @@ class TabHeaderWidget(Gtk.ButtonBox):
self._setup_signals()
self._load_widgets()
+
def _setup_styling(self):
self.set_orientation(0)
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 92c91f4..e6e27b9 100644
--- a/src/versions/solarfm-0.0.1/solarfm/core/window.py
+++ b/src/versions/solarfm-0.0.1/solarfm/core/window.py
@@ -37,7 +37,8 @@ class Window(Gtk.ApplicationWindow):
def _setup_styling(self):
- self.set_default_size(1670, 830)
+ self.set_default_size(settings.get_main_window_width(),
+ settings.get_main_window_height())
self.set_title(f"{app_name}")
self.set_icon_from_file( settings.get_window_icon() )
self.set_gravity(5) # 5 = CENTER
@@ -45,11 +46,6 @@ class Window(Gtk.ApplicationWindow):
def _setup_signals(self):
self.connect("delete-event", self._tear_down)
-
- # self.connect("focus-out-event", self._controller.unset_keys_and_data)
- # self.connect("key-press-event", self._controller.on_global_key_press_controller)
- # self.connect("key-release-event", self._controller.on_global_key_release_controller)
-
GLib.unix_signal_add(GLib.PRIORITY_DEFAULT, signal.SIGINT, self._tear_down)
def _subscribe_to_events(self):
diff --git a/src/versions/solarfm-0.0.1/solarfm/factories/__init__.py b/src/versions/solarfm-0.0.1/solarfm/factories/__init__.py
deleted file mode 100644
index c24aa05..0000000
--- a/src/versions/solarfm-0.0.1/solarfm/factories/__init__.py
+++ /dev/null
@@ -1,3 +0,0 @@
-"""
- Factories Module
-"""
diff --git a/src/versions/solarfm-0.0.1/solarfm/factories/split_view_widget.py b/src/versions/solarfm-0.0.1/solarfm/factories/split_view_widget.py
deleted file mode 100644
index 9492370..0000000
--- a/src/versions/solarfm-0.0.1/solarfm/factories/split_view_widget.py
+++ /dev/null
@@ -1,33 +0,0 @@
-# Python imports
-
-# Lib imports
-import gi
-gi.require_version('Gtk', '3.0')
-from gi.repository import Gtk
-
-# Application imports
-from core.widgets.fm_widget.files_widget import FilesWidget
-
-
-
-
-class SplitViewWidget(Gtk.Paned):
- def __init__(self):
- super(SplitViewWidget, self).__init__()
-
- self._setup_styling()
- self._setup_signals()
- self._load_widgets()
-
- self.show_all()
-
-
- def _setup_styling(self):
- self.set_wide_handle(True)
-
- def _setup_signals(self):
- ...
-
- def _load_widgets(self):
- self.pack1(FilesWidget(), resize=False, shrink=False)
- self.pack2(FilesWidget(), resize=True, shrink=False)
diff --git a/src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/icons/icon.py b/src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/icons/icon.py
index c06e2be..20fa5b4 100644
--- a/src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/icons/icon.py
+++ b/src/versions/solarfm-0.0.1/solarfm/shellfm/windows/tabs/icons/icon.py
@@ -35,11 +35,11 @@ class Icon(DesktopIconMixin, VideoIconMixin, MeshsIconMixin):
def get_icon_image(self, dir, file, full_path):
try:
- thumbnl = self._get_system_thumbnail_gtk_thread(full_path, self.sys_icon_wh[0])
+ thumbnl = None
if file.lower().endswith(self.fmeshs): # 3D Mesh icon
...
- if file.lower().endswith(self.fvideos): # Video icon
+ elif file.lower().endswith(self.fvideos): # Video icon
thumbnl = self.create_video_thumbnail(full_path)
elif file.lower().endswith(self.fimages): # Image Icon
thumbnl = self.create_scaled_image(full_path)
@@ -49,7 +49,10 @@ class Icon(DesktopIconMixin, VideoIconMixin, MeshsIconMixin):
thumbnl = self.find_thumbnail_from_desktop_file(full_path)
if not thumbnl:
- raise IconException("No known icons found.")
+ thumbnl = self._get_system_thumbnail_gtk_thread(full_path, self.sys_icon_wh[0])
+ if not thumbnl:
+ raise IconException("No known icons found.")
+
return thumbnl
except IconException:
diff --git a/src/versions/solarfm-0.0.1/solarfm/utils/settings/settings.py b/src/versions/solarfm-0.0.1/solarfm/utils/settings/settings.py
index eadffca..3494a49 100644
--- a/src/versions/solarfm-0.0.1/solarfm/utils/settings/settings.py
+++ b/src/versions/solarfm-0.0.1/solarfm/utils/settings/settings.py
@@ -46,14 +46,24 @@ class Settings(StartCheckMixin):
if not os.path.exists(self._DEFAULT_ICONS):
self._DEFAULT_ICONS = f"{self._USR_PATH}/icons"
+ if not os.path.exists(self._DEFAULT_ICONS):
+ raise MissingConfigError("Unable to find the application icons directory.")
if not os.path.exists(self._GLADE_FILE):
self._GLADE_FILE = f"{self._USR_PATH}/Main_Window.glade"
+ if not os.path.exists(self._GLADE_FILE):
+ raise MissingConfigError("Unable to find the application Glade file.")
if not os.path.exists(self._KEY_BINDINGS_FILE):
self._KEY_BINDINGS_FILE = f"{self._USR_PATH}/key-bindings.json"
+ if not os.path.exists(self._KEY_BINDINGS_FILE):
+ raise MissingConfigError("Unable to find the application Keybindings file.")
if not os.path.exists(self._CSS_FILE):
self._CSS_FILE = f"{self._USR_PATH}/stylesheet.css"
+ if not os.path.exists(self._CSS_FILE):
+ raise MissingConfigError("Unable to find the application Stylesheet file.")
if not os.path.exists(self._WINDOW_ICON):
self._WINDOW_ICON = f"{self._USR_PATH}/icons/{app_name.lower()}.png"
+ if not os.path.exists(self._WINDOW_ICON):
+ raise MissingConfigError("Unable to find the application icon.")
self._UI_WIDEGTS_PATH = f"{self._USR_PATH}/ui_widgets"
@@ -73,6 +83,8 @@ class Settings(StartCheckMixin):
self._context_menu_data = json.load(file)
self._main_window = None
+ self._main_window_w = 1670
+ self._main_window_h = 830
self._builder = None
self._trace_debug = False
@@ -82,7 +94,7 @@ class Settings(StartCheckMixin):
self.load_settings()
- def register_signals_to_builder(self, classes=None):
+ def register_signals_to_builder(self, classes=None, builder=None):
handlers = {}
for c in classes:
@@ -93,8 +105,7 @@ class Settings(StartCheckMixin):
except Exception as e:
print(repr(e))
- self._builder.connect_signals(handlers)
-
+ builder.connect_signals(handlers)
def get_monitor_data(self) -> list:
screen = self._main_window.get_screen()
@@ -108,8 +119,10 @@ class Settings(StartCheckMixin):
def set_builder(self, builder) -> any: self._builder = builder
def set_main_window(self, window): self._main_window = window
- def get_main_window(self) -> Gtk.ApplicationWindow: return self._main_window
- def get_builder(self) -> Gtk.Builder: return self._builder
+ def get_main_window(self) -> Gtk.ApplicationWindow: return self._main_window
+ def get_main_window_width(self) -> Gtk.ApplicationWindow: return self._main_window_w
+ def get_main_window_height(self) -> Gtk.ApplicationWindow: return self._main_window_h
+ def get_builder(self) -> Gtk.Builder: return self._builder
def get_glade_file(self) -> str: return self._GLADE_FILE
def get_icon_theme(self) -> str: return self._ICON_THEME
def get_css_file(self) -> str: return self._CSS_FILE
diff --git a/user_config/usr/share/solarfm/Main_Window.glade b/user_config/usr/share/solarfm/Main_Window.glade
index f6b118c..6e9d57f 100644
--- a/user_config/usr/share/solarfm/Main_Window.glade
+++ b/user_config/usr/share/solarfm/Main_Window.glade
@@ -790,56 +790,7 @@
-
-
- False
- True
- 3
-
+
diff --git a/user_config/usr/share/solarfm/ui_widgets/bottom_status_info_ui.glade b/user_config/usr/share/solarfm/ui_widgets/bottom_status_info_ui.glade
new file mode 100644
index 0000000..b2dd13d
--- /dev/null
+++ b/user_config/usr/share/solarfm/ui_widgets/bottom_status_info_ui.glade
@@ -0,0 +1,50 @@
+
+
+
+
+
+ True
+ False
+ 10
+ 10
+ 10
+ 10
+ 6
+ 6
+ 15
+ top
+
+
+ True
+ False
+
+
+ False
+ True
+ 0
+
+
+
+
+ True
+ False
+
+
+ False
+ True
+ 1
+
+
+
+
+ True
+ False
+
+
+ False
+ True
+ 2
+
+
+
+