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;
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;
m_Alarm(std::move(alarm))
{
m_HasDeleteButton = m_Alarm.getId() != 0;
+ m_ButtonType = m_HasDeleteButton ? ButtonDelete : ButtonNext;
}
Evas_Object *InputView::onCreate(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, ¤tPage, 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)
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();
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;
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;
}
}