Refactor SettingsUI 37/47237/4
authorDariusz Frankiewicz <d.frankiewic@samsung.com>
Mon, 31 Aug 2015 07:13:00 +0000 (09:13 +0200)
committerJanusz Majnert <j.majnert@samsung.com>
Thu, 3 Sep 2015 12:17:57 +0000 (05:17 -0700)
[Issue#]   https://bugs.tizen.org/jira/browse/TT-153
[Problem]  Check boxes in settings menu can't be clicked.
[Cause]    Invisible platform rectangle covers this screen area.
[Solution] Refactoring settings UI code by replacing unneded genlist,
           with layout inside scrooler. Also added possibility to click
           check box labels as a complementary fix for platform issue
           with invisible rectangle.
[Verify]   Open More menu -> Settings and check if check boxes: Cache,
           Cookies and History can be changed by clicking their labels.

Change-Id: I49e2ea04054cb1efdecd3fed02d26914b1ecac48
Signed-off-by: Dariusz Frankiewicz <d.frankiewic@samsung.com>
services/SettingsUI/SettingsUI.cpp
services/SettingsUI/SettingsUI.h
services/SettingsUI/edc/Settings.edc

index 9b897a2..2b68784 100644 (file)
@@ -43,6 +43,8 @@ SettingsUI::SettingsUI()
     , m_itemClassActionBar(nullptr)
     , m_parent(nullptr)
     , m_item_class(nullptr)
+    , m_scroller(nullptr)
+    , m_items_layout(nullptr)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     m_edjFilePath = EDJE_DIR;
@@ -65,7 +67,7 @@ void SettingsUI::show(Evas_Object* parent)
     evas_object_show(m_settings_layout);
 
     showActionBar();
-    showSettingsGenlist();
+    showSettingsPage();
 }
 
 void SettingsUI::showActionBar()
@@ -98,45 +100,91 @@ void SettingsUI::showActionBar()
                                                        nullptr,
                                                        nullptr                //data passed to above function
                                                       );
-    id->e_item = elmItem; 
+    id->e_item = elmItem;
 
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
 }
 
-void SettingsUI::showSettingsGenlist()
+void SettingsUI::showSettingsPage()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    elm_theme_extension_add(nullptr, m_edjFilePath.c_str());
-    m_genList = elm_genlist_add(m_settings_layout);
-    elm_object_part_content_set(m_settings_layout, "settings_genlist_swallow", m_genList);
-    elm_genlist_homogeneous_set(m_genList, EINA_FALSE);
-    elm_genlist_multi_select_set(m_genList, EINA_FALSE);
-    elm_genlist_select_mode_set(m_genList, ELM_OBJECT_SELECT_MODE_ALWAYS);
-    elm_genlist_mode_set(m_genList, ELM_LIST_SCROLL);
-    elm_genlist_decorate_mode_set(m_genList, EINA_TRUE);
-    evas_object_size_hint_weight_set(m_genList, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-    elm_scroller_policy_set(m_genList, ELM_SCROLLER_POLICY_ON, ELM_SCROLLER_POLICY_AUTO);
-
-    m_item_class = elm_genlist_item_class_new();
-    m_item_class->item_style = "settings_items";
-    m_item_class->func.text_get = nullptr;
-    m_item_class->func.content_get = &listSettingsGenlistContentGet;
-    m_item_class->func.state_get = nullptr;
-    m_item_class->func.del = nullptr;
 
     ItemData *id = new ItemData;
     id->settingsUI = this;
-    Elm_Object_Item *elmItem = elm_genlist_item_append(m_genList,             //genlist
-                                                       m_item_class,          //item Class
-                                                       id,
-                                                       nullptr,               //parent item
-                                                       ELM_GENLIST_ITEM_NONE, //item type
-                                                       nullptr,
-                                                       nullptr                //data passed to above function
-                                                      );
-    id->e_item = elmItem;
 
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    m_scroller = elm_scroller_add(m_settings_layout);
+    m_items_layout = elm_layout_add(m_scroller);
+    elm_object_content_set(m_scroller, m_items_layout);
+    elm_layout_file_set(m_items_layout, m_edjFilePath.c_str(), "settings_items");
+    elm_object_part_content_set(m_settings_layout, "settings_scroller_swallow", m_scroller);
+    evas_object_size_hint_weight_set(m_scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+    evas_object_size_hint_align_set(m_scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
+    elm_scroller_policy_set(m_items_layout, ELM_SCROLLER_POLICY_ON, ELM_SCROLLER_POLICY_AUTO);
+    elm_scroller_bounce_set(m_scroller, EINA_TRUE, EINA_FALSE);
+    elm_scroller_propagate_events_set(m_scroller, EINA_TRUE);
+    evas_object_show(m_scroller);
+    evas_object_show(m_items_layout);
+
+    Evas_Object *del_selected_data_button = elm_button_add(m_items_layout);
+    elm_object_style_set(del_selected_data_button, "basic_button");
+    evas_object_smart_callback_add(del_selected_data_button, "clicked", _del_selected_data_clicked_cb, (void*)id);
+    elm_layout_content_set(m_items_layout, "del_selected_data_click", del_selected_data_button);
+
+    Evas_Object *reset_mv_button = elm_button_add(m_items_layout);
+    elm_object_style_set(reset_mv_button, "basic_button");
+    evas_object_smart_callback_add(reset_mv_button, "clicked", _reset_mv_clicked_cb, (void*)id);
+    elm_layout_content_set(m_items_layout, "reset_mv_click", reset_mv_button);
+
+    Evas_Object *reset_browser_button = elm_button_add(m_items_layout);
+    elm_object_style_set(reset_browser_button, "basic_button");
+    evas_object_smart_callback_add(reset_browser_button, "clicked", _reset_browser_clicked_cb, (void*)id);
+    elm_layout_content_set(m_items_layout, "reset_browser_click", reset_browser_button);
+
+
+    Evas_Object *cache_checkbox = elm_check_add(m_items_layout);
+    elm_layout_content_set(m_items_layout, "cache_cb", cache_checkbox);
+    elm_check_state_set(cache_checkbox, EINA_TRUE);
+    edje_object_signal_callback_add(elm_layout_edje_get(m_items_layout), "mouse,clicked,1", "cache_cb_text", __checkbox_label_click_cb, (void*)id);
+
+    Evas_Object *cookies_checkbox = elm_check_add(m_items_layout);
+    elm_layout_content_set(m_items_layout, "cookies_cb", cookies_checkbox);
+    elm_check_state_set(cookies_checkbox, EINA_TRUE);
+    edje_object_signal_callback_add(elm_layout_edje_get(m_items_layout), "mouse,clicked,1", "cookies_cb_text", __checkbox_label_click_cb, (void*)id);
+
+    Evas_Object *history_checkbox = elm_check_add(m_items_layout);
+    elm_layout_content_set(m_items_layout, "history_cb", history_checkbox);
+    elm_check_state_set(history_checkbox, EINA_TRUE);
+    edje_object_signal_callback_add(elm_layout_edje_get(m_items_layout), "mouse,clicked,1", "history_cb_text", __checkbox_label_click_cb, (void*)id);
+
+
+    Evas_Object *accept_all_rb = elm_radio_add(m_items_layout);
+    elm_object_style_set(accept_all_rb, "settings_radio");
+    elm_layout_content_set(m_items_layout, "accept_all_rb", accept_all_rb);
+
+    Evas_Object *ask_rb = elm_radio_add(m_items_layout);
+    elm_object_style_set(ask_rb, "settings_radio");
+    elm_layout_content_set(m_items_layout, "ask_rb", ask_rb);
+
+    Evas_Object *sr_disable_rb = elm_radio_add(m_items_layout);
+    elm_object_style_set(sr_disable_rb, "settings_radio");
+    elm_layout_content_set(m_items_layout, "sr_disable_rb", sr_disable_rb);
+
+    Evas_Object *bs_enable_rb = elm_radio_add(m_items_layout);
+    elm_object_style_set(bs_enable_rb, "settings_radio");
+    elm_layout_content_set(m_items_layout, "bs_enable_rb", bs_enable_rb);
+
+    Evas_Object *bs_disable_rb = elm_radio_add(m_items_layout);
+    elm_object_style_set(bs_disable_rb, "settings_radio");
+    elm_layout_content_set(m_items_layout, "bs_disable_rb", bs_disable_rb);
+
+    Evas_Object *ts_enable_rb = elm_radio_add(m_items_layout);
+    elm_object_style_set(ts_enable_rb, "settings_radio");
+    elm_layout_content_set(m_items_layout, "ts_enable_rb", ts_enable_rb);
+
+    Evas_Object *ts_disable_rb = elm_radio_add(m_items_layout);
+    elm_object_style_set(ts_disable_rb, "settings_radio");
+    elm_layout_content_set(m_items_layout, "ts_disable_rb", ts_disable_rb);
+
 }
 
 Evas_Object* SettingsUI::listActionBarContentGet(void* data, Evas_Object* obj , const char* part)
@@ -155,88 +203,28 @@ Evas_Object* SettingsUI::listActionBarContentGet(void* data, Evas_Object* obj ,
     return nullptr;
 }
 
-Evas_Object* SettingsUI::listSettingsGenlistContentGet(void* data, Evas_Object* obj , const char* part)
+void SettingsUI::__checkbox_label_click_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
 {
-    BROWSER_LOGD("[%s:%d] Part %s", __PRETTY_FUNCTION__, __LINE__, part);
-    if (obj && part) {
-        const char * part_name1  = "del_selected_data_click";
-        static const int part_name1_len = strlen(part_name1);
-        if (!strncmp(part_name1, part, part_name1_len)) {
-            Evas_Object *button = elm_button_add(obj);
-            elm_object_style_set(button, "basic_button");
-            evas_object_smart_callback_add(button, "clicked", SettingsUI::_del_selected_data_clicked_cb, data);
-            return button;
-        }
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    if (data) {
+        ItemData *id = static_cast<ItemData*>(data);
 
-        const char * part_name2  = "reset_mv_click";
-        static const int part_name2_len = strlen(part_name2);
-        if (!strncmp(part_name2, part, part_name2_len)) {
-            Evas_Object *button = elm_button_add(obj);
-            elm_object_style_set(button, "basic_button");
-            evas_object_smart_callback_add(button, "clicked", SettingsUI::_reset_mv_clicked_cb, data);
-            return button;
+        if(strcmp(source, "cache_cb_text") == 0 ){
+            Evas_Object *cache_check = elm_layout_content_get(id->settingsUI->m_items_layout, "cache_cb");
+            elm_check_state_set(cache_check, !elm_check_state_get(cache_check));
         }
-
-        const char * part_name3  = "reset_browser_click";
-        static const int part_name3_len = strlen(part_name3);
-        if (!strncmp(part_name3, part, part_name3_len)) {
-            Evas_Object *button = elm_button_add(obj);
-            elm_object_style_set(button, "basic_button");
-            evas_object_smart_callback_add(button, "clicked", SettingsUI::_reset_browser_clicked_cb, data);
-            return button;
+        else if (strcmp(source, "cookies_cb_text") == 0 ){
+            Evas_Object *cookies_check = elm_layout_content_get(id->settingsUI->m_items_layout, "cookies_cb");
+            elm_check_state_set(cookies_check, !elm_check_state_get(cookies_check));
         }
-
-        const char * part_name4  = "cache_cb";
-        static const int part_name4_len = strlen(part_name4);
-        const char * part_name5  = "cookies_cb";
-        static const int part_name5_len = strlen(part_name5);
-        const char * part_name6  = "history_cb";
-        static const int part_name6_len = strlen(part_name6);
-        if (!strncmp(part_name4, part, part_name4_len) ||
-            !strncmp(part_name5, part, part_name5_len) ||
-            !strncmp(part_name6, part, part_name6_len))
-        {
-            Evas_Object *checkbox = elm_check_add(obj);
-            elm_object_style_set(checkbox, "on&off");
-            evas_object_smart_callback_add(checkbox, "changed", __check_changed_cb, data);
-            elm_check_state_set(checkbox, EINA_TRUE);
-            return checkbox;
+        else if (strcmp(source, "history_cb_text") == 0 ){
+            Evas_Object *history_check = elm_layout_content_get(id->settingsUI->m_items_layout, "history_cb");
+            elm_check_state_set(history_check, !elm_check_state_get(history_check));
         }
-
-        const char * part_name7  = "accept_all_rb";
-        static const int part_name7_len = strlen(part_name7);
-        const char * part_name8  = "ask_rb";
-        static const int part_name8_len = strlen(part_name8);
-        const char * part_name9  = "sr_disable_rb";
-        static const int part_name9_len = strlen(part_name9);
-        const char * part_name10 = "bs_enable_rb";
-        static const int part_name10_len = strlen(part_name10);
-        const char * part_name11 = "bs_disable_rb";
-        static const int part_name11_len = strlen(part_name11);
-        const char * part_name12 = "ts_enable_rb";
-        static const int part_name12_len = strlen(part_name12);
-        const char * part_name13 = "ts_disable_rb";
-        static const int part_name13_len = strlen(part_name13);
-        if (!strncmp(part_name7, part, part_name7_len) ||
-            !strncmp(part_name8, part, part_name8_len) ||
-            !strncmp(part_name9, part, part_name9_len) ||
-            !strncmp(part_name10, part, part_name10_len) ||
-            !strncmp(part_name11, part, part_name11_len) ||
-            !strncmp(part_name12, part, part_name12_len) ||
-            !strncmp(part_name13, part, part_name13_len))
-        {
-            Evas_Object *rb = elm_radio_add(obj);
-            elm_object_style_set(rb, "on&off");
-            //evas_object_smart_callback_add(rb, "changed", __radio_changed_cb, data);
-            return rb;
+        else{
+            BROWSER_LOGD("[%s:%d] - no matched source", __PRETTY_FUNCTION__, __LINE__);
         }
     }
-    return nullptr;
-}
-
-void SettingsUI::__check_changed_cb(void*, Evas_Object*, void*)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
 }
 
 void SettingsUI::close_clicked_cb(void* data, Evas_Object*, void*)
@@ -252,7 +240,7 @@ void SettingsUI::close_clicked_cb(void* data, Evas_Object*, void*)
 void SettingsUI::hide()
 {
     evas_object_hide(elm_layout_content_get(m_settings_layout, "action_bar_swallow"));
-    evas_object_hide(elm_layout_content_get(m_settings_layout, "settings_genlist_swallow"));
+    evas_object_hide(elm_layout_content_get(m_settings_layout, "settings_scroller_swallow"));
     evas_object_hide(m_settings_layout);
 }
 
@@ -260,15 +248,15 @@ void SettingsUI::_del_selected_data_clicked_cb(void *data, Evas_Object*, void*)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     if (data) {
-        ItemData *itemData = static_cast<ItemData*>(data);
-        Evas_Object *cb1 = elm_object_item_part_content_get(itemData->e_item, "cache_cb");
-        Evas_Object *cb2 = elm_object_item_part_content_get(itemData->e_item, "cookies_cb");
-        Evas_Object *cb3 = elm_object_item_part_content_get(itemData->e_item, "history_cb");
+        ItemData *id = static_cast<ItemData*>(data);
+        Evas_Object *cache_check = elm_layout_content_get(id->settingsUI->m_items_layout, "cache_cb");
+        Evas_Object *cookies_check = elm_layout_content_get(id->settingsUI->m_items_layout, "cookies_cb");
+        Evas_Object *history_check = elm_layout_content_get(id->settingsUI->m_items_layout, "history_cb");
         std::string type;
-        elm_check_state_get(cb1) ? type += "_CACHE" : "";
-        elm_check_state_get(cb2) ? type += "_COOKIES" : "";
-        elm_check_state_get(cb3) ? type += "_HISTORY" : "";
-        itemData->settingsUI->deleteSelectedDataClicked(type);
+        elm_check_state_get(cache_check) ? type += "_CACHE" : "";
+        elm_check_state_get(cookies_check) ? type += "_COOKIES" : "";
+        elm_check_state_get(history_check) ? type += "_HISTORY" : "";
+        id->settingsUI->deleteSelectedDataClicked(type);
     }
 }
 
@@ -295,7 +283,6 @@ void SettingsUI::clearItems()
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     hide();
     elm_genlist_clear(m_genListActionBar);
-    elm_genlist_clear(m_genList);
 }
 
 }
index c7e8e9f..8adbf4d 100644 (file)
@@ -38,7 +38,7 @@ public:
     void show(Evas_Object *main_layout);
     virtual std::string getName();
     void showActionBar();
-    void showSettingsGenlist();
+    void showSettingsPage();
     void clearItems();
     void hide();
 
@@ -55,7 +55,7 @@ private:
     static Evas_Object * _tab_grid_content_get(void *data, Evas_Object *obj, const char *part);
     static void _itemSelected(void * data, Evas_Object * obj, void * event_info);
     static void close_clicked_cb(void *data, Evas_Object *obj, void *event_info);
-    static void __check_changed_cb(void *data, Evas_Object *obj, void *event_info);
+    static void __checkbox_label_click_cb(void *data, Evas_Object *obj, const char *emission, const char *source);
 
     static void _del_selected_data_clicked_cb(void * data, Evas_Object * obj, void * event_info);
     static void _reset_mv_clicked_cb(void * data, Evas_Object * obj, void * event_info);
@@ -66,12 +66,14 @@ private:
 private:
     Evas_Object *m_settings_layout;
     Evas_Object *m_genListActionBar;
-    Evas_Object *m_genList;
+    Evas_Object *m_scroller;
+    Evas_Object *m_items_layout;
     Elm_Genlist_Item_Class *m_itemClassActionBar;
     Evas_Object *m_parent;
-    
+
     Elm_Gengrid_Item_Class * m_item_class;
     std::string m_edjFilePath;
+
 };
 
 }
index 76e5dc2..603c8d0 100644 (file)
@@ -161,7 +161,7 @@ group { name: "settings-layout";
                     rel2 { relative: 1.0 1.0; }
                 }
              }
-          part { name: "settings_genlist_swallow";
+          part { name: "settings_scroller_swallow";
                 type: SWALLOW;
                 description { state: "default" 0.0;
                align: 0.0 0.0;
@@ -179,7 +179,7 @@ group { name: "settings-layout";
     }
 }
 
-group { name: "elm/genlist/item/settings_items/default";
+group { name: "settings_items";
        data.item: "contents" "del_selected_data_click reset_mv_click reset_browser_click cache_cb cookies_cb history_cb accept_all_rb ask_rb sr_disable_rb bs_enable_rb bs_disable_rb ts_enable_rb ts_disable_rb";
        images {
                image: "web_frame_selected.png" COMP;