[gedit-plugins] textsize: make it implement the view activatable



commit 8039ad8aa796fe93acc4ea5508cebf4333103d99
Author: Ignacio Casal Quinteiro <icq gnome org>
Date:   Sun Jan 12 12:37:06 2014 +0100

    textsize: make it implement the view activatable

 plugins/textsize/Makefile.am                       |    2 +-
 plugins/textsize/textsize/__init__.py              |   50 ++++----------------
 .../{documenthelper.py => viewactivatable.py}      |   43 +++++++++--------
 3 files changed, 33 insertions(+), 62 deletions(-)
---
diff --git a/plugins/textsize/Makefile.am b/plugins/textsize/Makefile.am
index ff943a7..6b58881 100644
--- a/plugins/textsize/Makefile.am
+++ b/plugins/textsize/Makefile.am
@@ -2,7 +2,7 @@ if ENABLE_PYTHON
 plugins_textsizedir = $(plugindir)/textsize
 plugins_textsize_PYTHON =                              \
        plugins/textsize/textsize/__init__.py           \
-       plugins/textsize/textsize/documenthelper.py     \
+       plugins/textsize/textsize/viewactivatable.py    \
        plugins/textsize/textsize/signals.py
 
 plugin_in_files += plugins/textsize/textsize.plugin.desktop.in
diff --git a/plugins/textsize/textsize/__init__.py b/plugins/textsize/textsize/__init__.py
index 70beb93..dc8db88 100644
--- a/plugins/textsize/textsize/__init__.py
+++ b/plugins/textsize/textsize/__init__.py
@@ -23,7 +23,7 @@
 #  Boston, MA 02110-1301, USA.
 
 from gi.repository import GObject, Gio, Gtk, Gdk, Gedit
-from .documenthelper import DocumentHelper
+from .viewactivatable import TextSizeViewActivatable
 import gettext
 from gpdefs import *
 
@@ -59,25 +59,11 @@ class TextSizeWindowActivatable(GObject.Object, Gedit.WindowActivatable):
         GObject.Object.__init__(self)
 
     def do_activate(self):
-        self._views  = {}
-
-        # Insert menu items
         self._insert_menu()
 
-        # Insert document helpers
-        for view in self.window.get_views():
-            self.add_document_helper(view)
-
-        self.window.connect('tab-added', self.on_tab_added)
-        self.window.connect('tab-removed', self.on_tab_removed)
-
     def do_deactivate(self):
-        # Remove any installed menu items
         self._remove_menu()
 
-        for view in self.window.get_views():
-            self.remove_document_helper(view)
-
     def _insert_menu(self):
         action = Gio.SimpleAction(name="text-larger")
         action.connect('activate', self.on_larger_text_activate)
@@ -112,43 +98,25 @@ class TextSizeWindowActivatable(GObject.Object, Gedit.WindowActivatable):
         self.window.lookup_action("text-smaller").set_enabled(self.window.get_active_document() != None)
         self.window.lookup_action("text-normal").set_enabled(self.window.get_active_document() != None)
 
-    def get_helper(self, view):
-        if not hasattr(view, "textsize_document_helper"):
+    def get_view_activatable(self, view):
+        if not hasattr(view, "textsize_view_activatable"):
             return None
-        return view.textsize_document_helper
-
-    def add_document_helper(self, view):
-        if self.get_helper(view) != None:
-            return
+        return view.textsize_view_activatable
 
-        DocumentHelper(view)
-
-    def remove_document_helper(self, view):
-        helper = self.get_helper(view)
-
-        if helper != None:
-            helper.stop()
-
-    def call_helper(self, cb):
+    def call_view_activatable(self, cb):
         view = self.window.get_active_view()
 
         if view:
-            cb(self.get_helper(view))
+            cb(self.get_view_activatable(view))
 
     # Menu activate handlers
     def on_larger_text_activate(self, action, parameter, user_data=None):
-        self.call_helper(lambda helper: helper.larger_text())
+        self.call_view_activatable(lambda va: va.larger_text())
 
     def on_smaller_text_activate(self, action, parameter, user_data=None):
-        self.call_helper(lambda helper: helper.smaller_text())
+        self.call_view_activatable(lambda va: va.smaller_text())
 
     def on_normal_size_activate(self, action, parameter, user_data=None):
-        self.call_helper(lambda helper: helper.normal_size())
-
-    def on_tab_added(self, window, tab):
-        self.add_document_helper(tab.get_view())
-
-    def on_tab_removed(self, window, tab):
-        self.remove_document_helper(tab.get_view())
+        self.call_view_activatable(lambda va: va.normal_size())
 
 # ex:ts=4:et:
diff --git a/plugins/textsize/textsize/documenthelper.py b/plugins/textsize/textsize/viewactivatable.py
similarity index 82%
rename from plugins/textsize/textsize/documenthelper.py
rename to plugins/textsize/textsize/viewactivatable.py
index efb98df..73b9dad 100644
--- a/plugins/textsize/textsize/documenthelper.py
+++ b/plugins/textsize/textsize/viewactivatable.py
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 #
-#  documenthelper.py - Document helper
+#  viewactivatable.py - Gedit View Activatable Implementation
 #
 #  Copyright (C) 2010 - Jesse van den Kieboom
 #
@@ -20,34 +20,37 @@
 #  Boston, MA 02110-1301, USA.
 
 from .signals import Signals
-from gi.repository import Gtk, Gdk, Pango
+from gi.repository import GObject, Gtk, Gdk, Pango, Gedit
 
-class DocumentHelper(Signals):
-    def __init__(self, view):
-        Signals.__init__(self)
+class TextSizeViewActivatable(GObject.Object, Gedit.ViewActivatable, Signals):
+
+    view = GObject.property(type=Gedit.View)
 
-        self._view = view
+    def __init__(self):
+        GObject.Object.__init__(self)
+        Signals.__init__(self)
 
-        self.connect_signal(self._view, 'scroll-event', self.on_scroll_event)
-        self.connect_signal(self._view, 'button-press-event', self.on_button_press_event)
+    def do_activate(self):
+        self.connect_signal(self.view, 'scroll-event', self.on_scroll_event)
+        self.connect_signal(self.view, 'button-press-event', self.on_button_press_event)
 
-        self._view.textsize_document_helper = self
+        self.view.textsize_view_activatable = self
 
         self._default_font = None
         self._last_font = None
         self._font_tags = {}
 
-    def stop(self):
+    def do_deactivate(self):
         if self._default_font:
-            self._view.override_font(self._default_font)
+            self.view.override_font(self._default_font)
 
         self.remove_font_tags()
-        self.disconnect_signals(self._view)
+        self.disconnect_signals(self.view)
 
-        self._view.textsize_document_helper = None
+        delattr(self.view, "textsize_view_activatable")
 
     def remove_font_tags(self):
-        buf = self._view.get_buffer()
+        buf = self.view.get_buffer()
         table = buf.get_tag_table()
 
         # Remove all the font tags
@@ -58,7 +61,7 @@ class DocumentHelper(Signals):
         self._font_tags = {}
 
     def update_default_font(self):
-        context = self._view.get_style_context()
+        context = self.view.get_style_context()
         description = context.get_font(context.get_state()).copy()
 
         if not self._last_font or description.hash() != self._last_font.hash():
@@ -84,17 +87,17 @@ class DocumentHelper(Signals):
     def set_font_size(self, amount):
         self.update_default_font()
 
-        context = self._view.get_style_context()
+        context = self.view.get_style_context()
         description = context.get_font(context.get_state()).copy()
 
-        buf = self._view.get_buffer()
+        buf = self.view.get_buffer()
         bounds = buf.get_selection_bounds()
         size = description.get_size() / Pango.SCALE
 
         if not bounds:
             description.set_size(max(1, (size + amount)) * Pango.SCALE)
 
-            self._view.override_font(description)
+            self.view.override_font(description)
             self._last_font = description
         else:
             start = bounds[0]
@@ -143,13 +146,13 @@ class DocumentHelper(Signals):
     def normal_size(self):
         self.update_default_font()
 
-        buf = self._view.get_buffer()
+        buf = self.view.get_buffer()
         bounds = buf.get_selection_bounds()
 
         if not bounds:
             self.remove_font_tags()
 
-            self._view.override_font(self._default_font)
+            self.view.override_font(self._default_font)
             self._last_font = self._default_font
         else:
             tags = self.get_font_tags(bounds[0], bounds[1])


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