2 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.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
8 * http://www.apache.org/licenses/LICENSE-2.0
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>
18 #include <boost/concept_check.hpp>
21 #include <AbstractMainWindow.h>
23 #include "SettingsUI.h"
24 #include "ServiceManager.h"
25 #include "BrowserLogger.h"
26 #include "Tools/EflTools.h"
28 #define efl_scale (elm_config_scale_get() / elm_app_base_scale_get())
30 namespace tizen_browser{
33 EXPORT_SERVICE(SettingsUI, "org.tizen.browser.settingsui")
36 tizen_browser::base_ui::SettingsUI* settingsUI;
37 Elm_Object_Item * e_item;
40 SettingsUI::SettingsUI()
41 : m_settings_layout(nullptr)
42 , m_genListActionBar(nullptr)
43 , m_itemClassActionBar(nullptr)
45 , m_item_class(nullptr)
47 , m_items_layout(nullptr)
49 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
50 m_edjFilePath = EDJE_DIR;
51 m_edjFilePath.append("SettingsUI/SettingsUI.edj");
54 SettingsUI::~SettingsUI()
59 void SettingsUI::show(Evas_Object* parent)
61 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
62 elm_theme_extension_add(nullptr, m_edjFilePath.c_str());
63 m_settings_layout = elm_layout_add(parent);
64 elm_layout_file_set(m_settings_layout, m_edjFilePath.c_str(), "settings-layout");
65 evas_object_size_hint_weight_set(m_settings_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
66 evas_object_size_hint_align_set(m_settings_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
67 evas_object_show(m_settings_layout);
73 void SettingsUI::showActionBar()
75 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
76 elm_theme_extension_add(nullptr, m_edjFilePath.c_str());
77 m_genListActionBar = elm_genlist_add(m_settings_layout);
78 elm_object_part_content_set(m_settings_layout, "actionbar_swallow", m_genListActionBar);
79 elm_genlist_homogeneous_set(m_genListActionBar, EINA_FALSE);
80 elm_genlist_multi_select_set(m_genListActionBar, EINA_FALSE);
81 elm_genlist_select_mode_set(m_genListActionBar, ELM_OBJECT_SELECT_MODE_ALWAYS);
82 elm_genlist_mode_set(m_genListActionBar, ELM_LIST_LIMIT);
83 elm_genlist_decorate_mode_set(m_genListActionBar, EINA_TRUE);
84 evas_object_size_hint_weight_set(m_genListActionBar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
86 m_itemClassActionBar = elm_genlist_item_class_new();
87 m_itemClassActionBar->item_style = "settings_action_bar_items";
88 m_itemClassActionBar->func.text_get = nullptr;
89 m_itemClassActionBar->func.content_get = &listActionBarContentGet;
90 m_itemClassActionBar->func.state_get = nullptr;
91 m_itemClassActionBar->func.del = nullptr;
93 ItemData *id = new ItemData;
94 id->settingsUI = this;
95 Elm_Object_Item *elmItem = elm_genlist_item_append(m_genListActionBar, //genlist
96 m_itemClassActionBar, //item Class
98 nullptr, //parent item
99 ELM_GENLIST_ITEM_NONE, //item type
101 nullptr //data passed to above function
103 id->e_item = elmItem;
105 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
108 void SettingsUI::showSettingsPage()
110 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
112 ItemData *id = new ItemData;
113 id->settingsUI = this;
115 m_scroller = elm_scroller_add(m_settings_layout);
116 m_items_layout = elm_layout_add(m_scroller);
117 elm_object_content_set(m_scroller, m_items_layout);
118 elm_layout_file_set(m_items_layout, m_edjFilePath.c_str(), "settings_items");
119 elm_object_part_content_set(m_settings_layout, "settings_scroller_swallow", m_scroller);
120 evas_object_size_hint_weight_set(m_scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
121 evas_object_size_hint_align_set(m_scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
122 elm_scroller_policy_set(m_items_layout, ELM_SCROLLER_POLICY_ON, ELM_SCROLLER_POLICY_AUTO);
123 elm_scroller_bounce_set(m_scroller, EINA_TRUE, EINA_FALSE);
124 elm_scroller_propagate_events_set(m_scroller, EINA_TRUE);
125 evas_object_show(m_scroller);
126 evas_object_show(m_items_layout);
128 Evas_Object *del_selected_data_button = elm_button_add(m_items_layout);
129 elm_object_style_set(del_selected_data_button, "basic_button");
130 evas_object_smart_callback_add(del_selected_data_button, "clicked", _del_selected_data_clicked_cb, (void*)id);
131 elm_layout_content_set(m_items_layout, "del_selected_data_click", del_selected_data_button);
133 Evas_Object *reset_mv_button = elm_button_add(m_items_layout);
134 elm_object_style_set(reset_mv_button, "basic_button");
135 evas_object_smart_callback_add(reset_mv_button, "clicked", _reset_mv_clicked_cb, (void*)id);
136 elm_layout_content_set(m_items_layout, "reset_mv_click", reset_mv_button);
138 Evas_Object *reset_browser_button = elm_button_add(m_items_layout);
139 elm_object_style_set(reset_browser_button, "basic_button");
140 evas_object_smart_callback_add(reset_browser_button, "clicked", _reset_browser_clicked_cb, (void*)id);
141 elm_layout_content_set(m_items_layout, "reset_browser_click", reset_browser_button);
144 Evas_Object *cache_checkbox = elm_check_add(m_items_layout);
145 elm_layout_content_set(m_items_layout, "cache_cb", cache_checkbox);
146 elm_check_state_set(cache_checkbox, EINA_TRUE);
147 edje_object_signal_callback_add(elm_layout_edje_get(m_items_layout), "mouse,clicked,1", "cache_cb_text", __checkbox_label_click_cb, (void*)id);
149 Evas_Object *cookies_checkbox = elm_check_add(m_items_layout);
150 elm_layout_content_set(m_items_layout, "cookies_cb", cookies_checkbox);
151 elm_check_state_set(cookies_checkbox, EINA_TRUE);
152 edje_object_signal_callback_add(elm_layout_edje_get(m_items_layout), "mouse,clicked,1", "cookies_cb_text", __checkbox_label_click_cb, (void*)id);
154 Evas_Object *history_checkbox = elm_check_add(m_items_layout);
155 elm_layout_content_set(m_items_layout, "history_cb", history_checkbox);
156 elm_check_state_set(history_checkbox, EINA_TRUE);
157 edje_object_signal_callback_add(elm_layout_edje_get(m_items_layout), "mouse,clicked,1", "history_cb_text", __checkbox_label_click_cb, (void*)id);
159 Evas_Object *accept_all_rb = elm_radio_add(m_items_layout);
160 elm_object_style_set(accept_all_rb, "settings_radio");
161 elm_layout_content_set(m_items_layout, "accept_all_rb", accept_all_rb);
162 Evas_Object *sharingRequestGroup = accept_all_rb;
163 elm_radio_state_value_set(accept_all_rb, SR_ACCEPT_ALL);
165 Evas_Object *ask_rb = elm_radio_add(m_items_layout);
166 elm_object_style_set(ask_rb, "settings_radio");
167 elm_layout_content_set(m_items_layout, "ask_rb", ask_rb);
168 elm_radio_group_add(ask_rb, sharingRequestGroup);
169 elm_radio_state_value_set(ask_rb, SR_ASK);
171 Evas_Object *sr_disable_rb = elm_radio_add(m_items_layout);
172 elm_object_style_set(sr_disable_rb, "settings_radio");
173 elm_layout_content_set(m_items_layout, "sr_disable_rb", sr_disable_rb);
174 elm_radio_group_add(sr_disable_rb, sharingRequestGroup);
175 elm_radio_state_value_set(sr_disable_rb, SR_DISABLE);
177 Evas_Object *bs_enable_rb = elm_radio_add(m_items_layout);
178 elm_object_style_set(bs_enable_rb, "settings_radio");
179 elm_layout_content_set(m_items_layout, "bs_enable_rb", bs_enable_rb);
180 Evas_Object *bookmarkSyncGroup = bs_enable_rb;
181 elm_radio_state_value_set(bs_enable_rb, BS_ENABLE);
183 Evas_Object *bs_disable_rb = elm_radio_add(m_items_layout);
184 elm_object_style_set(bs_disable_rb, "settings_radio");
185 elm_layout_content_set(m_items_layout, "bs_disable_rb", bs_disable_rb);
186 elm_radio_group_add(bs_disable_rb, bookmarkSyncGroup);
187 elm_radio_state_value_set(bs_disable_rb, BS_DISABLE);
189 Evas_Object *ts_enable_rb = elm_radio_add(m_items_layout);
190 elm_object_style_set(ts_enable_rb, "settings_radio");
191 elm_layout_content_set(m_items_layout, "ts_enable_rb", ts_enable_rb);
192 Evas_Object *tabSyncGroup = ts_enable_rb;
193 elm_radio_state_value_set(ts_enable_rb, TS_ENABLE);
195 Evas_Object *ts_disable_rb = elm_radio_add(m_items_layout);
196 elm_object_style_set(ts_disable_rb, "settings_radio");
197 elm_layout_content_set(m_items_layout, "ts_disable_rb", ts_disable_rb);
198 elm_radio_group_add(ts_disable_rb, tabSyncGroup);
199 elm_radio_state_value_set(ts_disable_rb, TS_DISABLE);
202 Evas_Object* SettingsUI::listActionBarContentGet(void* data, Evas_Object* obj , const char* part)
204 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
206 const char *part_name = "close_click";
207 static const int part_name_len = strlen(part_name);
208 if (!strncmp(part_name, part, part_name_len)) {
209 Evas_Object *close_click = elm_button_add(obj);
210 elm_object_style_set(close_click, "basic_button");
211 evas_object_smart_callback_add(close_click, "clicked", SettingsUI::close_clicked_cb, data);
218 void SettingsUI::__checkbox_label_click_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
220 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
222 ItemData *id = static_cast<ItemData*>(data);
224 if(strcmp(source, "cache_cb_text") == 0 ){
225 Evas_Object *cache_check = elm_layout_content_get(id->settingsUI->m_items_layout, "cache_cb");
226 elm_check_state_set(cache_check, !elm_check_state_get(cache_check));
228 else if (strcmp(source, "cookies_cb_text") == 0 ){
229 Evas_Object *cookies_check = elm_layout_content_get(id->settingsUI->m_items_layout, "cookies_cb");
230 elm_check_state_set(cookies_check, !elm_check_state_get(cookies_check));
232 else if (strcmp(source, "history_cb_text") == 0 ){
233 Evas_Object *history_check = elm_layout_content_get(id->settingsUI->m_items_layout, "history_cb");
234 elm_check_state_set(history_check, !elm_check_state_get(history_check));
237 BROWSER_LOGD("[%s:%d] - no matched source", __PRETTY_FUNCTION__, __LINE__);
242 void SettingsUI::close_clicked_cb(void* data, Evas_Object*, void*)
244 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
246 ItemData * id = static_cast<ItemData*>(data);
247 id->settingsUI->closeSettingsUIClicked(std::string());
248 id->settingsUI->clearItems();
252 void SettingsUI::hide()
254 evas_object_hide(elm_layout_content_get(m_settings_layout, "action_bar_swallow"));
255 evas_object_hide(elm_layout_content_get(m_settings_layout, "settings_scroller_swallow"));
256 evas_object_hide(m_settings_layout);
259 void SettingsUI::_del_selected_data_clicked_cb(void *data, Evas_Object*, void*)
261 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
263 ItemData *id = static_cast<ItemData*>(data);
264 Evas_Object *cache_check = elm_layout_content_get(id->settingsUI->m_items_layout, "cache_cb");
265 Evas_Object *cookies_check = elm_layout_content_get(id->settingsUI->m_items_layout, "cookies_cb");
266 Evas_Object *history_check = elm_layout_content_get(id->settingsUI->m_items_layout, "history_cb");
268 elm_check_state_get(cache_check) ? type += "_CACHE" : "";
269 elm_check_state_get(cookies_check) ? type += "_COOKIES" : "";
270 elm_check_state_get(history_check) ? type += "_HISTORY" : "";
271 id->settingsUI->deleteSelectedDataClicked(type);
275 void SettingsUI::_reset_mv_clicked_cb(void *data, Evas_Object*, void*)
277 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
279 ItemData* itemData = static_cast<ItemData*>(data);
280 itemData->settingsUI->resetMostVisitedClicked(std::string());
284 void SettingsUI::_reset_browser_clicked_cb(void *data, Evas_Object*, void*)
286 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
288 ItemData* itemData = static_cast<ItemData*>(data);
289 itemData->settingsUI->resetBrowserClicked(std::string());
293 void SettingsUI::clearItems()
295 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
297 elm_genlist_clear(m_genListActionBar);