meld r1139 - trunk
- From: kaiw svn gnome org
- To: svn-commits-list gnome org
- Subject: meld r1139 - trunk
- Date: Sat, 31 Jan 2009 11:42:12 +0000 (UTC)
Author: kaiw
Date: Sat Jan 31 11:42:12 2009
New Revision: 1139
URL: http://svn.gnome.org/viewvc/meld?rev=1139&view=rev
Log:
Make textbuffers a member variable and use it to simplify some logic
Modified:
trunk/filediff.py
Modified: trunk/filediff.py
==============================================================================
--- trunk/filediff.py (original)
+++ trunk/filediff.py Sat Jan 31 11:42:12 2009
@@ -102,6 +102,8 @@
self.textview_overwrite = 0
self.textview_focussed = None
self.textview_overwrite_handlers = [ t.connect("toggle-overwrite", self.on_textview_toggle_overwrite) for t in self.textview ]
+ self.textbuffer = [v.get_buffer() for v in self.textview]
+ self.bufferdata = [MeldBufferData() for b in self.textbuffer]
for i in range(3):
w = self.scrolledwindow[i]
w.get_vadjustment().connect("value-changed", self._sync_vscroll )
@@ -109,11 +111,9 @@
w.get_vscrollbar().connect_after("expose-event", self.on_vscroll__expose_event)
self._connect_buffer_handlers()
self.linediffer = diffutil.Differ()
- self.bufferdata = []
for text in self.textview:
text.set_wrap_mode( self.prefs.edit_wrap_lines )
- buf = text.get_buffer()
- self.bufferdata.append( MeldBufferData() )
+ for buf in self.textbuffer:
buf.create_tag("edited line", background = self.prefs.color_edited_bg,
foreground = self.prefs.color_edited_fg)
buf.create_tag("delete line", background = self.prefs.color_delete_bg,
@@ -172,22 +172,21 @@
def _disconnect_buffer_handlers(self):
for textview in self.textview:
- buf = textview.get_buffer()
- assert hasattr(buf,"handlers")
textview.set_editable(0)
+ for buf in self.textbuffer:
+ assert hasattr(buf,"handlers")
for h in buf.handlers:
buf.disconnect(h)
def _connect_buffer_handlers(self):
for textview in self.textview:
- buf = textview.get_buffer()
textview.set_editable(1)
+ for buf in self.textbuffer:
id0 = buf.connect("insert-text", self.on_text_insert_text)
id1 = buf.connect("delete-range", self.on_text_delete_range)
id2 = buf.connect_after("insert-text", self.after_text_insert_text)
id3 = buf.connect_after("delete-range", self.after_text_delete_range)
id4 = buf.connect("mark-set", self.on_textbuffer_mark_set)
- buf.textview = textview
buf.handlers = id0, id1, id2, id3, id4
def _update_cursor_status(self, buf):
@@ -211,8 +210,7 @@
def _after_text_modified(self, buffer, startline, sizechange):
if self.num_panes > 1:
- buffers = [t.get_buffer() for t in self.textview[:self.num_panes] ]
- pane = buffers.index(buffer)
+ pane = self.textbuffer.index(buffer)
change_range = self.linediffer.change_sequence( pane, startline, sizechange, self._get_texts())
for it in self._update_highlighting( change_range[0], change_range[1] ):
pass
@@ -233,7 +231,7 @@
self.texts = [FakeText(b, textfilter) for b in bufs]
def __getitem__(self, i):
return self.texts[i]
- return FakeTextArray( [t.get_buffer() for t in self.textview], [self._filter_text, lambda x:x][raw] )
+ return FakeTextArray(self.textbuffer, [self._filter_text, lambda x:x][raw])
def _filter_text(self, txt):
def killit(m):
@@ -309,7 +307,7 @@
if sourceview_available:
for i in range(self.num_panes):
set_highlighting_enabled(
- self.textview[i].get_buffer(),
+ self.textbuffer[i],
self.bufferdata[i].filename,
self.prefs.use_syntax_highlighting )
elif key == "regexes":
@@ -387,7 +385,7 @@
def on_text_insert_text(self, buffer, it, text, textlen):
if not self.undosequence_busy:
self.undosequence.begin_group()
- pane = self.textview.index( buffer.textview )
+ pane = self.textbuffer.index(buffer)
if self.bufferdata[pane].modified != 1:
self.undosequence.add_action( BufferModifiedAction(buffer, self) )
self.undosequence.add_action( BufferInsertionAction(buffer, it.get_offset(), text) )
@@ -395,7 +393,7 @@
def on_text_delete_range(self, buffer, it0, it1):
text = buffer.get_text(it0, it1, 0)
- pane = self.textview.index(buffer.textview)
+ pane = self.textbuffer.index(buffer)
assert self.deleted_lines_pending == -1
self.deleted_lines_pending = text.count("\n")
if not self.undosequence_busy:
@@ -409,13 +407,6 @@
#
#
- def _get_focused_textview(self):
- for i in range(self.num_panes):
- t = self.textview[i]
- if t.is_focus():
- return t
- return None
-
def on_open_activate(self, *args):
pane = self._get_focused_pane()
if pane >= 0:
@@ -485,8 +476,10 @@
#
def _find_text(self, tofind_utf8, match_case=0, entire_word=0, wrap=1, regex=0):
self.last_search = misc.struct(text=tofind_utf8, case=match_case, word=entire_word, wrap=wrap, regex=regex)
- view = self._get_focused_textview() or self.textview0
- buf = view.get_buffer()
+ pane = self._get_focused_pane()
+ if pane == -1:
+ pane = 0
+ buf = self.textbuffer[pane]
insert = buf.get_iter_at_mark( buf.get_insert() )
tofind = tofind_utf8.decode("utf-8") # tofind is utf-8 encoded
text = buf.get_text(*buf.get_bounds() ).decode("utf-8") # as is buffer
@@ -507,7 +500,7 @@
buf.place_cursor( it )
it.forward_chars( match.end() - match.start() )
buf.move_mark( buf.get_selection_bound(), it )
- view.scroll_to_mark( buf.get_insert(), 0)
+ self.textview[pane].scroll_to_mark(buf.get_insert(), 0)
elif regex:
misc.run_dialog( _("The regular expression '%s' was not found.") % tofind_utf8, self, messagetype=gtk.MESSAGE_INFO)
else:
@@ -551,8 +544,7 @@
"""
for i,f in enumerate(files):
if f:
- b = self.textview[i].get_buffer()
- b.delete( b.get_start_iter(), b.get_end_iter() )
+ self.textbuffer[i].delete(*self.textbuffer[i].get_bounds())
absfile = os.path.abspath(f)
self.fileentry[i].set_filename(absfile)
bold, bnew = self.bufferdata[i], MeldBufferData(absfile)
@@ -569,23 +561,23 @@
self._disconnect_buffer_handlers()
self.linediffer.diffs = [[],[]]
self.queue_draw()
- buffers = [t.get_buffer() for t in self.textview][:self.num_panes]
try_codecs = self.prefs.text_codecs.split()
yield _("[%s] Opening files") % self.label_text
panetext = ["\n"] * self.num_panes
tasks = []
for i,f in enumerate(files):
+ buf = self.textbuffer[i]
if f:
try:
task = misc.struct(filename = f,
file = codecs.open(f, "rU", try_codecs[0]),
- buf = buffers[i],
+ buf = buf,
codec = try_codecs[:],
text = [],
pane = i)
tasks.append(task)
except (IOError, LookupError), e:
- buffers[i].set_text("\n")
+ buf.set_text("\n")
misc.run_dialog(
"%s\n\n%s\n%s" % (
_("Could not read from '%s'") % f,
@@ -593,7 +585,7 @@
str(e)),
parent = self)
else:
- panetext[i] = buffers[i].get_text( buffers[i].get_start_iter(), buffers[i].get_end_iter() )
+ panetext[i] = buf.get_text(*buf.get_bounds())
yield _("[%s] Reading files") % self.label_text
while len(tasks):
for t in tasks[:]:
@@ -662,12 +654,11 @@
if sourceview_available:
for i in range(len(files)):
if files[i]:
- set_highlighting_enabled( self.textview[i].get_buffer(), files[i], self.prefs.use_syntax_highlighting )
+ set_highlighting_enabled(self.textbuffer[i], files[i], self.prefs.use_syntax_highlighting)
yield 0
def _update_highlighting(self, range0, range1):
- buffers = [t.get_buffer() for t in self.textview]
- for b in buffers:
+ for b in self.textbuffer:
taglist = ["delete line", "conflict line", "replace line", "inline line"]
table = b.get_tag_table()
for tagname in taglist:
@@ -676,7 +667,7 @@
for chunk in self.linediffer.all_changes(self._get_texts()):
for i,c in enumerate(chunk):
if c and c[0] == "replace":
- bufs = buffers[1], buffers[i*2]
+ bufs = self.textbuffer[1], self.textbuffer[i*2]
#tags = [b.get_tag_table().lookup("replace line") for b in bufs]
starts = [b.get_iter_at_line(l) for b,l in zip(bufs, (c[1],c[3])) ]
text1 = "\n".join( self._get_texts(raw=1)[1 ][c[1]:c[2]] ).encode("utf16")
@@ -787,7 +778,7 @@
return True
def save_file(self, pane, saveas=0):
- buf = self.textview[pane].get_buffer()
+ buf = self.textbuffer[pane]
bufdata = self.bufferdata[pane]
if saveas or not bufdata.filename:
filename = self._get_filename_for_saving( _("Choose a name for buffer %i.") % (pane+1) )
@@ -838,8 +829,7 @@
override["GtkTextBuffer"] = gsv.SourceBuffer
dialog = gnomeglade.Component( paths.share_dir("glade2/filediff.glade"), "patchdialog", override)
dialog.widget.set_transient_for( self.widget.get_toplevel() )
- bufs = [t.get_buffer() for t in self.textview]
- texts = [b.get_text(*b.get_bounds()).split("\n") for b in bufs]
+ texts = [b.get_text(*b.get_bounds()).split("\n") for b in self.textbuffer]
texts[0] = [l+"\n" for l in texts[0]]
texts[1] = [l+"\n" for l in texts[1]]
names = [self._get_pane_label(i) for i in range(2)]
@@ -875,12 +865,12 @@
self._save_text_to_filename(filename, txt)
def set_buffer_writable(self, buf, yesno):
- pane = self.textview.index(buf.textview)
+ pane = self.textbuffer.index(buf)
self.bufferdata[pane].writable = yesno
self.recompute_label()
def set_buffer_modified(self, buf, yesno):
- pane = self.textview.index(buf.textview)
+ pane = self.textbuffer.index(buf)
self.bufferdata[pane].modified = yesno
self.recompute_label()
@@ -916,10 +906,9 @@
src_pane = self._get_focused_pane()
dst_pane = src_pane + direction
assert dst_pane in range(self.num_panes)
- buffers = [t.get_buffer() for t in self.textview]
- text = buffers[src_pane].get_text( buffers[src_pane].get_start_iter(), buffers[src_pane].get_end_iter() )
+ text = self.textbuffer[src_pane].get_text(*self.textbuffer[src_pane].get_bounds())
self.on_text_begin_user_action()
- buffers[dst_pane].set_text( text )
+ self.textbuffer[dst_pane].set_text(text)
self.on_text_end_user_action()
self.scheduler.add_task( lambda : self._sync_vscroll( self.scrolledwindow[src_pane].get_vadjustment() ) and None )
@@ -1002,7 +991,7 @@
obegin = c[3]
fraction = (line - mbegin) / ((mend - mbegin) or 1)
other_line = (obegin + fraction * (oend - obegin))
- it = self.textview[i].get_buffer().get_iter_at_line(int(other_line))
+ it = self.textbuffer[i].get_iter_at_line(int(other_line))
val, height = self.textview[i].get_line_yrange(it)
val -= (adj.page_size) * syncpoint
val += (other_line-int(other_line)) * height
@@ -1038,7 +1027,7 @@
alloc = scroll.get_allocation() # find drawable area
alloc.y += stepper_size
alloc.height -= 2*stepper_size
- scale = float(alloc.height) / self.textview[scrollindex].get_buffer().get_line_count()
+ scale = float(alloc.height) / self.textbuffer[scrollindex].get_line_count()
context = scroll.window.cairo_create() # setup cairo
context.set_line_width(0.5)
@@ -1058,7 +1047,7 @@
def _get_line_count(self, index):
"""Return the number of lines in the buffer of textview 'text'"""
- return self.textview[index].get_buffer().get_line_count()
+ return self.textbuffer[index].get_line_count()
def set_num_panes(self, n):
if n != self.num_panes and n in (1,2,3):
@@ -1078,7 +1067,7 @@
self.recompute_label()
def _line_to_pixel(self, pane, line ):
- it = self.textview[pane].get_buffer().get_iter_at_line(line)
+ it = self.textbuffer[pane].get_iter_at_line(line)
return self.textview[pane].get_iter_location( it ).y
def _pixel_to_line(self, pane, pixel ):
@@ -1297,21 +1286,18 @@
chunk = chunk[1:]
self.mouse_chunk = None
+ b0 = self.textbuffer[src]
+ b1 = self.textbuffer[dst]
if self.keymask & MASK_SHIFT: # delete
- b = self.textview[src].get_buffer()
- b.delete(b.get_iter_at_line(chunk[0]), b.get_iter_at_line(chunk[1]))
+ b0.delete(b0.get_iter_at_line(chunk[0]), b0.get_iter_at_line(chunk[1]))
elif self.keymask & MASK_CTRL: # copy up or down
- b0 = self.textview[src].get_buffer()
t0 = b0.get_text( b0.get_iter_at_line(chunk[0]), b0.get_iter_at_line(chunk[1]), 0)
- b1 = self.textview[dst].get_buffer()
if event.y - rect[1] < 0.5 * rect[3]: # copy up
b1.insert_with_tags_by_name(b1.get_iter_at_line(chunk[2]), t0, "edited line")
else: # copy down
b1.insert_with_tags_by_name(b1.get_iter_at_line(chunk[3]), t0, "edited line")
else: # replace
- b0 = self.textview[src].get_buffer()
t0 = b0.get_text( b0.get_iter_at_line(chunk[0]), b0.get_iter_at_line(chunk[1]), 0)
- b1 = self.textview[dst].get_buffer()
self.on_text_begin_user_action()
b1.delete(b1.get_iter_at_line(chunk[2]), b1.get_iter_at_line(chunk[3]))
b1.insert_with_tags_by_name(b1.get_iter_at_line(chunk[2]), t0, "edited line")
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]