ca54f9f2bfde9bddbb5ff313a7cfc1609eccfdd5
[profile/ivi/org.tizen.browser.git] / src / browser-view / browser-context-menu.cpp
1 /*
2  * Copyright 2012  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://www.tizenopensource.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
19 #include "browser-context-menu.h"
20 #include "browser-view.h"
21
22 Browser_Context_Menu::Browser_Context_Menu(Browser_View *browser_view)
23 :       m_browser_view(browser_view)
24         ,m_ewk_view(NULL)
25 {
26         BROWSER_LOGD("[%s]", __func__);
27 }
28
29 Browser_Context_Menu::~Browser_Context_Menu(void)
30 {
31         BROWSER_LOGD("[%s]", __func__);
32 }
33
34 void Browser_Context_Menu::init(Evas_Object *ewk_view)
35 {
36         BROWSER_LOGD("[%s]", __func__);
37
38         deinit();
39
40         m_ewk_view = ewk_view;
41
42         evas_object_smart_callback_add(ewk_view, "contextmenu,customize", __get_context_menu_from_proposed_context_menu_cb, NULL);
43         evas_object_smart_callback_add(ewk_view, "contextmenu,selected", __custom_context_menu_item_selected_cb, this);
44 }
45
46 void Browser_Context_Menu::deinit(void)
47 {
48         BROWSER_LOGD("[%s]", __func__);
49         if (m_ewk_view) {
50                 evas_object_smart_callback_del(m_ewk_view, "contextmenu,customize",
51                                                 __get_context_menu_from_proposed_context_menu_cb);
52                 evas_object_smart_callback_del(m_ewk_view, "contextmenu,selected",
53                                                 __custom_context_menu_item_selected_cb);
54         }
55 }
56
57 void Browser_Context_Menu::__get_context_menu_from_proposed_context_menu_cb(void *data, Evas_Object *obj, void *event_info)
58 {
59         BROWSER_LOGD("[%s]", __func__);
60         if (!event_info)
61                 return;
62
63         Ewk_Context_Menu *menu = static_cast<Ewk_Context_Menu*>(event_info);
64         Ewk_Context_Menu_Item *item;
65         Ewk_Context_Menu_Item_Tag tag;
66         int count = ewk_context_menu_item_count(menu);
67         for (int i = 0; i < count; i++) {
68                 item = ewk_context_menu_nth_item_get(menu, 0);
69                 tag = ewk_context_menu_item_tag_get(item);
70                 ewk_context_menu_item_remove(menu, item);
71
72                 switch (tag) {
73                 case EWK_CONTEXT_MENU_ITEM_TAG_OPEN_LINK_IN_NEW_WINDOW:
74                         ewk_context_menu_item_append_as_action(menu, tag, BR_STRING_CTXMENU_OPEN_LINK_IN_NEW_WINDOW, true);
75                         break;
76                 case EWK_CONTEXT_MENU_ITEM_TAG_DOWNLOAD_LINK_TO_DISK:
77                         ewk_context_menu_item_append_as_action(menu, tag, BR_STRING_CTXMENU_DOWNLOAD_LINKED_FILE, true);
78                         break;
79                 case EWK_CONTEXT_MENU_ITEM_TAG_OPEN_IMAGE_IN_NEW_WINDOW:
80                         ewk_context_menu_item_append_as_action(menu, tag, BR_STRING_CTXMENU_OPEN_IMAGE_IN_NEW_WINDOW, true);
81                         break;
82                 case EWK_CONTEXT_MENU_ITEM_TAG_DOWNLOAD_IMAGE_TO_DISK:
83                         ewk_context_menu_item_append_as_action(menu, tag, BR_STRING_CTXMENU_SAVE_IMAGE_AS, true);
84                         break;
85                 case EWK_CONTEXT_MENU_ITEM_TAG_COPY_IMAGE_TO_CLIPBOARD:
86                         ewk_context_menu_item_append_as_action(menu, tag, BR_STRING_CTXMENU_COPY_IMAGE, true);
87                         ewk_context_menu_item_append_as_action(menu, CustomContextMenuItemImageSendViaMessageTag, BR_STRING_SHARE_VIA_MESSAGE, true);
88                         ewk_context_menu_item_append_as_action(menu, CustomContextMenuItemImageSendViaEmailTag, BR_STRING_SHARE_VIA_EMAIL, true);
89                         break;
90                 case EWK_CONTEXT_MENU_ITEM_TAG_COPY_LINK_TO_CLIPBOARD:
91                         ewk_context_menu_item_append_as_action(menu, tag, BR_STRING_CTXMENU_COPY_IMAGE_LOCATION, true);
92                         break;
93                 case EWK_CONTEXT_MENU_ITEM_TAG_CUT:
94                         ewk_context_menu_item_append_as_action(menu, tag, BR_STRING_CTXMENU_CUT, true);
95                         break;
96                 case EWK_CONTEXT_MENU_ITEM_TAG_PASTE:
97                         ewk_context_menu_item_append_as_action(menu, tag, BR_STRING_CTXMENU_PASTE, true);
98                         break;
99                 case EWK_CONTEXT_MENU_ITEM_TAG_COPY:
100                         ewk_context_menu_item_append_as_action(menu, tag, BR_STRING_CTXMENU_COPY, true);
101                         break;
102                 case EWK_CONTEXT_MENU_ITEM_TAG_SELECT_ALL:
103                         ewk_context_menu_item_append_as_action(menu, tag, BR_STRING_SELECT_ALL, true);
104                         break;
105                 case EWK_CONTEXT_MENU_ITEM_TAG_SELECT_WORD:
106                         ewk_context_menu_item_append_as_action(menu, tag, BR_STRING_CTXMENU_SELECT_WORD, true);
107                         break;
108                 default:
109                         break;
110                 }
111         }
112 }
113
114 void Browser_Context_Menu::__custom_context_menu_item_selected_cb(void *data, Evas_Object *obj, void *event_info)
115 {
116         BROWSER_LOGD("[%s]", __func__);
117         if (!event_info)
118                 return;
119
120         Ewk_Context_Menu_Item* item = static_cast<Ewk_Context_Menu_Item*>(event_info);
121         Browser_Context_Menu *context_menu = static_cast<Browser_Context_Menu *>(data);
122
123         std::string link_url_string = ewk_context_menu_item_link_url_get(item);
124         BROWSER_LOGD("link url=[%s]", link_url_string.c_str());
125         std::string image_url_string = ewk_context_menu_item_image_url_get(item);
126         BROWSER_LOGD("image url=[%s]", image_url_string.c_str());
127
128         Ewk_Context_Menu_Item_Tag tag = ewk_context_menu_item_tag_get(item);
129         switch (tag) {
130
131         default:
132                 break;
133         }
134 }
135