Added thubnail and history links clicking for detail popup. 79/47979/3
authorMaciej Skrzypkowski <m.skrzypkows@samsung.com>
Thu, 10 Sep 2015 12:34:17 +0000 (14:34 +0200)
committerMaciej Skrzypkowski <m.skrzypkows@samsung.com>
Fri, 11 Sep 2015 06:39:14 +0000 (23:39 -0700)
[Issue]     https://bugs.tizen.org/jira/browse/TT-144
[Problem]   Detail popup missed thumbnail.
[Cause]     N/A
[Solution]  Added thumbnail in proper size.
[Verify]    Launch browser > open few pages >
            check thubnails Most Visited view in detail popup,
            check if history links in popup are clickable.

Change-Id: I50d3e2862fc672a41de8cdc50f790f48f19ff21d
Signed-off-by: Maciej Skrzypkowski <m.skrzypkows@samsung.com>
core/Tools/EflTools.cpp
services/HistoryService/HistoryItem.cpp
services/HistoryService/HistoryItem.h
services/MainUI/DetailPopup.cpp
services/MainUI/DetailPopup.h
services/MainUI/MainUI.cpp
services/MainUI/MainUI.h
services/MainUI/edc/DetailPopup.edc
services/MainUI/edc/MainUI.edc
services/MainUI/images/ic_popup_list_arrow.png [new file with mode: 0644]
services/SimpleUI/SimpleUI.cpp

index f6cf03d..b8e1f49 100644 (file)
@@ -83,9 +83,6 @@ Evas_Object * getEvasImage(std::shared_ptr<BrowserImage> b_image, Evas_Object *
             } else {
                 BROWSER_LOGD("Image loaded");
                 evas_object_image_fill_set(eo_image, 0, 0, b_image->width, b_image->height);
-
-                //EFL BUG without resizing image is not displayed
-                evas_object_resize(eo_image, b_image->width, b_image->height);
             }
             return eo_image;
         };
index 1d9ce89..6808685 100644 (file)
@@ -87,7 +87,7 @@ void HistoryItem::setUrl(const std::string & url)
     m_url = url;
 }
 
-std::string HistoryItem::getUrl()
+std::string HistoryItem::getUrl() const
 {
     return m_url;
 }
index 1d1e7ab..98875b9 100644 (file)
@@ -51,7 +51,7 @@ public:
        bool operator!=(const HistoryItem& other);
 
        void setUrl(const std::string & url);
-       std::string getUrl();
+       std::string getUrl() const;
 
        void setTitle(const std::string & title);
        std::string getTitle() const;
index 4aa5604..9d2f1ea 100644 (file)
 
 
 #include <Elementary.h>
+#include <vector>
+#include <algorithm>
 #include "BrowserAssert.h"
 #include "DetailPopup.h"
 #include "BrowserLogger.h"
 #include "Tools/GeneralTools.h"
+#include "Tools/EflTools.h"
 #include "MainUI.h"
 
 namespace tizen_browser{
 namespace base_ui{
 
+const char * DetailPopup::URL_SEPARATOR = " - ";
 const int DetailPopup::HISTORY_ITEMS_NO = 5;
 
 DetailPopup::DetailPopup(MainUI *mainUI)
@@ -62,14 +66,20 @@ void DetailPopup::createLayout(Evas_Object *parent)
     edje_object_signal_callback_add(elm_layout_edje_get(m_layout), "mouse,clicked,1", "thumbnail", _url_click, this);
     elm_layout_text_set(m_layout, "history_title", "History");
     elm_layout_text_set(m_layout, "url", tools::clearURL(m_item->getUrl()));
+
     m_historyList = elm_genlist_add(m_layout);
     evas_object_size_hint_weight_set(m_historyList, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
     evas_object_size_hint_align_set(m_historyList, EVAS_HINT_FILL, EVAS_HINT_FILL);
+    evas_object_smart_callback_add(m_historyList, "pressed", _history_url_click, this);
+    for (auto it = m_prevItems->begin(); it != m_prevItems->end(); ++it) {
+        elm_genlist_item_append(m_historyList, m_history_item_class, it->get(), nullptr, ELM_GENLIST_ITEM_NONE, nullptr, this);
+    }
     evas_object_show(m_historyList);
     elm_object_part_content_set(m_layout, "history_list", m_historyList);
 
-    for (auto it = m_prevItems->begin(); it != m_prevItems->end(); ++it) {
-        elm_genlist_item_append(m_historyList, m_history_item_class, it->get(), nullptr, ELM_GENLIST_ITEM_NONE, nullptr, this);
+    if (m_item->getThumbnail()) {
+        Evas_Object * thumb = tools::EflTools::getEvasImage(m_item->getThumbnail(), m_layout);
+        elm_object_part_content_set(m_layout, "thumbnail", thumb);
     }
 
     evas_object_show(m_layout);
@@ -88,18 +98,19 @@ void DetailPopup::hide()
     edje_object_signal_callback_del(elm_layout_edje_get(m_layout), "mouse,clicked,1", "bg", _bg_click);
     edje_object_signal_callback_del(elm_layout_edje_get(m_layout), "mouse,clicked,1", "url_over", _url_click);
     edje_object_signal_callback_del(elm_layout_edje_get(m_layout), "mouse,clicked,1", "thumbnail", _url_click);
+    evas_object_smart_callback_del(m_historyList, "pressed", _history_url_click);
     elm_genlist_clear(m_historyList);
     evas_object_hide(m_layout);
 }
 
-void DetailPopup::_bg_click(void* data, Evas_Object* obj, const char* emission, const char* source)
+void DetailPopup::_bg_click(void* data, Evas_Object*, const char*, const char*)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     DetailPopup *dp = reinterpret_cast<DetailPopup*>(data);
     dp->hide();
 }
 
-void DetailPopup::_url_click(void* data, Evas_Object* obj, const char* emission, const char* source)
+void DetailPopup::_url_click(void* data, Evas_Object*, const char*, const char*)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     DetailPopup *dp = reinterpret_cast<DetailPopup*>(data);
@@ -107,14 +118,34 @@ void DetailPopup::_url_click(void* data, Evas_Object* obj, const char* emission,
     dp->openURLInNewTab(dp->m_item, dp->m_mainUI->isDesktopMode());
 }
 
-char* DetailPopup::_get_history_link_text(void* data, Evas_Object* obj, const char* part)
+void DetailPopup::_history_url_click(void* data, Evas_Object*, void* event_info)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    Elm_Object_Item *glit = reinterpret_cast<Elm_Object_Item*>(event_info);
+    void *itemData = elm_object_item_data_get(glit);
+    services::HistoryItem *item = reinterpret_cast<services::HistoryItem*>(itemData);
+
+    DetailPopup *dp = reinterpret_cast<DetailPopup*>(data);
+    // find shared pointer pointed to HistoryItem object
+    auto it = std::find_if(dp->m_prevItems->begin(),
+                           dp->m_prevItems->end(),
+                           [item] (const std::shared_ptr<services::HistoryItem> i)
+                           { return i.get() == item; }
+                          );
+    std::shared_ptr<services::HistoryItem> itemPtr= *it;
+    dp->hide();
+    dp->openURLInNewTab(itemPtr, dp->m_mainUI->isDesktopMode());
+}
+
+char* DetailPopup::_get_history_link_text(void* data, Evas_Object*, const char* part)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
 
     services::HistoryItem *item = reinterpret_cast<services::HistoryItem*>(data);
     if (!strcmp(part, "page_dsc")) {
         if (item != nullptr) {
-            return strdup(tools::clearURL(item->getUrl()));
+            std::string text = item->getTitle() + URL_SEPARATOR + tools::clearURL(item->getUrl());
+            return strdup(text.c_str());
         }
     }
     return strdup("");
index 1ad8a02..953e9b8 100644 (file)
@@ -53,10 +53,18 @@ namespace base_ui{
         static void _url_click(void *data, Evas_Object *obj, const char *emission, const char *source);
 
         /**
+         * @brief History genlist item click callback
+         */
+        static void _history_url_click(void *data, Evas_Object *o, void *event_info);
+
+        /**
         * @brief Hide popup
         */
         void hide();
 
+        /**
+         * @brief Create main layout and all compnents.
+         */
         void createLayout(Evas_Object *parent);
 
         /**
@@ -71,6 +79,8 @@ namespace base_ui{
         std::string edjFilePath;
         std::shared_ptr<services::HistoryItem> m_item;
         std::shared_ptr<services::HistoryItemVector> m_prevItems;
+
+        static const char * URL_SEPARATOR;
     };
 
 }
index 6dbdbbc..1367a87 100644 (file)
@@ -33,8 +33,8 @@ namespace base_ui{
 
 const int SMALL_TILES_ROWS = 2;
 const int MAX_TILES_NUMBER = 5;
-const int MainUI::MAX_TILE_WIDTH = 784;
-const int MainUI::MAX_TILE_HEIGHT = 498;
+const int MainUI::MAX_THUMBNAIL_WIDTH = 840;
+const int MainUI::MAX_THUMBNAIL_HEIGHT = 648;
 
 EXPORT_SERVICE(MainUI, "org.tizen.browser.mainui")
 
@@ -50,12 +50,6 @@ typedef struct _BookmarkItemData
         std::shared_ptr<tizen_browser::base_ui::MainUI> mainUI;
 } BookmarkItemData;
 
-struct ItemData{
-        tizen_browser::base_ui::MainUI * mainUI;
-        const char* button_name;
-        Elm_Object_Item * e_item;
-};
-
 MainUI::MainUI()
     : m_parent(nullptr)
     , m_layout(nullptr)
@@ -360,7 +354,7 @@ void MainUI::addBookmarkItems(std::vector<std::shared_ptr<tizen_browser::service
          }
 }
 
-char* MainUI::_grid_text_get(void *data, Evas_Object *obj, const char *part)
+char* MainUI::_grid_text_get(void *data, Evas_Object *, const char *part)
 {
     HistoryItemData *itemData = reinterpret_cast<HistoryItemData*>(data);
     if (!strcmp(part, "page_title")) {
@@ -372,7 +366,7 @@ char* MainUI::_grid_text_get(void *data, Evas_Object *obj, const char *part)
     return strdup("");
 }
 
-char* MainUI::_grid_bookmark_text_get(void *data, Evas_Object *obj, const char *part)
+char* MainUI::_grid_bookmark_text_get(void *data, Evas_Object *, const char *part)
 {
         BookmarkItemData *itemData = reinterpret_cast<BookmarkItemData*>(data);
         if (!strcmp(part, "page_title")) {
index 667a844..9814981 100644 (file)
@@ -63,8 +63,8 @@ public:
     boost::signals2::signal<void (const std::string & )> bookmarkClicked;
     boost::signals2::signal<void (const std::string & )> bookmarkManagerClicked;
 
-    static const int MAX_TILE_WIDTH;
-    static const int MAX_TILE_HEIGHT;
+    static const int MAX_THUMBNAIL_WIDTH;
+    static const int MAX_THUMBNAIL_HEIGHT;
 
 private:
     void createItemClasses();
index 5a2ea1b..dd291d8 100644 (file)
@@ -2,7 +2,9 @@ collections {
 
     group {
         name: "popup";
-
+        images {
+            image: "ic_popup_list_arrow.png" COMP;
+        }
         parts {
             part { name: "bg";
                 type: RECT;
@@ -44,10 +46,8 @@ collections {
             }
 
             part { name: "thumbnail";
-                //type: SWALLOW;    TODO: change to swallow while adding thumbnail to Detail popup
-                type: RECT;
+                type: SWALLOW;
                 description {
-                    color: 113 128 147 255;
                     min: 840 648;
                     max: 840 648;
                     visible: 1;
@@ -90,8 +90,8 @@ collections {
                 type: TEXT;
                 description {
                     visible: 1;
-                    min: 428 122;
-                    max: 428 122;
+                    min: 408 122;
+                    max: 408 122;
                     align: 0.0 0.0;
                     fixed: 1 1;
                     color: 51 51 51 255;
@@ -117,6 +117,29 @@ collections {
                 }
             }
 
+            part { name: "url_arrow";
+                type: IMAGE;
+                scale: 1;
+                repeat_events: 1;
+                description {
+                    state: "default" 0.0;
+                    visible: 1;
+                    align: 0.0 0.5;
+                    min: 38 38;
+                    max: 38 38;
+                    image.normal: "ic_popup_list_arrow.png";
+                    rel1 {
+                        to: "url_bg";
+                        relative: 0.0 0.0;
+                        offset: 442 0;
+                    }
+                    rel2 {
+                        to: "url_bg";
+                        relative: 1.0 1.0;
+                    }
+                }
+            }
+
             part { name: "url_over";
                 type: RECT;
                 mouse_events: 1;
@@ -229,6 +252,10 @@ collections {
                     color: 255 255 255 255;
                     align: 0.0 0.0;
                 }
+                description { state: "selected" 0.0;
+                    inherit: "default" 0.0;
+                    color: 0 119 246 255;
+                }
             }
 
             part { name: "page_dsc";
@@ -253,8 +280,42 @@ collections {
                         align: 0 0.5;
                     }
                 }
+                description { state: "selected" 0.0;
+                    inherit: "default" 0.0;
+                    color: 255 255 255 255;
+                }
+            }
+
+            part { name: "dsc_over";
+                type: RECT;
+                mouse_events: 1;
+                repeat_events: 1;
+                description { state: "default" 0.0;
+                    visible: 1;
+                    color: 0 0 0 0;
+                    rel1.to: "bg";
+                    rel2.to: "bg";
+                }
             }
 
         }
+        programs {
+            program {
+                name: "mouse_in_url";
+                signal: "mouse,in";
+                source: "dsc_over";
+                action: STATE_SET "selected" 0.0;
+                target: "bg";
+                target: "page_dsc";
+            }
+            program {
+                name: "mouse_out_url";
+                signal: "mouse,out";
+                source: "dsc_over";
+                action: STATE_SET "default" 0.0;
+                target: "bg";
+                target: "page_dsc";
+            }
+        }
     }
 }
\ No newline at end of file
index de77956..030e8dd 100644 (file)
@@ -402,8 +402,8 @@ group { name: "elm/genlist/item/big_grid_item/default";
                 fixed: 1 0;
                 align: 0.0 0.0;
                 color : 231 231 231 255;
-                min: 784 498;
-                max: 784 498;
+                min: 784 577;   // size adjusted to max thubnail with and height
+                max: 784 577;
                 rel1 {
                     relative: 0.0  0.0; to: "bg";
                 }
@@ -494,8 +494,9 @@ group { name: "elm/genlist/item/big_grid_item/default";
                 color: 113 128 147 255;
                 visible: 1;
                 rel1 {
-                    to: "elm.thumbnail";
-                    relative: 0.0  1.0;
+                    to: "bg";
+                    relative: 0.0  0.0;
+                    offset: 0 498;    // thumbnail height
                 }
                 rel2 {
                     relative: 1.0  1.0;
@@ -666,8 +667,8 @@ group { name: "elm/genlist/item/small_grid_item/default";
                 fixed: 1 0;
                 align: 0.0 0.0;
                 color : 231 231 231 255;
-                min: 378 198;
-                max: 378 198;
+                min: 378 292;   // size adjusted to max thubnail with and height
+                max: 378 292;
                 rel1 {
                     relative: 0.0  0.0; to: "bg";
                 }
@@ -758,8 +759,9 @@ group { name: "elm/genlist/item/small_grid_item/default";
                 color: 113 128 147 255;
                 visible: 1;
                 rel1 {
-                    to: "elm.thumbnail";
-                    relative: 0.0  1.0;
+                    to: "bg";
+                    relative: 0.0  0.0;
+                    offset: 0 198;  // thumbnail height
                 }
                 rel2 {
                     relative: 1.0  1.0;
diff --git a/services/MainUI/images/ic_popup_list_arrow.png b/services/MainUI/images/ic_popup_list_arrow.png
new file mode 100644 (file)
index 0000000..d54f171
Binary files /dev/null and b/services/MainUI/images/ic_popup_list_arrow.png differ
index f4380d7..2747a12 100644 (file)
@@ -801,7 +801,7 @@ void SimpleUI::loadFinished()
     if(!m_webEngine->isPrivateMode()){
         m_historyService->addHistoryItem(std::make_shared<tizen_browser::services::HistoryItem> (m_webEngine->getURI(),
                                                                                                 m_webEngine->getTitle(),
-                                                                                                m_webEngine->getFavicon()), m_webEngine->getSnapshotData(MainUI::MAX_TILE_WIDTH, MainUI::MAX_TILE_HEIGHT));
+                                                                                                m_webEngine->getFavicon()), m_webEngine->getSnapshotData(MainUI::MAX_THUMBNAIL_WIDTH, MainUI::MAX_THUMBNAIL_HEIGHT));
     }
 #if 0
     if(!m_platformInputManager->getPointerModeEnabled())