virtual void setTitle(const char *title) override;
/**
+ * @see NavigatorPage::setSubtitle()
+ */
+ virtual void setSubtitle(const char *subtitle) override;
+
+ /**
* @see NavigatorPage::setTitleVisibility()
*/
virtual void setTitleVisibility(bool isVisible) override;
virtual void setTitle(const char *title) = 0;
/**
+ * @brief Set page subtitle.
+ * @param[in] subtitle Page subtitle
+ */
+ virtual void setSubtitle(const char *subtitle) { };
+
+ /**
* @brief Set whether to show the page title.
* @param[in] isVisible Whether page title is visible
*/
setTitleVisibility(isEnabled);
}
+void NaviframePage::setSubtitle(const char *subtitle)
+{
+ elm_object_item_translatable_part_text_set(m_NaviItem, "elm.text.subtitle", subtitle);
+}
+
void NaviframePage::setTitleVisibility(bool isVisible)
{
elm_naviframe_item_title_enabled_set(m_NaviItem, isVisible, EINA_TRUE);
#include <contacts.h>
#include <string>
+namespace Ui
+{
+ class NavigatorPage;
+}
+
namespace Contacts
{
namespace Model
class BasicInfoItem : public Ui::GenItem
{
public:
- /**
- * @brief Back button pressed callback
- */
- typedef std::function<void()> BackCallback;
/**
* @brief Create basic info item.
void setSelectMode(Ux::SelectMode mode);
/**
- * @brief Set "back" button callback.
- * @param[in] callback "back" button callback
+ * @brief Show title.
+ * @param[in] page The page
*/
- void setBackCallback(BackCallback callback);
+ void showTitle(Ui::NavigatorPage *page);
protected:
/**
virtual Elm_Genlist_Item_Class *getItemClass() const override;
/**
- * @see GenItem::getText()
- */
- virtual char *getText(Evas_Object *parent, const char *part) override;
-
- /**
* @see GenItem::getContent()
*/
virtual Evas_Object *getContent(Evas_Object *parent, const char *part) override;
/**
- * @see GenItem::getState()
- */
- virtual Eina_Bool getState(Evas_Object *parent, const char *part) override;
-
- /**
* @see GenItem::onSelected()
*/
virtual void onSelected() override;
virtual bool onLongpressed() override;
private:
- std::string formatCompanyString();
- Evas_Object *createBackButton(Evas_Object *parent);
+ std::string formatAdditionalInfoString();
Evas_Object *createFavButton(Evas_Object *parent);
- void onBackPressed(Evas_Object *button, void *eventInfo);
void onFavChanged(Evas_Object *check, void *eventInfo);
void onFieldUpdated(Model::ContactField &field, contacts_changed_e change);
+ Ui::NavigatorPage *m_Page;
+ Evas_Object *m_FavButton;
+
Model::Contact &m_Contact;
Model::ContactBoolField *m_Favorite;
Model::ContactTextField &m_CompanyName;
Model::ContactTextField &m_JobTitle;
+ Model::ContactObject &m_Nickname;
+ Model::ContactTextField &m_NicknameText;
+
Ux::SelectMode m_SelectMode;
- BackCallback m_OnBackPressed;
App::AppControl m_Request;
};
private:
virtual Evas_Object *onCreate(Evas_Object *parent) override;
virtual void onCreated() override;
+ virtual void onPageAttached(Ui::NavigatorPage *page) override;
virtual void onMenuPressed() override;
virtual void onSelectAllInsert(Ui::GenItem *item) override;
#define CONTACTS_DETAILS_ITEM_LAYOUT_H
#include "ContactsDetailsPath.h"
-#include "../../../../lib-common/res/details/edje/DetailsItemLayout.h"
-
-#define CONTACTS_DETAILS_ITEM_STYLE "contacts_details_item"
-
-#define PART_FAV_BTN "swallow.favorite"
-
-#define PART_PHONETIC_NAME "text.phonetic_name"
-#define PART_COMPANY "text.company"
#define GROUP_ICON_CALL "icon_call"
#define GROUP_ICON_MESSAGE "icon_message"
+++ /dev/null
-/*
- * Copyright (c) 2015-2016 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * 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 CONTACTS_DETAILS_ITEM_LAYOUT_METRICS_H
-#define CONTACTS_DETAILS_ITEM_LAYOUT_METRICS_H
-
-#include "../../../../lib-common/res/details/edje/DetailsItemLayoutMetrics.h"
-
-#define FAV_BTN_WH 80
-#define FAV_BTN_T BACK_BTN_T
-#define FAV_BTN_R 17
-
-#define PHONETIC_NAME_H 48
-#define PHONETIC_NAME_TEXT_SIZE 36
-
-#define COMPANY_H 48
-#define COMPANY_TEXT_SIZE 36
-
-#endif /* CONTACTS_DETAILS_ITEM_LAYOUT_METRICS_H */
*/
#include "ContactsDetailsItemLayout.h"
-#include "ContactsDetailsItemLayoutMetrics.h"
#include "../../../../lib-apps-common/res/apps-common/edje/apps-common-utils.edc"
#include "../../../../lib-common/res/details/edje/details-item-layout.edc"
-styles {
- style {
- name: "phonetic_name_style";
- base: "font=Tizen:style=Light font_size="PHONETIC_NAME_TEXT_SIZE" align=center wrap=mixed color=#fafafa ellipsis=1.0";
- }
- style {
- name: "company_style";
- base: "font=Tizen:style=Light font_size="COMPANY_TEXT_SIZE" align=center wrap=mixed color=#fafafa ellipsis=1.0";
- }
-}
-
collections
{
base_scale: 2.6;
"touch_icon_normal", "touch_icon_pressed");
IMAGE_WITH_COLOR_AND_TOUCH(GROUP_ICON_INTERNET, DETAILS_ICON_INTERNET,
"touch_icon_normal", "touch_icon_pressed");
-
- group {
- name: "elm/genlist/item/"CONTACTS_DETAILS_ITEM_STYLE"/default";
- alias: "elm/genlist/item_compress/"CONTACTS_DETAILS_ITEM_STYLE"/default";
- alias: "elm/genlist/tree/"CONTACTS_DETAILS_ITEM_STYLE"/default";
- alias: "elm/genlist/tree_compress/"CONTACTS_DETAILS_ITEM_STYLE"/default";
- inherit: "elm/genlist/item/"DETAILS_ITEM_STYLE"/default";
-
- data.item: "texts" PART_NAME" "PART_PHONETIC_NAME" "PART_COMPANY;
- data.item: "contents" PART_BACK_BTN" "PART_FAV_BTN" "PART_THUMBNAIL;
- data.item: "states" PART_PHONETIC_NAME" "PART_COMPANY;
-
- parts {
- spacer { "spacer.right_top"; scale;
- desc { "default";
- min: FAV_BTN_R FAV_BTN_T;
- align: 1.0 0.0;
- rel1.relative: 1.0 0.0;
- rel2.relative: 1.0 0.0;
- }
- }
- swallow { PART_FAV_BTN; scale;
- desc { "default";
- min: FAV_BTN_WH FAV_BTN_WH;
- align: 1.0 0.0;
- rel1 { relative: 0.0 1.0; to: "spacer.right_top"; }
- rel2 { relative: 0.0 1.0; to: "spacer.right_top"; }
- }
- }
- spacer { "spacer.phonetic_name_top"; scale;
- desc { "default";
- align: 0.5 0.0;
- rel1 { relative: 0.0 1.0; to_y: PART_NAME; }
- rel2 { relative: 1.0 1.0; to_y: PART_NAME; }
- }
- desc { "visible";
- inherit: "default";
- min: 0 TEXT_T;
- }
- }
- textblock { PART_PHONETIC_NAME; scale;
- desc { "default";
- max: 0 0;
- align: 0.5 0.0;
- rel1 { relative: 1.0 1.0; to_x: "spacer.text_left"; to_y: "spacer.phonetic_name_top"; }
- rel2 { relative: 0.0 1.0; to_x: "spacer.text_right"; }
- text {
- align: 0.5 0.0;
- style: "phonetic_name_style";
- }
- }
- desc { "visible";
- inherit: "default";
- min: 0 PHONETIC_NAME_H;
- max: -1 PHONETIC_NAME_H;
- }
- }
- spacer { "spacer.company_top"; scale;
- desc { "default";
- align: 0.5 0.0;
- rel1 { relative: 0.0 1.0; to_y: PART_PHONETIC_NAME; }
- rel2 { relative: 1.0 1.0; to_y: PART_PHONETIC_NAME; }
- }
- desc { "visible";
- inherit: "default";
- min: 0 TEXT_T;
- }
- }
- textblock { PART_COMPANY; scale;
- desc { "default";
- max: 0 0;
- align: 0.5 0.0;
- rel1 { relative: 1.0 1.0; to_x: "spacer.text_left"; to_y: "spacer.company_top"; }
- rel2 { relative: 0.0 1.0; to_x: "spacer.text_right"; }
- text {
- align: 0.5 0.0;
- style: "company_style";
- }
- }
- desc { "visible";
- inherit: "default";
- min: 0 COMPANY_H;
- max: -1 COMPANY_H;
- }
- }
- spacer { "spacer.bottom"; scale;
- desc { "default";
- rel1 { relative: 0.0 1.0; to_y: PART_COMPANY; }
- }
- }
- }
- programs {
- program {
- signal: "elm,state,"PART_PHONETIC_NAME",active";
- source: "elm";
- action: STATE_SET "visible" 0.0;
- target: "spacer.phonetic_name_top";
- target: PART_PHONETIC_NAME;
- }
- program {
- signal: "elm,state,"PART_PHONETIC_NAME",passive";
- source: "elm";
- action: STATE_SET "default" 0.0;
- target: "spacer.phonetic_name_top";
- target: PART_PHONETIC_NAME;
- }
- program {
- signal: "elm,state,"PART_COMPANY",active";
- source: "elm";
- action: STATE_SET "visible" 0.0;
- target: "spacer.company_top";
- target: PART_COMPANY;
- }
- program {
- signal: "elm,state,"PART_COMPANY",passive";
- source: "elm";
- action: STATE_SET "default" 0.0;
- target: "spacer.company_top";
- target: PART_COMPANY;
- }
- }
- }
}
#include "Utils/Callback.h"
#include "ContactsDetailsItemLayout.h"
-#include "ContactsDetailsItemLayoutMetrics.h"
+#include "DetailsItemLayoutMetrics.h"
#define PART_ACTION_BUTTON1 "elm.swallow.icon.2"
#define PART_ACTION_BUTTON2 "elm.swallow.end"
#include "App/AppControlRequest.h"
#include "Ui/Genlist.h"
#include "Ui/Menu.h"
+#include "Ui/NavigatorPage.h"
#include "Ui/Thumbnail.h"
#include "Utils/Callback.h"
-#include "ContactsDetailsItemLayout.h"
+#include "DetailsItemLayout.h"
using namespace Contacts::Details;
using namespace Contacts::Model;
using namespace std::placeholders;
BasicInfoItem::BasicInfoItem(Contact &contact)
- : m_Contact (contact),
+ : m_Page (nullptr),
+ m_FavButton (nullptr),
+ m_Contact (contact),
m_Favorite (contact.getFieldById<ContactBoolField>(FieldFavorite)),
m_Image (*contact.getFieldById<ContactObject>(FieldImage)),
m_CompanyName (*m_Company.getFieldById<ContactTextField>(CompanyFieldName)),
m_JobTitle (*m_Company.getFieldById<ContactTextField>(CompanyFieldJobTitle)),
+ m_Nickname (*contact.getFieldById<ContactObject>(FieldNickname)),
+ m_NicknameText(*m_Nickname.getField<ContactTextField>(0)),
+
m_SelectMode(Ux::SelectNone)
{
m_Contact.setUpdateCallback(std::bind(&BasicInfoItem::onFieldUpdated, this, _1, _2));
void BasicInfoItem::setSelectMode(Ux::SelectMode mode)
{
m_SelectMode = mode;
- elm_genlist_item_fields_update(getObjectItem(), PART_BACK_BTN, ELM_GENLIST_ITEM_FIELD_CONTENT);
- elm_genlist_item_fields_update(getObjectItem(), PART_FAV_BTN, ELM_GENLIST_ITEM_FIELD_CONTENT);
}
-void BasicInfoItem::setBackCallback(BackCallback callback)
+void BasicInfoItem::showTitle(Ui::NavigatorPage *page)
{
- m_OnBackPressed = std::move(callback);
+ m_Page = page;
+
+ if (m_SelectMode == Ux::SelectNone && m_Page) {
+ m_Page->setTitleVisibility(true);
+ m_Page->setTitle(m_Name.getValue());
+ m_Page->setContent("title_right_btn", createFavButton(getParent()->getEvasObject()));
+ m_Page->setSubtitle(formatAdditionalInfoString().c_str());
+ }
}
Elm_Genlist_Item_Class *BasicInfoItem::getItemClass() const
{
- static Elm_Genlist_Item_Class itc = createItemClass(CONTACTS_DETAILS_ITEM_STYLE);
+ static Elm_Genlist_Item_Class itc = createItemClass(DETAILS_ITEM_STYLE);
return &itc;
}
-char *BasicInfoItem::getText(Evas_Object *parent, const char *part)
-{
- if (strcmp(part, PART_NAME) == 0) {
- return Utils::safeDup(m_Name.getValue());
- } else if (strcmp(part, PART_PHONETIC_NAME) == 0) {
- return strdup(m_PhoneticName.getValue().c_str());
- } else if (strcmp(part, PART_COMPANY) == 0) {
- return strdup(formatCompanyString().c_str());
- }
-
- return nullptr;
-}
-
Evas_Object *BasicInfoItem::getContent(Evas_Object *parent, const char *part)
{
- if (m_SelectMode == Ux::SelectNone) {
- if (strcmp(part, PART_BACK_BTN) == 0) {
- return createBackButton(parent);
- } else if (m_Favorite && strcmp(part, PART_FAV_BTN) == 0) {
- return createFavButton(parent);
- }
- }
-
if (strcmp(part, PART_THUMBNAIL) == 0) {
auto control = Ui::Thumbnail::create(parent, Ui::Thumbnail::SizeLarge);
control->setImagePath(m_ImagePath.getValue());
return nullptr;
}
-Eina_Bool BasicInfoItem::getState(Evas_Object *parent, const char *part)
-{
- if (strcmp(part, PART_PHONETIC_NAME) == 0) {
- return !m_PhoneticName.isEmpty();
- } else if (strcmp(part, PART_COMPANY) == 0) {
- return !m_Company.isEmpty();
- }
-
- return EINA_FALSE;
-}
-
void BasicInfoItem::onSelected()
{
const char *path = m_ImagePath.getValue();
return true;
}
-std::string BasicInfoItem::formatCompanyString()
+std::string BasicInfoItem::formatAdditionalInfoString()
{
- const char *companyName = m_CompanyName.getValue();
- const char *jobTitle = m_JobTitle.getValue();
-
std::string value;
- if (companyName) {
- value += companyName;
- }
-
- if (jobTitle) {
- if (!value.empty()) {
- value += ", ";
+ auto addInfo = [&value](const char *info) {
+ if (info) {
+ if (!value.empty()) {
+ value += ", ";
+ }
+ value += info;
}
- value += jobTitle;
- }
+ };
+ addInfo(m_PhoneticName.getValue().c_str());
+ addInfo(m_CompanyName.getValue());
+ addInfo(m_JobTitle.getValue());
+ addInfo(m_NicknameText.getValue());
return value;
}
-Evas_Object *BasicInfoItem::createBackButton(Evas_Object *parent)
-{
- Evas_Object *button = elm_button_add(parent);
- elm_object_style_set(button, "naviframe/back_btn/default");
- evas_object_smart_callback_add(button, "clicked",
- makeCallback(&BasicInfoItem::onBackPressed), this);
- evas_object_propagate_events_set(button, EINA_FALSE);
- return button;
-}
-
Evas_Object *BasicInfoItem::createFavButton(Evas_Object *parent)
{
- Evas_Object *check = elm_check_add(parent);
- elm_object_style_set(check, "favorite");
- elm_check_state_set(check, m_Favorite->getValue());
- evas_object_smart_callback_add(check, "changed",
+ if(!m_Favorite) {
+ return nullptr;
+ }
+
+ Evas_Object *box = elm_box_add(parent);
+
+ m_FavButton = elm_check_add(box);
+ elm_object_style_set(m_FavButton, "favorite");
+ elm_check_state_set(m_FavButton, m_Favorite->getValue());
+ evas_object_smart_callback_add(m_FavButton, "changed",
makeCallback(&BasicInfoItem::onFavChanged), this);
- evas_object_propagate_events_set(check, EINA_FALSE);
- return check;
-}
+ evas_object_propagate_events_set(m_FavButton, EINA_FALSE);
-void BasicInfoItem::onBackPressed(Evas_Object *button, void *eventInfo)
-{
- if (m_OnBackPressed) {
- m_OnBackPressed();
- }
+ evas_object_size_hint_weight_set(m_FavButton, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(m_FavButton, 0.8, EVAS_HINT_FILL);
+ evas_object_show(m_FavButton);
+ elm_box_pack_end(box, m_FavButton);
+
+ return box;
}
void BasicInfoItem::onFavChanged(Evas_Object *check, void *eventInfo)
void BasicInfoItem::onFieldUpdated(ContactField &field, contacts_changed_e change)
{
if (&field == &m_Contact && change == CONTACTS_CHANGE_DELETED) {
- /* FIXME: Add possibility to get View from child control */
- if (m_OnBackPressed) {
- m_OnBackPressed();
- }
+ m_Page->close();
return;
}
- const char *part = nullptr;
- if (&field == m_Favorite) {
- part = PART_FAV_BTN;
- } else if (&field == &m_Image) {
- part = PART_THUMBNAIL;
- } else if (&field == &m_Name) {
- part = PART_NAME;
- } else if (&field == &m_PhoneticName) {
- part = PART_PHONETIC_NAME;
- } else if (&field == &m_Company) {
- part = PART_COMPANY;
+ if (m_SelectMode == Ux::SelectNone && m_Page) {
+ if (&field == m_Favorite) {
+ elm_check_state_set(m_FavButton, m_Favorite->getValue());
+ } else if (&field == &m_Name) {
+ m_Page->setTitle(m_Name.getValue());
+ } else if (&field == &m_PhoneticName || &field == &m_Company || &field == &m_Nickname) {
+ m_Page->setSubtitle(formatAdditionalInfoString().c_str());
+ }
}
- if (part) {
- elm_genlist_item_fields_update(getObjectItem(), part, ELM_GENLIST_ITEM_FIELD_ALL);
+ if (&field == &m_Image) {
+ elm_genlist_item_fields_update(getObjectItem(), PART_THUMBNAIL, ELM_GENLIST_ITEM_FIELD_ALL);
}
}
#include "Utils/Logger.h"
#include "Utils/Range.h"
-#include "ContactsDetailsItemLayout.h"
+#include "ContactsDetailsPath.h"
#include <app_i18n.h>
/* [FieldMessenger] = */ true,
/* [FieldEvent] = */ true,
/* [FieldNote] = */ true,
- /* [FieldNickname] = */ true,
+ /* [FieldNickname] = */ false,
/* [FieldRelationship] = */ true,
/* [FieldRingtone] = */ true,
/* [FieldGroups] = */ true
m_BasicInfoItem = new BasicInfoItem(m_Contact);
m_BasicInfoItem->setSelectMode(getSelectMode());
- m_BasicInfoItem->setBackCallback([this] {
- getPage()->close();
- });
m_Genlist->insert(m_BasicInfoItem);
for (auto &&field : m_Contact) {
}
}
+void DetailsView::onPageAttached(Ui::NavigatorPage *page)
+{
+ m_BasicInfoItem->showTitle(page);
+}
+
void DetailsView::onMenuPressed()
{
if (getSelectMode() != Ux::SelectNone) {