[meld] Only show columns that will be populated by the VC in use (bgo#698495)



commit c3f3ff922248b5a496db94d06db487a189b9b5fe
Author: Kai Willadsen <kai willadsen gmail com>
Date:   Wed Apr 24 06:34:12 2013 +1000

    Only show columns that will be populated by the VC in use (bgo#698495)

 meld/vc/__init__.py |    2 ++
 meld/vc/_vc.py      |    4 ++++
 meld/vc/cvs.py      |    3 +++
 meld/vc/fossil.py   |    2 ++
 meld/vc/git.py      |    2 ++
 meld/vc/svn.py      |    3 +++
 meld/vcview.py      |   36 +++++++++++++++++++++++-------------
 7 files changed, 39 insertions(+), 13 deletions(-)
---
diff --git a/meld/vc/__init__.py b/meld/vc/__init__.py
index f78dd53..b89e1f0 100644
--- a/meld/vc/__init__.py
+++ b/meld/vc/__init__.py
@@ -24,6 +24,8 @@
 import os
 import glob
 from . import _null
+from ._vc import DATA_NAME, DATA_STATE, DATA_REVISION, DATA_TAG, DATA_OPTIONS
+
 
 def load_plugins():
     _vcdir = os.path.dirname(os.path.abspath(__file__))
diff --git a/meld/vc/_vc.py b/meld/vc/_vc.py
index 8bd05ed..969182a 100644
--- a/meld/vc/_vc.py
+++ b/meld/vc/_vc.py
@@ -45,6 +45,8 @@ CONFLICT_THIS = CONFLICT_LOCAL
 conflicts = [_("Merged"), _("Base"), _("Local"), _("Remote")]
 assert len(conflicts) == CONFLICT_MAX
 
+DATA_NAME, DATA_STATE, DATA_REVISION, DATA_TAG, DATA_OPTIONS = list(range(5))
+
 
 class Entry(object):
     # These are the possible states of files. Be sure to get the colons correct.
@@ -88,6 +90,8 @@ class Vc(object):
     VC_ROOT_WALK = True
     VC_METADATA = None
 
+    VC_COLUMNS = (DATA_NAME, DATA_STATE)
+
     def __init__(self, location):
         # Save the requested comparison location. The location may be a
         # sub-directory of the repository we are diffing and can be useful in
diff --git a/meld/vc/cvs.py b/meld/vc/cvs.py
index f61b198..171e0ad 100644
--- a/meld/vc/cvs.py
+++ b/meld/vc/cvs.py
@@ -41,6 +41,9 @@ class Vc(_vc.Vc):
     VC_ROOT_WALK = False
     PATCH_INDEX_RE = "^Index:(.*)$"
 
+    VC_COLUMNS = (_vc.DATA_NAME, _vc.DATA_STATE, _vc.DATA_REVISION,
+                  _vc.DATA_TAG, _vc.DATA_OPTIONS)
+
     def __init__(self, location):
         super(Vc, self).__init__(location)
         if not _vc.call(["which", self.ALT_CMD]):
diff --git a/meld/vc/fossil.py b/meld/vc/fossil.py
index b99fd8a..ba4a203 100644
--- a/meld/vc/fossil.py
+++ b/meld/vc/fossil.py
@@ -37,6 +37,8 @@ class Vc(_vc.CachedVc):
     VC_METADATA = [".fslckout", "_FOSSIL_", ".fos"]    # One or the other
     PATCH_INDEX_RE = "^--- (.*)$"
 
+    VC_COLUMNS = (_vc.DATA_NAME, _vc.DATA_STATE, _vc.DATA_REVISION)
+
     state_map = {
         'ADDED'       : _vc.STATE_NEW,
         'DELETED'     : _vc.STATE_REMOVED,
diff --git a/meld/vc/git.py b/meld/vc/git.py
index 5b296c1..382c761 100644
--- a/meld/vc/git.py
+++ b/meld/vc/git.py
@@ -47,6 +47,8 @@ class Vc(_vc.CachedVc):
     PATCH_INDEX_RE = "^diff --git [ac]/(.*) [bw]/.*$"
     GIT_DIFF_FILES_RE = ":(\d+) (\d+) [a-z0-9]+ [a-z0-9]+ ([ADMU])\t(.*)"
 
+    VC_COLUMNS = (_vc.DATA_NAME, _vc.DATA_STATE, _vc.DATA_OPTIONS)
+
     conflict_map = {
         # These are the arguments for git-show
         # CONFLICT_MERGED has no git-show argument unfortunately.
diff --git a/meld/vc/svn.py b/meld/vc/svn.py
index 49e5ec9..73e7988 100644
--- a/meld/vc/svn.py
+++ b/meld/vc/svn.py
@@ -39,6 +39,9 @@ class Vc(_vc.CachedVc):
     VC_DIR = ".svn"
     VC_ROOT_WALK = False
     PATCH_INDEX_RE = "^Index:(.*)$"
+
+    VC_COLUMNS = (_vc.DATA_NAME, _vc.DATA_STATE, _vc.DATA_REVISION)
+
     state_map = {
         "unversioned": _vc.STATE_NONE,
         "added": _vc.STATE_NEW,
diff --git a/meld/vcview.py b/meld/vcview.py
index 6a26ea0..f60439b 100644
--- a/meld/vcview.py
+++ b/meld/vcview.py
@@ -201,7 +201,9 @@ class VcView(melddoc.MeldDoc, gnomeglade.Component):
         self.treeview.set_headers_visible(1)
         self.treeview.set_search_equal_func(self.treeview_search_cb)
         self.current_path, self.prev_path, self.next_path = None, None, None
-        column = gtk.TreeViewColumn( _("Name") )
+
+        self.column_name_map = {}
+        column = gtk.TreeViewColumn(_("Name"))
         renicon = emblemcellrenderer.EmblemCellRenderer()
         rentext = gtk.CellRendererText()
         column.pack_start(renicon, expand=0)
@@ -216,23 +218,25 @@ class VcView(melddoc.MeldDoc, gnomeglade.Component):
                     style=col_index(tree.COL_STYLE, 0),
                     weight=col_index(tree.COL_WEIGHT, 0),
                     strikethrough=col_index(tree.COL_STRIKE, 0))
+        column_index = self.treeview.append_column(column) - 1
+        self.column_name_map[vc.DATA_NAME] = column_index
 
-        self.treeview.append_column(column)
-
-        def addCol(name, num):
+        def addCol(name, num, data_name=None):
             column = gtk.TreeViewColumn(name)
             rentext = gtk.CellRendererText()
             column.pack_start(rentext, expand=0)
-            column.set_attributes(rentext, markup=self.model.column_index(num, 0))
-            self.treeview.append_column(column)
+            column.set_attributes(rentext,
+                                  markup=self.model.column_index(num, 0))
+            column_index = self.treeview.append_column(column) - 1
+            if data_name:
+                self.column_name_map[data_name] = column_index
             return column
 
-        self.treeview_column_location = addCol( _("Location"), COL_LOCATION)
-        addCol(_("Status"), COL_STATUS)
-        addCol(_("Rev"), COL_REVISION)
-        addCol(_("Tag"), COL_TAG)
-        addCol(_("Options"), COL_OPTIONS)
-
+        self.treeview_column_location = addCol(_("Location"), COL_LOCATION)
+        addCol(_("Status"), COL_STATUS, vc.DATA_STATE)
+        addCol(_("Revision"), COL_REVISION, vc.DATA_REVISION)
+        addCol(_("Tag"), COL_TAG, vc.DATA_TAG)
+        addCol(_("Options"), COL_OPTIONS, vc.DATA_OPTIONS)
 
         self.state_filters = []
         for s in self.state_actions:
@@ -275,6 +279,11 @@ class VcView(melddoc.MeldDoc, gnomeglade.Component):
         melddoc.MeldDoc.on_container_switch_in_event(self, ui)
         self.scheduler.add_task(self.on_treeview_cursor_changed)
 
+    def update_visible_columns(self):
+        for data_id in self.column_name_map:
+            col = self.treeview.get_column(self.column_name_map[data_id])
+            col.set_visible(data_id in self.vc.VC_COLUMNS)
+
     def update_actions_sensitivity(self):
         """Disable actions that use not implemented VC plugin methods
         """
@@ -339,12 +348,13 @@ class VcView(melddoc.MeldDoc, gnomeglade.Component):
         self.combobox_vcs.set_sensitive(len(vcs) > 1)
         self.combobox_vcs.lock = False
         self.combobox_vcs.set_active(default_active)
-  
+
     def on_vc_change(self, cb):
         if not cb.lock:
             self.vc = cb.get_model()[cb.get_active_iter()][1]
             self._set_location(self.vc.location)
             self.update_actions_sensitivity()
+            self.update_visible_columns()
 
     def set_location(self, location):
         self.choose_vc(vc.get_vcs(os.path.abspath(location or ".")))


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