virtual void onCreated() override;
virtual void onPageAttached(Ui::NavigatorPage *page) override;
virtual void onNavigation(bool isCurrent) override;
+ void onUpdateFinished();
- Evas_Object *createGenlist(Evas_Object *parent);
- AlarmItem *createItem(::Model::DataItem &dataItem);
+ Ui::Genlist *createGenlist(Evas_Object *parent);
+ Evas_Object *createNoContents(Evas_Object *parent);
+ Evas_Object *createAddButton(Evas_Object *parent);
+ void updateEmptyState();
+ AlarmItem *createItem(::Model::DataItem &dataItem);
void onAlarmInserted(::Model::DataItem &dataItem);
void onAlarmUpdated(AlarmItem *item, int changes);
void onAlarmDeleted(AlarmItem *item);
+ void onAddPressed(Evas_Object *button, void *eventInfo);
void onFormatChanged(system_settings_key_e key);
+ Evas_Object *m_NoContents;
Ui::Genlist *m_Genlist;
Ui::GenItem *m_AddAlarmItem;
Common::Model::AlarmProvider m_Provider;
#define LIST_IMG_DIR "list/images/"
#define PATH_LIST_ITEM_STYLE LIST_EDJ_DIR"list-item-style.edj"
+#define PATH_LIST_LAYOUT LIST_EDJ_DIR"list-layout.edj"
+
+#define PATH_ICON_ADD_ALARM LIST_IMG_DIR"alarm_no_alarm_icon.png"
+#define PATH_NO_ALARMS_BG LIST_IMG_DIR"tw_no_item_bg.png"
#define STYLE_ITEM_BOTTOM_BUTTON "bottom_button"
+#define LAYOUT_NO_ALARMS "no_alarms"
+#define LAYOUT_ADD_ALARM "add_alarm"
#endif /* LIST_PATH_H */
--- /dev/null
+/*
+ * Copyright 2017 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 "ListPath.h"
+
+#define TITLE_T 51
+#define TITLE_H 39
+
+#define ICON_R 5
+#define ICON_T (25+16)
+#define ICON_WH 98
+
+#define TEXT_T 8
+#define TEXT_H 74
+
+styles {
+ style {
+ name: "no_alarms_title";
+ base: "font=Tizen:style=Bold font_size=30 align=center color=#4dcfff";
+ }
+ style {
+ name: "no_alarms_text";
+ base: "font=Tizen:style=Regular font_size=27 align=center color=#fff";
+ }
+}
+
+collections {
+ base_scale: 1.3;
+
+ group { LAYOUT_ADD_ALARM;
+ parts {
+ spacer { "spacer.right"; scale;
+ desc { "default";
+ fixed: 1 0;
+ min: ICON_R 0;
+ align: 1.0 0.5;
+ rel1.relative: 1.0 0.0;
+ }
+ }
+ image { "image"; scale;
+ images.image: PATH_ICON_ADD_ALARM COMP;
+ desc { "default";
+ min: ICON_WH ICON_WH;
+ rel2 { relative: 0.0 1.0; to_x: "spacer.right"; }
+ image.normal: PATH_ICON_ADD_ALARM;
+ }
+ desc { "pressed";
+ inherit: "default";
+ color: 255 255 255 179;
+ }
+ }
+ }
+ programs {
+ program {
+ signal: "mouse,down,*";
+ source: "*";
+ action: STATE_SET "pressed";
+ target: "image";
+ }
+ program {
+ signal: "mouse,up,*";
+ source: "*";
+ action: STATE_SET "default";
+ target: "image";
+ }
+ }
+ }
+
+ group { LAYOUT_NO_ALARMS;
+ parts {
+ image { "image.bg";
+ images.image: PATH_NO_ALARMS_BG COMP;
+ desc { "default";
+ image.normal: PATH_NO_ALARMS_BG;
+ color: 94 94 94 76;
+ }
+ }
+ spacer { "spacer.title.top"; scale;
+ desc { "default";
+ fixed: 0 1;
+ min: 0 TITLE_T;
+ align: 0.5 0.0;
+ rel2.relative: 1.0 0.0;
+ }
+ }
+ textblock { "elm.text.title"; scale;
+ desc { "default";
+ fixed: 0 1;
+ min: 0 TITLE_H;
+ align: 0.5 0.0;
+ rel1 { relative: 0.0 1.0; to_y: "spacer.title.top"; }
+ rel2 { relative: 1.0 1.0; to_y: "spacer.title.top"; }
+ text.style: "no_alarms_title";
+ }
+ }
+ spacer { "spacer.icon.top"; scale;
+ desc { "default";
+ fixed: 0 1;
+ min: 0 ICON_T;
+ align: 0.5 0.0;
+ rel1 { relative: 0.0 1.0; to_y: "elm.text.title"; }
+ rel2 { relative: 1.0 1.0; to_y: "elm.text.title"; }
+ }
+ }
+ swallow { "elm.swallow.icon"; scale;
+ desc { "default";
+ fixed: 1 1;
+ align: 0.5 0.0;
+ rel1 { relative: 0.5 1.0; to_y: "spacer.icon.top"; }
+ rel2 { relative: 0.5 1.0; to_y: "spacer.icon.top"; }
+ }
+ }
+ spacer { "spacer.text.top"; scale;
+ desc { "default";
+ fixed: 0 1;
+ min: 0 TEXT_T;
+ align: 0.5 0.0;
+ rel1 { relative: 0.0 1.0; to_y: "elm.swallow.icon"; }
+ rel2 { relative: 1.0 1.0; to_y: "elm.swallow.icon"; }
+ }
+ }
+ textblock { "elm.text"; scale;
+ desc { "default";
+ fixed: 0 1;
+ min: 0 TEXT_H;
+ align: 0.5 0.0;
+ rel1 { relative: 0.0 1.0; to_y: "spacer.text.top"; }
+ rel2 { relative: 1.0 1.0; to_y: "spacer.text.top"; }
+ text.style: "no_alarms_text";
+ }
+ }
+ }
+ }
+}
#include "List/AlarmItem.h"
#include "List/AlarmsView.h"
#include "List/TitleItem.h"
+#include "Input/InputView.h"
+#include "App/Path.h"
#include "System/Settings.h"
#include "Ui/Genlist.h"
#include "Ui/GenGroupItem.h"
#include "Ui/Window.h"
+#include "Utils/Callback.h"
+
+#include "ListPath.h"
using namespace Common::Model;
using namespace List;
Evas_Object *AlarmsView::onCreate(Evas_Object *parent)
{
- return createGenlist(parent);
+ Evas_Object *layout = elm_layout_add(parent);
+ elm_layout_theme_set(layout, "layout", "application", "default");
+
+ m_Genlist = createGenlist(layout);
+ m_NoContents = createNoContents(layout);
+
+ return layout;
}
void AlarmsView::onCreated()
{
+ m_Provider.onUpdateFinished() += { std::bind(&AlarmsView::onUpdateFinished, this), this };
m_Provider.onInserted() += { std::bind(&AlarmsView::onAlarmInserted, this, _1), this };
m_Provider.initialize([this] {
m_Genlist->insert(new TitleItem());
m_Genlist->insert(createItem(*dataItem));
}
m_Genlist->insert(m_AddAlarmItem = new AddAlarmItem());
+ updateEmptyState();
});
}
eext_rotary_object_event_activated_set(m_Genlist->getEvasObject(), isCurrent);
}
-Evas_Object *AlarmsView::createGenlist(Evas_Object *parent)
+void AlarmsView::onUpdateFinished()
+{
+ updateEmptyState();
+}
+
+Ui::Genlist *AlarmsView::createGenlist(Evas_Object *parent)
{
auto surface = findParent<Ui::Window>(parent)->getCircleConformant();
- m_Genlist = new Ui::Genlist();
- m_Genlist->create(parent);
- eext_circle_object_genlist_add(m_Genlist->getEvasObject(), surface);
+ auto genlist = new Ui::Genlist();
+ genlist->create(parent);
+ eext_circle_object_genlist_add(genlist->getEvasObject(), surface);
+
+ return genlist;
+}
+
+Evas_Object *AlarmsView::createNoContents(Evas_Object *parent)
+{
+ Evas_Object *layout = elm_layout_add(parent);
+ elm_layout_file_set(layout, App::getResourcePath(PATH_LIST_LAYOUT).c_str(), LAYOUT_NO_ALARMS);
+ elm_object_translatable_part_text_set(layout, "elm.text.title", "WDS_ALM_HEADER_ALARM_ABB");
+ elm_object_translatable_part_text_set(layout, "elm.text", "WDS_ALM_OPT_ADD_ALARM_ABB");
+ elm_object_part_content_set(layout, "elm.swallow.icon", createAddButton(layout));
+
+ return layout;
+}
+
+Evas_Object *AlarmsView::createAddButton(Evas_Object *parent)
+{
+ Evas_Object *button = elm_button_add(parent);
+ elm_object_style_set(button, "transparent");
+ evas_object_smart_callback_add(button, "clicked",
+ makeCallback(&AlarmsView::onAddPressed), this);
- return m_Genlist->getEvasObject();
+ Evas_Object *image = elm_layout_add(button);
+ elm_layout_file_set(image, App::getResourcePath(PATH_LIST_LAYOUT).c_str(), LAYOUT_ADD_ALARM);
+ elm_object_content_set(button, image);
+
+ return button;
+}
+
+void AlarmsView::updateEmptyState()
+{
+ Evas_Object *content = m_Provider.getDataList().size() > 0
+ ? m_Genlist->getEvasObject() : m_NoContents;
+
+ if (content != elm_object_content_get(getEvasObject())) {
+ evas_object_hide(elm_object_content_unset(getEvasObject()));
+ elm_object_content_set(getEvasObject(), content);
+ }
}
AlarmItem *AlarmsView::createItem(::Model::DataItem &dataItem)
delete item;
}
+void AlarmsView::onAddPressed(Evas_Object *button, void *eventInfo)
+{
+ getNavigator()->navigateTo(new Input::InputView({ }));
+}
+
void AlarmsView::onFormatChanged(system_settings_key_e key)
{
m_Genlist->update("elm.text", ELM_GENLIST_ITEM_FIELD_TEXT);