98d59aa1a7ae1cafc227443764a3467c7891672d
[profile/ivi/org.tizen.browser.git] / src / browser-settings / browser-settings-plugin-view.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 #include "browser-settings-plugin-view.h"
18
19 Browser_Settings_Plugin_View::Browser_Settings_Plugin_View(Browser_Settings_Main_View *main_view)
20 :
21         m_genlist(NULL)
22         ,m_back_button(NULL)
23         ,m_run_plugins_check_button(NULL)
24         ,m_main_view(main_view)
25 {
26         BROWSER_LOGD("[%s]", __func__);
27 }
28
29 Browser_Settings_Plugin_View::~Browser_Settings_Plugin_View(void)
30 {
31         BROWSER_LOGD("[%s]", __func__);
32 }
33
34 Eina_Bool Browser_Settings_Plugin_View::init(void)
35 {
36         BROWSER_LOGD("[%s]", __func__);
37
38         if (!_create_main_layout()) {
39                 BROWSER_LOGE("_create_main_layout failed");
40                 return EINA_FALSE;
41         }
42
43         return EINA_TRUE;
44 }
45
46 void Browser_Settings_Plugin_View::__run_plugins_check_button_changed_cb(void *data,
47                                                                 Evas_Object *obj, void *event_info)
48 {
49         BROWSER_LOGD("[%s]", __func__);
50         if (!data)
51                 return;
52
53         Browser_Settings_Plugin_View *plugin_view = (Browser_Settings_Plugin_View *)data;
54
55         const char *key = RUN_PLUGINS_KEY;
56         Eina_Bool state = elm_check_state_get(obj);
57         if (vconf_set_bool(key, state) != 0)
58                 BROWSER_LOGE("Key: [%s], FAILED\n", key);
59 }
60
61 Evas_Object *Browser_Settings_Plugin_View::__genlist_icon_get(void *data,
62                                                 Evas_Object *obj, const char *part)
63 {
64         if (!data)
65                 return NULL;
66
67         genlist_callback_data *callback_data = (genlist_callback_data *)data;
68         Browser_Settings_Plugin_View::menu_type type = callback_data->type;
69         Browser_Settings_Plugin_View *plugin_view = (Browser_Settings_Plugin_View *)callback_data->user_data;
70         if (type == BR_RUN_PLUGINS) {
71                 if (!strncmp(part, "elm.icon", strlen("elm.icon"))) {
72                         plugin_view->m_run_plugins_check_button = elm_check_add(obj);
73                         if (!plugin_view->m_run_plugins_check_button) {
74                                 BROWSER_LOGD("elm_check_add failed");
75                                 return NULL;
76                         }
77                         elm_object_style_set(plugin_view->m_run_plugins_check_button, "on&off");
78                         evas_object_propagate_events_set(plugin_view->m_run_plugins_check_button, EINA_FALSE);
79
80                         int run_plugins = 1;
81                         if (vconf_get_bool(RUN_PLUGINS_KEY, &run_plugins) < 0)
82                                 BROWSER_LOGE("vconf_get_bool failed");
83                         elm_check_state_set(plugin_view->m_run_plugins_check_button, run_plugins);
84                         evas_object_smart_callback_add(plugin_view->m_run_plugins_check_button, "changed",
85                                                         __run_plugins_check_button_changed_cb, plugin_view);
86                         return plugin_view->m_run_plugins_check_button;
87                 }
88         }
89
90         return NULL;
91 }
92
93 char *Browser_Settings_Plugin_View::__genlist_label_get(void *data,
94                                         Evas_Object *obj, const char *part)
95 {
96         if (!data)
97                 return NULL;
98
99         genlist_callback_data *callback_data = (genlist_callback_data *)data;
100         Browser_Settings_Plugin_View::menu_type type = callback_data->type;
101         if (type == BR_RUN_PLUGINS) {
102                 if (!strncmp(part, "elm.text", strlen("elm.text"))) {
103                         return strdup(BR_STRING_ENABLE_PLUGINS);
104                 }
105         }
106 }
107
108 void Browser_Settings_Plugin_View::__item_selected_cb(void *data, Evas_Object *obj, void *event_info)
109 {
110         BROWSER_LOGD("[%s]", __func__);
111         if (!data)
112                 return;
113
114         genlist_callback_data *callback_data = (genlist_callback_data *)data;
115         Browser_Settings_Plugin_View::menu_type type = callback_data->type;
116         Browser_Settings_Plugin_View *plugin_view = (Browser_Settings_Plugin_View *)callback_data->user_data;
117
118         if (type == BR_RUN_PLUGINS) {
119                 int value = elm_check_state_get(plugin_view->m_run_plugins_check_button);
120                 elm_check_state_set(plugin_view->m_run_plugins_check_button, !value);
121
122                 __run_plugins_check_button_changed_cb(plugin_view, plugin_view->m_run_plugins_check_button, NULL);
123
124                 elm_genlist_item_selected_set(plugin_view->m_run_plugins_callback_data.it, EINA_FALSE);
125         }
126 }
127
128 void Browser_Settings_Plugin_View::__back_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
129 {
130         BROWSER_LOGD("[%s]", __func__);
131
132         if (elm_naviframe_bottom_item_get(m_navi_bar)
133             != elm_naviframe_top_item_get(m_navi_bar))
134                 elm_naviframe_item_pop(m_navi_bar);
135 }
136
137 Eina_Bool Browser_Settings_Plugin_View::_create_main_layout(void)
138 {
139         BROWSER_LOGD("[%s]", __func__);
140
141         m_genlist = elm_genlist_add(m_navi_bar);
142         if (!m_genlist) {
143                 BROWSER_LOGE("elm_genlist_add failed");
144                 return EINA_FALSE;
145         }
146
147         m_seperator_item_class.item_style = "dialogue/seperator";
148         m_seperator_item_class.func.text_get = NULL;
149         m_seperator_item_class.func.content_get = NULL;
150         m_seperator_item_class.func.del = NULL;
151         m_seperator_item_class.func.state_get = NULL;
152
153         Elm_Object_Item *it = elm_genlist_item_append(m_genlist, &m_seperator_item_class,
154                                                 NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
155         elm_genlist_item_select_mode_set(it, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
156
157         m_1_text_1_icon_item_class.item_style = "dialogue/1text.1icon";
158         m_1_text_1_icon_item_class.func.text_get = __genlist_label_get;
159         m_1_text_1_icon_item_class.func.content_get = __genlist_icon_get;
160         m_1_text_1_icon_item_class.func.del = NULL;
161         m_1_text_1_icon_item_class.func.state_get = NULL;
162
163         m_run_plugins_callback_data.type = BR_RUN_PLUGINS;
164         m_run_plugins_callback_data.user_data = this;
165         m_run_plugins_callback_data.it = elm_genlist_item_append(m_genlist, &m_1_text_1_icon_item_class, &m_run_plugins_callback_data,
166                                                         NULL, ELM_GENLIST_ITEM_NONE, __item_selected_cb, &m_run_plugins_callback_data);
167
168         evas_object_show(m_genlist);
169
170         m_back_button = elm_button_add(m_genlist);
171         if (!m_back_button) {
172                 BROWSER_LOGE("elm_button_add failed");
173                 return EINA_FALSE;
174         }
175         elm_object_style_set(m_back_button, "browser/bookmark_controlbar_back");
176         evas_object_show(m_back_button);
177         evas_object_smart_callback_add(m_back_button, "clicked", __back_button_clicked_cb, this);
178
179         Elm_Object_Item *navi_it = elm_naviframe_item_push(m_navi_bar, BR_STRING_PLUGINS,
180                                                         m_back_button, NULL, m_genlist, "browser_titlebar");
181
182         return EINA_TRUE;
183 }
184