Refactor InputView action button to support 3 pages. 57/116657/2
authorEugene Kurzberg <i.kurtsberg@samsung.com>
Thu, 23 Feb 2017 11:40:53 +0000 (13:40 +0200)
committerGerrit Code Review <gerrit@review.vlan103.tizen.org>
Tue, 28 Feb 2017 07:46:30 +0000 (23:46 -0800)
Change-Id: I8b9a85ef58dc8d9ffc2d50abf2dfaa9214d9d97a
Signed-off-by: Eugene Kurzberg <i.kurtsberg@samsung.com>
alarm-app/inc/Input/InputView.h
alarm-app/src/Input/InputView.cpp

index c40df495cd5ede526157c92afd691918a9e758a7..eb129ca40ff1c95078786e4f00aba06eb8a925db 100644 (file)
@@ -31,10 +31,9 @@ namespace Input
        class InputView : public Ui::ScrollNavigator
        {
        public:
-
                /**
                 * @brief Called when alarm is created.
-                * @param   id   Created Alarm ID
+                * @param   id  Created Alarm ID
                 */
                typedef std::function<void(int id)> CreateCallback;
 
@@ -61,17 +60,25 @@ namespace Input
                Evas_Object *createScroller(Evas_Object *parent);
                void updateButton();
 
+               void navigateNext();
                void saveAlarm();
                void deleteAlarm();
                void handleDuplicateAlarm();
 
-               bool isFirstPage() const;
                void onTimeChanged(Evas_Object *datetime, void *eventInfo);
                void onPageChanged(Evas_Object *scroller, void *eventInfo);
                void onButtonPressed(Evas_Object *button, void *eventInfo);
 
+               enum ButtonType
+               {
+                       ButtonNext,
+                       ButtonDelete,
+                       ButtonSave
+               };
+
                Evas_Object *m_Scroller;
                Evas_Object *m_Button;
+               ButtonType m_ButtonType;
                bool m_HasDeleteButton;
 
                CreateCallback m_OnCreated;
index 2fab124627a7e72a183e70266676e51f28c50fc5..225dfa5e1e8581570c4016e32604635232250ae8 100644 (file)
@@ -39,6 +39,7 @@ InputView::InputView(Alarm alarm)
          m_Alarm(std::move(alarm))
 {
        m_HasDeleteButton = m_Alarm.getId() != 0;
+       m_ButtonType = m_HasDeleteButton ? ButtonDelete : ButtonNext;
 }
 
 Evas_Object *InputView::onCreate(Evas_Object *parent)
@@ -101,14 +102,24 @@ Evas_Object *InputView::createScroller(Evas_Object *parent)
 
 void InputView::updateButton()
 {
-       const char *text = nullptr;
-       if (isFirstPage()) {
-               text = m_HasDeleteButton ? "WDS_ALM_ACBUTTON_DELETE_ABB" : "WDS_ALM_ACBUTTON_NEXT_ABB";
+       static const char *buttonText[] = {
+               /* [ButtonNext]   = */ "WDS_ALM_ACBUTTON_NEXT_ABB",
+               /* [ButtonDelete] = */ "WDS_ALM_ACBUTTON_DELETE_ABB",
+               /* [ButtonSave]   = */ "WDS_ALM_ACBUTTON_SAVE_ABB"
+       };
+
+       int currentPage = 0, lastPage = 0;
+       elm_scroller_current_page_get(m_Scroller, &currentPage, nullptr);
+       elm_scroller_last_page_get(m_Scroller, &lastPage, nullptr);
+       if (currentPage == 0) {
+               m_ButtonType = m_HasDeleteButton ? ButtonDelete : ButtonNext;
+       } else if (currentPage == lastPage) {
+               m_ButtonType = ButtonSave;
        } else {
-               text = "WDS_ALM_ACBUTTON_SAVE_ABB";
+               m_ButtonType = ButtonNext;
        }
 
-       elm_object_translatable_text_set(m_Button, text);
+       elm_object_translatable_text_set(m_Button, buttonText[m_ButtonType]);
 }
 
 void InputView::setCreateCallback(CreateCallback callback)
@@ -116,6 +127,13 @@ void InputView::setCreateCallback(CreateCallback callback)
        m_OnCreated = std::move(callback);
 }
 
+void InputView::navigateNext()
+{
+       int index = 0;
+       elm_scroller_current_page_get(m_Scroller, &index, nullptr);
+       elm_scroller_page_bring_in(m_Scroller, index + 1, 0);
+}
+
 void InputView::saveAlarm()
 {
        tm time = m_TimeView->getTimePicker()->getTime();
@@ -187,13 +205,6 @@ void InputView::handleDuplicateAlarm()
        getPage()->close();
 }
 
-bool InputView::isFirstPage() const
-{
-       int index = 0;
-       elm_scroller_current_page_get(m_Scroller, &index, nullptr);
-       return index == 0;
-}
-
 void InputView::onTimeChanged(Evas_Object *datetime, void *eventInfo)
 {
        m_HasDeleteButton = false;
@@ -212,14 +223,9 @@ void InputView::onPageChanged(Evas_Object *scroller, void *eventInfo)
 
 void InputView::onButtonPressed(Evas_Object *button, void *eventInfo)
 {
-       if (isFirstPage()) {
-               if (!m_HasDeleteButton) {
-                       elm_scroller_page_bring_in(m_Scroller, 1, 0);
-                       return;
-               }
-
-               deleteAlarm();
-       } else {
-               saveAlarm();
+       switch (m_ButtonType) {
+               case ButtonNext:   navigateNext(); break;
+               case ButtonDelete: deleteAlarm(); break;
+               case ButtonSave:   saveAlarm(); break;
        }
 }