*/
void setText(const char *text);
- /**
- * @brief Append entry text.
- * @param[in] text Entry text.
- */
- void appendText(const char *text);
-
/**
* @brief Set entry guide text.
* @param[in] text Entry guide text.
EntryItem *splitItem(Evas_Textblock_Cursor *begin, Evas_Textblock_Cursor *end,
bool allowEmpty = false);
- /**
- * @brief Merge text of item and remove it.
- * @param[in] item Item to remove.
- */
- void mergeItems(EntryItem *item);
-
/**
* @brief Update image sizes.
*/
*/
bool removeLineFeed(Evas_Textblock_Cursor *cursor);
- /**
- * @brief Get text before last enter and after last enter.
- * ex.: before text<br/>after text
- * @param[out] before Entry text before enter.
- * @param[out] after Entry text after enter.
- */
- void getTextBeforeAfterEnter(std::string &before, std::string &after) const;
-
/**
* @see LinkedItem::getList()
*/
entryItem->setText(text.c_str());
entryItem->updateImageSizes();
- if (nextItem && nextItem->getType() == TypeEntry) {
- entryItem->appendText(TAG_BR);
- entryItem->mergeItems(nextItem);
- }
if (prevItem && prevItem->getType() == TypeEntry) {
- prevItem->appendText(TAG_BR);
- prevItem->mergeItems(entryItem);
- entryItem = prevItem;
+ const char *text = elm_entry_entry_get(prevItem->getEntry());
+ int pos = elm_entry_cursor_pos_get(entryItem->getEntry());
+ pos += eina_unicode_utf8_get_len(text) + 1;
+
+ elm_entry_cursor_begin_set(entryItem->getEntry());
+ elm_entry_entry_insert(entryItem->getEntry(), text);
+ elm_entry_entry_insert(entryItem->getEntry(), TAG_BR);
+ elm_entry_cursor_pos_set(entryItem->getEntry(), pos);
+ list->removeItem(prevItem, true);
+ }
+ if (nextItem && nextItem->getType() == TypeEntry) {
+ const char *text = elm_entry_entry_get(nextItem->getEntry());
+ elm_entry_entry_append(entryItem->getEntry(), TAG_BR);
+ elm_entry_entry_append(entryItem->getEntry(), text);
+ list->removeItem(nextItem, true);
}
if (!entryItem->getPrevItem()) {
entryItem->setGuideText("IDS_MEMO_BODY_MEMO");
}
- entryItem->setFocus(true);
+ elm_object_focus_set(entryItem->getEntry(), EINA_TRUE);
delete this;
return entryItem;
#define TEXT_SIZE 128
#define TAG_ITEM "<item size=%dx%d vsize=full href=%d/>"
#define TAG_HREF_ATTR "href="
-#define TAG_BR '\n'
-#define POS_END_BR(posStart) (posStart + sizeof(TAG_BR))
#define ENTRY_ITEM_IMAGE_W 656 /* 720 - 2*32 */
#define IMAGE_PADDING_H 64 /* 2*32 */
m_FreezeRemoveImages = false;
}
-void EntryItem::appendText(const char *text)
-{
- elm_entry_entry_append(m_Entry, text);
- elm_entry_cursor_end_set(m_Entry);
-}
-
void EntryItem::setGuideText(const char *text)
{
elm_object_translatable_part_text_set(m_Entry, "elm.guide", text);
return item;
}
-void EntryItem::mergeItems(EntryItem *item)
-{
- std::string text = item->getCustomizedText();
- appendText(text.c_str());
- getList()->removeItem(item, true);
-}
-
void EntryItem::updateImageSizes()
{
std::list<std::string> tags = getImageTags(getText());
return false;
}
-void EntryItem::getTextBeforeAfterEnter(std::string &before, std::string &after) const
-{
- std::list<std::string> tags = getImageTags(getText());
- UniString::I18nString text(markupToI18n(getText().c_str()));
-
- std::size_t posStartBr = text.find(TAG_BR);
- if (posStartBr != std::string::npos) {
- std::size_t posEndBr = POS_END_BR(posStartBr);
- before = I18nToMarkup(text.substr(0, posStartBr));
- setImageTags(tags, before);
- after = I18nToMarkup(text.substr(posEndBr));
- setImageTags(tags, after);
- } else {
- before = I18nToMarkup(text);
- setImageTags(tags, before);
- }
-}
-
InputBox *EntryItem::getList()
{
return (InputBox *) LinkedItem::getList();
if (!prevItem) {
return;
}
- std::string before, after;
- getTextBeforeAfterEnter(before, after);
- prevItem->appendText(before.c_str());
- prevItem->updateImageSizes();
- if (after.empty()) {
+
+ Evas_Textblock *textblock = elm_entry_textblock_get(m_Entry);
+ Evas_Textblock_Cursor *begin = evas_object_textblock_cursor_new(textblock);
+ Evas_Textblock_Cursor *end = evas_object_textblock_cursor_new(textblock);
+ evas_textblock_cursor_paragraph_char_last(end);
+ removeLineFeed(end);
+
+ char *text = cutText(begin, end);
+ elm_entry_cursor_end_set(prevItem->getEntry());
+ elm_entry_entry_append(prevItem->getEntry(), text);
+ elm_object_focus_set(prevItem->getEntry(), EINA_TRUE);
+ free(text);
+
+ if (elm_entry_is_empty(m_Entry)) {
getList()->removeItem(this, true);
- } else {
- setText(after.c_str());
}
- prevItem->setFocus(true);
}
void EntryItem::setEntry(Evas_Object *entry)
}
m_Images.clear();
m_Entry = nullptr;
-
return entry;
}