From: Lukasz Stanislawski Date: Thu, 20 Jul 2017 13:00:36 +0000 (+0200) Subject: rename AlarmView and AlarmPresnter classes X-Git-Tag: submit/tizen/20170807.062126~24 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F05%2F140205%2F1;p=profile%2Fmobile%2Fapps%2Fnative%2Fclock.git rename AlarmView and AlarmPresnter classes 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 --- diff --git a/clock/inc/Controller/MainController.h b/clock/inc/Controller/MainController.h index 60a82f3..d23b9c6 100644 --- a/clock/inc/Controller/MainController.h +++ b/clock/inc/Controller/MainController.h @@ -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 index 0000000..0b7a558 --- /dev/null +++ b/clock/inc/Presenter/AlarmListPresenter.h @@ -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 +#include + +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 alarms_; + std::vector 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 index c9ddd5a..0000000 --- a/clock/inc/Presenter/AlarmPresenter.h +++ /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 -#include - -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 alarms_; - std::vector 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 index 0000000..b2b41e2 --- /dev/null +++ b/clock/inc/View/AlarmListView.h @@ -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 + +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 OnDeleteItemClicked; + + /** + * @brief Signal emitted when user clicked "+" button + */ + utils::Signal OnAddButtonClicked; + + /** + * @brief Signal emitted when user clicked "menu" hardware button + */ + utils::Signal OnMenuButtonClicked; + + /** + * @brief Signal emitted when user selected item on alarm list + */ + utils::Signal OnItemSelected; + + /** + * @brief Signal emitted when user toggled checkbox on alarm list item + */ + utils::Signal 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 index aa13129..0000000 --- a/clock/inc/View/AlarmView.h +++ /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 - -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 OnDeleteItemClicked; - - /** - * @brief Signal emitted when user clicked "+" button - */ - utils::Signal OnAddButtonClicked; - - /** - * @brief Signal emitted when user clicked "menu" hardware button - */ - utils::Signal OnMenuButtonClicked; - - /** - * @brief Signal emitted when user selected item on alarm list - */ - utils::Signal OnItemSelected; - - /** - * @brief Signal emitted when user toggled checkbox on alarm list item - */ - utils::Signal 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/src/Controller/MainController.cpp b/clock/src/Controller/MainController.cpp index 68eda76..39df13d 100644 --- a/clock/src/Controller/MainController.cpp +++ b/clock/src/Controller/MainController.cpp @@ -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 index 0000000..f0924fe --- /dev/null +++ b/clock/src/Presenter/AlarmListPresenter.cpp @@ -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::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::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 index b0580b8..0000000 --- a/clock/src/Presenter/AlarmPresenter.cpp +++ /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::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::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 index 0000000..9e0229c --- /dev/null +++ b/clock/src/View/AlarmListView.cpp @@ -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 +#include +#include +#include + +#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(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(info); + + ItemData *id = static_cast(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(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(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 "" + GetWeekDayAcronym(day) + ""; + else + return "" + GetWeekDayAcronym(day) + ""; +} + +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 << " "; + formatted_time << time.Format(Time::FORMAT_TIME_AMPM); + formatted_time << ""; + } + + return strdup(formatted_time.str().c_str()); +} + +char *AlarmListView::TextGet(void *data, Evas_Object *obj, const char *part) +{ + ItemData *id = static_cast(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(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( + 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(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(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(data); + view->OnAddButtonClicked(); +} + +void AlarmListView::DismissPopupCallback(void *data, Evas_Object *obj, void *event_info) +{ + AlarmListView *view = static_cast(data); + evas_object_del(view->popup_); + view->popup_ = nullptr; +} + +void AlarmListView::PopupDeleteItemCallback(void *data, Evas_Object *obj, void *event_info) +{ + AlarmListView *view = static_cast(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 index f630a58..0000000 --- a/clock/src/View/AlarmView.cpp +++ /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 -#include -#include -#include - -#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(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(info); - - ItemData *id = static_cast(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(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(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 "" + GetWeekDayAcronym(day) + ""; - else - return "" + GetWeekDayAcronym(day) + ""; -} - -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 << " "; - formatted_time << time.Format(Time::FORMAT_TIME_AMPM); - formatted_time << ""; - } - - return strdup(formatted_time.str().c_str()); -} - -char *AlarmView::TextGet(void *data, Evas_Object *obj, const char *part) -{ - ItemData *id = static_cast(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(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( - 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(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(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(data); - view->OnAddButtonClicked(); -} - -void AlarmView::DismissPopupCallback(void *data, Evas_Object *obj, void *event_info) -{ - AlarmView *view = static_cast(data); - evas_object_del(view->popup_); - view->popup_ = nullptr; -} - -void AlarmView::PopupDeleteItemCallback(void *data, Evas_Object *obj, void *event_info) -{ - AlarmView *view = static_cast(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); -} diff --git a/clock/src/View/MainView.cpp b/clock/src/View/MainView.cpp index 881f652..b70a063 100644 --- a/clock/src/View/MainView.cpp +++ b/clock/src/View/MainView.cpp @@ -18,7 +18,7 @@ #include #include -#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_)