Back to index

im-sdk  12.3.91
LE.hh
Go to the documentation of this file.
00001 #ifndef LE_HH_
00002 #define LE_HH_
00003 #include <vector>
00004 #include <string>
00005 #include <SunIM.h>
00006 #include <config.h>
00007 #include <threaddef.h>
00008 #include "basictype.hh"
00009 #include "IMBasicObject.hh"
00010 #include "IMHotkey.hh"
00011 
00012 class IMInputContext;
00013 class IMDesktop;
00014 
00015 class LEContext;
00016 class LEBase
00017 {
00018     bool error;
00019     string dirname;
00020     string filename;
00021     string lename;
00022     u16string lename_hrn;
00023     IMLangList langlist;
00024     IMImeInfoList imeinfolist;
00025     IMDescriptorList imdesclist;
00026     IMObjectWithDescList imobjectdesclist;
00027     iml_desktop_t *imd;
00028     typedef map<iml_desktop_t *, IMLangList> LEDesktopLangMap;
00029     LEDesktopLangMap le_dlmap;
00030     typedef map<iml_desktop_t *, IMDescriptorList> LEDesktopDescMap;
00031     LEDesktopDescMap le_ddmap;
00032 
00033     bool sunim_default;
00034     if_methods_t *ifm;
00035     iml_if_t *iml_if;
00036     iml_if_t *iml_if_context;
00037     int iml_if_context_ref_count;
00038     bool need_thread_lock;
00039     bool need_reload;
00040     IMSyncObject leif_sync;
00041 
00042     IMSyncObject& get_leif_sync_object()
00043     { return leif_sync; }
00044 
00045     string get_lename(
00046        string &filename
00047     );
00048 
00049     void add_imobjectdesc(
00050        IMObjectDescriptorStruct *pol
00051     );
00052     bool loadif();
00053     iml_if_t* openif(
00054        const char* real_locale
00055     );
00056     bool closeif();
00057 
00058   public:
00059     const IMLangList* get_langlist();
00060     const IMImeInfoList* get_imeinfolist();
00061     const IMDescriptorList *get_imdesclist();
00062     const bool update_imdesclist(
00063         IMLEName *LEname,
00064         IMLocale *Locales,
00065         int nLocales,
00066         iml_desktop_t **desktop,
00067         IMLangList &ull,
00068         IMImeInfoList &uil,
00069         IMDescriptorList &udl
00070     );
00071     const void set_nsmap_config(
00072         IMNsMapStruct *nsms,
00073         int num_nsm_entries
00074     );
00075     const IMObjectWithDescList *get_objectdesclist();
00076     IMHotkeyManagerStruct *get_hotkey_manager();
00077     LEContext* create_lecontext(
00078        IMInputContext *pic,
00079        const char* real_locale
00080     );
00081     void remove_lecontext(LEContext *lec);
00082     iml_desktop_t *get_imldesktop()
00083     { return imd; }
00084     iml_if_t *get_iml_if()
00085     { return iml_if; }
00086     iml_methods_t *get_iml_methods()
00087     { return iml_if->m; }
00088     bool errorp() { return error; }
00089     bool reloadp() { return need_reload; }
00090     bool need_thread_lock_p() { return need_thread_lock; }
00091 
00092     bool reload();
00093 
00094     bool xsunim_p()
00095     { return (iml_if->xsunim == True); }
00096 
00097     bool open_iml_desktop(
00098        IMDesktop *pdesk,
00099        iml_desktop_t *piml_desk
00100     );
00101     bool close_iml_desktop(
00102        iml_desktop_t *piml_desk
00103     );
00104 
00105     LEBase(
00106        const string &dirname,
00107        const string &filename
00108     );
00109 
00110     enum BUILTIN_OPTION {
00111            SUNIM_DEFAULT
00112     };
00113     LEBase(
00114        enum BUILTIN_OPTION option
00115     );
00116     ~LEBase();
00117 
00118   friend class LEContext;
00119 };
00120 
00121 class IMInputContext;
00122 class IMLExec;
00123 class LEContext
00124 {
00125     // string locale;
00126     // u16string locale_hrn;
00127     LEBase *pbase;
00128     IMInputContext *pic;
00129     iml_if_t *iml_if;
00130     iml_session_t *s;
00131     iml_desktop_t *iml_desktop;
00132     bool error;
00133 
00134     bool need_thread_lock_p()
00135     { return pbase->need_thread_lock_p(); }
00136     IMSyncObject& get_leif_sync_object()
00137     { return pbase->get_leif_sync_object(); }
00138 
00139     void bind_imlexec(IMLExec *pimlex);
00140     bool set_values(IMArgList args, int num_args);
00141     bool realize();
00142 
00143   private:
00144     // LE context state.
00145     bool realized;
00146 
00147   public:
00148     bool errorp()
00149     { return error; }
00150 
00151     IMInputContext* get_inputcontext()
00152     { return pic; }
00153 
00154     iml_if_t* get_iml_if()
00155     { return iml_if; }
00156 
00157     iml_desktop_t* get_iml_desktop()
00158     { return iml_desktop; }
00159 
00160     LEBase* get_lebase()
00161     { return pbase; }
00162 
00163     bool send_event(
00164        IMLExec* pimlex,
00165        IMInputEvent* pimevent
00166     );
00167     bool send_event_getvalues(
00168        IMLExec* pimlex,
00169        IMInputEvent* pimevent
00170     );
00171     bool send_event_getvalues_finished(
00172        IMLExec* pimlex
00173     );
00174     bool toggle_conversion(
00175        IMLExec *pimlex,
00176        bool flag
00177     );
00178     bool reset(
00179        IMLExec *pimlex
00180     );
00181     bool toggle_focus(
00182        IMLExec *pimlex,
00183        bool flag
00184     );
00185 
00186     void destroy();
00187     bool destroy(
00188        IMLExec *pimlex
00189     );
00190 
00191     iml_session_t *get_iml_session ()
00192     { return s; }
00193 
00194   private:
00195     bool initialize();
00196     LEContext(
00197        IMInputContext *pic,
00198        LEBase *pbase,
00199        iml_if_t *iif
00200     );
00201     ~LEContext();
00202 
00203   friend class LEBase;
00204 };
00205 
00206 #endif /* not LE_HH_ */
00207 
00208 /* Local Variables: */
00209 /* c-file-style: "iiim-project" */
00210 /* End: */