[gedit-plugins] Port textsize plugins to libpeas.
- From: Ignacio Casal Quinteiro <icq src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gedit-plugins] Port textsize plugins to libpeas.
- Date: Tue, 13 Jul 2010 15:50:06 +0000 (UTC)
commit 3574312772024fc13d9829216b0cce16f900ca4a
Author: Ignacio Casal Quinteiro <icq gnome org>
Date: Tue Jul 13 17:49:24 2010 +0200
Port textsize plugins to libpeas.
plugins/textsize/textsize/Makefile.am | 3 +-
plugins/textsize/textsize/__init__.py | 208 +++++++++++++++++++++++--
plugins/textsize/textsize/documenthelper.py | 25 ++--
plugins/textsize/textsize/windowhelper.py | 227 ---------------------------
4 files changed, 208 insertions(+), 255 deletions(-)
---
diff --git a/plugins/textsize/textsize/Makefile.am b/plugins/textsize/textsize/Makefile.am
index c457af2..28ec71e 100644
--- a/plugins/textsize/textsize/Makefile.am
+++ b/plugins/textsize/textsize/Makefile.am
@@ -6,7 +6,6 @@ plugin_PYTHON = \
constants.py \
documenthelper.py \
__init__.py \
- signals.py \
- windowhelper.py
+ signals.py
-include $(top_srcdir)/git.mk
diff --git a/plugins/textsize/textsize/__init__.py b/plugins/textsize/textsize/__init__.py
index c1ee8bd..deaf213 100644
--- a/plugins/textsize/textsize/__init__.py
+++ b/plugins/textsize/textsize/__init__.py
@@ -23,24 +23,206 @@
# Boston, MA 02111-1307, USA.
from gettext import gettext as _
+from gi.repository import GObject, Gtk, Gdk, Gedit
+import constants
+from documenthelper import DocumentHelper
+from gi.overrides import keysyms
-import gtk
-import gedit
-from windowhelper import WindowHelper
+# UI manager snippet to add menu items to the View menu
+ui_str = """
+<ui>
+ <menubar name="MenuBar">
+ <menu name="ViewMenu" action="View">
+ <placeholder name="ViewOps_2">
+ <menuitem name="IncreaseFontSize" action="IncreaseFontSizeAction"/>
+ <menuitem name="DecreaseFontSize" action="DecreaseFontSizeAction"/>
+ <menuitem name="ResetFontSize" action="ResetFontSizeAction"/>
+ </placeholder>
+ </menu>
+ </menubar>
+</ui>
+"""
+
+class TextSizePlugin(GObject.Object, Gedit.WindowActivatable):
+ __gtype_name__ = "TextSizePlugin"
-class TextSizePlugin(gedit.Plugin):
def __init__(self):
- gedit.Plugin.__init__(self)
- self._instances = {}
+ GObject.Object.__init__(self)
+
+ def do_activate(self, window):
+ self._window = window
+ self._views = {}
+
+ # Insert menu items
+ self._insert_menu()
+
+ # Insert document helpers
+ for view in window.get_views():
+ self.add_document_helper(view)
+
+ window.connect('tab-added', self.on_tab_added)
+ window.connect('tab-removed', self.on_tab_removed)
+
+ self._accel_group = Gtk.AccelGroup()
+ self._window.add_accel_group(self._accel_group)
+
+ self._proxy_callback_map = {
+ 'IncreaseFontSizeAction': self.on_increase_font_accel,
+ 'DecreaseFontSizeAction': self.on_decrease_font_accel,
+ 'ResetFontSizeAction': self.on_reset_font_accel
+ }
+
+ self._proxy_mapping = {}
+ self._init_proxy_accels()
+ self._accel_map_handler_id = Gtk.AccelMap.get().connect('changed', self.on_accel_map_changed)
+
+ def _install_proxy(self, action):
+ if not isinstance(action, Gtk.Action):
+ action = self._action_group.get_action(str(action))
+
+ if not action:
+ return
+
+ entry = Gtk.AccelMap.lookup_entry(action.get_accel_path())
+
+ if not entry:
+ return
+
+ mapping = {
+ Gdk.plus: Gdk.KP_Add,
+ Gdk.KP_Add: Gdk.plus,
+ Gdk.minus: Gdk.KP_Subtract,
+ Gdk.KP_Subtract: Gdk.minus,
+ keysyms._0: Gdk.KP_0,
+ Gdk.KP_0: keysyms._0
+ }
+
+ if entry[0] in mapping:
+ key = mapping[entry[0]]
+ mod = entry[1]
+
+ callback = self._proxy_callback_map[action.get_name()]
+
+ self._accel_group.connect_group(key, mod, Gtk.ACCEL_LOCKED, callback)
+ self._proxy_mapping[action] = (key, mod)
+
+ def _init_proxy_accels(self):
+ self._install_proxy('IncreaseFontSizeAction')
+ self._install_proxy('DecreaseFontSizeAction')
+ self._install_proxy('ResetFontSizeAction')
+
+ def do_deactivate(self, window):
+ # Remove any installed menu items
+ self._remove_menu()
+
+ for view in self._window.get_views():
+ self.remove_document_helper(view)
+
+ window.remove_accel_group(self._accel_group)
+
+ Gtk.AccelMap.get().disconnect(self._accel_map_handler_id)
+
+ self._window = None
+ self._accel_group = None
+ self._action_group = None
+
+ def _insert_menu(self):
+ # Get the GtkUIManager
+ manager = self._window.get_ui_manager()
+
+ # Create a new action group
+ self._action_group = Gtk.ActionGroup()
+ self._action_group.add_actions([("IncreaseFontSizeAction", None, _("_Increase font size"),
+ "<Ctrl>plus", None,
+ self.on_increase_font_size_activate),
+ ("DecreaseFontSizeAction", None, _("_Decrease font size"),
+ "<Ctrl>minus", None,
+ self.on_decrease_font_size_activate),
+ ("ResetFontSizeAction", None, _("_Reset font size"),
+ "<Ctrl>0", None,
+ self.on_reset_font_size_activate)])
+
+ # Insert the action group
+ manager.insert_action_group(self._action_group, -1)
+
+ # Merge the UI
+ self._ui_id = manager.add_ui_from_string(ui_str)
+
+ def _remove_menu(self):
+ # Get the GtkUIManager
+ manager = self._window.get_ui_manager()
+
+ # Remove the ui
+ manager.remove_ui(self._ui_id)
+
+ # Remove the action group
+ manager.remove_action_group(self._action_group)
+
+ # Make sure the manager updates
+ manager.ensure_update()
+
+ def do_update_state(self, window):
+ self._action_group.set_sensitive(self._window.get_active_document() != None)
+
+ def get_helper(self, view):
+ return view.get_data(constants.DOCUMENT_HELPER_KEY)
+
+ def add_document_helper(self, view):
+ if self.get_helper(view) != None:
+ return
+
+ DocumentHelper(view)
+
+ def remove_document_helper(self, view):
+ helper = self.get_helper(view)
+
+ if helper != None:
+ helper.stop()
+
+ def call_helper(self, cb):
+ view = self._window.get_active_view()
+
+ if view:
+ cb(self.get_helper(view))
+
+ # Menu activate handlers
+ def on_increase_font_size_activate(self, action, user_data=None):
+ self.call_helper(lambda helper: helper.increase_font_size())
+
+ def on_decrease_font_size_activate(self, action, user_data=None):
+ self.call_helper(lambda helper: helper.decrease_font_size())
+
+ def on_reset_font_size_activate(self, action, user_data=None):
+ self.call_helper(lambda helper: helper.reset_font_size())
+
+ def on_increase_font_accel(self, group, accel, key, mod):
+ self.call_helper(lambda helper: helper.increase_font_size())
+
+ def on_decrease_font_accel(self, group, accel, key, mod):
+ self.call_helper(lambda helper: helper.decrease_font_size())
+
+ def on_reset_font_accel(self, group, accel, key, mod):
+ self.call_helper(lambda helper: helper.reset_font_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())
+
+ def _remap_proxy(self, action):
+ # Remove previous proxy
- def activate(self, window):
- self._instances[window] = WindowHelper(self, window)
+ if action in self._proxy_mapping:
+ item = self._proxy_mapping[action]
+ self._accel_group.disconnect_key(item[0], item[1])
- def deactivate(self, window):
- self._instances[window].deactivate()
- del self._instances[window]
+ self._install_proxy(action)
- def update_ui(self, window):
- self._instances[window].update_ui()
+ def on_accel_map_changed(self, accelmap, path, key, mod):
+ for action in self._action_group.list_actions():
+ if action.get_accel_path() == path:
+ self._remap_proxy(action)
+ return
# ex:ts=4:et:
diff --git a/plugins/textsize/textsize/documenthelper.py b/plugins/textsize/textsize/documenthelper.py
index 38a0146..99406c6 100644
--- a/plugins/textsize/textsize/documenthelper.py
+++ b/plugins/textsize/textsize/documenthelper.py
@@ -21,8 +21,7 @@
from signals import Signals
import constants
-import pango
-import gtk
+from gi.repository import Gtk, Gdk, Pango
class DocumentHelper(Signals):
def __init__(self, view):
@@ -87,10 +86,10 @@ class DocumentHelper(Signals):
buf = self._view.get_buffer()
bounds = buf.get_selection_bounds()
- size = description.get_size() / pango.SCALE
+ size = description.get_size() / Pango.SCALE
if not bounds:
- description.set_size(max(1, (size + amount)) * pango.SCALE)
+ description.set_size(max(1, (size + amount)) * Pango.SCALE)
self._view.modify_font(description)
self._last_font = description
@@ -104,12 +103,12 @@ class DocumentHelper(Signals):
# Simply use the overall font size as the base
newsize = size + amount
elif len(tags) == 1:
- newsize = tags[0].props.font_desc.get_size() / pango.SCALE + amount
+ newsize = tags[0].props.font_desc.get_size() / Pango.SCALE + amount
else:
newsize = 0
for tag in tags:
- newsize += tag.props.font_desc.get_size() / pango.SCALE
+ newsize += tag.props.font_desc.get_size() / Pango.SCALE
newsize = round(newsize / len(tags))
@@ -119,7 +118,7 @@ class DocumentHelper(Signals):
newtag = buf.create_tag(None)
desc = description.copy()
- desc.set_size(newsize * pango.SCALE)
+ desc.set_size(newsize * Pango.SCALE)
newtag.props.font_desc = desc
self._font_tags[newsize] = newtag
@@ -156,24 +155,24 @@ class DocumentHelper(Signals):
buf.remove_tag(tag, bounds[0], bounds[1])
def on_scroll_event(self, view, event):
- state = event.state & gtk.accelerator_get_default_mod_mask()
+ state = event.scroll.state & Gtk.accelerator_get_default_mod_mask()
- if state != gtk.gdk.CONTROL_MASK:
+ if state != Gdk.ModifierType.CONTROL_MASK:
return False
- if event.direction == gtk.gdk.SCROLL_UP:
+ if event.scroll.direction == Gdk.ScrollDirection.UP:
self.increase_font_size()
return True
- elif event.direction == gtk.gdk.SCROLL_DOWN:
+ elif event.scroll.direction == Gdk.ScrollDirection.DOWN:
self.decrease_font_size()
return True
return False
def on_button_press_event(self, view, event):
- state = event.state & gtk.accelerator_get_default_mod_mask()
+ state = event.button.state & Gtk.accelerator_get_default_mod_mask()
- if state == gtk.gdk.CONTROL_MASK and event.button == 2:
+ if state == Gdk.ModifierType.CONTROL_MASK and event.button.button == 2:
self.reset_font_size()
return True
else:
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]