[meld] util.sourceviewer: Move to GtkSourceView3 and remove compat shims
- From: Kai Willadsen <kaiw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [meld] util.sourceviewer: Move to GtkSourceView3 and remove compat shims
- Date: Mon, 14 Oct 2013 21:10:46 +0000 (UTC)
commit 1a4df76e966eee0253aef70ee400f88893e7febc
Author: Kai Willadsen <kai willadsen gmail com>
Date: Mon Oct 7 14:45:48 2013 +1000
util.sourceviewer: Move to GtkSourceView3 and remove compat shims
meld/filediff.py | 27 +++----
meld/meldbuffer.py | 8 +-
meld/patchdialog.py | 11 ++-
meld/preferences.py | 49 ++++--------
meld/util/sourceviewer.py | 196 ++++++++-------------------------------------
5 files changed, 70 insertions(+), 221 deletions(-)
---
diff --git a/meld/filediff.py b/meld/filediff.py
index fc4b4ea..c47712f 100644
--- a/meld/filediff.py
+++ b/meld/filediff.py
@@ -47,7 +47,7 @@ from .ui import gnomeglade
from .meldapp import app
from .util.compat import text_type
-from .util.sourceviewer import srcviewer
+from .util.sourceviewer import LanguageManager
class CachedSequenceMatcher(object):
@@ -172,11 +172,6 @@ class FileDiff(melddoc.MeldDoc, gnomeglade.Component):
column_sizes.add_widget(widget)
self.warned_bad_comparison = False
- # Some sourceviews bind their own undo mechanism, which we replace
- # Gtk.binding_entry_remove(srcviewer.GtkTextView, Gdk.KEY_z,
- # Gdk.ModifierType.CONTROL_MASK)
- # Gtk.binding_entry_remove(srcviewer.GtkTextView, Gdk.KEY_z,
- # Gdk.ModifierType.CONTROL_MASK | Gdk.ModifierType.SHIFT_MASK)
for v in self.textview:
buf = meldbuffer.MeldBuffer()
buf.connect('begin_user_action',
@@ -186,9 +181,8 @@ class FileDiff(melddoc.MeldDoc, gnomeglade.Component):
v.set_show_line_numbers(self.prefs.show_line_numbers)
v.set_insert_spaces_instead_of_tabs(self.prefs.spaces_instead_of_tabs)
v.set_wrap_mode(self.prefs.edit_wrap_lines)
- if self.prefs.show_whitespace:
- v.set_draw_spaces(srcviewer.spaces_flag)
- srcviewer.set_tab_width(v, self.prefs.tab_size)
+ v.set_draw_spaces(self.prefs.show_whitespace)
+ v.set_tab_width(self.prefs.tab_size)
self._keymask = 0
self.load_font()
self.deleted_lines_pending = -1
@@ -804,19 +798,18 @@ class FileDiff(melddoc.MeldDoc, gnomeglade.Component):
for i in range(3):
self.textview[i].set_tabs(tabs)
for t in self.textview:
- srcviewer.set_tab_width(t, value)
+ t.set_tab_width(value)
elif key == "use_custom_font" or key == "custom_font":
self.load_font()
elif key == "show_line_numbers":
for t in self.textview:
t.set_show_line_numbers( value )
elif key == "show_whitespace":
- spaces_flag = srcviewer.spaces_flag if value else 0
for v in self.textview:
- v.set_draw_spaces(spaces_flag)
+ v.set_draw_spaces(value)
elif key == "use_syntax_highlighting":
for i in range(self.num_panes):
- srcviewer.set_highlight_syntax(self.textbuffer[i], value)
+ self.textbuffer[i].set_highlight_syntax(value)
elif key == "edit_wrap_lines":
for t in self.textview:
t.set_wrap_mode(self.prefs.edit_wrap_lines)
@@ -1203,7 +1196,7 @@ class FileDiff(melddoc.MeldDoc, gnomeglade.Component):
for i in range(self.num_panes):
filename = self.textbuffer[i].data.filename
if filename:
- langs.append(srcviewer.get_language_from_file(filename))
+ langs.append(LanguageManager.get_language_from_file(filename))
else:
langs.append(None)
@@ -1214,9 +1207,9 @@ class FileDiff(melddoc.MeldDoc, gnomeglade.Component):
langs = (real_langs[0],) * len(langs)
for i in range(self.num_panes):
- srcviewer.set_language(self.textbuffer[i], langs[i])
- srcviewer.set_highlight_syntax(self.textbuffer[i],
- self.prefs.use_syntax_highlighting)
+ self.textbuffer[i].set_language(langs[i])
+ self.textbuffer[i].set_highlight_syntax(
+ self.prefs.use_syntax_highlighting)
def _set_files_internal(self, files):
for i in self._load_files(files, self.textbuffer):
diff --git a/meld/meldbuffer.py b/meld/meldbuffer.py
index 9658a97..54966cd 100644
--- a/meld/meldbuffer.py
+++ b/meld/meldbuffer.py
@@ -21,17 +21,17 @@ from __future__ import unicode_literals
import sys
from gettext import gettext as _
-from .util import sourceviewer
+from gi.repository import GtkSource
-from .util.compat import text_type
+from meld.util.compat import text_type
-class MeldBuffer(sourceviewer.srcviewer.GtkTextBuffer):
+class MeldBuffer(GtkSource.Buffer):
__gtype_name__ = "MeldBuffer"
def __init__(self, filename=None):
- sourceviewer.srcviewer.GtkTextBuffer.__init__(self)
+ GtkSource.Buffer.__init__(self)
self.data = MeldBufferData(filename)
def reset_buffer(self, filename):
diff --git a/meld/patchdialog.py b/meld/patchdialog.py
index 6075fe4..eb6920e 100644
--- a/meld/patchdialog.py
+++ b/meld/patchdialog.py
@@ -22,11 +22,12 @@ import os
from gi.repository import Gtk
from gi.repository import Pango
+from gi.repository import GtkSource
from .ui import gnomeglade
from .util.compat import text_type
-from .util.sourceviewer import srcviewer
+from .util.sourceviewer import LanguageManager
class PatchDialog(gnomeglade.Component):
@@ -39,11 +40,11 @@ class PatchDialog(gnomeglade.Component):
self.prefs.notify_add(self.on_preference_changed)
self.filediff = filediff
- buf = srcviewer.GtkTextBuffer()
+ buf = GtkSource.Buffer()
self.textview.set_buffer(buf)
- lang = srcviewer.get_language_from_mime_type("text/x-diff")
- srcviewer.set_language(buf, lang)
- srcviewer.set_highlight_syntax(buf, True)
+ lang = LanguageManager.get_language_from_mime_type("text/x-diff")
+ buf.set_language(lang)
+ buf.set_highlight_syntax(True)
fontdesc = Pango.FontDescription(self.prefs.get_current_font())
self.textview.modify_font(fontdesc)
diff --git a/meld/preferences.py b/meld/preferences.py
index 12e5ee9..1029961 100644
--- a/meld/preferences.py
+++ b/meld/preferences.py
@@ -31,8 +31,6 @@ from .ui import gnomeglade
from .ui import listwidget
from .util import prefs
-from .util.sourceviewer import srcviewer
-
TIMESTAMP_RESOLUTION_PRESETS = [('1ns (ext4)', 1),
('100ns (NTFS)', 100),
@@ -157,20 +155,14 @@ class PreferencesDialog(gnomeglade.Component):
self.spinbutton_tabsize.set_value( self.prefs.tab_size )
self.checkbutton_highlight_current_line.set_active(
self.prefs.highlight_current_line)
- if srcviewer.gsv is not None:
- self.checkbutton_spaces_instead_of_tabs.set_active( self.prefs.spaces_instead_of_tabs )
- self.checkbutton_show_line_numbers.set_active( self.prefs.show_line_numbers )
- self.checkbutton_show_whitespace.set_active(self.prefs.show_whitespace)
- self.checkbutton_use_syntax_highlighting.set_active( self.prefs.use_syntax_highlighting )
- else:
- no_sourceview_text = \
- _("Only available if you have PyGtkSourceView 2 installed")
- for w in (self.checkbutton_spaces_instead_of_tabs,
- self.checkbutton_show_line_numbers,
- self.checkbutton_use_syntax_highlighting,
- self.checkbutton_show_whitespace):
- w.set_sensitive(False)
- w.set_tooltip_text(no_sourceview_text)
+ self.checkbutton_spaces_instead_of_tabs.set_active(
+ self.prefs.spaces_instead_of_tabs)
+ self.checkbutton_show_line_numbers.set_active(
+ self.prefs.show_line_numbers)
+ self.checkbutton_show_whitespace.set_active(
+ self.prefs.show_whitespace)
+ self.checkbutton_use_syntax_highlighting.set_active(
+ self.prefs.use_syntax_highlighting)
# TODO: This doesn't restore the state of character wrapping when word
# wrapping is disabled, but this is hard with our existing gconf keys
if self.prefs.edit_wrap_lines != Gtk.WrapMode.NONE:
@@ -225,23 +217,14 @@ class PreferencesDialog(gnomeglade.Component):
self.combo_file_order.set_active(
1 if self.prefs.vc_left_is_local else 0)
- if srcviewer.gsv is not None:
- self.checkbutton_show_commit_margin.set_active(
- self.prefs.vc_show_commit_margin)
- self.spinbutton_commit_margin.set_value(
- self.prefs.vc_commit_margin)
- self.checkbutton_break_commit_lines.set_sensitive(
- self.prefs.vc_show_commit_margin)
- self.checkbutton_break_commit_lines.set_active(
- self.prefs.vc_break_commit_message)
- else:
- no_sourceview_text = \
- _("Only available if you have PyGtkSourceView 2 installed")
- for w in (self.checkbutton_show_commit_margin,
- self.spinbutton_commit_margin,
- self.checkbutton_break_commit_lines):
- w.set_sensitive(False)
- w.set_tooltip_text(no_sourceview_text)
+ self.checkbutton_show_commit_margin.set_active(
+ self.prefs.vc_show_commit_margin)
+ self.spinbutton_commit_margin.set_value(
+ self.prefs.vc_commit_margin)
+ self.checkbutton_break_commit_lines.set_sensitive(
+ self.prefs.vc_show_commit_margin)
+ self.checkbutton_break_commit_lines.set_active(
+ self.prefs.vc_break_commit_message)
self.widget.show()
diff --git a/meld/util/sourceviewer.py b/meld/util/sourceviewer.py
index 60b9861..cc25db1 100644
--- a/meld/util/sourceviewer.py
+++ b/meld/util/sourceviewer.py
@@ -20,183 +20,51 @@
'''
from gi.repository import Gio
-from gi.repository import Gtk
+from gi.repository import GLib
+from gi.repository import GtkSource
-class _srcviewer(object):
- # Module name to be imported for the sourceviewer class
- srcviewer_module = None
- # instance of the imported sourceviewer module
- gsv = None
+class LanguageManager(object):
- spaces_flag = 0
+ manager = GtkSource.LanguageManager()
- def __init__(self):
- if self.srcviewer_module is not None:
- self.gsv = __import__(self.srcviewer_module)
- self.glm = None
- self.version_check()
- self.GtkTextView = None
- self.GtkTextBuffer = None
- self.overrides()
-
- def version_check(self):
- raise NotImplementedError
-
- def overrides(self):
- raise NotImplementedError
-
- def GtkLanguageManager(self):
- raise NotImplementedError
-
- def set_highlight_syntax(self, buf, enabled):
- raise NotImplementedError
-
- def set_tab_width(self, tab, tab_size):
- raise NotImplementedError
-
- def get_language_from_file(self, filename):
- raise NotImplementedError
-
- def get_language_from_mime_type(self, mimetype):
- raise NotImplementedError
-
- def get_language_manager(self):
- if self.glm is None:
- self.glm = self.GtkLanguageManager()
- return self.glm
-
- def set_language(self, buf, lang):
- raise NotImplementedError
-
-
-class _gtksourceview2(_srcviewer):
- srcviewer_module = "gtksourceview2"
-
- def version_check(self):
- raise NotImplementedError
-
- def overrides(self):
- self.GtkTextView = self.GtkSource.View
- self.GtkTextBuffer = self.GtkSource.Buffer
- self.spaces_flag = self.GtkSource.DrawSpacesFlags.ALL
-
- def GtkLanguageManager(self):
- return self.GtkSource.LanguageManager()
-
- def set_tab_width(self, tab, tab_size):
- return tab.set_tab_width(tab_size)
-
- def set_highlight_syntax(self, buf, enabled):
- return buf.set_highlight_syntax(enabled)
-
- def get_language_from_file(self, filename):
- f = Gio.File(filename)
+ @classmethod
+ def get_language_from_file(cls, filename):
+ f = Gio.File.new_for_path(filename)
try:
- info = f.query_info(Gio.FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE)
- except Gio.Error:
+ info = f.query_info(Gio.FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE,
+ 0, None)
+ except GLib.GError:
return None
content_type = info.get_content_type()
- return self.get_language_manager().guess_language(filename,
- content_type)
+ return cls.manager.guess_language(filename, content_type)
- def get_language_from_mime_type(self, mime_type):
+ @classmethod
+ def get_language_from_mime_type(cls, mime_type):
content_type = Gio.content_type_from_mime_type(mime_type)
- return self.get_language_manager().guess_language(None, content_type)
-
- def set_language(self, buf, lang):
- buf.set_language(lang)
-
-
-class gtksourceview24(_gtksourceview2):
+ return cls.manager.guess_language(None, content_type)
- def version_check(self):
- if self.GtkSource.pygtksourceview2_version[1] < 4:
- raise ImportError
- def overrides(self):
- _GtkSource.overrides(self)
- viewClass = self.GtkSource.View
+class MeldSourceView(GtkSource.View):
- class SourceView(viewClass):
-
- __gsignals__ = {
- 'key-press-event': 'override'
- }
-
- def do_key_press_event(self, event):
- if event.keyval in (Gdk.KEY_KP_Up, Gdk.KEY_KP_Down,
- Gdk.KEY_Up, Gdk.KEY_Down) and \
- (event.get_state() & Gdk.ModifierType.MOD1_MASK) != 0 and \
- (event.get_state() & Gdk.ModifierType.SHIFT_MASK) == 0:
- return True
- return viewClass.do_key_press_event(self, event)
-
- self.GtkTextView = SourceView
-
-
-class gtksourceview210(_gtksourceview2):
-
- def version_check(self):
- if self.GtkSource.pygtksourceview2_version[1] < 10:
- raise ImportError
-
- def overrides(self):
- _GtkSource.overrides(self)
- Gtk.binding_entry_remove(self.GtkTextView, Gdk.KEY_Up,
- Gdk.ModifierType.MOD1_MASK)
- Gtk.binding_entry_remove(self.GtkTextView, Gdk.KEY_KP_Up,
- Gdk.ModifierType.MOD1_MASK)
- Gtk.binding_entry_remove(self.GtkTextView, Gdk.KEY_Down,
- Gdk.ModifierType.MOD1_MASK)
- Gtk.binding_entry_remove(self.GtkTextView, Gdk.KEY_KP_Down,
- Gdk.ModifierType.MOD1_MASK)
-
-
-class nullsourceview(_srcviewer):
- """Implement the sourceviewer API when no real one is available
- """
-
- get_language_from_file = lambda *args: None
- set_highlight_syntax = lambda *args: None
- set_language = lambda *args: None
- set_tab_width = lambda *args: None
- get_language_from_mime_type = lambda *args: None
-
- def overrides(self):
- from gi.repository import GObject
- from gi.repository import Gtk
-
- class NullTextView(Gtk.TextView):
- set_tab_width = lambda *args: None
- set_show_line_numbers = lambda *args: None
- set_insert_spaces_instead_of_tabs = lambda *args: None
- set_draw_spaces = lambda *args: None
- set_right_margin_position = lambda *args: None
- set_show_right_margin = lambda *args: None
- GObject.type_register(NullTextView)
-
- self.GtkTextView = NullTextView
- self.GtkTextBuffer = Gtk.TextBuffer
-
- def version_check(self):
- pass
-
-
-def _get_srcviewer():
- # for srcv in (gtksourceview210, gtksourceview24):
- # try:
- # return srcv()
- # except ImportError:
- # pass
- return nullsourceview()
+ __gtype_name__ = "MeldSourceView"
+ # TODO: Figure out what bindings we need to add and remove for 3
-srcviewer = _get_srcviewer()
+ # Some sourceviews bind their own undo mechanism, which we replace
+ # Gtk.binding_entry_remove(GtkSource.View, Gdk.KEY_z,
+ # Gdk.ModifierType.CONTROL_MASK)
+ # Gtk.binding_entry_remove(GtkSource.View, Gdk.KEY_z,
+ # Gdk.ModifierType.CONTROL_MASK | Gdk.ModifierType.SHIFT_MASK)
-
-class MeldSourceView(srcviewer.GtkTextView):
- __gtype_name__ = "MeldSourceView"
+ # Gtk.binding_entry_remove(GtkSource.View, Gdk.KEY_Up,
+ # Gdk.ModifierType.MOD1_MASK)
+ # Gtk.binding_entry_remove(GtkSource.View, Gdk.KEY_KP_Up,
+ # Gdk.ModifierType.MOD1_MASK)
+ # Gtk.binding_entry_remove(GtkSource.View, Gdk.KEY_Down,
+ # Gdk.ModifierType.MOD1_MASK)
+ # Gtk.binding_entry_remove(GtkSource.View, Gdk.KEY_KP_Down,
+ # Gdk.ModifierType.MOD1_MASK)
def get_y_for_line_num(self, line):
buf = self.get_buffer()
@@ -208,3 +76,7 @@ class MeldSourceView(srcviewer.GtkTextView):
def get_line_num_for_y(self, y):
return self.get_line_at_y(y)[0].get_line()
+
+ def set_draw_spaces(self, draw):
+ spaces_flag = GtkSource.DrawSpacesFlags.ALL if draw else 0
+ super(MeldSourceView, self).set_draw_spaces(spaces_flag)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]