From: Kamil Lipiszko Date: Mon, 11 Apr 2016 08:31:27 +0000 (+0200) Subject: app_icon: Do not show checkbox on folder icon X-Git-Tag: accepted/tizen/common/20160414.143125~3 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c6a5ea2c9d46761b65ffd3fac5fdc7df616df426;p=apps%2Fnative%2Fhome%2Fhomescreen-efl.git app_icon: Do not show checkbox on folder icon On all apps choose view do not show folder checkbox. It is shown now only after at least one of the icons inside the folder is checked. Change-Id: Ia792c21d09dbc1d78838cb78d5400c30acdae331 --- diff --git a/inc/conf.h b/inc/conf.h index 9e1c758..2efe836 100644 --- a/inc/conf.h +++ b/inc/conf.h @@ -438,6 +438,7 @@ #define SIGNAL_UNINSTALL_BUTTON_CLICKED "uninstall_button,clicked" #define SIGNAL_CHECKBOX_SHOW_UNCHECKED "checkbox,show,unchecked" #define SIGNAL_CHECKBOX_SHOW_CHECKED "checkbox,show,checked" +#define SIGNAL_CHECKBOX_SHOW_DIMMED "checkbox,show,dimmed" #define SIGNAL_CHECKBOX_HIDE "checkbox,hide" #define SIGNAL_CHECKBOX_CHECKED "checkbox,checked" #define SIGNAL_CHECKBOX_UNCHECKED "checkbox,unchecked" diff --git a/inc/folder_panel.h b/inc/folder_panel.h index 8d7a3fc..ab8450a 100644 --- a/inc/folder_panel.h +++ b/inc/folder_panel.h @@ -28,6 +28,12 @@ typedef struct { Evas_Object *folder_scroller; } folder_data_t; +typedef enum { + FOLDER_PANEL_CHECKED_NONE = 0, + FOLDER_PANEL_CHECKED_ANY, + FOLDER_PANEL_CHECKED_ALL, +} folder_checked_t; + /** * @brief Initializes folder module */ @@ -91,7 +97,7 @@ extern bool folder_panel_is_folder_visible(void); /** * @brief Shows checkboxes on the folder icon. */ -extern bool folder_panel_set_content_checked(Tree_node_t *node); +extern folder_checked_t folder_panel_set_content_checked(Tree_node_t *node); /** * @brief Function returns pointer to data node of the opened folder diff --git a/res/edje/icon.edc b/res/edje/icon.edc index 85653e2..27e155c 100644 --- a/res/edje/icon.edc +++ b/res/edje/icon.edc @@ -275,6 +275,10 @@ collections { visible: 1; } description { + state: "dimmed" 0.0; + inherit: "blank" 0.0; + } + description { state: "checked" 0.0; inherit: "default" 0.0; //color_class: "ATO005"; @@ -306,6 +310,10 @@ collections { visible: 1; } description { + state: "dimmed" 0.0; + inherit: "blank" 0.0; + } + description { state: "checked" 0.0; inherit: "default" 0.0; color: 255 255 255 120; @@ -341,6 +349,10 @@ collections { color: 255 255 255 255; visible: 1; } + description { + state: "dimmed" 0.0; + inherit: "checked" 0.0; + } } part { //checkbox_click_area @@ -491,6 +503,16 @@ collections { after: "checkbox_area_visible"; } program { + name: "checkbox_show_dimmed"; + signal: SIGNAL_CHECKBOX_SHOW_DIMMED; + source: SIGNAL_SOURCE; + script { + set_int(checkbox_state, 1); + emit("checkbox,dimmed,show", SIGNAL_SOURCE); + } + after: "checkbox_area_visible"; + } + program { name: "checkbox_blank_show"; signal: "checkbox,blank,show"; source: SIGNAL_SOURCE; @@ -521,6 +543,16 @@ collections { transition: DECELERATE 0.20; } program { + name: "checkbox_dimmed_show"; + signal: "checkbox,dimmed,show"; + source: SIGNAL_SOURCE; + action: STATE_SET "dimmed" 0.0; + target: "icon_checkbox"; + target: "icon_checkbox_border"; + target: "icon_checkbox_bg"; + transition: DECELERATE 0.20; + } + program { name: "checkbox_clicked"; signal: "mouse,clicked,1"; source: "checkbox_click_area"; diff --git a/src/app_icon.c b/src/app_icon.c index a35c840..2c3bb41 100644 --- a/src/app_icon.c +++ b/src/app_icon.c @@ -279,6 +279,8 @@ HAPI void app_icon_set_click_ignore(bool ignore) HAPI bool app_icon_set_view_mode(Evas_Object *icon, homescreen_view_t view, bool in_folder) { + Tree_node_t *node = NULL; + switch (view) { case HOMESCREEN_VIEW_ALL_APPS: in_folder ? elm_object_signal_emit(icon, SIGNAL_EDIT_MODE_BLACK_OFF, SIGNAL_SOURCE) : @@ -298,7 +300,13 @@ HAPI bool app_icon_set_view_mode(Evas_Object *icon, homescreen_view_t view, bool in_folder ? elm_object_signal_emit(icon, SIGNAL_EDIT_MODE_BLACK_ON, SIGNAL_SOURCE) : elm_object_signal_emit(icon, SIGNAL_EDIT_MODE_ON, SIGNAL_SOURCE); elm_object_signal_emit(icon, SIGNAL_UNINSTALL_BUTTON_HIDE, SIGNAL_SOURCE); - elm_object_signal_emit(icon, SIGNAL_CHECKBOX_SHOW_UNCHECKED, SIGNAL_SOURCE); + + node = evas_object_data_get(icon, KEY_ICON_DATA); + if (node && node->data->type != APP_ITEM_FOLDER) + elm_object_signal_emit(icon, SIGNAL_CHECKBOX_SHOW_UNCHECKED, SIGNAL_SOURCE); + else + elm_object_signal_emit(icon, SIGNAL_CHECKBOX_HIDE, SIGNAL_SOURCE); + app_icon_set_click_ignore(true); break; case HOMESCREEN_VIEW_HOME: @@ -514,6 +522,7 @@ static bool __app_icon_check_removeable_state(Evas_Object *icon) static void __app_icon_check_cb(void *data, Evas_Object *obj, const char *emission, const char *source) { + folder_checked_t check_info = FOLDER_PANEL_CHECKED_NONE; Tree_node_t *node = (Tree_node_t *)data; app_item_t *item = node->data; int count = -1; @@ -521,8 +530,22 @@ static void __app_icon_check_cb(void *data, Evas_Object *obj, const char *emissi if (item->type == APP_ITEM_ICON) { item->is_checked = true; - if (node->parent->parent->data->type == APP_ITEM_FOLDER && folder_panel_set_content_checked(node->parent->parent)) - elm_object_signal_emit(node->parent->parent->data->layout, SIGNAL_CHECKBOX_SHOW_CHECKED, SIGNAL_SOURCE); + if (node->parent->parent->data->type == APP_ITEM_FOLDER) { + + check_info = folder_panel_set_content_checked(node->parent->parent); + + switch (check_info) { + case FOLDER_PANEL_CHECKED_NONE: + elm_object_signal_emit(node->parent->parent->data->layout, SIGNAL_CHECKBOX_HIDE, SIGNAL_SOURCE); + break; + case FOLDER_PANEL_CHECKED_ANY: + elm_object_signal_emit(node->parent->parent->data->layout, SIGNAL_CHECKBOX_SHOW_DIMMED, SIGNAL_SOURCE); + break; + case FOLDER_PANEL_CHECKED_ALL: + elm_object_signal_emit(node->parent->parent->data->layout, SIGNAL_CHECKBOX_SHOW_CHECKED, SIGNAL_SOURCE); + break; + } + } } else if (item->type == APP_ITEM_FOLDER) { data_model_check_all_apps(node, true); } @@ -556,14 +579,32 @@ static void __app_icon_check_cb(void *data, Evas_Object *obj, const char *emissi static void __app_icon_uncheck_cb(void *data, Evas_Object *obj, const char *emission, const char *source) { + folder_checked_t check_info = FOLDER_PANEL_CHECKED_NONE; + Tree_node_t *node = (Tree_node_t *)data; app_item_t *item = node->data; if (item->type == APP_ITEM_ICON) { item->is_checked = false; - if (node->parent->parent->data->type == APP_ITEM_FOLDER && !folder_panel_set_content_checked(node->parent->parent)) - elm_object_signal_emit(node->parent->parent->data->layout, SIGNAL_CHECKBOX_SHOW_UNCHECKED, SIGNAL_SOURCE); + + if (node->parent->parent->data->type == APP_ITEM_FOLDER) { + + check_info = folder_panel_set_content_checked(node->parent->parent); + + switch (check_info) { + case FOLDER_PANEL_CHECKED_NONE: + elm_object_signal_emit(node->parent->parent->data->layout, SIGNAL_CHECKBOX_HIDE, SIGNAL_SOURCE); + break; + case FOLDER_PANEL_CHECKED_ANY: + elm_object_signal_emit(node->parent->parent->data->layout, SIGNAL_CHECKBOX_SHOW_DIMMED, SIGNAL_SOURCE); + break; + case FOLDER_PANEL_CHECKED_ALL: + elm_object_signal_emit(node->parent->parent->data->layout, SIGNAL_CHECKBOX_SHOW_CHECKED, SIGNAL_SOURCE); + break; + } + } } else if (item->type == APP_ITEM_FOLDER) { data_model_check_all_apps(node, false); + elm_object_signal_emit(item->layout, SIGNAL_CHECKBOX_HIDE, SIGNAL_SOURCE); } option_menu_update_on_item_selected(); } diff --git a/src/folder_panel.c b/src/folder_panel.c index 25251f3..40bd9af 100644 --- a/src/folder_panel.c +++ b/src/folder_panel.c @@ -55,6 +55,10 @@ static struct .opened_folder_entrychange_cb_ignore = true }; +typedef struct { + bool all_checked; + bool any_checked; +} check_info_s; static void __folder_panel_create_folder_window_layout_cb(void *data, Evas_Object *obj, const char *emission, const char *source); static void __folder_window_destroy_signal_cb(void *data, Evas_Object *obj, const char *emission, const char *source); @@ -202,11 +206,28 @@ HAPI bool folder_panel_is_folder_visible(void) return s_info.is_opened; } -HAPI bool folder_panel_set_content_checked(Tree_node_t *node) +HAPI folder_checked_t folder_panel_set_content_checked(Tree_node_t *node) { - bool all_checked = true; - tree_in_depth_browse(node, __folder_panel_get_checked_icons, &all_checked); - return all_checked; + LOGD(""); + check_info_s check_info = { + .all_checked = true, + .any_checked = false + }; + + tree_in_depth_browse(node, __folder_panel_get_checked_icons, &check_info); + + if (check_info.all_checked) { + LOGD("All items checked"); + return FOLDER_PANEL_CHECKED_ALL; + } + else if (check_info.any_checked) { + LOGD("Any item checked"); + return FOLDER_PANEL_CHECKED_ANY; + } + else { + LOGD("None items checked"); + return FOLDER_PANEL_CHECKED_NONE; + } } HAPI Tree_node_t *folder_panel_get_opened_folder_node(void) @@ -545,10 +566,13 @@ static bool __folder_panel_show_checkbox(Tree_node_t *parent, Tree_node_t *leaf, static bool __folder_panel_get_checked_icons(Tree_node_t *parent, Tree_node_t *leaf, void *data) { - if (leaf->data->type == APP_ITEM_ICON && !leaf->data->is_checked) { - *(bool *)data = false; - return false; + check_info_s *check_info = data; + + if (leaf->data->type == APP_ITEM_ICON) { + check_info->all_checked = check_info->all_checked && leaf->data->is_checked; + check_info->any_checked = check_info->any_checked || leaf->data->is_checked; } + return true; }