merge with master
[apps/core/preloaded/myfiles.git] / src / widget / mf-context-popup.c
1 /*
2  * Copyright 2013         Samsung Electronics Co., Ltd
3  *
4  * Licensed under the Flora License, Version 1.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *  http://floralicense.org/license/
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17
18 #include "mf-widget.h"
19 #include "mf-callback.h"
20 #include "mf-share.h"
21 #include "mf-language-mgr.h"
22
23
24 static Evas_Coord touch_x;
25 static Evas_Coord touch_y;
26
27
28 /******************************
29 ** Prototype    : _move_ctxpopup
30 ** Description  : move the context popup to the suitable location
31 ** Input        : void *data
32 **                Evas_Object *ctxpopup
33 ** Output       : None
34 ** Return Value :
35 ** Calls        :
36 ** Called By    :
37 **
38 **  History        :
39 **  1.Date         : 2010/12/10
40 **    Author       : Samsung
41 **    Modification : Created function
42 **
43 ******************************/
44 static void _move_ctxpopup(void *data, Evas_Object *parent, Evas_Object *ctxpopup )
45 {
46         struct appdata* ap = (struct appdata *)data;
47         elm_ctxpopup_direction_priority_set(ctxpopup, ELM_CTXPOPUP_DIRECTION_UP,
48                                             ELM_CTXPOPUP_DIRECTION_LEFT,
49                                             ELM_CTXPOPUP_DIRECTION_RIGHT,
50                                             ELM_CTXPOPUP_DIRECTION_DOWN);
51
52
53         if (parent) {
54                 int x = 0;
55                 int y = 0;
56                 int w = 0;
57                 int h = 0;
58
59                 evas_object_geometry_get(parent, &x, &y, &w, &h);
60                 evas_object_move(ctxpopup, x + (w / 2), y + (h /2));
61         } else {
62                 evas_object_move(ctxpopup, touch_x, touch_y);
63         }
64 }
65
66
67 /******************************
68 ** Prototype    : mousedown_cb
69 ** Description  : callback function for the mouse down operation in  context
70                   popup
71 ** Input        : void *data
72 **                int type
73 **                void *event
74 ** Output       : None
75 ** Return Value :
76 ** Calls        :
77 ** Called By    :
78 **
79 **  History        :
80 **  1.Date         : 2010/12/10
81 **    Author       : Samsung
82 **    Modification : Created function
83 **
84 ******************************/
85 void mf_context_popup_get_position(Evas_Object *obj, const char *label, int *x, int *y)
86 {
87         mf_retm_if(obj == NULL, "obj is NULL");
88         mf_retm_if(label == NULL, "label is NULL");
89         Evas_Object *pCtrlBar = obj;
90
91         Elm_Object_Item *pItem = NULL;
92         int x_position = 0;
93         int y_position = 0;
94         int w = 0;
95
96         pItem = elm_toolbar_first_item_get(pCtrlBar);
97
98         while(pItem) {
99                 const char *button_label = elm_object_item_text_get(pItem);
100                 if (g_strcmp0(button_label, label) == 0) {
101                         Evas_Object *icon = elm_toolbar_item_object_get(pItem);
102                         evas_object_geometry_get(icon, &x_position, &y_position, &w, NULL);
103                         *x = x_position+w/2;
104                         *y = y_position;
105                         return;
106                 }
107                 pItem = elm_toolbar_item_next_get(pItem);
108         }
109 }
110
111 int mousedown_cb( void *data, int type, void *event )
112 {
113         struct appdata* ap = (struct appdata *)data;
114         Evas_Coord x = 0;
115         Evas_Coord y = 0;
116         Evas_Coord w = 0;
117         Elm_Object_Item *navi_it = ap->mf_MainWindow.pNaviItem;
118
119
120         if (ap->mf_Status.navi_item_selected == MF_NAVI_BTN_MORE) {
121                 Evas_Object *button = elm_object_item_part_content_get(navi_it, NAVI_MORE_BUTTON_PART);
122                 evas_object_geometry_get(button, &x, &y, &w, NULL);
123                 touch_x = x+w/2;;
124                 touch_y = y;
125                 return 0;
126         } else if (ap->mf_Status.more == MF_NAVI_BTN_SHARE) {
127                 Evas_Object *button = elm_object_item_part_content_get(navi_it, NAVI_BOTTOM_BUTTON_2_PART);
128
129                 mf_context_popup_get_position(button, GET_SYS_STR(LABEL_SHARE),&x, &y);
130                 mf_debug("x is [%d] y is [%d]", x, y);
131                 touch_x = x;
132                 touch_y = y;
133                 return 0;
134         } else {
135                 return 0;
136         }
137 }
138
139 /******************************
140 ** Prototype    : mfContextPopupCreate
141 ** Description  : Create the context popup
142 ** Input        : void *data
143 **                eContextPopMode popupMode
144 ** Output       : None
145 ** Return Value :
146 ** Calls        :
147 ** Called By    :
148 **
149 **  History        :
150 **  1.Date         : 2010/12/10
151 **    Author       : Samsung
152 **    Modification : Created function
153 **
154 ******************************/
155 static void _ctxpopup_hide_cb(void *data, Evas_Object *obj, void *event_info)
156 {
157         MF_TRACE_BEGIN;
158         mf_retm_if(obj == NULL, "obj is NULL");
159         mf_language_mgr_unregister_object_item_by_type(ITEM_TYPE_CTXPOP);
160         evas_object_del(obj);
161         obj = NULL;
162         MF_TRACE_END;
163 }
164
165 void mf_context_popup_create_gengrid(void *data)
166 {
167         mf_retm_if(data == NULL, "data is NULL");
168         mfItemData_s *itemData = (mfItemData_s *)data;
169         struct appdata* ap = (struct appdata *)itemData->ap;
170         mf_retm_if(ap == NULL, "ap is NULL");
171
172         SAFE_FREE_OBJ(ap->mf_MainWindow.pContextPopup);
173
174
175         if (ap->mf_Status.more == MORE_DEFAULT) {
176                 Evas_Object *ctxpopup = elm_ctxpopup_add(ap->mf_MainWindow.pNaviBar);
177                 ap->mf_MainWindow.pContextPopup = ctxpopup;
178                 Elm_Object_Item *it = NULL;
179                 Evas_Object *parent = elm_object_item_part_content_get(itemData->item, "elm.swallow.icon");
180
181                 if (ap->mf_Status.view_type == mf_view_root) {
182                         it = elm_ctxpopup_item_append(ctxpopup, GET_SYS_STR(LABEL_DETAIL), NULL, mf_callback_detail_ctx_cb, itemData);
183                         mf_language_mgr_register_object_item(it, LABEL_DETAIL, ITEM_TYPE_CTXPOP);
184                 } else {
185                         it = elm_ctxpopup_item_append(ctxpopup, GET_SYS_STR(LABEL_RENAME), NULL, mf_callback_rename_create_cb, itemData);
186                         mf_language_mgr_register_object_item(it, LABEL_RENAME, ITEM_TYPE_CTXPOP);
187                         it = elm_ctxpopup_item_append(ctxpopup, GET_SYS_STR(LABEL_DELETE), NULL, mf_callback_delete_button_cb, itemData);
188                         mf_language_mgr_register_object_item(it, LABEL_DELETE, ITEM_TYPE_CTXPOP);
189
190                 }
191                 _move_ctxpopup(ap, parent, ctxpopup);
192                 evas_object_show(ctxpopup);
193
194                 if(ctxpopup)
195                 {
196                         evas_object_smart_callback_add(ctxpopup,"dismissed", _ctxpopup_hide_cb, ap);
197                 }
198         }
199 }
200
201
202 void mf_context_popup_create_more(void *data, Evas_Object *parent)
203 {
204         mf_retm_if(data == NULL, "data is NULL");
205         struct appdata* ap = (struct appdata *)data;
206         int extension_state = ap->mf_Status.iExtensionState;
207
208
209         SAFE_FREE_OBJ(ap->mf_MainWindow.pContextPopup);
210
211         Evas_Object *ctxpopup = elm_ctxpopup_add(ap->mf_MainWindow.pNaviBar);
212         ap->mf_MainWindow.pContextPopup = ctxpopup;
213         Elm_Object_Item *it = NULL;
214
215         if (ap->mf_Status.more == MORE_DEFAULT) {
216                 /*Search*/
217                 if (ap->mf_Status.view_type == mf_view_root) {
218                         it = elm_ctxpopup_item_append(ctxpopup, GET_STR(LABEL_VIEW_AS), NULL, mf_callback_view_as_cb, ap);
219                         mf_language_mgr_register_object_item(it, LABEL_VIEW_AS, ITEM_TYPE_CTXPOP);
220
221                         /*Sort by*/
222                         it = elm_ctxpopup_item_append(ctxpopup, GET_STR(LABEL_SORT_BY), NULL, mf_callback_list_by_view_cb, ap);
223                         mf_language_mgr_register_object_item(it, LABEL_SORT_BY, ITEM_TYPE_CTXPOP);
224                 } else if (ap->mf_Status.view_type == mf_view_root_category) {
225                         it = elm_ctxpopup_item_append(ctxpopup, GET_SYS_STR(LABEL_SEARCH), NULL,mf_search_bar_enter_search_routine, ap);
226                         mf_language_mgr_register_object_item(it, LABEL_SEARCH, ITEM_TYPE_CTXPOP);
227                         it = elm_ctxpopup_item_append(ctxpopup, GET_STR(LABEL_VIEW_AS), NULL, mf_callback_view_as_cb, ap);
228                         mf_language_mgr_register_object_item(it, LABEL_VIEW_AS, ITEM_TYPE_CTXPOP);
229
230                         /*Sort by*/
231                         it = elm_ctxpopup_item_append(ctxpopup, GET_STR(LABEL_SORT_BY), NULL, mf_callback_list_by_view_cb, ap);
232                         mf_language_mgr_register_object_item(it, LABEL_SORT_BY, ITEM_TYPE_CTXPOP);
233                         if (extension_state == MF_EXTENSION_SHOW) {
234                                 it = elm_ctxpopup_item_append(ctxpopup, GET_STR(MF_LABEL_HIDE_EXTENSION), NULL, mf_callback_extension_cb, ap);
235                                 mf_language_mgr_register_object_item(it, MF_LABEL_HIDE_EXTENSION, ITEM_TYPE_CTXPOP);
236                         } else {
237                                 it = elm_ctxpopup_item_append(ctxpopup, GET_STR(MF_LABEL_SHOW_EXTENSION), NULL, mf_callback_extension_cb, ap);
238                                 mf_language_mgr_register_object_item(it, MF_LABEL_SHOW_EXTENSION, ITEM_TYPE_CTXPOP);
239                         }
240                 }
241                 else {
242                         it = elm_ctxpopup_item_append(ctxpopup, GET_SYS_STR(LABEL_SEARCH), NULL,mf_search_bar_enter_search_routine, ap);
243                         mf_language_mgr_register_object_item(it, LABEL_SEARCH, ITEM_TYPE_CTXPOP);
244
245                         /*Create folder*/
246                         it = elm_ctxpopup_item_append(ctxpopup, GET_SYS_STR(MF_LABEL_CREATE_FOLDER), NULL,mf_callback_new_folder_create_cb, ap);
247                         mf_language_mgr_register_object_item(it, MF_LABEL_CREATE_FOLDER, ITEM_TYPE_CTXPOP);
248
249                         /*View as*/
250                         it = elm_ctxpopup_item_append(ctxpopup, GET_STR(LABEL_VIEW_AS), NULL, mf_callback_view_as_cb, ap);
251                         mf_language_mgr_register_object_item(it, LABEL_VIEW_AS, ITEM_TYPE_CTXPOP);
252
253                         /*Sort by*/
254                         it = elm_ctxpopup_item_append(ctxpopup, GET_STR(LABEL_SORT_BY), NULL, mf_callback_list_by_view_cb, ap);
255                         mf_language_mgr_register_object_item(it, LABEL_SORT_BY, ITEM_TYPE_CTXPOP);
256
257                         /*Extension*/
258                         if (extension_state == MF_EXTENSION_SHOW) {
259                                 it = elm_ctxpopup_item_append(ctxpopup, GET_STR(MF_LABEL_HIDE_EXTENSION), NULL, mf_callback_extension_cb, ap);
260                                 mf_language_mgr_register_object_item(it, MF_LABEL_HIDE_EXTENSION, ITEM_TYPE_CTXPOP);
261                         } else {
262                                 it = elm_ctxpopup_item_append(ctxpopup, GET_STR(MF_LABEL_SHOW_EXTENSION), NULL, mf_callback_extension_cb, ap);
263                                 mf_language_mgr_register_object_item(it, MF_LABEL_SHOW_EXTENSION, ITEM_TYPE_CTXPOP);
264                         }
265                 }
266         } else if(ap->mf_Status.more == MORE_EDIT) {
267                 /*Copy*/
268                 it = elm_ctxpopup_item_append(ctxpopup, GET_SYS_STR(LABEL_COPY), NULL, mf_callback_copy_move_cb, ap);
269                 mf_language_mgr_register_object_item(it, LABEL_COPY, ITEM_TYPE_CTXPOP);
270                 /*Move*/
271                 it = elm_ctxpopup_item_append(ctxpopup, GET_SYS_STR(LABEL_MOVE), NULL,mf_callback_copy_move_cb, ap);
272                 mf_language_mgr_register_object_item(it, LABEL_MOVE, ITEM_TYPE_CTXPOP);
273
274         } else if(ap->mf_Status.more == MORE_INTERNAL_MOVE || ap->mf_Status.more == MORE_INTERNAL_COPY) {
275                 it = elm_ctxpopup_item_append(ctxpopup, GET_SYS_STR(MF_LABEL_CREATE_FOLDER), NULL,mf_callback_new_folder_create_cb, ap);
276                 mf_language_mgr_register_object_item(it, MF_LABEL_CREATE_FOLDER, ITEM_TYPE_CTXPOP);
277         }
278         _move_ctxpopup(ap, parent, ctxpopup);
279         evas_object_show(ctxpopup);
280
281         if(ctxpopup)
282         {
283                 evas_object_smart_callback_add(ctxpopup,"dismissed", _ctxpopup_hide_cb, ap);
284         }
285 }
286
287
288 static void __mf_share_select(void *data, Evas_Object * obj, void *event_info)
289 {
290         mf_retm_if(data == NULL, "data is NULL");
291         mf_retm_if(event_info == NULL, "event_info is NULL");
292
293         struct appdata* ap = (struct appdata *)data;
294         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
295         if (item != NULL) {
296                 const char *label = NULL;
297                 label = elm_object_item_text_get(item);
298                 ap->mf_Status.preMore = MORE_SHARE_EDIT;
299                 if (g_strcmp0(label, GET_SYS_STR(MF_POP_MSG_BT)) == 0) {
300                         ap->mf_Status.more = MORE_SENDVIABLUETOOTH;
301                 } else if (g_strcmp0(label, GET_SYS_STR(MF_POP_MSG_EMAIL)) == 0) {
302                         ap->mf_Status.more = MORE_SENDVIAEMAIL;
303
304                 } else if (g_strcmp0(label, GET_SYS_STR(MF_POP_MSG_MESSAGE)) == 0) {
305                         ap->mf_Status.more = MORE_SENDVIAMESSAGE;
306                 }
307
308                 mf_callback_send_response_cb(ap);
309         }
310 }
311
312 void mf_context_popup_create_share(void *data, int share_mode, Evas_Object *parent)
313 {
314         mf_retm_if(data == NULL, "data is NULL");
315         struct appdata* ap = (struct appdata *)data;
316
317
318         SAFE_FREE_OBJ(ap->mf_MainWindow.pContextPopup);
319
320         ap->mf_Status.navi_item_selected = MF_NAVI_BTN_SHARE;
321
322         Evas_Object *ctxpopup = elm_ctxpopup_add(ap->mf_MainWindow.pNaviBar);
323         ap->mf_MainWindow.pContextPopup = ctxpopup;
324         Elm_Object_Item *it = NULL;
325
326         it = elm_ctxpopup_item_append(ctxpopup, GET_SYS_STR(MF_POP_MSG_MESSAGE), NULL, __mf_share_select, ap);
327         mf_language_mgr_register_object_item(it, MF_POP_MSG_MESSAGE, ITEM_TYPE_CTXPOP);
328         it = elm_ctxpopup_item_append(ctxpopup, GET_SYS_STR(MF_POP_MSG_EMAIL), NULL, __mf_share_select, ap);
329         mf_language_mgr_register_object_item(it, MF_POP_MSG_EMAIL, ITEM_TYPE_CTXPOP);
330         it = elm_ctxpopup_item_append(ctxpopup, GET_SYS_STR(MF_POP_MSG_BT), NULL, __mf_share_select, ap);
331         mf_language_mgr_register_object_item(it, MF_POP_MSG_BT, ITEM_TYPE_CTXPOP);
332
333
334
335         _move_ctxpopup(ap, parent,ctxpopup);
336         evas_object_show(ctxpopup);
337
338         if(ctxpopup)
339         {
340                 evas_object_smart_callback_add(ctxpopup,"dismissed", _ctxpopup_hide_cb, ap);
341         }
342 }
343