class AlarmItem: public Ux::SelectItem
{
public:
- explicit AlarmItem(Common::Model::Alarm *alarm);
+ explicit AlarmItem(Common::Model::Alarm &alarm);
protected:
/**
private:
bool is24HourFormat() const;
- Common::Model::Alarm *m_Alarm;
+ Common::Model::Alarm &m_Alarm;
};
}
#ifndef LIST_ALARMS_VIEW_H
#define LIST_ALARMS_VIEW_H
+#include "Common/Model/AlarmProvider.h"
#include "Ux/SelectView.h"
#include <system_settings.h>
namespace List
{
+ class AlarmItem;
class AlarmsView: public Ux::SelectView
{
public:
AlarmsView();
virtual ~AlarmsView() override;
+ private:
virtual Evas_Object *onCreate(Evas_Object *parent) override;
virtual void onCreated() override;
virtual void onPageAttached(Ui::NavigatorPage *page) override;
virtual void onNavigation(bool isCurrent) override;
Evas_Object *createGenlist(Evas_Object *parent);
+ AlarmItem *createItem(::Model::DataItem &dataItem);
- private:
+ void onAlarmInserted(::Model::DataItem &dataItem);
+ void onAlarmUpdated(AlarmItem *item, int changes);
+ void onAlarmDeleted(AlarmItem *item);
void onFormatChanged(system_settings_key_e key);
Ui::Genlist *m_Genlist;
+ Ui::GenItem *m_AddAlarmItem;
+ Common::Model::AlarmProvider m_Provider;
};
}
using namespace Common::Model;
using namespace List;
-AlarmItem::AlarmItem(Alarm *alarm)
+AlarmItem::AlarmItem(Alarm &alarm)
: m_Alarm(alarm)
{
}
Ux::SelectResult AlarmItem::getDefaultResult() const
{
- return { 0, m_Alarm };
+ return { 0, &m_Alarm };
}
Elm_Gen_Item_Class *AlarmItem::getItemClass() const
{
if (strcmp(part, "elm.text") == 0) {
char buf[BUF_SIZE];
- strftime(buf, sizeof(buf), is24HourFormat() ? "%H:%M" : "%I:%M %p", &m_Alarm->getDate());
+ strftime(buf, sizeof(buf), is24HourFormat() ? "%H:%M" : "%I:%M %p", &m_Alarm.getDate());
return strdup(buf);
} else if (strcmp(part, "elm.text.1") == 0) {
using namespace std::placeholders;
AlarmsView::AlarmsView()
- : m_Genlist(nullptr)
+ : m_Genlist(nullptr), m_AddAlarmItem(nullptr)
{
System::Settings::addCallback(SYSTEM_SETTINGS_KEY_LOCALE_TIMEFORMAT_24HOUR,
{ std::bind(&AlarmsView::onFormatChanged, this, _1), this });
void AlarmsView::onCreated()
{
- m_Genlist->insert(new TitleItem());
- // TODO Here should be filled alarms from model
- m_Genlist->insert(new AddAlarmItem());
+ m_Provider.onInserted() += { std::bind(&AlarmsView::onAlarmInserted, this, _1), this };
+ m_Provider.initialize([this] {
+ m_Genlist->insert(new TitleItem());
+ for (auto &&dataItem : m_Provider.getDataList()) {
+ m_Genlist->insert(createItem(*dataItem));
+ }
+ m_Genlist->insert(m_AddAlarmItem = new AddAlarmItem());
+ });
}
void AlarmsView::onPageAttached(Ui::NavigatorPage *page)
return m_Genlist->getEvasObject();
}
+AlarmItem *AlarmsView::createItem(::Model::DataItem &dataItem)
+{
+ auto item = new AlarmItem(static_cast<Alarm &>(dataItem));
+ dataItem.onUpdated() += { std::bind(&AlarmsView::onAlarmUpdated, this, item, _1), item };
+ dataItem.onDeleted() += { std::bind(&AlarmsView::onAlarmDeleted, this, item), item };
+ return item;
+}
+
+void AlarmsView::onAlarmInserted(::Model::DataItem &dataItem)
+{
+ m_Genlist->insert(createItem(dataItem), nullptr, m_AddAlarmItem);
+}
+
+void AlarmsView::onAlarmUpdated(AlarmItem *item, int changes)
+{
+ /* TODO: Use changes to update specific parts */
+ item->update("*", ELM_GENLIST_ITEM_FIELD_ALL);
+}
+
+void AlarmsView::onAlarmDeleted(AlarmItem *item)
+{
+ delete item;
+}
+
void AlarmsView::onFormatChanged(system_settings_key_e key)
{
m_Genlist->update("elm.text", ELM_GENLIST_ITEM_FIELD_TEXT);
int changes = 0;
Alarm &that = *(Alarm *) data;
- if (mktime(&that.m_Date) != mktime(&m_Date)) {
+ if (mktime(&m_Date) != mktime(&that.m_Date)) {
+ m_Date = that.m_Date;
changes |= ChangedDate;
}
- if (that.m_Repeat != m_Repeat) {
+ if (m_Repeat != that.m_Repeat) {
+ m_Repeat = that.m_Repeat;
changes |= ChangedRepeat;
}
- if (that.m_IsEnabled != m_IsEnabled) {
+ if (m_IsEnabled != that.m_IsEnabled) {
+ m_IsEnabled = that.m_IsEnabled;
changes |= ChangedEnabled;
}
- *this = std::move(that);
return changes;
}
}
});
}
+
m_Changes.clear();
+ if (!m_ChangesPending) {
+ finishUpdate();
+ }
}
Alarm *AlarmProvider::findAlarm(int id)