[gedit-plugins] Port joinlines to the new menu api



commit a52e6d04c4df632455a65cad1ff807fc488ac81e
Author: Ignacio Casal Quinteiro <icq gnome org>
Date:   Thu Jan 9 08:22:52 2014 +0100

    Port joinlines to the new menu api

 plugins/joinlines/joinlines.py |   73 +++++++++++++++++++++-------------------
 1 files changed, 38 insertions(+), 35 deletions(-)
---
diff --git a/plugins/joinlines/joinlines.py b/plugins/joinlines/joinlines.py
index bc22ace..60d51c7 100644
--- a/plugins/joinlines/joinlines.py
+++ b/plugins/joinlines/joinlines.py
@@ -19,7 +19,7 @@
 #  Foundation, Inc., 51 Franklin Street, Fifth Floor,
 #  Boston, MA 02110-1301, USA.
 
-from gi.repository import GObject, Gtk, Gedit
+from gi.repository import GObject, Gio, Gtk, Gedit
 import gettext
 from gpdefs import *
 
@@ -29,21 +29,22 @@ try:
 except:
     _ = lambda s: s
 
-ui_str = """
-<ui>
-  <menubar name="MenuBar">
-    <menu name="EditMenu" action="Edit">
-      <placeholder name="EditOps_5">
-        <menuitem name="JoinLines" action="JoinLines"/>
-        <menuitem name="SplitLines" action="SplitLines"/>
-      </placeholder>
-    </menu>
-  </menubar>
-</ui>
-"""
-
-class JoinLinesPlugin(GObject.Object, Gedit.WindowActivatable):
-    __gtype_name__ = "JoinLinesPlugin"
+class JoinLinesAppActivatable(GObject.Object, Gedit.AppActivatable):
+    app = GObject.property(type=Gedit.App)
+
+    def __init__(self):
+        GObject.Object.__init__(self)
+
+    def do_activate(self):
+        self.app.add_accelerator("<Primary>J", "win.joinlines", None)
+        self.app.add_accelerator("<Primary><Shift>J", "win.splitlines", None)
+
+    def do_deactivate(self):
+        self.app.remove_accelerator("win.joinlines", None)
+        self.app.remove_accelerator("win.splitlines", None)
+
+
+class JoinLinesWindowActivatable(GObject.Object, Gedit.WindowActivatable):
 
     window = GObject.property(type=Gedit.Window)
 
@@ -58,29 +59,31 @@ class JoinLinesPlugin(GObject.Object, Gedit.WindowActivatable):
 
     def do_update_state(self):
         view = self.window.get_active_view()
-        self._action_group.set_sensitive(view is not None and \
-                                         view.get_editable())
+        self.window.lookup_action("joinlines").set_enabled(view is not None and \
+                                                           view.get_editable())
+        self.window.lookup_action("splitlines").set_enabled(view is not None and \
+                                                            view.get_editable())
 
     def _remove_menu(self):
-        manager = self.window.get_ui_manager()
-        manager.remove_ui(self._ui_id)
-        manager.remove_action_group(self._action_group)
-        manager.ensure_update()
+        self.window.remove_action("joinlines")
+        self.window.remove_action("splitlines")
 
     def _insert_menu(self):
-        manager = self.window.get_ui_manager()
-        self._action_group = Gtk.ActionGroup(name="GeditJoinLinesPluginActions")
-        self._action_group.add_actions(
-            [("JoinLines", None, _("_Join Lines"), "<Ctrl>J",
-              _("Join the selected lines"),
-              lambda a, w: join_lines(w)),
-             ("SplitLines", None, _('_Split Lines'), "<Shift><Ctrl>J",
-              _("Split the selected lines"),
-              lambda a, w: split_lines(w))],
-            self.window)
-
-        manager.insert_action_group(self._action_group)
-        self._ui_id = manager.add_ui_from_string(ui_str)
+        action = Gio.SimpleAction(name="joinlines")
+        action.connect('activate', lambda a, p: join_lines(self.window))
+        self.window.add_action(action)
+
+        action = Gio.SimpleAction(name="splitlines")
+        action.connect('activate', lambda a, p: split_lines(self.window))
+        self.window.add_action(action)
+
+        self.menu = self.extend_gear_menu("ext9")
+
+        item = Gio.MenuItem.new(_('_Split Lines'), "win.splitlines")
+        self.menu.prepend_menu_item(item)
+
+        item = Gio.MenuItem.new(_("_Join Lines"), "win.joinlines")
+        self.menu.prepend_menu_item(item)
 
 def join_lines(window):
     doc = window.get_active_document()


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