177 lines
4.9 KiB
Python
177 lines
4.9 KiB
Python
# Python imports
|
|
import threading, subprocess
|
|
|
|
# Lib imports
|
|
import gi
|
|
|
|
gi.require_version("Gtk", "3.0")
|
|
from gi.repository import Gtk
|
|
from gi.repository import GLib
|
|
from gi.repository import GdkPixbuf
|
|
|
|
# Application imports
|
|
|
|
|
|
def threaded(fn):
|
|
def wrapper(*args, **kwargs):
|
|
threading.Thread(target=fn, args=args, kwargs=kwargs).start()
|
|
return wrapper
|
|
|
|
|
|
|
|
class WidgetMixin:
|
|
# This feels ugly but I don't see a better option than itterating over the list.
|
|
# @threaded
|
|
# def load_store(self, view, store, save_state=True):
|
|
# store.clear()
|
|
# files = view.get_pixbuf_icon_str_combo()
|
|
#
|
|
# for data in files:
|
|
# store.append(data)
|
|
#
|
|
# if save_state:
|
|
# self.window_controller.save_state()
|
|
|
|
|
|
|
|
|
|
def load_store(self, view, store, save_state=True):
|
|
store.clear()
|
|
files = view.get_files()
|
|
dir = view.get_current_directory()
|
|
for file in files:
|
|
try:
|
|
self.create_icon(view, store, dir, file[0])
|
|
except Exception as e:
|
|
pass
|
|
|
|
if save_state:
|
|
self.window_controller.save_state()
|
|
|
|
|
|
@threaded
|
|
def create_icon(self, view, store, dir, file):
|
|
icon = view.create_icon(dir, file).get_pixbuf()
|
|
data = [icon, file]
|
|
GLib.idle_add(self.update_store, (store, data,))
|
|
|
|
def update_store(self, item):
|
|
store, data = item
|
|
store.append(data)
|
|
|
|
|
|
|
|
|
|
def create_tab_widget(self, view):
|
|
tab = Gtk.Box()
|
|
label = Gtk.Label()
|
|
tid = Gtk.Label()
|
|
close = Gtk.EventBox()
|
|
icon = Gtk.Image(stock=Gtk.STOCK_CLOSE)
|
|
|
|
label.set_label(f"{view.get_end_of_path()}")
|
|
tid.set_label(f"{view.id}")
|
|
|
|
close.add(icon)
|
|
tab.add(label)
|
|
tab.add(close)
|
|
tab.add(tid)
|
|
|
|
close.connect("button_release_event", self.close_tab)
|
|
tab.show_all()
|
|
tid.hide()
|
|
return tab
|
|
|
|
def create_grid_iconview_widget(self, view, wid):
|
|
scroll = Gtk.ScrolledWindow()
|
|
grid = Gtk.IconView()
|
|
store = Gtk.ListStore(GdkPixbuf.Pixbuf, str)
|
|
|
|
grid.set_model(store)
|
|
grid.set_pixbuf_column(0)
|
|
grid.set_text_column(1)
|
|
|
|
grid.set_item_orientation(0)
|
|
grid.set_selection_mode(3)
|
|
grid.set_item_width(152)
|
|
grid.set_item_padding(2)
|
|
grid.set_margin(2)
|
|
grid.set_row_spacing(2)
|
|
grid.set_columns(-1)
|
|
grid.set_spacing(1)
|
|
grid.set_column_spacing(2)
|
|
|
|
grid.connect("button_release_event", self.icon_single_click)
|
|
grid.connect("item-activated", self.icon_double_left_click)
|
|
|
|
grid.show_all()
|
|
scroll.add(grid)
|
|
grid.set_name(f"{wid}|{view.id}")
|
|
return scroll, store
|
|
|
|
def create_grid_treeview_widget(self, view, wid):
|
|
scroll = Gtk.ScrolledWindow()
|
|
grid = Gtk.TreeView()
|
|
store = Gtk.ListStore(GdkPixbuf.Pixbuf, str)
|
|
column = Gtk.TreeViewColumn("Icons")
|
|
icon = Gtk.CellRendererPixbuf()
|
|
name = Gtk.CellRendererText()
|
|
|
|
grid.set_model(store)
|
|
column.pack_start(icon, False)
|
|
column.pack_start(name, True)
|
|
column.add_attribute(icon, "pixbuf", 0)
|
|
column.add_attribute(name, "text", 1)
|
|
column.set_expand(True)
|
|
|
|
grid.append_column(column)
|
|
grid.set_search_column(1)
|
|
grid.set_rubber_banding(True)
|
|
grid.set_headers_visible(False)
|
|
grid.set_enable_tree_lines(False)
|
|
grid.set_visible(True)
|
|
|
|
# grid.connect("button_release_event", self.icon_single_click)
|
|
# grid.connect("item-activated", self.icon_double_left_click)
|
|
|
|
column.set_visible(True)
|
|
icon.set_visible(True)
|
|
name.set_visible(True)
|
|
|
|
grid.show_all()
|
|
scroll.add(grid)
|
|
grid.set_name(f"{wid}|{view.id}")
|
|
return scroll, store
|
|
|
|
|
|
|
|
|
|
def on_tab_switch_update(self, notebook, content=None, index=None):
|
|
wid, tid = content.get_children()[0].get_name().split("|")
|
|
self.window_controller.set_active_data(wid, tid)
|
|
self.set_path_text(wid, tid)
|
|
|
|
def set_path_text(self, wid, tid):
|
|
path_entry = self.builder.get_object("path_entry")
|
|
view = self.get_fm_window(wid).get_view_by_id(tid)
|
|
path_entry.set_text(view.get_current_directory())
|
|
|
|
def get_tab_id_from_widget(self, tab_box):
|
|
tid = tab_box.get_children()[2]
|
|
return tid.get_text()
|
|
|
|
def get_tab_label_widget_from_widget(self, notebook, widget):
|
|
return notebook.get_tab_label(widget.get_parent()).get_children()[0]
|
|
|
|
def get_icon_view_and_label_from_notebook(self, notebook, _name):
|
|
icon_view = None
|
|
tab_label = None
|
|
|
|
for obj in notebook.get_children():
|
|
icon_view = obj.get_children()[0]
|
|
name = icon_view.get_name()
|
|
if name == _name:
|
|
tab_label = notebook.get_tab_label(obj).get_children()[0]
|
|
|
|
return icon_view, tab_label
|