15c8dd2e3246af272138914bf263e4a820c93660
[framework/uifw/elementary.git] / src / modules / popup_copypasteUI / copypaste.c
1 #include <Elementary.h>
2 #include "elm_module_priv.h"
3 #include "elm_priv.h"
4
5 Elm_Entry_Extension_data *ext_mod;
6
7 static void
8 _select(void *data, Evas_Object *obj, void *event_info)
9 {
10    ext_mod->select(data,obj,event_info);
11    evas_object_hide(ext_mod->popup);
12 }
13
14 static void
15 _paste(void *data, Evas_Object *obj, void *event_info)
16 {
17         ext_mod->paste(data,obj,event_info);
18    evas_object_hide(ext_mod->popup);
19 }
20
21 static void
22 _cut(void *data, Evas_Object *obj, void *event_info)
23 {
24         ext_mod->cut(data,obj,event_info);
25         evas_object_hide(ext_mod->popup);
26 }
27
28 static void
29 _copy(void *data, Evas_Object *obj, void *event_info)
30 {
31         ext_mod->copy(data,obj,event_info);
32         evas_object_hide(ext_mod->popup);
33 }
34
35 static void
36 _cancel(void *data, Evas_Object *obj, void *event_info)
37 {
38         ext_mod->cancel(data,obj,event_info);
39    evas_object_hide(ext_mod->popup);
40 }
41
42 static void
43 _clipboard_menu(void *data, Evas_Object *obj, void *event_info)
44 {
45         // start for cbhm
46         ecore_x_selection_secondary_set(elm_win_xwindow_get(obj), "",1);
47         ext_mod->cnpinit(data,obj,event_info);
48         elm_cbhm_helper_init(obj);
49         elm_cbhm_send_raw_data("show");
50         evas_object_hide(ext_mod->popup);
51         // end for cbhm
52 }
53
54 static void
55 _item_clicked(void *data, Evas_Object *obj, void *event_info)
56 {
57    Elm_Entry_Context_Menu_Item *it = data;
58    Evas_Object *obj2 = it->obj;
59
60         if (it->func) it->func(it->data, obj2, NULL);
61         evas_object_hide(ext_mod->popup);
62 }
63
64 // module api funcs needed
65 EAPI int
66 elm_modapi_init(void *m)
67 {
68    return 1; // succeed always
69 }
70
71 EAPI int
72 elm_modapi_shutdown(void *m)
73 {
74    return 1; // succeed always
75 }
76
77 // module fucns for the specific module type
78 EAPI void
79 obj_hook(Evas_Object *obj)
80 {
81         if(!ext_mod)
82                 {
83                         ext_mod = ELM_NEW(Elm_Entry_Extension_data);
84                 elm_entry_extension_module_data_get(obj,ext_mod);
85                 }
86 }
87
88 EAPI void
89 obj_unhook(Evas_Object *obj)
90 {
91    if(ext_mod)
92         {
93                         free(ext_mod);
94                         ext_mod = NULL;
95         }
96 }
97
98 EAPI void
99 obj_longpress(Evas_Object *obj)
100 {               
101         if(!ext_mod) return;
102         Evas_Object *top;
103         Evas_Object *list;
104         
105         const Eina_List *l;
106         const Elm_Entry_Context_Menu_Item *it;
107         /*update*/
108         elm_entry_extension_module_data_get(obj,ext_mod);
109         if (ext_mod->context_menu)
110         {
111                 if (ext_mod->popup) evas_object_del(ext_mod->popup);
112         else elm_widget_scroll_freeze_push(obj);
113                 top = elm_widget_top_get(obj);
114                 if(top)
115                 ext_mod->popup = elm_popup_add(top);
116                 elm_object_style_set(ext_mod->popup,"menustyle");
117                 elm_popup_mode_set(ext_mod->popup, ELM_POPUP_TYPE_ALERT);
118                 elm_popup_title_label_set(ext_mod->popup,"CopyPaste");
119                 list = elm_list_add(ext_mod->popup);
120                 elm_object_style_set(list,"popup");
121                 elm_list_horizontal_mode_set(list, ELM_LIST_COMPRESS);
122                 elm_widget_sub_object_add(obj, ext_mod->popup);
123                 if (!ext_mod->selmode)
124                 {       
125                         if (!ext_mod->password)
126                                 elm_list_item_append(list, "Select", NULL, NULL,_select, obj);
127                         if (1) // need way to detect if someone has a selection
128                                 {
129                                         if (ext_mod->editable)
130                                                 elm_list_item_append(list, "Paste", NULL, NULL,_paste, obj);
131                                 }
132         //              elm_ctxpopup_item_add(wd->ctxpopup, NULL, "Selectall",_select_all, obj );
133         // start for cbhm
134                         if (!ext_mod->password)
135                                 elm_list_item_append(list, "More", NULL, NULL,_clipboard_menu, obj);
136         // end for cbhm
137                 }
138                 else
139                 {
140                           if (!ext_mod->password)
141                                 {
142                                         if (ext_mod->have_selection)
143                                                 {
144                                                         elm_list_item_append(list, "Copy", NULL, NULL,_copy, obj);
145                                                         if (ext_mod->editable)
146                                                                 elm_list_item_append(list, "Cut", NULL, NULL,_cut, obj);
147                                                 }
148                                         else
149                                                 {
150                                                         _cancel(obj,ext_mod->popup,NULL);               
151                                                         elm_list_item_append(list, "Select", NULL, NULL,_select, obj);
152                                                         if (1) // need way to detect if someone has a selection
153                                                                 {
154                                                                         if (ext_mod->editable)
155                                                                                 elm_list_item_append(list, "Paste", NULL, NULL,_paste, obj);
156                                                                 }
157                                                 }
158         // start for cbhm
159                                         elm_list_item_append(list, "More", NULL, NULL,_clipboard_menu, obj);
160         // end for cbhm
161                                 }
162                 }
163                 EINA_LIST_FOREACH(ext_mod->items, l, it)
164                 {
165                         elm_list_item_append(list, it->label,NULL,NULL, _item_clicked, it);
166                 }
167                 if (ext_mod->popup)
168                 {
169                         elm_list_go(list);
170                         elm_popup_content_set(ext_mod->popup, list);
171                         evas_object_show(ext_mod->popup);              
172                         evas_render( evas_object_evas_get( ext_mod->popup ) );
173                 }
174         }
175         ext_mod->longpress_timer = NULL;
176 }
177
178 EAPI void
179 obj_mouseup(Evas_Object *obj)
180 {
181 /*update*/
182         elm_entry_extension_module_data_get(obj,ext_mod);
183    if (ext_mod->longpress_timer)
184      {          
185                 if (ext_mod->have_selection )
186                         {                               
187                                 _cancel(obj,ext_mod->popup,NULL);
188                         }
189      }     
190 }
191