express: Start work on dynamic switching between tabs & treeview
Signed-off-by: Chris Michael <cp.michael@samsung.com>
This commit is contained in:
parent
9195f3fcbf
commit
eec4dd91bf
|
@ -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);
|
||||
|
|
114
src/bin/window.c
114
src/bin/window.c
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue