Added Singleton class to inherit as needed
This commit is contained in:
@@ -56,11 +56,12 @@ class Controller(UIMixin, SignalsMixins, Controller_Data):
|
||||
|
||||
|
||||
def _setup_styling(self):
|
||||
...
|
||||
|
||||
def _setup_signals(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()
|
||||
|
||||
def _subscribe_to_events(self):
|
||||
|
@@ -10,6 +10,7 @@ from gi.repository import Gtk
|
||||
|
||||
# Application imports
|
||||
from .widgets.dialogs.message_widget import MessageWidget
|
||||
from .widgets.dialogs.user_pass_widget import UserPassWidget
|
||||
|
||||
from shellfm.windows.controller import WindowController
|
||||
from plugins.plugins_controller import PluginsController
|
||||
@@ -30,7 +31,8 @@ class State:
|
||||
selected_files: [] = None
|
||||
to_copy_files: [] = None
|
||||
to_cut_files: [] = None
|
||||
message_dialog: type = None
|
||||
message_dialog: type = None
|
||||
user_pass_dialog: type = None
|
||||
|
||||
|
||||
class Controller_Data:
|
||||
@@ -81,17 +83,18 @@ class Controller_Data:
|
||||
Returns:
|
||||
state (obj): 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.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 = event_system.emit_and_await("get_files_view_icon_grid", (state.wid, state.tid))
|
||||
state.store = state.icon_grid.get_model()
|
||||
state.message_dialog = MessageWidget()
|
||||
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.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 = event_system.emit_and_await("get_files_view_icon_grid", (state.wid, state.tid))
|
||||
state.store = state.icon_grid.get_model()
|
||||
state.message_dialog = MessageWidget()
|
||||
state.user_pass_dialog = UserPassWidget()
|
||||
|
||||
selected_files = state.icon_grid.get_selected_items()
|
||||
selected_files = state.icon_grid.get_selected_items()
|
||||
if selected_files:
|
||||
state.uris = self.format_to_uris(state.store, state.wid, state.tid, selected_files, True)
|
||||
state.uris_raw = self.format_to_uris(state.store, state.wid, state.tid, selected_files)
|
||||
|
@@ -36,18 +36,18 @@ class FileActionSignalsMixin:
|
||||
# NOTE: Too lazy to impliment a proper update handler and so just regen store and update tab.
|
||||
# Use a lock system to prevent too many update calls for certain instances but user can manually refresh if they have urgency
|
||||
def dir_watch_updates(self, file_monitor, file, other_file=None, eve_type=None, data=None):
|
||||
if eve_type in [Gio.FileMonitorEvent.CREATED, Gio.FileMonitorEvent.DELETED,
|
||||
Gio.FileMonitorEvent.RENAMED, Gio.FileMonitorEvent.MOVED_IN,
|
||||
Gio.FileMonitorEvent.MOVED_OUT]:
|
||||
if settings.is_debug():
|
||||
if eve_type == Gio.FileMonitorEvent.CHANGES_DONE_HINT:
|
||||
if eve_type in [Gio.FileMonitorEvent.CREATED, Gio.FileMonitorEvent.DELETED,
|
||||
Gio.FileMonitorEvent.RENAMED, Gio.FileMonitorEvent.MOVED_IN,
|
||||
Gio.FileMonitorEvent.MOVED_OUT]:
|
||||
logger.debug(eve_type)
|
||||
|
||||
if eve_type in [Gio.FileMonitorEvent.MOVED_IN, Gio.FileMonitorEvent.MOVED_OUT]:
|
||||
self.update_on_soft_lock_end(data[0])
|
||||
elif data[0] in self.soft_update_lock.keys():
|
||||
self.soft_update_lock[data[0]]["last_update_time"] = time.time()
|
||||
else:
|
||||
self.soft_lock_countdown(data[0])
|
||||
if eve_type in [Gio.FileMonitorEvent.MOVED_IN, Gio.FileMonitorEvent.MOVED_OUT]:
|
||||
self.update_on_soft_lock_end(data[0])
|
||||
elif data[0] in self.soft_update_lock.keys():
|
||||
self.soft_update_lock[data[0]]["last_update_time"] = time.time()
|
||||
else:
|
||||
self.soft_lock_countdown(data[0])
|
||||
|
||||
@threaded
|
||||
def soft_lock_countdown(self, tab_widget):
|
||||
|
@@ -54,6 +54,9 @@ class TabMixin(GridMixin):
|
||||
|
||||
def close_tab(self, button, eve=None):
|
||||
notebook = button.get_parent().get_parent()
|
||||
if notebook.get_n_pages() == 1:
|
||||
return
|
||||
|
||||
wid = int(notebook.get_name()[-1])
|
||||
tid = self.get_id_from_tab_box(button.get_parent())
|
||||
scroll = self.builder.get_object(f"{wid}|{tid}")
|
||||
|
@@ -0,0 +1,63 @@
|
||||
# Python imports
|
||||
|
||||
# Lib imports
|
||||
import gi
|
||||
gi.require_version('Gtk', '3.0')
|
||||
from gi.repository import Gtk
|
||||
from gi.repository import Gdk
|
||||
|
||||
# Application imports
|
||||
|
||||
|
||||
|
||||
|
||||
class UserPassWidget(Gtk.Dialog):
|
||||
"""docstring for UserPassWidget."""
|
||||
|
||||
def __init__(self):
|
||||
super(UserPassWidget, self).__init__()
|
||||
|
||||
self.user_input = Gtk.Entry()
|
||||
self.pass_input = Gtk.Entry()
|
||||
|
||||
self._setup_styling()
|
||||
self._setup_signals()
|
||||
self._subscribe_to_events()
|
||||
self._load_widgets()
|
||||
|
||||
|
||||
def _setup_styling(self):
|
||||
self.set_modal(True)
|
||||
self.set_type_hint(Gdk.WindowTypeHint.DIALOG)
|
||||
|
||||
self.user_input.set_placeholder_text("User:")
|
||||
self.pass_input.set_placeholder_text("Password:")
|
||||
self.pass_input.set_visibility(False)
|
||||
|
||||
def _setup_signals(self):
|
||||
# self.connect("response", self.on_response)
|
||||
...
|
||||
|
||||
def _subscribe_to_events(self):
|
||||
...
|
||||
|
||||
def _load_widgets(self):
|
||||
vbox = self.get_content_area()
|
||||
label = Gtk.Label(label="User & Password")
|
||||
vbox.add(label)
|
||||
vbox.add(self.user_input)
|
||||
vbox.add(self.pass_input)
|
||||
vbox.show_all()
|
||||
|
||||
self.add_buttons(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
|
||||
"Skip Input", Gtk.ResponseType.CLOSE,
|
||||
"Submit Input", Gtk.ResponseType.OK
|
||||
)
|
||||
|
||||
def do_response(self, response_id):
|
||||
self.hide()
|
||||
return response_id
|
||||
|
||||
# def on_response(self, widget, response_id):
|
||||
# self.hide()
|
||||
# return response_id
|
@@ -52,10 +52,11 @@ class TabMixin(GridMixin):
|
||||
self.set_file_watcher(tab)
|
||||
|
||||
|
||||
|
||||
|
||||
def close_tab(self, button, eve=None):
|
||||
notebook = button.get_parent().get_parent()
|
||||
if notebook.get_n_pages() == 1:
|
||||
return
|
||||
|
||||
wid = int(notebook.get_name()[-1])
|
||||
tid = self.get_id_from_tab_box(button.get_parent())
|
||||
scroll = self.builder.get_object(f"{wid}|{tid}")
|
||||
|
@@ -10,7 +10,7 @@ from gi.repository import Gtk
|
||||
|
||||
|
||||
|
||||
class TabHeaderWidget(Gtk.ButtonBox):
|
||||
class TabHeaderWidget(Gtk.Box):
|
||||
"""docstring for TabHeaderWidget"""
|
||||
|
||||
def __init__(self, tab, close_tab):
|
||||
@@ -26,6 +26,7 @@ class TabHeaderWidget(Gtk.ButtonBox):
|
||||
|
||||
def _setup_styling(self):
|
||||
self.set_orientation(0)
|
||||
self.set_hexpand(False)
|
||||
|
||||
def _setup_signals(self):
|
||||
...
|
||||
@@ -39,6 +40,9 @@ class TabHeaderWidget(Gtk.ButtonBox):
|
||||
label.set_label(f"{self._tab.get_end_of_path()}")
|
||||
label.set_width_chars(len(self._tab.get_end_of_path()))
|
||||
label.set_xalign(0.0)
|
||||
label.set_margin_left(25)
|
||||
label.set_margin_right(25)
|
||||
label.set_hexpand(True)
|
||||
tid.set_label(f"{self._tab.get_id()}")
|
||||
|
||||
close.connect("released", self._close_tab)
|
||||
|
Reference in New Issue
Block a user