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)
51 , eoSelectAllLayout(NULL)
52 , 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();
102 ecore_timer_del(eoNotifyTimer);
105 void DownloadView::show()
108 #ifdef _SILENT_LAUNCH
109 evas_object_show(eoWindow);
111 elm_win_raise(eoWindow);
112 handleUpdateDateGroupType(NULL);
115 void DownloadView::hide()
119 #ifndef _TIZEN_PUBLIC
123 if (isGenlistEditMode()) {
124 hideGenlistEditMode();
126 #ifdef _SILENT_LAUNCH
127 evas_object_hide(eoWindow);
129 elm_win_lower(eoWindow);
132 void DownloadView::activateWindow()
140 #ifndef _TIZEN_PUBLIC
141 void DownloadView::rotateWindow(int angle)
144 elm_win_rotation_with_resize_set(eoWindow, angle);
148 void DownloadView::showViewItem(int id, const char *title)
153 /* This is called by AUL view mode */
154 void DownloadView::playContent(int id, const char *title)
159 void DownloadView::setIndicator(Evas_Object *window)
161 elm_win_indicator_mode_set(window, ELM_WIN_INDICATOR_SHOW);
164 Evas_Object *DownloadView::createWindow(const char *windowName)
166 eoWindow = elm_win_add(NULL, windowName, ELM_WIN_BASIC);
168 elm_win_title_set(eoWindow, __("IDS_BR_HEADER_DOWNLOAD_MANAGER"));
169 elm_win_borderless_set(eoWindow, EINA_TRUE);
170 elm_win_conformant_set(eoWindow, 1);
171 evas_object_smart_callback_add(eoWindow, "delete,request",
172 destroy_window_cb, static_cast<void*>(this));
177 Evas_Object *DownloadView::createBackground(Evas_Object *window)
182 eoBackground = elm_bg_add(window);
184 evas_object_size_hint_weight_set(eoBackground, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
185 elm_win_resize_object_add(window, eoBackground);
186 evas_object_show(eoBackground);
188 DP_LOGE("Fail to create bg object");
193 Evas_Object *DownloadView::createLayout(Evas_Object *parent)
196 DP_LOGE("Invalid Paramter");
200 eoLayout = elm_layout_add(parent);
202 if (!elm_layout_theme_set(eoLayout, "layout", "application", "default" ))
203 DP_LOGE("Fail to set elm_layout_theme_set");
205 evas_object_size_hint_weight_set(eoLayout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
206 elm_win_resize_object_add(parent, eoLayout);
208 edje_object_signal_emit(elm_layout_edje_get(eoLayout), "elm,state,show,indicator", "elm");
209 evas_object_show(eoLayout);
211 DP_LOGE("Fail to create layout");
216 void DownloadView::createView()
221 if (m_viewItemCount < 1)
225 void DownloadView::createNaviBar()
228 eoNaviBar = elm_naviframe_add(eoLayout);
229 elm_object_part_content_set(eoLayout, "elm.swallow.content", eoNaviBar);
232 eoNaviBarItem = elm_naviframe_item_push(eoNaviBar,
233 __("IDS_BR_HEADER_DOWNLOAD_MANAGER"),eoBackBtn, NULL, eoBoxLayout, NULL);
235 evas_object_show(eoNaviBar);
238 void DownloadView::createBackBtn()
241 eoBackBtn = elm_button_add(eoNaviBar);
242 elm_object_style_set(eoBackBtn, "naviframe/end_btn/default");
243 evas_object_smart_callback_add(eoBackBtn, "clicked", backBtnCB,NULL);
244 evas_object_show(eoBackBtn);
247 void DownloadView::createControlBar()
251 eoControlBar = elm_toolbar_add(eoNaviBar);
252 if (eoControlBar == NULL)
254 elm_toolbar_shrink_mode_set(eoControlBar, ELM_TOOLBAR_SHRINK_EXPAND);
255 eoCbItemDelete = elm_toolbar_item_append(eoControlBar, NULL,
256 S_("IDS_COM_OPT_DELETE"), cbItemDeleteCB, eoNaviBar);
257 eoCbItemEmpty = elm_toolbar_item_append(eoControlBar, NULL, NULL, NULL, NULL);
258 elm_object_item_part_content_set(eoNaviBarItem, "controlbar",
260 elm_object_item_disabled_set(eoCbItemDelete, EINA_TRUE);
261 elm_object_item_disabled_set(eoCbItemEmpty, EINA_TRUE);
262 evas_object_show(eoControlBar);
265 void DownloadView::createBox()
268 eoBoxLayout = elm_layout_add(eoNaviBar);
269 elm_layout_file_set(eoBoxLayout,
270 "/opt/apps/com.samsung.download-manager/res/edje/download-manager.edj",
271 "download/selectioninfo");
273 evas_object_size_hint_weight_set(eoBoxLayout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
274 evas_object_size_hint_align_set(eoBoxLayout, EVAS_HINT_FILL, EVAS_HINT_FILL);
276 eoBox = elm_box_add(eoBoxLayout);
277 elm_object_part_content_set(eoBoxLayout, "gen.swallow.contents", eoBox);
279 evas_object_show(eoBox);
280 evas_object_show(eoBoxLayout);
283 void DownloadView::createList()
286 eoDldList = elm_genlist_add(eoBoxLayout);
287 DP_LOGD("create::eoDldList[%p]",eoDldList);
288 /* When using ELM_LIST_LIMIT, the window size is broken at the landscape mode */
289 evas_object_size_hint_weight_set(eoDldList, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
290 evas_object_size_hint_align_set(eoDldList, EVAS_HINT_FILL, EVAS_HINT_FILL);
291 elm_genlist_homogeneous_set(eoDldList, EINA_TRUE);
292 elm_genlist_block_count_set(eoDldList,8);
294 #ifndef _TIZEN_PUBLIC
295 evas_object_smart_callback_add(eoDldList, "drag,start,right", sweepRightCB, NULL);
296 evas_object_smart_callback_add(eoDldList, "drag,start,left", sweepLeftCB, NULL);
298 elm_box_pack_end(eoBox, eoDldList);
299 evas_object_show(eoDldList);
302 void destroy_window_cb(void *data, Evas_Object *obj, void *event)
308 void DownloadView::changedRegion()
310 DateUtil &inst = DateUtil::getInstance();
312 elm_genlist_realized_items_update(eoDldList);
315 void DownloadView::attachViewItem(ViewItem *viewItem)
318 if (m_viewItemCount < 1) {
323 addViewItemToGenlist(viewItem);
328 void DownloadView::detachViewItem(ViewItem *viewItem)
330 DP_LOG("delete viewItem[%p]",viewItem);
335 if (!isGenlistEditMode() &&
336 (m_viewItemCount < 1))
340 void DownloadView::update()
342 Elm_Object_Item *it = NULL;
345 DP_LOGE("download list is NULL");
348 it = elm_genlist_first_item_get(eoDldList);
350 DP_LOGD("glItem[%p]",it);
351 elm_genlist_item_update(it);
352 it = elm_genlist_item_next_get(it);
356 void DownloadView::update(ViewItem *viewItem)
361 DP_LOG("DownloadView::update viewItem [%p]", viewItem);
362 elm_genlist_item_update(viewItem->genlistItem());
365 void DownloadView::update(Elm_Object_Item *glItem)
370 DP_LOG("DownloadView::update glItem [%p]", glItem);
371 elm_genlist_item_update(glItem);
374 #ifndef _TIZEN_PUBLIC
375 ViewItem *DownloadView::findViewItemForGenlistItem(Elm_Object_Item *glItem)
377 Elm_Object_Item *it = NULL;
378 ViewItem *viewItem = NULL;
380 DP_LOGE("download list is NULL");
383 it = elm_genlist_first_item_get(eoDldList);
385 /* don't search group item */
386 if (elm_genlist_item_select_mode_get(it) !=
387 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY && it == glItem) {
388 viewItem = (ViewItem *)elm_object_item_data_get(it);
391 it = elm_genlist_item_next_get(it);
398 void DownloadView::addViewItemToGenlist(ViewItem *viewItem)
401 handleUpdateDateGroupType(viewItem);
402 createGenlistItem(viewItem);
405 void DownloadView::createGenlistItem(ViewItem *viewItem)
407 Elm_Object_Item *glItem = NULL;
408 Elm_Object_Item *glGroupItem = NULL;
409 /* EAPI Elm_Object_Item *elm_genlist_item_prepend(
411 * const Elm_Genlist_Item_Class *itc,
413 * Elm_Object_Item *parent,
414 * Elm_Genlist_Item_Type flags,
415 * Evas_Smart_Cb func,
416 * const void *func_data) EINA_ARG_NONNULL(1); */
417 glGroupItem = getGenlistGroupItem(viewItem->dateGroupType());
418 DP_LOGD("group item[%p]",glGroupItem);
420 DateGroup *dateGrpObj = getDateGroupObj(viewItem->dateGroupType());
421 if (!viewItem->isFinished()) {
422 glGroupItem = elm_genlist_item_prepend(
424 &dldGenlistGroupStyle,
425 static_cast<const void*>(dateGrpObj),
427 ELM_GENLIST_ITEM_GROUP,
431 /* Download History Item */
432 glGroupItem = elm_genlist_item_append(
434 &dldGenlistGroupStyle,
435 static_cast<const void*>(dateGrpObj),
437 ELM_GENLIST_ITEM_GROUP,
442 DP_LOGE("Fail to add a genlist group item");
444 elm_genlist_item_select_mode_set(glGroupItem,
445 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
446 setGenlistGroupItem(viewItem->dateGroupType(), glGroupItem);
448 increaseGenlistGroupCount(viewItem->dateGroupType());
449 if (!viewItem->isFinished()) {
450 glItem = elm_genlist_item_insert_after(
452 viewItem->elmGenlistStyle(),
453 static_cast<const void*>(viewItem),
456 ELM_GENLIST_ITEM_NONE,
458 static_cast<const void*>(viewItem));
460 /* Download History Item */
461 glItem = elm_genlist_item_append(
463 viewItem->elmGenlistStyle(),
464 static_cast<const void*>(viewItem),
466 ELM_GENLIST_ITEM_NONE,
468 static_cast<const void*>(viewItem));
471 DP_LOGE("Fail to add a genlist item");
473 DP_LOGD("genlist groupItem[%p] item[%p] viewItem[%p]", glGroupItem, glItem, viewItem);
474 viewItem->setGenlistItem(glItem);
475 /* Move scrollbar to top.
476 * When groupItem means today group in case of addtion of download link item
478 if (!viewItem->isFinished())
479 elm_genlist_item_show(glGroupItem, ELM_GENLIST_ITEM_SCROLLTO_TOP);
482 void DownloadView::showEmptyView()
485 if (!eoEmptyNoContent) {
486 eoEmptyNoContent = elm_layout_add(eoLayout);
487 elm_layout_theme_set(eoEmptyNoContent, "layout", "nocontents", "text");
488 evas_object_size_hint_weight_set(eoEmptyNoContent, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
489 evas_object_size_hint_align_set(eoEmptyNoContent, EVAS_HINT_FILL, EVAS_HINT_FILL);
490 elm_object_part_text_set(eoEmptyNoContent, "elm.text",
491 __("IDS_DL_BODY_NO_DOWNLOADS"));
492 evas_object_size_hint_weight_set (eoEmptyNoContent,
493 EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
496 elm_box_unpack(eoBox,eoDldList);
498 DP_LOGD("del::eoDldList[%p]",eoDldList);
499 evas_object_del(eoDldList);
502 elm_box_pack_start(eoBox, eoEmptyNoContent);
504 evas_object_show(eoEmptyNoContent);
505 elm_object_item_disabled_set(eoCbItemDelete, EINA_TRUE);
508 void DownloadView::hideEmptyView()
511 if(eoEmptyNoContent) {
512 elm_box_unpack(eoBox, eoEmptyNoContent);
513 evas_object_del(eoEmptyNoContent);
514 eoEmptyNoContent = NULL;
516 elm_object_item_disabled_set(eoCbItemDelete, EINA_FALSE);
519 bool DownloadView::isGenlistEditMode()
521 return (bool)elm_genlist_decorate_mode_get(eoDldList);
524 #ifndef _TIZEN_PUBLIC
525 void DownloadView::cancelSweepEvent()
529 m_sweepedItem->sweepLeft();
530 m_sweepedItem = NULL;
535 void DownloadView::createSelectAllLayout()
537 eoSelectAllLayout = elm_layout_add(eoBox);
538 elm_layout_theme_set(eoSelectAllLayout, "genlist", "item",
539 "select_all/default");
540 evas_object_size_hint_weight_set(eoSelectAllLayout, EVAS_HINT_EXPAND,
542 evas_object_size_hint_align_set(eoSelectAllLayout, EVAS_HINT_FILL,
544 evas_object_event_callback_add(eoSelectAllLayout, EVAS_CALLBACK_MOUSE_DOWN,
545 selectAllClickedCB, NULL);
546 eoAllCheckedBox = elm_check_add(eoSelectAllLayout);
547 elm_check_state_pointer_set(eoAllCheckedBox, &m_allChecked);
548 evas_object_smart_callback_add(eoAllCheckedBox, "changed",
549 selectAllChangedCB, NULL);
550 evas_object_propagate_events_set(eoAllCheckedBox, EINA_FALSE);
551 elm_object_part_content_set(eoSelectAllLayout, "elm.icon", eoAllCheckedBox);
552 elm_object_text_set(eoSelectAllLayout, S_("IDS_COM_BODY_SELECT_ALL"));
553 elm_box_pack_start(eoBox, eoSelectAllLayout);
554 evas_object_show(eoSelectAllLayout);
555 m_allChecked = EINA_FALSE;
558 void DownloadView::changeAllCheckedValue()
560 m_allChecked = !m_allChecked;
561 elm_check_state_pointer_set(eoAllCheckedBox, &m_allChecked);
562 handleChangedAllCheckedState();
565 void DownloadView::destroyCheckedItem()
567 Eina_List *list = NULL;
568 Elm_Object_Item *it = NULL;
569 ViewItem *item = NULL;
570 int checkedCount = 0;
571 queue <unsigned int> deleteQueue;
575 it = elm_genlist_first_item_get(eoDldList);
578 item = (ViewItem *)elm_object_item_data_get(it);
579 /* elm_genlist_item_select_mode_get is needed to check group item */
580 if (elm_genlist_item_select_mode_get(it) !=
581 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY &&
582 item && item->checkedValue()) {
583 list = eina_list_append(list, it);
585 it = elm_genlist_item_next_get(it);
589 DP_LOGD("There is no delete item");
593 checkedCount = eina_list_count(list);
594 if (checkedCount < 1)
596 DP_LOGD("checkedCount[%d]", checkedCount);
598 for (int i = 0; i < checkedCount; i++)
600 it = (Elm_Object_Item *)eina_list_data_get(list);
602 item = (ViewItem *)elm_object_item_data_get(it);
604 DP_LOGE("genlist item is null");
605 list = eina_list_next(list);
607 deleteQueue.push(item->historyId());
610 DP_LOGE("viewItem is null");
614 eina_list_free(list);
616 DownloadHistoryDB::deleteMultipleItem(deleteQueue);
617 showNotifyInfo(DOWNLOAD_NOTIFY_DELETED, checkedCount);
618 hideGenlistEditMode();
621 void DownloadView::showGenlistEditMode()
624 #ifndef _TIZEN_PUBLIC
627 /* Initialize notify info widget */
629 elm_object_item_text_set(eoNaviBarItem, S_("IDS_COM_OPT_DELETE"));
630 /* Change layoutbackground color to edit mode color */
631 elm_object_style_set(eoBackground, "edit_mode");
632 /* Disable the back button of control bar */
633 elm_object_item_part_content_unset(eoNaviBarItem, "prev_btn");
634 destroyEvasObj(eoBackBtn);
637 elm_object_item_del(eoCbItemEmpty);
638 eoCbItemCancel = elm_toolbar_item_append(eoControlBar, NULL,
639 S_("IDS_COM_SK_CANCEL"), cbItemCancelCB, eoNaviBar);
641 /* Append 'Select All' layout */
642 createSelectAllLayout();
643 /* Set reorder end edit mode */
644 elm_genlist_reorder_mode_set(eoDldList, EINA_TRUE);
645 elm_genlist_decorate_mode_set(eoDldList, EINA_TRUE);
646 /* This means even if the ouside of checked box is selected,
647 it is same to click a check box. */
648 elm_genlist_select_mode_set(eoDldList, ELM_OBJECT_SELECT_MODE_ALWAYS);
650 Elm_Object_Item *it = NULL;
651 ViewItem *viewItem = NULL;
652 it = elm_genlist_first_item_get(eoDldList);
654 viewItem = (ViewItem *)elm_object_item_data_get(it);
655 if (elm_genlist_item_select_mode_get(it) !=
656 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY &&
657 viewItem && !(viewItem->isFinished()))
658 elm_object_item_disabled_set(it, EINA_TRUE);
659 it = elm_genlist_item_next_get(it);
661 elm_object_item_disabled_set(eoCbItemDelete, EINA_TRUE);
664 void DownloadView::hideGenlistEditMode()
668 elm_object_item_text_set(eoNaviBarItem, __("IDS_BR_HEADER_DOWNLOAD_MANAGER"));
669 elm_object_style_set(eoBackground, "default");
671 /* Recreate back button */
673 elm_object_item_part_content_set(eoNaviBarItem, "prev_btn", eoBackBtn);
675 if (eoCbItemCancel) {
676 elm_object_item_del(eoCbItemCancel);
677 eoCbItemCancel = NULL;
679 eoCbItemEmpty = elm_toolbar_item_append(eoControlBar, NULL, NULL, NULL, NULL);
680 elm_object_item_disabled_set(eoCbItemEmpty, EINA_TRUE);
682 elm_box_unpack(eoBox, eoSelectAllLayout);
684 destroyEvasObj(eoAllCheckedBox);
685 destroyEvasObj(eoSelectAllLayout);
687 elm_genlist_reorder_mode_set(eoDldList, EINA_FALSE);
688 elm_genlist_decorate_mode_set(eoDldList, EINA_FALSE);
689 elm_genlist_select_mode_set(eoDldList, ELM_OBJECT_SELECT_MODE_DEFAULT);
691 Elm_Object_Item *it = NULL;
692 ViewItem *viewItem = NULL;
693 it = elm_genlist_first_item_get(eoDldList);
695 viewItem = (ViewItem *)elm_object_item_data_get(it);
696 if (elm_genlist_item_select_mode_get(it) !=
697 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY && viewItem) {
698 if (elm_object_item_disabled_get(it))
699 elm_object_item_disabled_set(it, EINA_FALSE);
700 viewItem->setCheckedValue(EINA_FALSE);
701 viewItem->setCheckedBtn(NULL);
703 it = elm_genlist_item_next_get(it);
706 m_allChecked = EINA_FALSE;
708 if (m_viewItemCount < 1) {
709 elm_object_item_disabled_set(eoCbItemDelete, EINA_TRUE);
712 elm_object_item_disabled_set(eoCbItemDelete, EINA_FALSE);
715 void DownloadView::handleChangedAllCheckedState()
717 int checkedCount = 0;
718 Elm_Object_Item *it = NULL;
719 ViewItem *viewItem = NULL;
720 it = elm_genlist_first_item_get(eoDldList);
722 viewItem = (ViewItem *)elm_object_item_data_get(it);
723 if (elm_genlist_item_select_mode_get(it) !=
724 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY && viewItem) {
725 if (viewItem->isFinished()) {
726 viewItem->setCheckedValue(m_allChecked);
727 viewItem->updateCheckedBtn();
731 it = elm_genlist_item_next_get(it);
734 if (m_allChecked && checkedCount > 0) {
735 elm_object_item_disabled_set(eoCbItemDelete, EINA_FALSE);
736 showNotifyInfo(DOWNLOAD_NOTIFY_SELECTED, checkedCount);
738 elm_object_item_disabled_set(eoCbItemDelete, EINA_TRUE);
739 showNotifyInfo(DOWNLOAD_NOTIFY_SELECTED, 0);
743 void DownloadView::handleCheckedState()
745 int checkedCount = 0;
746 int deleteAbleTotalCount = 0;
750 Elm_Object_Item *it = NULL;
751 ViewItem *viewItem = NULL;
752 it = elm_genlist_first_item_get(eoDldList);
754 viewItem = (ViewItem *)elm_object_item_data_get(it);
755 if (elm_genlist_item_select_mode_get(it) !=
756 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY && viewItem) {
757 if (viewItem->checkedValue())
759 if (viewItem->isFinished())
760 deleteAbleTotalCount++;
762 it = elm_genlist_item_next_get(it);
765 if (checkedCount == deleteAbleTotalCount)
766 m_allChecked = EINA_TRUE;
768 m_allChecked = EINA_FALSE;
769 elm_check_state_pointer_set(eoAllCheckedBox, &m_allChecked);
771 if (checkedCount == 0) {
772 elm_object_item_disabled_set(eoCbItemDelete, EINA_TRUE);
775 elm_object_item_disabled_set(eoCbItemDelete, EINA_FALSE);
776 showNotifyInfo(DOWNLOAD_NOTIFY_SELECTED, checkedCount);
778 void DownloadView::createNotifyInfo()
781 eoNotifyInfoLayout = elm_layout_add(eoBoxLayout);
782 elm_object_part_content_set(eoBoxLayout, "sel.swallow.contents",
784 evas_object_size_hint_weight_set(eoNotifyInfoLayout,
785 EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
786 evas_object_size_hint_align_set(eoNotifyInfoLayout,
787 EVAS_HINT_FILL, EVAS_HINT_FILL);
790 void DownloadView::showNotifyInfo(int type, int selectedCount)
795 if (selectedCount == 0) {
800 if (!eoNotifyInfoLayout)
803 elm_layout_theme_set(eoNotifyInfoLayout, "standard", "selectioninfo",
806 if (type == DOWNLOAD_NOTIFY_SELECTED) {
807 stringstream countStr;
808 countStr << selectedCount;
809 buf = S_("IDS_COM_BODY_SELECTED");
811 buf.append(countStr.str());
813 } else if (type == DOWNLOAD_NOTIFY_DELETED) {
814 buf = S_("IDS_COM_POP_DELETED");
816 ecore_timer_del(eoNotifyTimer);
817 eoNotifyTimer = NULL;
819 eoNotifyTimer = ecore_timer_add(3, deletedNotifyTimerCB, NULL);
821 elm_object_part_text_set(eoNotifyInfoLayout, "elm.text", buf.c_str());
822 elm_object_signal_emit(eoBoxLayout, "show,selection,info", "elm");
823 evas_object_show(eoNotifyInfoLayout);
826 Eina_Bool DownloadView::deletedNotifyTimerCB(void *data)
828 DownloadView& view = DownloadView::getInstance();
829 view.destroyNotifyInfo();
830 return ECORE_CALLBACK_RENEW;
833 void DownloadView::destroyNotifyInfo()
836 destroyEvasObj(eoNotifyInfoLayout);
837 eoNotifyInfoLayout = NULL;
840 /* Static callback function */
841 void DownloadView::showNotifyInfoCB(void *data, Evas *evas, Evas_Object *obj,
844 Evas_Object *layout = (Evas_Object *)data;
846 DP_LOGE("data is NULL");
849 edje_object_signal_emit(_EDJ(layout), "elm,layout,content,bottom_padding",
853 void DownloadView::hideNotifyInfoCB(void *data, Evas *evas, Evas_Object *obj,
856 Evas_Object *layout = (Evas_Object *)data;
858 DP_LOGE("data is NULL");
861 edje_object_signal_emit(_EDJ(layout), "elm,layout,content,default", "layout");
864 void DownloadView::selectAllClickedCB(void *data, Evas *evas, Evas_Object *obj,
867 DownloadView &view = DownloadView::getInstance();
869 view.changeAllCheckedValue();
872 void DownloadView::selectAllChangedCB(void *data, Evas_Object *obj,
875 DownloadView &view = DownloadView::getInstance();
877 view.handleChangedAllCheckedState();
880 #ifndef _TIZEN_PUBLIC
881 void DownloadView::sweepRightCB(void *data, Evas_Object *obj, void *event_info)
883 DownloadView& view = DownloadView::getInstance();
885 if (!obj || !event_info) {
886 DP_LOGE("obj or event_info is NULL");
889 if (!elm_genlist_decorate_mode_get(obj)) {
890 Elm_Object_Item *glItem = (Elm_Object_Item *)event_info;
891 ViewItem *viewItem = view.findViewItemForGenlistItem(glItem);
893 if (viewItem->isFinished()) {
894 if (view.sweepedItem())
895 view.sweepedItem()->sweepLeft();
896 viewItem->sweepRight();
897 view.setSweepedItem(viewItem);
900 DP_LOGE("Fail to find view item at sweep mode");
903 DP_LOGD("Unable to sweep right");
906 void DownloadView::sweepLeftCB(void *data, Evas_Object *obj, void *event_info)
908 DownloadView& view = DownloadView::getInstance();
910 if (!obj || !event_info) {
911 DP_LOGE("obj or event_info is NULL");
915 if (!elm_genlist_decorate_mode_get(obj)) {
916 Elm_Object_Item *glItem = (Elm_Object_Item *)event_info;
917 ViewItem *viewItem = view.findViewItemForGenlistItem(glItem);
919 if (viewItem->isFinished()) {
920 viewItem->sweepLeft();
921 view.setSweepedItem(NULL);
924 DP_LOGE("Fail to find view item at sweep mode");
927 DP_LOGD("Unable to sweep left");
931 void DownloadView::backBtnCB(void *data, Evas_Object *obj, void *event_info)
933 DownloadView& view = DownloadView::getInstance();
937 void DownloadView::cbItemDeleteCB(void *data, Evas_Object *obj, void *event_info)
940 DownloadView& view = DownloadView::getInstance();
941 if (!view.isGenlistEditMode())
942 view.showGenlistEditMode();
944 view.destroyCheckedItem();
947 void DownloadView::cbItemCancelCB(void *data, Evas_Object *obj, void *event_info)
949 DownloadView& view = DownloadView::getInstance();
950 view.destroyNotifyInfo();
951 view.hideGenlistEditMode();
954 void DownloadView::genlistClickCB(void *data, Evas_Object *obj, void *event_info)
956 ViewItem *item = reinterpret_cast<ViewItem *>(data);
959 DP_LOGE("data is NULL");
962 item->clickedGenlistItem();
965 void DownloadView::cancelClickCB(void *data, Evas_Object *obj, void *event_info)
967 ViewItem *item = NULL;
972 DP_LOGE("data is NULL");
975 item = reinterpret_cast<ViewItem *>(data);
976 item->requestCancel();
980 void DownloadView::showErrPopup(string &desc)
984 eoPopup = elm_popup_add(eoWindow);
985 evas_object_size_hint_weight_set(eoPopup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
986 elm_object_text_set(eoPopup, desc.c_str());
987 elm_popup_timeout_set(eoPopup, 2);
988 evas_object_smart_callback_add(eoPopup, "response", errPopupResponseCB, NULL);
989 evas_object_show(eoPopup);
992 void DownloadView::errPopupResponseCB(void *data, Evas_Object *obj, void *event_info)
995 DownloadView& view = DownloadView::getInstance();
999 void DownloadView::removePopup()
1002 destroyEvasObj(eoPopup);
1005 DateGroup *DownloadView::getDateGroupObj(int type)
1007 DateGroup *obj = NULL;
1009 case DATETIME::DATE_TYPE_LATER:
1010 case DATETIME::DATE_TYPE_TODAY:
1013 case DATETIME::DATE_TYPE_YESTERDAY:
1016 case DATETIME::DATE_TYPE_PREVIOUS:
1017 obj = &m_previousDay;
1021 DP_LOGE("Cannot enter here");
1027 Elm_Object_Item *DownloadView::getGenlistGroupItem(int type)
1029 DateGroup *obj = getDateGroupObj(type);
1032 return obj->glGroupItem();
1035 void DownloadView::setGenlistGroupItem(int type, Elm_Object_Item *item)
1037 DateGroup *obj = getDateGroupObj(type);
1040 obj->setGlGroupItem(item);
1043 void DownloadView::increaseGenlistGroupCount(int type)
1045 DateGroup *obj = getDateGroupObj(type);
1048 if (type == DATETIME::DATE_TYPE_TODAY || type == DATETIME::DATE_TYPE_LATER) {
1049 if (m_today.getCount() < 1) {
1050 DateUtil &inst = DateUtil::getInstance();
1051 inst.setTodayStandardTime();
1054 obj->increaseCount();
1055 DP_LOGD("increased count[%d]",obj->getCount());
1058 int DownloadView::getGenlistGroupCount(int type)
1060 DateGroup *obj = getDateGroupObj(type);
1063 DP_LOGD("Group count[%d]",obj->getCount());
1064 return obj->getCount();
1067 void DownloadView::handleGenlistGroupItem(int type)
1069 DateGroup *obj = getDateGroupObj(type);
1072 obj->decreaseCount();
1073 DP_LOGD("count[%d]type[%d]",obj->getCount(),type);
1074 if (obj->getCount() < 1) {
1075 //DP_LOGD("Group Item[%p][%d]", obj->glGroupItem(),type);
1076 elm_object_item_del(obj->glGroupItem());
1077 obj->setGlGroupItem(NULL);
1081 void DownloadView::handleUpdateDateGroupType(ViewItem *viewItem)
1084 DateUtil &inst = DateUtil::getInstance();
1086 diffDays = inst.getDiffDaysFromToday();
1088 /* Update a view item which is added now
1089 * This should be only called when attaching item
1091 viewItem->extractDateGroupType();
1092 } else if (diffDays != 0) {
1094 * Now, it is recreated download items and group items.
1095 * Consider to move only group item later.
1096 * This should be only called from show() function
1099 * Another problem is happend becuase eina list is used repacing with vector */
1102 Elm_Object_Item *it = NULL;
1103 ViewItem *viewItem = NULL;
1104 it = elm_genlist_first_item_get(eoDldList);
1106 viewItem = (ViewItem *)elm_object_item_data_get(it);
1107 if (!viewItem || elm_genlist_item_select_mode_get(it) !=
1108 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY)
1110 viewItem->extractDateGroupType();
1111 createGenlistItem(viewItem);
1112 it = elm_genlist_item_next_get(it);
1116 inst.setTodayStandardTime();
1119 void DownloadView::moveRetryItem(ViewItem *viewItem)
1121 Elm_Object_Item *todayGroupItem = NULL;
1122 Elm_Object_Item *firstItem = NULL;
1125 DP_LOGE("view item is NULL");
1128 firstItem = elm_genlist_first_item_get(eoDldList);
1130 DP_LOGD("groupItem[%p] viewItem[%p]", firstItem, viewItem);
1131 /* This is group item */
1132 if (elm_genlist_item_select_mode_get(firstItem) ==
1133 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY) {
1134 /* The top item is the item after group item */
1135 firstItem = elm_genlist_item_next_get(firstItem);
1136 DP_LOGD("firstItem[%p], present item[%p]", firstItem, viewItem->genlistItem());
1137 if (firstItem == viewItem->genlistItem()) {
1138 DP_LOGD("This is already top item. Don't need to move");
1143 elm_object_item_del(viewItem->genlistItem());
1144 viewItem->setGenlistItem(NULL);
1145 handleGenlistGroupItem(viewItem->dateGroupType());
1146 todayGroupItem = getGenlistGroupItem(DATETIME::DATE_TYPE_TODAY);
1147 if (!todayGroupItem) {
1148 DateGroup *dateGrpObj = getDateGroupObj(DATETIME::DATE_TYPE_TODAY);
1149 todayGroupItem = elm_genlist_item_prepend(
1151 &dldGenlistGroupStyle,
1152 static_cast<const void*>(dateGrpObj),
1154 ELM_GENLIST_ITEM_GROUP,
1157 setGenlistGroupItem(DATETIME::DATE_TYPE_TODAY, todayGroupItem);
1158 if (!todayGroupItem)
1159 DP_LOGE("Fail to add a genlist group item");
1161 elm_genlist_item_select_mode_set(todayGroupItem,
1162 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1164 increaseGenlistGroupCount(DATETIME::DATE_TYPE_TODAY);
1165 Elm_Object_Item *glItem = elm_genlist_item_insert_after(
1167 viewItem->elmGenlistStyle(),
1168 static_cast<const void*>(viewItem),
1171 ELM_GENLIST_ITEM_NONE,
1173 static_cast<const void*>(viewItem));
1175 DP_LOGE("Fail to add a genlist item");
1176 DP_LOGD("genlist groupItem[%p] item[%p] viewItem[%p]", todayGroupItem,
1178 viewItem->setGenlistItem(glItem);
1179 elm_genlist_item_show(todayGroupItem, ELM_GENLIST_ITEM_SCROLLTO_TOP);
1180 viewItem->extractDateGroupType();
1183 char *DownloadView::getGenlistGroupLabel(void *data, Evas_Object *obj, const char *part)
1185 DateGroup *dateGrp = static_cast<DateGroup *>(data);
1187 if(!data || !obj || !part)
1190 DP_LOGD("ViewItem::getListGroupLabel:part[%s] groupDateType[%d] obj[%p]", part, dateGrp->getType(), obj);
1191 if (strncmp(part, "elm.text", strlen("elm.text")) == 0) {
1192 DateUtil &inst = DateUtil::getInstance();
1195 double udateTime = 0;
1196 switch (dateGrp->getType()) {
1197 case DATETIME::DATE_TYPE_PREVIOUS:
1198 msg = S_("IDS_COM_BODY_PREVIOUS_DAYS");
1200 case DATETIME::DATE_TYPE_YESTERDAY:
1201 udateTime = inst.yesterdayTime()*1000;
1202 msg = S_("IDS_COM_BODY_YESTERDAY");
1204 inst.getDateStr(LOCALE_STYLE::FULL_DATE, udateTime, outBuf);
1208 case DATETIME::DATE_TYPE_LATER:
1209 case DATETIME::DATE_TYPE_TODAY:
1210 udateTime = inst.nowTime()*1000;
1211 msg = S_("IDS_COM_BODY_TODAY");
1213 inst.getDateStr(LOCALE_STYLE::FULL_DATE, udateTime, outBuf);
1218 DP_LOGE("Cannot enter here");
1221 return strdup(msg.c_str());
1226 char *DownloadView::getGenlistGroupLabelCB(void *data, Evas_Object *obj, const char *part)
1229 if(!data || !obj || !part)
1232 DownloadView &view = DownloadView::getInstance();
1233 return view.getGenlistGroupLabel(data, obj, part);
1236 void DownloadView::cleanGenlistData()
1238 Elm_Object_Item *grpItem = NULL;
1240 grpItem = m_today.glGroupItem();
1242 elm_object_item_del(grpItem);
1244 grpItem = m_yesterday.glGroupItem();
1246 elm_object_item_del(grpItem);
1247 m_yesterday.initData();
1248 grpItem = m_previousDay.glGroupItem();
1250 elm_object_item_del(grpItem);
1251 m_previousDay.initData();
1252 elm_genlist_clear(eoDldList);