[meld] Remember active state filters for VcView



commit c51864a8000cf4011333723c9444a5b4bd5e525c
Author: Kai Willadsen <kai willadsen gmail com>
Date:   Sun Jan 1 10:31:29 2012 +1000

    Remember active state filters for VcView

 meld/preferences.py |    2 +
 meld/vcview.py      |   59 +++++++++++++++++++++++++++++++++++---------------
 2 files changed, 43 insertions(+), 18 deletions(-)
---
diff --git a/meld/preferences.py b/meld/preferences.py
index 5fe7430..d807e01 100644
--- a/meld/preferences.py
+++ b/meld/preferences.py
@@ -251,6 +251,8 @@ class MeldPreferences(prefs.Preferences):
         "statusbar_visible" : prefs.Value(prefs.BOOL, True),
         "dir_status_filters": prefs.Value(prefs.LIST,
                                           ['normal', 'modified', 'new']),
+        "vc_status_filters": prefs.Value(prefs.LIST,
+                                         ['flatten', 'modified']),
     }
 
     def __init__(self):
diff --git a/meld/vcview.py b/meld/vcview.py
index f5355e8..8eeeaf5 100644
--- a/meld/vcview.py
+++ b/meld/vcview.py
@@ -1,5 +1,5 @@
 ### Copyright (C) 2002-2006 Stephen Kennedy <stevek gnome org>
-### Copyright (C) 2010-2011 Kai Willadsen <kai willadsen gmail com>
+### Copyright (C) 2010-2012 Kai Willadsen <kai willadsen gmail com>
 
 ### This program is free software; you can redistribute it and/or modify
 ### it under the terms of the GNU General Public License as published by
@@ -111,6 +111,14 @@ class VcView(melddoc.MeldDoc, gnomeglade.Component):
                          "VcRevert": ("revert_command", ()),
                          }
 
+    state_actions = {
+        "flatten": ("VcFlatten", None),
+        "modified": ("VcShowModified", entry_modified),
+        "normal": ("VcShowNormal", entry_normal),
+        "unknown": ("VcShowNonVC", entry_nonvc),
+        "ignored": ("VcShowIgnored", entry_ignored),
+    }
+
     def __init__(self, prefs):
         melddoc.MeldDoc.__init__(self, prefs)
         gnomeglade.Component.__init__(self, paths.ui_dir("vcview.ui"), "vcview")
@@ -128,11 +136,11 @@ class VcView(melddoc.MeldDoc, gnomeglade.Component):
         )
 
         toggleactions = (
-            ("VcFlatten",     gtk.STOCK_GOTO_BOTTOM, _("_Flatten"),  None, _("Flatten directories"), self.on_button_flatten_toggled, True),
-            ("VcShowModified","filter-modified-24",  _("_Modified"), None, _("Show modified"), self.on_button_filter_toggled, True),
-            ("VcShowNormal",  "filter-normal-24",    _("_Normal"),   None, _("Show normal"), self.on_button_filter_toggled, False),
-            ("VcShowNonVC",   "filter-nonvc-24",     _("Non _VC"),   None, _("Show unversioned files"), self.on_button_filter_toggled, False),
-            ("VcShowIgnored", "filter-ignored-24",   _("Ignored"),   None, _("Show ignored files"), self.on_button_filter_toggled, False),
+            ("VcFlatten",     gtk.STOCK_GOTO_BOTTOM, _("_Flatten"),  None, _("Flatten directories"), self.on_button_flatten_toggled, False),
+            ("VcShowModified","filter-modified-24",  _("_Modified"), None, _("Show modified"), self.on_filter_state_toggled, False),
+            ("VcShowNormal",  "filter-normal-24",    _("_Normal"),   None, _("Show normal"), self.on_filter_state_toggled, False),
+            ("VcShowNonVC",   "filter-nonvc-24",     _("Non _VC"),   None, _("Show unversioned files"), self.on_filter_state_toggled, False),
+            ("VcShowIgnored", "filter-ignored-24",   _("Ignored"),   None, _("Show ignored files"), self.on_filter_state_toggled, False),
         )
 
         self.ui_file = paths.ui_dir("vcview-ui.xml")
@@ -181,6 +189,14 @@ class VcView(melddoc.MeldDoc, gnomeglade.Component):
         addCol(_("Tag"), COL_TAG)
         addCol(_("Options"), COL_OPTIONS)
 
+
+        self.state_filters = []
+        for s in self.state_actions:
+            if s in self.prefs.vc_status_filters:
+                action_name = self.state_actions[s][0]
+                self.state_filters.append(s)
+                self.actiongroup.get_action(action_name).set_active(True)
+
         class ConsoleStream(object):
             def __init__(self, textview):
                 self.textview = textview
@@ -308,15 +324,11 @@ class VcView(melddoc.MeldDoc, gnomeglade.Component):
         rootname = self.model.value_path( self.model.get_iter(rootpath), 0 )
         prefixlen = 1 + len( self.model.value_path( self.model.get_iter_root(), 0 ) )
         todo = [ (rootpath, rootname) ]
-        filters = []
-        if self.actiongroup.get_action("VcShowModified").get_active():
-            filters.append( entry_modified )
-        if self.actiongroup.get_action("VcShowNormal").get_active():
-            filters.append( entry_normal )
-        if self.actiongroup.get_action("VcShowNonVC").get_active():
-            filters.append( entry_nonvc )
-        if self.actiongroup.get_action("VcShowIgnored").get_active():
-            filters.append( entry_ignored )
+
+        active_action = lambda a: self.actiongroup.get_action(a).get_active()
+        filters = [a[1] for a in self.state_actions.values() if \
+                   active_action(a[0]) and a[1]]
+
         def showable(entry):
             for f in filters:
                 if f(entry): return 1
@@ -420,9 +432,20 @@ class VcView(melddoc.MeldDoc, gnomeglade.Component):
         return False
 
     def on_button_flatten_toggled(self, button):
-        self.treeview_column_location.set_visible(self.actiongroup.get_action("VcFlatten").get_active())
-        self.refresh()
-    def on_button_filter_toggled(self, button):
+        action = self.actiongroup.get_action("VcFlatten")
+        self.treeview_column_location.set_visible(action.get_active())
+        self.on_filter_state_toggled(button)
+
+    def on_filter_state_toggled(self, button):
+        active_action = lambda a: self.actiongroup.get_action(a).get_active()
+        active_filters = [a for a in self.state_actions if \
+                          active_action(self.state_actions[a][0])]
+
+        if set(active_filters) == set(self.state_filters):
+            return
+
+        self.state_filters = active_filters
+        self.prefs.vc_status_filters = active_filters
         self.refresh()
 
     def _get_selected_files(self):



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