diff options
author | Sergei Kobec <s.kobec@samsung.com> | 2017-02-23 14:12:47 +0200 |
---|---|---|
committer | Sergei Kobec <s.kobec@samsung.com> | 2017-02-27 14:24:00 +0200 |
commit | 29ca340eefe29ab7dda2acd53c65c749d5bb1543 (patch) | |
tree | 8d63cb0ef4582d56d988a755f30b89258a0f3f36 | |
parent | 317a08e9b6d09a6064e6d097aec79261faaa4a38 (diff) | |
download | alarm-29ca340eefe29ab7dda2acd53c65c749d5bb1543.tar.gz alarm-29ca340eefe29ab7dda2acd53c65c749d5bb1543.tar.bz2 alarm-29ca340eefe29ab7dda2acd53c65c749d5bb1543.zip |
TizenRefApp-7990 Integrate Select View with AlarmsView
Change-Id: I9d5152e8b6ee47497b5f1ae4ae86dbc345b6f2c9
Signed-off-by: Sergei Kobec <s.kobec@samsung.com>
-rw-r--r-- | alarm-app/inc/List/AddAlarmItem.h | 11 | ||||
-rw-r--r-- | alarm-app/inc/List/AlarmsView.h | 20 | ||||
-rw-r--r-- | alarm-app/inc/List/TitleItem.h | 11 | ||||
-rw-r--r-- | alarm-app/src/List/AddAlarmItem.cpp | 17 | ||||
-rw-r--r-- | alarm-app/src/List/AlarmItem.cpp | 4 | ||||
-rw-r--r-- | alarm-app/src/List/AlarmsView.cpp | 95 | ||||
-rw-r--r-- | alarm-app/src/List/TitleItem.cpp | 16 | ||||
-rw-r--r-- | lib-apps-common/inc/Ui/CheckItem.h | 1 | ||||
-rw-r--r-- | lib-apps-common/inc/Ux/SelectView.h | 5 | ||||
-rw-r--r-- | lib-apps-common/src/Ui/CheckItem.cpp | 11 | ||||
-rw-r--r-- | lib-apps-common/src/Ux/MultiSelector.cpp | 2 | ||||
-rw-r--r-- | lib-apps-common/src/Ux/SelectView.cpp | 35 |
12 files changed, 198 insertions, 30 deletions
diff --git a/alarm-app/inc/List/AddAlarmItem.h b/alarm-app/inc/List/AddAlarmItem.h index aef29a5..9b9dced 100644 --- a/alarm-app/inc/List/AddAlarmItem.h +++ b/alarm-app/inc/List/AddAlarmItem.h @@ -23,9 +23,20 @@ namespace List { class AddAlarmItem: public Ui::GenItem { + public: + AddAlarmItem(); + + /** + * @brief Set button visibility. + * @param[in] isVisible Determine whether button should be visible or not. + */ + void setButtonVisibility(bool isVisible); + private: virtual Elm_Gen_Item_Class *getItemClass() const override; virtual Evas_Object *getContent(Evas_Object *parent, const char *part) override; + + bool m_IsVisible; }; } diff --git a/alarm-app/inc/List/AlarmsView.h b/alarm-app/inc/List/AlarmsView.h index 2f9aedd..42018a1 100644 --- a/alarm-app/inc/List/AlarmsView.h +++ b/alarm-app/inc/List/AlarmsView.h @@ -26,9 +26,16 @@ namespace Ui class Genlist; } +namespace Ux +{ + class MultiSelector; +} + namespace List { class AlarmItem; + class TitleItem; + class AddAlarmItem; class AlarmsView: public Ux::SelectView { public: @@ -40,9 +47,12 @@ namespace List virtual void onCreated() override; virtual void onPageAttached(Ui::NavigatorPage *page) override; virtual void onNavigation(bool isCurrent) override; + virtual void onSelectModeChanged(Ux::SelectMode selectMode) override; + virtual void onSelectCountChanged(size_t selectCount) override; + virtual Evas_Object *createDoneButton() override; void onUpdateFinished(); - Ui::Genlist *createGenlist(Evas_Object *parent); + Evas_Object *createContentLayout(Evas_Object *parent); Evas_Object *createNoContents(Evas_Object *parent); Evas_Object *createAddButton(Evas_Object *parent); void updateEmptyState(); @@ -55,11 +65,15 @@ namespace List void onAlarmDeleted(AlarmItem *item); void onAddPressed(); void onFormatChanged(system_settings_key_e key); + void onItemLongpressed(Evas_Object *genlist, void *genItem); + bool onSelectFinished(); Evas_Object *m_NoContents; + Evas_Object *m_ContentLayout; Ui::Genlist *m_Genlist; - Ui::GenItem *m_TitleItem; - Ui::GenItem *m_AddAlarmItem; + TitleItem *m_TitleItem; + AddAlarmItem *m_AddAlarmItem; + Ux::MultiSelector *m_MultiSelector; Common::Model::AlarmProvider m_Provider; }; } diff --git a/alarm-app/inc/List/TitleItem.h b/alarm-app/inc/List/TitleItem.h index 0bd8df0..fe61eba 100644 --- a/alarm-app/inc/List/TitleItem.h +++ b/alarm-app/inc/List/TitleItem.h @@ -23,6 +23,15 @@ namespace List { class TitleItem: public Ui::GenItem { + public: + TitleItem(); + + /** + * @brief Set item text visibility. + * @param[in] isVisible Determines whether title text should be visible or not. + */ + void setTitleVisibility(bool isVisible); + protected: /** * @see GenItem::getItemClass() @@ -33,6 +42,8 @@ namespace List * @see GenItem::getText() */ virtual char *getText(Evas_Object *parent, const char *part) override; + + bool m_IsTitleVisible; }; } diff --git a/alarm-app/src/List/AddAlarmItem.cpp b/alarm-app/src/List/AddAlarmItem.cpp index cbf7539..61fd117 100644 --- a/alarm-app/src/List/AddAlarmItem.cpp +++ b/alarm-app/src/List/AddAlarmItem.cpp @@ -19,6 +19,19 @@ using namespace List; +AddAlarmItem::AddAlarmItem() + : m_IsVisible(true) +{ +} + +void AddAlarmItem::setButtonVisibility(bool isVisible) +{ + if (m_IsVisible != isVisible) { + m_IsVisible = isVisible; + elm_genlist_item_update(getObjectItem()); + } +} + Elm_Gen_Item_Class *AddAlarmItem::getItemClass() const { static Elm_Gen_Item_Class itc = createItemClass(STYLE_ITEM_BOTTOM_BUTTON); @@ -27,6 +40,10 @@ Elm_Gen_Item_Class *AddAlarmItem::getItemClass() const Evas_Object *AddAlarmItem::getContent(Evas_Object *parent, const char *part) { + if (!m_IsVisible) { + return nullptr; + } + Evas_Object *button = elm_button_add(parent); elm_object_style_set(button, "bottom"); elm_object_translatable_text_set(button, "WDS_ALM_ACBUTTON_ADD"); diff --git a/alarm-app/src/List/AlarmItem.cpp b/alarm-app/src/List/AlarmItem.cpp index c0fab2b..6c0387f 100644 --- a/alarm-app/src/List/AlarmItem.cpp +++ b/alarm-app/src/List/AlarmItem.cpp @@ -105,7 +105,9 @@ Evas_Object *AlarmItem::getContent(Evas_Object *parent, const char *part) return check; } else if (strcmp(part, "elm.swallow.center_check") == 0) { - SelectItem::getContent(parent, part); + Evas_Object *check = SelectItem::getContent(parent, part); + elm_object_style_set(check, "genlist/select_mode"); + return check; } return nullptr; diff --git a/alarm-app/src/List/AlarmsView.cpp b/alarm-app/src/List/AlarmsView.cpp index 048ae0e..52c5637 100644 --- a/alarm-app/src/List/AlarmsView.cpp +++ b/alarm-app/src/List/AlarmsView.cpp @@ -15,6 +15,7 @@ */ #include "Common/Model/Alarm.h" +#include "Common/Model/AlarmConsumer.h" #include "List/AddAlarmItem.h" #include "List/AlarmItem.h" #include "List/AlarmsView.h" @@ -23,11 +24,14 @@ #include "App/Path.h" #include "System/Settings.h" +#include "Ui/CircleMenu.h" #include "Ui/Genlist.h" #include "Ui/GenGroupItem.h" #include "Ui/Toast.h" #include "Ui/Window.h" #include "Utils/Callback.h" +#include "Utils/Logger.h" +#include "Ux/MultiSelector.h" #include "ListPath.h" @@ -41,8 +45,15 @@ using namespace List; using namespace std::placeholders; AlarmsView::AlarmsView() - : m_Genlist(nullptr), m_TitleItem(nullptr), m_AddAlarmItem(nullptr) + : m_NoContents(nullptr), m_ContentLayout(nullptr), m_Genlist(nullptr), + m_TitleItem(nullptr), m_AddAlarmItem(nullptr), m_MultiSelector(nullptr) { + Strings strings{}; + strings.buttonDone = "WDS_ALM_ACBUTTON_DELETE_ABB"; + strings.titleMulti = "0"; + strings.titleWithCount = "%d"; + setStrings(strings); + System::Settings::addCallback(SYSTEM_SETTINGS_KEY_LOCALE_TIMEFORMAT_24HOUR, { std::bind(&AlarmsView::onFormatChanged, this, _1), this }); } @@ -55,9 +66,9 @@ AlarmsView::~AlarmsView() Evas_Object *AlarmsView::onCreate(Evas_Object *parent) { Evas_Object *layout = elm_layout_add(parent); - elm_layout_theme_set(layout, "layout", "application", "default"); + elm_layout_theme_set(layout, "layout", "bottom_button", "default"); - m_Genlist = createGenlist(layout); + m_ContentLayout = createContentLayout(layout); m_NoContents = createNoContents(layout); return layout; @@ -89,20 +100,59 @@ void AlarmsView::onNavigation(bool isCurrent) eext_rotary_object_event_activated_set(m_Genlist->getEvasObject(), isCurrent); } +void AlarmsView::onSelectModeChanged(Ux::SelectMode selectMode) +{ + if (selectMode != Ux::SelectMulti) { + elm_layout_signal_emit(m_ContentLayout, "select_mode,button,hide", ""); + + m_TitleItem->setTitleVisibility(true); + m_AddAlarmItem->setButtonVisibility(true); + } else { + elm_layout_signal_emit(m_ContentLayout, "select_mode,button,show", ""); + + m_TitleItem->setTitleVisibility(false); + m_AddAlarmItem->setButtonVisibility(false); + } +} + +void AlarmsView::onSelectCountChanged(size_t selectCount) +{ + m_MultiSelector->setCount(selectCount); +} + +Evas_Object *AlarmsView::createDoneButton() +{ + Evas_Object *button = elm_button_add(getEvasObject()); + elm_object_style_set(button, "bottom"); + elm_object_translatable_text_set(button, "WDS_ALM_ACBUTTON_DELETE_ABB"); + elm_object_part_content_set(getEvasObject(), "elm.swallow.button", button); + return button; +} + void AlarmsView::onUpdateFinished() { updateEmptyState(); } -Ui::Genlist *AlarmsView::createGenlist(Evas_Object *parent) +Evas_Object *AlarmsView::createContentLayout(Evas_Object *parent) { - auto surface = findParent<Ui::Window>(parent)->getCircleConformant(); + Evas_Object *layout = elm_layout_add(parent); + elm_layout_theme_set(layout, "layout", "select_mode", "default"); - auto genlist = new Ui::Genlist(); - genlist->create(parent); - eext_circle_object_genlist_add(genlist->getEvasObject(), surface); + auto surface = findParent<Ui::Window>(parent)->getCircleConformant(); + m_Genlist = new Ui::Genlist(); + m_Genlist->create(parent); + eext_circle_object_genlist_add(m_Genlist->getEvasObject(), surface); + evas_object_smart_callback_add(m_Genlist->getEvasObject(), + "longpressed", makeCallback(&AlarmsView::onItemLongpressed), this); + elm_object_content_set(layout, m_Genlist->getEvasObject()); + + m_MultiSelector = new Ux::MultiSelector(); + m_MultiSelector->create(layout); + m_MultiSelector->setStrings({ "WDS_MSG_OPT_SELECT_ALL_ABB", "WDS_MSG_OPT_DESELECT_ALL_ABB" }); + elm_object_part_content_set(layout, "elm.swallow.icon", m_MultiSelector->getEvasObject()); - return genlist; + return layout; } Evas_Object *AlarmsView::createNoContents(Evas_Object *parent) @@ -133,7 +183,7 @@ Evas_Object *AlarmsView::createAddButton(Evas_Object *parent) void AlarmsView::updateEmptyState() { Evas_Object *content = m_Provider.getDataList().size() > 0 - ? m_Genlist->getEvasObject() : m_NoContents; + ? m_ContentLayout : m_NoContents; if (content != elm_object_content_get(getEvasObject())) { evas_object_hide(elm_object_content_unset(getEvasObject())); @@ -206,3 +256,28 @@ void AlarmsView::onFormatChanged(system_settings_key_e key) { m_Genlist->update("elm.text", ELM_GENLIST_ITEM_FIELD_TEXT); } + +void AlarmsView::onItemLongpressed(Evas_Object *genlist, void *genItem) +{ + if (getSelectMode() == Ux::SelectNone) { + setSelectMode(Ux::SelectMulti); + setCancelCallback(std::bind(&AlarmsView::onSelectFinished, this)); + setSelectCallback([this](Ux::SelectResults results) { + for (auto &&result : results) { + auto alarm = (Alarm *)result.value.data; + AlarmConsumer::getInstance().deleteAlarm(alarm->getId(), nullptr); + } + + return onSelectFinished(); + }); + elm_genlist_item_selected_set((Elm_Object_Item *)genItem, EINA_TRUE); + } +} + +bool AlarmsView::onSelectFinished() +{ + setSelectMode(Ux::SelectNone); + setCancelCallback(nullptr); + setSelectCallback(nullptr); + return false; +} diff --git a/alarm-app/src/List/TitleItem.cpp b/alarm-app/src/List/TitleItem.cpp index 90372b2..44a5a37 100644 --- a/alarm-app/src/List/TitleItem.cpp +++ b/alarm-app/src/List/TitleItem.cpp @@ -19,6 +19,20 @@ using namespace List; +TitleItem::TitleItem() + : m_IsTitleVisible(true) +{ +} + +void TitleItem::setTitleVisibility(bool isVisible) +{ + if (m_IsTitleVisible != isVisible) { + m_IsTitleVisible = isVisible; + + update("elm.text", ELM_GENLIST_ITEM_FIELD_TEXT); + } +} + Elm_Gen_Item_Class *TitleItem::getItemClass() const { static Elm_Gen_Item_Class itc = createItemClass("title"); @@ -27,7 +41,7 @@ Elm_Gen_Item_Class *TitleItem::getItemClass() const char *TitleItem::getText(Evas_Object *parent, const char *part) { - if (strcmp(part, "elm.text") == 0) { + if (m_IsTitleVisible && strcmp(part, "elm.text") == 0) { return strdup(_("WDS_ALM_HEADER_ALARM_ABB")); } diff --git a/lib-apps-common/inc/Ui/CheckItem.h b/lib-apps-common/inc/Ui/CheckItem.h index c3213c0..f54c2aa 100644 --- a/lib-apps-common/inc/Ui/CheckItem.h +++ b/lib-apps-common/inc/Ui/CheckItem.h @@ -91,6 +91,7 @@ namespace Ui virtual bool onChecked(bool isChecked) { return true; } private: + void onCheckChanged(Evas_Object *check, void *eventInfo); bool notifyCheck(); std::string m_CheckPart; diff --git a/lib-apps-common/inc/Ux/SelectView.h b/lib-apps-common/inc/Ux/SelectView.h index 9577313..cf6fece 100644 --- a/lib-apps-common/inc/Ux/SelectView.h +++ b/lib-apps-common/inc/Ux/SelectView.h @@ -213,6 +213,9 @@ namespace Ux CountDecrement }; + virtual Evas_Object *createDoneButton(); + virtual Evas_Object *createCancelButton(); + size_t getSelectMax() const; bool isLimitReached() const; bool isMaxSelected() const; @@ -230,7 +233,7 @@ namespace Ux void updateVisibleCount(CountChange change, SelectItem *item); void updateVisibleSelectCount(CountChange change, SelectItem *item); - void createPageButtons(Ui::NavigatorPage *page); + void createPageButtons(); void destroyPageButtons(); void onItemExcluded(SelectItem *item, bool isExcluded); diff --git a/lib-apps-common/src/Ui/CheckItem.cpp b/lib-apps-common/src/Ui/CheckItem.cpp index d4e846c..66d94b7 100644 --- a/lib-apps-common/src/Ui/CheckItem.cpp +++ b/lib-apps-common/src/Ui/CheckItem.cpp @@ -98,7 +98,9 @@ Evas_Object *CheckItem::getContent(Evas_Object *parent, const char *part) Elm_Check *check = elm_check_add(parent); elm_check_state_set(check, m_IsChecked); elm_check_state_pointer_set(check, &m_IsChecked); - elm_object_signal_emit(check, "elm,event,pass,enabled", "elm"); + evas_object_propagate_events_set(check, EINA_FALSE); + evas_object_smart_callback_add(check, "changed", + makeCallback(&CheckItem::onCheckChanged), this); return check; } @@ -108,6 +110,13 @@ void CheckItem::onSelected() setChecked(!m_IsChecked); } +void CheckItem::onCheckChanged(Evas_Object *check, void *eventInfo) +{ + if (!notifyCheck()) { + elm_check_state_set(check, !m_IsChecked); + } +} + bool CheckItem::notifyCheck() { if (m_IsChecking) { diff --git a/lib-apps-common/src/Ux/MultiSelector.cpp b/lib-apps-common/src/Ux/MultiSelector.cpp index ed5a7c7..11dc744 100644 --- a/lib-apps-common/src/Ux/MultiSelector.cpp +++ b/lib-apps-common/src/Ux/MultiSelector.cpp @@ -47,8 +47,6 @@ Evas_Object *MultiSelector::onCreate(Evas_Object *parent) evas_object_smart_callback_add(button, "clicked", makeCallback(&MultiSelector::onButtonClicked), this); - elm_layout_content_set(parent, "elm.swallow.icon", button); - return button; } diff --git a/lib-apps-common/src/Ux/SelectView.cpp b/lib-apps-common/src/Ux/SelectView.cpp index 63e1d61..ad1783e 100644 --- a/lib-apps-common/src/Ux/SelectView.cpp +++ b/lib-apps-common/src/Ux/SelectView.cpp @@ -194,6 +194,24 @@ void SelectView::onTitleChanged(const char *title) } } +Evas_Object *SelectView::createDoneButton() +{ + if (!getPage()) { + return nullptr; + } + + return getPage()->addTitleButton(Ui::ButtonRight, m_Strings.buttonDone, nullptr, nullptr); +} + +Evas_Object *SelectView::createCancelButton() +{ + if (!getPage()) { + return nullptr; + } + + return getPage()->addTitleButton(Ui::ButtonLeft, m_Strings.buttonCancel, nullptr, nullptr); +} + size_t SelectView::getSelectMax() const { if (m_SelectLimit && m_SelectLimit < m_VisibleCount) { @@ -243,11 +261,6 @@ void SelectView::updatePageTitle() void SelectView::updatePageButtons() { - Ui::NavigatorPage *page = getPage(); - if (!page) { - return; - } - switch (m_SelectMode) { case SelectNone: case SelectSingle: @@ -258,7 +271,7 @@ void SelectView::updatePageButtons() case SelectMulti: if (!m_DoneButton) { - createPageButtons(page); + createPageButtons(); } updateDoneButtonState(); break; @@ -345,13 +358,13 @@ void SelectView::updateVisibleSelectCount(CountChange change, SelectItem *item) updateSelectAllState(); } -void SelectView::createPageButtons(Ui::NavigatorPage *page) +void SelectView::createPageButtons() { - m_DoneButton = page->addTitleButton(Ui::ButtonRight, m_Strings.buttonDone, - makeCallback(&SelectView::onDonePressed), this); + m_DoneButton = createDoneButton(); + evas_object_smart_callback_add(m_DoneButton, "clicked", makeCallback(&SelectView::onDonePressed), this); - m_CancelButton = page->addTitleButton(Ui::ButtonLeft, m_Strings.buttonCancel, - makeCallback(&SelectView::onCancelPressed), this); + m_CancelButton = createCancelButton(); + evas_object_smart_callback_add(m_CancelButton, "clicked", makeCallback(&SelectView::onCancelPressed), this); } void SelectView::destroyPageButtons() |