81 lines
2.3 KiB
Python
81 lines
2.3 KiB
Python
# Python imports
|
|
|
|
# Lib imports
|
|
import gi
|
|
gi.require_version('Gtk', '3.0')
|
|
from gi.repository import Gtk
|
|
|
|
# Application imports
|
|
from ..widgets.image_list import ImageList
|
|
|
|
|
|
|
|
class ImageListScroll(Gtk.ScrolledWindow):
|
|
def __init__(self):
|
|
super(ImageListScroll, self).__init__()
|
|
|
|
self.image_list_widget = None
|
|
self.size = 0
|
|
self.start = 0
|
|
self.end = settings.get_max_ring_thumbnail_list()
|
|
|
|
self._setup_styling()
|
|
self._setup_signals()
|
|
self._subscribe_to_events()
|
|
self._load_widgets()
|
|
|
|
self.show_all()
|
|
|
|
|
|
def _setup_styling(self):
|
|
self.set_vexpand(True)
|
|
self.set_overlay_scrolling(False)
|
|
|
|
def _setup_signals(self):
|
|
self.connect("edge-reached", self._handle_edge_reached)
|
|
self.connect("edge-overshot", self._handle_edge_reached)
|
|
|
|
def _subscribe_to_events(self):
|
|
event_system.subscribe("update_list_size_constraints", self._update_list_size_constraints)
|
|
|
|
def _load_widgets(self):
|
|
self.image_list_widget = ImageList()
|
|
self.add(self.image_list_widget)
|
|
|
|
# TODO: Setup to load range start/end values from settings,
|
|
# NOTE: Must align with ImageList start/end limits too
|
|
def _update_list_size_constraints(self, size):
|
|
self.size = size
|
|
self.start = 0
|
|
self.end = settings.get_max_ring_thumbnail_list()
|
|
|
|
def _handle_edge_reached(self, widget, edge):
|
|
children = self.image_list_widget.get_children()
|
|
vadjustment = self.get_vadjustment()
|
|
vvalue = vadjustment.get_value()
|
|
|
|
if edge == Gtk.PositionType.TOP:
|
|
if self.start >= 1:
|
|
self.start -= 1
|
|
self._unload_image(children[self.end])
|
|
children[self.start].show()
|
|
self.end -= 1
|
|
|
|
vadjustment.set_value(vvalue + 1)
|
|
if edge == Gtk.PositionType.BOTTOM:
|
|
if (self.end + 1) < self.size:
|
|
self.end += 1
|
|
self._unload_image(children[self.start])
|
|
|
|
if not children[self.end].is_loaded:
|
|
children[self.end].load_pixbuf()
|
|
|
|
children[self.end].show()
|
|
self.start += 1
|
|
vadjustment.set_value(vvalue - 1)
|
|
|
|
def _unload_image(self, child):
|
|
child.hide()
|
|
# child.image.clear()
|
|
child.is_loaded = False
|