diff options
Diffstat (limited to 'misc/ibus/panel.py')
-rw-r--r-- | misc/ibus/panel.py | 417 |
1 files changed, 0 insertions, 417 deletions
diff --git a/misc/ibus/panel.py b/misc/ibus/panel.py deleted file mode 100644 index de8a5a4e62..0000000000 --- a/misc/ibus/panel.py +++ /dev/null @@ -1,417 +0,0 @@ -#! /usr/bin/env python -# vim:set et sts=4 sw=4: -# -# ibus-panel-dbus - Another panel for ibus -# -# Copyright (c) 2009 Wang Hoi <zealot.hoi@gmail.com> -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this program; if not, write to the -# Free Software Foundation, Inc., 59 Temple Place, Suite 330, -# Boston, MA 02111-1307 USA - -#IBUS_SERVICE_KIMPANEL = "org.freedesktop.IBus.Panel.KIM" -#IBUS_PATH_KIMPANEL = "/org/freedesktop/IBus/Panel/KIM" - -from ibus import * -from ibus.panel import * -from ibus.bus import Bus -from ibus.inputcontext import InputContext -from ibus import keysyms -#import ibus.interface -import gtk -import dbus - -IBUS_ICON_DIR = '/usr/share/ibus/icons/' - -from gettext import dgettext -_ = lambda a : dgettext("ibus", a) -N_ = lambda a : a - -def prop2string(prop): - __prop_key = '/IBus/'+prop.get_key() - __prop_label = prop.get_label().get_text() - __prop_icon = prop.get_icon() - __prop_tip = prop.get_tooltip().get_text() - - # workaround - if len(__prop_icon)==0: - # the setup icon - if (prop.get_key()=='setup'): - __prop_icon = 'configure' - - __prop = __prop_key + ':' + __prop_label + ':' + __prop_icon + ':' + __prop_tip - return __prop - -class KIMIbusClient(dbus.service.Object): - def __init__(self, object_path): - dbus.service.Object.__init__(self, dbus.SessionBus(), object_path) - - @dbus.service.signal(dbus_interface='org.ibus.panel', - signature='s') - def ExecDialog(self, prop): - pass - - @dbus.service.signal(dbus_interface='org.ibus.panel', - signature='as') - def ExecMenu(self, props): - pass - - @dbus.service.signal(dbus_interface='org.ibus.panel', - signature='as') - def RegisterProperties(self, props): - pass - - @dbus.service.signal(dbus_interface='org.ibus.panel', - signature='s') - def UpdateProperty(self, prop): - pass - - @dbus.service.signal(dbus_interface='org.ibus.panel', - signature='s') - def RemoveProperty(self, prop): - pass - - @dbus.service.signal(dbus_interface='org.ibus.panel', - signature='b') - def Enable(self, b): - pass - - @dbus.service.signal(dbus_interface='org.ibus.panel', - signature='b') - def ShowAux(self, b): - pass - - @dbus.service.signal(dbus_interface='org.ibus.panel', - signature='b') - def ShowPreedit(self, b): - pass - - @dbus.service.signal(dbus_interface='org.ibus.panel', - signature='b') - def ShowLookupTable(self, b): - pass - - @dbus.service.signal(dbus_interface='org.ibus.panel', - signature='asasasbb') - def UpdateLookupTable(self, labels,items,xs,bool1,bool2): - pass - - @dbus.service.signal(dbus_interface='org.ibus.panel', - signature='i') - def UpdatePreeditCaret(self, pos): - pass - - @dbus.service.signal(dbus_interface='org.ibus.panel', - signature='ss') - def UpdatePreeditText(self, test, attr): - pass - - @dbus.service.signal(dbus_interface='org.ibus.panel', - signature='ss') - def UpdateAux(self, test, attr): - pass - - @dbus.service.signal(dbus_interface='org.ibus.panel', - signature='ii') - def UpdateSpotLocation(self, x, y): - pass - - @dbus.service.signal(dbus_interface='org.ibus.panel', - signature='i') - def UpdateScreen(self, id): - pass - -class KIMPanel(PanelBase): - def __init__(self): - self.__bus = Bus() - self.__bus.connect("disconnected", gtk.main_quit) - super(KIMPanel, self).__init__(self.__bus) - self.__bus.request_name(IBUS_SERVICE_PANEL, 0) - self.__session_bus = dbus.SessionBus() - #self.__kimproxy = self.__session_bus.get_object('org.kde.impanel', - # '/org/kde/impanel') - #self.__kimifce = dbus.Interface(self.__kimproxy, - # 'org.kde.impanel') - self.__session_bus.add_signal_receiver(self.kim_trigger_property, - signal_name='TriggerProperty', - dbus_interface='org.kde.impanel') - self.__session_bus.add_signal_receiver(self.kim_panel_created, - signal_name='PanelCreated', - dbus_interface='org.kde.impanel') - self.__session_bus.add_signal_receiver(self.kim_reload_config, - signal_name='ReloadConfig', - dbus_interface='org.kde.impanel') - self.__session_bus.add_signal_receiver(gtk.main_quit, - signal_name='Exit', - dbus_interface='org.kde.impanel') - self.__session_bus.add_signal_receiver(self.page_up, - signal_name='LookupTablePageUp', - dbus_interface='org.kde.impanel') - self.__session_bus.add_signal_receiver(self.page_down, - signal_name='LookupTablePageDown', - dbus_interface='org.kde.impanel') - self.__session_bus.add_signal_receiver(self.kim_select_candidate, - signal_name='SelectCandidate', - dbus_interface='org.kde.impanel') - - self.__kimclient = KIMIbusClient('/org/ibus/panel') - - self.__focus_ic = None - - self.__logo_prop = Property(key='Logo', label='IBus', icon=IBUS_ICON_DIR + '/ibus.svg', tooltip='IBus input method') - self.__about_prop = Property(key='About', label=_('IBus intelligent input bus'), icon='help-about') - self.__about_prop.set_tooltip(_("IBus is an intelligent input bus for Linux/Unix.\n\nHuang Peng <shawn.p.huang@gmail.com>")) - self.__prop_map = {} - - self.__im_menu = [] - - def focus_in(self,ic): - self.__focus_ic = InputContext(self.__bus, ic) - enabled = self.__focus_ic.is_enabled() - - if not enabled: - self.__logo_prop.icon = IBUS_ICON_DIR + '/ibus.svg' - else: - engine = self.__focus_ic.get_engine() - if engine: - self.__logo_prop.icon = engine.icon - else: - self.__logo_prop.icon = IBUS_ICON_DIR + '/ibus.svg' - - self.__kimclient.UpdateProperty(prop2string(self.__logo_prop)) - - def state_changed(self): - print 'state_changed' - if not self.__focus_ic: - return - - enabled = self.__focus_ic.is_enabled() - - if enabled == False: - self.__reset() - self.__logo_prop.set_icon(IBUS_ICON_DIR + 'ibus.svg') - else: - engine = self.__focus_ic.get_engine() - if engine: - self.__logo_prop.set_icon(engine.icon) - else: - self.__logo_prop.set_icon(IBUS_ICON_DIR + 'ibus.svg') - self.__kimclient.UpdateProperty(prop2string(self.__logo_prop)) - - def focus_out(self,ic): - #self.__focus_ic = None - self.__logo_prop.icon = IBUS_ICON_DIR + '/ibus.svg' - self.__kimclient.UpdateProperty(prop2string(self.__logo_prop)) - - def set_cursor_location(self, x, y, w, h): - #print 'set_cursor_location',x,y,w,h - self.__kimclient.UpdateSpotLocation(x+w,y+h) - - def update_preedit_text(self, text, cursor_pos, visible): - print 'update_preedit_text',cursor_pos,visible - self.__kimclient.UpdatePreeditText(text.get_text(),'') - self.__kimclient.UpdatePreeditCaret(cursor_pos) - if visible: - self.show_preedit_text() - else: - self.hide_preedit_text() - - def show_preedit_text(self): - print 'show_preedit_text' - self.__kimclient.ShowPreedit(1) - - def hide_preedit_text(self): - print 'hide_preedit_text' - self.__kimclient.ShowPreedit(0) - - def update_auxiliary_text(self, text, visible): - #print 'update_auxiliary_text',visible - self.__kimclient.UpdateAux(text.get_text(),'') - if visible: - self.show_auxiliary_text() - else: - self.hide_auxiliary_text() - - def show_auxiliary_text(self): - print 'show_auxiliary_text' - self.__kimclient.ShowAux(1) - - def hide_auxiliary_text(self): - print 'hide_auxiliary_text' - self.__kimclient.ShowAux(0) - - def update_lookup_table(self, lookup_table, visible): - if lookup_table == None: - lookup_table = LookupTable() - - self.__lookup_table = lookup_table - - self.__labels = [] - self.__candis = [] - self.__attrs = [] - i = 0 - for text_obj in lookup_table.get_candidates_in_current_page(): - i=i+1 - if i==10: - i=0 - self.__labels.append(str(i)) - self.__candis.append(text_obj.get_text()) - self.__attrs.append('') - - self.__kimclient.UpdateLookupTable(self.__labels, - self.__candis,self.__attrs,dbus.Boolean(1),dbus.Boolean(lookup_table.get_current_page_size() <= lookup_table.get_page_size())) - - if visible: - self.show_lookup_table() - else: - self.hide_lookup_table() - - - def show_lookup_table(self): - print 'show_lookup_table' - self.__kimclient.ShowLookupTable(1) - - def hide_lookup_table(self): - print 'hide_lookup_table' - self.__kimclient.ShowLookupTable(0) - - def cursor_up_lookup_table(self): - print 'cursor_up_lookup_table' - - def cursor_down_lookup_table(self): - print 'cursor_down_lookup_table' - - def show_candidate_window(self): - print 'show_candidate_window' - - def hide_candidate_window(self): - print 'hide_candidate_window' - - def show_language_bar(self): - print 'show_language_bar' - - def hide_language_bar(self): - print 'hide_language_bar' - - def register_properties(self, props): - print 'register_properties' - __props = [] - __props.append(prop2string(self.__logo_prop)) - for prop in props.get_properties(): - __props.append(prop2string(prop)) - __prop_key = '/IBus/'+prop.get_key() - #self.__prop - __props.append(prop2string(self.__about_prop)) - - self.__kimclient.RegisterProperties(__props) - - def update_property(self, prop): - print 'update_property' - self.__kimclient.UpdateProperty(prop2string(prop)) - - def get_status_icon(self): - print 'get_status_icon' - -# begin of signal handler - - def kim_panel_created(self): - print 'KIM: panel created' - - def kim_reload_config(self): - print 'KIM: reload config' - - def kim_trigger_property(self,prop): - print 'KIM: trigger property' - if prop.startswith('/IBus/'): - __prop_key = prop[6:] - if __prop_key == 'Logo': - self.__im_menu = self.__create_im_menu() - self.__kimclient.ExecMenu(map(prop2string,self.__im_menu)) - elif __prop_key == 'About': - self.__kimclient.ExecDialog(prop2string(self.__about_prop)) - elif __prop_key.startswith('Engine/'): - self.__reset() - __prop_key = __prop_key[7:] - if __prop_key == 'None': - self.__focus_ic.disable() - else: - engines = self.__bus.list_active_engines() - for engine in engines: - print engine.name - if engine.name == __prop_key: - print 'matched engine' - self.__focus_ic.set_engine(engine) - else: - self.property_activate(__prop_key,PROP_STATE_CHECKED) - - def kim_select_candidate(self,index): - print 'select_candidate:Implement me!' - # dirty hack - #if self.__focus_ic: - # #engine = self.__focus_ic.get_engine() - # #if engine: - # # print 'select_candidate',index - # self.__focus_ic.process_key_event(keysyms._1,0) - pass - - def __reset(self): - self.hide_auxiliary_text() - self.hide_preedit_text() - self.hide_lookup_table() - - def __create_im_menu(self): - engines = self.__bus.list_active_engines() - - tmp = {} - for engine in engines: - lang = get_language_name(engine.language) - if lang not in tmp: - tmp[lang] = [] - tmp[lang].append(engine) - - langs = tmp.keys() - other = tmp.get(_("Other"), []) - if _("Other") in tmp: - langs.remove(_("Other")) - langs.append(_("Other")) - - im_menu = [] - - for lang in langs: - if len(tmp[lang]) == 1: - engine = tmp[lang][0] - item = Property(key='Engine/'+engine.name) - item.set_label("%s - %s" % (lang, engine.longname)) - if engine.icon: - item.set_icon(engine.icon) - else: - item.set_icon("engine-default") - print prop2string(item) - im_menu.append(item) - else: - pass - - item = Property(key='Engine/None',label=_('Disable'),icon=IBUS_ICON_DIR+'/ibus.svg') - im_menu.append(item) - - return im_menu - - -def launch_panel(): - panel = KIMPanel() - gtk.main() - -if __name__ == "__main__": - launch_panel() - |