50 lines
1.3 KiB
Python
50 lines
1.3 KiB
Python
# Python imports
|
|
import threading
|
|
|
|
|
|
# Gtk imports
|
|
import gi
|
|
gi.require_version("Gtk", "3.0")
|
|
gi.require_version('Gdk', '3.0')
|
|
from gi.repository import Gtk, Gdk, GLib, Gio, GdkPixbuf
|
|
|
|
# Application imports
|
|
|
|
|
|
|
|
def threaded(fn):
|
|
def wrapper(*args, **kwargs):
|
|
threading.Thread(target=fn, args=args, kwargs=kwargs).start()
|
|
|
|
return wrapper
|
|
|
|
|
|
class TreeViewUpdateMixin:
|
|
"""docstring for DummyMixin"""
|
|
def load_store(self, view, store, dir):
|
|
store.clear()
|
|
view.load_directory(dir)
|
|
files = view.get_images()
|
|
|
|
for i, file in enumerate(files):
|
|
store.append([None, f"{dir}/{file[0]}"])
|
|
self.create_icon(i, view, store, dir, file[0])
|
|
|
|
@threaded
|
|
def create_icon(self, i, view, store, dir, file):
|
|
icon = view.create_icon(dir, file)
|
|
fpath = f"{dir}/{file}"
|
|
GLib.idle_add(self.update_store, (i, store, icon, view, fpath,))
|
|
|
|
def update_store(self, item):
|
|
i, store, icon, view, fpath = item
|
|
itr = store.get_iter(i)
|
|
|
|
if not icon:
|
|
if fpath.endswith(".gif"):
|
|
icon = GdkPixbuf.PixbufAnimation.get_static_image(fpath)
|
|
else:
|
|
icon = GdkPixbuf.Pixbuf.new_from_file(view.DEFAULT_ICON)
|
|
|
|
store.set_value(itr, 0, icon)
|