[pitivi] shortcuts: Make sure the groups appear in the same order



commit 7ec9fc932f0e9d884bda36fb5f6a2a07c43e3754
Author: Alexandru Băluț <alexandru balut gmail com>
Date:   Sat Sep 17 00:05:20 2016 +0200

    shortcuts: Make sure the groups appear in the same order
    
    Reviewed-by: Jakub Brindza <jakub brindza gmail com>
    Differential Revision: https://phabricator.freedesktop.org/D1324

 pitivi/application.py       |    2 +-
 pitivi/clipproperties.py    |    2 +-
 pitivi/dialogs/prefs.py     |    3 ++-
 pitivi/mainwindow.py        |    2 +-
 pitivi/medialibrary.py      |    2 +-
 pitivi/shortcuts.py         |   15 ++++++++++++---
 pitivi/timeline/timeline.py |    4 ++--
 tests/test_shortcuts.py     |   15 ++++++++-------
 8 files changed, 28 insertions(+), 17 deletions(-)
---
diff --git a/pitivi/application.py b/pitivi/application.py
index 2a46304..11874f3 100644
--- a/pitivi/application.py
+++ b/pitivi/application.py
@@ -153,7 +153,7 @@ class Pitivi(Gtk.Application, Loggable):
         self._syncDoUndo()
 
     def _createActions(self):
-        self.shortcuts.register_group("app", _("General"))
+        self.shortcuts.register_group("app", _("General"), position=10)
         self.undo_action = Gio.SimpleAction.new("undo", None)
         self.undo_action.connect("activate", self._undoCb)
         self.add_action(self.undo_action)
diff --git a/pitivi/clipproperties.py b/pitivi/clipproperties.py
index 4895c65..cb8e66c 100644
--- a/pitivi/clipproperties.py
+++ b/pitivi/clipproperties.py
@@ -225,7 +225,7 @@ class EffectProperties(Gtk.Expander, Loggable):
         effects_actions_group = Gio.SimpleActionGroup()
         self.treeview.insert_action_group("clipproperties-effects", effects_actions_group)
         buttons_box.insert_action_group("clipproperties-effects", effects_actions_group)
-        self.app.shortcuts.register_group("clipproperties-effects", _("Clip Effects"))
+        self.app.shortcuts.register_group("clipproperties-effects", _("Clip Effects"), position=60)
 
         self.remove_effect_action = Gio.SimpleAction.new("remove-effect", None)
         self.remove_effect_action.connect("activate", self._removeEffectCb)
diff --git a/pitivi/dialogs/prefs.py b/pitivi/dialogs/prefs.py
index caa1f4f..4b6e21a 100644
--- a/pitivi/dialogs/prefs.py
+++ b/pitivi/dialogs/prefs.py
@@ -222,7 +222,8 @@ class PreferencesDialog(Loggable):
         self.content_box = Gtk.ListBox()
         self.list_store = Gio.ListStore.new(ModelItem)
         index = 0
-        for group, actions in shortcuts_manager.group_actions.items():
+        for group in shortcuts_manager.groups:
+            actions = shortcuts_manager.group_actions[group]
             for action, title in actions:
                 item = ModelItem(self.app, action, title, group)
                 self.list_store.append(item)
diff --git a/pitivi/mainwindow.py b/pitivi/mainwindow.py
index fa9ad46..2944834 100644
--- a/pitivi/mainwindow.py
+++ b/pitivi/mainwindow.py
@@ -437,7 +437,7 @@ class MainWindow(Gtk.ApplicationWindow, Loggable):
         self._headerbar.pack_start(self.render_button)
 
     def _set_keyboard_shortcuts(self):
-        self.app.shortcuts.register_group("win", _("Project"))
+        self.app.shortcuts.register_group("win", _("Project"), position=20)
         self.save_action = Gio.SimpleAction.new("save", None)
         self.save_action.connect("activate", self._saveProjectCb)
         self.add_action(self.save_action)
diff --git a/pitivi/medialibrary.py b/pitivi/medialibrary.py
index a8f16cb..a66922d 100644
--- a/pitivi/medialibrary.py
+++ b/pitivi/medialibrary.py
@@ -426,7 +426,7 @@ class MediaLibraryWidget(Gtk.Box, Loggable):
 
         actions_group = Gio.SimpleActionGroup()
         self.insert_action_group("medialibrary", actions_group)
-        self.app.shortcuts.register_group("medialibrary", _("Media Library"))
+        self.app.shortcuts.register_group("medialibrary", _("Media Library"), position=50)
 
         self.remove_assets_action = Gio.SimpleAction.new("remove-assets", None)
         self.remove_assets_action.connect("activate", self._removeAssetsCb)
diff --git a/pitivi/shortcuts.py b/pitivi/shortcuts.py
index 3dabcf2..a5b58c2 100644
--- a/pitivi/shortcuts.py
+++ b/pitivi/shortcuts.py
@@ -26,7 +26,7 @@ from pitivi.settings import xdg_config_home
 from pitivi.utils.misc import show_user_manual
 
 
-class ShortcutsManager(GObject.Object):
+class ShortcutsManager(GObject.Object):  # pylint: disable=too-many-instance-attributes
     """Manager storing the shortcuts from all across the app."""
 
     __gsignals__ = {
@@ -36,6 +36,7 @@ class ShortcutsManager(GObject.Object):
     def __init__(self, app):
         GObject.Object.__init__(self)
         self.app = app
+        self.__groups = []
         self.group_titles = {}
         self.group_actions = {}
         self.default_accelerators = {}
@@ -44,6 +45,11 @@ class ShortcutsManager(GObject.Object):
                                              "shortcuts.conf"])
         self.__loaded = self.__load()
 
+    @property
+    def groups(self):
+        """The group ids ordered as they should be displayed."""
+        return [item[1] for item in self.__groups]
+
     def __load(self):
         """Loads the shortcuts from the config file and sets them.
 
@@ -144,15 +150,18 @@ class ShortcutsManager(GObject.Object):
                         return neighbor_action
         return None
 
-    def register_group(self, action_prefix, title):
+    def register_group(self, action_prefix, title, position):
         """Registers a group of shortcuts to be displayed.
 
         Args:
             action_prefix (str): The group id.
             title (str): The title of the group.
+            position (int): The position used to sort the groups for display.
         """
         assert action_prefix not in self.group_titles
         self.group_titles[action_prefix] = title
+        self.__groups.append((position, action_prefix))
+        self.__groups.sort()
 
     def reset_accels(self, action=None):
         """Resets accelerators to their default values.
@@ -190,7 +199,7 @@ class ShortcutsWindow(Gtk.ShortcutsWindow):
         """Gathers the accelerators and populates the window."""
         section = Gtk.ShortcutsSection()
         section.show()
-        for group_id in self.app.shortcuts.group_titles:
+        for group_id in self.app.shortcuts.groups:
             group = Gtk.ShortcutsGroup(title=self.app.shortcuts.group_titles[group_id])
             group.show()
             for action, title in self.app.shortcuts.group_actions[group_id]:
diff --git a/pitivi/timeline/timeline.py b/pitivi/timeline/timeline.py
index 27ad076..fdaadb3 100644
--- a/pitivi/timeline/timeline.py
+++ b/pitivi/timeline/timeline.py
@@ -1390,7 +1390,7 @@ class TimelineContainer(Gtk.Grid, Zoomable, Loggable):
         group = Gio.SimpleActionGroup()
         self.timeline.layout.insert_action_group("timeline", group)
         self.toolbar.insert_action_group("timeline", group)
-        self.app.shortcuts.register_group("timeline", _("Timeline"))
+        self.app.shortcuts.register_group("timeline", _("Timeline"), position=30)
 
         # Clips actions.
         self.delete_action = Gio.SimpleAction.new("delete-selected-clips", None)
@@ -1444,7 +1444,7 @@ class TimelineContainer(Gtk.Grid, Zoomable, Loggable):
         navigation_group = Gio.SimpleActionGroup()
         self.timeline.layout.insert_action_group("navigation", navigation_group)
         self.toolbar.insert_action_group("navigation", navigation_group)
-        self.app.shortcuts.register_group("navigation", _("Timeline Navigation"))
+        self.app.shortcuts.register_group("navigation", _("Timeline Navigation"), position=40)
 
         self.zoom_in_action = Gio.SimpleAction.new("zoom-in", None)
         self.zoom_in_action.connect("activate", self._zoomInCb)
diff --git a/tests/test_shortcuts.py b/tests/test_shortcuts.py
index 9d12062..d77b3e8 100644
--- a/tests/test_shortcuts.py
+++ b/tests/test_shortcuts.py
@@ -34,10 +34,11 @@ class TestShortcutsManager(TestCase):
         manager = ShortcutsManager(app)
 
         # Test register_group method
-        manager.register_group("alpha_group", "The very first test group")
+        manager.register_group("alpha_group", "One", position=20)
         with self.assertRaises(AssertionError):
-            manager.register_group("alpha_group", "")
-        manager.register_group("beta_group", "Another test group")
+            manager.register_group("alpha_group", "", position=0)
+        manager.register_group("beta_group", "Two", position=10)
+        self.assertEqual(manager.groups, ["beta_group", "alpha_group"])
 
         # Test grouping using the stripping away group name from action name
         manager.add("alpha_group.first", ["<Primary>A"], "First action")
@@ -67,7 +68,7 @@ class TestShortcutsManager(TestCase):
             manager = ShortcutsManager(app)
             # Test the add is calling set_accels_for_action(),
             # since there is no shortcuts.conf in the directory.
-            manager.register_group("general", "General group")
+            manager.register_group("general", "General group", position=0)
             manager.add("prefix.action1", ["<Primary>P"], "Action one")
             self.assertEqual(app.set_accels_for_action.call_count, 1)
 
@@ -75,7 +76,7 @@ class TestShortcutsManager(TestCase):
             # and test that add is not calling set_accels_for_action()
             open(os.path.sep.join([temp_dir, "shortcuts.conf"]), "w").close()
             manager2 = ShortcutsManager(app)
-            manager2.register_group("other", "Other group")
+            manager2.register_group("other", "Other group", position=0)
 
             manager2.add("prefix.action4", ["<Primary>W"],
                          "Action addition not invoking set_accels_for_action")
@@ -94,7 +95,7 @@ class TestShortcutsManager(TestCase):
             self.assertEqual(app.set_accels_for_action.call_count, 0)
 
             # Set default shortcuts
-            manager.register_group("group", "Test group")
+            manager.register_group("group", "Test group", position=0)
             manager.add("group.action1", ["<Primary>i"], "Action 1")
             manager.add("group.action2", ["<Shift>p", "<Primary>m"], "Action 2")
             manager.add("group.action3", ["<Primary><Shift>a", "a"], "Action 3")
@@ -123,7 +124,7 @@ class TestShortcutsManager(TestCase):
             manager = ShortcutsManager(app)
 
             # Set default shortcuts - they will be stored in self.defaults_accelerators.
-            manager.register_group("group", "Test group")
+            manager.register_group("group", "Test group", position=0)
             manager.add("group.action1", ["<Primary>i"], "Action 1")
             manager.add("group.action2", ["<Shift>p"], "Action 2")
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]