[meld] Add a diffs-changed signal to Differ for updating FileDiff components
- From: Kai Willadsen <kaiw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [meld] Add a diffs-changed signal to Differ for updating FileDiff components
- Date: Sun, 4 Apr 2010 20:38:52 +0000 (UTC)
commit 439653577e737777c0ba1bd742431ba550bf7a00
Author: Kai Willadsen <kai willadsen gmail com>
Date: Fri Mar 12 16:53:18 2010 +1000
Add a diffs-changed signal to Differ for updating FileDiff components
This commit changes Differ to be a GObject, and adds a diffs-changed
signal so that we can indicate when the comparison has been updated.
meld/diffutil.py | 16 ++++++++++++++--
1 files changed, 14 insertions(+), 2 deletions(-)
---
diff --git a/meld/diffutil.py b/meld/diffutil.py
index be344d7..b1d4c7b 100644
--- a/meld/diffutil.py
+++ b/meld/diffutil.py
@@ -17,6 +17,8 @@
import difflib
+import gobject
+
################################################################################
#
# Differ
@@ -65,19 +67,25 @@ def reverse_chunk(chunk):
# Differ
#
################################################################################
-class Differ(object):
+class Differ(gobject.GObject):
"""Utility class to hold diff2 or diff3 chunks"""
+ __gsignals__ = {
+ 'diffs-changed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ()),
+ }
+
_matcher = IncrementalSequenceMatcher
def __init__(self):
# Internally, diffs are stored from text1 -> text0 and text1 -> text2.
+ gobject.GObject.__init__(self)
self.num_sequences = 0
self.seqlength = [0, 0, 0]
self.diffs = [[], []]
self._merge_cache = []
self._line_cache = [[], [], []]
self.ignore_blanks = False
+ self._initialised = False
def _update_merge_cache(self, texts):
if self.num_sequences == 3:
@@ -94,6 +102,7 @@ class Differ(object):
self._merge_cache = [x for x in self._merge_cache if x != (None, None)]
self._update_line_cache()
+ self.emit("diffs-changed")
def _update_line_cache(self):
for i, l in enumerate(self.seqlength):
@@ -277,7 +286,8 @@ class Differ(object):
yield cs[0] or cs[1]
def sequences_identical(self):
- return self.diffs == [[], []]
+ # check so that we don't call an uninitialised comparison 'identical'
+ return self.diffs == [[], []] and self._initialised
def _merge_blocks(self, using):
LO, HI = 1,2
@@ -368,6 +378,7 @@ class Differ(object):
while work.next() is None:
yield None
self.diffs[i] = matcher.get_difference_opcodes()
+ self._initialised = True
self._update_merge_cache(sequences)
yield 1
@@ -375,4 +386,5 @@ class Differ(object):
self.diffs = [[], []]
self.seqlength = [0] * self.num_sequences
texts = [""] * self.num_sequences
+ self._initialised = False
self._update_merge_cache(texts)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]