fixup! Port UI to GTK 4
This commit is contained in:
parent
2744e1f351
commit
8673d44976
|
@ -26,10 +26,7 @@
|
|||
<property name="round-digits">0</property>
|
||||
<property name="digits">0</property>
|
||||
<property name="has-origin">False</property>
|
||||
<!--
|
||||
<signal name="button-release-event" handler="on_grid_scale_changed" swapped="no"/>
|
||||
<signal name="change-value" handler="on_grid_scale_change" swapped="no"/>
|
||||
-->
|
||||
<signal name="value-changed" handler="on_grid_scale_changed" swapped="no"/>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
|
|
|
@ -35,10 +35,6 @@ class LibraryPanel(Adw.Bin):
|
|||
'sort-order-changed': (GObject.SIGNAL_RUN_FIRST, None, (int,)),
|
||||
'sort-type-changed': (GObject.SIGNAL_RUN_FIRST, None, (bool,)),
|
||||
'albumart': (GObject.SIGNAL_RUN_FIRST, None, (str,)),
|
||||
|
||||
'update': (GObject.SIGNAL_RUN_FIRST, None, ()),
|
||||
'start-scale': (GObject.SIGNAL_RUN_FIRST, None, (int,)),
|
||||
'end-scale': (GObject.SIGNAL_RUN_FIRST, None, (int,)),
|
||||
}
|
||||
|
||||
|
||||
|
@ -99,9 +95,6 @@ class LibraryPanel(Adw.Bin):
|
|||
self._is_selected = False
|
||||
|
||||
# Widgets
|
||||
# FIXME Toolbar signals
|
||||
#self._toolbar.connect('start-scale', self.on_toolbar_scale)
|
||||
#self._toolbar.connect('end-scale', self.on_toolbar_scaled)
|
||||
# Header bar
|
||||
self._headerbar_standalone = AlbumHeaderbar()
|
||||
self._headerbar_standalone.connect('close', self.on_standalone_close_clicked)
|
||||
|
@ -121,6 +114,11 @@ class LibraryPanel(Adw.Bin):
|
|||
SortOrder.YEAR: self.sort_year
|
||||
}
|
||||
|
||||
# Button controller for grid scale
|
||||
buttonController = Gtk.GestureClick()
|
||||
buttonController.connect('unpaired-release', self.on_grid_scale_released)
|
||||
self.grid_scale.add_controller(buttonController)
|
||||
|
||||
|
||||
def get_headerbar_standalone(self):
|
||||
return self._headerbar_standalone
|
||||
|
@ -153,17 +151,24 @@ class LibraryPanel(Adw.Bin):
|
|||
self.emit('update')
|
||||
|
||||
|
||||
# FXME on_grid_scale_changed
|
||||
#@Gtk.Template.Callback()
|
||||
def on_grid_scale_change(self, widget, scroll, value):
|
||||
self.emit('start-scale', value)
|
||||
def on_grid_scale_released(self, widget, x, y, npress, sequence):
|
||||
size = math.floor(self.grid_scale.get_value())
|
||||
range = self.grid_scale.get_adjustment()
|
||||
if size < range.get_lower() or size > range.get_upper():
|
||||
return
|
||||
self._item_size = size
|
||||
self.emit('item-size-changed', size)
|
||||
self._redraw()
|
||||
GObject.idle_add(self.toolbar_popover.popdown)
|
||||
|
||||
|
||||
# FXME on_grid_scale_changed
|
||||
#@Gtk.Template.Callback()
|
||||
def on_grid_scale_changed(self, widget, event):
|
||||
self.emit('end-scale', self.grid_scale.get_value())
|
||||
self.toolbar_popover.popdown()
|
||||
@Gtk.Template.Callback()
|
||||
def on_grid_scale_changed(self, widget):
|
||||
size = math.floor(self.grid_scale.get_value())
|
||||
range = widget.get_adjustment()
|
||||
if size < range.get_lower() or size > range.get_upper():
|
||||
return
|
||||
self._set_widget_grid_size(self.library_grid, size, True)
|
||||
|
||||
|
||||
@Gtk.Template.Callback()
|
||||
|
@ -212,26 +217,6 @@ class LibraryPanel(Adw.Bin):
|
|||
self.emit('update')
|
||||
|
||||
|
||||
def on_toolbar_scale(self, widget, value):
|
||||
size = math.floor(value)
|
||||
range = self.grid_scale.get_adjustment()
|
||||
if size < range.get_lower() or size > range.get_upper():
|
||||
return
|
||||
self._item_size = size
|
||||
#GObject.idle_add(self.library_grid.set_item_padding, size / 100)
|
||||
GObject.idle_add(self._set_widget_grid_size, self.library_grid, size, True)
|
||||
|
||||
|
||||
def on_toolbar_scaled(self, widget, value):
|
||||
size = round(value)
|
||||
range = self.grid_scale.get_adjustment()
|
||||
if size < range.get_lower() or size > range.get_upper():
|
||||
return False
|
||||
self.emit('item-size-changed', size)
|
||||
self._redraw()
|
||||
return False
|
||||
|
||||
|
||||
@Gtk.Template.Callback()
|
||||
def on_filter_entry_changed(self, widget):
|
||||
self._library_grid_filter.set_filter(SearchFilter(self.filter_entry.get_text()))
|
||||
|
@ -381,15 +366,13 @@ class LibraryPanel(Adw.Bin):
|
|||
)
|
||||
"""
|
||||
self._library_lock.acquire()
|
||||
self._library_stop.clear()
|
||||
self._albums = albums
|
||||
stack_transition_type = self.stack.get_transition_type()
|
||||
GObject.idle_add(self.stack.set_transition_type, Gtk.StackTransitionType.NONE)
|
||||
GObject.idle_add(self.stack.set_visible_child, self.progress_box)
|
||||
GObject.idle_add(self.progress_bar.set_fraction, 0.0)
|
||||
#GObject.idle_add(self.library_grid.set_item_padding, size / 100)
|
||||
temp_model = self.library_grid.get_model()
|
||||
self.library_grid.set_model(None)
|
||||
#self.library_grid.freeze_child_notify()
|
||||
self._library_grid_model.remove_all()
|
||||
GObject.idle_add(self.stack.set_transition_type, stack_transition_type)
|
||||
GObject.idle_add(self._library_grid_model.remove_all)
|
||||
|
||||
i = 0
|
||||
n = len(albums)
|
||||
|
@ -404,7 +387,7 @@ class LibraryPanel(Adw.Bin):
|
|||
# Exception is handled by client
|
||||
pass
|
||||
except Exception as e:
|
||||
self._logger.exception("Failed to load albumart")
|
||||
self._logger.exception("Failed to load albumart", e)
|
||||
if pixbuf is None:
|
||||
pixbuf = self._icon_theme.lookup_icon(
|
||||
Utils.STOCK_ICON_DEFAULT,
|
||||
|
@ -416,18 +399,12 @@ class LibraryPanel(Adw.Bin):
|
|||
)
|
||||
if pixbuf is not None:
|
||||
self._grid_pixbufs[album.get_id()] = pixbuf
|
||||
self._library_grid_model.append(GridItem(album, pixbuf))
|
||||
GObject.idle_add(self._library_grid_model.append, GridItem(album, pixbuf))
|
||||
|
||||
i += 1
|
||||
GObject.idle_add(self.progress_bar.set_fraction, i/n)
|
||||
GObject.idle_add(self.progress_bar.set_text, locale.gettext("Loading images"))
|
||||
if self._library_stop.is_set():
|
||||
self._library_lock.release()
|
||||
return
|
||||
|
||||
self.library_grid.set_model(temp_model)
|
||||
#self.library_grid.thaw_child_notify()
|
||||
#self.library_grid.set_item_width(-1)
|
||||
self._library_lock.release()
|
||||
self.stack.set_visible_child(self.scroll)
|
||||
self._sort_grid_model()
|
||||
|
@ -441,50 +418,31 @@ class LibraryPanel(Adw.Bin):
|
|||
def _set_widget_grid_size_thread(self, grid_widget, size, vertical):
|
||||
self._library_lock.acquire()
|
||||
self._library_stop.clear()
|
||||
grid_filter = grid_widget.get_model()
|
||||
grid_model = grid_filter.get_model()
|
||||
|
||||
# get old_range
|
||||
grid_widget_id = id(grid_widget)
|
||||
if grid_widget_id not in self._old_ranges or self._old_ranges[grid_widget_id] is None:
|
||||
self._old_ranges[grid_widget_id] = range(0, len(grid_filter))
|
||||
old_range = self._old_ranges[grid_widget_id]
|
||||
old_start = len(old_range) > 0 and old_range[0] or 0
|
||||
old_end = len(old_range) > 0 and old_range[len(old_range)-1] + 1 or 0
|
||||
|
||||
# calculate visible range
|
||||
w = (grid_widget.get_allocation().width // size) + (vertical and 0 or 1)
|
||||
h = (grid_widget.get_allocation().height // size) + (vertical and 1 or 0)
|
||||
c = w * h
|
||||
vis_range = grid_widget.get_visible_range()
|
||||
if vis_range is None:
|
||||
if size == self._item_size:
|
||||
self._library_lock.release()
|
||||
return
|
||||
(vis_start,), (vis_end,) = vis_range
|
||||
vis_end = min(vis_start + c, len(grid_filter))
|
||||
vis_range = range(vis_start, vis_end)
|
||||
|
||||
# set pixbuf
|
||||
cur_start = min(old_start, vis_start)
|
||||
cur_end = max(old_end, vis_end)
|
||||
cur_range = range(cur_start, cur_end)
|
||||
for index in cur_range:
|
||||
iter = grid_filter.convert_iter_to_child_iter(grid_filter[index].iter)
|
||||
if index in vis_range:
|
||||
album_id = grid_model.get_value(iter, 2)
|
||||
pixbuf = self._grid_pixbufs[album_id]
|
||||
for i in range(self._library_grid_model.get_n_items()):
|
||||
grid_item = self._library_grid_model.get_item(i)
|
||||
album_id = grid_item.get_album().get_id()
|
||||
|
||||
pixbuf = self._grid_pixbufs[album_id]
|
||||
if pixbuf is not None:
|
||||
pixbuf = pixbuf.scale_simple(size, size, GdkPixbuf.InterpType.NEAREST)
|
||||
else:
|
||||
pixbuf = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB, False, 8, 1, 1)
|
||||
grid_model.set_value(iter, 0, pixbuf)
|
||||
pixbuf = self._icon_theme.lookup_icon(
|
||||
Utils.STOCK_ICON_DEFAULT,
|
||||
None,
|
||||
size,
|
||||
size,
|
||||
Gtk.TextDirection.LTR,
|
||||
Gtk.IconLookupFlags.FORCE_SYMBOLIC
|
||||
)
|
||||
GObject.idle_add(grid_item.set_cover, pixbuf)
|
||||
|
||||
if self._library_stop.is_set():
|
||||
self._library_lock.release()
|
||||
return
|
||||
|
||||
self._old_ranges[grid_widget_id] = vis_range
|
||||
grid_widget.set_item_width(size)
|
||||
|
||||
self._library_lock.release()
|
||||
|
||||
|
||||
|
|
|
@ -114,6 +114,10 @@ class GridItem(GObject.GObject):
|
|||
return self._album
|
||||
|
||||
|
||||
def set_cover(self, cover):
|
||||
self.cover = Gdk.Texture.new_for_pixbuf(cover)
|
||||
|
||||
|
||||
|
||||
|
||||
class SearchFilter(Gtk.Filter):
|
||||
|
|
Loading…
Reference in a new issue