summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergei Kobec <s.kobec@samsung.com>2017-02-23 14:12:47 +0200
committerSergei Kobec <s.kobec@samsung.com>2017-02-27 14:24:00 +0200
commit29ca340eefe29ab7dda2acd53c65c749d5bb1543 (patch)
tree8d63cb0ef4582d56d988a755f30b89258a0f3f36
parent317a08e9b6d09a6064e6d097aec79261faaa4a38 (diff)
downloadalarm-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.h11
-rw-r--r--alarm-app/inc/List/AlarmsView.h20
-rw-r--r--alarm-app/inc/List/TitleItem.h11
-rw-r--r--alarm-app/src/List/AddAlarmItem.cpp17
-rw-r--r--alarm-app/src/List/AlarmItem.cpp4
-rw-r--r--alarm-app/src/List/AlarmsView.cpp95
-rw-r--r--alarm-app/src/List/TitleItem.cpp16
-rw-r--r--lib-apps-common/inc/Ui/CheckItem.h1
-rw-r--r--lib-apps-common/inc/Ux/SelectView.h5
-rw-r--r--lib-apps-common/src/Ui/CheckItem.cpp11
-rw-r--r--lib-apps-common/src/Ux/MultiSelector.cpp2
-rw-r--r--lib-apps-common/src/Ux/SelectView.cpp35
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()