Merge "Add isf_control_hide_ime () API" into tizen
[platform/core/uifw/isf.git] / ism / src / isf_panel_agent_base.h
1 /**
2  * @file scim_panel_agent_base.h
3  * @brief Defines scim::PanelAgentBase and their related types.
4  *
5  * scim::PanelAgentBase is a class used to write Panel daemons.
6  */
7
8 /* ISF is based on SCIM 1.4.7 and extended for supporting more mobile fitable. */
9
10 /*
11  * Smart Common Input Method
12  *
13  * Copyright (c) 2004-2005 James Su <suzhe@tsinghua.org.cn>
14  * Copyright (c) 2012-2016 Samsung Electronics Co., Ltd.
15  *
16  *
17  * This library is free software; you can redistribute it and/or
18  * modify it under the terms of the GNU Lesser General Public
19  * License as published by the Free Software Foundation; either
20  * version 2 of the License, or (at your option) any later version.
21  *
22  * This library is distributed in the hope that it will be useful,
23  * but WITHOUT ANY WARRANTY; without even the implied warranty of
24  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
25  * GNU Lesser General Public License for more details.
26  *
27  * You should have received a copy of the GNU Lesser General Public
28  * License along with this program; if not, write to the
29  * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
30  * Boston, MA  02111-1307  USA
31  *
32  */
33
34 #ifndef __ISF_PANEL_AGENT_BASE_H
35 #define __ISF_PANEL_AGENT_BASE_H
36
37 #include <scim_panel_common.h>
38
39 #ifndef _OUT_
40 #define _OUT_
41 #endif
42
43 namespace scim
44 {
45
46 /**
47  * @addtogroup Panel
48  * @ingroup InputServiceFramework
49  * The accessory classes to help develop Panel daemons and FrontEnds
50  * which need to communicate with Panel daemons.
51  * @{
52  */
53
54 typedef struct _ISE_INFO {
55     String uuid;
56     String name;
57     String lang;
58     String icon;
59     uint32 option;
60     TOOLBAR_MODE_T type;
61 } ISE_INFO;
62
63 typedef struct _HELPER_ISE_INFO {
64     std::vector<String> appid;
65     std::vector<String> label;
66     std::vector<uint32> is_enabled;
67     std::vector<uint32> is_preinstalled;
68     std::vector<uint32> has_option;
69 } HELPER_ISE_INFO;
70
71
72 typedef struct DefaultIse {
73     TOOLBAR_MODE_T type;
74     String         uuid;
75     String         name;
76     DefaultIse () : type (TOOLBAR_KEYBOARD_MODE), uuid (""), name ("") { }
77 } DEFAULT_ISE_T;
78
79
80 class PanelAgentBase;
81 class InfoManager;
82 /**
83  * @typedef typedef Pointer <PanelAgentBase> PanelAgentPointer;
84  *
85  * A smart pointer for scim::PanelAgentBase and its derived classes.
86  */
87 typedef Pointer <PanelAgentBase>  PanelAgentPointer;
88
89 /**
90  * @brief The class to implement all socket protocol in Panel.
91  *
92  * This class acts like a stand alone SocketServer.
93  * It has its own dedicated main loop, and will be blocked when run () is called.
94  * So run () must be called within a separated thread, in order to not block
95  * the main loop of the Panel program itself.
96  *
97  * Before calling run (), the panel must hook the callback functions to the
98  * corresponding signals.
99  *
100  * Note that, there are two special signals: lock(void) and unlock(void). These
101  * two signals are used to provide a thread lock to PanelAgent, so that PanelAgent
102  * can run correctly within a multi-threading Panel program.
103  */
104 class EXAPI PanelAgentBase : public ReferencedObject
105 {
106     class PanelAgentBaseImpl;
107     PanelAgentBaseImpl* m_impl;
108
109     PanelAgentBase (const PanelAgentBase&);
110     const PanelAgentBase& operator = (const PanelAgentBase&);
111     String m_name;
112 public:
113     PanelAgentBase (const String& name);
114     virtual ~PanelAgentBase ();
115
116     /**
117     * @brief Initialize this PanelAgent.
118     *
119     * @param config The name of the config module to be used by Helpers.
120     * @param display The name of display, on which the Panel should run.
121     * @param resident If this is true then this PanelAgent will keep running
122     *                 even if there is no more client connected.
123     *
124     * @return true if the PanelAgent is initialized correctly and ready to run.
125     */
126     virtual bool initialize (InfoManager* info_manager, const String& display, bool resident = false);
127
128     /**
129      * @brief Check if this PanelAgent is initialized correctly and ready to run.
130      *
131      * @return true if this PanelAgent is ready to run.
132      */
133     virtual bool valid (void) const;
134
135     /**
136      * @brief Stop this PanelAgent.
137      */
138     virtual void stop (void);
139
140 public:
141
142     /**
143      * @brief Notice helper ISE to focus out.
144      *
145      * @param uuid The helper ISE uuid.
146      */
147     virtual void focus_out_helper (int client, uint32 context, const String& uuid);
148
149     /**
150      * @brief Notice helper ISE to focus in.
151      *
152      * @param uuid The helper ISE uuid.
153      */
154     virtual void focus_in_helper (int client, uint32 context, const String& uuid);
155
156     /**
157      * @brief Notice helper ISE to show window.
158      *
159      * @param uuid The helper ISE uuid.
160      */
161     virtual void show_helper (int client, uint32 context, const String& uuid, char* data, size_t& len);
162
163     /**
164      * @brief Notice helper ISE to hide window.
165      *
166      * @param uuid The helper ISE uuid.
167      */
168     virtual void hide_helper (int client, uint32 context, const String& uuid);
169
170     /**
171      * @brief Reset keyboard ISE.
172      *
173      * @return true if this operation is successful, otherwise return false.
174      */
175     virtual void reset_keyboard_ise (int client, uint32 context);
176
177     /**
178      * @brief Change the factory used by the focused IMEngineInstance object.
179      *
180      * @param uuid The uuid of the new factory.
181      * @return true if the command was sent correctly.
182      */
183     virtual void change_factory (int client, uint32 context, const String&  uuid);
184
185     /**
186      * @brief Notice Helper ISE that candidate more window is showed.
187      * @return true if the command was sent correctly.
188      */
189     virtual void candidate_more_window_show (int client, uint32 context);
190
191     /**
192      * @brief Notice Helper ISE that candidate more window is hidden.
193      * @return true if the command was sent correctly.
194      */
195     virtual void candidate_more_window_hide (int client, uint32 context);
196
197     /**
198      * @brief Notice Helper ISE that show candidate.
199      * @return true if the command was sent correctly.
200      */
201     virtual void helper_candidate_show (int client, uint32 context, const String&  uuid);
202
203     /**
204      * @brief Notice Helper ISE that hide candidate.
205      * @return true if the command was sent correctly.
206      */
207     virtual void helper_candidate_hide (int client, uint32 context, const String&  uuid);
208
209     /**
210      * @brief Update helper lookup table.
211      * @return true if the command was sent correctly.
212      */
213     virtual void update_helper_lookup_table (int client, uint32 context, const String&  uuid, const LookupTable& table);
214
215     /**
216      * @brief Let the focused IMEngineInstance object
217      *        select a aux in current aux string.
218      *
219      * @param item The index of the selected aux.
220      * @return true if the command was sent correctly.
221      */
222     virtual void select_aux (int client, uint32 context, uint32         item);
223
224     /**
225      * @brief Let the focused IMEngineInstance object
226      *        select a candidate in current lookup table.
227      *
228      * @param item The index of the selected candidate.
229      * @return true if the command was sent correctly.
230      */
231     virtual void select_candidate (int client, uint32 context, uint32         item);
232
233     /**
234      * @brief Let the focused IMEngineInstance object
235      *        flip the LookupTable to previous page.
236      * @return true if the command was sent correctly.
237      */
238     virtual void lookup_table_page_up (int client, uint32 context);
239
240     /**
241      * @brief Let the focused IMEngineInstance object
242      *        flip the LookupTable to next page.
243      * @return true if the command was sent correctly.
244      */
245     virtual void lookup_table_page_down (int client, uint32 context);
246
247     /**
248      * @brief Let the focused IMEngineInstance object
249      *        update the page size of the LookupTable.
250      *
251      * @param size The new page size.
252      * @return true if the command was sent correctly.
253      */
254     virtual void update_lookup_table_page_size (int client, uint32 context, uint32         size);
255
256     /**
257      * @brief Let the focused IMEngineInstance object
258      *        update candidate items layout.
259      *
260      * @param row_items The items of each row.
261      * @return true if the command was sent correctly.
262      */
263     virtual void update_candidate_item_layout (int client, uint32 context, const std::vector<uint32>& row_items);
264
265     /**
266      * @brief Let the focused IMEngineInstance object
267      *        select a associate in current associate table.
268      *
269      * @param item The index of the selected associate.
270      * @return true if the command was sent correctly.
271      */
272     virtual void select_associate (int client, uint32 context, uint32         item);
273
274     /**
275      * @brief Let the focused IMEngineInstance object
276      *        flip the AssociateTable to previous page.
277      * @return true if the command was sent correctly.
278      */
279     virtual void associate_table_page_up (int client, uint32 context);
280
281     /**
282      * @brief Let the focused IMEngineInstance object
283      *        flip the AssociateTable to next page.
284      * @return true if the command was sent correctly.
285      */
286     virtual void associate_table_page_down (int client, uint32 context);
287
288     /**
289      * @brief Let the focused IMEngineInstance object
290      *        update the page size of the AssociateTable.
291      *
292      * @param size The new page size.
293      * @return true if the command was sent correctly.
294      */
295     virtual void update_associate_table_page_size (int client, uint32 context, uint32       size);
296
297     /**
298      * @brief Inform helper ISE to update displayed candidate number.
299      *
300      * @param size The displayed candidate number.
301      * @return true if the command was sent correctly.
302      */
303     virtual void update_displayed_candidate_number (int client, uint32 context, uint32      size);
304
305     /**
306      * @brief Trigger a property of the focused IMEngineInstance object.
307      *
308      * @param property The property key to be triggered.
309      * @return true if the command was sent correctly.
310      */
311     virtual void trigger_property (int client, uint32 context, const String&  property);
312
313     /**
314      * @brief Let all FrontEnds and Helpers reload configuration.
315      * @return true if the command was sent correctly.
316      */
317     virtual void reload_config (int client);
318
319     /**
320      * @brief Let all FrontEnds, Helpers and this Panel exit.
321      * @return true if the command was sent correctly.
322      */
323     virtual void exit (int client, uint32 context);
324
325     /**
326      * @brief Send candidate longpress event to ISE.
327      *
328      * @param index The candidate object index.
329      *
330      * @return none.
331      */
332     virtual void send_longpress_event (int client, uint32 context, uint32 index);
333
334     /**
335      * @brief update_panel_event.
336      *
337      * @param
338      *
339      * @return none.
340      */
341     virtual void update_panel_event (int client,  uint32 context, int cmd, uint32 nType, uint32 nValue);
342
343     /**
344      * @brief update_keyboard_ise_list.
345      *
346      * @param
347      *
348      * @return none.
349      */
350     virtual void update_keyboard_ise_list (int client, uint32 context);
351
352     /**
353      * @brief set_helper_mode.
354      *
355      * @param
356      *
357      * @return none.
358      */
359     virtual void set_helper_mode (int client, uint32 context, const String& uuid, uint32& mode);
360
361     /**
362      * @brief set_helper_language.
363      *
364      * @param
365      *
366      * @return none.
367      */
368     virtual void set_helper_language (int client, uint32 context, const String& uuid, uint32& language);
369
370     /**
371      * @brief set_helper_imdata.
372      *
373      * @param
374      *
375      * @return none.
376      */
377     virtual void set_helper_imdata (int client, uint32 context, const String& uuid, const char* imdata, size_t& len);
378
379     /**
380      * @brief set_helper_return_key_type.
381      *
382      * @param
383      *
384      * @return none.
385      */
386     virtual void set_helper_return_key_type (int client, uint32 context, const String& uuid, uint32 type);
387
388     /**
389      * @brief get_helper_return_key_type.
390      *
391      * @param
392      *
393      * @return none.
394      */
395     virtual void get_helper_return_key_type (int client, uint32 context, const String& uuid, _OUT_ uint32& type);
396
397     /**
398      * @brief set_helper_return_key_disable.
399      *
400      * @param
401      *
402      * @return none.
403      */
404     virtual void set_helper_return_key_disable (int client, uint32 context, const String& uuid, uint32 disabled);
405
406     /**
407      * @brief get_helper_return_key_disable.
408      *
409      * @param
410      *
411      * @return none.
412      */
413     virtual void get_helper_return_key_disable (int client, uint32 context, const String& uuid, _OUT_ uint32& disabled);
414
415     /**
416      * @brief set_helper_layout.
417      *
418      * @param
419      *
420      * @return none.
421      */
422     virtual void set_helper_layout (int client, uint32 context, const String& uuid, uint32& layout);
423
424     /**
425      * @brief set_helper_input_mode.
426      *
427      * @param
428      *
429      * @return none.
430      */
431     virtual void set_helper_input_mode (int client, uint32 context, const String& uuid, uint32& mode);
432
433     /**
434      * @brief set_helper_input_hint.
435      *
436      * @param
437      *
438      * @return none.
439      */
440     virtual void set_helper_input_hint (int client, uint32 context, const String& uuid, uint32& hint);
441
442     /**
443      * @brief set_helper_bidi_direction.
444      *
445      * @param
446      *
447      * @return none.
448      */
449     virtual void set_helper_bidi_direction (int client, uint32 context, const String& uuid, uint32& direction);
450
451     /**
452      * @brief set_helper_caps_mode.
453      *
454      * @param
455      *
456      * @return none.
457      */
458     virtual void set_helper_caps_mode (int client, uint32 context, const String& uuid, uint32& mode);
459
460     /**
461      * @brief show_helper_option_window.
462      *
463      * @param
464      *
465      * @return none.
466      */
467     virtual void show_helper_option_window (int client, uint32 context, const String& uuid);
468
469     /**
470      * @brief process_key_event.
471      *
472      * @param
473      *
474      * @return none.
475      */
476     virtual bool process_key_event (int client, uint32 context, const String& uuid, KeyEvent& key, _OUT_ uint32& result);
477
478     /**
479      * @brief get_helper_geometry.
480      *
481      * @param
482      *
483      * @return none.
484      */
485     virtual bool get_helper_geometry (int client, uint32 context, String& uuid, _OUT_ struct rectinfo& info);
486
487     /**
488      * @brief get_helper_imdata.
489      *
490      * @param
491      *
492      * @return none.
493      */
494     virtual void get_helper_imdata (int client, uint32 context, String& uuid, _OUT_ char** imdata, _OUT_ size_t& len);
495
496     /**
497      * @brief get_helper_layout.
498      *
499      * @param
500      *
501      * @return none.
502      */
503     virtual void get_helper_layout (int client, uint32 context, String& uuid, uint32& layout);
504
505     /**
506      * @brief get_ise_language_locale.
507      *
508      * @param
509      *
510      * @return none.
511      */
512     virtual void get_ise_language_locale (int client, uint32 context, String& uuid, _OUT_ char* data, _OUT_ size_t& len);
513
514     /**
515      * @brief check_option_window.
516      *
517      * @param
518      *
519      * @return none.
520      */
521     virtual void check_option_window (int client, uint32 context, String& uuid, _OUT_ uint32& avail);
522
523     /**
524      * @brief reset_ise_option.
525      *
526      * @param
527      *
528      * @return none.
529      */
530     virtual void reset_ise_option (int client, uint32 context);
531
532     /**
533      * @brief reset_helper_context.
534      *
535      * @param
536      *
537      * @return none.
538      */
539     virtual void reset_helper_context (int client, uint32 context, const String& uuid);
540
541     /**
542      * @brief socket_update_surrounding_text.
543      *
544      * @param
545      *
546      * @return none.
547      */
548     virtual void socket_update_surrounding_text (int client, uint32 context,const String& uuid, String& text, uint32 cursor);
549
550     /**
551      * @brief socket_update_selection.
552      *
553      * @param
554      *
555      * @return none.
556      */
557     virtual void socket_update_selection (int client, uint32 context, String& uuid, String text);
558
559     /**
560      * @brief socket_get_keyboard_ise_list.
561      *
562      * @param
563      *
564      * @return none.
565      */
566     virtual  void socket_get_keyboard_ise_list (int client, uint32 context, const String& uuid, std::vector<String>& list);
567
568     /**
569      * @brief socket_get_candidate_ui.
570      *
571      * @param
572      *
573      * @return none.
574      */
575     virtual void socket_get_candidate_ui (int client, uint32 context, const String& uuid,  int style,  int mode);
576
577     /**
578      * @brief socket_get_candidate_geometry.
579      *
580      * @param
581      *
582      * @return none.
583      */
584     virtual void socket_get_candidate_geometry (int client, uint32 context, const String& uuid, struct rectinfo& info);
585
586     /**
587      * @brief socket_get_keyboard_ise.
588      *
589      * @param
590      *
591      * @return none.
592      */
593     virtual void socket_get_keyboard_ise (int client, uint32 context, const String& uuid, String& ise_name, String& ise_uuid);
594
595     /**
596      * @brief socket_start_helper.
597      *
598      * @param
599      *
600      * @return none.
601      */
602     virtual void socket_start_helper (int client, uint32 context, const String& ic_uuid);
603
604     /**
605      * @brief helper_detach_input_context.
606      *
607      * @param
608      *
609      * @return none.
610      */
611     virtual void helper_detach_input_context (int client, uint32 context, const String& ic_uuid);
612
613     /**
614      * @brief helper_process_imengine_event.
615      *
616      * @param
617      *
618      * @return none.
619      */
620     virtual void helper_process_imengine_event (int client, uint32 context, const String& ic_uuid, const Transaction& nest_transaction);
621
622     /**
623      * @brief process_helper_event.
624      *
625      * @param
626      *
627      * @return none.
628      */
629     virtual void process_helper_event (int client, uint32 context,  String target_uuid, String active_uuid, Transaction& nest_trans);
630
631     /**
632      * @brief socket_helper_key_event.
633      *
634      * @param
635      *
636      * @return none.
637      */
638     virtual void socket_helper_key_event (int client, uint32 context, int cmd , KeyEvent& key);
639
640     /**
641      * @brief socket_helper_get_surrounding_text.
642      *
643      * @param
644      *
645      * @return none.
646      */
647     virtual void socket_helper_get_surrounding_text (int client, uint32 context, uint32 maxlen_before, uint32 maxlen_after);
648
649     /**
650      * @brief socket_helper_delete_surrounding_text.
651      *
652      * @param
653      *
654      * @return none.
655      */
656     virtual void socket_helper_delete_surrounding_text (int client, uint32 context, uint32 offset, uint32 len);
657
658     /**
659      * @brief socket_helper_get_selection.
660      *
661      * @param
662      *
663      * @return none.
664      */
665     virtual void socket_helper_get_selection (int client, uint32 context);
666
667     /**
668      * @brief socket_helper_set_selection.
669      *
670      * @param
671      *
672      * @return none.
673      */
674     virtual void socket_helper_set_selection (int client, uint32 context, uint32 start, uint32 end);
675
676     /**
677      * @brief update_ise_input_context.
678      *
679      * @param
680      *
681      * @return none.
682      */
683     virtual void update_ise_input_context (int client, uint32 context, uint32 type, uint32 value);
684
685     /**
686      * @brief send_private_command.
687      *
688      * @param
689      *
690      * @return none.
691      */
692     virtual void send_private_command (int client, uint32 context, String command);
693
694     /**
695      * @brief helper_all_update_spot_location.
696      *
697      * @param
698      *
699      * @return none.
700      */
701     virtual void helper_all_update_spot_location (int client, uint32 context, String uuid, int x, int y);
702
703     /**
704      * @brief helper_all_update_cursor_position.
705      *
706      * @param
707      *
708      * @return none.
709      */
710     virtual void helper_all_update_cursor_position (int client, uint32 context, String uuid, int cursor_pos);
711
712     /**
713      * @brief helper_all_update_screen.
714      *
715      * @param
716      *
717      * @return none.
718      */
719     virtual void helper_all_update_screen (int client, uint32 context, String uuid, int screen);
720
721     /**
722      * @brief commit_string.
723      *
724      * @param
725      *
726      * @return none.
727      */
728     virtual void commit_string (int client, uint32 context,const WideString& wstr);
729
730     /**
731      * @brief show_preedit_string.
732      *
733      * @param
734      *
735      * @return none.
736      */
737     virtual void show_preedit_string (int client, uint32 context);
738
739     /**
740      * @brief hide_preedit_string.
741      *
742      * @param
743      *
744      * @return none.
745      */
746     virtual void hide_preedit_string (int client, uint32 context);
747
748     /**
749      * @brief update_preedit_string.
750      *
751      * @param
752      *
753      * @return none.
754      */
755     virtual void update_preedit_string (int client, uint32  context, WideString wstr, AttributeList& attrs, uint32 caret);
756
757     /**
758      * @brief update_preedit_caret.
759      *
760      * @param
761      *
762      * @return none.
763      */
764     virtual void update_preedit_caret (int client, uint32 context, uint32 caret);
765
766     /**
767      * @brief attach_input_context and update_screen.
768      *
769      * @param
770      *
771      * @return none.
772      */
773     virtual void helper_attach_input_context_and_update_screen (int client, std::vector < std::pair <uint32, String> >& helper_ic_index, uint32 current_screen);
774
775     /**
776      * @brief hide_helper_ise.
777      *
778      * @param
779      *
780      * @return none.
781      */
782     virtual void hide_helper_ise (int client, uint32 context);
783 };
784
785 /**  @} */
786
787 } /* namespace scim */
788
789 #endif /* __ISF_PANEL_AGENT_BASE_H */
790
791 /*
792 vi:ts=4:nowrap:ai:expandtab
793 */