From 217e1632df60bbcb02d83ec4e65c7ccc275d7e11 Mon Sep 17 00:00:00 2001
From: Christian Heller <c.heller@plomlompom.de>
Date: Mon, 26 Aug 2024 05:00:53 +0200
Subject: [PATCH] In browser, improve visibility of sort order.

---
 browser.py | 69 +++++++++++++++++++++++++++++-------------------------
 1 file changed, 37 insertions(+), 32 deletions(-)

diff --git a/browser.py b/browser.py
index 9fbe217..56774f5 100755
--- a/browser.py
+++ b/browser.py
@@ -90,28 +90,13 @@ class Window(Gtk.ApplicationWindow):
         self.label_nothing_to_show = Gtk.Label(label='nothing to show')
 
         self.viewer = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
+        self.box_sort_order = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
+        self.viewer.append(self.box_sort_order)
         self.viewer.append(box_buttons)
         self.viewer.append(self.metadata)
         self.viewer.append(self.label_nothing_to_show)
 
-        def add_sorter(attr_name, group):
-            radio = Gtk.CheckButton(label=attr_name, group=group)
-            radio.connect('toggled', self.on_sort_select)
-            vbox.append(radio)
-            return radio
-
-        vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
-        radio1 = add_sorter('last_mod_time', None)
-        for name in ['name'] + list(GEN_PARAMS):
-            add_sorter(name.lower(), group=radio1)
-        add_sorter(SORT_KEY_RANDOM, group=radio1)
-        popover_menu = Gtk.Popover()
-        popover_menu.props.child = vbox
-        self.sorter = Gtk.MenuButton(label='SORT', popover=popover_menu)
         self.dir_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
-        self.dir_box.append(self.sorter)
-
-        self.img_dir_absolute = abspath(IMG_DIR)
         self.list_store = Gio.ListStore(item_type=FileItem)
         self.selection = Gtk.SingleSelection.new(self.list_store)
         factory = Gtk.SignalListItemFactory()
@@ -123,7 +108,6 @@ class Window(Gtk.ApplicationWindow):
         scrolled = Gtk.ScrolledWindow(child=self.selector, vexpand=True,
                                       propagate_natural_width=True)
         self.dir_box.append(scrolled)
-        self.dir_box.hide()
 
         box_outer = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
         box_outer.append(self.dir_box)
@@ -132,10 +116,44 @@ class Window(Gtk.ApplicationWindow):
 
         self.item_img, self.item_dir = None, None
         self.unsorted_dirs, self.unsorted_files = [], []
-        self.sort_order = ['last_mod_time']
+        self.sort_order = []
+        self.img_dir_absolute = abspath(IMG_DIR)
         self.reload_dir()
+        self.add_sort('last_mod_time')
         self.selection.props.selected = self.max_index
 
+    def add_sort(self, sort_key):
+        if SORT_KEY_RANDOM == sort_key:
+            self.sort_order = []
+        elif sort_key in self.sort_order:
+            self.sort_order.remove(sort_key)
+        self.sort_order += [sort_key]
+        while self.box_sort_order.get_last_child():
+            self.box_sort_order.remove(self.box_sort_order.get_last_child())
+        self.box_sort_order.append(Gtk.Label(label='sort order: '))
+        for key in self.sort_order:
+            old_sorter = Gtk.Box()
+            old_sorter.append(Gtk.Label(label=f'[{key}] -> '))
+            self.box_sort_order.append(old_sorter)
+
+        def add_sorter(sort_key_, group):
+            radio = Gtk.CheckButton(label=sort_key_, group=group)
+            radio.connect('toggled', lambda _: self.add_sort(sort_key_))
+            vbox.append(radio)
+            return radio
+
+        vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
+        popover_menu = Gtk.Popover()
+        sorter = Gtk.MenuButton(label='next?', popover=popover_menu)
+        radio1 = add_sorter('last_mod_time', None)
+        for name in ['name'] + list(GEN_PARAMS):
+            add_sorter(name.lower(), radio1)
+        add_sorter(SORT_KEY_RANDOM, radio1)
+        popover_menu.props.child = vbox
+        self.box_sort_order.append(sorter)
+
+        self.sort()
+
     def on_selector_activate(self, _, __):
         if isinstance(self.selection.props.selected_item, DirItem):
             self.item_dir = self.selection.props.selected_item
@@ -147,19 +165,6 @@ class Window(Gtk.ApplicationWindow):
     def toggle_folder_view(self, _):
         self.dir_box.props.visible = not self.dir_box.props.visible
 
-    def on_sort_select(self, button):
-        self.update_sort_order(button.props.label)
-        self.sort()
-        self.sorter.props.label = f'SORT: {button.props.label}'
-
-    def update_sort_order(self, attr_name):
-        if SORT_KEY_RANDOM == attr_name:
-            self.sort_order = [SORT_KEY_RANDOM]
-            return
-        if attr_name in self.sort_order:
-            self.sort_order.remove(attr_name)
-        self.sort_order += [attr_name]
-
     def sort(self):
         self.list_store.remove_all()
         for key in self.sort_order:
-- 
2.30.2