#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"
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
*/
/**
* @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
visible: 1;
}
description {
+ state: "dimmed" 0.0;
+ inherit: "blank" 0.0;
+ }
+ description {
state: "checked" 0.0;
inherit: "default" 0.0;
//color_class: "ATO005";
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;
color: 255 255 255 255;
visible: 1;
}
+ description {
+ state: "dimmed" 0.0;
+ inherit: "checked" 0.0;
+ }
}
part { //checkbox_click_area
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;
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";
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) :
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:
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;
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);
}
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();
}
.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);
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)
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;
}