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

Reply via email to