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
#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"
#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"
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_;
--- /dev/null
+/*
+* 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
+++ /dev/null
-/*
-* 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
--- /dev/null
+/*
+* 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_ */
+++ /dev/null
-/*
-* 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_ */
{
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);
--- /dev/null
+/*
+* 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;
+ }
+ }
+}
+++ /dev/null
-/*
-* 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;
- }
- }
-}
--- /dev/null
+/*
+* 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);
+}
+++ /dev/null
-/*
-* 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);
-}
#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"
#include "Utils/Log.h"
#include "Utils/Translate.h"
-#include "Presenter/AlarmPresenter.h"
+#include "Presenter/AlarmListPresenter.h"
#include "Presenter/EditAlarmPresenter.h"
#include "Model/AlarmProvider.h"
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_);
switch (type){
case ALARM:
if (!alarm_)
- alarm_ = new AlarmView(*this);
+ alarm_ = new AlarmListView(*this);
return alarm_;
case WORLD_CLOCK:
if (!world_clock_)