Use IndexSet to allow direct access by Path and also allow an arbitrary ordering that was not possible with Vec. Also add monitoring of file changes in the directory. Use a custom LpSlidingView instead of AdwCarousel because Carousel was never designed for this job and suffered of bugs. LpSlidingView does not support swiping gestures yet since they currently don't work yet anyways #24. Use a new algorithm to fill the LpSlidingView that is stateless and covers all potential changes in the directory. This not only fixes bugs but would also work with changed sorting orders. This also adds build time template XML validation since it was useful for the refactoring #46. Closes #9, #11, #30, #33, #42
107 lines
4.5 KiB
XML
107 lines
4.5 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<interface>
|
|
<template class="LpImageView" parent="AdwBin">
|
|
<property name="css-name">imageview</property>
|
|
<property name="focusable">True</property>
|
|
<property name="focus-on-click">True</property>
|
|
<property name="child">
|
|
<object class="GtkOverlay" id="bin_child">
|
|
<property name="hexpand">True</property>
|
|
<child>
|
|
<object class="LpSlidingView" id="sliding_view">
|
|
<signal name="notify::current-page" handler="page_changed_cb" swapped="yes"/>
|
|
<signal name="target-page-reached" handler="target_page_reached_cb" swapped="yes"/>
|
|
</object>
|
|
</child>
|
|
<child type="overlay">
|
|
<object class="GtkBox" id="controls_box_start">
|
|
<property name="valign">end</property>
|
|
<property name="halign">start</property>
|
|
<property name="margin-start">18</property>
|
|
<property name="margin-end">18</property>
|
|
<property name="margin-top">18</property>
|
|
<property name="margin-bottom">18</property>
|
|
<property name="spacing">12</property>
|
|
<child>
|
|
<object class="GtkButton" id="prev_button">
|
|
<property name="halign">start</property>
|
|
<property name="icon-name">go-previous-symbolic</property>
|
|
<property name="action-name">win.previous</property>
|
|
<property name="tooltip-text" translatable="yes">Previous Image</property>
|
|
<style>
|
|
<class name="osd"/>
|
|
<class name="circular"/>
|
|
</style>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkButton" id="next_button">
|
|
<property name="icon-name">go-next-symbolic</property>
|
|
<property name="action-name">win.next</property>
|
|
<property name="tooltip-text" translatable="yes">Next Image</property>
|
|
<style>
|
|
<class name="osd"/>
|
|
<class name="circular"/>
|
|
</style>
|
|
</object>
|
|
</child>
|
|
</object>
|
|
</child>
|
|
<child type="overlay">
|
|
<object class="GtkBox" id="controls_box_end">
|
|
<property name="valign">end</property>
|
|
<property name="halign">end</property>
|
|
<property name="margin-start">18</property>
|
|
<property name="margin-end">18</property>
|
|
<property name="margin-top">18</property>
|
|
<property name="margin-bottom">18</property>
|
|
<property name="spacing">12</property>
|
|
<child>
|
|
<object class="GtkButton" id="fullscreen_button">
|
|
<property name="halign">end</property>
|
|
<binding name="icon-name">
|
|
<closure type="gchararray" function="get_fullscreen_icon">
|
|
<lookup type="GtkWindow" name="fullscreened">
|
|
<lookup type="GtkWidget" name="root">LpImageView</lookup>
|
|
</lookup>
|
|
</closure>
|
|
</binding>
|
|
<property name="action-name">win.toggle-fullscreen</property>
|
|
<property name="tooltip-text" translatable="yes">Toggle Fullscreen</property>
|
|
<style>
|
|
<class name="osd"/>
|
|
<class name="circular"/>
|
|
</style>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkButton" id="zoom_out">
|
|
<property name="icon-name">zoom-out-symbolic</property>
|
|
<property name="action-name">win.zoom-out</property>
|
|
<property name="tooltip-text" translatable="yes">Zoom Out</property>
|
|
<style>
|
|
<class name="osd"/>
|
|
<class name="circular"/>
|
|
</style>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkButton" id="zoom_in">
|
|
<property name="icon-name">zoom-in-symbolic</property>
|
|
<property name="action-name">win.zoom-in</property>
|
|
<property name="tooltip-text" translatable="yes">Zoom In</property>
|
|
<style>
|
|
<class name="osd"/>
|
|
<class name="circular"/>
|
|
</style>
|
|
</object>
|
|
</child>
|
|
</object>
|
|
</child>
|
|
</object>
|
|
</property>
|
|
<style>
|
|
<class name="image-view"/>
|
|
</style>
|
|
</template>
|
|
</interface>
|