Client: Allow users (on by default) to only show elm widgets.

This lets users choose to only see elm widgets, no "low-level" objects.
This is simpler for most people, but some more advanced users would
still prefer seeing the low-level objects.
This commit is contained in:
Tom Hacohen 2013-11-07 10:13:41 +00:00
commit f86d84faa8
4 changed files with 175 additions and 54 deletions

View File

@ -5,7 +5,8 @@ bin_PROGRAMS = clouseaud clouseau_client
clouseaud_SOURCES = clouseaud.c
clouseau_client_SOURCES = \
clouseau_client.c \
client/cfg.c
client/cfg.c \
client/config_dialog.c
AM_CPPFLAGS = \
-I$(top_srcdir)/src/lib \

View File

@ -0,0 +1,94 @@
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include <Elementary.h>
#include "Clouseau.h"
#include "client/cfg.h"
#include "client/config_dialog.h"
static Clouseau_Config_Changed_Cb _conf_changed_cb = NULL;
static void *_conf_changed_cb_data = NULL;
static Eina_Bool _cfg_changed;
static void
_close_btn_clicked(void *data, Evas_Object *obj EINA_UNUSED,
void *event_info EINA_UNUSED)
{
Evas_Object *win = data;
if (_cfg_changed)
_conf_changed_cb(_conf_changed_cb_data);
_conf_changed_cb = NULL;
_conf_changed_cb_data = NULL;
evas_object_del(win);
}
static void
_config_check_changed(void *data, Evas_Object *obj,
void *event_info EINA_UNUSED)
{
Eina_Bool *setting = data;
*setting = elm_check_state_get(obj);
_cfg_changed = EINA_TRUE;
}
void
clouseau_settings_dialog_open(Evas_Object *parent, Clouseau_Config_Changed_Cb callback, const void *callback_data)
{
Evas_Object *win, *bx;
_cfg_changed = EINA_FALSE;
_conf_changed_cb = callback;
_conf_changed_cb_data = (void *) callback_data;
win = elm_win_inwin_add(parent);
evas_object_show(win);
bx = elm_box_add(win);
evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(bx, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_show(bx);
elm_win_inwin_content_set(win, bx);
Evas_Object *check;
check = elm_check_add(bx);
elm_object_text_set(check, "Show Hidden");
elm_check_state_set(check, _clouseau_cfg->show_hidden);
elm_box_pack_end(bx, check);
evas_object_show(check);
evas_object_smart_callback_add(check, "changed",
_config_check_changed, &(_clouseau_cfg->show_hidden));
check = elm_check_add(bx);
elm_object_text_set(check, "Show Clippers");
elm_check_state_set(check, _clouseau_cfg->show_clippers);
elm_box_pack_end(bx, check);
evas_object_show(check);
evas_object_smart_callback_add(check, "changed",
_config_check_changed, &(_clouseau_cfg->show_clippers));
check = elm_check_add(bx);
elm_object_text_set(check, "Only show Elementary widgets");
elm_check_state_set(check, _clouseau_cfg->show_elm_only);
elm_box_pack_end(bx, check);
evas_object_show(check);
evas_object_smart_callback_add(check, "changed",
_config_check_changed, &(_clouseau_cfg->show_elm_only));
Evas_Object *btn;
btn = elm_button_add(bx);
elm_object_text_set(btn, "Close");
evas_object_size_hint_align_set(bx, 1.0, EVAS_HINT_FILL);
elm_box_pack_end(bx, btn);
evas_object_show(btn);
evas_object_smart_callback_add(btn, "clicked",
_close_btn_clicked, win);
}

View File

@ -0,0 +1,8 @@
#ifndef _CONFIG_DIALOG_H
#define _CONFIG_DIALOG_H
typedef void (*Clouseau_Config_Changed_Cb)(void *data);
void clouseau_settings_dialog_open(Evas_Object *parent, Clouseau_Config_Changed_Cb callback, const void *callback_data);
#endif

View File

@ -7,6 +7,7 @@
#include "Clouseau.h"
#include "client/cfg.h"
#include "client/config_dialog.h"
#define CLIENT_NAME "Clouseau Client"
@ -85,7 +86,7 @@ struct _Gui_Elementns
};
typedef struct _Gui_Elementns Gui_Elements;
static int _load_list(Gui_Elements *g);
static void _load_list(Gui_Elements *g);
static void _bt_load_file(void *data, Evas_Object *obj EINA_UNUSED, void *event_info);
static void _show_gui(Gui_Elements *g, Eina_Bool work_offline);
@ -980,27 +981,61 @@ _bmp_data_cb(EINA_UNUSED void *data, EINA_UNUSED Ecore_Con_Reply *reply,
}
}
static Eina_Bool
_tree_it_is_elm(Clouseau_Tree_Item *treeit)
{
Eina_List *l;
Eo_Dbg_Info *eo_root, *eo;
Eina_Value_List eo_list;
clouseau_tree_item_from_legacy_convert(treeit);
eo_root = treeit->new_eo_info;
eina_value_pget(&(eo_root->value), &eo_list);
EINA_LIST_FOREACH(eo_list.list, l, eo)
{
if (!strcmp(eo->name, "elm_widget"))
return EINA_TRUE;
}
return EINA_FALSE;
}
static void
_gl_exp_add_subitems(Evas_Object *gl, Elm_Object_Item *glit, Clouseau_Tree_Item *parent)
{
Clouseau_Tree_Item *treeit;
Eina_List *itr;
EINA_LIST_FOREACH(parent->children, itr, treeit)
{
/* Skip the item if we don't want to show it. */
if ((!_clouseau_cfg->show_hidden && !treeit->is_visible) ||
(!_clouseau_cfg->show_clippers && treeit->is_clipper))
continue;
if (_clouseau_cfg->show_elm_only && !_tree_it_is_elm(treeit))
{
_gl_exp_add_subitems(gl, glit, treeit);
}
else
{
Elm_Genlist_Item_Type iflag = (treeit->children) ?
ELM_GENLIST_ITEM_TREE : ELM_GENLIST_ITEM_NONE;
_tree_item_show_last_expanded_item =
elm_genlist_item_append(gl, &itc, treeit, glit, iflag,
NULL, NULL);
}
}
}
static void
gl_exp(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
{
Elm_Object_Item *glit = event_info;
Evas_Object *gl = elm_object_item_widget_get(glit);
Clouseau_Tree_Item *parent = elm_object_item_data_get(glit);
Clouseau_Tree_Item *treeit;
Eina_List *itr;
EINA_LIST_FOREACH(parent->children, itr, treeit)
{
if ((!_clouseau_cfg->show_hidden && !treeit->is_visible) ||
(!_clouseau_cfg->show_clippers && treeit->is_clipper))
continue;
Elm_Genlist_Item_Type iflag = (treeit->children) ?
ELM_GENLIST_ITEM_TREE : ELM_GENLIST_ITEM_NONE;
_tree_item_show_last_expanded_item =
elm_genlist_item_append(gl, &itc, treeit, glit, iflag,
NULL, NULL);
}
_gl_exp_add_subitems(gl, glit, parent);
}
static void
@ -1308,7 +1343,7 @@ _gl_selected(void *data, Evas_Object *pobj EINA_UNUSED, void *event_info)
/* END - replacing clouseau_object_highlight(obj); */
}
static int
static void
_load_list(Gui_Elements *g)
{
elm_progressbar_pulse(g->pb, EINA_FALSE);
@ -1330,7 +1365,7 @@ _load_list(Gui_Elements *g)
if (!eet_svr)
{
_update_tree_offline(g, g->sel_app->td);
return 0;
return;
}
if (eina_list_search_unsorted(apps, _app_ptr_cmp,
@ -1345,16 +1380,6 @@ _load_list(Gui_Elements *g)
}
}
}
return 0;
}
static void
_show_clippers_check_changed(void *data, Evas_Object *obj,
void *event_info EINA_UNUSED)
{
_clouseau_cfg->show_clippers = elm_check_state_get(obj);
_load_list(data);
}
static void
@ -1364,14 +1389,6 @@ _highlight_check_check_changed(EINA_UNUSED void *data, Evas_Object *obj,
do_highlight = elm_check_state_get(obj);
}
static void
_show_hidden_check_changed(void *data, Evas_Object *obj,
void *event_info EINA_UNUSED)
{
_clouseau_cfg->show_hidden = elm_check_state_get(obj);
_load_list(data);
}
static void
_bt_clicked(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
@ -1555,6 +1572,14 @@ _list_tree_item_pointer_find(Eina_List *tree, uintptr_t ptr)
return NULL;
}
static void
_settings_btn_clicked(void *data EINA_UNUSED,
Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
clouseau_settings_dialog_open(gui->win,
(Clouseau_Config_Changed_Cb) _load_list, (void *) gui);
}
static void
_save_file_dialog(void *data,
Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
@ -1768,7 +1793,7 @@ _jump_to_entry_activated(void *data,
static void
_control_buttons_create(Gui_Elements *g, Evas_Object *win)
{
Evas_Object *show_hidden_check, *show_clippers_check, *highlight_check;
Evas_Object *highlight_check;
Evas_Object *jump_to_entry, *frame;
frame = elm_frame_add(gui->bx);
@ -1800,28 +1825,12 @@ _control_buttons_create(Gui_Elements *g, Evas_Object *win)
elm_box_pack_end(g->hbx, g->dd_list);
evas_object_show(g->dd_list);
show_hidden_check = elm_check_add(g->hbx);
elm_object_text_set(show_hidden_check, "Show Hidden");
elm_check_state_set(show_hidden_check, _clouseau_cfg->show_hidden);
elm_box_pack_end(g->hbx, show_hidden_check);
evas_object_show(show_hidden_check);
show_clippers_check = elm_check_add(g->hbx);
elm_object_text_set(show_clippers_check, "Show Clippers");
elm_check_state_set(show_clippers_check, _clouseau_cfg->show_clippers);
elm_box_pack_end(g->hbx, show_clippers_check);
evas_object_show(show_clippers_check);
highlight_check = elm_check_add(g->hbx);
elm_object_text_set(highlight_check , "Highlight");
elm_check_state_set(highlight_check , do_highlight);
elm_box_pack_end(g->hbx, highlight_check);
evas_object_show(highlight_check);
evas_object_smart_callback_add(show_hidden_check, "changed",
_show_hidden_check_changed, g);
evas_object_smart_callback_add(show_clippers_check, "changed",
_show_clippers_check_changed, g);
evas_object_smart_callback_add(highlight_check, "changed",
_highlight_check_check_changed, g);
@ -1838,6 +1847,15 @@ _control_buttons_create(Gui_Elements *g, Evas_Object *win)
evas_object_smart_callback_add(jump_to_entry, "activated",
_jump_to_entry_activated, g);
Evas_Object *btn_settings;
btn_settings = elm_button_add(g->hbx);
elm_object_text_set(btn_settings, "Settings");
evas_object_smart_callback_add(btn_settings, "clicked",
_settings_btn_clicked, NULL);
elm_box_pack_end(g->hbx, btn_settings);
evas_object_show(btn_settings);
}
static void