from gettext import gettext as _

import gtk
import gedit

# Menu item example, insert a new item in the Tools menu
ui_str = """<ui>
<menubar name="MenuBar">
    <menu name="ToolsMenu" action="Tools">
      <placeholder name="ToolsOps_2">
     <menuitem name="MayusculasPy" action="MayusculasPy"/>
      </placeholder>
    </menu>
</menubar>
</ui>
"""

class MayusculasHelper:
    def __init__(self, plugin, window):
        self._window = window
        self._plugin = plugin

        # Insert menu items
        self._insert_menu()

    def deactivate(self):
        # Remove any installed menu items
        self._remove_menu()

        self._window = None
        self._plugin = None
        self._action_group = None

    def _insert_menu(self):
        manager = self._window.get_ui_manager()
        self._action_group = gtk.ActionGroup("MayusculasPyPluginActions")
        self._action_group.add_actions([("MayusculasPy", None, _("Pasar a mayúsculas"),
                                       None, _("Pasar a mayúsculas"),
                                       self.on_clear_document_activate)])

        manager.insert_action_group(self._action_group, -1)
        self._ui_id = manager.add_ui_from_string(ui_str)

    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()

    def update_ui(self):
        self._action_group.set_sensitive(self._window.get_active_document() != None)

    # Menu activate handlers
    def on_clear_document_activate(self, action):
        doc = self._window.get_active_document()
        if not doc:
            return

        i1 = doc.get_start_iter()
        i2 = doc.get_end_iter()

        txt = doc.get_text(i1,i2)

        doc.set_text(txt.upper())
        

class Mayusculas(gedit.Plugin):
       def __init__(self):
           gedit.Plugin.__init__(self)
           self._instancias = {}

       def activate(self, window):
           self._instancias[window] = MayusculasHelper(self, window)

       def deactivate(self, window):
           self._instancias[window].deactivate()
           del self._instancias[window]

       def update_ui(self, window):
           self._instancias[window].update_ui()
