Task TT-75 Implement "Main page loading UI" view
[profile/tv/apps/web/browser.git] / services / MainUI / MainUI.cpp
1 /*
2  * Copyright (c) 2014 Samsung Electronics Co., Ltd.
3  *
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
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16
17 #include <Elementary.h>
18 #include <boost/concept_check.hpp>
19 #include <vector>
20 #include <AbstractMainWindow.h>
21
22 #include "MainUI.h"
23 #include "ServiceManager.h"
24 #include "BrowserLogger.h"
25 #include "Tools/EflTools.h"
26 #include "../Tools/BrowserImage.h"
27
28 #define efl_scale       (elm_config_scale_get() / elm_app_base_scale_get())
29
30 namespace tizen_browser{
31 namespace base_ui{
32
33 EXPORT_SERVICE(MainUI, "org.tizen.browser.mainui")
34
35 typedef struct _HistoryItemData
36 {
37         std::shared_ptr<tizen_browser::services::HistoryItem> item;
38         std::shared_ptr<tizen_browser::base_ui::MainUI> mainUI;
39 } HistoryItemData;
40
41 typedef struct _BookmarkItemData
42 {
43         std::shared_ptr<tizen_browser::services::BookmarkItem> item;
44         std::shared_ptr<tizen_browser::base_ui::MainUI> mainUI;
45 } BookmarkItemData;
46
47 struct ItemData{
48         tizen_browser::base_ui::MainUI * mainUI;
49         const char* button_name;
50         Elm_Object_Item * e_item;
51 };
52
53 MainUI::MainUI()
54     : m_gengrid(nullptr)
55     , m_genListTop(nullptr)
56     , m_genListBottom(nullptr)
57     , m_parent(nullptr)
58     , m_big_item_class(nullptr)
59     , m_medium_item_class(nullptr)
60     , m_small_item_class(nullptr)
61     , m_bookmark_item_class(nullptr)
62 {
63     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
64     edjFilePath = EDJE_DIR;
65     edjFilePath.append("MainUI/MainUI.edj");
66 }
67
68 MainUI::~MainUI()
69 {
70 }
71
72 void MainUI::show(Evas_Object* parent)
73 {
74     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
75     elm_theme_extension_add(nullptr, edjFilePath.c_str());
76     m_layout = elm_layout_add(parent);
77     elm_layout_file_set(m_layout, edjFilePath.c_str(), "mv_bookmarks");
78     evas_object_size_hint_weight_set(m_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
79     evas_object_size_hint_align_set(m_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
80     evas_object_show(m_layout);
81     m_parent = m_layout;
82
83     m_genListMVBig = elm_genlist_add(m_layout);
84     elm_object_part_content_set(m_layout, "elm.swallow.mvBig", m_genListMVBig);
85     elm_genlist_homogeneous_set(m_genListMVBig, EINA_FALSE);
86     elm_genlist_multi_select_set(m_genListMVBig, EINA_FALSE);
87     elm_genlist_select_mode_set(m_genListMVBig, ELM_OBJECT_SELECT_MODE_ALWAYS);
88     elm_genlist_mode_set(m_genListMVBig, ELM_LIST_LIMIT);
89     evas_object_size_hint_weight_set(m_genListMVBig, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
90
91     m_genListMVMedium = elm_genlist_add(m_layout);
92     elm_object_part_content_set(m_layout, "elm.swallow.mvMedium", m_genListMVMedium);
93     elm_genlist_homogeneous_set(m_genListMVMedium, EINA_FALSE);
94     elm_genlist_multi_select_set(m_genListMVMedium, EINA_FALSE);
95     elm_genlist_select_mode_set(m_genListMVMedium, ELM_OBJECT_SELECT_MODE_ALWAYS);
96     elm_genlist_mode_set(m_genListMVMedium, ELM_LIST_LIMIT);
97     evas_object_size_hint_weight_set(m_genListMVMedium, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
98
99     m_genListMVSmall = elm_genlist_add(m_layout);
100     elm_object_part_content_set(m_layout, "elm.swallow.mvSmall", m_genListMVSmall);
101     elm_genlist_homogeneous_set(m_genListMVSmall, EINA_FALSE);
102     elm_genlist_multi_select_set(m_genListMVSmall, EINA_FALSE);
103     elm_genlist_select_mode_set(m_genListMVSmall, ELM_OBJECT_SELECT_MODE_ALWAYS);
104     elm_genlist_mode_set(m_genListMVSmall, ELM_LIST_LIMIT);
105     evas_object_size_hint_weight_set(m_genListMVSmall, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
106
107       if (!m_big_item_class) {
108             m_big_item_class = elm_genlist_item_class_new();
109             m_big_item_class->item_style = "big_grid_item";
110             m_big_item_class->func.text_get = _grid_text_get;
111             m_big_item_class->func.content_get =  _grid_content_get;
112             m_big_item_class->func.state_get = nullptr;
113             m_big_item_class->func.del = nullptr;
114         }
115
116       if (!m_medium_item_class) {
117             m_medium_item_class = elm_genlist_item_class_new();
118             m_medium_item_class->item_style = "medium_grid_item";
119             m_medium_item_class->func.text_get = _grid_text_get;
120             m_medium_item_class->func.content_get =  _grid_content_get;
121             m_medium_item_class->func.state_get = nullptr;
122             m_medium_item_class->func.del = nullptr;
123         }
124
125       if (!m_small_item_class) {
126             m_small_item_class = elm_genlist_item_class_new();
127             m_small_item_class->item_style = "small_grid_item";
128             m_small_item_class->func.text_get = _grid_text_get;
129             m_small_item_class->func.content_get =  _grid_content_get;
130             m_small_item_class->func.state_get = nullptr;
131             m_small_item_class->func.del = nullptr;
132         }
133
134     /*evas_object_smart_callback_add(m_genList, "item,focused", focusItem, this);
135     evas_object_smart_callback_add(m_genList, "item,unfocused", unFocusItem, nullptr);*/
136
137
138     m_gengrid = elm_gengrid_add(m_layout);
139     //elm_object_part_content_set(m_layout, "elm.swallow.grid", m_gengrid);
140
141     evas_object_smart_callback_add(m_gengrid, "item,focused", focusItem, nullptr);
142     evas_object_smart_callback_add(m_gengrid, "item,unfocused", unFocusItem, nullptr);
143     evas_object_smart_callback_add(m_gengrid, "activated", _itemSelected, this);
144
145         if (!m_bookmark_item_class) {
146             m_bookmark_item_class = elm_gengrid_item_class_new();
147             m_bookmark_item_class->item_style = "grid_item";
148             m_bookmark_item_class->func.text_get = _grid_bookmark_text_get;
149             m_bookmark_item_class->func.content_get =  _grid_bookmark_content_get;
150             m_bookmark_item_class->func.state_get = nullptr;
151             m_bookmark_item_class->func.del = nullptr;
152         }
153
154     M_ASSERT(m_parent);
155     elm_theme_extension_add(nullptr, edjFilePath.c_str());
156     elm_gengrid_align_set(m_gengrid, 0, 0);
157     elm_gengrid_select_mode_set(m_gengrid, ELM_OBJECT_SELECT_MODE_ALWAYS);
158     elm_gengrid_multi_select_set(m_gengrid, EINA_FALSE);
159     elm_gengrid_horizontal_set(m_gengrid, EINA_FALSE);
160     //elm_gengrid_highlight_mode_set(m_gengrid, EINA_TRUE);
161     elm_scroller_policy_set(m_gengrid, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
162     elm_scroller_page_size_set(m_gengrid, 0, 327);
163     evas_object_size_hint_weight_set(m_gengrid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
164     evas_object_size_hint_align_set(m_gengrid, EVAS_HINT_FILL, EVAS_HINT_FILL);
165     elm_gengrid_item_size_set(m_gengrid, 364 * efl_scale, 320 * efl_scale);
166
167     showTopButtons();
168     showBottomButton();
169 }
170
171
172 void MainUI::showTopButtons()
173 {
174     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
175     elm_theme_extension_add(nullptr, edjFilePath.c_str());
176     m_genListTop = elm_genlist_add(m_layout);
177     elm_object_part_content_set(m_layout, "elm.swallow.genlistTop", m_genListTop);
178     elm_genlist_homogeneous_set(m_genListTop, EINA_FALSE);
179     elm_genlist_multi_select_set(m_genListTop, EINA_FALSE);
180     elm_genlist_select_mode_set(m_genListTop, ELM_OBJECT_SELECT_MODE_ALWAYS);
181     elm_genlist_mode_set(m_genListTop, ELM_LIST_LIMIT);
182     //elm_genlist_decorate_mode_set(m_genListTop, EINA_TRUE);
183     evas_object_size_hint_weight_set(m_genListTop, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
184
185     /*evas_object_smart_callback_add(m_genList, "item,focused", focusItem, this);
186     evas_object_smart_callback_add(m_genList, "item,unfocused", unFocusItem, nullptr);*/
187
188     m_itemClassTop = elm_genlist_item_class_new();
189     m_itemClassTop->item_style = "top_button_item";
190     m_itemClassTop->func.text_get = nullptr; // &listTopItemTextGet;
191     m_itemClassTop->func.content_get = &listTopItemContentGet;
192     m_itemClassTop->func.state_get = 0;
193     m_itemClassTop->func.del = 0;
194
195     ItemData * id = new ItemData;
196     id->mainUI = this;
197     Elm_Object_Item* elmItem = elm_genlist_item_append(m_genListTop,            //genlist
198                                                        m_itemClassTop,          //item Class
199                                                       id,
200                                                       nullptr,                    //parent item
201                                                       ELM_GENLIST_ITEM_NONE,//item type
202                                                       nullptr,
203                                                       nullptr                  //data passed to above function
204                                                      );
205     id->e_item = elmItem;
206     ItemData * id2 = new ItemData;
207     id2->mainUI = this;
208     Elm_Object_Item* elmItem2 = elm_genlist_item_append(m_genListTop,            //genlist
209                                                        m_itemClassTop,          //item Class
210                                                       id2,
211                                                       nullptr,                    //parent item
212                                                       ELM_GENLIST_ITEM_NONE,//item type
213                                                       nullptr,
214                                                       nullptr                  //data passed to above function
215                                                      );
216     id2->e_item = elmItem2;
217     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
218 }
219
220 void MainUI::showBottomButton()
221 {
222     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
223     elm_theme_extension_add(nullptr, edjFilePath.c_str());
224     m_genListBottom = elm_genlist_add(m_layout);
225     elm_object_part_content_set(m_layout, "elm.swallow.genlistBottom", m_genListBottom);
226     elm_genlist_homogeneous_set(m_genListBottom, EINA_FALSE);
227     elm_genlist_multi_select_set(m_genListBottom, EINA_FALSE);
228     elm_genlist_select_mode_set(m_genListBottom, ELM_OBJECT_SELECT_MODE_ALWAYS);
229     elm_genlist_mode_set(m_genListBottom, ELM_LIST_LIMIT);
230     //elm_genlist_decorate_mode_set(m_genListBottom, EINA_TRUE);
231     evas_object_size_hint_weight_set(m_genListBottom, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
232
233     /*evas_object_smart_callback_add(m_genList, "item,focused", focusItem, this);
234     evas_object_smart_callback_add(m_genList, "item,unfocused", unFocusItem, nullptr);*/
235
236     m_itemClassBottom = elm_genlist_item_class_new();
237     m_itemClassBottom->item_style = "bottom_button_item";
238     m_itemClassBottom->func.text_get = nullptr;
239     m_itemClassBottom->func.content_get = &listItemBottomContentGet;
240     m_itemClassBottom->func.state_get = 0;
241     m_itemClassBottom->func.del = 0;
242
243     ItemData * id = new ItemData;
244     id->mainUI = this;
245     Elm_Object_Item* elmItem = elm_genlist_item_append(m_genListBottom,            //genlist
246                                                        m_itemClassBottom,          //item Class
247                                                       id,
248                                                       nullptr,                    //parent item
249                                                       ELM_GENLIST_ITEM_NONE,//item type
250                                                       nullptr,
251                                                       nullptr                  //data passed to above function
252                                                      );
253     id->e_item = elmItem;
254 }
255
256 Evas_Object* MainUI::listTopItemContentGet(void* data, Evas_Object* obj, const char* part)
257 {
258         BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
259         if(!strcmp(part, "mostvisited_click"))
260         {
261                 Evas_Object *mvButton = elm_button_add(obj);
262                 elm_object_style_set(mvButton, "invisible_button");
263                 evas_object_smart_callback_add(mvButton, "clicked", tizen_browser::base_ui::MainUI::_mostVisited_clicked, data);
264                 return mvButton;
265         }
266         else if(!strcmp(part, "bookmark_click"))
267         {
268                 Evas_Object *bmButton = elm_button_add(obj);
269                 elm_object_style_set(bmButton, "invisible_button");
270                 evas_object_smart_callback_add(bmButton, "clicked", tizen_browser::base_ui::MainUI::_bookmark_clicked, data);
271                 return bmButton;
272         }
273         return nullptr;
274 }
275
276 void MainUI::_mostVisited_clicked(void * data, Evas_Object * /* obj */, void * event_info)
277 {
278     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
279         ItemData* itemData = reinterpret_cast<ItemData *>(data);
280         itemData->mainUI->mostVisitedClicked(std::string());
281 }
282
283 void MainUI::_bookmark_clicked(void * data, Evas_Object * /* obj */, void * event_info)
284 {
285     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
286         ItemData* itemData = reinterpret_cast<ItemData *>(data);
287         itemData->mainUI->bookmarkClicked(std::string());
288 }
289
290 void MainUI::_bookmark_manager_clicked(void * data, Evas_Object * /* obj */, void * event_info)
291 {
292     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
293         ItemData* itemData = reinterpret_cast<ItemData *>(data);
294         itemData->mainUI->bookmarkManagerClicked(std::string());
295 }
296
297 Evas_Object* MainUI::listItemBottomContentGet(void* data, Evas_Object* obj, const char* part)
298 {
299         BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
300         if(!strcmp(part, "bookmarkmanager_click"))
301         {
302                 Evas_Object *bmButton = elm_button_add(obj);
303                 elm_object_style_set(bmButton, "invisible_button");
304                 evas_object_smart_callback_add(bmButton, "clicked", tizen_browser::base_ui::MainUI::_bookmark_manager_clicked, data);
305                 return bmButton;
306         }
307         return nullptr;
308 }
309
310 void MainUI::addHistoryItem(std::shared_ptr<tizen_browser::services::HistoryItem> hi)
311 {
312     BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__);
313     if (m_map_history_views.size() >= 5)
314         return;
315
316     HistoryItemData *itemData = new HistoryItemData();
317     itemData->item = hi;
318     itemData->mainUI = std::shared_ptr<tizen_browser::base_ui::MainUI>(this);
319     Elm_Object_Item* historyView = nullptr;
320
321     switch(m_map_history_views.size())
322     {
323         case 0:
324     BROWSER_LOGD("%s:%d %s  m_map_history_views.size %d", __FILE__, __LINE__, __func__, m_map_history_views.size());
325                 historyView = elm_genlist_item_append(m_genListMVBig, m_big_item_class, itemData, nullptr, ELM_GENLIST_ITEM_NONE, nullptr, this);
326                 break;
327         case 1:
328         case 2:
329     BROWSER_LOGD("%s:%d %s  m_map_history_views.size %d", __FILE__, __LINE__, __func__, m_map_history_views.size());
330                 historyView = elm_genlist_item_append(m_genListMVMedium, m_medium_item_class, itemData, nullptr, ELM_GENLIST_ITEM_NONE, nullptr, this);
331                 break;
332         case 3:
333         case 4:
334     BROWSER_LOGD("%s:%d %s  m_map_history_views.size %d", __FILE__, __LINE__, __func__, m_map_history_views.size());
335                 historyView = elm_genlist_item_append(m_genListMVSmall, m_small_item_class, itemData, nullptr, ELM_GENLIST_ITEM_NONE, nullptr, this);
336                 break;
337     }
338
339     m_map_history_views.insert(std::pair<std::string,Elm_Object_Item*>(hi->getUrl(),historyView));
340
341     setEmptyGengrid(false);
342 }
343
344 void MainUI::addHistoryItems(std::vector<std::shared_ptr<tizen_browser::services::HistoryItem> > items)
345 {
346          BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__);
347          int i = 0;
348          for (auto it = items.begin(); it != items.end(); ++it) {
349                  i++;
350                  if (i > 5) break;
351                  addHistoryItem(*it);
352          }
353 }
354
355 void MainUI::addBookmarkItem(std::shared_ptr<tizen_browser::services::BookmarkItem> bi)
356 {
357     BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__);
358     BookmarkItemData *itemData = new BookmarkItemData();
359     itemData->item = bi;
360         itemData->mainUI = std::shared_ptr<tizen_browser::base_ui::MainUI>(this);
361         Elm_Object_Item* bookmarkView = elm_gengrid_item_append(m_gengrid, m_bookmark_item_class, itemData, nullptr, this);
362     m_map_bookmark_views.insert(std::pair<std::string,Elm_Object_Item*>(bi->getAddress(),bookmarkView));
363
364     // unselect by default
365     elm_gengrid_item_selected_set(bookmarkView, EINA_FALSE);
366
367     setEmptyGengrid(false);
368 }
369
370 void MainUI::addBookmarkItems(std::vector<std::shared_ptr<tizen_browser::services::BookmarkItem> > items)
371 {
372          BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__);
373          for (auto it = items.begin(); it != items.end(); ++it) {
374                  addBookmarkItem(*it);
375          }
376 }
377
378 char* MainUI::_grid_text_get(void *data, Evas_Object *obj, const char *part)
379 {
380         HistoryItemData *itemData = reinterpret_cast<HistoryItemData*>(data);
381         if (!strcmp(part, "page_title")) {
382                 return strdup(itemData->item->getTitle().c_str());
383         }
384         if (!strcmp(part, "page_url")) {
385                 return strdup(itemData->item->getUrl().c_str());
386         }
387         return strdup("");
388 }
389
390 char* MainUI::_grid_bookmark_text_get(void *data, Evas_Object *obj, const char *part)
391 {
392         BookmarkItemData *itemData = reinterpret_cast<BookmarkItemData*>(data);
393         if (!strcmp(part, "page_title")) {
394                 return strdup(itemData->item->getTittle().c_str());
395         }
396         if (!strcmp(part, "page_url")) {
397                 return strdup(itemData->item->getAddress().c_str());
398         }
399         return strdup("");
400 }
401
402 Evas_Object * MainUI::_grid_content_get(void *data, Evas_Object *obj, const char *part)
403 {
404     BROWSER_LOGD("%s:%d %s part=%s", __FILE__, __LINE__, __func__, part);
405     HistoryItemData *itemData = reinterpret_cast<HistoryItemData*>(data);
406
407     if (!strcmp(part, "elm.thumbnail")) {
408         if (itemData->item->getThumbnail()) {
409                 Evas_Object * thumb = tizen_browser::tools::EflTools::getEvasImage(itemData->item->getThumbnail(), itemData->mainUI->m_parent);
410                 return thumb;
411         }
412         else {
413                 return nullptr;
414         }
415     }
416     else if (!strcmp(part, "elm.thumbButton")) {
417                 Evas_Object *thumbButton = elm_button_add(obj);
418                 elm_object_style_set(thumbButton, "thumbButton");
419                 evas_object_smart_callback_add(thumbButton, "clicked", tizen_browser::base_ui::MainUI::_thumbSelected, data);
420                 return thumbButton;
421     }
422     return nullptr;
423 }
424
425 Evas_Object * MainUI::_grid_bookmark_content_get(void *data, Evas_Object *obj, const char *part)
426 {
427     BROWSER_LOGD("%s:%d %s part=%s", __FILE__, __LINE__, __func__, part);
428     BookmarkItemData *itemData = reinterpret_cast<BookmarkItemData*>(data);
429
430     if (!strcmp(part, "elm.thumbnail")) {
431         if (itemData->item->getThumbnail()) {
432                 Evas_Object * thumb = tizen_browser::tools::EflTools::getEvasImage(itemData->item->getThumbnail(), itemData->mainUI->m_parent);
433                 return thumb;
434         }
435         else {
436                 return nullptr;
437         }
438     }
439     else if (!strcmp(part, "elm.thumbButton")) {
440                 Evas_Object *thumbButton = elm_button_add(obj);
441                 elm_object_style_set(thumbButton, "thumbButton");
442                 evas_object_smart_callback_add(thumbButton, "clicked", tizen_browser::base_ui::MainUI::_thumbSelected, data);
443                 return thumbButton;
444     }
445     return nullptr;
446 }
447
448
449 void MainUI::_itemSelected(void * data, Evas_Object * /* obj */, void * event_info)
450 {
451         Elm_Object_Item * selected = reinterpret_cast<Elm_Object_Item *>(event_info);
452         HistoryItemData * itemData = reinterpret_cast<HistoryItemData *>(elm_object_item_data_get(selected));
453         MainUI * self = reinterpret_cast<MainUI *>(data);
454
455         self->historyClicked(itemData->item);
456 }
457
458 void MainUI::_thumbSelected(void * data, Evas_Object * /* obj */, void * /* event_info */)
459 {
460         HistoryItemData * itemData = reinterpret_cast<HistoryItemData *>(data);
461         itemData->mainUI->historyClicked(itemData->item);
462 }
463
464 void MainUI::clearHistoryGenlist()
465 {
466     elm_genlist_clear(m_genListMVSmall);
467     elm_genlist_clear(m_genListMVBig);
468     elm_genlist_clear(m_genListMVMedium);
469     m_map_history_views.clear();
470     evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.mvBig"));
471     evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.mvSmall"));
472     evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.mvMedium"));
473 }
474
475 void MainUI::showHistoryGenlist()
476 {
477         evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.grid"));
478         elm_object_part_content_unset(m_layout, "elm.swallow.grid");
479         elm_object_part_content_set(m_layout, "elm.swallow.mvBig", m_genListMVBig);
480         elm_object_part_content_set(m_layout, "elm.swallow.mvSmall", m_genListMVSmall);
481         elm_object_part_content_set(m_layout, "elm.swallow.mvMedium", m_genListMVMedium);
482 }
483
484 void MainUI::clearBookmarkGengrid()
485 {
486     elm_gengrid_clear(m_gengrid);
487     m_map_bookmark_views.clear();
488     evas_object_hide(elm_layout_content_get(m_layout, "elm.swallow.grid"));
489 }
490
491 void MainUI::showBookmarkGengrid()
492 {
493         evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.mvBig"));
494         evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.mvSmall"));
495         evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.mvMedium"));
496         elm_object_part_content_unset(m_layout, "elm.swallow.mvBig");
497         elm_object_part_content_unset(m_layout, "elm.swallow.mvSmall");
498         elm_object_part_content_unset(m_layout, "elm.swallow.mvMedium");
499         elm_object_part_content_set(m_layout, "elm.swallow.grid", m_gengrid);
500 }
501
502 void MainUI::hide()
503 {
504    BROWSER_LOGD("MainUI Hide");
505    evas_object_hide(elm_layout_content_get(m_layout, "elm.swallow.genlistTop"));
506    evas_object_hide(elm_layout_content_get(m_layout, "elm.swallow.genlistBottom"));
507    evas_object_hide(m_layout);
508    clearItems();
509 }
510
511 void MainUI::clearItems()
512 {
513     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
514     clearHistoryGenlist();
515     clearBookmarkGengrid();
516     elm_genlist_clear(m_genListTop);
517     elm_genlist_clear(m_genListBottom);
518 }
519
520 Evas_Object* MainUI::createNoHistoryLabel()
521 {
522     Evas_Object *label = elm_label_add(m_parent);
523     elm_object_text_set(label, "No favorite websites.");
524     evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
525     evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL);
526     return label;
527 }
528
529 void MainUI::setEmptyGengrid(bool setEmpty)
530 {
531     if(setEmpty) {
532         elm_object_part_content_set(m_gengrid, "elm.swallow.empty", createNoHistoryLabel());
533     } else {
534         elm_object_part_content_set(m_gengrid, "elm.swallow.empty", nullptr);
535     }
536 }
537
538 void MainUI::focusItem(void* /*data*/, Evas_Object* /*obj*/, void* event_info)
539 {
540     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
541     Elm_Object_Item *item = reinterpret_cast<Elm_Object_Item*>(event_info);
542     elm_object_item_signal_emit( item, "mouse,in", "over2");
543
544     // selected manually
545     elm_gengrid_item_selected_set(item, EINA_TRUE);
546 }
547
548 void MainUI::unFocusItem(void* /*data*/, Evas_Object* /*obj*/, void* event_info)
549 {
550     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
551     Elm_Object_Item *item = reinterpret_cast<Elm_Object_Item*>(event_info);
552     elm_object_item_signal_emit( item, "mouse,out", "over2");
553
554     // unselected manually
555     elm_gengrid_item_selected_set(item, EINA_FALSE);
556 }
557
558 }
559 }