Enlightenment CVS committal Author : raster Project : e17 Module : libs/edje
Dir : e17/libs/edje/src/lib Modified Files: Makefile.am edje_container.c Added Files: edje_container.h Log Message: more container fillage =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/Makefile.am,v retrieving revision 1.18 retrieving revision 1.19 diff -u -3 -r1.18 -r1.19 --- Makefile.am 29 Jun 2004 07:23:15 -0000 1.18 +++ Makefile.am 16 Aug 2004 05:09:58 -0000 1.19 @@ -38,6 +38,7 @@ edje_util.c \ edje_var.c \ edje_container.c \ +edje_container.h \ edje_message_queue.c \ edje_private.h =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_container.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- edje_container.c 27 Jul 2004 19:05:46 -0000 1.4 +++ edje_container.c 16 Aug 2004 05:09:58 -0000 1.5 @@ -1,136 +1,26 @@ #include "Edje.h" #include "edje_private.h" - -/* All items are virtual constructs that provide Evas_Objects at some point. - * Edje may move, resize, show, hide, clip, unclip, raise, lower etc. this - * item AFTER it calls the item's add() method and before it calls the del() - * method. Edje may call add() and del() at any time as often items may not - * be visible and so may not need to exist at all - they are merely information - * used for layout, and nothing more. this helps save cpu and memory keeping - * things responsive for BIG lists of items. you create an item from an item - * class then ask that item to be appended/prepended etc. to the container. - */ -typedef struct _Edje_Item Edje_Item; -typedef struct _Edje_Item_Class Edje_Item_Class; - -struct _Edje_Item_Class -{ - Evas_Object *(*add) (Edje_Item *ei); - void (*del) (Edje_Item *ei); - void (*select) (Edje_Item *ei); - void (*deselect) (Edje_Item *ei); - void (*focus) (Edje_Item *ei); - void (*unfocus) (Edje_Item *ei); -}; - -/* private */ -struct _Edje_Item -{ - Edje_Item_Class *class; - void *class_data; - - unsigned char accessible : 1; - Evas_Object *object; - Evas_Object *underlay_object; -}; - -/* here is an item for a vertical list - with 1 or more columns. this has 3 */ -/* just rotate for a horizontal list */ - -/* - * COL 0 COL 1 COL 2 - * - * +-----------------------------+ +-------+ +----------------+ - * | pad_top | | | | | - * | pad_left OBJECT pad_right | | OBJ | | OBJECT | ROW 0 - * | pad_bottom | | | | | - * +-----------------------------+ +-------+ +----------------+ - * /\ /|\ - * space_row || +-- space_col - * \/ - * +-----------------------------+ +-------+ +----------------+ - * | | | | | | - * | | | | | | ROW 1 - * | | | | | | - * +-----------------------------+ +-------+ +----------------+ - * - * spacer object: - * 1 edje object goes inbetween each row as a spacer object (opt) - * 1 edje object goes inbetween each column as a spacer object (opt) - * - * surround object: - * 1 edje object goes around each item - item swallowed into "item" part (opt) - * if no "item" part then just underlay it - * on select send "select" "" signal - * on unselect send "unselect" "" signal - * on focus send "focus" "" signal - * on unfocus send "unfocus" signal - * - * if any list item/cell is an edje object emit this to them too. - * - * also call callbacks. - * if a surround object emits such a signal itself then call callbacks too - * - * only 1 or 0 items can be focused - * disabled items cannot be focused or selected/deselected - * - * container accepts: - * { theme sets these effectively } - * set edje it is part of - * set collection id for col spacer - * set collection id for row spacer - * set row space - * set col space - * set item padding - * set collection id for surround object - * - * { theme and app can both do this. theme has to do via embryo } - * clear list - * append item - * prepend item - * insert item before item - * insert item after item - * get item count - * get first item - * get last item - * get item N - * get item before item - * get item after item - * select item - * unselect item - * unselect all items - * select all items - * get selected item list - * focus item - * unfocus item - * focus next item - * focus prev item - * get focused item - * enable item - * disable item - * get item pos (along list) (0.0 - 1.0 1.0 = end of list) - * get item span (0.0 - 1.0 1.0 == whole list height) - * jump to pos - * get list min width - * get list min height - * get view percentage - * - * notes: - * - * dnd of list items within lthe list and outside of it ??? - * - */ - -/* create and destroy virtual items */ +#include "edje_container.h" Edje_Item * edje_item_add(Edje_Item_Class *cl, void *data) { + Edje_Item *ei; + + ei = calloc(sizeof(Edje_Item), 1); + + ei->class = cl; + ei->class_data = data; + + return ei; } void edje_item_del(Edje_Item *ei) { + if (ei->object) evas_object_del(ei->object); + if (ei->overlay_object) evas_object_del(ei->overlay_object); + free(ei); } /* an arbitary data pointer to use to track other data */ @@ -138,105 +28,188 @@ void edje_item_data_set(Edje_Item *ei, void *data) { + ei->data = data; } void * edje_item_data_get(Edje_Item *ei) { + return ei->data; } /* this object covers the entire item */ void edje_item_overlay_object_set(Edje_Item *ei, Evas_Object *obj) { + if (ei->overlay_object) + { + /* FIXME: if it changed - remove...*/ + } + ei->overlay_object = obj; + if (ei->sd) + evas_object_smart_member_add(((Smart_Data *)(ei->sd))->smart_obj, obj); } Evas_Object * edje_item_overlay_object_get(Edje_Item *ei) { + return ei->overlay_object; } /* this object goes under entire item */ void edje_item_object_set(Edje_Item *ei, Evas_Object *obj) { + if (ei->object) + { + /* FIXME: if it changed - remove...*/ + } + ei->object = obj; + if (ei->sd) + evas_object_smart_member_add(((Smart_Data *)(ei->sd))->smart_obj, obj); } Evas_Object * edje_item_object_get(Edje_Item *ei) { + return ei->object; } /* optionally you can manage each column's object yourself OR let edje do it */ void edje_item_object_column_set(Edje_Item *ei, int col, Evas_Object *obj) { + if (ei->cells_num <= (col + 1)) + { + /* FIXME: unsafe realloc */ + ei->cells = realloc(ei->cells, sizeof(Edje_Item_Cell) * col); + ei->cells_num = col + 1; + } + ei->cells[col].obj = obj; } Evas_Object * edje_item_object_column_get(Edje_Item *ei, int col) { + if (ei->cells_num <= (col + 1)) return NULL; + return ei->cells[col].obj; } /* query the item for the items preferred co-ords */ void -edje_tiem_geometry_get(Edje_Item *ei, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h) +edje_item_geometry_get(Edje_Item *ei, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h) { + if (!ei->sd) + { + if (x) *x = 0; + if (y) *y = 0; + if (w) *w = 0; + if (h) *h = 0; + return; + } + if (x) *x = ((Smart_Data *)(ei->sd))->x; + if (y) *y = ((Smart_Data *)(ei->sd))->y + ei->y; + if (w) *w = ((Smart_Data *)(ei->sd))->w; + if (h) *h = ei->h; } /* freeze and thaw items if u are about to do a bunch of changes */ int edje_item_freeze(Edje_Item *ei) { + ei->freeze++; + return ei->freeze; } int edje_item_thaw(Edje_Item *ei) { + ei->freeze--; + if (ei->freeze > 0) return ei->freeze; + if (!ei->sd) return ei->freeze; + if (ei->recalc) + { + /* FIXME: recalc item */ + } + return ei->freeze; } /* column info */ void edje_item_column_size_set(Edje_Item *ei, int col, Evas_Coord minw, Evas_Coord maxw, Evas_Coord minh, Evas_Coord maxh) { + if (ei->cells_num <= (col + 1)) + { + /* FIXME: unsafe realloc */ + ei->cells = realloc(ei->cells, sizeof(Edje_Item_Cell) * col); + ei->cells_num = col + 1; + } + if ((ei->cells[col].minw == minw) && + (ei->cells[col].minh == minh) && + (ei->cells[col].maxw == maxw) && + (ei->cells[col].maxh == maxh)) return; + ei->cells[col].minw = minw; + ei->cells[col].minh = minh; + ei->cells[col].maxw = maxw; + ei->cells[col].maxh = maxh; + ei->recalc = 1; + if (ei->freeze > 0) return; + /* FIXME: recalc item */ } void edje_item_column_size_get(Edje_Item *ei, int col, Evas_Coord *minw, Evas_Coord *maxw, Evas_Coord *minh, Evas_Coord *maxh) { + if (ei->cells_num <= (col + 1)) + { + if (minw) *minw = 0; + if (minh) *minh = 0; + if (maxw) *maxw = -1; + if (maxh) *maxh = -1; + } + if (minw) *minw = ei->cells[col].minw; + if (minh) *minh = ei->cells[col].minh; + if (maxw) *maxw = ei->cells[col].maxw; + if (maxh) *maxh = ei->cells[col].maxh; } /* selection stuff */ void edje_item_select(Edje_Item *ei) { + ei->selected = 1; } void edje_item_unselect(Edje_Item *ei) { + ei->selected = 0; } /* focus stuff - only 1 can be focuesd */ void edje_item_focus(Edje_Item *ei) { + ei->focused = 1; } void edje_item_unfocus(Edje_Item *ei) { + ei->focused = 0; } /* disable/enable stuff - stops focus and selection working on these items */ void edje_item_enable(Edje_Item *ei) { + ei->disabled = 0; } void edje_item_disable(Edje_Item *ei) { + ei->disabled = 1; } /* item utils */ @@ -265,11 +238,6 @@ { } -void -edje_item_geometry_get(Edje_Item *ei, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h) -{ -} - double edje_item_position_get(Edje_Item *ei) { @@ -283,165 +251,203 @@ /***** container calls *****/ void +edje_container_item_append(Evas_Object *obj, Edje_Item *ei) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; +} + +void +edje_container_item_prepend(Evas_Object *obj, Edje_Item *ei) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; +} + +void +edje_container_item_append_relative(Evas_Object *obj, Edje_Item *ei, Edje_Item *rel) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; +} + +void +edje_container_item_prepend_relative(Evas_Object *obj, Edje_Item *ei, Edje_Item *rel) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; +} + +void +edje_container_item_insert(Evas_Object *obj, Edje_Item *ei, int n) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; +} + +void +edje_container_item_remove(Evas_Object *obj, Edje_Item *ei) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; +} + +void edje_container_columns_set(Evas_Object *obj, int cols) { + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; } int edje_container_columns_get(Evas_Object *obj) { + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; } void edje_container_min_size_get(Evas_Object *obj, Evas_Coord *minw, Evas_Coord *minh) { + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; } void edje_container_max_size_get(Evas_Object *obj, Evas_Coord *minw, Evas_Coord *minh) { + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; +} + +void +edje_containter_align_set(Evas_Object *obj, double halign, double valign) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; +} + +void +edje_container_align_get(Evas_Object *obj, double *halign, double *valign) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; } int edje_container_count_get(Evas_Object *obj) { + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; } Edje_Item * edje_container_item_first_get(Evas_Object *obj) { + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; } Edje_Item * edje_container_item_last_get(Evas_Object *obj) { + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; } Edje_Item * -edje_container_item_n_get(Evas_Object *obj, int n) +edje_container_item_nth_get(Evas_Object *obj, int n) { + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; } void edje_container_homogenous_size_set(Evas_Object *obj, int homog) { + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; } int edje_container_homogenous_size_get(Evas_Object *obj) { + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; } void edje_container_orientation_set(Evas_Object *obj, int orient) { + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; } int edje_container_orientation_get(Evas_Object *obj) { + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; } void edje_container_scroll_set(Evas_Object *obj, double pos, double shift) { + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; } void edje_container_scroll_get(Evas_Object *obj, double *pos, double *shift) { + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; } -#define E_SMART_OBJ_GET(smart, o, type) \ - { \ - char *_e_smart_str; \ - \ - if (!o) return; \ - smart = evas_object_smart_data_get(o); \ - if (!smart) return; \ - _e_smart_str = (char *)evas_object_type_get(o); \ - if (!_e_smart_str) return; \ - if (strcmp(_e_smart_str, type)) return; \ - } - -#define E_SMART_OBJ_GET_RETURN(smart, o, type, ret) \ - { \ - char *_e_smart_str; \ - \ - if (!o) return ret; \ - smart = evas_object_smart_data_get(o); \ - if (!smart) return ret; \ - _e_smart_str = (char *)evas_object_type_get(o); \ - if (!_e_smart_str) return ret; \ - if (strcmp(_e_smart_str, type)) return ret; \ - } - -#define E_OBJ_NAME "edje_container_object" - -typedef struct _Smart_Data Smart_Data; -typedef struct _Smart_Item Smart_Item; -typedef struct _Smart_Column Smart_Column; - -struct _Smart_Data -{ - int layout; - Evas_List *children; - struct { - int w, h; - } min, max; -}; - -struct _Smart_Item -{ - Evas_Object *container; - Evas_Object *obj; -}; - -struct _Smart_Column -{ - int min, max; -}; - -#define EDJE_LAYOUT_NONE 0 - -/* the following are "linear" layout systems */ - -/* H & V LIST pack all items at their minimum size - no expanding in the lists - * direction (lets say height), BUT all items are expanded to fill the "width" - * of the list. if an item is too small to fit the width, the list object will - * call a "min_size_change" callback indicating to the parent/swallower that - * the parent should revise its use/view of this object. this is intended for - * large lists of items - like a list of files, or titles etc. this allows - * for each item to have multiple columns. each column may be any size, with - * the minimu size being the sum of all minimum column widths. as more items - * are added column widths may be adjusted and all items told of this - * adjustment - */ -#define EDJE_LAYOUT_VLIST 1 -#define EDJE_LAYOUT_HLIST 2 -/* H & V BOX pack items and may or may not expand an item in any direction and - * may align an item smaller than its allocated space in a certain way. they - * dont know about columns etc. like lists. - */ -#define EDJE_LAYOUT_VBOX 3 -#define EDJE_LAYOUT_HBOX 4 -/* H & V flow are like "file manager" views you see in explorer etc. wehere - * items "line wrap" as they go along horizontally (or vertizally) as needed - */ -#define EDJE_LAYOUT_VFLOW 5 -#define EDJE_LAYOUT_HFLOW 6 - -/* the following are "2 dimensional" layout systems */ - -/* tables are full 2-dimensional layouts which dont really have append and - * prepend semantics... this will need working on later for 2d layouts. dont - * worry about these yet - but keep this as a marker for things to do later - */ -#define EDJE_LAYOUT_TABLE 7 -/* count - */ -#define EDJE_LAYOUT_COUNT 8 - static void _smart_init(void); static void _smart_add(Evas_Object * obj); static void _smart_del(Evas_Object * obj); @@ -501,6 +507,7 @@ if (!sd) return; // evas_object_smart_member_add(sd->obj, obj); evas_object_smart_data_set(obj, sd); + sd->smart_obj = obj; } static void ------------------------------------------------------- SF.Net email is sponsored by Shop4tech.com-Lowest price on Blank Media 100pk Sonic DVD-R 4x for only $29 -100pk Sonic DVD+R for only $33 Save 50% off Retail on Ink & Toner - Free Shipping and Free Gift. http://www.shop4tech.com/z/Inkjet_Cartridges/9_108_r285 _______________________________________________ enlightenment-cvs mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs