2 * Copyright 2012 Samsung Electronics Co., Ltd
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
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 <dpl/wrt-dao-ro/global_dao_read_only.h>
20 #include <dpl/wrt-dao-rw/global_dao.h>
21 #include <dpl/foreach.h>
22 #include <dpl/assert.h>
24 #include "whitelistview.h"
25 #include "whiteuriview.h"
30 namespace WebAppCommonSetting {
32 char *WhiteListView::getUriStr(void *data,
39 uriData = static_cast<UriData *>(data);
43 if (!strcmp(part, "elm.text.1"))
44 str = uriData->m_uri.c_str();
45 else if (!strcmp(part, "elm.text.2"))
56 Evas_Object *WhiteListView::getUriChk(void *data,
63 uriData = static_cast<UriData *>(data);
67 if (!strcmp(part, "elm.edit.icon.1")) {
68 chk = elm_check_add(obj);
71 elm_check_state_pointer_set(chk, &uriData->m_selected);
72 evas_object_propagate_events_set(chk, EINA_FALSE);
73 evas_object_smart_callback_add(chk,
84 void WhiteListView::delUriData(void *data, Evas_Object */*obj*/)
88 uriData = static_cast<UriData*>(data);
92 void WhiteListView::onBackBtnClicked(void *data,
96 WhiteListView *whitelistview;
98 whitelistview = static_cast<WhiteListView *>(data);
99 Assert(whitelistview);
100 whitelistview->handleBackBtn();
103 void WhiteListView::onEditModeBtnClicked(void *data,
104 Evas_Object */*obj*/,
105 void */*event_info*/)
107 WhiteListView *whitelistview;
109 whitelistview = static_cast<WhiteListView *>(data);
110 Assert(whitelistview);
111 whitelistview->handleEditModeBtn();
114 void WhiteListView::onOptBtnClicked(void *data,
115 Evas_Object */*obj*/,
116 void */*event_info*/)
118 WhiteListView *whitelistview;
120 whitelistview = static_cast<WhiteListView *>(data);
121 Assert(whitelistview);
122 whitelistview->handleOptBtn();
125 void WhiteListView::onUriClicked(void *data,
131 WhiteListView *whiteListView;
133 uriData = static_cast<UriData *>(data);
134 it = static_cast<Elm_Object_Item *>(event_info);
135 Assert(it && uriData);
136 whiteListView = uriData->m_whiteListView;
137 Assert(whiteListView);
139 if (elm_genlist_decorate_mode_get(obj)) {
140 uriData->m_selected = !uriData->m_selected;
141 if (uriData->m_selected)
142 whiteListView->increaseSelectCnt();
144 whiteListView->decreaseSelectCnt();
145 elm_genlist_item_update(it);
147 whiteListView->loadWhiteUriView(&uriData->m_uri);
150 elm_genlist_item_selected_set(it, EINA_FALSE);
153 void WhiteListView::onUriChkClicked(void *data,
154 Evas_Object */*obj*/,
155 void */*event_info*/)
158 WhiteListView *whiteListView;
160 uriData = static_cast<UriData *>(data);
162 whiteListView = uriData->m_whiteListView;
163 Assert(whiteListView);
165 if (uriData->m_selected)
166 whiteListView->increaseSelectCnt();
168 whiteListView->decreaseSelectCnt();
171 void WhiteListView::onSelectAllChkClicked(void *data,
173 void */*event_info*/)
175 WhiteListView *whiteListView;
177 whiteListView = static_cast<WhiteListView *>(data);
178 Assert(whiteListView);
179 whiteListView->selectAll(elm_check_state_get(obj));
182 void WhiteListView::onSelectAllClicked(void *data,
185 void */*event_info*/)
187 WhiteListView *whiteListView;
192 whiteListView = static_cast<WhiteListView *>(data);
193 Assert(whiteListView);
194 chk = elm_object_part_content_get(obj, "elm.icon");
196 state = elm_check_state_get(chk);
197 elm_check_state_set(chk, !state);
198 whiteListView->selectAll(!state);
201 void WhiteListView::onRemoveWhiteUriPopupOk(void *data,
202 Evas_Object */*obj*/,
203 void */*event_info*/)
205 WhiteListView *whiteListView;
207 whiteListView = static_cast<WhiteListView *>(data);
208 Assert(whiteListView);
210 whiteListView->removeWhiteUri();
211 whiteListView->hidePopup();
214 void WhiteListView::onRemoveWhiteUriPopupCancel(void *data,
215 Evas_Object */*obj*/,
216 void */*event_info*/)
218 WhiteListView *whiteListView;
220 whiteListView = static_cast<WhiteListView *>(data);
221 Assert(whiteListView);
223 whiteListView->hidePopup();
226 void WhiteListView::onWhiteUriViewUnload(void *data)
228 WhiteListView *whiteListView;
230 whiteListView = static_cast<WhiteListView *>(data);
231 Assert(whiteListView);
232 whiteListView->delWhiteUriView();
233 whiteListView->reloadUri();
236 void WhiteListView::addUri(DPL::String &uri)
240 static Elm_Genlist_Item_Class itc;
243 itc.item_style = "2text.6";
244 itc.func.text_get = getUriStr;
245 itc.func.content_get = getUriChk;
246 itc.func.state_get = NULL;
247 itc.func.del = delUriData;
248 itc.decorate_all_item_style = "edit_default";
251 uriData = new UriData(this, DPL::ToUTF8String(uri));
252 it = elm_genlist_item_append(m_gl,
254 static_cast<void *>(uriData),
256 ELM_GENLIST_ITEM_NONE,
258 static_cast<void *>(uriData));
264 } catch (const std::bad_alloc &) {
268 Evas_Object *WhiteListView::addToolBar(Evas_Object *parent)
270 Evas_Object *toolBar;
272 toolBar = elm_toolbar_add(parent);
275 elm_object_style_set(toolBar, "naviframe");
276 elm_toolbar_shrink_mode_set(toolBar, ELM_TOOLBAR_SHRINK_EXPAND);
277 m_editModeBtn = elm_toolbar_item_append(toolBar,
280 onEditModeBtnClicked,
282 m_optBtn = elm_toolbar_item_append(toolBar,
288 elm_object_item_disabled_set(m_editModeBtn, EINA_TRUE);
289 elm_object_signal_emit(getBase(), SIG_SHOW_NOCONTENT, SRC_PROG);
295 bool WhiteListView::pushToNaviFrame(void)
298 Evas_Object *toolBar;
303 btn = elm_button_add(m_naviFrame);
307 toolBar = addToolBar(m_naviFrame);
309 evas_object_del(btn);
312 elm_object_style_set(btn, "naviframe/end_btn/default");
313 evas_object_smart_callback_add(btn, "clicked", onBackBtnClicked, this);
314 it = elm_naviframe_item_push(m_naviFrame,
321 evas_object_del(btn);
322 evas_object_del(toolBar);
326 elm_object_item_part_content_set(it, "controlbar", toolBar);
331 void WhiteListView::popFromNaviFrame(void)
334 elm_naviframe_item_pop(m_naviFrame);
337 bool WhiteListView::addNoContent(Evas_Object *ly)
343 eo = elm_layout_add(ly);
346 elm_layout_theme_set(eo, "layout", "nocontents", "full");
347 elm_object_part_text_set(eo, "elm.text", D_("IDS_COM_BODY_NO_CONTENTS"));
348 elm_object_part_content_set(ly, PART_NOCONTENT, eo);
353 bool WhiteListView::addContents(Evas_Object *ly)
357 m_bx = elm_box_add(ly);
361 m_gl = elm_genlist_add(m_bx);
363 evas_object_del(m_bx);
367 evas_object_size_hint_align_set(m_gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
368 evas_object_size_hint_weight_set(m_gl, EVAS_HINT_EXPAND, 1.0);
369 evas_object_show(m_gl);
370 elm_box_pack_end(m_bx, m_gl);
371 elm_object_part_content_set(ly, PART_CONTENT, m_bx);
376 bool WhiteListView::loadView(void)
379 WrtDB::WidgetAccessInfoList uriList;
384 ly = elm_layout_add(m_naviFrame);
387 elm_layout_file_set(ly, EDJFILE, GRP_CONTENT);
389 if (!addNoContent(ly)) {
394 if (!addContents(ly)) {
400 uriList = WrtDB::GlobalDAOReadOnly::GetWhiteURIList();
401 FOREACH(uri, uriList)
404 if (!pushToNaviFrame()) {
412 void WhiteListView::loadWhiteUriView(std::string *uri)
418 m_whiteUriView.Reset(new WhiteUriView(m_naviFrame, *uri));
420 m_whiteUriView.Reset(new WhiteUriView(m_naviFrame));
422 if (!m_whiteUriView->loadView()) {
423 m_whiteUriView.Reset();
426 m_whiteUriView->setUnloadCb(onWhiteUriViewUnload, this);
427 } catch (const std::bad_alloc &) {
431 void WhiteListView::delWhiteUriView(void)
433 m_whiteUriView.Reset();
436 void WhiteListView::reloadUri(void)
438 WrtDB::WidgetAccessInfoList uriList;
440 if (getBase() && m_gl) {
441 elm_genlist_clear(m_gl);
442 uriList = WrtDB::GlobalDAOReadOnly::GetWhiteURIList();
444 FOREACH(uri, uriList)
448 elm_object_item_disabled_set(m_editModeBtn, EINA_TRUE);
449 elm_object_signal_emit(getBase(), SIG_SHOW_NOCONTENT, SRC_PROG);
451 elm_object_item_disabled_set(m_editModeBtn, EINA_FALSE);
452 elm_object_signal_emit(getBase(), SIG_SHOW_CONTENT, SRC_PROG);
457 void WhiteListView::handleEditModeBtn(void)
461 Assert(m_editModeBtn && m_optBtn);
464 if (!elm_genlist_decorate_mode_get(m_gl)) {
465 m_selectAll = elm_layout_add(m_gl);
468 elm_layout_theme_set(m_selectAll,
471 "select_all/default");
472 chk = elm_check_add(m_gl);
474 evas_object_del(m_selectAll);
478 evas_object_propagate_events_set(chk, EINA_FALSE);
479 evas_object_smart_callback_add(chk,
481 onSelectAllChkClicked,
483 evas_object_event_callback_add(m_selectAll,
484 EVAS_CALLBACK_MOUSE_DOWN,
487 elm_object_part_content_set(m_selectAll, "elm.icon", chk);
488 elm_object_part_text_set(m_selectAll, "elm.text", "Select all");
489 evas_object_size_hint_align_set(m_selectAll,
492 evas_object_show(m_selectAll);
493 elm_box_pack_start(m_bx, m_selectAll);
494 elm_object_item_disabled_set(m_editModeBtn, EINA_TRUE);
495 elm_toolbar_item_icon_file_set(m_optBtn, ICON_DELETE, NULL);
496 elm_object_item_disabled_set(m_optBtn, EINA_TRUE);
497 elm_genlist_decorate_mode_set(m_gl, EINA_TRUE);
501 void WhiteListView::handleOptBtn(void)
504 if (elm_genlist_decorate_mode_get(m_gl)) {
505 showPopup("Do you really want to remove selected white URL?",
506 onRemoveWhiteUriPopupOk,
507 onRemoveWhiteUriPopupCancel,
514 void WhiteListView::handleBackBtn(void)
516 if (!elm_genlist_decorate_mode_get(m_gl)) {
519 selectAll(EINA_FALSE);
521 elm_box_unpack(m_bx, m_selectAll);
522 evas_object_del(m_selectAll);
525 Assert(m_editModeBtn && m_optBtn);
527 elm_object_item_disabled_set(m_editModeBtn, EINA_TRUE);
528 elm_object_signal_emit(getBase(), SIG_SHOW_NOCONTENT, SRC_PROG);
530 elm_object_item_disabled_set(m_editModeBtn, EINA_FALSE);
531 elm_object_signal_emit(getBase(), SIG_SHOW_CONTENT, SRC_PROG);
533 elm_toolbar_item_icon_file_set(m_optBtn, ICON_ADD, NULL);
534 elm_object_item_disabled_set(m_optBtn, EINA_FALSE);
535 elm_genlist_decorate_mode_set(m_gl, EINA_FALSE);
539 void WhiteListView::removeWhiteUri(void)
543 Elm_Object_Item *trailIt;
547 it = elm_genlist_first_item_get(m_gl);
549 uriData = static_cast<UriData *>(elm_object_item_data_get(it));
552 trailIt = elm_genlist_item_next_get(it);
553 if (uriData->m_selected) {
554 WrtDB::GlobalDAO::RemoveWhiteURI(uriData->m_uri);
555 /* TODO: deprecated API */
556 //elm_object_item_del(it);
557 elm_object_item_del(it);
567 void WhiteListView::increaseSelectCnt(void)
572 chk = elm_object_part_content_get(m_selectAll, "elm.icon");
576 elm_object_item_disabled_set(m_optBtn, EINA_FALSE);
578 if (m_selectCnt >= m_uriCnt) {
579 m_selectCnt = m_uriCnt;
580 elm_check_state_set(chk, EINA_TRUE);
584 void WhiteListView::decreaseSelectCnt(void)
589 chk = elm_object_part_content_get(m_selectAll, "elm.icon");
595 if (m_selectCnt <= 0)
596 elm_object_item_disabled_set(m_optBtn, EINA_TRUE);
597 elm_check_state_set(chk, EINA_FALSE);
600 void WhiteListView::selectAll(Eina_Bool select)
606 it = elm_genlist_first_item_get(m_gl);
609 uriData = static_cast<UriData *>(elm_object_item_data_get(it));
611 uriData->m_selected = select;
612 it = elm_genlist_item_next_get(it);
615 elm_object_item_disabled_set(m_optBtn, !select);
617 m_selectCnt = m_uriCnt;
620 elm_genlist_realized_items_update(m_gl);
623 bool WhiteListView::showPopup(const char *desc,
625 Evas_Smart_Cb cancel_cb,
628 return m_popup.showPopup(desc, ok_cb, cancel_cb, data);
631 void WhiteListView::hidePopup(void)
636 WhiteListView::WhiteListView(Evas_Object *naviFrame) :
637 m_naviFrame(naviFrame),
646 m_whiteUriView.Reset();
649 WhiteListView::~WhiteListView(void)
653 } /* WebAppCommonSetting */