Add get_surrounding_text and get_selection_text request
[platform/core/uifw/isf.git] / ism / src / scim_helper.h
1 /**
2  * @file scim_helper.h
3  * @brief Defines scim::HelperAgent and it's related types.
4  *
5  * scim::HelperAgent is a class used to write Client Helper modules.
6  *
7  */
8
9 /* ISF is based on SCIM 1.4.7 and extended for supporting more mobile fitable. */
10
11 /*
12  * Smart Common Input Method
13  *
14  * Copyright (c) 2004-2005 James Su <suzhe@tsinghua.org.cn>
15  * Copyright (c) 2012-2015 Samsung Electronics Co., Ltd.
16  *
17  *
18  * This library is free software; you can redistribute it and/or
19  * modify it under the terms of the GNU Lesser General Public
20  * License as published by the Free Software Foundation; either
21  * version 2 of the License, or (at your option) any later version.
22  *
23  * This library is distributed in the hope that it will be useful,
24  * but WITHOUT ANY WARRANTY; without even the implied warranty of
25  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
26  * GNU Lesser General Public License for more details.
27  *
28  * You should have received a copy of the GNU Lesser General Public
29  * License along with this program; if not, write to the
30  * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
31  * Boston, MA  02111-1307  USA
32  *
33  * Modifications by Samsung Electronics Co., Ltd.
34  * 1. Add new interface APIs for keyboard ISE
35  *    a. expand_candidate (), contract_candidate () and set_candidate_style ()
36  *    b. set_keyboard_ise_by_uuid () and reset_keyboard_ise ()
37  *    c. get_surrounding_text () and delete_surrounding_text ()
38  *    d. show_preedit_string (), hide_preedit_string (), update_preedit_string () and update_preedit_caret ()
39  *    e. show_candidate_string (), hide_candidate_string () and update_candidate_string ()
40  *
41  * $Id: scim_helper.h,v 1.16 2005/05/24 12:22:51 suzhe Exp $
42  */
43
44 #ifndef __SCIM_HELPER_H
45 #define __SCIM_HELPER_H
46
47 #include "scim_utility.h"
48
49 #ifndef SCIM_HELPER_LAUNCHER_PROGRAM
50 #define SCIM_HELPER_LAUNCHER_PROGRAM  (SCIM_LIBEXECDIR "/scim-helper-launcher")
51 #endif
52
53 namespace scim {
54
55 /**
56  * @addtogroup Helper
57  * @ingroup InputServiceFramework
58  * The accessory classes to help develop and manage Client Helper objects.
59  * @{
60  */
61 class EXAPI HelperError: public Exception
62 {
63 public:
64     HelperError (const String& what_arg)
65         : Exception (String("scim::Helper: ") + what_arg) { }
66 };
67
68 /**
69  * @brief Helper option indicates that it's a stand alone Helper.
70  *
71  * Stand alone Helper has no corresponding IMEngine Factory,
72  * Such Helper can not be started by IMEngine Factory.
73  * So Panel must provide a menu, or something else, which contains
74  * all stand alone Helper items, so that user can start them by
75  * clicking the items.
76  */
77 const uint32 SCIM_HELPER_STAND_ALONE             = 1;
78
79 /**
80  * @brief Helper option indicates that it must be started
81  * automatically when Panel starts.
82  *
83  * If Helper objects want to start itself as soon as
84  * the Panel starts, set this option.
85  */
86 const uint32 SCIM_HELPER_AUTO_START              = (1<<1);
87
88 /**
89  * @brief Helper option indicates that it should be restarted
90  * when it exits abnormally.
91  *
92  * This option should not be used with #SCIM_HELPER_STAND_ALONE.
93  */
94 const uint32 SCIM_HELPER_AUTO_RESTART            = (1<<2);
95
96 /**
97  * @brief Helper option indicates that it needs the screen update
98  * information.
99  *
100  * Helper object with this option will receive the UPDATE_SCREEN event
101  * when the screen of focused ic is changed.
102  */
103 const uint32 SCIM_HELPER_NEED_SCREEN_INFO        = (1<<3);
104
105 /**
106  * @brief Helper option indicates that it needs the spot location
107  * information.
108  *
109  * Helper object with this option will receive the SPOT_LOCATION_INFO event
110  * when the spot location of focused ic is changed.
111  */
112 const uint32 SCIM_HELPER_NEED_SPOT_LOCATION_INFO = (1<<4);
113
114 /**
115  * @brief ISE option indicates whether helper ISE handles the keyboard keyevent
116  */
117 const uint32 ISM_HELPER_PROCESS_KEYBOARD_KEYEVENT = (1<<16);
118
119 /**
120  * @brief ISE option indicates whether it should be hidden in control panel.
121  */
122 const uint32 ISM_ISE_HIDE_IN_CONTROL_PANEL       = (1<<17);
123
124 /**
125  * @brief ISE option for 3rd party; IMEngine is not available.
126  */
127 const uint32 ISM_HELPER_WITHOUT_IMENGINE         = (1<<18);
128
129 /**
130  * @brief Structure to hold the information of a Helper object.
131  */
132 struct HelperInfo
133 {
134     String uuid;            /**< The UUID of this Helper object, replaced with Application ID since tizen 2.4 */
135     String name;            /**< The Name of this Helper object, UTF-8 encoding. Deprecated since tizen 2.4 */
136     String icon;            /**< The Icon file path of this Helper object. Deprecated since tizen 2.4 */
137     String description;     /**< The short description of this Helper object. Deprecated since tizen 2.4 */
138     uint32 option;          /**< The options of this Helper object. @sa #SCIM_HELPER_STAND_ALONE etc. Deprecated since tizen 2.4 */
139
140     HelperInfo (const String &puuid = String (),
141                 const String &pname = String (),
142                 const String &picon = String (),
143                 const String &pdesc = String (),
144                 uint32 opt = 0)
145         : uuid (puuid),
146           name (pname),
147           icon (picon),
148           description (pdesc),
149           option (opt) {
150     }
151 };
152
153 enum HelperState
154 {
155     HELPER_SHOWED,
156     HELPER_HIDED,
157     HELPER_INVALID_STATE
158 };
159
160 class HelperAgent;
161
162 typedef Slot3<void, const HelperAgent *, int, const String &>
163         HelperAgentSlotVoid;
164
165 typedef Slot4<void, const HelperAgent *, int, const String &, const String &>
166         HelperAgentSlotString;
167
168 typedef Slot4<void, const HelperAgent *, int, const String &, const std::vector<String> &>
169         HelperAgentSlotStringVector;
170
171 typedef Slot5<void, const HelperAgent *, int, const String &, const String &, const String &>
172         HelperAgentSlotString2;
173
174 typedef Slot4<void, const HelperAgent *, int, const String &, int>
175         HelperAgentSlotInt;
176
177 typedef Slot5<void, const HelperAgent *, int, const String &, int, int>
178         HelperAgentSlotIntInt;
179
180 typedef Slot4<void, const HelperAgent *, int, const String &, const Transaction &>
181         HelperAgentSlotTransaction;
182
183 typedef Slot4<void, const HelperAgent *, int, const String &, const rectinfo &>
184         HelperAgentSlotRect;
185
186 typedef Slot2<void, const HelperAgent *, struct rectinfo &>
187         HelperAgentSlotSize;
188
189 typedef Slot2<void, const HelperAgent *, uint32 &>
190         HelperAgentSlotUintVoid;
191
192 typedef Slot3<void, const HelperAgent *, int, uint32 &>
193         HelperAgentSlotIntUint;
194
195 typedef Slot3<void, const HelperAgent *, char *, size_t &>
196         HelperAgentSlotRawVoid;
197
198 typedef Slot3<void, const HelperAgent *, char **, size_t &>
199         HelperAgentSlotGetRawVoid;
200
201 typedef Slot4<void, const HelperAgent *, int, char *, size_t &>
202         HelperAgentSlotIntRawVoid;
203
204 typedef Slot3<void, const HelperAgent *, int, char **>
205         HelperAgentSlotIntGetStringVoid;
206
207 typedef Slot2<void, const HelperAgent *, const std::vector<uint32> &>
208         HelperAgentSlotUintVector;
209
210 typedef Slot2<void, const HelperAgent *, LookupTable &>
211         HelperAgentSlotLookupTable;
212 typedef Slot3<void, const HelperAgent *, KeyEvent &, uint32 &>
213         HelperAgentSlotKeyEventUint;
214
215 /**
216  * @brief The accessory class to write a Helper object.
217  *
218  * This class implements all Socket Transaction protocol between
219  * Helper object and Panel.
220  */
221 class EXAPI HelperAgent
222 {
223     class HelperAgentImpl;
224     HelperAgentImpl *m_impl;
225
226     HelperAgent (const HelperAgent &);
227     const HelperAgent & operator = (const HelperAgent &);
228
229 public:
230     HelperAgent  ();
231     ~HelperAgent ();
232
233     /**
234      * @brief Open socket connection to the Panel.
235      *
236      * Helper objects and Panel communicate with each other via the Socket
237      * created by Panel, just same as the Socket between FrontEnds and Panel.
238      *
239      * Helper object can select/poll on the connection id returned by this function
240      * to see if there are any data available to be read. If any data are available,
241      * Helper object should call HelperAgent::filter_event() to process the data.
242      *
243      * This method should be called after the necessary signal-slots are connected.
244      * If this Helper is started by an IMEngine Instance, then signal attach_input_context
245      * will be emitted during this call.
246      *
247      * Signal update_screen will be emitted during this call as well to set the startup
248      * screen of this Helper. The ic and ic_uuid parameters are invalid here.
249      *
250      * @param info The information of this Helper object.
251      * @param display The display which this Helper object should run on.
252      *
253      * @return The connection socket id. -1 means failed to create
254      *         the connection.
255      */
256     int  open_connection        (const HelperInfo   &info,
257                                  const String       &display);
258
259     /**
260      * @brief Close the socket connection to Panel.
261      */
262     void close_connection       ();
263
264     /**
265      * @brief Get the connection id previously returned by open_connection().
266      *
267      * @return the connection id
268      */
269     int  get_connection_number  () const;
270
271     /**
272      * @brief Check whether this HelperAgent has been connected to a Panel.
273      *
274      * Return true when it is connected to panel, otherwise return false.
275      */
276     bool is_connected           () const;
277
278     /**
279      * @brief Check if there are any events available to be processed.
280      *
281      * If it returns true then Helper object should call
282      * HelperAgent::filter_event() to process them.
283      *
284      * @return true if there are any events available.
285      */
286     bool has_pending_event      () const;
287
288     /**
289      * @brief Process the pending events.
290      *
291      * This function will emit the corresponding signals according
292      * to the events.
293      *
294      * @return false if the connection is broken, otherwise return true.
295      */
296     bool filter_event           ();
297
298     /**
299      * @brief Request SCIM to reload all configuration.
300      *
301      * This function should only by used by Setup Helper to request
302      * scim's reloading the configuration.
303      */
304     void reload_config          () const;
305
306     /**
307      * @brief Register some properties into Panel.
308      *
309      * This function send the request to Panel to register a list
310      * of Properties.
311      *
312      * @param properties The list of Properties to be registered into Panel.
313      *
314      * @sa scim::Property.
315      */
316     void register_properties    (const PropertyList &properties) const;
317
318     /**
319      * @brief Update a registered property.
320      *
321      * @param property The property to be updated.
322      */
323     void update_property        (const Property     &property) const;
324
325     /**
326      * @brief Send a set of events to an IMEngineInstance.
327      *
328      * All events should be put into a Transaction.
329      * And the events can only be received by one IMEngineInstance object.
330      *
331      * @param ic The handle of the Input Context to receive the events.
332      * @param ic_uuid The UUID of the Input Context.
333      * @param trans The Transaction object holds the events.
334      */
335     void send_imengine_event    (int                 ic,
336                                  const String       &ic_uuid,
337                                  const Transaction  &trans) const;
338
339     /**
340      * @brief Send a KeyEvent to an IMEngineInstance.
341      *
342      * @param ic The handle of the IMEngineInstance to receive the event.
343      *        -1 means the currently focused IMEngineInstance.
344      * @param ic_uuid The UUID of the IMEngineInstance. Empty means don't match.
345      * @param key The KeyEvent to be sent.
346      */
347     void send_key_event         (int                 ic,
348                                  const String       &ic_uuid,
349                                  const KeyEvent     &key) const;
350
351     /**
352      * @brief Forward a KeyEvent to client application directly.
353      *
354      * @param ic The handle of the client Input Context to receive the event.
355      *        -1 means the currently focused Input Context.
356      * @param ic_uuid The UUID of the IMEngine used by the Input Context.
357      *        Empty means don't match.
358      * @param key The KeyEvent to be forwarded.
359      */
360     void forward_key_event      (int                 ic,
361                                  const String       &ic_uuid,
362                                  const KeyEvent     &key) const;
363
364     /**
365      * @brief Commit a WideString to client application directly.
366      *
367      * @param ic The handle of the client Input Context to receive the WideString.
368      *        -1 means the currently focused Input Context.
369      * @param ic_uuid The UUID of the IMEngine used by the Input Context.
370      *        Empty means don't match.
371      * @param wstr The WideString to be committed.
372      */
373     void commit_string          (int                 ic,
374                                  const String       &ic_uuid,
375                                  const WideString   &wstr) const;
376
377     /**
378      * @brief Commit a UTF-8 String to client application directly.
379      *
380      * @param ic The handle of the client Input Context to receive the commit string.
381      *        -1 means the currently focused Input Context.
382      * @param ic_uuid The UUID of the IMEngine used by the Input Context.
383      *        Empty means don't match.
384      * @param buf The byte array of UTF-8 string to be committed.
385      * @param buflen The buf size in bytes.
386      */
387     void commit_string          (int                 ic,
388                                  const String       &ic_uuid,
389                                  const char         *buf,
390                                  int                 buflen) const;
391
392     /**
393      * @brief Request to show preedit string.
394      *
395      * @param ic The handle of the client Input Context to receive the request.
396      *        -1 means the currently focused Input Context.
397      * @param ic_uuid The UUID of the IMEngine used by the Input Context.
398      *        Empty means don't match.
399      */
400     void show_preedit_string    (int                 ic,
401                                  const String       &ic_uuid) const;
402
403     /**
404      * @brief Request to show aux string.
405      */
406     void show_aux_string        (void) const;
407
408     /**
409      * @brief Request to show candidate string.
410      */
411     void show_candidate_string  (void) const;
412
413     /**
414      * @brief Request to show associate string.
415      */
416     void show_associate_string  (void) const;
417
418     /**
419      * @brief Request to hide preedit string.
420      *
421      * @param ic The handle of the client Input Context to receive the request.
422      *        -1 means the currently focused Input Context.
423      * @param ic_uuid The UUID of the IMEngine used by the Input Context.
424      *        Empty means don't match.
425      */
426     void hide_preedit_string    (int                 ic,
427                                  const String       &ic_uuid) const;
428
429     /**
430      * @brief Request to hide aux string.
431      */
432     void hide_aux_string        (void) const;
433
434     /**
435      * @brief Request to hide candidate string.
436      */
437     void hide_candidate_string  (void) const;
438
439     /**
440      * @brief Request to hide associate string.
441      */
442     void hide_associate_string  (void) const;
443
444     /**
445      * @brief Update a new WideString for preedit.
446      *
447      * @param ic The handle of the client Input Context to receive the WideString.
448      *        -1 means the currently focused Input Context.
449      * @param ic_uuid The UUID of the IMEngine used by the Input Context.
450      *        Empty means don't match.
451      * @param wstr The WideString to be updated.
452      * @param attrs The attribute list for preedit string.
453      */
454     void update_preedit_string  (int                 ic,
455                                  const String       &ic_uuid,
456                                  const WideString   &wstr,
457                                  const AttributeList &attrs) const;
458
459     /**
460      * @brief Update a new UTF-8 string for preedit.
461      *
462      * @param ic The handle of the client Input Context to receive the UTF-8 String.
463      *        -1 means the currently focused Input Context.
464      * @param ic_uuid The UUID of the IMEngine used by the Input Context.
465      *        Empty means don't match.
466      * @param buf The byte array of UTF-8 string to be updated.
467      * @param buflen The buf size in bytes.
468      * @param attrs The attribute list for preedit string.
469      */
470     void update_preedit_string  (int                 ic,
471                                  const String       &ic_uuid,
472                                  const char         *buf,
473                                  int                 buflen,
474                                  const AttributeList &attrs) const;
475
476     /**
477      * @brief Update a new WideString and caret for preedit.
478      *
479      * @param ic The handle of the client Input Context to receive the WideString.
480      *        -1 means the currently focused Input Context.
481      * @param ic_uuid The UUID of the IMEngine used by the Input Context.
482      *        Empty means don't match.
483      * @param wstr The WideString to be updated.
484      * @param attrs The attribute list for preedit string.
485      * @param caret The caret position in preedit string.
486      */
487     void update_preedit_string  (int                 ic,
488                                  const String       &ic_uuid,
489                                  const WideString   &wstr,
490                                  const AttributeList &attrs,
491                                  int                 caret) const;
492
493     /**
494      * @brief Update a new UTF-8 string and caret for preedit.
495      *
496      * @param ic The handle of the client Input Context to receive the UTF-8 String.
497      *        -1 means the currently focused Input Context.
498      * @param ic_uuid The UUID of the IMEngine used by the Input Context.
499      *        Empty means don't match.
500      * @param buf The byte array of UTF-8 string to be updated.
501      * @param buflen The buf size in bytes.
502      * @param attrs The attribute list for preedit string.
503      * @param caret The caret position in preedit string.
504      */
505     void update_preedit_string  (int                 ic,
506                                  const String       &ic_uuid,
507                                  const char         *buf,
508                                  int                 buflen,
509                                  const AttributeList &attrs,
510                                  int                 caret) const;
511
512     /**
513      * @brief Update a new string for aux.
514      *
515      * @param str The string to be updated.
516      * @param attrs The attribute list for aux string.
517      */
518     void update_aux_string      (const String       &str,
519                                  const AttributeList &attrs) const;
520
521     /**
522      * @brief Request to update candidate.
523      *
524      * @param table The lookup table for candidate.
525      */
526     void update_candidate_string (const LookupTable &table) const;
527
528     /**
529      * @brief Request to update associate.
530      *
531      * @param table The lookup table for associate.
532      */
533     void update_associate_string (const LookupTable &table) const;
534
535     /**
536      * @brief When the input context of ISE is changed,
537      *         ISE can call this function to notify application
538      *
539      * @param type  type of event.
540      * @param value value of event.
541      */
542     void update_input_context     (uint32                       type,
543                                    uint32                       value) const;
544
545     /**
546      * @brief Request to get surrounding text asynchronously.
547      *
548      * @param uuid The helper ISE UUID.
549      * @param maxlen_before The max length of before.
550      * @param maxlen_after The max length of after.
551      */
552     void get_surrounding_text     (const String                &uuid,
553                                    int                          maxlen_before,
554                                    int                          maxlen_after) const;
555
556     /**
557      * @brief Request to get surrounding text synchronously.
558      *
559      * @param maxlen_before The max length of before.
560      * @param maxlen_after The max length of after.
561      * @param text The surounding text.
562      * @param cursor The cursor position.
563      */
564     void get_surrounding_text (int maxlen_before, int maxlen_after, String &text, int &cursor);
565
566     /**
567      * @brief Request to delete surrounding text.
568      *
569      * @param offset The offset for cursor position.
570      * @param len The length for delete text.
571      */
572     void delete_surrounding_text  (int                          offset,
573                                    int                          len) const;
574
575     /**
576      * @brief Request to get selection.
577      *
578      * @param uuid The helper ISE UUID.
579      */
580     void get_selection       (const String                &uuid) const;
581
582     /**
583      * @brief Request to get selection text synchronously.
584      *
585      * @param text The selection text.
586      */
587     void get_selection_text       (String                      &text);
588
589     /**
590      * @brief Request to selected text.
591      *
592      * @param start The start position in text.
593      * @param end The end position in text.
594      */
595     void set_selection       (int                          start,
596                               int                          end) const;
597
598     /**
599      * @brief Set candidate position in screen.
600      *
601      * @param left The x position in screen.
602      * @param top The y position in screen.
603      */
604     void set_candidate_position   (int                          left,
605                                    int                          top) const;
606
607     /**
608      * @brief Request to hide candidate window.
609      */
610     void candidate_hide           (void) const;
611
612     /**
613      * @brief Request to get candidate window size and position.
614      *
615      * @param uuid The helper ISE UUID.
616      */
617     void get_candidate_window_geometry (const String           &uuid) const;
618
619     /**
620      * @brief Set current keyboard ISE.
621      *
622      * @param uuid The keyboard ISE UUID.
623      */
624     void set_keyboard_ise_by_uuid (const String                &uuid) const;
625
626     /**
627      * @brief Request to get current keyboard ISE information.
628      *
629      * @param uuid The helper ISE UUID.
630      */
631     void get_keyboard_ise         (const String                &uuid) const;
632
633     /**
634      * @brief Request to get uuid list of all keyboard ISEs.
635      *
636      * @param uuid The helper ISE UUID.
637      */
638     void get_keyboard_ise_list    (const String                &uuid) const;
639
640     /**
641      * @brief Update ISE window geometry.
642      *
643      * @param x      The x position in screen.
644      * @param y      The y position in screen.
645      * @param width  The ISE window width.
646      * @param height The ISE window height.
647      */
648     void update_geometry          (int                          x,
649                                    int                          y,
650                                    int                          width,
651                                    int                          height) const;
652
653     /**
654      * @brief Request to expand candidate window.
655      */
656     void expand_candidate         (void) const;
657
658     /**
659      * @brief Request to contract candidate window.
660      */
661     void contract_candidate       (void) const;
662
663     /**
664      * @brief Send selected candidate string index number.
665      */
666     void select_candidate         (int index) const;
667
668     /**
669      * @brief Update ise exit status
670      */
671     void update_ise_exit          (void) const;
672
673     /**
674      * @brief Update the preedit caret position in the preedit string.
675      *
676      * @param caret - the new position of the preedit caret.
677      */
678     void update_preedit_caret     (int                          caret) const;
679
680     /**
681      * @brief Set candidate style.
682      *
683      * @param portrait_line - the displayed line number for portrait.
684      * @param mode          - candidate window mode.
685      */
686     void set_candidate_style      (ISF_CANDIDATE_PORTRAIT_LINE_T portrait_line = ONE_LINE_CANDIDATE,
687                                    ISF_CANDIDATE_MODE_T          mode = SOFT_CANDIDATE_WINDOW) const;
688
689     /**
690      * @brief Request to reset keyboard ISE.
691      */
692     void reset_keyboard_ise       (void) const;
693
694     /**
695      * @brief Send a private command to an application
696      *
697      * @param command The private command sent from IME.
698      */
699     void send_private_command     (const String                &command) const;
700
701 public:
702     /**
703      * @brief Connect a slot to Helper exit signal.
704      *
705      * This signal is used to let the Helper exit.
706      *
707      * The prototype of the slot is:
708      *
709      * void exit (const HelperAgent *agent, int ic, const String &ic_uuid);
710      *
711      * Parameters:
712      * - agent    The pointer to the HelperAgent object which emits this signal.
713      * - ic       An opaque handle of the currently focused input context.
714      * - ic_uuid  The UUID of the IMEngineInstance associated with the focused input context.
715      */
716     Connection signal_connect_exit                   (HelperAgentSlotVoid        *slot);
717
718     /**
719      * @brief Connect a slot to Helper attach input context signal.
720      *
721      * This signal is used to attach an input context to this helper.
722      *
723      * When an input context requst to start this helper, then this
724      * signal will be emitted as soon as the helper is started.
725      *
726      * When an input context want to start an already started helper,
727      * this signal will also be emitted.
728      *
729      * Helper can send some events back to the IMEngineInstance in this
730      * signal-slot, to inform that it has been started sccessfully.
731      *
732      * The prototype of the slot is:
733      *
734      * void attach_input_context (const HelperAgent *agent, int ic, const String &ic_uuid);
735      */
736     Connection signal_connect_attach_input_context   (HelperAgentSlotVoid        *slot);
737
738     /**
739      * @brief Connect a slot to Helper detach input context signal.
740      *
741      * This signal is used to detach an input context from this helper.
742      *
743      * When an input context requst to stop this helper, then this
744      * signal will be emitted.
745      *
746      * Helper shouldn't send any event back to the IMEngineInstance, because
747      * the IMEngineInstance attached to the ic should have been destroyed.
748      *
749      * The prototype of the slot is:
750      *
751      * void detach_input_context (const HelperAgent *agent, int ic, const String &ic_uuid);
752      */
753     Connection signal_connect_detach_input_context   (HelperAgentSlotVoid        *slot);
754
755     /**
756      * @brief Connect a slot to Helper reload config signal.
757      *
758      * This signal is used to let the Helper reload configuration.
759      *
760      * The prototype of the slot is:
761      *
762      * void reload_config (const HelperAgent *agent, int ic, const String &ic_uuid);
763      */
764     Connection signal_connect_reload_config          (HelperAgentSlotVoid        *slot);
765
766     /**
767      * @brief Connect a slot to Helper update screen signal.
768      *
769      * This signal is used to let the Helper move its GUI to another screen.
770      * It can only be emitted when SCIM_HELPER_NEED_SCREEN_INFO is set in HelperInfo.option.
771      *
772      * The prototype of the slot is:
773      *
774      * void update_screen (const HelperAgent *agent, int ic, const String &ic_uuid, int screen_number);
775      */
776     Connection signal_connect_update_screen          (HelperAgentSlotInt         *slot);
777
778     /**
779      * @brief Connect a slot to Helper update spot location signal.
780      *
781      * This signal is used to let the Helper move its GUI according to the current spot location.
782      * It can only be emitted when SCIM_HELPER_NEED_SPOT_LOCATION_INFO is set in HelperInfo.option.
783      *
784      * The prototype of the slot is:
785      * void update_spot_location (const HelperAgent *agent, int ic, const String &ic_uuid, int x, int y);
786      */
787     Connection signal_connect_update_spot_location   (HelperAgentSlotIntInt      *slot);
788
789     /**
790      * @brief Connect a slot to Helper update cursor position signal.
791      *
792      * This signal is used to let the Helper get the cursor position information.
793      *
794      * The prototype of the slot is:
795      * void update_cursor_position (const HelperAgent *agent, int ic, const String &ic_uuid, int cursor_pos);
796      */
797     Connection signal_connect_update_cursor_position (HelperAgentSlotInt         *slot);
798
799     /**
800      * @brief Connect a slot to Helper update surrounding text signal.
801      *
802      * This signal is used to let the Helper get the surrounding text.
803      *
804      * The prototype of the slot is:
805      * void update_surrounding_text (const HelperAgent *agent, int ic, const String &text, int cursor);
806      */
807     Connection signal_connect_update_surrounding_text (HelperAgentSlotInt        *slot);
808
809     /**
810      * @brief Connect a slot to Helper update selection signal.
811      *
812      * This signal is used to let the Helper get the selection.
813      *
814      * The prototype of the slot is:
815      * void update_selection (const HelperAgent *agent, int ic, const String &text);
816      */
817     Connection signal_connect_update_selection (HelperAgentSlotVoid        *slot);
818
819     /**
820      * @brief Connect a slot to Helper trigger property signal.
821      *
822      * This signal is used to trigger a property registered by this Helper.
823      * A property will be triggered when user clicks on it.
824      *
825      * The prototype of the slot is:
826      * void trigger_property (const HelperAgent *agent, int ic, const String &ic_uuid, const String &property);
827      */
828     Connection signal_connect_trigger_property       (HelperAgentSlotString      *slot);
829
830     /**
831      * @brief Connect a slot to Helper process imengine event signal.
832      *
833      * This signal is used to deliver the events sent from IMEngine to Helper.
834      *
835      * The prototype of the slot is:
836      * void process_imengine_event (const HelperAgent *agent, int ic, const String &ic_uuid, const Transaction &transaction);
837      */
838     Connection signal_connect_process_imengine_event (HelperAgentSlotTransaction *slot);
839
840     /**
841      * @brief Connect a slot to Helper focus out signal.
842      *
843      * This signal is used to do something when input context is focus out.
844      *
845      * The prototype of the slot is:
846      * void focus_out (const HelperAgent *agent, int ic, const String &ic_uuid);
847      */
848     Connection signal_connect_focus_out                         (HelperAgentSlotVoid                *slot);
849
850     /**
851      * @brief Connect a slot to Helper focus in signal.
852      *
853      * This signal is used to do something when input context is focus in.
854      *
855      * The prototype of the slot is:
856      * void focus_in (const HelperAgent *agent, int ic, const String &ic_uuid);
857      */
858     Connection signal_connect_focus_in                          (HelperAgentSlotVoid                *slot);
859
860     /**
861      * @brief Connect a slot to Helper show signal.
862      *
863      * This signal is used to show Helper ISE window.
864      *
865      * The prototype of the slot is:
866      * void ise_show (const HelperAgent *agent, int ic, char *buf, size_t &len);
867      */
868     Connection signal_connect_ise_show                          (HelperAgentSlotIntRawVoid          *slot);
869
870     /**
871      * @brief Connect a slot to Helper hide signal.
872      *
873      * This signal is used to hide Helper ISE window.
874      *
875      * The prototype of the slot is:
876      * void ise_hide (const HelperAgent *agent, int ic, const String &ic_uuid);
877      */
878     Connection signal_connect_ise_hide                          (HelperAgentSlotVoid                *slot);
879
880     /**
881      * @brief Connect a slot to Helper get ISE window geometry signal.
882      *
883      * This signal is used to get Helper ISE window size and position.
884      *
885      * The prototype of the slot is:
886      * void get_geometry (const HelperAgent *agent, struct rectinfo &info);
887      */
888     Connection signal_connect_get_geometry                      (HelperAgentSlotSize                *slot);
889
890     /**
891      * @brief Connect a slot to Helper set mode signal.
892      *
893      * This signal is used to set Helper ISE mode.
894      *
895      * The prototype of the slot is:
896      * void set_mode (const HelperAgent *agent, uint32 &mode);
897      */
898     Connection signal_connect_set_mode                          (HelperAgentSlotUintVoid            *slot);
899
900     /**
901      * @brief Connect a slot to Helper set language signal.
902      *
903      * This signal is used to set Helper ISE language.
904      *
905      * The prototype of the slot is:
906      * void set_language (const HelperAgent *agent, uint32 &language);
907      */
908     Connection signal_connect_set_language                      (HelperAgentSlotUintVoid            *slot);
909
910     /**
911      * @brief Connect a slot to Helper set im data signal.
912      *
913      * This signal is used to send im data to Helper ISE.
914      *
915      * The prototype of the slot is:
916      * void set_imdata (const HelperAgent *agent, char *buf, size_t &len);
917      */
918     Connection signal_connect_set_imdata                        (HelperAgentSlotRawVoid             *slot);
919
920     /**
921      * @brief Connect a slot to Helper get im data signal.
922      *
923      * This signal is used to get im data from Helper ISE.
924      *
925      * The prototype of the slot is:
926      * void get_imdata (const HelperAgent *, char **buf, size_t &len);
927      */
928     Connection signal_connect_get_imdata                        (HelperAgentSlotGetRawVoid          *slot);
929
930     /**
931      * @brief Connect a slot to Helper get language locale.
932      *
933      * This signal is used to get language locale from Helper ISE.
934      *
935      * The prototype of the slot is:
936      * void get_language_locale (const HelperAgent *, int ic, char **locale);
937      */
938     Connection signal_connect_get_language_locale               (HelperAgentSlotIntGetStringVoid    *slot);
939
940     /**
941      * @brief Connect a slot to Helper set return key type signal.
942      *
943      * This signal is used to set return key type to Helper ISE.
944      *
945      * The prototype of the slot is:
946      * void set_return_key_type (const HelperAgent *agent, uint32 &type);
947      */
948     Connection signal_connect_set_return_key_type               (HelperAgentSlotUintVoid            *slot);
949
950     /**
951      * @brief Connect a slot to Helper get return key type signal.
952      *
953      * This signal is used to get return key type from Helper ISE.
954      *
955      * The prototype of the slot is:
956      * void get_return_key_type (const HelperAgent *agent, uint32 &type);
957      */
958     Connection signal_connect_get_return_key_type               (HelperAgentSlotUintVoid            *slot);
959
960     /**
961      * @brief Connect a slot to Helper set return key disable signal.
962      *
963      * This signal is used to set return key disable to Helper ISE.
964      *
965      * The prototype of the slot is:
966      * void set_return_key_disable (const HelperAgent *agent, uint32 &disabled);
967      */
968     Connection signal_connect_set_return_key_disable            (HelperAgentSlotUintVoid            *slot);
969
970     /**
971      * @brief Connect a slot to Helper get return key disable signal.
972      *
973      * This signal is used to get return key disable from Helper ISE.
974      *
975      * The prototype of the slot is:
976      * void get_return_key_disable (const HelperAgent *agent, uint32 &disabled);
977      */
978     Connection signal_connect_get_return_key_disable            (HelperAgentSlotUintVoid            *slot);
979
980     /**
981      * @brief Connect a slot to Helper get layout signal.
982      *
983      * This signal is used to get Helper ISE layout.
984      *
985      * The prototype of the slot is:
986      * void get_layout (const HelperAgent *agent, uint32 &layout);
987      */
988     Connection signal_connect_get_layout                        (HelperAgentSlotUintVoid            *slot);
989
990     /**
991      * @brief Connect a slot to Helper set layout signal.
992      *
993      * This signal is used to set Helper ISE layout.
994      *
995      * The prototype of the slot is:
996      * void set_layout (const HelperAgent *agent, uint32 &layout);
997      */
998     Connection signal_connect_set_layout                        (HelperAgentSlotUintVoid            *slot);
999
1000     /**
1001      * @brief Connect a slot to Helper set shift mode signal.
1002      *
1003      * This signal is used to set Helper shift mode.
1004      *
1005      * The prototype of the slot is:
1006      * void set_caps_mode (const HelperAgent *agent, uint32 &mode);
1007      */
1008     Connection signal_connect_set_caps_mode                     (HelperAgentSlotUintVoid            *slot);
1009
1010     /**
1011      * @brief Connect a slot to Helper reset input context signal.
1012      *
1013      * This signal is used to reset Helper ISE input context.
1014      *
1015      * The prototype of the slot is:
1016      * void reset_input_context (const HelperAgent *agent, int ic, const String &uuid);
1017      */
1018     Connection signal_connect_reset_input_context               (HelperAgentSlotVoid                *slot);
1019
1020     /**
1021      * @brief Connect a slot to Helper update candidate window geometry signal.
1022      *
1023      * This signal is used to get candidate window size and position.
1024      *
1025      * The prototype of the slot is:
1026      * void update_candidate_geometry (const HelperAgent *agent, int ic, const String &uuid, const rectinfo &info);
1027      */
1028     Connection signal_connect_update_candidate_geometry         (HelperAgentSlotRect                *slot);
1029
1030     /**
1031      * @brief Connect a slot to Helper update keyboard ISE signal.
1032      *
1033      * This signal is used to get current keyboard ISE name and uuid.
1034      *
1035      * The prototype of the slot is:
1036      * void update_keyboard_ise (const HelperAgent *agent, int ic, const String &uuid,
1037      *                           const String &ise_name, const String &ise_uuid);
1038      */
1039     Connection signal_connect_update_keyboard_ise               (HelperAgentSlotString2             *slot);
1040
1041     /**
1042      * @brief Connect a slot to Helper update keyboard ISE list signal.
1043      *
1044      * This signal is used to get uuid list of all keyboard ISEs.
1045      *
1046      * The prototype of the slot is:
1047      * void update_keyboard_ise_list (const HelperAgent *agent, int ic, const String &uuid,
1048      *                                const std::vector<String> &ise_list);
1049      */
1050     Connection signal_connect_update_keyboard_ise_list          (HelperAgentSlotStringVector        *slot);
1051
1052     /**
1053      * @brief Connect a slot to Helper candidate more window show signal.
1054      *
1055      * This signal is used to do someting when candidate more window is showed.
1056      *
1057      * The prototype of the slot is:
1058      * void candidate_more_window_show (const HelperAgent *agent, int ic, const String &uuid);
1059      */
1060     Connection signal_connect_candidate_more_window_show        (HelperAgentSlotVoid                *slot);
1061
1062     /**
1063      * @brief Connect a slot to Helper candidate more window hide signal.
1064      *
1065      * This signal is used to do someting when candidate more window is hidden.
1066      *
1067      * The prototype of the slot is:
1068      * void candidate_more_window_hide (const HelperAgent *agent, int ic, const String &uuid);
1069      */
1070     Connection signal_connect_candidate_more_window_hide        (HelperAgentSlotVoid                *slot);
1071
1072     /**
1073      * @brief Connect a slot to Helper candidate show signal.
1074      *
1075      * This signal is used to do candidate show.
1076      *
1077      * The prototype of the slot is:
1078      * void candidate_show (const HelperAgent *agent, int ic, const String &uuid);
1079      */
1080     Connection signal_connect_candidate_show                    (HelperAgentSlotVoid                *slot);
1081
1082     /**
1083      * @brief Connect a slot to Helper candidate hide signal.
1084      *
1085      * This signal is used to do candidate hide.
1086      *
1087      * The prototype of the slot is:
1088      * void candidate_hide (const HelperAgent *agent,int ic, const String &uuid);
1089      */
1090     Connection signal_connect_candidate_hide                    (HelperAgentSlotVoid                *slot);
1091
1092     /**
1093      * @brief Connect a slot to Helper update lookup table signal.
1094      *
1095      * This signal is used to do someting when update lookup table.
1096      *
1097      * The prototype of the slot is:
1098      * void update_lookup_table (const HelperAgent *agent, int ic, const String &uuid, LookupTable &Table);
1099      */
1100     Connection signal_connect_update_lookup_table               (HelperAgentSlotLookupTable          *slot);
1101
1102     /**
1103      * @brief Connect a slot to Helper select aux signal.
1104      *
1105      * This signal is used to do something when aux is selected.
1106      *
1107      * The prototype of the slot is:
1108      * void select_aux (const HelperAgent *agent, int ic, const String &uuid, int index);
1109      */
1110     Connection signal_connect_select_aux                        (HelperAgentSlotInt                 *slot);
1111
1112     /**
1113      * @brief Connect a slot to Helper select candidate signal.
1114      *
1115      * This signal is used to do something when candidate is selected.
1116      *
1117      * The prototype of the slot is:
1118      * void select_candidate (const HelperAgent *agent, int ic, const String &uuid, int index);
1119      */
1120     Connection signal_connect_select_candidate                  (HelperAgentSlotInt                 *slot);
1121
1122     /**
1123      * @brief Connect a slot to Helper candidate table page up signal.
1124      *
1125      * This signal is used to do something when candidate table is paged up.
1126      *
1127      * The prototype of the slot is:
1128      * void candidate_table_page_up (const HelperAgent *agent, int ic, const String &uuid);
1129      */
1130     Connection signal_connect_candidate_table_page_up           (HelperAgentSlotVoid                *slot);
1131
1132     /**
1133      * @brief Connect a slot to Helper candidate table page down signal.
1134      *
1135      * This signal is used to do something when candidate table is paged down.
1136      *
1137      * The prototype of the slot is:
1138      * void candidate_table_page_down (const HelperAgent *agent, int ic, const String &uuid);
1139      */
1140     Connection signal_connect_candidate_table_page_down         (HelperAgentSlotVoid                *slot);
1141
1142     /**
1143      * @brief Connect a slot to Helper update candidate table page size signal.
1144      *
1145      * This signal is used to do something when candidate table page size is changed.
1146      *
1147      * The prototype of the slot is:
1148      * void update_candidate_table_page_size (const HelperAgent *, int ic, const String &uuid, int page_size);
1149      */
1150     Connection signal_connect_update_candidate_table_page_size  (HelperAgentSlotInt                 *slot);
1151
1152     /**
1153      * @brief Connect a slot to Helper select associate signal.
1154      *
1155      * This signal is used to do something when associate is selected.
1156      *
1157      * The prototype of the slot is:
1158      * void select_associate (const HelperAgent *agent, int ic, const String &uuid, int index);
1159      */
1160     Connection signal_connect_select_associate                  (HelperAgentSlotInt                 *slot);
1161
1162     /**
1163      * @brief Connect a slot to Helper associate table page up signal.
1164      *
1165      * This signal is used to do something when associate table is paged up.
1166      *
1167      * The prototype of the slot is:
1168      * void associate_table_page_up (const HelperAgent *agent, int ic, const String &uuid);
1169      */
1170     Connection signal_connect_associate_table_page_up           (HelperAgentSlotVoid                *slot);
1171
1172     /**
1173      * @brief Connect a slot to Helper associate table page down signal.
1174      *
1175      * This signal is used to do something when associate table is paged down.
1176      *
1177      * The prototype of the slot is:
1178      * void associate_table_page_down (const HelperAgent *agent, int ic, const String &uuid);
1179      */
1180     Connection signal_connect_associate_table_page_down         (HelperAgentSlotVoid                *slot);
1181
1182     /**
1183      * @brief Connect a slot to Helper update associate table page size signal.
1184      *
1185      * This signal is used to do something when associate table page size is changed.
1186      *
1187      * The prototype of the slot is:
1188      * void update_associate_table_page_size (const HelperAgent *, int ic, const String &uuid, int page_size);
1189      */
1190     Connection signal_connect_update_associate_table_page_size  (HelperAgentSlotInt                 *slot);
1191
1192     /**
1193      * @brief Connect a slot to Helper turn on log signal.
1194      *
1195      * This signal is used to turn on Helper ISE debug information.
1196      *
1197      * The prototype of the slot is:
1198      * void turn_on_log (const HelperAgent *agent, uint32 &on);
1199      */
1200     Connection signal_connect_turn_on_log                       (HelperAgentSlotUintVoid            *slot);
1201
1202     /**
1203      * @brief Connect a slot to Helper update displayed candidate number signal.
1204      *
1205      * This signal is used to inform helper ISE displayed candidate number.
1206      *
1207      * The prototype of the slot is:
1208      * void update_displayed_candidate_number (const HelperAgent *, int ic, const String &uuid, int number);
1209      */
1210     Connection signal_connect_update_displayed_candidate_number (HelperAgentSlotInt                 *slot);
1211
1212     /**
1213      * @brief Connect a slot to Helper longpress candidate signal.
1214      *
1215      * This signal is used to do something when candidate is longpress.
1216      *
1217      * The prototype of the slot is:
1218      * void longpress_candidate (const HelperAgent *agent, int ic, const String &uuid, int index);
1219      */
1220     Connection signal_connect_longpress_candidate               (HelperAgentSlotInt                 *slot);
1221
1222     /**
1223      * @brief Connect a slot to Helper update candidate item layout signal.
1224      *
1225      * The prototype of the slot is:
1226      * void update_candidate_item_layout (const HelperAgent *, const std::vector<uint32> &row_items);
1227      */
1228     Connection signal_connect_update_candidate_item_layout      (HelperAgentSlotUintVector          *slot);
1229
1230      /**
1231      * @brief Connect a slot to Helper process key event signal.
1232      *
1233      * The prototype of the slot is:
1234      * void process_key_event (const HelperAgent *, KeyEvent &key, uint32 &ret);
1235      */
1236     Connection signal_connect_process_key_event (HelperAgentSlotKeyEventUint *slot);
1237
1238     /**
1239      * @brief Connect a slot to Helper set input mode signal.
1240      *
1241      * This signal is used to set Helper ISE input mode.
1242      *
1243      * The prototype of the slot is:
1244      * void set_input_mode (const HelperAgent *agent, uint32 &input_mode);
1245      */
1246     Connection signal_connect_set_input_mode                        (HelperAgentSlotUintVoid            *slot);
1247
1248     /**
1249      * @brief Connect a slot to Helper set input hint signal.
1250      *
1251      * This signal is used to set Helper ISE input hint.
1252      *
1253      * The prototype of the slot is:
1254      * void set_input_hint (const HelperAgent *agent, uint32 &input_hint);
1255      */
1256     Connection signal_connect_set_input_hint                        (HelperAgentSlotUintVoid            *slot);
1257
1258     /**
1259      * @brief Connect a slot to Helper update bidi direction signal.
1260      *
1261      * This signal is used to update Helper ISE bidi direction.
1262      *
1263      * The prototype of the slot is:
1264      * void update_bidi_direction (const HelperAgent *agent, uint32 &bidi_direction);
1265      */
1266     Connection signal_connect_update_bidi_direction                 (HelperAgentSlotUintVoid            *slot);
1267
1268     /**
1269      * @brief Connect a slot to Helper show option window.
1270      *
1271      * This signal is used to do request the ISE to show option window.
1272      *
1273      * The prototype of the slot is:
1274      * void show_option_window (const HelperAgent *agent, int ic, const String &uuid);
1275      */
1276     Connection signal_connect_show_option_window                    (HelperAgentSlotVoid                *slot);
1277
1278     /**
1279      * @brief Connect a slot to Helper check if the option is available.
1280      *
1281      * This signal is used to request ISE to reply if the option (setting) is available.
1282      *
1283      * The prototype of the slot is:
1284      * void check_option_window (const HelperAgent *agent, uint32 &avail);
1285      */
1286     Connection signal_connect_check_option_window                   (HelperAgentSlotUintVoid            *slot);
1287 };
1288
1289 /**  @} */
1290
1291 } /* namespace scim */
1292
1293 struct ArgInfo
1294 {
1295     char **argv;
1296     int    argc;
1297 };
1298
1299 #endif /* __SCIM_HELPER_H */
1300
1301 /*
1302 vi:ts=4:nowrap:ai:expandtab
1303 */
1304