edc_navigator: 2nd patch for base navigation behavior.

not completed.
This commit is contained in:
Hermet Park 2016-02-26 22:22:29 +09:00
parent 69029879d8
commit 50a7b468ef
9 changed files with 322 additions and 2 deletions

View File

@ -2720,7 +2720,7 @@ group { name: "main_layout";
}
desc { "visible";
inherit: "default";
min: 150 0;
min: 200 0;
}
}
}

View File

@ -28,7 +28,8 @@ enventor_SOURCES = \
globals.c \
live_edit.c \
console.c \
file_mgr.c
file_mgr.c \
edc_navigator.c
enventor_LDADD = \
$(top_builddir)/src/lib/libenventor.la \

View File

@ -197,10 +197,24 @@ base_gui_term(void)
base_data *bd = g_bd;
assert(bd);
edc_navigator_term();
panes_term();
free(bd);
}
void
base_edc_navigator_parts_reload(void)
{
edc_navigator_parts_reload();
}
void
base_edc_navigator_group_reload(void)
{
edc_navigator_group_reload();
}
void
base_console_reset(void)
{
@ -265,6 +279,11 @@ base_gui_init(void)
if (config_console_get())
panes_editors_full_view(EINA_TRUE);
//EDC Navigator
Evas_Object *edc_navigator = edc_navigator_init(layout);
elm_object_part_content_set(layout, "elm.swallow.edc_navigator",
edc_navigator);
bd->win = win;
bd->layout = layout;
bd->console = console;

267
src/bin/edc_navigator.c Normal file
View File

@ -0,0 +1,267 @@
#include "common.h"
typedef struct edc_navigator_s
{
Evas_Object *genlist;
Eina_List *group_items; //group object item
Eina_List *part_items; //part object item
Eina_List *state_items; //state object item
Eina_List *group_list; //group name list
Eina_List *part_list; //part name list
Eina_List *state_list; //state name list
Elm_Genlist_Item_Class *group_itc;
Elm_Genlist_Item_Class *part_itc;
Elm_Genlist_Item_Class *state_itc;
} navi_data;
static navi_data *g_nd = NULL;
/*****************************************************************************/
/* Internal method implementation */
/*****************************************************************************/
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
}
static void
states_reload(navi_data *nd, Elm_Object_Item *part_it)
{
const char *part = elm_object_item_text_get(part_it);
if (!part) return;
Eina_List *l;
Elm_Object_Item *it;
//Remove Previous Parts
EINA_LIST_FREE(nd->state_items, it)
elm_object_item_del(it);
//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;
EINA_LIST_FOREACH(nd->state_list, l, name)
{
it = elm_genlist_item_append(nd->genlist,
nd->state_itc, /* item class */
name, /* item data */
part_it, /* parent */
ELM_GENLIST_ITEM_NONE, /* item type */
gl_state_selected_cb, /* select cb */
nd); /* select cb data */
nd->state_items = eina_list_append(nd->state_items, it);
}
}
static char *
gl_text_get_cb(void *data, Evas_Object *obj EINA_UNUSED,
const char *part EINA_UNUSED)
{
const char *text = data;
return strdup(text);
}
static Evas_Object *
gl_content_get_cb(void *data, Evas_Object *obj EINA_UNUSED,
const char *part EINA_UNUSED)
{
return NULL;
}
static void
gl_del_cb(void *data, Evas_Object *obj EINA_UNUSED)
{
}
static void
gl_group_selected_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info)
{
Elm_Object_Item *it = event_info;
//TODO: Search Current Group
}
static void
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);
}
/*****************************************************************************/
/* Externally accessible calls */
/*****************************************************************************/
void
edc_navigator_parts_reload(void)
{
if (!config_edc_navigator_get()) return;
navi_data *nd = g_nd;
if (!nd) 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
const char *cur_group = stats_group_name_get();
if (!cur_group) return;
Elm_Object_Item *group_item = NULL;
EINA_LIST_FOREACH(nd->group_items, l, it)
{
group_item = it;
const char *group_name = elm_object_item_text_get(it);
if (!group_name) continue;
if (!strcmp(group_name, cur_group) &&
strlen(group_name) == strlen(cur_group))
{
group_item = it;
break;
}
}
if (!group_item) 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;
EINA_LIST_FOREACH(nd->part_list, l, name)
{
it = elm_genlist_item_append(nd->genlist,
nd->part_itc, /* item class */
name, /* item 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);
}
}
void
edc_navigator_group_reload(void)
{
if (!config_edc_navigator_get()) return;
navi_data *nd = g_nd;
if (!nd) return;
//Reset Navigator resource
nd->group_items = eina_list_free(nd->group_items);
elm_genlist_clear(nd->genlist);
edje_file_collection_list_free(nd->group_list);
nd->group_list = edje_file_collection_list(config_output_path_get());
Eina_List *l;
char *name;
Elm_Object_Item *it;
const char *cur_group = stats_group_name_get();
//Update Group
EINA_LIST_REVERSE_FOREACH(nd->group_list, l, name)
{
it = elm_genlist_item_append(nd->genlist,
nd->group_itc, /* item class */
name, /* item data */
NULL, /* parent */
ELM_GENLIST_ITEM_NONE, /* item type */
gl_group_selected_cb, /* select cb */
nd); /* select cb data */
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_parts_reload();
}
}
Evas_Object *
edc_navigator_init(Evas_Object *parent)
{
navi_data *nd = calloc(1, sizeof(navi_data));
if (!nd)
{
EINA_LOG_ERR("Failed to allocate Memory!");
return NULL;
}
g_nd = nd;
Evas_Object *genlist = elm_genlist_add(parent);
//Group Item Class
Elm_Genlist_Item_Class *itc;
itc = elm_genlist_item_class_new();
itc->item_style = "default";
itc->func.text_get = gl_text_get_cb;
itc->func.content_get = gl_content_get_cb;
itc->func.del = gl_del_cb;
nd->group_itc = itc;
//Part 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_content_get_cb;
itc->func.del = gl_del_cb;
nd->part_itc = itc;
//State 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_content_get_cb;
itc->func.del = gl_del_cb;
nd->state_itc = itc;
nd->genlist = genlist;
return genlist;
}
void
edc_navigator_term(void)
{
navi_data *nd = g_nd;
if (!nd) return;
eina_list_free(nd->state_items);
eina_list_free(nd->part_items);
eina_list_free(nd->group_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);
elm_genlist_item_class_free(nd->group_itc);
elm_genlist_item_class_free(nd->part_itc);
elm_genlist_item_class_free(nd->state_itc);
free(nd);
g_nd = NULL;
}

View File

@ -402,6 +402,7 @@ enventor_cursor_group_changed_cb(void *data EINA_UNUSED,
{
const char *group_name = event_info;
stats_edc_group_update(group_name);
base_edc_navigator_parts_reload();
}
static void
@ -430,6 +431,7 @@ enventor_live_view_loaded_cb(void *data EINA_UNUSED, Evas_Object *obj,
Evas_Coord w, h;
config_view_size_get(&w, &h);
enventor_object_live_view_size_set(obj, w, h);
base_edc_navigator_group_reload();
}
static void

View File

@ -1,4 +1,5 @@
#include "panes.h"
#include "edc_navigator.h"
Eina_Bool base_gui_init(void);
void base_gui_show(void);
@ -22,3 +23,5 @@ void base_console_reset(void);
void base_error_msg_set(const char *msg);
void base_console_full_view(void);
void base_edc_navigator_toggle(Eina_Bool toggle);
void base_edc_navigator_group_reload(void);
void base_edc_navigator_parts_reload(void);

View File

@ -0,0 +1,4 @@
Evas_Object *edc_navigator_init(Evas_Object *parent);
void edc_navigator_term(void);
void edc_navigator_group_reload(void);
void edc_navigator_parts_reload(void);

View File

@ -113,6 +113,15 @@ class Enventor.Object (Elm.Widget, Efl.File) {
@in type: Enventor_Path_Type;
}
}
part_states_list_get {
return: Eina_List *;
params {
@in type: const(char) *;
}
}
parts_list_get {
return: Eina_List *;
}
max_line_get {
return: int;
}

View File

@ -315,6 +315,21 @@ err:
return EINA_FALSE;
}
EOLIAN static Eina_List *
_enventor_object_part_states_list_get(Eo *obj EINA_UNUSED,
Enventor_Object_Data *pd EINA_UNUSED,
const char *part)
{
return view_part_states_list_get(VIEW_DATA, part);
}
EOLIAN static Eina_List *
_enventor_object_parts_list_get(Eo *obj EINA_UNUSED,
Enventor_Object_Data *pd EINA_UNUSED)
{
return view_parts_list_get(VIEW_DATA);
}
EOLIAN static void
_enventor_object_linenumber_set(Eo *obj EINA_UNUSED, Enventor_Object_Data *pd,
Eina_Bool linenumber)