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://www.tizenopensource.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.
18 * @file download-manager-view.cpp
19 * @author Jungki Kwak (jungki.kwak@samsung.com)
20 * @brief UI manager class for download list view and delete view
24 #include "download-manager-view.h"
25 #include "download-manager-history-db.h"
26 #include "download-manager-downloadItem.h"
28 static void destroy_window_cb(void *data, Evas_Object *obj, void *event);
31 DOWNLOAD_NOTIFY_SELECTED,
32 DOWNLOAD_NOTIFY_DELETED
35 DownloadView::DownloadView(void)
43 , eoCbItemDelete(NULL)
44 , eoCbItemCancel(NULL)
50 , eoSelectAllLayout(NULL)
51 , eoAllCheckedBox(NULL)
53 , eoNotifyInfoLayout(NULL)
54 , m_allChecked(EINA_FALSE)
60 // FIXME Later : init private members
61 DownloadEngine &engine = DownloadEngine::getInstance();
63 DateUtil &inst = DateUtil::getInstance();
65 dldGenlistGroupStyle.item_style = "grouptitle";
66 dldGenlistGroupStyle.func.text_get = getGenlistGroupLabelCB;
67 dldGenlistGroupStyle.func.content_get = NULL;
68 dldGenlistGroupStyle.func.state_get = NULL;
69 dldGenlistGroupStyle.func.del = NULL;
71 m_today.setType(DATETIME::DATE_TYPE_TODAY);
72 m_yesterday.setType(DATETIME::DATE_TYPE_YESTERDAY);
73 m_previousDay.setType(DATETIME::DATE_TYPE_PREVIOUS);
76 DownloadView::~DownloadView()
79 // DownloadEngine &engine = DownloadEngine::getInstance();
80 // engine.deinitEngine();
83 Evas_Object *DownloadView::create(void)
85 Evas_Object *window = NULL;
86 window = createWindow(PACKAGE);
90 createBackground(window);
98 void DownloadView::destroy()
100 DownloadEngine &engine = DownloadEngine::getInstance();
101 engine.deinitEngine();
104 void DownloadView::show()
107 #ifdef _SILENT_LAUNCH
108 evas_object_show(eoWindow);
110 elm_win_raise(eoWindow);
111 handleUpdateDateGroupType(NULL);
114 void DownloadView::hide()
118 #ifndef _TIZEN_PUBLIC
122 if (isGenlistEditMode()) {
123 hideGenlistEditMode();
125 #ifdef _SILENT_LAUNCH
126 evas_object_hide(eoWindow);
128 elm_win_lower(eoWindow);
131 void DownloadView::activateWindow()
139 #ifndef _TIZEN_PUBLIC
140 void DownloadView::rotateWindow(int angle)
143 elm_win_rotation_with_resize_set(eoWindow, angle);
147 void DownloadView::showViewItem(int id, const char *title)
152 /* This is called by AUL view mode */
153 void DownloadView::playContent(int id, const char *title)
158 void DownloadView::setIndicator(Evas_Object *window)
160 elm_win_indicator_mode_set(window, ELM_WIN_INDICATOR_SHOW);
163 Evas_Object *DownloadView::createWindow(const char *windowName)
165 eoWindow = elm_win_add(NULL, windowName, ELM_WIN_BASIC);
167 elm_win_title_set(eoWindow, __("IDS_BR_HEADER_DOWNLOAD_MANAGER"));
168 elm_win_borderless_set(eoWindow, EINA_TRUE);
169 elm_win_conformant_set(eoWindow, 1);
170 evas_object_smart_callback_add(eoWindow, "delete,request",
171 destroy_window_cb, static_cast<void*>(this));
176 Evas_Object *DownloadView::createBackground(Evas_Object *window)
181 eoBackground = elm_bg_add(window);
183 evas_object_size_hint_weight_set(eoBackground, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
184 elm_win_resize_object_add(window, eoBackground);
185 evas_object_show(eoBackground);
187 DP_LOGE("Fail to create bg object");
192 Evas_Object *DownloadView::createLayout(Evas_Object *parent)
195 DP_LOGE("Invalid Paramter");
199 eoLayout = elm_layout_add(parent);
201 if (!elm_layout_theme_set(eoLayout, "layout", "application", "default" ))
202 DP_LOGE("Fail to set elm_layout_theme_set");
204 evas_object_size_hint_weight_set(eoLayout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
205 elm_win_resize_object_add(parent, eoLayout);
207 edje_object_signal_emit(elm_layout_edje_get(eoLayout), "elm,state,show,indicator", "elm");
208 evas_object_show(eoLayout);
210 DP_LOGE("Fail to create layout");
215 void DownloadView::createView()
220 if (m_viewItemCount < 1)
224 void DownloadView::createNaviBar()
227 eoNaviBar = elm_naviframe_add(eoLayout);
228 elm_object_part_content_set(eoLayout, "elm.swallow.content", eoNaviBar);
231 eoNaviBarItem = elm_naviframe_item_push(eoNaviBar,
232 __("IDS_BR_HEADER_DOWNLOAD_MANAGER"),eoBackBtn, NULL, eoBoxLayout, NULL);
234 evas_object_show(eoNaviBar);
237 void DownloadView::createBackBtn()
240 eoBackBtn = elm_button_add(eoNaviBar);
241 elm_object_style_set(eoBackBtn, "naviframe/end_btn/default");
242 evas_object_smart_callback_add(eoBackBtn, "clicked", backBtnCB,NULL);
243 evas_object_show(eoBackBtn);
246 void DownloadView::createControlBar()
250 eoControlBar = elm_toolbar_add(eoNaviBar);
251 if (eoControlBar == NULL)
253 elm_toolbar_shrink_mode_set(eoControlBar, ELM_TOOLBAR_SHRINK_EXPAND);
254 eoCbItemDelete = elm_toolbar_item_append(eoControlBar, NULL,
255 S_("IDS_COM_OPT_DELETE"), cbItemDeleteCB, eoNaviBar);
256 eoCbItemEmpty = elm_toolbar_item_append(eoControlBar, NULL, NULL, NULL, NULL);
257 elm_object_item_part_content_set(eoNaviBarItem, "controlbar",
259 elm_object_item_disabled_set(eoCbItemDelete, EINA_TRUE);
260 elm_object_item_disabled_set(eoCbItemEmpty, EINA_TRUE);
261 evas_object_show(eoControlBar);
264 void DownloadView::createBox()
267 eoBoxLayout = elm_layout_add(eoNaviBar);
268 elm_layout_theme_set(eoBoxLayout, "layout", "application", "noindicator");
269 evas_object_size_hint_weight_set(eoBoxLayout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
271 eoBox = elm_box_add(eoBoxLayout);
272 elm_object_part_content_set(eoBoxLayout, "elm.swallow.content", eoBox );
274 evas_object_show(eoBox);
275 evas_object_show(eoBoxLayout);
278 void DownloadView::createList()
281 eoDldList = elm_genlist_add(eoBoxLayout);
282 DP_LOGD("create::eoDldList[%p]",eoDldList);
283 /* When using ELM_LIST_LIMIT, the window size is broken at the landscape mode */
284 evas_object_size_hint_weight_set(eoDldList, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
285 evas_object_size_hint_align_set(eoDldList, EVAS_HINT_FILL, EVAS_HINT_FILL);
286 elm_genlist_homogeneous_set(eoDldList, EINA_TRUE);
287 elm_genlist_block_count_set(eoDldList,8);
289 #ifndef _TIZEN_PUBLIC
290 evas_object_smart_callback_add(eoDldList, "drag,start,right", sweepRightCB, NULL);
291 evas_object_smart_callback_add(eoDldList, "drag,start,left", sweepLeftCB, NULL);
293 elm_box_pack_end(eoBox, eoDldList);
294 evas_object_show(eoDldList);
297 void destroy_window_cb(void *data, Evas_Object *obj, void *event)
303 void DownloadView::changedRegion()
305 DateUtil &inst = DateUtil::getInstance();
307 elm_genlist_realized_items_update(eoDldList);
310 void DownloadView::attachViewItem(ViewItem *viewItem)
313 if (m_viewItemCount < 1) {
318 addViewItemToGenlist(viewItem);
323 void DownloadView::detachViewItem(ViewItem *viewItem)
325 DP_LOG("delete viewItem[%p]",viewItem);
330 if (!isGenlistEditMode() &&
331 (m_viewItemCount < 1))
335 void DownloadView::update()
337 Elm_Object_Item *it = NULL;
340 DP_LOGE("download list is NULL");
343 it = elm_genlist_first_item_get(eoDldList);
345 DP_LOGD("glItem[%p]",it);
346 elm_genlist_item_update(it);
347 it = elm_genlist_item_next_get(it);
351 void DownloadView::update(ViewItem *viewItem)
356 DP_LOG("DownloadView::update viewItem [%p]", viewItem);
357 elm_genlist_item_update(viewItem->genlistItem());
360 void DownloadView::update(Elm_Object_Item *glItem)
365 DP_LOG("DownloadView::update glItem [%p]", glItem);
366 elm_genlist_item_update(glItem);
369 #ifndef _TIZEN_PUBLIC
370 ViewItem *DownloadView::findViewItemForGenlistItem(Elm_Object_Item *glItem)
372 Elm_Object_Item *it = NULL;
373 ViewItem *viewItem = NULL;
375 DP_LOGE("download list is NULL");
378 it = elm_genlist_first_item_get(eoDldList);
380 /* don't search group item */
381 if (elm_genlist_item_select_mode_get(it) !=
382 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY && it == glItem) {
383 viewItem = (ViewItem *)elm_object_item_data_get(it);
386 it = elm_genlist_item_next_get(it);
393 void DownloadView::addViewItemToGenlist(ViewItem *viewItem)
396 handleUpdateDateGroupType(viewItem);
397 createGenlistItem(viewItem);
400 void DownloadView::createGenlistItem(ViewItem *viewItem)
402 Elm_Object_Item *glItem = NULL;
403 Elm_Object_Item *glGroupItem = NULL;
404 /* EAPI Elm_Object_Item *elm_genlist_item_prepend(
406 * const Elm_Genlist_Item_Class *itc,
408 * Elm_Object_Item *parent,
409 * Elm_Genlist_Item_Type flags,
410 * Evas_Smart_Cb func,
411 * const void *func_data) EINA_ARG_NONNULL(1); */
412 glGroupItem = getGenlistGroupItem(viewItem->dateGroupType());
413 DP_LOGD("group item[%p]",glGroupItem);
415 DateGroup *dateGrpObj = getDateGroupObj(viewItem->dateGroupType());
416 if (!viewItem->isFinished()) {
417 glGroupItem = elm_genlist_item_prepend(
419 &dldGenlistGroupStyle,
420 static_cast<const void*>(dateGrpObj),
422 ELM_GENLIST_ITEM_GROUP,
426 /* Download History Item */
427 glGroupItem = elm_genlist_item_append(
429 &dldGenlistGroupStyle,
430 static_cast<const void*>(dateGrpObj),
432 ELM_GENLIST_ITEM_GROUP,
437 DP_LOGE("Fail to add a genlist group item");
439 elm_genlist_item_select_mode_set(glGroupItem,
440 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
441 setGenlistGroupItem(viewItem->dateGroupType(), glGroupItem);
443 increaseGenlistGroupCount(viewItem->dateGroupType());
444 if (!viewItem->isFinished()) {
445 glItem = elm_genlist_item_insert_after(
447 viewItem->elmGenlistStyle(),
448 static_cast<const void*>(viewItem),
451 ELM_GENLIST_ITEM_NONE,
453 static_cast<const void*>(viewItem));
455 /* Download History Item */
456 glItem = elm_genlist_item_append(
458 viewItem->elmGenlistStyle(),
459 static_cast<const void*>(viewItem),
461 ELM_GENLIST_ITEM_NONE,
463 static_cast<const void*>(viewItem));
466 DP_LOGE("Fail to add a genlist item");
468 DP_LOGD("genlist groupItem[%p] item[%p] viewItem[%p]", glGroupItem, glItem, viewItem);
469 viewItem->setGenlistItem(glItem);
470 /* Move scrollbar to top.
471 * When groupItem means today group in case of addtion of download link item
473 if (!viewItem->isFinished())
474 elm_genlist_item_show(glGroupItem, ELM_GENLIST_ITEM_SCROLLTO_TOP);
477 void DownloadView::showEmptyView()
480 if (!eoEmptyNoContent) {
481 eoEmptyNoContent = elm_layout_add(eoLayout);
482 elm_layout_theme_set(eoEmptyNoContent, "layout", "nocontents", "text");
483 evas_object_size_hint_weight_set(eoEmptyNoContent, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
484 evas_object_size_hint_align_set(eoEmptyNoContent, EVAS_HINT_FILL, EVAS_HINT_FILL);
485 elm_object_part_text_set(eoEmptyNoContent, "elm.text",
486 __("IDS_DL_BODY_NO_DOWNLOADS"));
487 evas_object_size_hint_weight_set (eoEmptyNoContent,
488 EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
491 elm_box_unpack(eoBox,eoDldList);
493 DP_LOGD("del::eoDldList[%p]",eoDldList);
494 evas_object_del(eoDldList);
497 elm_box_pack_start(eoBox, eoEmptyNoContent);
499 evas_object_show(eoEmptyNoContent);
500 elm_object_item_disabled_set(eoCbItemDelete, EINA_TRUE);
503 void DownloadView::hideEmptyView()
506 if(eoEmptyNoContent) {
507 elm_box_unpack(eoBox, eoEmptyNoContent);
508 evas_object_del(eoEmptyNoContent);
509 eoEmptyNoContent = NULL;
511 elm_object_item_disabled_set(eoCbItemDelete, EINA_FALSE);
514 bool DownloadView::isGenlistEditMode()
516 return (bool)elm_genlist_decorate_mode_get(eoDldList);
519 #ifndef _TIZEN_PUBLIC
520 void DownloadView::cancelSweepEvent()
524 m_sweepedItem->sweepLeft();
525 m_sweepedItem = NULL;
530 void DownloadView::createSelectAllLayout()
532 eoSelectAllLayout = elm_layout_add(eoBox);
533 elm_layout_theme_set(eoSelectAllLayout, "genlist", "item",
534 "select_all/default");
535 evas_object_size_hint_weight_set(eoSelectAllLayout, EVAS_HINT_EXPAND,
537 evas_object_size_hint_align_set(eoSelectAllLayout, EVAS_HINT_FILL,
539 evas_object_event_callback_add(eoSelectAllLayout, EVAS_CALLBACK_MOUSE_DOWN,
540 selectAllClickedCB, NULL);
541 eoAllCheckedBox = elm_check_add(eoSelectAllLayout);
542 elm_check_state_pointer_set(eoAllCheckedBox, &m_allChecked);
543 evas_object_smart_callback_add(eoAllCheckedBox, "changed",
544 selectAllChangedCB, NULL);
545 evas_object_propagate_events_set(eoAllCheckedBox, EINA_FALSE);
546 elm_object_part_content_set(eoSelectAllLayout, "elm.icon", eoAllCheckedBox);
547 elm_object_text_set(eoSelectAllLayout, S_("IDS_COM_BODY_SELECT_ALL"));
548 elm_box_pack_start(eoBox, eoSelectAllLayout);
549 evas_object_show(eoSelectAllLayout);
550 m_allChecked = EINA_FALSE;
553 void DownloadView::changeAllCheckedValue()
555 m_allChecked = !m_allChecked;
556 elm_check_state_pointer_set(eoAllCheckedBox, &m_allChecked);
557 handleChangedAllCheckedState();
560 void DownloadView::destroyCheckedItem()
562 Eina_List *list = NULL;
563 Elm_Object_Item *it = NULL;
564 ViewItem *item = NULL;
565 int checkedCount = 0;
566 queue <unsigned int> deleteQueue;
570 it = elm_genlist_first_item_get(eoDldList);
573 item = (ViewItem *)elm_object_item_data_get(it);
574 /* elm_genlist_item_select_mode_get is needed to check group item */
575 if (elm_genlist_item_select_mode_get(it) !=
576 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY &&
577 item && item->checkedValue()) {
578 list = eina_list_append(list, it);
580 it = elm_genlist_item_next_get(it);
584 DP_LOGD("There is no delete item");
588 checkedCount = eina_list_count(list);
589 if (checkedCount < 1)
591 DP_LOGD("checkedCount[%d]", checkedCount);
593 for (int i = 0; i < checkedCount; i++)
595 it = (Elm_Object_Item *)eina_list_data_get(list);
597 item = (ViewItem *)elm_object_item_data_get(it);
599 DP_LOGE("genlist item is null");
600 list = eina_list_next(list);
602 deleteQueue.push(item->historyId());
605 DP_LOGE("viewItem is null");
609 eina_list_free(list);
611 DownloadHistoryDB::deleteMultipleItem(deleteQueue);
612 showNotifyInfo(DOWNLOAD_NOTIFY_DELETED, checkedCount);
613 hideGenlistEditMode();
616 void DownloadView::showGenlistEditMode()
619 #ifndef _TIZEN_PUBLIC
622 /* Initialize notify info widget */
624 elm_object_item_text_set(eoNaviBarItem, S_("IDS_COM_OPT_DELETE"));
625 /* Change layoutbackground color to edit mode color */
626 elm_object_style_set(eoBackground, "edit_mode");
627 /* Disable the back button of control bar */
628 elm_object_item_part_content_unset(eoNaviBarItem, "prev_btn");
629 destroyEvasObj(eoBackBtn);
632 elm_object_item_del(eoCbItemEmpty);
633 eoCbItemCancel = elm_toolbar_item_append(eoControlBar, NULL,
634 S_("IDS_COM_SK_CANCEL"), cbItemCancelCB, eoNaviBar);
636 /* Append 'Select All' layout */
637 createSelectAllLayout();
638 /* Set reorder end edit mode */
639 elm_genlist_reorder_mode_set(eoDldList, EINA_TRUE);
640 elm_genlist_decorate_mode_set(eoDldList, EINA_TRUE);
641 /* This means even if the ouside of checked box is selected,
642 it is same to click a check box. */
643 elm_genlist_select_mode_set(eoDldList, ELM_OBJECT_SELECT_MODE_ALWAYS);
645 Elm_Object_Item *it = NULL;
646 ViewItem *viewItem = NULL;
647 it = elm_genlist_first_item_get(eoDldList);
649 viewItem = (ViewItem *)elm_object_item_data_get(it);
650 if (elm_genlist_item_select_mode_get(it) !=
651 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY &&
652 viewItem && !(viewItem->isFinished()))
653 elm_object_item_disabled_set(it, EINA_TRUE);
654 it = elm_genlist_item_next_get(it);
656 elm_object_item_disabled_set(eoCbItemDelete, EINA_TRUE);
659 void DownloadView::hideGenlistEditMode()
663 elm_object_item_text_set(eoNaviBarItem, __("IDS_BR_HEADER_DOWNLOAD_MANAGER"));
664 elm_object_style_set(eoBackground, "default");
666 /* Recreate back button */
668 elm_object_item_part_content_set(eoNaviBarItem, "prev_btn", eoBackBtn);
670 if (eoCbItemCancel) {
671 elm_object_item_del(eoCbItemCancel);
672 eoCbItemCancel = NULL;
674 eoCbItemEmpty = elm_toolbar_item_append(eoControlBar, NULL, NULL, NULL, NULL);
675 elm_object_item_disabled_set(eoCbItemEmpty, EINA_TRUE);
677 elm_box_unpack(eoBox, eoSelectAllLayout);
679 destroyEvasObj(eoAllCheckedBox);
680 destroyEvasObj(eoSelectAllLayout);
682 elm_genlist_reorder_mode_set(eoDldList, EINA_FALSE);
683 elm_genlist_decorate_mode_set(eoDldList, EINA_FALSE);
684 elm_genlist_select_mode_set(eoDldList, ELM_OBJECT_SELECT_MODE_DEFAULT);
686 Elm_Object_Item *it = NULL;
687 ViewItem *viewItem = NULL;
688 it = elm_genlist_first_item_get(eoDldList);
690 viewItem = (ViewItem *)elm_object_item_data_get(it);
691 if (elm_genlist_item_select_mode_get(it) !=
692 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY && viewItem) {
693 if (elm_object_item_disabled_get(it))
694 elm_object_item_disabled_set(it, EINA_FALSE);
695 viewItem->setCheckedValue(EINA_FALSE);
696 viewItem->setCheckedBtn(NULL);
698 it = elm_genlist_item_next_get(it);
701 m_allChecked = EINA_FALSE;
703 if (m_viewItemCount < 1) {
704 elm_object_item_disabled_set(eoCbItemDelete, EINA_TRUE);
707 elm_object_item_disabled_set(eoCbItemDelete, EINA_FALSE);
710 void DownloadView::handleChangedAllCheckedState()
712 int checkedCount = 0;
713 Elm_Object_Item *it = NULL;
714 ViewItem *viewItem = NULL;
715 it = elm_genlist_first_item_get(eoDldList);
717 viewItem = (ViewItem *)elm_object_item_data_get(it);
718 if (elm_genlist_item_select_mode_get(it) !=
719 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY && viewItem) {
720 if (viewItem->isFinished()) {
721 viewItem->setCheckedValue(m_allChecked);
722 viewItem->updateCheckedBtn();
726 it = elm_genlist_item_next_get(it);
729 if (m_allChecked && checkedCount > 0) {
730 elm_object_item_disabled_set(eoCbItemDelete, EINA_FALSE);
731 showNotifyInfo(DOWNLOAD_NOTIFY_SELECTED, checkedCount);
733 elm_object_item_disabled_set(eoCbItemDelete, EINA_TRUE);
734 showNotifyInfo(DOWNLOAD_NOTIFY_SELECTED, 0);
738 void DownloadView::handleCheckedState()
740 int checkedCount = 0;
741 int deleteAbleTotalCount = 0;
745 Elm_Object_Item *it = NULL;
746 ViewItem *viewItem = NULL;
747 it = elm_genlist_first_item_get(eoDldList);
749 viewItem = (ViewItem *)elm_object_item_data_get(it);
750 if (elm_genlist_item_select_mode_get(it) !=
751 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY && viewItem) {
752 if (viewItem->checkedValue())
754 if (viewItem->isFinished())
755 deleteAbleTotalCount++;
757 it = elm_genlist_item_next_get(it);
760 if (checkedCount == deleteAbleTotalCount)
761 m_allChecked = EINA_TRUE;
763 m_allChecked = EINA_FALSE;
764 elm_check_state_pointer_set(eoAllCheckedBox, &m_allChecked);
766 if (checkedCount == 0) {
767 elm_object_item_disabled_set(eoCbItemDelete, EINA_TRUE);
770 elm_object_item_disabled_set(eoCbItemDelete, EINA_FALSE);
771 showNotifyInfo(DOWNLOAD_NOTIFY_SELECTED, checkedCount);
773 void DownloadView::createNotifyInfo()
776 eoNotifyInfo = elm_notify_add(eoBoxLayout);
777 elm_notify_orient_set(eoNotifyInfo, ELM_NOTIFY_ORIENT_BOTTOM);
778 evas_object_size_hint_weight_set(eoNotifyInfo, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
779 evas_object_size_hint_align_set(eoNotifyInfo, EVAS_HINT_FILL, EVAS_HINT_FILL);
780 evas_object_event_callback_add(eoNotifyInfo, EVAS_CALLBACK_SHOW, showNotifyInfoCB, eoLayout);
781 evas_object_event_callback_add(eoNotifyInfo, EVAS_CALLBACK_HIDE, hideNotifyInfoCB, eoLayout);
782 eoNotifyInfoLayout = elm_layout_add(eoNotifyInfo);
783 elm_object_content_set(eoNotifyInfo, eoNotifyInfoLayout);
786 void DownloadView::showNotifyInfo(int type, int selectedCount)
788 #ifndef _TIZEN_PUBLIC
794 #ifndef _TIZEN_PUBLIC
795 angle = elm_win_rotation_get(eoWindow);
798 if (selectedCount == 0) {
806 #ifndef _TIZEN_PUBLIC
807 if (angle == 0 || angle == 180)
808 elm_layout_theme_set(eoNotifyInfoLayout, "standard", "selectioninfo",
809 "vertical/bottom_12");
811 elm_layout_theme_set(eoNotifyInfoLayout, "standard", "selectioninfo",
812 "horizontal/bottom_12");
814 elm_layout_theme_set(eoNotifyInfoLayout, "standard", "selectioninfo",
815 "vertical/bottom_12");
818 if (type == DOWNLOAD_NOTIFY_SELECTED) {
819 stringstream countStr;
820 countStr << selectedCount;
821 buf = S_("IDS_COM_BODY_SELECTED");
823 buf.append(countStr.str());
825 } else if (type == DOWNLOAD_NOTIFY_DELETED) {
826 buf = S_("IDS_COM_POP_DELETED");
827 elm_notify_timeout_set(eoNotifyInfo, 3);
829 edje_object_part_text_set(_EDJ(eoNotifyInfoLayout), "elm.text", buf.c_str());
830 evas_object_show(eoNotifyInfo);
833 void DownloadView::destroyNotifyInfo()
836 destroyEvasObj(eoNotifyInfoLayout);
837 destroyEvasObj(eoNotifyInfo);
838 eoNotifyInfoLayout = NULL;
842 /* Static callback function */
843 void DownloadView::showNotifyInfoCB(void *data, Evas *evas, Evas_Object *obj,
846 Evas_Object *layout = (Evas_Object *)data;
848 DP_LOGE("data is NULL");
851 edje_object_signal_emit(_EDJ(layout), "elm,layout,content,bottom_padding",
855 void DownloadView::hideNotifyInfoCB(void *data, Evas *evas, Evas_Object *obj,
858 Evas_Object *layout = (Evas_Object *)data;
860 DP_LOGE("data is NULL");
863 edje_object_signal_emit(_EDJ(layout), "elm,layout,content,default", "layout");
866 void DownloadView::selectAllClickedCB(void *data, Evas *evas, Evas_Object *obj,
869 DownloadView &view = DownloadView::getInstance();
871 view.changeAllCheckedValue();
874 void DownloadView::selectAllChangedCB(void *data, Evas_Object *obj,
877 DownloadView &view = DownloadView::getInstance();
879 view.handleChangedAllCheckedState();
882 #ifndef _TIZEN_PUBLIC
883 void DownloadView::sweepRightCB(void *data, Evas_Object *obj, void *event_info)
885 DownloadView& view = DownloadView::getInstance();
887 if (!obj || !event_info) {
888 DP_LOGE("obj or event_info is NULL");
891 if (!elm_genlist_decorate_mode_get(obj)) {
892 Elm_Object_Item *glItem = (Elm_Object_Item *)event_info;
893 ViewItem *viewItem = view.findViewItemForGenlistItem(glItem);
895 if (viewItem->isFinished()) {
896 if (view.sweepedItem())
897 view.sweepedItem()->sweepLeft();
898 viewItem->sweepRight();
899 view.setSweepedItem(viewItem);
902 DP_LOGE("Fail to find view item at sweep mode");
905 DP_LOGD("Unable to sweep right");
908 void DownloadView::sweepLeftCB(void *data, Evas_Object *obj, void *event_info)
910 DownloadView& view = DownloadView::getInstance();
912 if (!obj || !event_info) {
913 DP_LOGE("obj or event_info is NULL");
917 if (!elm_genlist_decorate_mode_get(obj)) {
918 Elm_Object_Item *glItem = (Elm_Object_Item *)event_info;
919 ViewItem *viewItem = view.findViewItemForGenlistItem(glItem);
921 if (viewItem->isFinished()) {
922 viewItem->sweepLeft();
923 view.setSweepedItem(NULL);
926 DP_LOGE("Fail to find view item at sweep mode");
929 DP_LOGD("Unable to sweep left");
933 void DownloadView::backBtnCB(void *data, Evas_Object *obj, void *event_info)
935 DownloadView& view = DownloadView::getInstance();
939 void DownloadView::cbItemDeleteCB(void *data, Evas_Object *obj, void *event_info)
942 DownloadView& view = DownloadView::getInstance();
943 if (!view.isGenlistEditMode())
944 view.showGenlistEditMode();
946 view.destroyCheckedItem();
949 void DownloadView::cbItemCancelCB(void *data, Evas_Object *obj, void *event_info)
951 DownloadView& view = DownloadView::getInstance();
952 view.destroyNotifyInfo();
953 view.hideGenlistEditMode();
956 void DownloadView::genlistClickCB(void *data, Evas_Object *obj, void *event_info)
958 ViewItem *item = reinterpret_cast<ViewItem *>(data);
961 DP_LOGE("data is NULL");
964 item->clickedGenlistItem();
967 void DownloadView::cancelClickCB(void *data, Evas_Object *obj, void *event_info)
969 ViewItem *item = NULL;
974 DP_LOGE("data is NULL");
977 item = reinterpret_cast<ViewItem *>(data);
978 item->requestCancel();
982 void DownloadView::showErrPopup(string &desc)
986 eoPopup = elm_popup_add(eoWindow);
987 evas_object_size_hint_weight_set(eoPopup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
988 elm_object_text_set(eoPopup, desc.c_str());
989 elm_popup_timeout_set(eoPopup, 2);
990 evas_object_smart_callback_add(eoPopup, "response", errPopupResponseCB, NULL);
991 evas_object_show(eoPopup);
994 void DownloadView::errPopupResponseCB(void *data, Evas_Object *obj, void *event_info)
997 DownloadView& view = DownloadView::getInstance();
1001 void DownloadView::removePopup()
1004 destroyEvasObj(eoPopup);
1007 DateGroup *DownloadView::getDateGroupObj(int type)
1009 DateGroup *obj = NULL;
1011 case DATETIME::DATE_TYPE_LATER:
1012 case DATETIME::DATE_TYPE_TODAY:
1015 case DATETIME::DATE_TYPE_YESTERDAY:
1018 case DATETIME::DATE_TYPE_PREVIOUS:
1019 obj = &m_previousDay;
1023 DP_LOGE("Cannot enter here");
1029 Elm_Object_Item *DownloadView::getGenlistGroupItem(int type)
1031 DateGroup *obj = getDateGroupObj(type);
1034 return obj->glGroupItem();
1037 void DownloadView::setGenlistGroupItem(int type, Elm_Object_Item *item)
1039 DateGroup *obj = getDateGroupObj(type);
1042 obj->setGlGroupItem(item);
1045 void DownloadView::increaseGenlistGroupCount(int type)
1047 DateGroup *obj = getDateGroupObj(type);
1050 if (type == DATETIME::DATE_TYPE_TODAY || type == DATETIME::DATE_TYPE_LATER) {
1051 if (m_today.getCount() < 1) {
1052 DateUtil &inst = DateUtil::getInstance();
1053 inst.setTodayStandardTime();
1056 obj->increaseCount();
1057 DP_LOGD("increased count[%d]",obj->getCount());
1060 int DownloadView::getGenlistGroupCount(int type)
1062 DateGroup *obj = getDateGroupObj(type);
1065 DP_LOGD("Group count[%d]",obj->getCount());
1066 return obj->getCount();
1069 void DownloadView::handleGenlistGroupItem(int type)
1071 DateGroup *obj = getDateGroupObj(type);
1074 obj->decreaseCount();
1075 DP_LOGD("count[%d]type[%d]",obj->getCount(),type);
1076 if (obj->getCount() < 1) {
1077 //DP_LOGD("Group Item[%p][%d]", obj->glGroupItem(),type);
1078 elm_object_item_del(obj->glGroupItem());
1079 obj->setGlGroupItem(NULL);
1083 void DownloadView::handleUpdateDateGroupType(ViewItem *viewItem)
1086 DateUtil &inst = DateUtil::getInstance();
1088 diffDays = inst.getDiffDaysFromToday();
1090 /* Update a view item which is added now
1091 * This should be only called when attaching item
1093 viewItem->extractDateGroupType();
1094 } else if (diffDays != 0) {
1096 * Now, it is recreated download items and group items.
1097 * Consider to move only group item later.
1098 * This should be only called from show() function
1101 * Another problem is happend becuase eina list is used repacing with vector */
1104 Elm_Object_Item *it = NULL;
1105 ViewItem *viewItem = NULL;
1106 it = elm_genlist_first_item_get(eoDldList);
1108 viewItem = (ViewItem *)elm_object_item_data_get(it);
1109 if (!viewItem || elm_genlist_item_select_mode_get(it) !=
1110 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY)
1112 viewItem->extractDateGroupType();
1113 createGenlistItem(viewItem);
1114 it = elm_genlist_item_next_get(it);
1118 inst.setTodayStandardTime();
1121 void DownloadView::moveRetryItem(ViewItem *viewItem)
1123 Elm_Object_Item *todayGroupItem = NULL;
1124 Elm_Object_Item *firstItem = NULL;
1127 DP_LOGE("view item is NULL");
1130 firstItem = elm_genlist_first_item_get(eoDldList);
1132 DP_LOGD("groupItem[%p] viewItem[%p]", firstItem, viewItem);
1133 /* This is group item */
1134 if (elm_genlist_item_select_mode_get(firstItem) ==
1135 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY) {
1136 /* The top item is the item after group item */
1137 firstItem = elm_genlist_item_next_get(firstItem);
1138 DP_LOGD("firstItem[%p], present item[%p]", firstItem, viewItem->genlistItem());
1139 if (firstItem == viewItem->genlistItem()) {
1140 DP_LOGD("This is already top item. Don't need to move");
1145 elm_object_item_del(viewItem->genlistItem());
1146 viewItem->setGenlistItem(NULL);
1147 handleGenlistGroupItem(viewItem->dateGroupType());
1148 todayGroupItem = getGenlistGroupItem(DATETIME::DATE_TYPE_TODAY);
1149 if (!todayGroupItem) {
1150 DateGroup *dateGrpObj = getDateGroupObj(DATETIME::DATE_TYPE_TODAY);
1151 todayGroupItem = elm_genlist_item_prepend(
1153 &dldGenlistGroupStyle,
1154 static_cast<const void*>(dateGrpObj),
1156 ELM_GENLIST_ITEM_GROUP,
1159 setGenlistGroupItem(DATETIME::DATE_TYPE_TODAY, todayGroupItem);
1160 if (!todayGroupItem)
1161 DP_LOGE("Fail to add a genlist group item");
1163 elm_genlist_item_select_mode_set(todayGroupItem,
1164 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1166 increaseGenlistGroupCount(DATETIME::DATE_TYPE_TODAY);
1167 Elm_Object_Item *glItem = elm_genlist_item_insert_after(
1169 viewItem->elmGenlistStyle(),
1170 static_cast<const void*>(viewItem),
1173 ELM_GENLIST_ITEM_NONE,
1175 static_cast<const void*>(viewItem));
1177 DP_LOGE("Fail to add a genlist item");
1178 DP_LOGD("genlist groupItem[%p] item[%p] viewItem[%p]", todayGroupItem,
1180 viewItem->setGenlistItem(glItem);
1181 elm_genlist_item_show(todayGroupItem, ELM_GENLIST_ITEM_SCROLLTO_TOP);
1182 viewItem->extractDateGroupType();
1185 char *DownloadView::getGenlistGroupLabel(void *data, Evas_Object *obj, const char *part)
1187 DateGroup *dateGrp = static_cast<DateGroup *>(data);
1189 if(!data || !obj || !part)
1192 DP_LOGD("ViewItem::getListGroupLabel:part[%s] groupDateType[%d] obj[%p]", part, dateGrp->getType(), obj);
1193 if (strncmp(part, "elm.text", strlen("elm.text")) == 0) {
1194 DateUtil &inst = DateUtil::getInstance();
1197 double udateTime = 0;
1198 switch (dateGrp->getType()) {
1199 case DATETIME::DATE_TYPE_PREVIOUS:
1200 msg = S_("IDS_COM_BODY_PREVIOUS_DAYS");
1202 case DATETIME::DATE_TYPE_YESTERDAY:
1203 udateTime = inst.yesterdayTime()*1000;
1204 msg = S_("IDS_COM_BODY_YESTERDAY");
1206 inst.getDateStr(LOCALE_STYLE::FULL_DATE, udateTime, outBuf);
1210 case DATETIME::DATE_TYPE_LATER:
1211 case DATETIME::DATE_TYPE_TODAY:
1212 udateTime = inst.nowTime()*1000;
1213 msg = S_("IDS_COM_BODY_TODAY");
1215 inst.getDateStr(LOCALE_STYLE::FULL_DATE, udateTime, outBuf);
1220 DP_LOGE("Cannot enter here");
1223 return strdup(msg.c_str());
1228 char *DownloadView::getGenlistGroupLabelCB(void *data, Evas_Object *obj, const char *part)
1231 if(!data || !obj || !part)
1234 DownloadView &view = DownloadView::getInstance();
1235 return view.getGenlistGroupLabel(data, obj, part);
1238 void DownloadView::cleanGenlistData()
1240 Elm_Object_Item *grpItem = NULL;
1242 grpItem = m_today.glGroupItem();
1244 elm_object_item_del(grpItem);
1246 grpItem = m_yesterday.glGroupItem();
1248 elm_object_item_del(grpItem);
1249 m_yesterday.initData();
1250 grpItem = m_previousDay.glGroupItem();
1252 elm_object_item_del(grpItem);
1253 m_previousDay.initData();
1254 elm_genlist_clear(eoDldList);