express: Start work on dynamic switching between tabs & treeview

Signed-off-by: Chris Michael <cp.michael@samsung.com>
This commit is contained in:
Chris Michael 2015-04-12 18:26:51 -04:00
parent 9195f3fcbf
commit eec4dd91bf
3 changed files with 133 additions and 90 deletions

View File

@ -455,9 +455,10 @@ _channel_treeview_create(Channel *chl)
o = elm_frame_add(chl->o_win);
WEIGHT_SET(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
ALIGN_SET(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
FILL_SET(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_object_text_set(o, "Channels");
elm_object_focus_allow_set(o, EINA_FALSE);
evas_object_show(o);
chl->treeview.o_frame = o;
edje_object_part_swallow(chl->o_base, "treeview.content", o);
@ -469,7 +470,7 @@ _channel_treeview_create(Channel *chl)
o = elm_box_add(chl->o_win);
WEIGHT_SET(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
ALIGN_SET(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
FILL_SET(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_box_align_set(o, 0.5, 0.0);
elm_box_padding_set(o, 2, 2);
evas_object_show(o);
@ -492,7 +493,7 @@ _channel_treeview_create(Channel *chl)
o = elm_genlist_add(chl->o_win);
WEIGHT_SET(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
ALIGN_SET(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
FILL_SET(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
/* elm_genlist_tree_effect_enabled_set(o, EINA_TRUE); */
elm_object_focus_allow_set(o, EINA_FALSE);
elm_scroller_content_min_limit(o, EINA_TRUE, EINA_FALSE);
@ -504,6 +505,20 @@ _channel_treeview_create(Channel *chl)
chl->treeview.o_list = o;
elm_box_pack_end(chl->treeview.o_box, o);
}
edje_object_signal_emit(chl->o_base, "treeview,on", PACKAGE_NAME);
}
static void
_channel_treeview_destroy(Channel *chl)
{
edje_object_signal_emit(chl->o_base, "treeview,off", PACKAGE_NAME);
if (chl->treeview.gitc) elm_genlist_item_class_free(chl->treeview.gitc);
if (chl->treeview.itc) elm_genlist_item_class_free(chl->treeview.itc);
if (chl->treeview.o_list) evas_object_del(chl->treeview.o_list);
if (chl->treeview.o_box) evas_object_del(chl->treeview.o_box);
if (chl->treeview.o_frame) evas_object_del(chl->treeview.o_frame);
}
static void
@ -529,6 +544,41 @@ _cb_treeview_selected(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void
/* elm_genlist_item_selected_set(item, EINA_TRUE); */
}
static void
_channel_tabbar_create(Channel *chl)
{
if (!chl->o_tabregion_bg)
{
chl->o_tabregion_bg = evas_object_rectangle_add(chl->evas);
evas_object_color_set(chl->o_tabregion_bg, 0, 0, 0, 0);
evas_object_event_callback_add(chl->o_tabregion_bg,
EVAS_CALLBACK_MOVE,
_cb_tabregion_change, chl);
evas_object_event_callback_add(chl->o_tabregion_bg,
EVAS_CALLBACK_RESIZE,
_cb_tabregion_change, chl);
edje_object_part_swallow(chl->o_bg, "channel.tabregion",
chl->o_tabregion_bg);
}
if (!chl->o_tabregion_base)
{
chl->o_tabregion_base = evas_object_rectangle_add(chl->evas);
evas_object_color_set(chl->o_tabregion_base, 0, 0, 0, 0);
edje_object_part_swallow(chl->o_base, "channel.tabregion",
chl->o_tabregion_base);
}
_window_tabcount_update();
}
static void
_channel_tabbar_destroy(Channel *chl EINA_UNUSED)
{
/* NB: This function will already destroy tabbar */
_window_tabcount_update();
}
/* external functions */
Channel *
_channel_create(Evas *evas, Evas_Object *win, const char *name, const char *server)
@ -568,19 +618,10 @@ _channel_create(Evas *evas, Evas_Object *win, const char *name, const char *serv
evas_object_data_set(chl->o_bg, "theme_reload_func_data", chl);
/* add tabregion */
chl->o_tabregion_bg = evas_object_rectangle_add(evas);
evas_object_color_set(chl->o_tabregion_bg, 0, 0, 0, 0);
evas_object_event_callback_add(chl->o_tabregion_bg, EVAS_CALLBACK_MOVE,
_cb_tabregion_change, chl);
evas_object_event_callback_add(chl->o_tabregion_bg, EVAS_CALLBACK_RESIZE,
_cb_tabregion_change, chl);
edje_object_part_swallow(chl->o_bg, "channel.tabregion",
chl->o_tabregion_bg);
chl->o_tabregion_base = evas_object_rectangle_add(evas);
evas_object_color_set(chl->o_tabregion_base, 0, 0, 0, 0);
edje_object_part_swallow(chl->o_base, "channel.tabregion",
chl->o_tabregion_base);
if (_ex_cfg->gui.tabs)
_channel_tabbar_create(chl);
else
_channel_treeview_create(chl);
/* add grid */
chl->o_grid = _grid_add(evas);
@ -590,9 +631,6 @@ _channel_create(Evas *evas, Evas_Object *win, const char *name, const char *serv
/* add userlist */
_channel_userlist_create(chl);
if (!_ex_cfg->gui.tabs)
_channel_treeview_create(chl);
evas_object_event_callback_add(chl->o_grid,
EVAS_CALLBACK_CHANGED_SIZE_HINTS,
_cb_size_hint, chl);
@ -626,21 +664,14 @@ _channel_destroy(Channel *chl)
const char *usr;
/* delete tabregion stuff */
_channel_tabbar_clear(chl);
if (chl->o_tabregion_bg) evas_object_del(chl->o_tabregion_bg);
if (chl->o_tabregion_base) evas_object_del(chl->o_tabregion_base);
if (chl->o_tab_spacer) evas_object_del(chl->o_tab_spacer);
_channel_tabbar_destroy(chl);
_channel_treeview_destroy(chl);
/* delete channel userlist objects */
EINA_LIST_FREE(chl->userlist.users, usr)
eina_stringshare_del(usr);
if (chl->treeview.gitc) elm_genlist_item_class_free(chl->treeview.gitc);
if (chl->treeview.itc) elm_genlist_item_class_free(chl->treeview.itc);
if (chl->treeview.o_list) evas_object_del(chl->treeview.o_list);
if (chl->treeview.o_box) evas_object_del(chl->treeview.o_box);
if (chl->treeview.o_frame) evas_object_del(chl->treeview.o_frame);
if (chl->userlist.o_dismiss) evas_object_del(chl->userlist.o_dismiss);
if (chl->userlist.o_list) evas_object_del(chl->userlist.o_list);
if (chl->userlist.o_label) evas_object_del(chl->userlist.o_label);
@ -674,13 +705,20 @@ _channel_update(Channel *chl)
/* update channel transparency */
_cb_theme_reload(chl);
if (_ex_cfg->gui.tabs)
{
_channel_treeview_destroy(chl);
_window_tabcount_update();
}
else
{
_channel_tabbar_destroy(chl);
_channel_treeview_create(chl);
_window_treeview_update();
}
/* update grid config */
_grid_update(chl->o_grid);
if (!_ex_cfg->gui.tabs)
edje_object_signal_emit(chl->o_base, "treeview,on", PACKAGE_NAME);
else
edje_object_signal_emit(chl->o_base, "treeview,off", PACKAGE_NAME);
}
void
@ -1176,6 +1214,7 @@ _channel_tabspacer_create(Channel *chl, double v1, double v2)
edje_object_part_drag_value_set(chl->o_bg, "tabr", v2, 0.0);
edje_object_part_text_set(chl->o_bg, "tab.title", chl->name);
edje_object_signal_emit(chl->o_bg, "tabbar,on", PACKAGE_NAME);
edje_object_signal_emit(chl->o_base, "tabbar,on", PACKAGE_NAME);
edje_object_message_signal_process(chl->o_bg);
}
else
@ -1192,6 +1231,7 @@ _channel_tabspacer_destroy(Channel *chl)
if (chl->o_tab_spacer)
{
edje_object_signal_emit(chl->o_bg, "tabbar,off", PACKAGE_NAME);
edje_object_signal_emit(chl->o_base, "tabbar,off", PACKAGE_NAME);
evas_object_del(chl->o_tab_spacer);
chl->o_tab_spacer = NULL;
edje_object_message_signal_process(chl->o_bg);

View File

@ -338,62 +338,6 @@ _cb_groups_sort(const void *d1, const void *d2)
return strcasecmp(d1, d2);
}
static void
_window_treeview_update(void)
{
Eina_List *l, *groups = NULL;
Eina_List *ll, *channels = NULL;
Channel *chl;
const char *name;
/* char *group; */
channels = eina_list_clone(_win->channels);
EINA_LIST_FOREACH(_win->channels, l, chl)
{
Express_Network *net;
if ((net = _channel_network_get(chl)))
{
name = express_network_name_get(net);
if (!eina_list_data_find(groups, name))
groups = eina_list_append(groups, name);
}
}
groups = eina_list_sort(groups, eina_list_count(groups), _cb_groups_sort);
EINA_LIST_FREE(groups, name)
{
EINA_LIST_FOREACH(_win->channels, l, chl)
{
Channel *lchl;
EINA_LIST_FOREACH(channels, ll, lchl)
{
if (!_channel_network_get(lchl))
_channel_treeview_item_add(chl, lchl);
}
_channel_treeview_group_add(chl, name);
EINA_LIST_FOREACH(channels, ll, lchl)
{
Express_Network *net;
if ((net = _channel_network_get(lchl)))
{
if (!strcmp(name, express_network_name_get(net)))
_channel_treeview_group_item_add(chl, lchl);
}
}
}
}
eina_list_free(channels);
}
/* external functions */
Eina_Bool
_window_create(void)
@ -1102,3 +1046,61 @@ _window_tabcount_update(void)
i++;
}
}
void
_window_treeview_update(void)
{
Eina_List *l, *groups = NULL;
Eina_List *ll, *channels = NULL;
Channel *chl;
const char *name;
/* char *group; */
channels = eina_list_clone(_win->channels);
EINA_LIST_FOREACH(_win->channels, l, chl)
{
Express_Network *net;
_channel_treeview_clear(chl);
if ((net = _channel_network_get(chl)))
{
name = express_network_name_get(net);
if (!eina_list_data_find(groups, name))
groups = eina_list_append(groups, name);
}
}
groups = eina_list_sort(groups, eina_list_count(groups), _cb_groups_sort);
EINA_LIST_FREE(groups, name)
{
EINA_LIST_FOREACH(_win->channels, l, chl)
{
Channel *lchl;
EINA_LIST_FOREACH(channels, ll, lchl)
{
if (!_channel_network_get(lchl))
_channel_treeview_item_add(chl, lchl);
}
_channel_treeview_group_add(chl, name);
EINA_LIST_FOREACH(channels, ll, lchl)
{
Express_Network *net;
if ((net = _channel_network_get(lchl)))
{
if (!strcmp(name, express_network_name_get(net)))
_channel_treeview_group_item_add(chl, lchl);
}
}
}
}
eina_list_free(channels);
}

View File

@ -31,5 +31,6 @@ void _window_network_channels_destroy(Express_Network *net);
void _window_tabbar_fill(Channel *chl);
void _window_tabbar_update(Channel *chl);
void _window_tabcount_update(void);
void _window_treeview_update(void);
#endif