rename AlarmView and AlarmPresnter classes 05/140205/1
authorLukasz Stanislawski <l.stanislaws@samsung.com>
Thu, 20 Jul 2017 13:00:36 +0000 (15:00 +0200)
committerLukasz Stanislawski <l.stanislaws@samsung.com>
Thu, 20 Jul 2017 13:00:36 +0000 (15:00 +0200)
Those names should describe more the class purpose.
In both cases classes are managing list of alarms, so
new names will be:

AlarmView -> AlarmListView
AlarmPresenter -> AlarmListPresenter

Change-Id: Idedb0e496c96e6b58a397cbbf697f39fc22c1939

clock/inc/Controller/MainController.h
clock/inc/Presenter/AlarmListPresenter.h [new file with mode: 0644]
clock/inc/Presenter/AlarmPresenter.h [deleted file]
clock/inc/View/AlarmListView.h [new file with mode: 0644]
clock/inc/View/AlarmView.h [deleted file]
clock/src/Controller/MainController.cpp
clock/src/Presenter/AlarmListPresenter.cpp [new file with mode: 0644]
clock/src/Presenter/AlarmPresenter.cpp [deleted file]
clock/src/View/AlarmListView.cpp [new file with mode: 0644]
clock/src/View/AlarmView.cpp [deleted file]
clock/src/View/MainView.cpp

index 60a82f3d58da2b9d7a7d16c94f4b7e4cf13a94ed..d23b9c6df56bad9d372dfac46b03a3e75153530f 100644 (file)
@@ -27,7 +27,7 @@
 #include "Presenter/EditAlarmPresenter.h"
 #include "Presenter/DeleteAlarmPresenter.h"
 
-#include "View/AlarmView.h"
+#include "View/AlarmListView.h"
 #include "View/StopWatchView.h"
 #include "View/TimerView.h"
 #include "View/WorldClockView.h"
@@ -38,7 +38,7 @@
 #include "Model/Timer.h"
 #include "Model/WorldClock.h"
 
-#include "Presenter/AlarmPresenter.h"
+#include "Presenter/AlarmListPresenter.h"
 #include "Presenter/StopWatchPresenter.h"
 #include "Presenter/TimerPresenter.h"
 #include "Presenter/WorldClockPresenter.h"
@@ -138,7 +138,7 @@ namespace controller {
                        model::StopWatch *stop_watch_model_;
                        model::Timer *timer_model_;
 
-                       presenter::AlarmPresenter *alarm_presenter_;
+                       presenter::AlarmListPresenter *alarm_presenter_;
                        presenter::WorldClockPresenter *world_clock_presenter_;
                        presenter::StopWatchPresenter *stop_watch_presenter_;
                        presenter::TimerPresenter *timer_presenter_;
diff --git a/clock/inc/Presenter/AlarmListPresenter.h b/clock/inc/Presenter/AlarmListPresenter.h
new file mode 100644 (file)
index 0000000..0b7a558
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+* Copyright 2016  Samsung Electronics Co., Ltd
+*
+* Licensed under the Flora License, Version 1.1 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://floralicense.org/license/
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+#ifndef _ALARM_PRESENTER_H_
+#define _ALARM_PRESENTER_H_
+
+#include "View/AlarmListView.h"
+#include "Model/AlarmList.h"
+#include "Utils/EventBus.h"
+
+#include <map>
+#include <vector>
+
+namespace presenter {
+       /**
+        * @brief class managing displaying information on AlarmListView and updating data in
+        * AlarmProvider class.
+        */
+       class AlarmListPresenter {
+               public:
+                       /**
+                        * @brief Constructs object instance
+                        * @param view AlarmListView instance which presenter will be managing
+                        * @param list AlarmList instance which presenter will be managing
+                        */
+                       AlarmListPresenter(view::AlarmListView *view, model::AlarmList &list);
+                       ~AlarmListPresenter();
+               private:
+                       view::AlarmListView *view_;
+                       model::AlarmList &model_;
+                       void ShowAll();
+                       void OnItemSelected(int idx);
+                       void OnAddButtonClicked();
+                       void OnItemActiveStatusChanged(int idx);
+                       void OnAlarmAddedEvent(model::AlarmList::Iterator e);
+                       void OnAlarmRemovedEvent(model::AlarmList::Iterator e);
+                       void OnAlarmEditedEvent(model::AlarmList::Iterator e);
+                       void OnDeleteItemClicked();
+                       void UpdateBackgroundLabel();
+                       std::map<int, model::AlarmList::Iterator> alarms_;
+                       std::vector<utils::Connection> connections_;
+                       bool CheckModelSizeLimit();
+                       void OnMenuButtonClicked();
+       };
+} /* presenters */
+
+#endif
diff --git a/clock/inc/Presenter/AlarmPresenter.h b/clock/inc/Presenter/AlarmPresenter.h
deleted file mode 100644 (file)
index c9ddd5a..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
-* Copyright 2016  Samsung Electronics Co., Ltd
-*
-* Licensed under the Flora License, Version 1.1 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://floralicense.org/license/
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
-#ifndef _ALARM_PRESENTER_H_
-#define _ALARM_PRESENTER_H_
-
-#include "View/AlarmView.h"
-#include "Model/AlarmList.h"
-#include "Utils/EventBus.h"
-
-#include <map>
-#include <vector>
-
-namespace presenter {
-       /**
-        * @brief class managing displaying information on AlarmView and updating data in
-        * AlarmProvider class.
-        */
-       class AlarmPresenter {
-               public:
-                       /**
-                        * @brief Constructs object instance
-                        * @param view AlarmView instance which presenter will be managing
-                        * @param list AlarmList instance which presenter will be managing
-                        */
-                       AlarmPresenter(view::AlarmView *view, model::AlarmList &list);
-                       ~AlarmPresenter();
-               private:
-                       view::AlarmView *view_;
-                       model::AlarmList &model_;
-                       void ShowAll();
-                       void OnItemSelected(int idx);
-                       void OnAddButtonClicked();
-                       void OnItemActiveStatusChanged(int idx);
-                       void OnAlarmAddedEvent(model::AlarmList::Iterator e);
-                       void OnAlarmRemovedEvent(model::AlarmList::Iterator e);
-                       void OnAlarmEditedEvent(model::AlarmList::Iterator e);
-                       void OnDeleteItemClicked();
-                       void UpdateBackgroundLabel();
-                       std::map<int, model::AlarmList::Iterator> alarms_;
-                       std::vector<utils::Connection> connections_;
-                       bool CheckModelSizeLimit();
-                       void OnMenuButtonClicked();
-       };
-} /* presenters */
-
-#endif
diff --git a/clock/inc/View/AlarmListView.h b/clock/inc/View/AlarmListView.h
new file mode 100644 (file)
index 0000000..b2b41e2
--- /dev/null
@@ -0,0 +1,150 @@
+/*
+* Copyright 2016  Samsung Electronics Co., Ltd
+*
+* Licensed under the Flora License, Version 1.1 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://floralicense.org/license/
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+#ifndef ALARMVIEW_H_
+#define ALARMVIEW_H_
+
+#include "View/View.h"
+#include "Model/WeekFlags.h"
+#include "Utils/Signal.h"
+#include "Utils/Time.h"
+
+#include <functional>
+
+namespace view {
+       /**
+        * @brief View showing list of items which can be clicked.
+        *
+        * @note additionally displays "+" button and can display menu popup
+        */
+       class AlarmListView : public ui::IView {
+               public:
+                       /**
+                        * @brief Alarm view constructor
+                        *
+                        * @param[in] main The main view object
+                        *
+                        */
+                       AlarmListView(ui::IView &main);
+
+                       /**
+                        * @brief Clear all items.
+                        */
+                       void Clear();
+
+                       /**
+                        * @brief Prepends item to list.
+                        *
+                        * @param[in] time time to be displayed.
+                        * @param[in] name name to be displayed.
+                        * @param[in] flags weekflags to be displayed.
+                        * @param[in] active item active status.
+                        *
+                        * @return return item identiefier.
+                        */
+                       int ItemPrepend(utils::Time time, const char *name,
+                                       const model::WeekFlags flags, bool active);
+
+                       /**
+                        * @brief Remove item from view.
+                        * @param idx item identifier.
+                        */
+                       void RemoveItem(int idx);
+
+                       /**
+                        * @brief Updates item.
+                        *
+                        * @param[in] idx index of item to be updated.
+                        * @param[in] time time to be displayed.
+                        * @param[in] name name to be displayed.
+                        * @param[in] flags weekflags to be displayed.
+                        * @param[in] active item active status.
+                        */
+                       void ItemUpdate(int idx, utils::Time time, const char *name,
+                                       const model::WeekFlags flags, bool active);
+
+                       /**
+                        * @brief Signal emitted when user clicked "delete" item on Delete popup
+                        */
+                       utils::Signal<void(void)> OnDeleteItemClicked;
+
+                       /**
+                        * @brief Signal emitted when user clicked "+" button
+                        */
+                       utils::Signal<void(void)> OnAddButtonClicked;
+
+                       /**
+                        * @brief Signal emitted when user clicked "menu" hardware button
+                        */
+                       utils::Signal<void(void)> OnMenuButtonClicked;
+
+                       /**
+                        * @brief Signal emitted when user selected item on alarm list
+                        */
+                       utils::Signal<void(int)> OnItemSelected;
+
+                       /**
+                        * @brief Signal emitted when user toggled checkbox on alarm list item
+                        */
+                       utils::Signal<void(int)> OnItemToggled;
+
+                       Evas_Object *GetEvasObject();
+
+                       /**
+                        * @brief Shows "No Alarms" message in list background
+                        */
+                       void ShowNoAlarmsBackgroundLabel();
+
+                       /**
+                        * @brief Hides "No Alarms" message in list background
+                        */
+                       void HideNoAlarmsBackgroundLabel();
+
+                       /**
+                        * @brief Shows popup window with specified text
+                        *
+                        * @param[in] text text to be displayed on popup.
+                        */
+                       void ShowPopup(const std::string &text);
+
+                       /**
+                        * @brief Shows delete popup
+                        */
+                       void ShowDeletePopup();
+
+               private:
+                       static Elm_Genlist_Item_Class alarm_itc;
+                       static Evas_Object *ContentGet(void *data, Evas_Object *obj, const char *part);
+                       static char *TextGet(void *data, Evas_Object *obj, const char *part);
+                       static void Del(void *data, Evas_Object *obj);
+                       static void ItemClicked(void *data, Evas_Object *obj, void *info);
+                       static void ItemRealized(void *data, Evas_Object *obj, void *info);
+                       static void ItemSelected(void *data, Evas_Object *obj, void *info);
+                       static void ButtonClicked(void *data, Evas_Object *obj, void *info);
+                       static void MoreButtonClicked(void *data, Evas_Object *obj, void *info);
+                       static void DismissPopupCallback(void *data, Evas_Object *obj, void *info);
+                       static void PopupDeleteItemCallback(void *data, Evas_Object *obj, void *info);
+
+                       Evas_Object *genlist_;
+                       Evas_Object *content_;
+                       Evas_Object *popup_;
+                       Evas_Object *label_;
+                       utils::Connection time_format_change_listener_;
+                       void TimeFormatChanged();
+       };
+}
+
+#endif /* ALARMVIEW_H_ */
diff --git a/clock/inc/View/AlarmView.h b/clock/inc/View/AlarmView.h
deleted file mode 100644 (file)
index aa13129..0000000
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
-* Copyright 2016  Samsung Electronics Co., Ltd
-*
-* Licensed under the Flora License, Version 1.1 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://floralicense.org/license/
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
-#ifndef ALARMVIEW_H_
-#define ALARMVIEW_H_
-
-#include "View/View.h"
-#include "Model/WeekFlags.h"
-#include "Utils/Signal.h"
-#include "Utils/Time.h"
-
-#include <functional>
-
-namespace view {
-       /**
-        * @brief View showing list of items which can be clicked.
-        *
-        * @note additionally displays "+" button and can display menu popup
-        */
-       class AlarmView : public ui::IView {
-               public:
-                       /**
-                        * @brief Alarm view constructor
-                        *
-                        * @param[in] main The main view object
-                        *
-                        */
-                       AlarmView(ui::IView &main);
-
-                       /**
-                        * @brief Clear all items.
-                        */
-                       void Clear();
-
-                       /**
-                        * @brief Prepends item to list.
-                        *
-                        * @param[in] time time to be displayed.
-                        * @param[in] name name to be displayed.
-                        * @param[in] flags weekflags to be displayed.
-                        * @param[in] active item active status.
-                        *
-                        * @return return item identiefier.
-                        */
-                       int ItemPrepend(utils::Time time, const char *name,
-                                       const model::WeekFlags flags, bool active);
-
-                       /**
-                        * @brief Remove item from view.
-                        * @param idx item identifier.
-                        */
-                       void RemoveItem(int idx);
-
-                       /**
-                        * @brief Updates item.
-                        *
-                        * @param[in] idx index of item to be updated.
-                        * @param[in] time time to be displayed.
-                        * @param[in] name name to be displayed.
-                        * @param[in] flags weekflags to be displayed.
-                        * @param[in] active item active status.
-                        */
-                       void ItemUpdate(int idx, utils::Time time, const char *name,
-                                       const model::WeekFlags flags, bool active);
-
-                       /**
-                        * @brief Signal emitted when user clicked "delete" item on Delete popup
-                        */
-                       utils::Signal<void(void)> OnDeleteItemClicked;
-
-                       /**
-                        * @brief Signal emitted when user clicked "+" button
-                        */
-                       utils::Signal<void(void)> OnAddButtonClicked;
-
-                       /**
-                        * @brief Signal emitted when user clicked "menu" hardware button
-                        */
-                       utils::Signal<void(void)> OnMenuButtonClicked;
-
-                       /**
-                        * @brief Signal emitted when user selected item on alarm list
-                        */
-                       utils::Signal<void(int)> OnItemSelected;
-
-                       /**
-                        * @brief Signal emitted when user toggled checkbox on alarm list item
-                        */
-                       utils::Signal<void(int)> OnItemToggled;
-
-                       Evas_Object *GetEvasObject();
-
-                       /**
-                        * @brief Shows "No Alarms" message in list background
-                        */
-                       void ShowNoAlarmsBackgroundLabel();
-
-                       /**
-                        * @brief Hides "No Alarms" message in list background
-                        */
-                       void HideNoAlarmsBackgroundLabel();
-
-                       /**
-                        * @brief Shows popup window with specified text
-                        *
-                        * @param[in] text text to be displayed on popup.
-                        */
-                       void ShowPopup(const std::string &text);
-
-                       /**
-                        * @brief Shows delete popup
-                        */
-                       void ShowDeletePopup();
-
-               private:
-                       static Elm_Genlist_Item_Class alarm_itc;
-                       static Evas_Object *ContentGet(void *data, Evas_Object *obj, const char *part);
-                       static char *TextGet(void *data, Evas_Object *obj, const char *part);
-                       static void Del(void *data, Evas_Object *obj);
-                       static void ItemClicked(void *data, Evas_Object *obj, void *info);
-                       static void ItemRealized(void *data, Evas_Object *obj, void *info);
-                       static void ItemSelected(void *data, Evas_Object *obj, void *info);
-                       static void ButtonClicked(void *data, Evas_Object *obj, void *info);
-                       static void MoreButtonClicked(void *data, Evas_Object *obj, void *info);
-                       static void DismissPopupCallback(void *data, Evas_Object *obj, void *info);
-                       static void PopupDeleteItemCallback(void *data, Evas_Object *obj, void *info);
-
-                       Evas_Object *genlist_;
-                       Evas_Object *content_;
-                       Evas_Object *popup_;
-                       Evas_Object *label_;
-                       utils::Connection time_format_change_listener_;
-                       void TimeFormatChanged();
-       };
-}
-
-#endif /* ALARMVIEW_H_ */
index 68eda76b7b7e09d58fbf09e4424e00e27e5472db..39df13dc72077ba8c445792305c41da5bafcd866 100644 (file)
@@ -96,7 +96,7 @@ int MainController::Init()
 {
        if (initialized_) return 0;
 
-       alarm_presenter_ = new AlarmPresenter((AlarmView *)main_view_.GetView(ALARM), provider_->GetAlarms());
+       alarm_presenter_ = new AlarmListPresenter((AlarmListView *)main_view_.GetView(ALARM), provider_->GetAlarms());
 
        idler_ = ecore_idler_add(IdlerCb, this);
 
diff --git a/clock/src/Presenter/AlarmListPresenter.cpp b/clock/src/Presenter/AlarmListPresenter.cpp
new file mode 100644 (file)
index 0000000..f0924fe
--- /dev/null
@@ -0,0 +1,170 @@
+/*
+* Copyright 2016  Samsung Electronics Co., Ltd
+*
+* Licensed under the Flora License, Version 1.1 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://floralicense.org/license/
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+#include "Presenter/AlarmListPresenter.h"
+#include "Model/AlarmEvent.h"
+#include "Utils/EventBus.h"
+#include "Utils/Log.h"
+#include "Utils/Translate.h"
+
+using namespace presenter;
+using namespace view;
+using namespace model;
+using namespace utils;
+using std::placeholders::_1;
+
+
+AlarmListPresenter::AlarmListPresenter(AlarmListView *v, AlarmList &m) : view_(v), model_(m)
+{
+       connections_.push_back(
+                       view_->OnAddButtonClicked.Connect(std::bind(&AlarmListPresenter::OnAddButtonClicked, this)));
+       connections_.push_back(
+                       view_->OnDeleteItemClicked.Connect(std::bind(&AlarmListPresenter::OnDeleteItemClicked, this)));
+       connections_.push_back(
+                       view_->OnItemToggled.Connect(std::bind(&AlarmListPresenter::OnItemActiveStatusChanged, this, _1)));
+       connections_.push_back(
+                       view_->OnItemSelected.Connect(std::bind(&AlarmListPresenter::OnItemSelected, this, _1)));
+       connections_.push_back(
+                       view_->OnMenuButtonClicked.Connect(std::bind(&AlarmListPresenter::OnMenuButtonClicked, this)));
+
+       connections_.push_back(model_.OnAdded.Connect(
+                       std::bind(&AlarmListPresenter::OnAlarmAddedEvent, this, _1)));
+       connections_.push_back(model_.OnRemoved.Connect(
+                       std::bind(&AlarmListPresenter::OnAlarmRemovedEvent, this, _1)));
+       connections_.push_back(model_.OnReplaced.Connect(
+                       std::bind(&AlarmListPresenter::OnAlarmEditedEvent, this, _1)));
+
+       ShowAll();
+}
+
+AlarmListPresenter::~AlarmListPresenter()
+{
+}
+
+void AlarmListPresenter::ShowAll()
+{
+       view_->Clear();
+
+       for (auto it = model_.Begin(); it != model_.End(); ++it) {
+               int id = view_->ItemPrepend(
+                               it->GetTime(),
+                               it->GetName().c_str(),
+                               it->GetWeekFlags(),
+                               it->IsActivated());
+               alarms_.insert(std::map<int, AlarmList::Iterator>::value_type (id, it));
+       }
+
+       UpdateBackgroundLabel();
+}
+
+void AlarmListPresenter::OnItemSelected(int idx)
+{
+       auto it = alarms_.find(idx);
+       if (it == alarms_.end())
+               return;
+
+       AlarmList::Iterator alarm_it = it->second;
+       AlarmEditRequestEvent ev(model_, alarm_it);
+       EventBus::FireEvent(ev);
+}
+
+void AlarmListPresenter::OnAddButtonClicked()
+{
+       AlarmCreateRequestEvent ev;
+
+       if (model_.Size() == model_.MaxSize()) {
+               std::string text = Translate::Sprintf("IDS_ALM_BODY_MAXIMUM_NUMBER_OF_ALARMS_HPD_REACHED",
+                               model_.MaxSize());
+
+               view_->ShowPopup(text);
+               return;
+       }
+       EventBus::FireEvent(ev);
+}
+
+void AlarmListPresenter::OnItemActiveStatusChanged(int idx)
+{
+       auto it = alarms_.find(idx);
+
+       if (it == alarms_.end())
+               return;
+
+       auto &alarm_it = it->second;
+
+       if (alarm_it->IsActivated()) {
+               alarm_it->Deactivate();
+       } else {
+               alarm_it->Activate();
+       }
+
+       model_.Replace(alarm_it, *alarm_it);
+}
+
+void AlarmListPresenter::OnAlarmAddedEvent(AlarmList::Iterator it)
+{
+       int id = view_->ItemPrepend(
+                       it->GetTime(),
+                       it->GetName().c_str(),
+                       it->GetWeekFlags(),
+                       it->IsActivated());
+       alarms_.insert(std::map<int, AlarmList::Iterator>::value_type (id, it));
+       UpdateBackgroundLabel();
+}
+
+void AlarmListPresenter::OnDeleteItemClicked()
+{
+       AlarmDeleteRequestEvent ev;
+       EventBus::FireEvent(ev);
+}
+
+void AlarmListPresenter::OnMenuButtonClicked()
+{
+       if (model_.Size() > 0)
+               view_->ShowDeletePopup();
+}
+
+void AlarmListPresenter::OnAlarmRemovedEvent(AlarmList::Iterator iterator)
+{
+       for (auto it = alarms_.begin(); it != alarms_.end(); ++it) {
+               if (iterator == it->second) {
+                       view_->RemoveItem(it->first);
+                       alarms_.erase(it);
+                       break;
+               }
+       }
+       UpdateBackgroundLabel();
+}
+
+void AlarmListPresenter::UpdateBackgroundLabel()
+{
+       if (alarms_.size() == 0)
+               view_->ShowNoAlarmsBackgroundLabel();
+       else
+               view_->HideNoAlarmsBackgroundLabel();
+}
+
+void AlarmListPresenter::OnAlarmEditedEvent(AlarmList::Iterator iterator)
+{
+       auto end = alarms_.end();
+       for (auto it = alarms_.begin(); it != end; ++it) {
+               if (iterator == it->second) {
+                       auto &alarm_it = it->second;
+                       view_->ItemUpdate(it->first, alarm_it->GetTime(), alarm_it->GetName().c_str(),
+                                       alarm_it->GetWeekFlags(), alarm_it->IsActivated());
+                       break;
+               }
+       }
+}
diff --git a/clock/src/Presenter/AlarmPresenter.cpp b/clock/src/Presenter/AlarmPresenter.cpp
deleted file mode 100644 (file)
index b0580b8..0000000
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
-* Copyright 2016  Samsung Electronics Co., Ltd
-*
-* Licensed under the Flora License, Version 1.1 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://floralicense.org/license/
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
-#include "Presenter/AlarmPresenter.h"
-#include "Model/AlarmEvent.h"
-#include "Utils/EventBus.h"
-#include "Utils/Log.h"
-#include "Utils/Translate.h"
-
-using namespace presenter;
-using namespace view;
-using namespace model;
-using namespace utils;
-using std::placeholders::_1;
-
-
-AlarmPresenter::AlarmPresenter(AlarmView *v, AlarmList &m) : view_(v), model_(m)
-{
-       connections_.push_back(
-                       view_->OnAddButtonClicked.Connect(std::bind(&AlarmPresenter::OnAddButtonClicked, this)));
-       connections_.push_back(
-                       view_->OnDeleteItemClicked.Connect(std::bind(&AlarmPresenter::OnDeleteItemClicked, this)));
-       connections_.push_back(
-                       view_->OnItemToggled.Connect(std::bind(&AlarmPresenter::OnItemActiveStatusChanged, this, _1)));
-       connections_.push_back(
-                       view_->OnItemSelected.Connect(std::bind(&AlarmPresenter::OnItemSelected, this, _1)));
-       connections_.push_back(
-                       view_->OnMenuButtonClicked.Connect(std::bind(&AlarmPresenter::OnMenuButtonClicked, this)));
-
-       connections_.push_back(model_.OnAdded.Connect(
-                       std::bind(&AlarmPresenter::OnAlarmAddedEvent, this, _1)));
-       connections_.push_back(model_.OnRemoved.Connect(
-                       std::bind(&AlarmPresenter::OnAlarmRemovedEvent, this, _1)));
-       connections_.push_back(model_.OnReplaced.Connect(
-                       std::bind(&AlarmPresenter::OnAlarmEditedEvent, this, _1)));
-
-       ShowAll();
-}
-
-AlarmPresenter::~AlarmPresenter()
-{
-}
-
-void AlarmPresenter::ShowAll()
-{
-       view_->Clear();
-
-       for (auto it = model_.Begin(); it != model_.End(); ++it) {
-               int id = view_->ItemPrepend(
-                               it->GetTime(),
-                               it->GetName().c_str(),
-                               it->GetWeekFlags(),
-                               it->IsActivated());
-               alarms_.insert(std::map<int, AlarmList::Iterator>::value_type (id, it));
-       }
-
-       UpdateBackgroundLabel();
-}
-
-void AlarmPresenter::OnItemSelected(int idx)
-{
-       auto it = alarms_.find(idx);
-       if (it == alarms_.end())
-               return;
-
-       AlarmList::Iterator alarm_it = it->second;
-       AlarmEditRequestEvent ev(model_, alarm_it);
-       EventBus::FireEvent(ev);
-}
-
-void AlarmPresenter::OnAddButtonClicked()
-{
-       AlarmCreateRequestEvent ev;
-
-       if (model_.Size() == model_.MaxSize()) {
-               std::string text = Translate::Sprintf("IDS_ALM_BODY_MAXIMUM_NUMBER_OF_ALARMS_HPD_REACHED",
-                               model_.MaxSize());
-
-               view_->ShowPopup(text);
-               return;
-       }
-       EventBus::FireEvent(ev);
-}
-
-void AlarmPresenter::OnItemActiveStatusChanged(int idx)
-{
-       auto it = alarms_.find(idx);
-
-       if (it == alarms_.end())
-               return;
-
-       auto &alarm_it = it->second;
-
-       if (alarm_it->IsActivated()) {
-               alarm_it->Deactivate();
-       } else {
-               alarm_it->Activate();
-       }
-
-       model_.Replace(alarm_it, *alarm_it);
-}
-
-void AlarmPresenter::OnAlarmAddedEvent(AlarmList::Iterator it)
-{
-       int id = view_->ItemPrepend(
-                       it->GetTime(),
-                       it->GetName().c_str(),
-                       it->GetWeekFlags(),
-                       it->IsActivated());
-       alarms_.insert(std::map<int, AlarmList::Iterator>::value_type (id, it));
-       UpdateBackgroundLabel();
-}
-
-void AlarmPresenter::OnDeleteItemClicked()
-{
-       AlarmDeleteRequestEvent ev;
-       EventBus::FireEvent(ev);
-}
-
-void AlarmPresenter::OnMenuButtonClicked()
-{
-       if (model_.Size() > 0)
-               view_->ShowDeletePopup();
-}
-
-void AlarmPresenter::OnAlarmRemovedEvent(AlarmList::Iterator iterator)
-{
-       for (auto it = alarms_.begin(); it != alarms_.end(); ++it) {
-               if (iterator == it->second) {
-                       view_->RemoveItem(it->first);
-                       alarms_.erase(it);
-                       break;
-               }
-       }
-       UpdateBackgroundLabel();
-}
-
-void AlarmPresenter::UpdateBackgroundLabel()
-{
-       if (alarms_.size() == 0)
-               view_->ShowNoAlarmsBackgroundLabel();
-       else
-               view_->HideNoAlarmsBackgroundLabel();
-}
-
-void AlarmPresenter::OnAlarmEditedEvent(AlarmList::Iterator iterator)
-{
-       auto end = alarms_.end();
-       for (auto it = alarms_.begin(); it != end; ++it) {
-               if (iterator == it->second) {
-                       auto &alarm_it = it->second;
-                       view_->ItemUpdate(it->first, alarm_it->GetTime(), alarm_it->GetName().c_str(),
-                                       alarm_it->GetWeekFlags(), alarm_it->IsActivated());
-                       break;
-               }
-       }
-}
diff --git a/clock/src/View/AlarmListView.cpp b/clock/src/View/AlarmListView.cpp
new file mode 100644 (file)
index 0000000..9e0229c
--- /dev/null
@@ -0,0 +1,402 @@
+/*
+* Copyright 2016  Samsung Electronics Co., Ltd
+*
+* Licensed under the Flora License, Version 1.1 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://floralicense.org/license/
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+#include "View/AlarmListView.h"
+#include "View/MainView.h"
+#include "Utils/TizenAppUtils.h"
+#include <Elementary.h>
+#include <cstdlib>
+#include <sstream>
+#include <efl_extension.h>
+
+#include "Utils/Log.h"
+#include "Utils/PopupManager.h"
+#include "Utils/ThemeExtension.h"
+#include "Utils/Translate.h"
+#include "Utils/Accessibility.h"
+#include "Utils/SystemSettings.h"
+
+using namespace view;
+using namespace model;
+using namespace utils;
+
+/**
+ * Genlist data
+ */
+struct ItemData {
+       /** Owner of data */
+       AlarmListView *instance;
+       /** Display text */
+       char *name;
+       /** Activation flag */
+       bool active;
+       /** Week flags to display */
+       WeekFlags flags;
+       /** Time to display */
+       Time time;
+       /** Iternal EFL handle */
+       Elm_Object_Item *it;
+};
+
+Elm_Genlist_Item_Class AlarmListView::alarm_itc = {
+       0, 0, EINA_FALSE, EINA_TRUE,
+       "alarm", nullptr, nullptr,
+       { AlarmListView::TextGet,
+         AlarmListView::ContentGet,
+         nullptr,
+         AlarmListView::Del,
+         nullptr,
+         nullptr,
+       }
+};
+
+void AlarmListView::ItemClicked(void *data, Evas_Object *obj, void *info)
+{
+       ItemData *id = static_cast<ItemData*>(data);
+
+       if (elm_check_state_get(obj))
+               elm_object_item_signal_emit(id->it, "alarm,state,enabled", "clock");
+       else
+               elm_object_item_signal_emit(id->it, "alarm,state,disabled", "clock");
+
+       id->instance->OnItemToggled((uintptr_t)id->it);
+}
+
+static void SetItemRepeatIconVisibility(Elm_Object_Item *it, bool visible)
+{
+       if (visible) {
+               elm_object_item_signal_emit(it, "show,repeat,icon", "clock");
+       } else {
+               elm_object_item_signal_emit(it, "hide,repeat,icon", "clock");
+       }
+}
+
+void AlarmListView::ItemRealized(void *data, Evas_Object *obj, void *info)
+{
+       Elm_Object_Item *it = static_cast<Elm_Object_Item*>(info);
+
+       ItemData *id = static_cast<ItemData*>(elm_object_item_data_get(it));
+
+       if (id->active)
+               elm_object_item_signal_emit(id->it, "alarm,state,enabled", "clock");
+       else
+               elm_object_item_signal_emit(id->it, "alarm,state,disabled", "clock");
+
+       SetItemRepeatIconVisibility(it, (id->flags.OnAny(WeekDay::ALL_WEEK)));
+}
+
+void AlarmListView::ItemSelected(void *data, Evas_Object *obj, void *info)
+{
+       ItemData *id = static_cast<ItemData*>(data);
+       id->instance->OnItemSelected((uintptr_t)id->it);
+
+       elm_genlist_item_selected_set(id->it, EINA_FALSE);
+}
+
+Evas_Object *AlarmListView::ContentGet(void *data, Evas_Object *obj, const char *part)
+{
+       ItemData *id = static_cast<ItemData*>(data);
+
+       if (!strcmp(part, "onoff")) {
+               Evas_Object *toggle = elm_check_add(obj);
+               elm_object_style_set(toggle, "on&off");
+               elm_check_state_set(toggle, id->active ? EINA_TRUE : EINA_FALSE);
+               evas_object_propagate_events_set(toggle, EINA_FALSE);
+               evas_object_smart_callback_add(toggle, "changed", AlarmListView::ItemClicked, id);
+               evas_object_show(toggle);
+               return toggle;
+       }
+       return nullptr;
+}
+
+static std::string GetWeekDayAcronym(WeekDay day)
+{
+       switch (day)
+       {
+               case WeekDay::MONDAY:
+                       return Translate::Sprintf("WDS_ALM_BODY_M_M_MONDAY_ABB2");
+               case WeekDay::TUESDAY:
+                       return Translate::Sprintf("WDS_ALM_BODY_T_M_TUESDAY_ABB2");
+               case WeekDay::WEDNESDAY:
+                       return Translate::Sprintf("WDS_ALM_BODY_W_M_WEDNESDAY_ABB2");
+               case WeekDay::THURSDAY:
+                       return Translate::Sprintf("WDS_ALM_BODY_T_M_THURSDAY_ABB2");
+               case WeekDay::FRIDAY:
+                       return Translate::Sprintf("WDS_ALM_BODY_F_M_FRIDAY_ABB2");
+               case WeekDay::SATURDAY:
+                       return Translate::Sprintf("WDS_ALM_BODY_S_M_SATURDAY_ABB2");
+               case WeekDay::SUNDAY:
+                       return Translate::Sprintf("WDS_ALM_BODY_S_M_SUNDAY_ABB2");
+               default:
+                       FAT("Unsupported WeekDay flag");
+                       return "";
+       }
+}
+
+/**
+ * @brief Function formats weekday flag acronym according to on flag.
+ * The on/off style tags are defined in edc file.
+ */
+static std::string GetFormattedWeekDayAcronym(WeekDay day, bool on)
+{
+       if (on)
+               return "<on>" + GetWeekDayAcronym(day) + "</on>";
+       else
+               return "<off>" + GetWeekDayAcronym(day) + "</off>";
+}
+
+static char *WeekFlag2FormattedString(WeekFlags flags)
+{
+       std::stringstream weekflags;
+
+       weekflags << GetFormattedWeekDayAcronym(WeekDay::MONDAY, flags.IsOn(WeekDay::MONDAY));
+       weekflags << GetFormattedWeekDayAcronym(WeekDay::TUESDAY, flags.IsOn(WeekDay::TUESDAY));
+       weekflags << GetFormattedWeekDayAcronym(WeekDay::WEDNESDAY, flags.IsOn(WeekDay::WEDNESDAY));
+       weekflags << GetFormattedWeekDayAcronym(WeekDay::THURSDAY, flags.IsOn(WeekDay::THURSDAY));
+       weekflags << GetFormattedWeekDayAcronym(WeekDay::FRIDAY, flags.IsOn(WeekDay::FRIDAY));
+       weekflags << GetFormattedWeekDayAcronym(WeekDay::SATURDAY, flags.IsOn(WeekDay::SATURDAY));
+       weekflags << GetFormattedWeekDayAcronym(WeekDay::SUNDAY, flags.IsOn(WeekDay::SUNDAY));
+
+       return strdup(weekflags.str().c_str());
+}
+
+static char *Time2FormattedString(const Time &time)
+{
+       std::stringstream formatted_time;
+
+       if (SystemSettings::Is24HourFormatPrefered()) {
+               formatted_time << time.Format(Time::FORMAT_TIME_24H);
+       } else {
+               formatted_time << time.Format(Time::FORMAT_TIME_12H);
+               formatted_time << " <meridiem>";
+               formatted_time << time.Format(Time::FORMAT_TIME_AMPM);
+               formatted_time << "</meridiem>";
+       }
+
+       return strdup(formatted_time.str().c_str());
+}
+
+char *AlarmListView::TextGet(void *data, Evas_Object *obj, const char *part)
+{
+       ItemData *id = static_cast<ItemData*>(data);
+
+       if (!strcmp(part, "name"))
+               return strdup(id->name);
+       if (!strcmp(part, "time"))
+               return Time2FormattedString(id->time);
+       if (!strcmp(part, "weekflags"))
+               return WeekFlag2FormattedString(id->flags);
+
+       return NULL;
+}
+
+void AlarmListView::Del(void *data, Evas_Object *obj)
+{
+       ItemData *id = static_cast<ItemData*>(data);
+       delete id->name;
+       delete id;
+}
+
+AlarmListView::AlarmListView(ui::IView &main) : popup_(nullptr), label_(nullptr)
+{
+       /* Base Layout */
+       content_ = elm_layout_add(main.GetEvasObject());
+       evas_object_size_hint_weight_set(content_, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_layout_theme_set(content_, "layout", "application", "default");
+       evas_object_show(content_);
+
+       /* Genlist */
+       genlist_ = elm_genlist_add(content_);
+       elm_genlist_homogeneous_set(genlist_, EINA_TRUE);
+       evas_object_size_hint_expand_set(genlist_, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(genlist_, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_smart_callback_add(genlist_, "realized", AlarmListView::ItemRealized, this);
+       evas_object_show(genlist_);
+
+       elm_object_content_set(content_, genlist_);
+
+       /* Floating Button */
+       Evas_Object *fb = eext_floatingbutton_add(content_);
+       elm_object_part_content_set(content_, "elm.swallow.floatingbutton", fb);
+       /* Floating Button 1 */
+       Evas_Object *btn = elm_button_add(fb);
+       evas_object_smart_callback_add(btn, "clicked", AlarmListView::ButtonClicked, this);
+       Evas_Object *image = elm_image_add(fb);
+       elm_image_file_set(image, TizenAppUtils::GetResourcePath(TizenAppUtils::APP_DIR_RESOURCE,
+                               "images/core_floating_icon_01.png"), NULL);
+       elm_object_part_content_set(btn, "icon", image);
+
+       elm_object_part_content_set(fb, "button1", btn);
+
+       Accessibility::SetName(btn, Translate::Sprintf("IDS_ALM_OPT_ADD_ALARM"));
+
+       ThemeExtension::AddTheme(TizenAppUtils::GetResourcePath(TizenAppUtils::APP_DIR_RESOURCE, "edje/alarm.edj"));
+
+       eext_object_event_callback_add(content_, EEXT_CALLBACK_MORE,
+                        AlarmListView::MoreButtonClicked, this);
+
+       time_format_change_listener_ = EventBus::AddListener<SystemSettings::TimeFormatChanged>(
+                       std::bind(&AlarmListView::TimeFormatChanged, this));
+}
+
+void AlarmListView::TimeFormatChanged()
+{
+       elm_genlist_realized_items_update(genlist_);
+}
+
+void AlarmListView::MoreButtonClicked(void *data, Evas_Object *obj, void *info)
+{
+       AlarmListView *view = static_cast<AlarmListView*>(data);
+       view->OnMenuButtonClicked();
+}
+
+void AlarmListView::Clear()
+{
+       elm_genlist_clear(genlist_);
+}
+
+int AlarmListView::ItemPrepend(Time time, const char *name, const  WeekFlags flags, bool active)
+{
+       ItemData *data = new ItemData;
+
+       data->instance = this;
+       data->name = name ? strdup(name) : nullptr;
+       data->flags = flags;
+       data->active = active;
+       data->time = time;
+
+       data->it = elm_genlist_item_prepend(genlist_,
+                       &alarm_itc,
+                       data,
+                       NULL,
+                       ELM_GENLIST_ITEM_NONE,
+                       AlarmListView::ItemSelected, data);
+
+       return (uintptr_t)data->it;
+}
+
+void AlarmListView::ItemUpdate(int idx, Time time, const char *name,
+               const WeekFlags flags, bool active)
+{
+       Elm_Object_Item *it = (Elm_Object_Item*)idx;
+       if (!it) return;
+
+       ItemData *data = static_cast<ItemData*>(elm_object_item_data_get(it));
+
+       if (data->name) free(data->name);
+       data->name = name ? strdup(name) : nullptr;
+       data->flags = flags;
+       data->active = active;
+       data->time = time;
+
+       SetItemRepeatIconVisibility(it, (data->flags.OnAny(WeekDay::ALL_WEEK)));
+       elm_genlist_item_update(it);
+}
+
+void AlarmListView::RemoveItem(int idx)
+{
+       Elm_Object_Item *it = (Elm_Object_Item*)idx;
+       if (it) elm_object_item_del(it);
+}
+
+Evas_Object *AlarmListView::GetEvasObject()
+{
+       return content_;
+}
+
+void AlarmListView::ButtonClicked(void *data, Evas_Object *obj, void *event_info)
+{
+       AlarmListView *view = static_cast<AlarmListView*>(data);
+       view->OnAddButtonClicked();
+}
+
+void AlarmListView::DismissPopupCallback(void *data, Evas_Object *obj, void *event_info)
+{
+       AlarmListView *view = static_cast<AlarmListView*>(data);
+       evas_object_del(view->popup_);
+       view->popup_ = nullptr;
+}
+
+void AlarmListView::PopupDeleteItemCallback(void *data, Evas_Object *obj, void *event_info)
+{
+       AlarmListView *view = static_cast<AlarmListView*>(data);
+       view->OnDeleteItemClicked();
+       evas_object_del(view->popup_);
+       view->popup_ = nullptr;
+}
+
+void AlarmListView::ShowDeletePopup()
+{
+       if (popup_) return;
+
+       popup_ = elm_popup_add(elm_object_top_widget_get(content_));
+       elm_popup_align_set(popup_, ELM_NOTIFY_ALIGN_FILL, 1.0);
+       evas_object_size_hint_weight_set(popup_, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_smart_callback_add(popup_, "block,clicked", AlarmListView::DismissPopupCallback, this);
+       eext_object_event_callback_add(popup_, EEXT_CALLBACK_BACK, AlarmListView::DismissPopupCallback, this);
+
+       Evas_Object *list = elm_list_add(popup_);
+       elm_list_mode_set(list, ELM_LIST_EXPAND);
+       evas_object_show(list);
+
+       elm_list_item_append(list, Translate::Sprintf("IDS_COM_SK_DELETE").c_str(), NULL, NULL, AlarmListView::PopupDeleteItemCallback, this);
+       elm_object_content_set(popup_, list);
+       evas_object_show(popup_);
+}
+
+void AlarmListView::ShowNoAlarmsBackgroundLabel()
+{
+       if (!label_) {
+               label_ = elm_layout_add(content_);
+               if (!elm_layout_file_set(label_, TizenAppUtils::GetResourcePath(TizenAppUtils::APP_DIR_RESOURCE, "edje/alarm.edj"), "alarm.label"))
+                       abort();
+
+               elm_object_translatable_part_text_set(label_, "text.main", "IDS_ALM_BODY_NO_ALARMS");
+               elm_object_translatable_part_text_set(label_, "text.sub",
+                               "IDS_CLOCK_BODY_AFTER_YOU_CREATE_ALARMS_THEY_WILL_BE_SHOWN_HERE");
+               evas_object_size_hint_expand_set(label_, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_size_hint_align_set(label_, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_show(label_);
+
+               Accessibility::SetLabelPartDescription(label_, "text.main",
+                               Translate::Sprintf("IDS_ALM_BODY_NO_ALARMS"));
+               Accessibility::SetLabelPartDescription(label_, "text.sub",
+                               Translate::Sprintf("IDS_CLOCK_BODY_AFTER_YOU_CREATE_ALARMS_THEY_WILL_BE_SHOWN_HERE"));
+
+               // unload genlist
+               elm_object_content_unset(content_);
+               evas_object_hide(genlist_);
+
+               // load label into layout content
+               elm_object_content_set(content_, label_);
+       }
+}
+
+void AlarmListView::HideNoAlarmsBackgroundLabel()
+{
+       if (label_) {
+               evas_object_del(label_);
+               // load genlist into layout content
+               elm_object_content_set(content_, genlist_);
+               evas_object_show(genlist_);
+               label_ = nullptr;
+       }
+}
+
+void AlarmListView::ShowPopup(const std::string &text)
+{
+       PopupManager::CreatePopup(*this, text);
+}
diff --git a/clock/src/View/AlarmView.cpp b/clock/src/View/AlarmView.cpp
deleted file mode 100644 (file)
index f630a58..0000000
+++ /dev/null
@@ -1,402 +0,0 @@
-/*
-* Copyright 2016  Samsung Electronics Co., Ltd
-*
-* Licensed under the Flora License, Version 1.1 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://floralicense.org/license/
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
-#include "View/AlarmView.h"
-#include "View/MainView.h"
-#include "Utils/TizenAppUtils.h"
-#include <Elementary.h>
-#include <cstdlib>
-#include <sstream>
-#include <efl_extension.h>
-
-#include "Utils/Log.h"
-#include "Utils/PopupManager.h"
-#include "Utils/ThemeExtension.h"
-#include "Utils/Translate.h"
-#include "Utils/Accessibility.h"
-#include "Utils/SystemSettings.h"
-
-using namespace view;
-using namespace model;
-using namespace utils;
-
-/**
- * Genlist data
- */
-struct ItemData {
-       /** Owner of data */
-       AlarmView *instance;
-       /** Display text */
-       char *name;
-       /** Activation flag */
-       bool active;
-       /** Week flags to display */
-       WeekFlags flags;
-       /** Time to display */
-       Time time;
-       /** Iternal EFL handle */
-       Elm_Object_Item *it;
-};
-
-Elm_Genlist_Item_Class AlarmView::alarm_itc = {
-       0, 0, EINA_FALSE, EINA_TRUE,
-       "alarm", nullptr, nullptr,
-       { AlarmView::TextGet,
-         AlarmView::ContentGet,
-         nullptr,
-         AlarmView::Del,
-         nullptr,
-         nullptr,
-       }
-};
-
-void AlarmView::ItemClicked(void *data, Evas_Object *obj, void *info)
-{
-       ItemData *id = static_cast<ItemData*>(data);
-
-       if (elm_check_state_get(obj))
-               elm_object_item_signal_emit(id->it, "alarm,state,enabled", "clock");
-       else
-               elm_object_item_signal_emit(id->it, "alarm,state,disabled", "clock");
-
-       id->instance->OnItemToggled((uintptr_t)id->it);
-}
-
-static void SetItemRepeatIconVisibility(Elm_Object_Item *it, bool visible)
-{
-       if (visible) {
-               elm_object_item_signal_emit(it, "show,repeat,icon", "clock");
-       } else {
-               elm_object_item_signal_emit(it, "hide,repeat,icon", "clock");
-       }
-}
-
-void AlarmView::ItemRealized(void *data, Evas_Object *obj, void *info)
-{
-       Elm_Object_Item *it = static_cast<Elm_Object_Item*>(info);
-
-       ItemData *id = static_cast<ItemData*>(elm_object_item_data_get(it));
-
-       if (id->active)
-               elm_object_item_signal_emit(id->it, "alarm,state,enabled", "clock");
-       else
-               elm_object_item_signal_emit(id->it, "alarm,state,disabled", "clock");
-
-       SetItemRepeatIconVisibility(it, (id->flags.OnAny(WeekDay::ALL_WEEK)));
-}
-
-void AlarmView::ItemSelected(void *data, Evas_Object *obj, void *info)
-{
-       ItemData *id = static_cast<ItemData*>(data);
-       id->instance->OnItemSelected((uintptr_t)id->it);
-
-       elm_genlist_item_selected_set(id->it, EINA_FALSE);
-}
-
-Evas_Object *AlarmView::ContentGet(void *data, Evas_Object *obj, const char *part)
-{
-       ItemData *id = static_cast<ItemData*>(data);
-
-       if (!strcmp(part, "onoff")) {
-               Evas_Object *toggle = elm_check_add(obj);
-               elm_object_style_set(toggle, "on&off");
-               elm_check_state_set(toggle, id->active ? EINA_TRUE : EINA_FALSE);
-               evas_object_propagate_events_set(toggle, EINA_FALSE);
-               evas_object_smart_callback_add(toggle, "changed", AlarmView::ItemClicked, id);
-               evas_object_show(toggle);
-               return toggle;
-       }
-       return nullptr;
-}
-
-static std::string GetWeekDayAcronym(WeekDay day)
-{
-       switch (day)
-       {
-               case WeekDay::MONDAY:
-                       return Translate::Sprintf("WDS_ALM_BODY_M_M_MONDAY_ABB2");
-               case WeekDay::TUESDAY:
-                       return Translate::Sprintf("WDS_ALM_BODY_T_M_TUESDAY_ABB2");
-               case WeekDay::WEDNESDAY:
-                       return Translate::Sprintf("WDS_ALM_BODY_W_M_WEDNESDAY_ABB2");
-               case WeekDay::THURSDAY:
-                       return Translate::Sprintf("WDS_ALM_BODY_T_M_THURSDAY_ABB2");
-               case WeekDay::FRIDAY:
-                       return Translate::Sprintf("WDS_ALM_BODY_F_M_FRIDAY_ABB2");
-               case WeekDay::SATURDAY:
-                       return Translate::Sprintf("WDS_ALM_BODY_S_M_SATURDAY_ABB2");
-               case WeekDay::SUNDAY:
-                       return Translate::Sprintf("WDS_ALM_BODY_S_M_SUNDAY_ABB2");
-               default:
-                       FAT("Unsupported WeekDay flag");
-                       return "";
-       }
-}
-
-/**
- * @brief Function formats weekday flag acronym according to on flag.
- * The on/off style tags are defined in edc file.
- */
-static std::string GetFormattedWeekDayAcronym(WeekDay day, bool on)
-{
-       if (on)
-               return "<on>" + GetWeekDayAcronym(day) + "</on>";
-       else
-               return "<off>" + GetWeekDayAcronym(day) + "</off>";
-}
-
-static char *WeekFlag2FormattedString(WeekFlags flags)
-{
-       std::stringstream weekflags;
-
-       weekflags << GetFormattedWeekDayAcronym(WeekDay::MONDAY, flags.IsOn(WeekDay::MONDAY));
-       weekflags << GetFormattedWeekDayAcronym(WeekDay::TUESDAY, flags.IsOn(WeekDay::TUESDAY));
-       weekflags << GetFormattedWeekDayAcronym(WeekDay::WEDNESDAY, flags.IsOn(WeekDay::WEDNESDAY));
-       weekflags << GetFormattedWeekDayAcronym(WeekDay::THURSDAY, flags.IsOn(WeekDay::THURSDAY));
-       weekflags << GetFormattedWeekDayAcronym(WeekDay::FRIDAY, flags.IsOn(WeekDay::FRIDAY));
-       weekflags << GetFormattedWeekDayAcronym(WeekDay::SATURDAY, flags.IsOn(WeekDay::SATURDAY));
-       weekflags << GetFormattedWeekDayAcronym(WeekDay::SUNDAY, flags.IsOn(WeekDay::SUNDAY));
-
-       return strdup(weekflags.str().c_str());
-}
-
-static char *Time2FormattedString(const Time &time)
-{
-       std::stringstream formatted_time;
-
-       if (SystemSettings::Is24HourFormatPrefered()) {
-               formatted_time << time.Format(Time::FORMAT_TIME_24H);
-       } else {
-               formatted_time << time.Format(Time::FORMAT_TIME_12H);
-               formatted_time << " <meridiem>";
-               formatted_time << time.Format(Time::FORMAT_TIME_AMPM);
-               formatted_time << "</meridiem>";
-       }
-
-       return strdup(formatted_time.str().c_str());
-}
-
-char *AlarmView::TextGet(void *data, Evas_Object *obj, const char *part)
-{
-       ItemData *id = static_cast<ItemData*>(data);
-
-       if (!strcmp(part, "name"))
-               return strdup(id->name);
-       if (!strcmp(part, "time"))
-               return Time2FormattedString(id->time);
-       if (!strcmp(part, "weekflags"))
-               return WeekFlag2FormattedString(id->flags);
-
-       return NULL;
-}
-
-void AlarmView::Del(void *data, Evas_Object *obj)
-{
-       ItemData *id = static_cast<ItemData*>(data);
-       delete id->name;
-       delete id;
-}
-
-AlarmView::AlarmView(ui::IView &main) : popup_(nullptr), label_(nullptr)
-{
-       /* Base Layout */
-       content_ = elm_layout_add(main.GetEvasObject());
-       evas_object_size_hint_weight_set(content_, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-       elm_layout_theme_set(content_, "layout", "application", "default");
-       evas_object_show(content_);
-
-       /* Genlist */
-       genlist_ = elm_genlist_add(content_);
-       elm_genlist_homogeneous_set(genlist_, EINA_TRUE);
-       evas_object_size_hint_expand_set(genlist_, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-       evas_object_size_hint_align_set(genlist_, EVAS_HINT_FILL, EVAS_HINT_FILL);
-       evas_object_smart_callback_add(genlist_, "realized", AlarmView::ItemRealized, this);
-       evas_object_show(genlist_);
-
-       elm_object_content_set(content_, genlist_);
-
-       /* Floating Button */
-       Evas_Object *fb = eext_floatingbutton_add(content_);
-       elm_object_part_content_set(content_, "elm.swallow.floatingbutton", fb);
-       /* Floating Button 1 */
-       Evas_Object *btn = elm_button_add(fb);
-       evas_object_smart_callback_add(btn, "clicked", AlarmView::ButtonClicked, this);
-       Evas_Object *image = elm_image_add(fb);
-       elm_image_file_set(image, TizenAppUtils::GetResourcePath(TizenAppUtils::APP_DIR_RESOURCE,
-                               "images/core_floating_icon_01.png"), NULL);
-       elm_object_part_content_set(btn, "icon", image);
-
-       elm_object_part_content_set(fb, "button1", btn);
-
-       Accessibility::SetName(btn, Translate::Sprintf("IDS_ALM_OPT_ADD_ALARM"));
-
-       ThemeExtension::AddTheme(TizenAppUtils::GetResourcePath(TizenAppUtils::APP_DIR_RESOURCE, "edje/alarm.edj"));
-
-       eext_object_event_callback_add(content_, EEXT_CALLBACK_MORE,
-                        AlarmView::MoreButtonClicked, this);
-
-       time_format_change_listener_ = EventBus::AddListener<SystemSettings::TimeFormatChanged>(
-                       std::bind(&AlarmView::TimeFormatChanged, this));
-}
-
-void AlarmView::TimeFormatChanged()
-{
-       elm_genlist_realized_items_update(genlist_);
-}
-
-void AlarmView::MoreButtonClicked(void *data, Evas_Object *obj, void *info)
-{
-       AlarmView *view = static_cast<AlarmView*>(data);
-       view->OnMenuButtonClicked();
-}
-
-void AlarmView::Clear()
-{
-       elm_genlist_clear(genlist_);
-}
-
-int AlarmView::ItemPrepend(Time time, const char *name, const  WeekFlags flags, bool active)
-{
-       ItemData *data = new ItemData;
-
-       data->instance = this;
-       data->name = name ? strdup(name) : nullptr;
-       data->flags = flags;
-       data->active = active;
-       data->time = time;
-
-       data->it = elm_genlist_item_prepend(genlist_,
-                       &alarm_itc,
-                       data,
-                       NULL,
-                       ELM_GENLIST_ITEM_NONE,
-                       AlarmView::ItemSelected, data);
-
-       return (uintptr_t)data->it;
-}
-
-void AlarmView::ItemUpdate(int idx, Time time, const char *name,
-               const WeekFlags flags, bool active)
-{
-       Elm_Object_Item *it = (Elm_Object_Item*)idx;
-       if (!it) return;
-
-       ItemData *data = static_cast<ItemData*>(elm_object_item_data_get(it));
-
-       if (data->name) free(data->name);
-       data->name = name ? strdup(name) : nullptr;
-       data->flags = flags;
-       data->active = active;
-       data->time = time;
-
-       SetItemRepeatIconVisibility(it, (data->flags.OnAny(WeekDay::ALL_WEEK)));
-       elm_genlist_item_update(it);
-}
-
-void AlarmView::RemoveItem(int idx)
-{
-       Elm_Object_Item *it = (Elm_Object_Item*)idx;
-       if (it) elm_object_item_del(it);
-}
-
-Evas_Object *AlarmView::GetEvasObject()
-{
-       return content_;
-}
-
-void AlarmView::ButtonClicked(void *data, Evas_Object *obj, void *event_info)
-{
-       AlarmView *view = static_cast<AlarmView*>(data);
-       view->OnAddButtonClicked();
-}
-
-void AlarmView::DismissPopupCallback(void *data, Evas_Object *obj, void *event_info)
-{
-       AlarmView *view = static_cast<AlarmView*>(data);
-       evas_object_del(view->popup_);
-       view->popup_ = nullptr;
-}
-
-void AlarmView::PopupDeleteItemCallback(void *data, Evas_Object *obj, void *event_info)
-{
-       AlarmView *view = static_cast<AlarmView*>(data);
-       view->OnDeleteItemClicked();
-       evas_object_del(view->popup_);
-       view->popup_ = nullptr;
-}
-
-void AlarmView::ShowDeletePopup()
-{
-       if (popup_) return;
-
-       popup_ = elm_popup_add(elm_object_top_widget_get(content_));
-       elm_popup_align_set(popup_, ELM_NOTIFY_ALIGN_FILL, 1.0);
-       evas_object_size_hint_weight_set(popup_, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-       evas_object_smart_callback_add(popup_, "block,clicked", AlarmView::DismissPopupCallback, this);
-       eext_object_event_callback_add(popup_, EEXT_CALLBACK_BACK, AlarmView::DismissPopupCallback, this);
-
-       Evas_Object *list = elm_list_add(popup_);
-       elm_list_mode_set(list, ELM_LIST_EXPAND);
-       evas_object_show(list);
-
-       elm_list_item_append(list, Translate::Sprintf("IDS_COM_SK_DELETE").c_str(), NULL, NULL, AlarmView::PopupDeleteItemCallback, this);
-       elm_object_content_set(popup_, list);
-       evas_object_show(popup_);
-}
-
-void AlarmView::ShowNoAlarmsBackgroundLabel()
-{
-       if (!label_) {
-               label_ = elm_layout_add(content_);
-               if (!elm_layout_file_set(label_, TizenAppUtils::GetResourcePath(TizenAppUtils::APP_DIR_RESOURCE, "edje/alarm.edj"), "alarm.label"))
-                       abort();
-
-               elm_object_translatable_part_text_set(label_, "text.main", "IDS_ALM_BODY_NO_ALARMS");
-               elm_object_translatable_part_text_set(label_, "text.sub",
-                               "IDS_CLOCK_BODY_AFTER_YOU_CREATE_ALARMS_THEY_WILL_BE_SHOWN_HERE");
-               evas_object_size_hint_expand_set(label_, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-               evas_object_size_hint_align_set(label_, EVAS_HINT_FILL, EVAS_HINT_FILL);
-               evas_object_show(label_);
-
-               Accessibility::SetLabelPartDescription(label_, "text.main",
-                               Translate::Sprintf("IDS_ALM_BODY_NO_ALARMS"));
-               Accessibility::SetLabelPartDescription(label_, "text.sub",
-                               Translate::Sprintf("IDS_CLOCK_BODY_AFTER_YOU_CREATE_ALARMS_THEY_WILL_BE_SHOWN_HERE"));
-
-               // unload genlist
-               elm_object_content_unset(content_);
-               evas_object_hide(genlist_);
-
-               // load label into layout content
-               elm_object_content_set(content_, label_);
-       }
-}
-
-void AlarmView::HideNoAlarmsBackgroundLabel()
-{
-       if (label_) {
-               evas_object_del(label_);
-               // load genlist into layout content
-               elm_object_content_set(content_, genlist_);
-               evas_object_show(genlist_);
-               label_ = nullptr;
-       }
-}
-
-void AlarmView::ShowPopup(const std::string &text)
-{
-       PopupManager::CreatePopup(*this, text);
-}
index 881f652a3266595408cde76e0f5221a1b1a5b1d5..b70a063bb5420a6b6f1bac0255889e98a5bff877 100644 (file)
@@ -18,7 +18,7 @@
 #include <Elementary.h>
 #include <efl_extension.h>
 
-#include "View/AlarmView.h"
+#include "View/AlarmListView.h"
 #include "View/StopWatchView.h"
 #include "View/TimerView.h"
 #include "View/WorldClockView.h"
@@ -32,7 +32,7 @@
 #include "Utils/Log.h"
 #include "Utils/Translate.h"
 
-#include "Presenter/AlarmPresenter.h"
+#include "Presenter/AlarmListPresenter.h"
 #include "Presenter/EditAlarmPresenter.h"
 #include "Model/AlarmProvider.h"
 
@@ -197,7 +197,7 @@ void MainView::CreateContent()
        Elm_Object_Item *item = elm_naviframe_item_push(naviframe_, NULL, NULL, NULL, NULL,
                        "tabbar/icon/notitle");
 
-       alarm_ = new AlarmView(*this);
+       alarm_ = new AlarmListView(*this);
        elm_naviframe_item_pop_cb_set(item, naviframe_pop_cb, window_);
 
        elm_object_item_part_content_set(item, "tabbar", toolbar_);
@@ -224,7 +224,7 @@ ui::IView *MainView::GetView(ViewType type)
        switch (type){
                case ALARM:
                        if (!alarm_)
-                               alarm_ = new AlarmView(*this);
+                               alarm_ = new AlarmListView(*this);
                        return alarm_;
                case WORLD_CLOCK:
                        if (!world_clock_)