2 * Copyright 2012 Samsung Electronics Co., Ltd
4 * Licensed under the Flora License, Version 1.1 (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
8 * http://floralicense.org/license/
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.
17 #include <Elementary.h>
19 #include "option_menu.h"
20 #include "homescreen-efl.h"
25 #include "livebox/livebox_panel.h"
28 #include "folder_panel.h"
30 #include "data_model.h"
32 #include "livebox_all_pages.h"
35 Evas_Object *option_menu;
36 Evas_Object *option_menu_background;
40 /*Create the background with the clicked callback under the menu*/
41 static void __option_menu_create_background(void);
42 static void __option_menu_background_clicked_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
43 static void __option_menu_dismissed_cb(void *data, Evas_Object *obj, void *event_info);
45 /*All Apps callbacks*/
46 static void __option_menu_entry_all_apps_edit_apps_cb(void *data, Evas_Object *obj, void *event_info);
47 static void __option_menu_entry_all_apps_create_folder_cb(void *data, Evas_Object *obj, void *event_info);
50 static void __option_menu_entry_all_apps_edit_home_cb(void *data, Evas_Object *obj, void *event_info);
52 /*Wallpapers callbacks*/
53 static void __option_menu_entry_all_apps_wallpaper_cb(void *data, Evas_Object *obj, void *event_info);
56 static void __option_menu_entry_all_apps_add_widget_cb(void *data, Evas_Object *obj, void *event_info);
59 static void __option_menu_entry_all_apps_view_all_pages_cb(void *data, Evas_Object *obj, void *event_info);
61 static void __option_menu_update_caption_menu_state_update(void);
63 HAPI bool option_menu_show(void)
65 Evas_Object *option_menu = NULL;
66 homescreen_view_t view = home_screen_get_view_type();
68 __option_menu_create_background();
70 option_menu = elm_ctxpopup_add(home_screen_get_win());
72 LOGE("Could not create all apps option menu");
73 evas_object_del(s_info.option_menu_background);
77 elm_ctxpopup_horizontal_set(option_menu, EINA_FALSE);
78 elm_ctxpopup_direction_priority_set(option_menu, ELM_CTXPOPUP_DIRECTION_DOWN, ELM_CTXPOPUP_DIRECTION_DOWN, ELM_CTXPOPUP_DIRECTION_DOWN, ELM_CTXPOPUP_DIRECTION_DOWN);
80 evas_object_smart_callback_add(option_menu, "dismissed", __option_menu_dismissed_cb, NULL);
82 evas_object_layer_set(option_menu, EVAS_LAYER_MAX);
83 evas_object_move(option_menu, 0, home_screen_get_root_height()-(BUTTONS_AREA*home_screen_get_root_height()));
84 evas_object_size_hint_min_set(option_menu, home_screen_get_root_width(), -1);
86 if (view == HOMESCREEN_VIEW_HOME) {
87 elm_ctxpopup_item_append(option_menu, _("IDS_HS_OPT_EDIT"), NULL, __option_menu_entry_all_apps_edit_home_cb, NULL);
88 elm_ctxpopup_item_append(option_menu, _("IDS_HS_HEADER_ADD_WIDGET"), NULL, __option_menu_entry_all_apps_add_widget_cb, NULL);
89 elm_ctxpopup_item_append(option_menu, _("IDS_HS_OPT_CHANGE_WALLPAPER_ABB"), NULL, __option_menu_entry_all_apps_wallpaper_cb, NULL);
90 elm_ctxpopup_item_append(option_menu, _("IDS_HS_OPT_ALL_PAGES"), NULL, __option_menu_entry_all_apps_view_all_pages_cb, NULL);
91 } else if (view == HOMESCREEN_VIEW_HOME_ALL_PAGES) {
92 LOGD("All pages view type");
93 } else if (view == HOMESCREEN_VIEW_ALL_APPS) {
94 elm_ctxpopup_item_append(option_menu, _("IDS_HS_OPT_EDIT"), NULL, __option_menu_entry_all_apps_edit_apps_cb, NULL);
95 elm_ctxpopup_item_append(option_menu, _("IDS_HS_OPT_CREATE_FOLDER_OPT_TTS"), NULL, __option_menu_entry_all_apps_create_folder_cb, NULL);
97 } else if (view == HOMESCREEN_VIEW_UNKNOWN) {
98 LOGD("Unknown view type");
100 LOGE("Failed to get view type");
104 evas_object_show(option_menu);
106 s_info.is_visible = true;
107 s_info.option_menu = option_menu;
112 HAPI void option_menu_hide(void)
114 if (s_info.option_menu) {
115 evas_object_hide(s_info.option_menu);
116 evas_object_del(s_info.option_menu);
117 s_info.option_menu = NULL;
120 if (s_info.option_menu_background) {
121 evas_object_hide(s_info.option_menu_background);
122 evas_object_del(s_info.option_menu_background);
123 s_info.option_menu_background = NULL;
125 s_info.is_visible = false;
128 HAPI void option_menu_update_on_item_selected(void)
130 __option_menu_update_caption_menu_state_update();
133 HAPI void option_menu_change_state_on_hw_menu_key(void)
135 if (s_info.is_visible) {
142 static void __option_menu_create_background(void)
144 Evas_Object *background = NULL;
146 if (s_info.option_menu_background) {
147 evas_object_show(s_info.option_menu_background);
152 background = evas_object_rectangle_add(evas_object_evas_get(home_screen_get_win()));
153 evas_object_color_set(background, 255, 255, 255, 0);
154 evas_object_size_hint_min_set(background, INDEX_HEIGHT, home_screen_get_root_height());
155 evas_object_size_hint_max_set(background, INDEX_HEIGHT, home_screen_get_root_height());
156 evas_object_resize(background, INDEX_HEIGHT, home_screen_get_root_height());
157 evas_object_show(background);
159 evas_object_event_callback_add(background, EVAS_CALLBACK_MOUSE_UP, __option_menu_background_clicked_cb, NULL);
161 s_info.option_menu_background = background;
164 static void __option_menu_background_clicked_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
169 static void __option_menu_dismissed_cb(void *data, Evas_Object *obj, void *event_info)
174 static void __option_menu_entry_all_apps_edit_apps_cb(void *data, Evas_Object *obj, void *event_info)
177 home_screen_set_view_type(HOMESCREEN_VIEW_ALL_APPS_EDIT);
180 static void __option_menu_entry_all_apps_edit_home_cb(void *data, Evas_Object *obj, void *event_info)
182 home_screen_set_view_type(HOMESCREEN_VIEW_HOME_EDIT);
183 livebox_panel_set_edit_mode_layout(true);
184 livebox_panel_change_edit_mode_state(false);
189 static void __option_menu_entry_all_apps_create_folder_cb(void *data, Evas_Object *obj, void *event_info)
192 home_screen_set_view_type(HOMESCREEN_VIEW_ALL_APPS_CHOOSE);
193 __option_menu_update_caption_menu_state_update();
196 static void _launch_request_cb(app_control_h request, app_control_h reply, app_control_result_e result, void *data)
199 case APP_CONTROL_RESULT_CANCELED:
200 LOGE("[APP_CONTROL_RESULT_CANCELED]");
202 case APP_CONTROL_RESULT_FAILED:
203 LOGE("[APP_CONTROL_RESULT_FAILED]");
205 case APP_CONTROL_RESULT_SUCCEEDED:
206 LOGD("[APP_CONTROL_RESULT_SUCCEEDED]");
209 LOGE("UNKNOWN ERROR");
214 static void __option_menu_entry_all_apps_add_widget_cb(void *data, Evas_Object *obj, void *event_info)
216 LOGD("__option_menu_entry_all_apps_add_widget_cb");
218 const char *appid = OPTION_MENU_ADD_VIEWER;
219 app_control_h app_control_handle = NULL;
221 if (app_control_create(&app_control_handle) != APP_CONTROL_ERROR_NONE) {
222 LOGE("[FAILED][app_control_create]");
226 if (app_control_set_app_id(app_control_handle, appid) != APP_CONTROL_ERROR_NONE) {
227 LOGE("[FAILED][app_control_set_app_id]");
228 app_control_destroy(app_control_handle);
232 if (app_control_send_launch_request(app_control_handle, _launch_request_cb, NULL) != APP_CONTROL_ERROR_NONE) {
233 LOGE("[FAILED][app_control_send_launch_request]");
234 app_control_destroy(app_control_handle);
238 app_control_destroy(app_control_handle);
242 static void __option_menu_entry_all_apps_wallpaper_cb(void *data, Evas_Object *obj, void *event_info)
244 LOGD("__option_menu_entry_all_apps_wallpaper_cb");
246 const char *appid = OPTION_MENU_SETTINGS;
247 app_control_h app_control_handle = NULL;
249 if (app_control_create(&app_control_handle) != APP_CONTROL_ERROR_NONE) {
250 LOGE("[FAILED][app_control_create]");
254 app_control_add_extra_data(app_control_handle, "from", "Homescreen-efl");
255 app_control_add_extra_data(app_control_handle, "popup_type", "selection_popup");
256 app_control_add_extra_data(app_control_handle, "setas-type", "Homescreen");
258 if (app_control_set_app_id(app_control_handle, appid) != APP_CONTROL_ERROR_NONE) {
259 LOGE("[FAILED][app_control_set_app_id]");
260 app_control_destroy(app_control_handle);
264 if (app_control_send_launch_request(app_control_handle, _launch_request_cb, NULL) != APP_CONTROL_ERROR_NONE) {
265 LOGE("[FAILED][app_control_send_launch_request]");
266 app_control_destroy(app_control_handle);
270 app_control_destroy(app_control_handle);
274 static void __option_menu_entry_all_apps_view_all_pages_cb(void *data, Evas_Object *obj, void *event_info)
276 home_screen_set_view_type(HOMESCREEN_VIEW_HOME_ALL_PAGES);
280 static void __option_menu_update_caption_menu_state_update(void)
282 int selected_count = -1;
283 char trbuf[CAPTION_MENU_CENTER_LABEL_TEXT_LEN_MAX];
284 homescreen_view_t view = home_screen_get_view_type();
287 case HOMESCREEN_VIEW_HOME:
289 case HOMESCREEN_VIEW_ALL_APPS:
291 case HOMESCREEN_VIEW_ALL_APPS_CHOOSE:
292 selected_count = data_model_get_app_check_state();
293 snprintf(trbuf, sizeof(trbuf), _("IDS_MEMO_HEADER_PD_SELECTED_ABB2"), selected_count);
294 layout_main_caption_set_menu_texts(trbuf,
295 _("IDS_TPLATFORM_ACBUTTON_CANCEL_ABB"),
296 _("IDS_TPLATFORM_ACBUTTON_DONE_ABB"));
298 case HOMESCREEN_VIEW_ALL_APPS_EDIT:
299 layout_main_caption_set_menu_texts(_("IDS_HS_HEADER_EDIT"), "", "");