m_edjFilePath.append("TabUI/TabUI.edj");
elm_theme_extension_add(nullptr, m_edjFilePath.c_str());
createTabItemClass();
+ editMode = false;
}
TabUI::~TabUI()
elm_gengrid_align_set(m_gengrid, 0, 0);
elm_gengrid_select_mode_set(m_gengrid, ELM_OBJECT_SELECT_MODE_ALWAYS);
elm_gengrid_multi_select_set(m_gengrid, EINA_FALSE);
- elm_gengrid_horizontal_set(m_gengrid, EINA_FALSE);
+ elm_gengrid_horizontal_set(m_gengrid, EINA_TRUE);
elm_gengrid_highlight_mode_set(m_gengrid, EINA_TRUE);
- elm_scroller_policy_set(m_gengrid, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
+ elm_scroller_policy_set(m_gengrid, ELM_SCROLLER_POLICY_AUTO, ELM_SCROLLER_POLICY_OFF);
elm_scroller_page_size_set(m_gengrid, 0, 327);
evas_object_size_hint_weight_set(m_gengrid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
double efl_scale = elm_config_scale_get() / elm_app_base_scale_get();
elm_gengrid_item_size_set(m_gengrid, 364 * efl_scale, 320 * efl_scale);
+ evas_object_event_callback_add(m_gengrid, EVAS_CALLBACK_MOUSE_IN, _focus_in, this);
+
return tab_layout;
}
TabUI * tabUI = static_cast<TabUI*>(data);
tabUI->closeTabUIClicked(std::string());
tabUI->clearItems();
+ tabUI->editMode = false;
}
}
TabUI* tabUI = static_cast<TabUI*>(data);
tabUI->clearItems();
tabUI->newTabClicked(std::string());
+ tabUI->editMode = false;
}
}
TabUI* tabUI = static_cast<TabUI*>(data);
tabUI->clearItems();
tabUI->newIncognitoTabClicked(std::string());
+ tabUI->editMode = false;
}
}
-void TabUI::_closetabs_clicked(void* data, Evas_Object*, void*)
+void TabUI::_closetabs_clicked(void* data, Evas_Object* obj, void*)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
if (data) {
TabUI* tabUI = static_cast<TabUI*>(data);
- tabUI->closeTabsClicked(std::string());
+ if (!tabUI->editMode) {
+ tabUI->editMode = true;
+ BROWSER_LOGD("[%s:%d] --------> edit mode: %d ", __PRETTY_FUNCTION__, __LINE__, tabUI->editMode);
+ elm_layout_text_set(elm_layout_content_get(tabUI->m_tab_layout, "action_bar"), "closetabs_text", "Close all");
+ } else {
+ tabUI->closeAllTabs();
+ elm_gengrid_realized_items_update(tabUI->m_gengrid);
+ }
}
+
}
void TabUI::addTabItem(std::shared_ptr<tizen_browser::basic_webengine::TabContent> hi)
{
BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__);
- if (m_map_tab_views.size() >= 10)
- return;
TabItemData *itemData = new TabItemData();
itemData->item = hi;
itemData->tabUI = std::shared_ptr<tizen_browser::base_ui::TabUI>(this);
- Elm_Object_Item* tabView = elm_gengrid_item_append(m_gengrid, m_item_class, itemData, nullptr, this);
+ Elm_Object_Item* tabView = elm_gengrid_item_append(m_gengrid, m_item_class, itemData, _thumbSelected, itemData);
m_map_tab_views.insert(std::pair<std::string,Elm_Object_Item*>(hi->getTitle(),tabView));
// unselect by default
void TabUI::addTabItems(std::vector<std::shared_ptr<tizen_browser::basic_webengine::TabContent>>items)
{
BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__);
- //limiting number of added items to 10
- auto eit = std::min(items.end(), items.begin() + 10);
- for (auto it = items.begin(); it != eit; ++it) {
+ for (auto it = items.begin(); it < items.end(); it++) {
addTabItem(*it);
}
}
const char *part_name2 = "tab_thumbButton";
static const int part_name2_len = strlen(part_name2);
- if (!strncmp(part_name2, part, part_name2_len)) {
- Evas_Object *thumbButton = elm_button_add(obj);
- elm_object_style_set(thumbButton, "tab_thumbButton");
- evas_object_smart_callback_add(thumbButton, "clicked", tizen_browser::base_ui::TabUI::_thumbSelected, data);
- return thumbButton;
- }
if (!strncmp(part_name1, part, part_name1_len)) {
if (itemData->item->getThumbnail()) {
return tizen_browser::tools::EflTools::getEvasImage(itemData->item->getThumbnail(), itemData->tabUI->m_parent);
BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__);
if (data) {
TabItemData *itemData = static_cast<TabItemData*>(data);
- itemData->tabUI->clearItems();
- itemData->tabUI->tabClicked(itemData->item->getId());
+ if (!itemData->tabUI->editMode) {
+ itemData->tabUI->clearItems();
+ itemData->tabUI->tabClicked(itemData->item->getId());
+ } else {
+ itemData->tabUI->closeTabsClicked(itemData->item->getId());
+ Elm_Object_Item* it = elm_gengrid_selected_item_get(itemData->tabUI->m_gengrid);
+ elm_object_item_del(it);
+ elm_gengrid_realized_items_update(itemData->tabUI->m_gengrid);
+ }
}
}
return label;
}
+void TabUI::closeAllTabs()
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ Elm_Object_Item* it = elm_gengrid_first_item_get(m_gengrid);
+ while (it) {
+ TabItemData *item = (TabItemData *)elm_object_item_data_get(it);
+ item->tabUI->closeTabsClicked(item->item->getId());
+ it = elm_gengrid_item_next_get(it);
+ }
+ hide();
+}
+
void TabUI::setEmptyGengrid(bool setEmpty)
{
if (setEmpty) {
}
}
+void TabUI::_focus_in(void * data, Evas*, Evas_Object * obj, void * event_info)
+{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+ Evas_Event_Mouse_In* ee = (Evas_Event_Mouse_In*)event_info;
+ int x, y;
+ TabUI* tabUI = static_cast<TabUI*>(data);
+ Elm_Object_Item* it = elm_gengrid_at_xy_item_get(tabUI->m_gengrid, ee->canvas.x, ee->canvas.y, &x, &y);
+ if(it && tabUI->editMode)
+ elm_object_item_signal_emit(it, "selected", "over3");
+}
}
}
boost::signals2::signal<void (const tizen_browser::basic_webengine::TabId&)> tabClicked;
boost::signals2::signal<void (const std::string & )> newTabClicked;
boost::signals2::signal<void (const std::string & )> newIncognitoTabClicked;
- boost::signals2::signal<void (const std::string & )> closeTabsClicked;
+ boost::signals2::signal<void (const tizen_browser::basic_webengine::TabId&)> closeTabsClicked;
boost::signals2::signal<void (const std::string & )> openedTabsClicked;
boost::signals2::signal<void (const std::string & )> onOtherDevicesClicked;
boost::signals2::signal<void (const std::string & )> closeTabUIClicked;
static void _newincognitotab_clicked(void * data, Evas_Object * obj, void * event_info);
static void _closetabs_clicked(void * data, Evas_Object * obj, void * event_info);
static void _onotherdevices_clicked(void * data, Evas_Object * obj, void * event_info);
+ static void _focus_in(void * data, Evas*, Evas_Object * obj, void * event_info);
Evas_Object* createTabUILayout(Evas_Object* parent);
Evas_Object* createActionBar(Evas_Object* parent);
Evas_Object* createTopButtons(Evas_Object* parent);
Evas_Object* createNoHistoryLabel();
void createTabItemClass();
+ void closeAllTabs();
-private:
Evas_Object *m_tab_layout;
Evas_Object *m_gengrid;
Evas_Object *m_parent;
+ bool editMode;
Elm_Gengrid_Item_Class * m_item_class;
std::map<std::string,Elm_Object_Item*> m_map_tab_views;
}
parts {
part { name: "elm.swallow.content";
- type: RECT;
+ type: RECT;
mouse_events: 1;
repeat_events: 1;
description { state: "default" 0.0;
color: 0 0 0 0;
- visible: 1;
+ visible: 0;
rel1.relative: 0.0 0.0;
rel2.relative: 1.0 1.0;
align: 0.0 0.0;
//color: highlightTextColor;
}
}
+ part { name: "click_ok_to_close_text";
+ type: TEXT;
+ description { state: "default" 0.0;
+ color: 0 119 246 204;
+ min: 300 48;
+ max: 300 48;
+ align: 0 0.5;
+ rel1 {
+ to: "tab_thumbnail";
+ offset: 10 150;
+ relative: 0.0 0.0;
+ }
+ rel2 {
+ to: "tab_thumbnail";
+ relative: 1.0 1.0;
+ }
+ text {
+ text: "[OK] to close";
+ font: "Sans";
+ size: 20;
+ align: 0.5 0.8;
+ }
+ visible: 0;
+ }
+ description { state: "selected" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+
part { name: "tab_thumbButton";
- type: SWALLOW;
- description { state: "default" 0.0;
- rel1.to: "tab_thumbnail";
- rel2.to: "tab_thumbnail";
+ type: IMAGE;
+ mouse_events: 1;
+ repeat_events: 1;
+ description { state: "default" 0.0;
+ color: 0 119 246 204;
+ visible: 0;
+ rel1 {
+ to: "bg";
+ offset: 274 14;
+ relative: 0.0 0.0;
+ }
+ rel2 {
+ to: "bg";
+ offset: 324 64;
+ relative: 0.0 0.0;
+ }
+ align: 0.0 0.0;
+ image.normal: "ico_delete.png";
+ }
+ description { state: "selected";
+ inherit: "default" 0.0;
+ visible: 1;
+ }
}
- }
part { name: "over2";
type: RECT;
repeat_events: 1;
description { state: "default" 0.0;
color: 0 0 0 0;
- rel1.to: "background";
+ rel1.to: "bg";
rel2.to: "background";
}
}
target: "background";
target: "focus_highlight";
target: "bg";
+ target: "tab_thumbButton";
+ target: "click_ok_to_close_text";
+ }
+ program { name: "close_icon_show";
+ signal: "selected";
+ source: "over3";
+ action: STATE_SET "selected" 0.0;
+ target: "tab_thumbButton";
+ target: "click_ok_to_close_text";
}
}
}
visible: 1;
}
}
- part{
+ part {
name: "closetabs_text";
type: TEXT;
scale: 1;
rel2 { relative: 1.0 1.0;to: "closetabs_button";}
color: 0 0 0 255;
text {
- text: "Close all";
+ text: "Close Tabs";
font: "Sans";
size: 27;
align: 0.5 0.5;
action: STATE_SET "highlight" 0.0;
target: "closetabs_button";
target: "closetabs_over";
- target: "closetabs_text";
}
program {
name: "mouse_out_closetabs_click";
action: STATE_SET "default" 0.0;
target: "closetabs_button";
target: "closetabs_over";
- target: "closetabs_text";
}
program {
name: "mouse_in_close_click";