parent
99dafd01e7
commit
43e88e956e
13 changed files with 416 additions and 1 deletions
@ -0,0 +1,159 @@ |
||||
/*
|
||||
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 |
||||
*/ |
||||
#include "e.h" |
||||
|
||||
/* PROTOTYPES - same all the time */ |
||||
typedef struct _CFData CFData; |
||||
|
||||
static void *_create_data(E_Config_Dialog *cfd); |
||||
static void _free_data(E_Config_Dialog *cfd, CFData *cfdata); |
||||
static int _basic_apply_data(E_Config_Dialog *cfd, CFData *cfdata); |
||||
static Evas_Object *_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, CFData *cfdata); |
||||
|
||||
/* Actual config data we will be playing with whil the dialog is active */ |
||||
struct _CFData |
||||
{ |
||||
E_Border *border; |
||||
int remember_border; |
||||
}; |
||||
|
||||
/* a nice easy setup function that does the dirty work */ |
||||
void |
||||
e_int_border_border(E_Border *bd) |
||||
{ |
||||
E_Config_Dialog *cfd; |
||||
E_Config_Dialog_View v; |
||||
|
||||
/* methods */ |
||||
v.create_cfdata = _create_data; |
||||
v.free_cfdata = _free_data; |
||||
v.basic.apply_cfdata = _basic_apply_data; |
||||
v.basic.create_widgets = _basic_create_widgets; |
||||
v.advanced.apply_cfdata = NULL; |
||||
v.advanced.create_widgets = NULL; |
||||
/* create config diaolg for bd object/data */ |
||||
cfd = e_config_dialog_new(bd->zone->container,
|
||||
_("Window Border Selection"), NULL, 0, &v, bd); |
||||
bd->border_border_dialog = cfd; |
||||
} |
||||
|
||||
/**--CREATE--**/ |
||||
static void |
||||
_fill_data(CFData *cfdata) |
||||
{ |
||||
if ((cfdata->border->remember) && |
||||
(cfdata->border->remember->apply & E_REMEMBER_APPLY_BORDER)) |
||||
cfdata->remember_border = 1; |
||||
} |
||||
|
||||
static void * |
||||
_create_data(E_Config_Dialog *cfd) |
||||
{ |
||||
/* Create cfdata - cfdata is a temporary block of config data that this
|
||||
* dialog will be dealing with while configuring. it will be applied to |
||||
* the running systems/config in the apply methods |
||||
*/ |
||||
CFData *cfdata; |
||||
|
||||
cfdata = E_NEW(CFData, 1); |
||||
cfdata->border = cfd->data; |
||||
_fill_data(cfdata); |
||||
return cfdata; |
||||
} |
||||
|
||||
static void |
||||
_free_data(E_Config_Dialog *cfd, CFData *cfdata) |
||||
{ |
||||
/* Free the cfdata */ |
||||
cfdata->border->border_border_dialog = NULL; |
||||
free(cfdata); |
||||
} |
||||
|
||||
/**--APPLY--**/ |
||||
static int |
||||
_basic_apply_data(E_Config_Dialog *cfd, CFData *cfdata) |
||||
{ |
||||
/* FIXME: need to check if the remember stuff will actually work or notx
|
||||
* (see e_int_border_remember.c where it checks and warns) */ |
||||
if (cfdata->remember_border) |
||||
{ |
||||
if (!cfdata->border->remember) |
||||
{ |
||||
cfdata->border->remember = e_remember_new(); |
||||
if (cfdata->border->remember) |
||||
{ |
||||
e_remember_use(cfdata->border->remember); |
||||
e_remember_update(cfdata->border->remember, cfdata->border); |
||||
cfdata->border->remember->match |= E_REMEMBER_MATCH_NAME; |
||||
cfdata->border->remember->match |= E_REMEMBER_MATCH_CLASS; |
||||
cfdata->border->remember->match |= E_REMEMBER_MATCH_ROLE; |
||||
cfdata->border->remember->match |= E_REMEMBER_MATCH_TYPE; |
||||
cfdata->border->remember->match |= E_REMEMBER_MATCH_TRANSIENT; |
||||
cfdata->border->remember->apply |= E_REMEMBER_APPLY_BORDER; |
||||
} |
||||
} |
||||
} |
||||
else |
||||
{ |
||||
if (cfdata->border->remember) |
||||
{ |
||||
cfdata->border->remember->apply &= ~E_REMEMBER_APPLY_BORDER; |
||||
if (cfdata->border->remember->apply == 0) |
||||
{ |
||||
e_remember_unuse(cfdata->border->remember); |
||||
e_remember_del(cfdata->border->remember); |
||||
cfdata->border->remember = NULL; |
||||
} |
||||
} |
||||
} |
||||
e_config_save_queue(); |
||||
return 1; /* Apply was OK */ |
||||
} |
||||
|
||||
/**--GUI--**/ |
||||
static Evas_Object * |
||||
_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, CFData *cfdata) |
||||
{ |
||||
/* generate the core widget layout for a basic dialog */ |
||||
Evas_Object *o, *ob, *oi; |
||||
Evas_Coord wmw, wmh; |
||||
|
||||
_fill_data(cfdata); |
||||
o = e_widget_list_add(evas, 0, 0); |
||||
|
||||
oi = e_widget_ilist_add(evas, 48, 48); |
||||
|
||||
ob = e_icon_add(evas); |
||||
e_icon_file_set(ob, "/home/raster/C/stuff/icons/cd.png"); |
||||
e_widget_ilist_append(oi, ob, "Item 1", NULL, NULL); |
||||
ob = e_icon_add(evas); |
||||
e_icon_file_set(ob, "/home/raster/C/stuff/icons/cd.png"); |
||||
e_widget_ilist_append(oi, ob, "Item 2", NULL, NULL); |
||||
ob = e_icon_add(evas); |
||||
e_icon_file_set(ob, "/home/raster/C/stuff/icons/cd.png"); |
||||
e_widget_ilist_append(oi, ob, "Item 3 (With some very logn text after it to make it stretch out)", NULL, NULL); |
||||
ob = e_icon_add(evas); |
||||
e_icon_file_set(ob, "/home/raster/C/stuff/icons/cd.png"); |
||||
e_widget_ilist_append(oi, ob, "Item 4", NULL, NULL); |
||||
e_widget_min_size_get(oi, &wmw, &wmh); |
||||
e_widget_min_size_set(oi, wmw, 150); |
||||
|
||||
e_widget_ilist_go(oi); |
||||
e_widget_list_object_append(o, oi, 1, 1, 0.5); |
||||
/*
|
||||
of = e_widget_framelist_add(evas, _("Generic Locks"), 0); |
||||
ob = e_widget_check_add(evas, _("Lock the Window so it does only what I tell it to"), &(cfdata->do_what_i_say)); |
||||
e_widget_framelist_object_append(of, ob); |
||||
ob = e_widget_check_add(evas, _("Protect this window from me accidentally changing it"), &(cfdata->protect_from_me)); |
||||
e_widget_framelist_object_append(of, ob); |
||||
ob = e_widget_check_add(evas, _("Protect this window from being accidentally closed because it is important"), &(cfdata->important_window)); |
||||
e_widget_framelist_object_append(of, ob); |
||||
ob = e_widget_check_add(evas, _("Do not allow the border to change on this window"), &(cfdata->keep_my_border)); |
||||
e_widget_framelist_object_append(of, ob); |
||||
e_widget_list_object_append(o, of, 1, 1, 0.5); |
||||
*/ |
||||
ob = e_widget_check_add(evas, _("Remember this Border for this window next time it appears"), &(cfdata->remember_border)); |
||||
e_widget_list_object_append(o, ob, 0, 0, 1.0); |
||||
return o; |
||||
} |
@ -0,0 +1,12 @@ |
||||
/*
|
||||
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 |
||||
*/ |
||||
#ifdef E_TYPEDEFS |
||||
#else |
||||
#ifndef E_INT_BORDER_BORDER_H |
||||
#define E_INT_BORDER_BORDER_H |
||||
|
||||
EAPI void e_int_border_border(E_Border *bd); |
||||
|
||||
#endif |
||||
#endif |
@ -0,0 +1,144 @@ |
||||
/*
|
||||
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 |
||||
*/ |
||||
#include "e.h" |
||||
|
||||
typedef struct _E_Widget_Data E_Widget_Data; |
||||
struct _E_Widget_Data |
||||
{ |
||||
Evas_Object *o_widget, *o_scrollframe, *o_ilist; |
||||
}; |
||||
|
||||
static void _e_wid_del_hook(Evas_Object *obj); |
||||
static void _e_wid_focus_hook(Evas_Object *obj); |
||||
static void _e_wid_cb_scrollframe_resize(void *data, Evas *e, Evas_Object *obj, void *event_info); |
||||
static void _e_wid_cb_item_sel(void *data, void *data2); |
||||
static void _e_wid_focus_steal(void *data, Evas *e, Evas_Object *obj, void *event_info); |
||||
|
||||
/* externally accessible functions */ |
||||
Evas_Object * |
||||
e_widget_ilist_add(Evas *evas, int icon_w, int icon_h) |
||||
{ |
||||
Evas_Object *obj, *o; |
||||
E_Widget_Data *wd; |
||||
Evas_Coord mw, mh; |
||||
|
||||
obj = e_widget_add(evas); |
||||
|
||||
e_widget_del_hook_set(obj, _e_wid_del_hook); |
||||
e_widget_focus_hook_set(obj, _e_wid_focus_hook); |
||||
wd = calloc(1, sizeof(E_Widget_Data)); |
||||
e_widget_data_set(obj, wd); |
||||
|
||||
o = e_scrollframe_add(evas); |
||||
wd->o_scrollframe = o; |
||||
evas_object_show(o); |
||||
e_widget_sub_object_add(obj, o); |
||||
e_widget_resize_object_set(obj, o); |
||||
evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN, _e_wid_focus_steal, obj); |
||||
|
||||
o = e_ilist_add(evas); |
||||
wd->o_ilist = o; |
||||
e_ilist_icon_size_set(o, icon_w, icon_h); |
||||
evas_object_event_callback_add(wd->o_scrollframe, EVAS_CALLBACK_RESIZE, _e_wid_cb_scrollframe_resize, o); |
||||
e_scrollframe_child_set(wd->o_scrollframe, o); |
||||
e_widget_sub_object_add(obj, o); |
||||
evas_object_show(o); |
||||
|
||||
evas_object_resize(obj, 32, 32); |
||||
e_widget_min_size_set(obj, 32, 32); |
||||
// edje_object_size_min_calc(wd->o_frame, &mw, &mh);
|
||||
// e_widget_min_size_set(obj, mw, mh);
|
||||
|
||||
return obj; |
||||
} |
||||
|
||||
void |
||||
e_widget_ilist_append(Evas_Object *obj, Evas_Object *icon, char *label, void (*func) (void *data), void *data) |
||||
{ |
||||
E_Widget_Data *wd; |
||||
Evas_Coord mw, mh, vw, vh, w, h; |
||||
|
||||
wd = e_widget_data_get(obj); |
||||
e_ilist_append(wd->o_ilist, icon, label, _e_wid_cb_item_sel, wd, data); |
||||
if (icon) evas_object_show(icon); |
||||
e_ilist_min_size_get(wd->o_ilist, &mw, &mh); |
||||
evas_object_resize(wd->o_ilist, mw, mh); |
||||
e_scrollframe_child_viewport_size_get(wd->o_scrollframe, &vw, &vh); |
||||
evas_object_geometry_get(wd->o_scrollframe, NULL, NULL, &w, &h); |
||||
if (mw > vw) |
||||
{ |
||||
Evas_Coord wmw, wmh; |
||||
|
||||
e_widget_min_size_get(obj, &wmw, &wmh); |
||||
e_widget_min_size_set(obj, mw + (w - vw), wmh); |
||||
} |
||||
} |
||||
|
||||
void |
||||
e_widget_ilist_go(Evas_Object *obj) |
||||
{ |
||||
E_Widget_Data *wd; |
||||
|
||||
wd = e_widget_data_get(obj); |
||||
wd->o_widget = obj; |
||||
} |
||||
|
||||
static void |
||||
_e_wid_del_hook(Evas_Object *obj) |
||||
{ |
||||
E_Widget_Data *wd; |
||||
|
||||
wd = e_widget_data_get(obj); |
||||
free(wd); |
||||
} |
||||
|
||||
static void |
||||
_e_wid_focus_hook(Evas_Object *obj) |
||||
{ |
||||
E_Widget_Data *wd; |
||||
|
||||
wd = e_widget_data_get(obj); |
||||
if (e_widget_focus_get(obj)) |
||||
{ |
||||
edje_object_signal_emit(e_scrollframe_edje_object_get(wd->o_scrollframe), "focus_in", ""); |
||||
evas_object_focus_set(wd->o_ilist, 1); |
||||
} |
||||
else |
||||
{ |
||||
edje_object_signal_emit(e_scrollframe_edje_object_get(wd->o_scrollframe), "focus_out", ""); |
||||
evas_object_focus_set(wd->o_ilist, 0); |
||||
} |
||||
} |
||||
|
||||
static void |
||||
_e_wid_cb_scrollframe_resize(void *data, Evas *e, Evas_Object *obj, void *event_info) |
||||
{ |
||||
Evas_Coord mw, mh, vw, vh, w, h; |
||||
|
||||
e_scrollframe_child_viewport_size_get(obj, &vw, &vh); |
||||
e_ilist_min_size_get(data, &mw, &mh); |
||||
evas_object_geometry_get(data, NULL, NULL, &w, &h); |
||||
if (vw >= mw) |
||||
{ |
||||
if (w != vw) evas_object_resize(data, vw, h); |
||||
} |
||||
} |
||||
|
||||
static void |
||||
_e_wid_cb_item_sel(void *data, void *data2) |
||||
{ |
||||
E_Widget_Data *wd; |
||||
Evas_Coord x, y, w, h; |
||||
|
||||
wd = data; |
||||
e_ilist_selected_geometry_get(wd->o_ilist, &x, &y, &w, &h); |
||||
e_scrollframe_child_region_show(wd->o_scrollframe, x, y, w, h); |
||||
if (wd->o_widget) e_widget_change(wd->o_widget); |
||||
} |
||||
|
||||
static void |
||||
_e_wid_focus_steal(void *data, Evas *e, Evas_Object *obj, void *event_info) |
||||
{ |
||||
e_widget_focus_steal(data); |
||||
} |
@ -0,0 +1,14 @@ |
||||
/*
|
||||
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 |
||||
*/ |
||||
#ifdef E_TYPEDEFS |
||||
#else |
||||
#ifndef E_WIDGET_ILIST_H |
||||
#define E_WIDGET_ILIST_H |
||||
|
||||
EAPI Evas_Object *e_widget_ilist_add(Evas *evas, int icon_w, int icon_h); |
||||
EAPI void e_widget_ilist_append(Evas_Object *obj, Evas_Object *icon, char *label, void (*func) (void *data), void *data); |
||||
EAPI void e_widget_ilist_go(Evas_Object *obj); |
||||
|
||||
#endif |
||||
#endif |
Loading…
Reference in new issue