#include <app_i18n.h>
+#define DATE_BUFFER_SIZE 32
+#define SELECTED_TEXT_MARKUP "<backing=on><backing_color=#00ddff99>"
+
using namespace Contacts;
using namespace Contacts::Details;
using namespace Contacts::Model;
using namespace std::placeholders;
-#define DATE_BUFFER_SIZE 32
-#define TEXT_BUFFER_SIZE 128
-#define TAG_BACKING "<backing=on><backing_color=#00ddff99>"
+namespace
+{
+ const bool isFieldCopyable[] = {
+ /* [FieldFavorite] = */ false,
+ /* [FieldDisplayName] = */ false,
+ /* [FieldImage] = */ false,
+ /* [FieldName] = */ false,
+ /* [FieldPhoneticName] = */ false,
+ /* [FieldNickname] = */ false,
+ /* [FieldCompany] = */ false,
+ /* [FieldNumber] = */ true,
+ /* [FieldEmail] = */ true,
+ /* [FieldAddress] = */ true,
+ /* [FieldUrl] = */ true,
+ /* [FieldMessenger] = */ true,
+ /* [FieldEvent] = */ false,
+ /* [FieldNote] = */ true,
+ /* [FieldRelationship] = */ false,
+ /* [FieldRingtone] = */ false
+ };
+}
FieldItem::FieldItem(ContactObject &object)
- : m_Object(object), m_Field(*object.getField(0)), m_IsSelecting(false)
+ : m_Object(object), m_Field(*object.getField(0)), m_IsTextSelected(false)
{
}
if (strcmp(part, "elm.text") == 0) {
switch (m_Field.getType()) {
case TypeText:
- {
- if (m_IsSelecting) {
- char buffer[TEXT_BUFFER_SIZE];
- snprintf(buffer, sizeof(buffer), TAG_BACKING "%s", m_Field.cast<ContactTextField>().getValue());
- return strdup(buffer);
- }
- return Utils::safeDup(m_Field.cast<ContactTextField>().getValue());
- }
+ return formatText(m_Field.cast<ContactTextField>().getValue(), m_IsTextSelected);
case TypeDate:
- {
- tm date = m_Field.cast<ContactDateField>().getValue();
- char buffer[DATE_BUFFER_SIZE];
- strftime(buffer, sizeof(buffer), "%x", &date);
- return strdup(buffer);
- }
+ return formatDate(m_Field.cast<ContactDateField>().getValue());
default:
return nullptr;
}
return nullptr;
}
-bool FieldItem::onLongpressed()
+void FieldItem::onInserted()
{
- static bool isFieldCopyable[] = {
- /* [FieldFavorite] = */ false,
- /* [FieldDisplayName] = */ false,
- /* [FieldImage] = */ false,
- /* [FieldName] = */ false,
- /* [FieldPhoneticName] = */ false,
- /* [FieldNickname] = */ false,
- /* [FieldCompany] = */ false,
- /* [FieldNumber] = */ true,
- /* [FieldEmail] = */ true,
- /* [FieldAddress] = */ true,
- /* [FieldUrl] = */ true,
- /* [FieldMessenger] = */ true,
- /* [FieldEvent] = */ false,
- /* [FieldNote] = */ true,
- /* [FieldRelationship] = */ false,
- /* [FieldRingtone] = */ false
- };
+ if (!isFieldCopyable[m_Object.getId()]) {
+ elm_genlist_item_select_mode_set(getObjectItem(), ELM_OBJECT_SELECT_MODE_NONE);
+ }
+}
+bool FieldItem::onLongpressed()
+{
if (!isFieldCopyable[m_Object.getId()]) {
return false;
}
- updateSelecting(true);
+ int x = 0, y = 0;
+ Evas_Object *rect = elm_object_item_track(getObjectItem());
+ evas_object_geometry_get(rect, &x, &y, nullptr, nullptr);
+ elm_object_item_untrack(getObjectItem());
+
+ Evas_Object *popup = showCopyPopup(x, y);
+ evas_object_smart_callback_add(popup, "dismissed", [](void *data, Evas_Object *, void *) {
+ ((FieldItem *) data)->setTextSelected(false);
+ }, this);
+ setTextSelected(true);
+ return true;
+}
+
+void FieldItem::onFieldUpdated(ContactField &field, contacts_changed_e change)
+{
+ if (&field == &m_Field) {
+ elm_genlist_item_fields_update(getObjectItem(), "elm.text", ELM_GENLIST_ITEM_FIELD_TEXT);
+ }
+}
+
+Evas_Object *FieldItem::showCopyPopup(int x, int y)
+{
auto menu = new Ui::Menu();
menu->create(getParent()->getEvasObject());
menu->addItem("IDS_TPLATFORM_OPT_COPY", [this] {
}
});
- static const int popupOffsetY = Ui::getScaledValue(74);
- int x, y, w, h;
- Evas_Object *rect = elm_object_item_track(getObjectItem());
- evas_object_geometry_get(rect, &x, &y, &w, &h);
- elm_object_item_untrack(getObjectItem());
-
Evas_Object *obj = menu->getEvasObject();
- evas_object_smart_callback_add(obj, "dismissed",
- makeCallback(&FieldItem::onMenuDismissed), this);
elm_ctxpopup_horizontal_set(obj, EINA_TRUE);
elm_object_style_set(obj, "default");
- evas_object_move(obj, x, y + h / 2 - popupOffsetY);
+ evas_object_move(obj, x, y);
evas_object_show(obj);
- return true;
+ return obj;
}
-void FieldItem::onFieldUpdated(ContactField &field, contacts_changed_e change)
+void FieldItem::setTextSelected(bool isSelecting)
{
- if (&field == &m_Field) {
- elm_genlist_item_fields_update(getObjectItem(), "elm.text", ELM_GENLIST_ITEM_FIELD_TEXT);
+ if (m_IsTextSelected != isSelecting) {
+ m_IsTextSelected = isSelecting;
+ onFieldUpdated(m_Field, CONTACTS_CHANGE_UPDATED);
}
}
-void FieldItem::onMenuDismissed(Evas_Object *obj, void *eventInfo)
+char *FieldItem::formatText(const char *text, bool isSelected)
{
- updateSelecting(false);
+ if (!text) {
+ return nullptr;
+ }
+ if (!isSelected) {
+ return strdup(text);
+ }
+
+ size_t size = strlen(text) + sizeof(SELECTED_TEXT_MARKUP);
+ char *buffer = (char *) malloc(size);
+ snprintf(buffer, size, SELECTED_TEXT_MARKUP "%s", text);
+ return buffer;
}
-void FieldItem::updateSelecting(bool isSelecting)
+char *FieldItem::formatDate(const tm &date)
{
- if (m_IsSelecting != isSelecting) {
- m_IsSelecting = isSelecting;
- elm_genlist_item_fields_update(getObjectItem(), "elm.text", ELM_GENLIST_ITEM_FIELD_TEXT);
- }
+ char *buffer = (char *) malloc(DATE_BUFFER_SIZE);
+ strftime(buffer, DATE_BUFFER_SIZE, "%x", &date);
+ return buffer;
}
#include "Contacts/Details/MultilineFieldItem.h"
+#define TEXT_MARKUP "<font_size=%d><color=#%s>"
+#define TEXT_MARKUP_SIZE sizeof(TEXT_MARKUP)
+
+#define TEXT_SIZE 40
+#define TEXT_COLOR "000"
+
+#define SUBTEXT_SIZE 32
+#define SUBTEXT_COLOR "737373"
+
using namespace Contacts::Details;
using namespace Contacts::Model;
Elm_Genlist_Item_Class *MultilineFieldItem::getItemClass() const
{
- static Elm_Genlist_Item_Class itc = createItemClass("multiline_main.sub");
+ static Elm_Genlist_Item_Class itc = createItemClass("multiline");
return &itc;
}
char *MultilineFieldItem::getText(Evas_Object *parent, const char *part)
{
+ int textSize = 0;
+ const char *textColor = nullptr;
+
if (strcmp(part, "elm.text.multiline") == 0) {
- return FieldItem::getText(parent, "elm.text");
+ part = "elm.text";
+ textSize = TEXT_SIZE;
+ textColor = TEXT_COLOR;
+ } else if (strcmp(part, "elm.text") == 0) {
+ part = "elm.text.sub";
+ textSize = SUBTEXT_SIZE;
+ textColor = SUBTEXT_COLOR;
}
- return FieldItem::getText(parent, part);
+ char *text = FieldItem::getText(parent, part);
+ if (text) {
+ char *formattedText = formatText(textSize, textColor, text);
+ free(text);
+ return formattedText;
+ }
+
+ return nullptr;
}
void MultilineFieldItem::onFieldUpdated(ContactField &field, contacts_changed_e change)
FieldItem::onFieldUpdated(field, change);
}
}
+
+char *MultilineFieldItem::formatText(int textSize, const char *textColor, const char *text)
+{
+ size_t size = strlen(text) + strlen(textColor) + TEXT_MARKUP_SIZE;
+ char *buffer = (char *) malloc(size);
+ snprintf(buffer, size, TEXT_MARKUP "%s", textSize, textColor, text);
+ return buffer;
+}