Remove share via email/message on SDK
[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                         break;
88                 case EWK_CONTEXT_MENU_ITEM_TAG_COPY_LINK_TO_CLIPBOARD:
89                         ewk_context_menu_item_append_as_action(menu, tag, BR_STRING_CTXMENU_COPY_IMAGE_LOCATION, true);
90                         break;
91                 case EWK_CONTEXT_MENU_ITEM_TAG_CUT:
92                         ewk_context_menu_item_append_as_action(menu, tag, BR_STRING_CTXMENU_CUT, true);
93                         break;
94                 case EWK_CONTEXT_MENU_ITEM_TAG_PASTE:
95                         ewk_context_menu_item_append_as_action(menu, tag, BR_STRING_CTXMENU_PASTE, true);
96                         break;
97                 case EWK_CONTEXT_MENU_ITEM_TAG_COPY:
98                         ewk_context_menu_item_append_as_action(menu, tag, BR_STRING_CTXMENU_COPY, true);
99                         break;
100                 case EWK_CONTEXT_MENU_ITEM_TAG_SELECT_ALL:
101                         ewk_context_menu_item_append_as_action(menu, tag, BR_STRING_SELECT_ALL, true);
102                         break;
103                 case EWK_CONTEXT_MENU_ITEM_TAG_SELECT_WORD:
104                         ewk_context_menu_item_append_as_action(menu, tag, BR_STRING_CTXMENU_SELECT_WORD, true);
105                         break;
106                 default:
107                         break;
108                 }
109         }
110 }
111
112 void Browser_Context_Menu::__custom_context_menu_item_selected_cb(void *data, Evas_Object *obj, void *event_info)
113 {
114         BROWSER_LOGD("[%s]", __func__);
115         if (!event_info)
116                 return;
117
118         Ewk_Context_Menu_Item* item = static_cast<Ewk_Context_Menu_Item*>(event_info);
119         Browser_Context_Menu *context_menu = static_cast<Browser_Context_Menu *>(data);
120
121         std::string link_url_string = ewk_context_menu_item_link_url_get(item);
122         BROWSER_LOGD("link url=[%s]", link_url_string.c_str());
123         std::string image_url_string = ewk_context_menu_item_image_url_get(item);
124         BROWSER_LOGD("image url=[%s]", image_url_string.c_str());
125
126         Ewk_Context_Menu_Item_Tag tag = ewk_context_menu_item_tag_get(item);
127         switch (tag) {
128
129         default:
130                 break;
131         }
132 }
133