forked from enlightenment/enventor
edc_navigator: 3rd patchset.
optimizing + stablizing functions.
This commit is contained in:
parent
bb09392d12
commit
647dbde8ca
|
@ -6,7 +6,8 @@ typedef struct base_s
|
|||
Evas_Object *layout;
|
||||
Evas_Object *console;
|
||||
Evas_Object *enventor;
|
||||
Ecore_Timer *edc_navigator_timer;
|
||||
Ecore_Timer *edc_navi_update_timer;
|
||||
Ecore_Timer *edc_navi_reload_timer;
|
||||
Eina_Bool console_msg : 1;
|
||||
} base_data;
|
||||
|
||||
|
@ -32,6 +33,18 @@ win_resize_cb(void *data EINA_UNUSED, Evas *o EINA_UNUSED, Evas_Object *obj,
|
|||
config_win_size_set(w, h);
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
edc_navigator_reload_timer_cb(void *data)
|
||||
{
|
||||
base_data *bd = data;
|
||||
|
||||
edc_navigator_reload(stats_group_name_get());
|
||||
|
||||
bd->edc_navi_reload_timer = NULL;
|
||||
|
||||
return ECORE_CALLBACK_CANCEL;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
edc_navigator_update_timer_cb(void *data)
|
||||
{
|
||||
|
@ -40,7 +53,7 @@ edc_navigator_update_timer_cb(void *data)
|
|||
const char *group_name = data;
|
||||
edc_navigator_group_update(group_name);
|
||||
|
||||
bd->edc_navigator_timer = NULL;
|
||||
bd->edc_navi_update_timer = NULL;
|
||||
|
||||
return ECORE_CALLBACK_CANCEL;
|
||||
}
|
||||
|
@ -92,7 +105,10 @@ void base_edc_navigator_toggle(Eina_Bool toggle)
|
|||
if (toggle) config_edc_navigator_set(!config_edc_navigator_get());
|
||||
|
||||
if (config_edc_navigator_get())
|
||||
elm_object_signal_emit(bd->layout, "elm,state,edc_navigator,show", "");
|
||||
{
|
||||
base_edc_navigator_reload();
|
||||
elm_object_signal_emit(bd->layout, "elm,state,edc_navigator,show", "");
|
||||
}
|
||||
else
|
||||
elm_object_signal_emit(bd->layout, "elm,state,edc_navigator,hide", "");
|
||||
}
|
||||
|
@ -211,7 +227,8 @@ base_gui_term(void)
|
|||
base_data *bd = g_bd;
|
||||
if (!bd) return;
|
||||
|
||||
ecore_timer_del(bd->edc_navigator_timer);
|
||||
ecore_timer_del(bd->edc_navi_update_timer);
|
||||
ecore_timer_del(bd->edc_navi_reload_timer);
|
||||
edc_navigator_term();
|
||||
panes_term();
|
||||
|
||||
|
@ -222,18 +239,29 @@ base_gui_term(void)
|
|||
void
|
||||
base_edc_navigator_group_update(const char *group_name)
|
||||
{
|
||||
if (!config_edc_navigator_get()) return;
|
||||
|
||||
base_data *bd = g_bd;
|
||||
if (!bd) return;
|
||||
|
||||
ecore_timer_del(bd->edc_navigator_timer);
|
||||
bd->edc_navigator_timer = ecore_timer_add(1, edc_navigator_update_timer_cb,
|
||||
ecore_timer_del(bd->edc_navi_update_timer);
|
||||
bd->edc_navi_update_timer = ecore_timer_add(EDC_NAVIGATOR_UPDATE_TIME,
|
||||
edc_navigator_update_timer_cb,
|
||||
group_name);
|
||||
}
|
||||
|
||||
void
|
||||
base_edc_navigator_reload(void)
|
||||
{
|
||||
edc_navigator_reload();
|
||||
if (!config_edc_navigator_get()) return;
|
||||
|
||||
base_data *bd = g_bd;
|
||||
if (!bd) return;
|
||||
|
||||
ecore_timer_del(bd->edc_navi_reload_timer);
|
||||
bd->edc_navi_reload_timer = ecore_timer_add(EDC_NAVIGATOR_UPDATE_TIME,
|
||||
edc_navigator_reload_timer_cb,
|
||||
bd);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -7,14 +7,18 @@ typedef struct edc_navigator_s
|
|||
Eina_List *group_items; //group object item
|
||||
Eina_List *part_items; //part object item
|
||||
Eina_List *state_items; //state object item
|
||||
Eina_List *program_items; //program object item
|
||||
|
||||
Eina_List *group_list; //group name list
|
||||
Eina_List *part_list; //part name list
|
||||
Eina_List *state_list; //state name list
|
||||
Eina_List *program_list; //program name list
|
||||
|
||||
Elm_Genlist_Item_Class *group_itc;
|
||||
Elm_Genlist_Item_Class *part_itc;
|
||||
Elm_Genlist_Item_Class *state_itc;
|
||||
Elm_Genlist_Item_Class *program_itc;
|
||||
|
||||
} navi_data;
|
||||
|
||||
typedef struct part_item_data_s
|
||||
|
@ -25,6 +29,9 @@ typedef struct part_item_data_s
|
|||
|
||||
static navi_data *g_nd = NULL;
|
||||
|
||||
static void
|
||||
gl_part_selected_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info);
|
||||
|
||||
/*****************************************************************************/
|
||||
/* Internal method implementation */
|
||||
/*****************************************************************************/
|
||||
|
@ -32,6 +39,7 @@ static void
|
|||
gl_state_selected_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info)
|
||||
{
|
||||
Elm_Object_Item *it = event_info;
|
||||
|
||||
//TODO: Search Current State
|
||||
}
|
||||
|
||||
|
@ -45,12 +53,13 @@ states_reload(navi_data *nd, Elm_Object_Item *part_it)
|
|||
Elm_Object_Item *it;
|
||||
|
||||
//Remove Previous Parts
|
||||
EINA_LIST_FREE(nd->state_items, it)
|
||||
elm_object_item_del(it);
|
||||
|
||||
//FIXME: Maybe we could optimize if parts list hasn't been changed.
|
||||
EINA_LIST_FREE(nd->state_items, it) elm_object_item_del(it);
|
||||
edje_edit_string_list_free(nd->state_list);
|
||||
|
||||
//Append States
|
||||
Evas_Object *enventor = base_enventor_get();
|
||||
edje_edit_string_list_free(nd->state_list);
|
||||
nd->state_list = enventor_object_part_states_list_get(enventor, part);
|
||||
char *name;
|
||||
|
||||
|
@ -67,6 +76,44 @@ states_reload(navi_data *nd, Elm_Object_Item *part_it)
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
parts_reload(navi_data *nd, Elm_Object_Item *group_it)
|
||||
{
|
||||
Eina_List *l;
|
||||
Elm_Object_Item *it;
|
||||
|
||||
//Remove Previous Parts
|
||||
|
||||
//FIXME: Maybe we could optimize if parts list hasn't been changed.
|
||||
EINA_LIST_FREE(nd->part_items, it) elm_object_item_del(it);
|
||||
nd->state_items = NULL;
|
||||
edje_edit_string_list_free(nd->part_list);
|
||||
|
||||
//Append Parts
|
||||
Evas_Object *enventor = base_enventor_get();
|
||||
nd->part_list = enventor_object_parts_list_get(enventor);
|
||||
char *name;
|
||||
part_item_data *data;
|
||||
Edje_Part_Type part_type;
|
||||
|
||||
EINA_LIST_FOREACH(nd->part_list, l, name)
|
||||
{
|
||||
part_type = enventor_object_part_type_get(enventor, name);
|
||||
data = malloc(sizeof(part_item_data));
|
||||
data->text = name;
|
||||
data->type = part_type;
|
||||
|
||||
it = elm_genlist_item_append(nd->genlist,
|
||||
nd->part_itc, /* item class */
|
||||
data, /* item data */
|
||||
group_it, /* parent */
|
||||
ELM_GENLIST_ITEM_NONE, /* item type */
|
||||
gl_part_selected_cb, /* select cb */
|
||||
nd); /* select cb data */
|
||||
nd->part_items = eina_list_append(nd->part_items, it);
|
||||
}
|
||||
}
|
||||
|
||||
static char *
|
||||
gl_text_get_cb(void *data, Evas_Object *obj EINA_UNUSED,
|
||||
const char *part EINA_UNUSED)
|
||||
|
@ -75,14 +122,25 @@ gl_text_get_cb(void *data, Evas_Object *obj EINA_UNUSED,
|
|||
return strdup(text);
|
||||
}
|
||||
|
||||
static Evas_Object *
|
||||
gl_program_content_get_cb(void *data, Evas_Object *obj, const char *part)
|
||||
{
|
||||
if (strcmp("elm.swallow.icon", part)) return NULL;
|
||||
|
||||
Evas_Object *image = elm_image_add(obj);
|
||||
elm_image_file_set(image, EDJE_PATH, "navi_program");
|
||||
|
||||
return image;
|
||||
}
|
||||
|
||||
static Evas_Object *
|
||||
gl_state_content_get_cb(void *data, Evas_Object *obj, const char *part)
|
||||
{
|
||||
if (strcmp("elm.swallow.icon", part)) return NULL;
|
||||
|
||||
//TODO: Add Icon
|
||||
Evas_Object *image = elm_image_add(obj);
|
||||
elm_image_file_set(image, EDJE_PATH, "navi_state");
|
||||
|
||||
return image;
|
||||
}
|
||||
|
||||
|
@ -107,7 +165,6 @@ gl_part_content_get_cb(void *data, Evas_Object *obj, const char *part)
|
|||
if (strcmp("elm.swallow.icon", part)) return NULL;
|
||||
part_item_data *item_data = data;
|
||||
|
||||
//TODO: Add Icon
|
||||
Evas_Object *image = elm_image_add(obj);
|
||||
const char *group;
|
||||
|
||||
|
@ -146,9 +203,9 @@ gl_part_selected_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info)
|
|||
{
|
||||
navi_data *nd = data;
|
||||
Elm_Object_Item *it = event_info;
|
||||
|
||||
//TODO: Search Current Part
|
||||
|
||||
//TODO: Add States List
|
||||
states_reload(nd, it);
|
||||
}
|
||||
|
||||
|
@ -157,9 +214,9 @@ gl_group_content_get_cb(void *data, Evas_Object *obj, const char *part)
|
|||
{
|
||||
if (strcmp("elm.swallow.icon", part)) return NULL;
|
||||
|
||||
//TODO: Add Icon
|
||||
Evas_Object *image = elm_image_add(obj);
|
||||
elm_image_file_set(image, EDJE_PATH, "navi_group");
|
||||
|
||||
return image;
|
||||
}
|
||||
|
||||
|
@ -181,90 +238,81 @@ edc_navigator_group_update(const char *cur_group)
|
|||
navi_data *nd = g_nd;
|
||||
if (!nd) return;
|
||||
|
||||
if (!config_edc_navigator_get()) return;
|
||||
|
||||
//Cancel item selection if group was not indicated.
|
||||
if (!cur_group)
|
||||
{
|
||||
Elm_Object_Item *it = elm_genlist_selected_item_get(nd->genlist);
|
||||
elm_genlist_item_selected_set(it, EINA_FALSE);
|
||||
if (it) elm_genlist_item_selected_set(it, EINA_FALSE);
|
||||
return;
|
||||
}
|
||||
|
||||
//If edc_navigator_reload() is not called yet?
|
||||
if (!nd->group_list)
|
||||
{
|
||||
edc_navigator_reload(cur_group);
|
||||
return;
|
||||
}
|
||||
|
||||
Eina_List *l;
|
||||
Elm_Object_Item *it;
|
||||
|
||||
//Remove Previous Parts
|
||||
EINA_LIST_FREE(nd->part_items, it)
|
||||
elm_object_item_del(it);
|
||||
|
||||
//Find a current group item
|
||||
Elm_Object_Item *group_item = NULL;
|
||||
//Find a current group item and select it.
|
||||
Elm_Object_Item *group_it = NULL;
|
||||
int cur_group_len = strlen(cur_group);
|
||||
|
||||
EINA_LIST_FOREACH(nd->group_items, l, it)
|
||||
{
|
||||
group_item = it;
|
||||
const char *group_name = elm_object_item_data_get(it);
|
||||
if (!group_name) continue;
|
||||
|
||||
if (!strcmp(group_name, cur_group) &&
|
||||
strlen(group_name) == strlen(cur_group))
|
||||
(strlen(group_name) == cur_group_len))
|
||||
{
|
||||
elm_genlist_item_selected_set(it, EINA_TRUE);
|
||||
group_item = it;
|
||||
group_it = it;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!group_item) return;
|
||||
//We couldn't find a group... ?
|
||||
if (!group_it) return;
|
||||
|
||||
//Append Parts
|
||||
Evas_Object *enventor = base_enventor_get();
|
||||
edje_edit_string_list_free(nd->part_list);
|
||||
nd->part_list = enventor_object_parts_list_get(enventor);
|
||||
char *name;
|
||||
part_item_data *data;
|
||||
Edje_Part_Type part_type;
|
||||
|
||||
EINA_LIST_FOREACH(nd->part_list, l, name)
|
||||
{
|
||||
part_type = enventor_object_part_type_get(enventor, name);
|
||||
data = malloc(sizeof(part_item_data));
|
||||
data->text = name;
|
||||
data->type = part_type;
|
||||
|
||||
it = elm_genlist_item_append(nd->genlist,
|
||||
nd->part_itc, /* item class */
|
||||
data,
|
||||
group_item, /* parent */
|
||||
ELM_GENLIST_ITEM_NONE, /* item type */
|
||||
gl_part_selected_cb, /* select cb */
|
||||
nd); /* select cb data */
|
||||
nd->part_items = eina_list_append(nd->part_items, it);
|
||||
}
|
||||
parts_reload(nd, group_it);
|
||||
|
||||
//Append Programs
|
||||
}
|
||||
|
||||
void
|
||||
edc_navigator_reload(void)
|
||||
edc_navigator_reload(const char *cur_group)
|
||||
{
|
||||
if (!config_edc_navigator_get()) return;
|
||||
|
||||
navi_data *nd = g_nd;
|
||||
if (!nd) return;
|
||||
|
||||
//Reset Navigator resource
|
||||
//Reset Navigator resource.
|
||||
|
||||
//FIXME: Maybe we could optimize if group list hasn't been changed.
|
||||
nd->group_items = eina_list_free(nd->group_items);
|
||||
nd->part_items = NULL;
|
||||
nd->state_items = NULL;
|
||||
nd->program_items = NULL;
|
||||
|
||||
elm_genlist_clear(nd->genlist);
|
||||
edje_file_collection_list_free(nd->group_list);
|
||||
|
||||
if (!cur_group)
|
||||
{
|
||||
nd->group_list = NULL;
|
||||
return;
|
||||
}
|
||||
|
||||
nd->group_list = edje_file_collection_list(config_output_path_get());
|
||||
|
||||
//Update Group
|
||||
Eina_List *l;
|
||||
char *name;
|
||||
Elm_Object_Item *it;
|
||||
const char *cur_group = stats_group_name_get();
|
||||
int cur_group_len = strlen(cur_group);
|
||||
|
||||
//Update Group
|
||||
EINA_LIST_FOREACH(nd->group_list, l, name)
|
||||
{
|
||||
it = elm_genlist_item_append(nd->genlist,
|
||||
|
@ -277,10 +325,12 @@ edc_navigator_reload(void)
|
|||
|
||||
nd->group_items = eina_list_append(nd->group_items, it);
|
||||
|
||||
//Update Parts only if current group
|
||||
if (cur_group && !strcmp(name, cur_group) &&
|
||||
(strlen(name) == strlen(cur_group)))
|
||||
edc_navigator_group_update(cur_group);
|
||||
//Update a current group
|
||||
if ((cur_group && !strcmp(name, cur_group)) &&
|
||||
(strlen(name) == cur_group_len))
|
||||
{
|
||||
edc_navigator_group_update(cur_group);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -325,6 +375,14 @@ edc_navigator_init(Evas_Object *parent)
|
|||
|
||||
nd->state_itc = itc;
|
||||
|
||||
//Program Item Class
|
||||
itc = elm_genlist_item_class_new();
|
||||
itc->item_style = "default";
|
||||
itc->func.text_get = gl_text_get_cb;
|
||||
itc->func.content_get = gl_program_content_get_cb;
|
||||
|
||||
nd->program_itc = itc;
|
||||
|
||||
nd->genlist = genlist;
|
||||
|
||||
return genlist;
|
||||
|
@ -339,12 +397,18 @@ edc_navigator_term(void)
|
|||
eina_list_free(nd->state_items);
|
||||
eina_list_free(nd->part_items);
|
||||
eina_list_free(nd->group_items);
|
||||
eina_list_free(nd->program_items);
|
||||
|
||||
edje_file_collection_list_free(nd->group_list);
|
||||
edje_edit_string_list_free(nd->part_list);
|
||||
edje_edit_string_list_free(nd->state_list);
|
||||
edje_edit_string_list_free(nd->program_list);
|
||||
|
||||
elm_genlist_item_class_free(nd->group_itc);
|
||||
elm_genlist_item_class_free(nd->part_itc);
|
||||
elm_genlist_item_class_free(nd->state_itc);
|
||||
elm_genlist_item_class_free(nd->program_itc);
|
||||
|
||||
free(nd);
|
||||
g_nd = NULL;
|
||||
}
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
#include "panes.h"
|
||||
#include "edc_navigator.h"
|
||||
|
||||
#define EDC_NAVIGATOR_UPDATE_TIME 0.5
|
||||
|
||||
Eina_Bool base_gui_init(void);
|
||||
void base_gui_show(void);
|
||||
Evas_Object *base_win_get(void);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
Evas_Object *edc_navigator_init(Evas_Object *parent);
|
||||
void edc_navigator_term(void);
|
||||
void edc_navigator_reload(void);
|
||||
void edc_navigator_reload(const char *cur_group);
|
||||
void edc_navigator_group_update(const char *cur_group);
|
||||
|
|
Loading…
Reference in New Issue