TizenRefApp-7743 Implement merging items using Textblock API 09/101509/2
authorEugene Kurzberg <i.kurtsberg@samsung.com>
Tue, 29 Nov 2016 13:22:39 +0000 (15:22 +0200)
committerEugene Kurzberg <i.kurtsberg@samsung.com>
Thu, 1 Dec 2016 13:11:05 +0000 (05:11 -0800)
Change-Id: Id79d0071fc544c1c99b961e1f9b0ee7a802666a9
Signed-off-by: Eugene Kurzberg <i.kurtsberg@samsung.com>
memo-app/inc/Input/EntryItem.h
memo-app/src/Input/CheckItem.cpp
memo-app/src/Input/EntryItem.cpp

index 4d0de973580fa9ae8f68d1dbcd9cd7b2be8ee2c4..d9dbd37f70bc74f8befcbd965a5093ebba078230 100644 (file)
@@ -46,12 +46,6 @@ namespace Input
                 */
                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.
@@ -123,12 +117,6 @@ namespace Input
                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.
                 */
@@ -179,14 +167,6 @@ namespace Input
                 */
                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()
                 */
index ac11c58932be57af04cea80b526a7d27ecd60898..1bba03c1857a7dd77016bb799aba8306c878cdfd 100644 (file)
@@ -83,20 +83,28 @@ EntryItem *CheckItem::toEntryItem()
        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;
index b7970a61da81e8a423fd9cfe3dd82644a383a00c..286cee86ca8fcbb664958081ccde676545fa6af7 100644 (file)
@@ -35,8 +35,6 @@
 #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 */
@@ -87,12 +85,6 @@ void EntryItem::setText(const char *text)
        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);
@@ -191,13 +183,6 @@ EntryItem *EntryItem::splitItem(Evas_Textblock_Cursor *begin, Evas_Textblock_Cur
        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());
@@ -327,24 +312,6 @@ bool EntryItem::removeLineFeed(Evas_Textblock_Cursor *cursor)
        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();
@@ -488,16 +455,22 @@ void EntryItem::onBackspacePressed()
        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)
@@ -529,7 +502,6 @@ Evas_Object *EntryItem::unsetEntry()
        }
        m_Images.clear();
        m_Entry = nullptr;
-
        return entry;
 }