[meld: 2/8] [feat] mark file and compare with marked file




commit e7436eecd998c8eead69fa2ddccd9293613cc2bd
Author: Helly Guo <buffoonguo gmail com>
Date:   Sat Feb 12 06:06:35 2022 +0800

    [feat] mark file and compare with marked file

 meld/dirdiff.py                    | 46 ++++++++++++++++++++++++++++++++++++++
 meld/resources/ui/dirdiff-menus.ui | 12 ++++++++++
 2 files changed, 58 insertions(+)
---
diff --git a/meld/dirdiff.py b/meld/dirdiff.py
index 318370eb..c59bc2bb 100644
--- a/meld/dirdiff.py
+++ b/meld/dirdiff.py
@@ -422,6 +422,8 @@ class DirDiff(Gtk.VBox, tree.TreeviewCommon, MeldDoc):
         tree.STATE_MODIFIED: ("modified", "folder-status-modified"),
     }
 
+    marked = None
+
     def __init__(self, num_panes):
         super().__init__()
         # FIXME:
@@ -449,6 +451,9 @@ class DirDiff(Gtk.VBox, tree.TreeviewCommon, MeldDoc):
             ('find', self.action_find),
             ('folder-collapse', self.action_folder_collapse),
             ('folder-compare', self.action_diff),
+            ('folder-mark', self.action_mark),
+            ('folder-unmark', self.action_unmark),
+            ('folder-compare-marked', self.action_diff_marked),
             ('folder-copy-left', self.action_copy_left),
             ('folder-copy-right', self.action_copy_right),
             ('folder-delete', self.action_delete),
@@ -1271,6 +1276,9 @@ class DirDiff(Gtk.VBox, tree.TreeviewCommon, MeldDoc):
             self.set_action_enabled('folder-collapse', is_single_foldable_row)
             self.set_action_enabled('folder-expand', is_single_foldable_row)
             self.set_action_enabled('folder-compare', True)
+            self.set_action_enabled('folder-mark', True)
+            self.set_action_enabled('folder-unmark', self.marked != None)
+            self.set_action_enabled('folder-compare-marked', self.marked != None)
             self.set_action_enabled('folder-delete', is_valid)
             self.set_action_enabled('folder-copy-left', is_valid and pane > 0)
             self.set_action_enabled(
@@ -1280,6 +1288,9 @@ class DirDiff(Gtk.VBox, tree.TreeviewCommon, MeldDoc):
             actions = (
                 'folder-collapse',
                 'folder-compare',
+                'folder-mark',
+                'folder-unmark',
+                'folder-compare-marked',
                 'folder-copy-left',
                 'folder-copy-right',
                 'folder-delete',
@@ -1445,6 +1456,41 @@ class DirDiff(Gtk.VBox, tree.TreeviewCommon, MeldDoc):
         for row in selected:
             self.run_diff_from_iter(self.model.get_iter(row))
 
+    def action_mark(self, *args):
+        pane = self._get_focused_pane()
+        if pane is None:
+            return
+
+        selected = self._get_selected_paths(pane)
+        self.marked = {}
+        self.marked['mark'] = self.model.get_iter(selected[0])
+        self.marked['pane'] = pane
+        #print(self.marked)
+
+    def action_unmark(self, *args):
+        self.marked = None
+        #print(self.marked)
+
+    def action_diff_marked(self, *args):
+        if self.marked is None:
+            return
+        marked = self.marked['mark']
+        markedPane = self.marked['pane']
+        self.action_unmark()
+
+        pane = self._get_focused_pane()
+        if pane is None:
+            return
+
+        selected = self.model.get_iter(self._get_selected_paths(pane)[0])
+        row_paths = []
+        row_paths.append(self.model.value_paths(marked)[markedPane])
+        row_paths.append(self.model.value_paths(selected)[pane])
+        #print(row_paths)
+        gfiles = [Gio.File.new_for_path(p)
+                  for p in row_paths if os.path.exists(p)]
+        self.create_diff_signal.emit(gfiles, {})
+
     def action_folder_collapse(self, *args):
         pane = self._get_focused_pane()
         if pane is None:
diff --git a/meld/resources/ui/dirdiff-menus.ui b/meld/resources/ui/dirdiff-menus.ui
index 4a2b459c..4544744f 100644
--- a/meld/resources/ui/dirdiff-menus.ui
+++ b/meld/resources/ui/dirdiff-menus.ui
@@ -7,6 +7,18 @@
         <attribute name="label" translatable="yes">_Compare selected files</attribute>
         <attribute name="action">view.folder-compare</attribute>
       </item>
+      <item>
+        <attribute name="label" translatable="yes">_Mark selected file</attribute>
+        <attribute name="action">view.folder-mark</attribute>
+      </item>
+      <item>
+        <attribute name="label" translatable="yes">_Unmark selected file</attribute>
+        <attribute name="action">view.folder-unmark</attribute>
+      </item>
+      <item>
+        <attribute name="label" translatable="yes">Compare _with marked file</attribute>
+        <attribute name="action">view.folder-compare-marked</attribute>
+      </item>
     </section>
     <section>
       <attribute name="id">actions-section</attribute>


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