2 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #include <Elementary.h>
18 #include <boost/concept_check.hpp>
20 #include <AbstractMainWindow.h>
22 #include "BookmarksUI.h"
23 #include "ServiceManager.h"
24 #include "BrowserLogger.h"
25 #include "Tools/EflTools.h"
26 #include "../Tools/BrowserImage.h"
29 namespace tizen_browser{
32 EXPORT_SERVICE(BookmarksUI, "org.tizen.browser.bookmarksui")
35 typedef struct _BookmarkItemData
37 std::shared_ptr<tizen_browser::services::BookmarkItem> item;
38 std::shared_ptr<tizen_browser::base_ui::BookmarksUI> bookmarksUI;
41 BookmarksUI::BookmarksUI()
45 , m_gengridSetup(false)
47 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
50 BookmarksUI::~BookmarksUI()
55 void BookmarksUI::init(Evas_Object* p)
57 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
59 m_gengrid = elm_gengrid_add(m_parent);
61 evas_object_smart_callback_add(m_gengrid, "item,focused", focusItem, NULL);
62 evas_object_smart_callback_add(m_gengrid, "item,unfocused", unFocusItem, NULL);
63 evas_object_smart_callback_add(m_gengrid, "activated", _itemSelected, this);
66 m_item_class = elm_genlist_item_class_new();
67 m_item_class->item_style = "bookmark_item";
68 m_item_class->func.text_get = NULL;
69 m_item_class->func.content_get = _grid_content_get;
70 m_item_class->func.state_get = NULL;
71 m_item_class->func.del = NULL;
76 Evas_Object * BookmarksUI::getContent()
78 BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__);
81 if(m_map_bookmark_views.size() == 0) {
82 elm_object_part_content_set(m_gengrid, "elm.swallow.empty", createNoBookmarksLabel());
87 std::string edjFilePath = EDJE_DIR;
88 edjFilePath.append("BookmarksUI/Bookmarks.edj");
89 elm_theme_extension_add(NULL, edjFilePath.c_str());
92 elm_object_style_set(m_gengrid, "bookmarks");
94 elm_gengrid_align_set(m_gengrid, 0, 0);
95 elm_gengrid_item_size_set(m_gengrid, 395, 357);
96 elm_gengrid_select_mode_set(m_gengrid, ELM_OBJECT_SELECT_MODE_ALWAYS);
97 elm_gengrid_multi_select_set(m_gengrid, EINA_FALSE);
98 elm_gengrid_horizontal_set(m_gengrid, EINA_FALSE);
99 elm_gengrid_highlight_mode_set(m_gengrid, EINA_TRUE);
100 elm_scroller_policy_set(m_gengrid, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
101 elm_scroller_page_size_set(m_gengrid, 0, 327);
103 evas_object_size_hint_weight_set(m_gengrid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
104 evas_object_size_hint_align_set(m_gengrid, EVAS_HINT_FILL, EVAS_HINT_FILL);
106 m_gengridSetup = true;
111 void BookmarksUI::addBookmarkItem(std::shared_ptr<tizen_browser::services::BookmarkItem> bi)
113 BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__);
114 BookmarkItemData *itemData = new BookmarkItemData();
116 itemData->bookmarksUI = std::shared_ptr<tizen_browser::base_ui::BookmarksUI>(this);
117 Elm_Object_Item* bookmarkView = elm_gengrid_item_append(m_gengrid, m_item_class, itemData, NULL, this);
118 m_map_bookmark_views.insert(std::pair<std::string,Elm_Object_Item*>(bi->getAddress(),bookmarkView));
120 // unselect by default
121 elm_gengrid_item_selected_set(bookmarkView, EINA_FALSE);
123 setEmptyGengrid(false);
126 void BookmarksUI::addBookmarkItems(std::vector<std::shared_ptr<tizen_browser::services::BookmarkItem> > items)
128 BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__);
129 for (auto it = items.begin(); it != items.end(); ++it) {
130 addBookmarkItem(*it);
134 void BookmarksUI::removeBookmarkItem(const std::string& uri)
136 BROWSER_LOGD("[%s] uri=%s", __func__, uri.c_str());
137 if(m_map_bookmark_views.find(uri) == m_map_bookmark_views.end()) {
141 Elm_Object_Item* bookmarkView = m_map_bookmark_views.at(uri);
142 elm_object_item_del(bookmarkView);
143 m_map_bookmark_views.erase(uri);
145 setEmptyGengrid(0 == m_map_bookmark_views.size());
148 void BookmarksUI::_item_deleted(void * /* data */, Evas_Object * /* obj */)
153 Evas_Object * BookmarksUI::_grid_content_get(void *data, Evas_Object *obj, const char *part)
155 BROWSER_LOGD("%s:%d %s part=%s", __FILE__, __LINE__, __func__, part);
156 BookmarkItemData *itemData = reinterpret_cast<BookmarkItemData*>(data);
158 if (!strcmp(part, "elm.thumbnail")) {
159 if (itemData->item->getThumbnail()) {
160 Evas_Object * thumb = tizen_browser::tools::EflTools::getEvasImage(itemData->item->getThumbnail(), itemData->bookmarksUI->m_parent);
167 else if (!strcmp(part, "favicon")) {
168 Evas_Object * favicon = NULL;
169 if(itemData->item->getFavicon().get()){
170 favicon = tizen_browser::tools::EflTools::getEvasImage(itemData->item->getFavicon(), obj);
174 else if (!strcmp(part, "elm.label")) {
175 Evas_Object *label = elm_label_add(obj);
176 elm_object_style_set(label, "bookmarks_label");
177 elm_object_text_set(label, itemData->item->getTittle().c_str());
180 else if (!strcmp(part, "elm.deleteButton")) {
181 Evas_Object *deleteButton = elm_button_add(obj);
182 elm_object_style_set(deleteButton, "deleteButton");
183 evas_object_smart_callback_add(deleteButton, "clicked", tizen_browser::base_ui::BookmarksUI::_deleteBookmark, data);
186 else if (!strcmp(part, "elm.thumbButton")) {
187 Evas_Object *thumbButton = elm_button_add(obj);
188 elm_object_style_set(thumbButton, "thumbButton");
189 evas_object_smart_callback_add(thumbButton, "clicked", tizen_browser::base_ui::BookmarksUI::_thumbSelected, data);
195 void BookmarksUI::_itemSelected(void * data, Evas_Object * /* obj */, void * event_info)
197 Elm_Object_Item * selected = reinterpret_cast<Elm_Object_Item *>(event_info);
198 BookmarkItemData * itemData = reinterpret_cast<BookmarkItemData *>(elm_object_item_data_get(selected));
199 BookmarksUI * self = reinterpret_cast<BookmarksUI *>(data);
201 self->bookmarkClicked(itemData->item);
204 void BookmarksUI::_deleteBookmark(void *data, Evas_Object * /* obj */, void * /* event_info */)
206 BookmarkItemData * itemData = reinterpret_cast<BookmarkItemData *>(data);
207 itemData->bookmarksUI->bookmarkDeleteClicked(itemData->item);
210 void BookmarksUI::_thumbSelected(void * data, Evas_Object * /* obj */, void * /* event_info */)
212 BookmarkItemData * itemData = reinterpret_cast<BookmarkItemData *>(data);
213 itemData->bookmarksUI->bookmarkClicked(itemData->item);
216 Evas_Object* BookmarksUI::createNoBookmarksLabel()
218 Evas_Object *label = elm_label_add(m_parent);
219 elm_object_text_set(label, "No favorite websites.");
220 evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
221 evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL);
225 void BookmarksUI::setEmptyGengrid(bool setEmpty)
228 elm_object_part_content_set(m_gengrid, "elm.swallow.empty", createNoBookmarksLabel());
230 elm_object_part_content_set(m_gengrid, "elm.swallow.empty", NULL);
234 void BookmarksUI::deleteAllItems()
236 BROWSER_LOGD("Deleting all items from gengrid");
237 elm_gengrid_clear(m_gengrid);
238 m_map_bookmark_views.clear();
239 setEmptyGengrid(true);
242 void BookmarksUI::focusItem(void* /*data*/, Evas_Object* /*obj*/, void* event_info)
244 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
245 Elm_Object_Item *item = reinterpret_cast<Elm_Object_Item*>(event_info);
246 elm_object_item_signal_emit( item, "mouse,in", "over2");
249 elm_gengrid_item_selected_set(item, EINA_TRUE);
252 void BookmarksUI::unFocusItem(void* /*data*/, Evas_Object* /*obj*/, void* event_info)
254 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
255 Elm_Object_Item *item = reinterpret_cast<Elm_Object_Item*>(event_info);
256 elm_object_item_signal_emit( item, "mouse,out", "over2");
258 // unselected manually
259 elm_gengrid_item_selected_set(item, EINA_FALSE);
262 std::shared_ptr<tizen_browser::services::BookmarkItem> BookmarksUI::getSelectedBookmarkItem()
264 Elm_Object_Item * selected = elm_gengrid_selected_item_get(m_gengrid);
267 BROWSER_LOGD("none selected");
268 return std::make_shared<tizen_browser::services::BookmarkItem>();
270 BookmarkItemData * itemData = reinterpret_cast<BookmarkItemData *>(elm_object_item_data_get(selected));
271 return itemData->item;