Tizen 2.1 base
[apps/core/preloaded/wrt-setting.git] / webapp-common / whiteuriview.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://floralicense.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 <Elementary.h>
18 #include <ui-gadget.h>
19
20 #include <dpl/wrt-dao-rw/global_dao.h>
21 #include <dpl/assert.h>
22
23 #include "whiteuriview.h"
24 #include "icons.h"
25
26 namespace WebAppCommonSetting {
27
28 void WhiteUriView::onBackBtnClicked(void *data,
29                                     Evas_Object */*obj*/,
30                                     void */*event_info*/)
31 {
32     WhiteUriView *whiteUriView;
33
34     whiteUriView = static_cast<WhiteUriView *>(data);
35     Assert(whiteUriView);
36     whiteUriView->popFromNaviFrame();
37 }
38
39 void WhiteUriView::onSaveBtnClicked(void *data,
40                                     Evas_Object */*obj*/,
41                                     void */*event_info*/)
42 {
43     WhiteUriView *whiteUriView;
44
45     whiteUriView = static_cast<WhiteUriView *>(data);
46     Assert(whiteUriView);
47     whiteUriView->save();
48 }
49
50 void WhiteUriView::onUriErase(void *data,
51                               Evas_Object */*obj*/,
52                               const char */*emission*/,
53                               const char */*source*/)
54 {
55     Evas_Object *entry;
56
57     entry = static_cast<Evas_Object *>(data);
58     Assert(entry);
59     elm_entry_entry_set(entry, "");
60 }
61
62 void WhiteUriView::onUriFocused(void *data,
63                                 Evas_Object *obj,
64                                 void */*event_info*/)
65 {
66     Evas_Object *ef;
67
68     Assert(obj);
69     ef = static_cast<Evas_Object *>(data);
70     Assert(ef);
71
72     if (!elm_entry_is_empty(obj))
73         elm_object_signal_emit(ef, "elm,state,eraser,show", "elm");
74     elm_object_signal_emit(ef, "elm,state,guidetext,hide", "elm");
75 }
76
77 void WhiteUriView::onUriUnfocused(void *data,
78                                   Evas_Object *obj,
79                                   void */*event_info*/)
80 {
81     Evas_Object *ef;
82
83     Assert(obj);
84     ef = static_cast<Evas_Object *>(data);
85     Assert(ef);
86
87     if (elm_entry_is_empty(obj))
88         elm_object_signal_emit(ef, "elm,state,guidetext,show", "elm");
89     elm_object_signal_emit(ef, "elm,state,eraser,hide", "elm");
90 }
91
92 void WhiteUriView::onUriChanged(void *data,
93                                 Evas_Object *obj,
94                                 void */*event_info*/)
95 {
96     WhiteUriView *whiteUriView;
97     Evas_Object *ef;
98
99     if (!elm_object_focus_get(obj))
100         return;
101     ef = static_cast<Evas_Object *>(evas_object_data_get(obj, "editfield"));
102     Assert(ef);
103
104     if (elm_entry_is_empty(obj))
105         elm_object_signal_emit(ef, "elm,state,eraser,hide", "elm");
106     else
107         elm_object_signal_emit(ef, "elm,state,eraser,show", "elm");
108
109     whiteUriView = static_cast<WhiteUriView *>(data);
110     Assert(whiteUriView);
111     whiteUriView->updateUri(elm_entry_entry_get(obj));
112 }
113
114 void WhiteUriView::onSubDomainReleased(void */*data*/,
115                                        Evas */*e*/,
116                                        Evas_Object *obj,
117                                        void */*event_info*/)
118 {
119     Assert(obj);
120     elm_object_signal_emit(obj, "elm,state,unselected", "elm");
121 }
122
123 void WhiteUriView::onSubDomainClicked(void *data,
124                                       Evas */*e*/,
125                                       Evas_Object *obj,
126                                       void */*event_info*/)
127 {
128     Evas_Object *chk;
129
130     chk = static_cast<Evas_Object *>(data);
131     Assert(obj && chk);
132     elm_check_state_set(chk, !elm_check_state_get(chk));
133     elm_object_signal_emit(obj, "elm,state,selected", "elm");
134 }
135
136 bool WhiteUriView::pushToNaviFrame(void)
137 {
138     Evas_Object *btn;
139     Evas_Object *toolBar;
140     Elm_Object_Item *it;
141
142     Assert(m_naviFrame);
143
144     btn = elm_button_add(m_naviFrame);
145     if (!btn)
146         return false;
147
148     toolBar = addToolBar(m_naviFrame);
149     if (!toolBar) {
150         evas_object_del(btn);
151         return false;
152     }
153     elm_object_style_set(btn, "naviframe/end_btn/default");
154     evas_object_smart_callback_add(btn, "clicked", onBackBtnClicked, this);
155     it = elm_naviframe_item_push(m_naviFrame,
156             m_isModify ? "Modify white URI" : "New white URI",
157             btn,
158             NULL,
159             getBase(),
160             NULL);
161     if (!it) {
162         evas_object_del(btn);
163         evas_object_del(toolBar);
164         return false;
165     }
166
167     elm_object_item_part_content_set(it, "controlbar", toolBar);
168
169
170     return false;
171 }
172
173 void WhiteUriView::popFromNaviFrame(void)
174 {
175     Assert(m_naviFrame);
176     elm_naviframe_item_pop(m_naviFrame);
177 }
178
179 bool WhiteUriView::addUriField(Evas_Object *bx)
180 {
181     Evas_Object *ly;
182     Evas_Object *ef;
183     Evas_Object *entry;
184     const char *str;
185
186     Assert(bx);
187
188     ly = elm_layout_add(bx);
189     if (!ly)
190         return false;
191     elm_layout_theme_set(ly, "layout", "dialogue", "1icon");
192     evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, 0.0);
193     evas_object_size_hint_align_set(ly, EVAS_HINT_FILL, 0.0);
194
195     ef = elm_layout_add(ly);
196     if (!ef) {
197         evas_object_del(ly);
198         return false;
199     }
200     elm_layout_theme_set(ef, "layout", "editfield", "title");
201
202     entry = elm_entry_add(ef);
203     if (!entry) {
204         evas_object_del(ly);
205         return false;
206     }
207     evas_object_data_set(entry, "editfield", static_cast<void *>(ef));
208     elm_entry_single_line_set(entry, EINA_TRUE);
209     elm_object_part_content_set(ef, "elm.swallow.content", entry);
210
211     elm_object_signal_callback_add(ef,
212                                    "elm,eraser,clicked",
213                                    "elm",
214                                    onUriErase,
215                                    static_cast<void *>(entry));
216     evas_object_smart_callback_add(entry,
217                                    "focused",
218                                    onUriFocused,
219                                    static_cast<void *>(ef));
220     evas_object_smart_callback_add(entry,
221                                    "unfocused",
222                                    onUriUnfocused,
223                                    static_cast<void *>(ef));
224     evas_object_smart_callback_add(entry, "changed", onUriChanged, this);
225
226     elm_object_part_text_set(ef, "elm.text", "URI");
227     if (m_isModify) {
228         str = m_uri.c_str();
229         if (str) {
230             elm_entry_entry_set(entry, str);
231             elm_object_signal_emit(ef, "elm,state,guidetext,hide", "elm");
232         }
233     }
234
235     elm_object_part_text_set(ef, "elm.guidetext", "Put white URI");
236     elm_object_part_content_set(ly, "elm.icon", ef);
237     elm_box_pack_end(bx, ly);
238     evas_object_show(ly);
239
240     return true;
241 }
242
243 bool WhiteUriView::addSubDomainField(Evas_Object *bx)
244 {
245     Evas_Object *ly;
246     Evas_Object *chk;
247
248     Assert(bx);
249     ly = elm_layout_add(bx);
250     if (!ly)
251         return false;
252     elm_object_focus_allow_set(ly, EINA_TRUE);
253
254     chk = elm_check_add(ly);
255     if (!chk) {
256         evas_object_del(ly);
257         return false;
258     }
259     elm_check_state_pointer_set(chk, &m_supportSubDomain);
260     evas_object_propagate_events_set(chk, EINA_FALSE);
261     elm_layout_theme_set(ly, "layout", "dialogue", "1text.1icon");
262     elm_object_part_text_set(ly, "elm.text", "Include sub-domains");
263     elm_object_part_content_set(ly, "elm.icon", chk);
264     evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, 0.0);
265     evas_object_size_hint_align_set(ly, EVAS_HINT_FILL, 0.0);
266     evas_object_event_callback_add(ly,
267                                    EVAS_CALLBACK_MOUSE_UP,
268                                    onSubDomainReleased,
269                                    NULL);
270     evas_object_event_callback_add(ly,
271                                    EVAS_CALLBACK_MOUSE_DOWN,
272                                    onSubDomainClicked,
273                                    static_cast<void *>(chk));
274     elm_box_pack_end(bx, ly);
275     evas_object_show(ly);
276
277     return true;
278 }
279
280 Evas_Object *WhiteUriView::addToolBar(Evas_Object *parent)
281 {
282     Evas_Object *toolBar;
283
284     toolBar = elm_toolbar_add(parent);
285     if (!toolBar)
286         return NULL;
287     elm_object_style_set(toolBar, "naviframe");
288     elm_toolbar_shrink_mode_set(toolBar, ELM_TOOLBAR_SHRINK_EXPAND);
289     m_saveBtn = elm_toolbar_item_append(toolBar,
290                                         ICON_SAVE,
291                                         NULL,
292                                         onSaveBtnClicked,
293                                         this);
294
295     if (!m_uri.size())
296         elm_object_item_disabled_set(m_saveBtn, EINA_TRUE);
297
298     return toolBar;
299 }
300
301 bool WhiteUriView::loadView(void)
302 {
303     Evas_Object *win;
304     Evas_Object *conform;
305     Evas_Object *scr;
306     Evas_Object *bx;
307
308     Assert(m_naviFrame);
309     resetBase();
310
311     win = static_cast<Evas_Object *>(ug_get_window());
312     Assert(win);
313
314     elm_win_conformant_set(win, EINA_TRUE);
315     conform = elm_conformant_add(m_naviFrame);
316     if (!conform)
317         return NULL;
318     elm_object_style_set(conform, "internal_layout");
319
320     scr = elm_scroller_add(conform);
321     if (!scr)
322         return false;
323
324     bx = elm_box_add(scr);
325     if (!bx) {
326         evas_object_del(conform);
327         return false;
328     }
329
330     evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, 0.0);
331     evas_object_size_hint_align_set(bx, EVAS_HINT_FILL, 0.0);
332     elm_object_content_set(scr, bx);
333     evas_object_show(bx);
334     evas_object_show(scr);
335     if (!addUriField(bx) || !addSubDomainField(bx)) {
336         evas_object_del(conform);
337         return false;
338     }
339
340     elm_object_content_set(conform, scr);
341     resetBase(conform);
342     pushToNaviFrame();
343
344     return true;
345 }
346
347 void WhiteUriView::save(void)
348 {
349     /* FIXME: what if uri is already exist?
350               there is no error code */
351     WrtDB::GlobalDAO::AddWhiteURI(m_uri, m_supportSubDomain);
352     elm_naviframe_item_pop(m_naviFrame);
353 }
354
355 void WhiteUriView::updateUri(const char *uri)
356 {
357     m_uri.clear();
358     if (uri && strlen(uri)) {
359         m_uri.assign(uri);
360         elm_object_item_disabled_set(m_saveBtn, EINA_FALSE);
361     } else {
362         elm_object_item_disabled_set(m_saveBtn, EINA_TRUE);
363     }
364 }
365
366 WhiteUriView::WhiteUriView(Evas_Object *naviFrame) :
367     m_naviFrame(naviFrame),
368     m_saveBtn(NULL),
369     m_isModify(false),
370     m_supportSubDomain(false)
371 {
372 }
373
374 WhiteUriView::WhiteUriView(Evas_Object *naviFrame,
375                            std::string uri) :
376     m_naviFrame(naviFrame),
377     m_saveBtn(NULL),
378     m_uri(uri),
379     m_isModify(true),
380     m_supportSubDomain(false)
381 {
382 }
383
384 WhiteUriView::~WhiteUriView(void)
385 {
386 }
387
388 } /* WebAppCommonSetting */