Mirage2/src/old-src/context/mixins/tree_view_update_mixin.py

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)