import gedit
import gtk
import gconf
import os
import os.path
from gettext import gettext as _
import gtk.glade
import gtksourceview2
ui_str = """
"""
GLADE_FILE = os.path.join(os.path.dirname(__file__), "quickhighlightmode.glade")
class QuickHighlightPlugin(gedit.Plugin):
def __init__(self):
gedit.Plugin.__init__(self)
def activate(self, window):
self.window = window
self.dialog = None
self.language_manager = gedit.get_language_manager()
langs = self.language_manager.get_language_ids()
self.model = gtk.ListStore(str)
self.available_mimes = {}
for id in langs:
lang = self.language_manager.get_language(id)
mimes = lang.get_mime_types()
name = lang.get_name()
if len(mimes) == 0:
mime = 'text/plain'
else:
mime = mimes[0]
self.available_mimes[name.upper()] = mime
self.model.append([name])
actions = [
('QuickHighlightMode', gtk.STOCK_SELECT_COLOR, _('Quick Highlight Mode'), 'h', _("Press Ctrl+Shift+H for quick highlight selection"), self.on_open)
]
action_group = gtk.ActionGroup("QuickHighlightModeActions")
action_group.add_actions(actions, self.window)
self.statusbar = window.get_statusbar()
self.context_id = self.statusbar.get_context_id("QuickHighlightMode")
self.message_id = None
self.manager = self.window.get_ui_manager()
self.manager.insert_action_group(action_group, -1)
self.manager.add_ui_from_string(ui_str)
def on_open(self, *args):
glade_xml = gtk.glade.XML(GLADE_FILE)
if self.dialog:
self.dialog.set_focus(True)
return
self.dialog = glade_xml.get_widget('quickhighlight_dialog')
self.dialog.connect('delete_event', self.on_close)
self.dialog.show_all()
self.dialog.set_transient_for(self.window)
self.combo = glade_xml.get_widget('language_list')
self.cancel_button = glade_xml.get_widget('cancel_button')
self.cancel_button.connect('clicked', self.on_cancel)
self.apply_button = glade_xml.get_widget('apply_button')
self.apply_button.connect('clicked', self.on_apply)
self.combo.set_model(self.model)
self.combo.set_text_column(0)
self.completion = gtk.EntryCompletion()
self.completion.connect('match-selected', self.on_selected)
self.completion.set_model(self.model)
self.completion.set_text_column(0)
self.entry = self.combo.get_children()[0]
self.entry.set_completion(self.completion)
def close_dialog(self):
self.dialog.destroy()
self.dialog = None
def on_selected(self, completion, model, iter):
lang = model.get_value(iter, 0)
self.set_mime_type(lang)
def on_close(self, *args):
self.close_dialog()
def on_cancel(self, *args):
self.close_dialog()
def on_apply(self, *args):
lang = self.entry.get_text()
self.set_mime_type(lang)
def set_mime_type(self, lang):
lang = lang.upper()
if self.available_mimes.has_key(lang):
mime = self.available_mimes[lang]
view = self.window.get_active_view()
buffer = view.get_buffer()
language = gedit.language_manager_get_language_from_mime_type(self.language_manager, mime)
buffer.set_language(language)
self.close_dialog()