Enlightenment CVS committal

Author  : moom
Project : e17
Module  : libs/etk

Dir     : e17/libs/etk/src/lib


Modified Files:
        etk_button.c etk_menu_item.c etk_stock.c etk_stock.h 
        etk_tree2.c etk_tree2_model.c etk_tree2_model.h 


Log Message:
* [Tree2] More work on model combination. It should work pretty well now
* [Tree2] Image model: The same image model can now be used to load 
image from various sources: image files, edje files and eet files.

Still need more work though..


===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_button.c,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -3 -r1.31 -r1.32
--- etk_button.c        30 Dec 2006 22:11:49 -0000      1.31
+++ etk_button.c        3 Jan 2007 23:35:25 -0000       1.32
@@ -259,7 +259,7 @@
 void etk_button_set_from_stock(Etk_Button *button, Etk_Stock_Id stock_id)
 {
    Etk_Widget *image;
-   char *label;
+   const char *label;
 
    if (!button)
       return;
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_menu_item.c,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -3 -r1.25 -r1.26
--- etk_menu_item.c     6 Oct 2006 17:04:14 -0000       1.25
+++ etk_menu_item.c     3 Jan 2007 23:35:25 -0000       1.26
@@ -182,7 +182,7 @@
  */
 void etk_menu_item_set_from_stock(Etk_Menu_Item *menu_item, Etk_Stock_Id 
stock_id)
 {
-   char *label;
+   const char *label;
 
    if (!menu_item)
       return;
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_stock.c,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -3 -r1.14 -r1.15
--- etk_stock.c 14 Aug 2006 13:14:25 -0000      1.14
+++ etk_stock.c 3 Jan 2007 23:35:25 -0000       1.15
@@ -247,7 +247,7 @@
  * @param size the size of the stock icon
  * @return Returns the edje key corresponding to the stock id
  */
-char *etk_stock_key_get(Etk_Stock_Id stock_id, Etk_Stock_Size size)
+const char *etk_stock_key_get(Etk_Stock_Id stock_id, Etk_Stock_Size size)
 {
    if (stock_id < 0 || stock_id >= ETK_NUM_STOCK_IDS)
       return NULL;
@@ -265,7 +265,7 @@
  * @param stock_id a stock id
  * @return Returns the label corresponding to the stock id
  */
-char *etk_stock_label_get(Etk_Stock_Id stock_id)
+const char *etk_stock_label_get(Etk_Stock_Id stock_id)
 {
    if (stock_id < 0 || stock_id >= ETK_NUM_STOCK_IDS)
       return NULL;
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_stock.h,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -3 -r1.13 -r1.14
--- etk_stock.h 14 Aug 2006 13:14:25 -0000      1.13
+++ etk_stock.h 3 Jan 2007 23:35:25 -0000       1.14
@@ -244,8 +244,8 @@
    ETK_NUM_STOCK_IDS
 } Etk_Stock_Id;
 
-char *etk_stock_key_get(Etk_Stock_Id stock_id, Etk_Stock_Size size);
-char *etk_stock_label_get(Etk_Stock_Id stock_id);
+const char *etk_stock_key_get(Etk_Stock_Id stock_id, Etk_Stock_Size size);
+const char *etk_stock_label_get(Etk_Stock_Id stock_id);
 
 /** @} */
 
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_tree2.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -3 -r1.7 -r1.8
--- etk_tree2.c 3 Jan 2007 18:10:11 -0000       1.7
+++ etk_tree2.c 3 Jan 2007 23:35:25 -0000       1.8
@@ -28,6 +28,7 @@
 #define MAX_OBJECTS_PER_MODEL 5
 #define CELL_HMARGINS 4
 #define CELL_VMARGINS 2
+#define MODEL_INTERSPACE 8
 
 
 typedef struct Etk_Tree2_Cell_Objects
@@ -524,6 +525,7 @@
    }
    
    col->models[col->num_models] = model;
+   model->tree = col->tree;
    model->col = col;
    col->num_models++;
 }
@@ -1920,9 +1922,10 @@
    Evas_List *prev_visible_rows;
    Evas_List *new_visible_rows;
    Evas_List *l;
+   Evas *evas;
    int i, j, k;
    
-   if (!(tree = TREE_GET(widget)))
+   if (!(tree = TREE_GET(widget)) || !(evas = 
etk_widget_toplevel_evas_get(ETK_WIDGET(tree))))
       return;
    
    /* First, we calculate the size of the visible cols */
@@ -2186,7 +2189,7 @@
                      if (col->models[j]->render)
                      {
                         col->models[j]->render(col->models[j], row, 
model_geometry,
-                           row->cells_data[i][j], 
row_object->cells[i].objects[j]);
+                           row->cells_data[i][j], 
row_object->cells[i].objects[j], evas);
                         
                         if (col->models[j]->width_get)
                         {
@@ -2196,6 +2199,9 @@
                         else
                            w = 0;
                         
+                        if ((j + 1) != col->num_models)
+                           w += MODEL_INTERSPACE;
+                        
                         model_geometry.x += w;
                         model_geometry.w -= w;
                         total_width += w;
@@ -2203,7 +2209,7 @@
                   }
                   
                   /* Align the cell objects */
-                  if (col->align != 0.0)
+                  if (0 && col->align != 0.0)
                   {
                      for (j = 0; j < col->num_models; j++)
                      {
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_tree2_model.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- etk_tree2_model.c   3 Jan 2007 18:10:11 -0000       1.2
+++ etk_tree2_model.c   3 Jan 2007 23:35:25 -0000       1.3
@@ -2,210 +2,219 @@
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
-#include <Edje.h>
 #include <Evas.h>
-#include "etk_utils.h"
+#include <Edje.h>
 #include "etk_tree2.h"
 #include "etk_theme.h"
+#include "etk_utils.h"
 
-typedef struct _Etk_Tree2_Model_Image
-{
-   Etk_Tree2_Model model;
-   Etk_Tree2_Model_Image_Type image_type;
-} Etk_Tree2_Model_Image;
-
-typedef struct _Etk_Tree2_Model_Image_Data
+/* Data associated to the "image" model */
+typedef struct Etk_Tree2_Model_Image_Data
 {
    char *filename;
-   char *edje_group;
+   char *key;
+   enum
+   {
+      ETK_TREE2_MODEL_UNKNOWN_YET,
+      ETK_TREE2_MODEL_NORMAL,
+      ETK_TREE2_MODEL_EDJE,
+      ETK_TREE2_MODEL_NOT_FOUND
+   } type;
 } Etk_Tree2_Model_Image_Data;
 
-typedef struct _Etk_Tree2_Model_Icon_Text
-{
-   Etk_Tree2_Model model;
-   Etk_Tree2_Model_Image_Type icon_type;
-   int icon_width;
-} Etk_Tree2_Model_Icon_Text;
-
-typedef struct _Etk_Tree2_Model_Progressbar_Data
+/* Data associated to the "progressbar" model */
+typedef struct Etk_Tree2_Model_Progressbar_Data
 {
    double fraction;
    char *text;
 } Etk_Tree2_Model_Progressbar_Data;
 
+
 /* Text model */
-static void etk_tree2_model_text_cell_data_free(Etk_Tree2_Model *model, void 
*cell_data);
-static void etk_tree2_model_text_cell_data_set(Etk_Tree2_Model *model, void 
*cell_data, va_list *args);
-static void etk_tree2_model_text_cell_data_get(Etk_Tree2_Model *model, void 
*cell_data, va_list *args);
-static void etk_tree2_model_text_objects_create(Etk_Tree2_Model *model, 
Evas_Object **cell_objects, Evas *evas);
-static void etk_tree2_model_text_render(Etk_Tree2_Model *model, Etk_Tree2_Row 
*row, Etk_Geometry geometry, void *cell_data, Evas_Object **cell_objects);
-/* Int model */
-static void etk_tree2_model_int_cell_data_set(Etk_Tree2_Model *model, void 
*cell_data, va_list *args);
-static void etk_tree2_model_int_cell_data_get(Etk_Tree2_Model *model, void 
*cell_data, va_list *args);
-static void etk_tree2_model_int_render(Etk_Tree2_Model *model, Etk_Tree2_Row 
*row, Etk_Geometry geometry, void *cell_data, Evas_Object **cell_objects);
+static void _text_cell_data_free(Etk_Tree2_Model *model, void *cell_data);
+static void _text_cell_data_set(Etk_Tree2_Model *model, void *cell_data, 
va_list *args);
+static void _text_cell_data_get(Etk_Tree2_Model *model, void *cell_data, 
va_list *args);
+static void _text_objects_create(Etk_Tree2_Model *model, Evas_Object 
**cell_objects, Evas *evas);
+static void _text_render(Etk_Tree2_Model *model, Etk_Tree2_Row *row, 
Etk_Geometry geometry, void *cell_data, Evas_Object **cell_objects, Evas *evas);
+static int _text_width_get(Etk_Tree2_Model *model, void *cell_data, 
Evas_Object **cell_objects);
+
+/* Integer model */
+static void _int_cell_data_set(Etk_Tree2_Model *model, void *cell_data, 
va_list *args);
+static void _int_cell_data_get(Etk_Tree2_Model *model, void *cell_data, 
va_list *args);
+static void _int_render(Etk_Tree2_Model *model, Etk_Tree2_Row *row, 
Etk_Geometry geometry, void *cell_data, Evas_Object **cell_objects, Evas *evas);
+
 /* Double model */
-static void etk_tree2_model_double_cell_data_set(Etk_Tree2_Model *model, void 
*cell_data, va_list *args);
-static void etk_tree2_model_double_cell_data_get(Etk_Tree2_Model *model, void 
*cell_data, va_list *args);
-static void etk_tree2_model_double_render(Etk_Tree2_Model *model, 
Etk_Tree2_Row *row, Etk_Geometry geometry, void *cell_data, Evas_Object 
**cell_objects);
+static void _double_cell_data_set(Etk_Tree2_Model *model, void *cell_data, 
va_list *args);
+static void _double_cell_data_get(Etk_Tree2_Model *model, void *cell_data, 
va_list *args);
+static void _double_render(Etk_Tree2_Model *model, Etk_Tree2_Row *row, 
Etk_Geometry geometry, void *cell_data, Evas_Object **cell_objects, Evas *evas);
+
 /* Image model */
-static void etk_tree2_model_image_cell_data_free(Etk_Tree2_Model *model, void 
*cell_data);
-static void etk_tree2_model_image_cell_data_set(Etk_Tree2_Model *model, void 
*cell_data, va_list *args);
-static void etk_tree2_model_image_cell_data_get(Etk_Tree2_Model *model, void 
*cell_data, va_list *args);
-static void etk_tree2_model_image_objects_create(Etk_Tree2_Model *model, 
Evas_Object **cell_objects, Evas *evas);
-static void etk_tree2_model_image_render(Etk_Tree2_Model *model, Etk_Tree2_Row 
*row, Etk_Geometry geometry, void *cell_data, Evas_Object **cell_objects);
+static void _image_cell_data_free(Etk_Tree2_Model *model, void *cell_data);
+static void _image_cell_data_set(Etk_Tree2_Model *model, void *cell_data, 
va_list *args);
+static void _image_cell_data_get(Etk_Tree2_Model *model, void *cell_data, 
va_list *args);
+static void _image_render(Etk_Tree2_Model *model, Etk_Tree2_Row *row, 
Etk_Geometry geometry, void *cell_data, Evas_Object **cell_objects, Evas *evas);
+static int _image_width_get(Etk_Tree2_Model *model, void *cell_data, 
Evas_Object **cell_objects);
+
 /* Checkbox model */
-static void etk_tree2_model_checkbox_cell_data_set(Etk_Tree2_Model *model, 
void *cell_data, va_list *args);
-static void etk_tree2_model_checkbox_cell_data_get(Etk_Tree2_Model *model, 
void *cell_data, va_list *args);
-static void etk_tree2_model_checkbox_objects_create(Etk_Tree2_Model *model, 
Evas_Object **cell_objects, Evas *evas);
-static void etk_tree2_model_checkbox_render(Etk_Tree2_Model *model, 
Etk_Tree2_Row *row, Etk_Geometry geometry, void *cell_data, Evas_Object 
**cell_objects);
-static void etk_tree2_model_checkbox_clicked_cb(void *data, Evas *e, 
Evas_Object *obj, void *event_info);
+static void _checkbox_cell_data_set(Etk_Tree2_Model *model, void *cell_data, 
va_list *args);
+static void _checkbox_cell_data_get(Etk_Tree2_Model *model, void *cell_data, 
va_list *args);
+static void _checkbox_objects_create(Etk_Tree2_Model *model, Evas_Object 
**cell_objects, Evas *evas);
+static void _checkbox_render(Etk_Tree2_Model *model, Etk_Tree2_Row *row, 
Etk_Geometry geometry, void *cell_data, Evas_Object **cell_objects, Evas *evas);
+static int _checkbox_width_get(Etk_Tree2_Model *model, void *cell_data, 
Evas_Object **cell_objects);
+static void _checkbox_clicked_cb(void *data, Evas *e, Evas_Object *obj, void 
*event_info);
+
 /* Progressbar model */
-static void etk_tree2_model_progress_bar_cell_data_free(Etk_Tree2_Model 
*model, void *cell_data);
-static void etk_tree2_model_progress_bar_cell_data_set(Etk_Tree2_Model *model, 
void *cell_data, va_list *args);
-static void etk_tree2_model_progress_bar_cell_data_get(Etk_Tree2_Model *model, 
void *cell_data, va_list *args);
-static void etk_tree2_model_progress_bar_objects_create(Etk_Tree2_Model 
*model, Evas_Object **cell_objects, Evas *evas);
-static void etk_tree2_model_progress_bar_render(Etk_Tree2_Model *model, 
Etk_Tree2_Row *row, Etk_Geometry geometry, void *cell_data, Evas_Object 
**cell_objects);
+static void _progress_bar_cell_data_free(Etk_Tree2_Model *model, void 
*cell_data);
+static void _progress_bar_cell_data_set(Etk_Tree2_Model *model, void 
*cell_data, va_list *args);
+static void _progress_bar_cell_data_get(Etk_Tree2_Model *model, void 
*cell_data, va_list *args);
+static void _progress_bar_objects_create(Etk_Tree2_Model *model, Evas_Object 
**cell_objects, Evas *evas);
+static void _progress_bar_render(Etk_Tree2_Model *model, Etk_Tree2_Row *row, 
Etk_Geometry geometry, void *cell_data, Evas_Object **cell_objects, Evas *evas);
+static int _progress_bar_width_get(Etk_Tree2_Model *model, void *cell_data, 
Evas_Object **cell_objects);
 
+
+/**************************
+ *
+ * Implementation
+ *
+ **************************/
+ 
 /**
- * @brief Creates a model of column whose cells contain a text
- * @param tree a tree
+ * @brief Creates a tree model that displays a text
  * @return Returns the new model
- * @note You don't need to free it with etk_tree2_model_free() if you use it 
in a tree. It will be freed when the tree is destroyed
+ * @note You don't need to free it with etk_tree2_model_free() if is 
associtated to a column.
+ * It will be freed automatically when the column is destroyed
  */
-Etk_Tree2_Model *etk_tree2_model_text_new(Etk_Tree2 *tree)
+Etk_Tree2_Model *etk_tree2_model_text_new(void)
 {
-   Etk_Tree2_Model *tree_model;
+   Etk_Tree2_Model *model;
    
-   tree_model = calloc(1, sizeof(Etk_Tree2_Model));
+   model = calloc(1, sizeof(Etk_Tree2_Model));
    
-   tree_model->tree = tree;
-   tree_model->cell_data_size = sizeof(char *);
-   tree_model->cell_data_free = etk_tree2_model_text_cell_data_free;
-   tree_model->cell_data_set = etk_tree2_model_text_cell_data_set;
-   tree_model->cell_data_get = etk_tree2_model_text_cell_data_get;
-   tree_model->objects_create = etk_tree2_model_text_objects_create;
-   tree_model->render = etk_tree2_model_text_render;
+   model->cell_data_size = sizeof(char *);
+   model->cell_data_free = _text_cell_data_free;
+   model->cell_data_set = _text_cell_data_set;
+   model->cell_data_get = _text_cell_data_get;
+   model->objects_create = _text_objects_create;
+   model->render = _text_render;
+   model->width_get = _text_width_get;
    
-   return tree_model;
+   return model;
 }
 
 /**
- * @brief Creates a model of column whose cells contain an integer
- * @param tree a tree
+ * @brief Creates a tree model that displays an integer value
  * @return Returns the new model
- * @note You don't need to free it with etk_tree2_model_free() if you use it 
in a tree. It will be freed when the tree is destroyed
+ * @note You don't need to free it with etk_tree2_model_free() if is 
associtated to a column.
+ * It will be freed automatically when the column is destroyed
  */
-Etk_Tree2_Model *etk_tree2_model_int_new(Etk_Tree2 *tree)
+Etk_Tree2_Model *etk_tree2_model_int_new(void)
 {
-   Etk_Tree2_Model *tree_model;
+   Etk_Tree2_Model *model;
    
-   tree_model = calloc(1, sizeof(Etk_Tree2_Model));
+   model = calloc(1, sizeof(Etk_Tree2_Model));
    
-   tree_model->tree = tree;
-   tree_model->cell_data_size = sizeof(int);
-   tree_model->cell_data_set = etk_tree2_model_int_cell_data_set;
-   tree_model->cell_data_get = etk_tree2_model_int_cell_data_get;
-   tree_model->objects_create = etk_tree2_model_text_objects_create;
-   tree_model->render = etk_tree2_model_int_render;
+   model->cell_data_size = sizeof(int);
+   model->cell_data_set = _int_cell_data_set;
+   model->cell_data_get = _int_cell_data_get;
+   model->objects_create = _text_objects_create;
+   model->render = _int_render;
+   model->width_get = _text_width_get;
    
-   return tree_model;
+   return model;
 }
 
 /**
- * @brief Creates a model of column whose cells contain a real
- * @param tree a tree
+ * @brief Creates a tree model that displays a float value
  * @return Returns the new model
- * @note You don't need to free it with etk_tree2_model_free() if you use it 
in a tree. It will be freed when the tree is destroyed
+ * @note You don't need to free it with etk_tree2_model_free() if is 
associtated to a column.
+ * It will be freed automatically when the column is destroyed
  */
-Etk_Tree2_Model *etk_tree2_model_double_new(Etk_Tree2 *tree)
+Etk_Tree2_Model *etk_tree2_model_double_new(void)
 {
-   Etk_Tree2_Model *tree_model;
+   Etk_Tree2_Model *model;
    
-   tree_model = calloc(1, sizeof(Etk_Tree2_Model));
+   model = calloc(1, sizeof(Etk_Tree2_Model));
    
-   tree_model->tree = tree;
-   tree_model->cell_data_size = sizeof(double);
-   tree_model->cell_data_set = etk_tree2_model_double_cell_data_set;
-   tree_model->cell_data_get = etk_tree2_model_double_cell_data_get;
-   tree_model->objects_create = etk_tree2_model_text_objects_create;
-   tree_model->render = etk_tree2_model_double_render;
+   model->cell_data_size = sizeof(double);
+   model->cell_data_set = _double_cell_data_set;
+   model->cell_data_get = _double_cell_data_get;
+   model->objects_create = _text_objects_create;
+   model->render = _double_render;
+   model->width_get = _text_width_get;
    
-   return tree_model;
+   return model;
 }
 
 /**
- * @brief Creates a model of column whose cells contain an image. The image 
can be loaded from a file or from an edje file
- * @param tree a tree
- * @param image_type the type of the images: ETK_TREE2_FROM_FILE if the images 
will be loaded from a file @n
- * or ETK_TREE2_FROM_EDJE if the images will be loaded from an edje file
+ * @brief Creates a tree model that displays an image
  * @return Returns the new model
- * @note You don't need to free it with etk_tree2_model_free() if you use it 
in a tree. It will be freed when the tree is destroyed
+ * @note You don't need to free it with etk_tree2_model_free() if is 
associtated to a column.
+ * It will be freed automatically when the column is destroyed
  */
-Etk_Tree2_Model *etk_tree2_model_image_new(Etk_Tree2 *tree, 
Etk_Tree2_Model_Image_Type image_type)
+Etk_Tree2_Model *etk_tree2_model_image_new(void)
 {
-   Etk_Tree2_Model *tree_model;
+   Etk_Tree2_Model *model;
    
-   tree_model = calloc(1, sizeof(Etk_Tree2_Model_Image));
+   model = calloc(1, sizeof(Etk_Tree2_Model));
    
-   tree_model->tree = tree;
-   tree_model->cell_data_size = sizeof(Etk_Tree2_Model_Image_Data);
-   tree_model->cell_data_free = etk_tree2_model_image_cell_data_free;
-   tree_model->cell_data_set = etk_tree2_model_image_cell_data_set;
-   tree_model->cell_data_get = etk_tree2_model_image_cell_data_get;
-   tree_model->objects_create = etk_tree2_model_image_objects_create;
-   tree_model->render = etk_tree2_model_image_render;
-   ((Etk_Tree2_Model_Image *)tree_model)->image_type = image_type;
+   model->cell_data_size = sizeof(Etk_Tree2_Model_Image_Data);
+   model->cell_data_free = _image_cell_data_free;
+   model->cell_data_set = _image_cell_data_set;
+   model->cell_data_get = _image_cell_data_get;
+   model->render = _image_render;
+   model->width_get = _image_width_get;
    
-   return tree_model;
+   return model;
 }
 
 /**
- * @brief Creates a model of column whose cells contain a checkbox
- * @param tree a tree
+ * @brief Creates a tree model that displays an checkbox. Clicking on the 
checkbox toggles its state
  * @return Returns the new model
- * @note You don't need to free it with etk_tree2_model_free() if you use it 
in a tree. It will be freed when the tree is destroyed
+ * @note You don't need to free it with etk_tree2_model_free() if is 
associtated to a column.
+ * It will be freed automatically when the column is destroyed
  */
-Etk_Tree2_Model *etk_tree2_model_checkbox_new(Etk_Tree2 *tree)
+Etk_Tree2_Model *etk_tree2_model_checkbox_new(void)
 {
-   Etk_Tree2_Model *tree_model;
+   Etk_Tree2_Model *model;
    
-   tree_model = calloc(1, sizeof(Etk_Tree2_Model));
+   model = calloc(1, sizeof(Etk_Tree2_Model));
    
-   tree_model->tree = tree;
-   tree_model->cell_data_size = sizeof(Etk_Bool);
-   tree_model->cell_data_set = etk_tree2_model_checkbox_cell_data_set;
-   tree_model->cell_data_get = etk_tree2_model_checkbox_cell_data_get;
-   tree_model->objects_create = etk_tree2_model_checkbox_objects_create;
-   tree_model->render = etk_tree2_model_checkbox_render;
+   model->cell_data_size = sizeof(Etk_Bool);
+   model->cell_data_set = _checkbox_cell_data_set;
+   model->cell_data_get = _checkbox_cell_data_get;
+   model->objects_create = _checkbox_objects_create;
+   model->render = _checkbox_render;
+   model->width_get = _checkbox_width_get;
    
-   return tree_model;
+   return model;
 }
 
 /**
- * @brief Creates a model of column whose cells contain a progress bar
- * @param tree a tree
+ * @brief Creates a tree model that displays an checkbox. Clicking on the 
checkbox toggles its state
  * @return Returns the new model
- * @note You don't need to free it with etk_tree2_model_free() if you use it 
in a tree. It will be freed when the tree is destroyed
+ * @note You don't need to free it with etk_tree2_model_free() if is 
associtated to a column.
+ * It will be freed automatically when the column is destroyed
  */
-Etk_Tree2_Model *etk_tree2_model_progress_bar_new(Etk_Tree2 *tree)
+Etk_Tree2_Model *etk_tree2_model_progress_bar_new(void)
 {
-   Etk_Tree2_Model *tree_model;
+   Etk_Tree2_Model *model;
    
-   tree_model = calloc(1, sizeof(Etk_Tree2_Model));
+   model = calloc(1, sizeof(Etk_Tree2_Model));
    
-   tree_model->tree = tree;
-   tree_model->cell_data_size = sizeof(Etk_Tree2_Model_Progressbar_Data);
-   tree_model->cell_data_set = etk_tree2_model_progress_bar_cell_data_set;
-   tree_model->cell_data_get = etk_tree2_model_progress_bar_cell_data_get;
-   tree_model->cell_data_free = etk_tree2_model_progress_bar_cell_data_free;
-   tree_model->objects_create = etk_tree2_model_progress_bar_objects_create;
-   tree_model->render = etk_tree2_model_progress_bar_render;
+   model->cell_data_size = sizeof(Etk_Tree2_Model_Progressbar_Data);
+   model->cell_data_set = _progress_bar_cell_data_set;
+   model->cell_data_get = _progress_bar_cell_data_get;
+   model->cell_data_free = _progress_bar_cell_data_free;
+   model->objects_create = _progress_bar_objects_create;
+   model->render = _progress_bar_render;
+   model->width_get = _progress_bar_width_get;
    
-   return tree_model;
+   return model;
 }
 
 /**
- * @brief Frees a tree model. Usually, you don't need to call it, it's 
automatically called when the tree is destroyed
+ * @brief Frees a tree model. Usually, you don't need to call it, it's called 
automatically
+ * when the tree is destroyed
  * @param model the model to free
  */
 void etk_tree2_model_free(Etk_Tree2_Model *model)
@@ -218,38 +227,18 @@
    free(model);
 }
 
-/**
- * @brief Sets the width of the icons of the icon/text model
- * @param model a icon/text model
- * @param icon_width the width to set for the icons of the model. -1 to let 
Etk compute the width for each icon (the text could not be aligned then)
- */
-void etk_tree2_model_icon_text_icon_width_set(Etk_Tree2_Model *model, int 
icon_width)
-{
-   if (!model)
-      return;
-   
-   ((Etk_Tree2_Model_Icon_Text *)model)->icon_width = icon_width;
-   if (model->tree)
-      etk_widget_redraw_queue(ETK_WIDGET(model->tree));
-}
-
-/**
- * @brief Gets the width of the icons of an icon/text model
- * @param model a icon/text model
- * @return Returns the width of the icons of the model. -1 means that Etk 
computes the width for each icon
- */
-int etk_tree2_model_icon_text_icon_width_get(Etk_Tree2_Model *model)
-{
-   if (!model)
-      return -1;
-   return ((Etk_Tree2_Model_Icon_Text *)model)->icon_width;
-}
+/**************************
+ *
+ * Etk specific functions
+ *
+ **************************/
 
-/*---------------------
+/**************************
  * Text Model
- *-------------------*/
-/* Text: cell_data_free */
-static void etk_tree2_model_text_cell_data_free(Etk_Tree2_Model *model, void 
*cell_data)
+ **************************/
+
+/* Text: cell_data_free() */
+static void _text_cell_data_free(Etk_Tree2_Model *model, void *cell_data)
 {
    char **text_data;
    
@@ -258,8 +247,8 @@
    free(*text_data);
 }
 
-/* Text: cell_data_set */
-static void etk_tree2_model_text_cell_data_set(Etk_Tree2_Model *model, void 
*cell_data, va_list *args)
+/* Text: cell_data_set() */
+static void _text_cell_data_set(Etk_Tree2_Model *model, void *cell_data, 
va_list *args)
 {
    char **text_data;
    char *text;
@@ -272,8 +261,8 @@
    *text_data = text ? strdup(text) : NULL;
 }
 
-/* Text: cell_data_get */
-static void etk_tree2_model_text_cell_data_get(Etk_Tree2_Model *model, void 
*cell_data, va_list *args)
+/* Text: cell_data_get() */
+static void _text_cell_data_get(Etk_Tree2_Model *model, void *cell_data, 
va_list *args)
 {
    char **text_data;
    char **text;
@@ -286,26 +275,26 @@
       *text = *text_data;
 }
 
-/* Text: objects_create */
-static void etk_tree2_model_text_objects_create(Etk_Tree2_Model *model, 
Evas_Object **cell_objects, Evas *evas)
+/* Text: objects_create() */
+static void _text_objects_create(Etk_Tree2_Model *model, Evas_Object 
**cell_objects, Evas *evas)
 {
    if (!cell_objects || !evas)
       return;
    
    cell_objects[0] = evas_object_text_add(evas);
-   /* TODO: font and color theme */
+   /* TODO: make the font themable... */
    evas_object_text_font_set(cell_objects[0], "Vera", 10);
    evas_object_color_set(cell_objects[0], 0, 0, 0, 255);
    evas_object_pass_events_set(cell_objects[0], 1);
 }
 
-/* Text: Render */
-static void etk_tree2_model_text_render(Etk_Tree2_Model *model, Etk_Tree2_Row 
*row, Etk_Geometry geometry, void *cell_data, Evas_Object **cell_objects)
+/* Text: render() */
+static void _text_render(Etk_Tree2_Model *model, Etk_Tree2_Row *row, 
Etk_Geometry geometry, void *cell_data, Evas_Object **cell_objects, Evas *evas)
 {
    char **text_data;
-   Evas_Coord th;
+   int th;
    
-   if (!(text_data = cell_data))
+   if (!(text_data = cell_data) || !cell_objects || !cell_objects[0])
       return;
    
    evas_object_text_text_set(cell_objects[0], *text_data);
@@ -314,11 +303,24 @@
    evas_object_show(cell_objects[0]);
 }
 
-/*---------------------
- * Int Model
- *-------------------*/
-/* Int: cell_data_set */
-static void etk_tree2_model_int_cell_data_set(Etk_Tree2_Model *model, void 
*cell_data, va_list *args)
+/* Text: width_get() */
+static int _text_width_get(Etk_Tree2_Model *model, void *cell_data, 
Evas_Object **cell_objects)
+{
+   int w;
+   
+   if (!cell_objects || !cell_objects[0])
+      return 0;
+   
+   evas_object_geometry_get(cell_objects[0], NULL, NULL, &w, NULL);
+   return w;
+}
+
+/**************************
+ * Integer Model
+ **************************/
+
+/* Int: cell_data_set() */
+static void _int_cell_data_set(Etk_Tree2_Model *model, void *cell_data, 
va_list *args)
 {
    int *int_data;
    
@@ -327,8 +329,8 @@
    *int_data = va_arg(*args, int);
 }
 
-/* Int: cell_data_get */
-static void etk_tree2_model_int_cell_data_get(Etk_Tree2_Model *model, void 
*cell_data, va_list *args)
+/* Int: cell_data_get() */
+static void _int_cell_data_get(Etk_Tree2_Model *model, void *cell_data, 
va_list *args)
 {
    int *int_data;
    int *value;
@@ -341,14 +343,14 @@
       *value = *int_data;
 }
 
-/* Int: render */
-static void etk_tree2_model_int_render(Etk_Tree2_Model *model, Etk_Tree2_Row 
*row, Etk_Geometry geometry, void *cell_data, Evas_Object **cell_objects)
+/* Int: render() */
+static void _int_render(Etk_Tree2_Model *model, Etk_Tree2_Row *row, 
Etk_Geometry geometry, void *cell_data, Evas_Object **cell_objects, Evas *evas)
 {
    int *int_data;
    char string[256];
-   Evas_Coord th;
+   int th;
    
-   if (!(int_data = cell_data))
+   if (!(int_data = cell_data) || !cell_objects || !cell_objects[0])
       return;
    
    snprintf(string, 255, "%d", *int_data);
@@ -358,11 +360,12 @@
    evas_object_show(cell_objects[0]);
 }
 
-/*---------------------
+/**************************
  * Double Model
- *-------------------*/
-/* Double: cell_data_set */
-static void etk_tree2_model_double_cell_data_set(Etk_Tree2_Model *model, void 
*cell_data, va_list *args)
+ **************************/
+
+/* Double: cell_data_set() */
+static void _double_cell_data_set(Etk_Tree2_Model *model, void *cell_data, 
va_list *args)
 {
    double *double_data;
    
@@ -371,8 +374,8 @@
    *double_data = va_arg(*args, double);
 }
 
-/* Double: cell_data_get */
-static void etk_tree2_model_double_cell_data_get(Etk_Tree2_Model *model, void 
*cell_data, va_list *args)
+/* Double: cell_data_get() */
+static void _double_cell_data_get(Etk_Tree2_Model *model, void *cell_data, 
va_list *args)
 {
    double *double_data;
    double *value;
@@ -385,14 +388,14 @@
       *value = *double_data;
 }
 
-/* Double: render */
-static void etk_tree2_model_double_render(Etk_Tree2_Model *model, 
Etk_Tree2_Row *row, Etk_Geometry geometry, void *cell_data, Evas_Object 
**cell_objects)
+/* Double: render() */
+static void _double_render(Etk_Tree2_Model *model, Etk_Tree2_Row *row, 
Etk_Geometry geometry, void *cell_data, Evas_Object **cell_objects, Evas *evas)
 {
    double *double_data;
    char string[256];
-   Evas_Coord th;
+   int th;
    
-   if (!(double_data = cell_data) || !model)
+   if (!(double_data = cell_data) || !model || !cell_objects || 
!cell_objects[0])
       return;
    
    snprintf(string, 255, "%.2f", *double_data);
@@ -402,22 +405,24 @@
    evas_object_show(cell_objects[0]);
 }
 
-/*---------------------
+/**************************
  * Image Model
- *-------------------*/
-/* Image: cell_data_free */
-static void etk_tree2_model_image_cell_data_free(Etk_Tree2_Model *model, void 
*cell_data)
+ **************************/
+
+/* Image: cell_data_free() */
+static void _image_cell_data_free(Etk_Tree2_Model *model, void *cell_data)
 {
    Etk_Tree2_Model_Image_Data *image_data;
    
    if (!(image_data = cell_data))
       return;
+   
    free(image_data->filename);
-   free(image_data->edje_group);
+   free(image_data->key);
 }
 
-/* Image: cell_data_set */
-static void etk_tree2_model_image_cell_data_set(Etk_Tree2_Model *model, void 
*cell_data, va_list *args)
+/* Image: cell_data_set() */
+static void _image_cell_data_set(Etk_Tree2_Model *model, void *cell_data, 
va_list *args)
 {
    Etk_Tree2_Model_Image_Data *image_data;
    char *string;
@@ -426,29 +431,20 @@
       return;
    
    free(image_data->filename);
-   free(image_data->edje_group);
-   image_data->edje_group = NULL;
+   free(image_data->key);
+   image_data->key = NULL;
    image_data->filename = NULL;
+   image_data->type = ETK_TREE2_MODEL_UNKNOWN_YET;
    
-   switch (((Etk_Tree2_Model_Image *)model)->image_type)
-   {
-      case ETK_TREE2_FROM_FILE:
-         string = va_arg(*args, char *);
-         image_data->filename = string ? strdup(string) : NULL;
-         break;
-      case ETK_TREE2_FROM_EDJE:
-         string = va_arg(*args, char *);
-         image_data->filename = string ? strdup(string) : NULL;
-         string = va_arg(*args, char *);
-         image_data->edje_group = string ? strdup(string) : NULL;
-         break;
-      default:
-         break;
-   }
+   /* Get the file and the key from the args */
+   string = va_arg(*args, char *);
+   image_data->filename = string ? strdup(string) : NULL;
+   string = va_arg(*args, char *);
+   image_data->key = string ? strdup(string) : NULL;
 }
 
-/* Image: cell_data_get */
-static void etk_tree2_model_image_cell_data_get(Etk_Tree2_Model *model, void 
*cell_data, va_list *args)
+/* Image: cell_data_get() */
+static void _image_cell_data_get(Etk_Tree2_Model *model, void *cell_data, 
va_list *args)
 {
    Etk_Tree2_Model_Image_Data *image_data;
    char **string;
@@ -456,117 +452,145 @@
    if (!(image_data = cell_data) || !args || !model)
       return;
    
-   switch (((Etk_Tree2_Model_Image *)model)->image_type)
-   {
-      case ETK_TREE2_FROM_FILE:
-         string = va_arg(*args, char **);
-         if (string)
-            *string = image_data->filename;
-         break;
-      case ETK_TREE2_FROM_EDJE:
-         string = va_arg(*args, char **);
-         if (string)
-            *string = image_data->filename;
-         string = va_arg(*args, char **);
-         if (string)
-            *string = image_data->edje_group;
-         break;
-      default:
-         break;
-   }
-}
-
-/* Image: objects_create */
-static void etk_tree2_model_image_objects_create(Etk_Tree2_Model *model, 
Evas_Object **cell_objects, Evas *evas)
-{
-   if (!cell_objects || !evas || !model)
-      return;
-   
-   switch (((Etk_Tree2_Model_Image *)model)->image_type)
-   {
-      case ETK_TREE2_FROM_FILE:
-         cell_objects[0] = evas_object_image_add(evas);
-         break;
-      case ETK_TREE2_FROM_EDJE:
-         cell_objects[0] = edje_object_add(evas);
-         break;
-      default:
-         break;
-   }
-   evas_object_pass_events_set(cell_objects[0], 1);
+   string = va_arg(*args, char **);
+   if (string)
+      *string = image_data->filename;
+   string = va_arg(*args, char **);
+   if (string)
+      *string = image_data->key;
 }
 
-/* Image: render */
-static void etk_tree2_model_image_render(Etk_Tree2_Model *model, Etk_Tree2_Row 
*row, Etk_Geometry geometry, void *cell_data, Evas_Object **cell_objects)
+/* Image: render() */
+static void _image_render(Etk_Tree2_Model *model, Etk_Tree2_Row *row, 
Etk_Geometry geometry, void *cell_data, Evas_Object **cell_objects, Evas *evas)
 {
    Etk_Tree2_Model_Image_Data *image_data;
-   int image_width = 0, image_height = 0;
+   int image_width, image_height;
    Etk_Geometry image_geometry;
-   Etk_Bool show_image = ETK_FALSE;
    
-   if (!(image_data = cell_data) || !model)
+   if (!(image_data = cell_data) || !model || !cell_objects || !evas)
+      return;
+
+   if (!image_data->filename)
       return;
    
-   switch (((Etk_Tree2_Model_Image *)model)->image_type)
+   /* This code is ugly... */
+   while (image_data->type != ETK_TREE2_MODEL_NOT_FOUND)
    {
-      case ETK_TREE2_FROM_FILE:
-         evas_object_image_file_set(cell_objects[0], image_data->filename, 
NULL);
-         if (!evas_object_image_load_error_get(cell_objects[0]))
+      if (cell_objects[0])
+      {
+         evas_object_del(cell_objects[0]);
+         cell_objects[0] = NULL;
+      }
+   
+      if (image_data->type == ETK_TREE2_MODEL_EDJE
+         || (image_data->key && image_data->type == 
ETK_TREE2_MODEL_UNKNOWN_YET))
+      {
+         cell_objects[0] = edje_object_add(evas);
+         if (edje_object_file_set(cell_objects[0], image_data->filename, 
image_data->key))
          {
-            evas_object_image_size_get(cell_objects[0], &image_width, 
&image_height);
-            show_image = ETK_TRUE;
+            edje_object_size_min_get(cell_objects[0], &image_width, 
&image_height);
+            image_data->type = ETK_TREE2_MODEL_EDJE;
+            break;
          }
-         break;
-      case ETK_TREE2_FROM_EDJE:
-         if (edje_object_file_set(cell_objects[0], image_data->filename, 
image_data->edje_group))
+         else if (image_data->type == ETK_TREE2_MODEL_EDJE)
+            image_data->type = ETK_TREE2_MODEL_NOT_FOUND;
+         else
+            image_data->type = ETK_TREE2_MODEL_NORMAL;
+      }
+      else
+      {
+         cell_objects[0] = evas_object_image_add(evas);
+         evas_object_image_file_set(cell_objects[0], image_data->filename, 
image_data->key);
+         if (!evas_object_image_load_error_get(cell_objects[0]))
          {
-            edje_object_size_min_get(cell_objects[0], &image_width, 
&image_height);
-            show_image = ETK_TRUE;
+            evas_object_image_size_get(cell_objects[0], &image_width, 
&image_height);
+            image_data->type = ETK_TREE2_MODEL_NORMAL;
+            break;
          }
-         break;
-      default:
-         break;
+         else
+            image_data->type = ETK_TREE2_MODEL_NOT_FOUND;
+      }
+   }
+   
+   /* If the image is loaded from an edje file, or if trying to open as a 
normal image has failed */
+   if (image_data->type == ETK_TREE2_MODEL_EDJE)
+   {
+      cell_objects[0] = edje_object_add(evas);
+      if (edje_object_file_set(cell_objects[0], image_data->filename, 
image_data->key))
+         edje_object_size_min_get(cell_objects[0], &image_width, 
&image_height);
+      else
+         image_data->type = ETK_TREE2_MODEL_NOT_FOUND;
+   }
+   
+   /* Loading has failed... we return */
+   if (image_data->type == ETK_TREE2_MODEL_NOT_FOUND)
+   {
+      if (cell_objects[0])
+      {
+         evas_object_del(cell_objects[0]);
+         cell_objects[0] = NULL;
+      }
+      return;
    }
    
-   if (!show_image)
-      evas_object_hide(cell_objects[0]);
+   /* TODO: humm... we shouldn't do this. It's dirty */
+   evas_object_clip_set(cell_objects[0], model->col->clip);
+   etk_widget_member_object_add(model->tree->grid, cell_objects[0]);
+   
+   
+   /* The image is correctly loaded, we can now render it */
+   if (image_width == 0 || image_height == 0)
+   {
+      image_geometry.w = geometry.h;
+      image_geometry.h = geometry.h;
+   }
    else
    {
-      if (image_width == 0 || image_height == 0)
+      if (image_height <= geometry.h)
       {
-         image_geometry.w = geometry.h;
-         image_geometry.h = geometry.h;
+         image_geometry.w = image_width;
+         image_geometry.h = image_height;
       }
       else
       {
-         if (image_height <= geometry.h)
-         {
-            image_geometry.w = image_width;
-            image_geometry.h = image_height;
-         }
-         else
-         {
-            image_geometry.w = geometry.h * ((float)image_width / 
image_height);
-            image_geometry.h = geometry.h;
-         }
+         image_geometry.w = geometry.h * ((float)image_width / image_height);
+         image_geometry.h = geometry.h;
       }
-      image_geometry.x = geometry.x;
-      image_geometry.y = geometry.y + ((geometry.h - image_geometry.h) / 2);
-   
-      evas_object_show(cell_objects[0]);
-      if ((((Etk_Tree2_Model_Image *)model)->image_type) == 
ETK_TREE2_FROM_FILE)
-         evas_object_image_fill_set(cell_objects[0], 0, 0, image_geometry.w, 
image_geometry.h);
-      evas_object_move(cell_objects[0], image_geometry.x, image_geometry.y);
-      evas_object_resize(cell_objects[0], image_geometry.w, image_geometry.h);
    }
+   
+   image_geometry.x = geometry.x;
+   image_geometry.y = geometry.y + ((geometry.h - image_geometry.h) / 2);
+   if (image_data->type == ETK_TREE2_MODEL_NORMAL)
+      evas_object_image_fill_set(cell_objects[0], 0, 0, image_geometry.w, 
image_geometry.h);
+   
+   evas_object_move(cell_objects[0], image_geometry.x, image_geometry.y);
+   evas_object_resize(cell_objects[0], image_geometry.w, image_geometry.h);
+   evas_object_show(cell_objects[0]);
+}
+
+/* Image: width_get() */
+static int _image_width_get(Etk_Tree2_Model *model, void *cell_data, 
Evas_Object **cell_objects)
+{
+   Etk_Tree2_Model_Image_Data *image_data;
+   int w = 0;
+   
+   if (!(image_data = cell_data) || !cell_objects || !cell_objects[0])
+      return 0;
+   
+   if (image_data->type == ETK_TREE2_MODEL_NORMAL)
+      evas_object_image_size_get(cell_objects[0], &w, NULL);
+   else if (image_data->type == ETK_TREE2_MODEL_EDJE)
+      edje_object_size_min_get(cell_objects[0], &w, NULL);
+   
+   return w;
 }
 
-/*---------------------
+/**************************
  * Checkbox Model
- *-------------------*/
+ **************************/
 
-/* Checkbox: cell_data_set */
-static void etk_tree2_model_checkbox_cell_data_set(Etk_Tree2_Model *model, 
void *cell_data, va_list *args)
+/* Checkbox: cell_data_set() */
+static void _checkbox_cell_data_set(Etk_Tree2_Model *model, void *cell_data, 
va_list *args)
 {
    Etk_Bool *checked;
    
@@ -575,8 +599,8 @@
    *checked = va_arg(*args, int);
 }
 
-/* Checkbox: cell_data_get */
-static void etk_tree2_model_checkbox_cell_data_get(Etk_Tree2_Model *model, 
void *cell_data, va_list *args)
+/* Checkbox: cell_data_get() */
+static void _checkbox_cell_data_get(Etk_Tree2_Model *model, void *cell_data, 
va_list *args)
 {
    Etk_Bool *checked;
    Etk_Bool *return_location;
@@ -589,25 +613,24 @@
       *return_location = *checked;
 }
 
-
-/* Checkbox: objects_create */
-static void etk_tree2_model_checkbox_objects_create(Etk_Tree2_Model *model, 
Evas_Object **cell_objects, Evas *evas)
+/* Checkbox: objects_create() */
+static void _checkbox_objects_create(Etk_Tree2_Model *model, Evas_Object 
**cell_objects, Evas *evas)
 {
    if (!model || !cell_objects || !evas)
       return;
    
    cell_objects[0] = edje_object_add(evas);
    etk_theme_edje_object_set_from_parent(cell_objects[0], "checkbox", 
ETK_WIDGET(model->tree));
-   evas_object_event_callback_add(cell_objects[0], EVAS_CALLBACK_MOUSE_UP, 
etk_tree2_model_checkbox_clicked_cb, model);
+   evas_object_event_callback_add(cell_objects[0], EVAS_CALLBACK_MOUSE_UP, 
_checkbox_clicked_cb, model);
 }
 
-/* Checkbox: Render */
-static void etk_tree2_model_checkbox_render(Etk_Tree2_Model *model, 
Etk_Tree2_Row *row, Etk_Geometry geometry, void *cell_data, Evas_Object 
**cell_objects)
+/* Checkbox: render() */
+static void _checkbox_render(Etk_Tree2_Model *model, Etk_Tree2_Row *row, 
Etk_Geometry geometry, void *cell_data, Evas_Object **cell_objects, Evas *evas)
 {
    Etk_Bool *checked;
-   Evas_Coord w, h;
+   int w, h;
    
-   if (!(checked = cell_data) || !cell_objects[0])
+   if (!(checked = cell_data) || !cell_objects || !cell_objects[0])
       return;
    
    if (*checked)
@@ -623,32 +646,48 @@
    evas_object_show(cell_objects[0]);
 }
 
+/* Checkbox: width_get() */
+static int _checkbox_width_get(Etk_Tree2_Model *model, void *cell_data, 
Evas_Object **cell_objects)
+{
+   int w;
+   
+   if (!cell_objects[0])
+      return 0;
+   
+   edje_object_size_min_get(cell_objects[0], &w, NULL);
+   return w;
+}
+
 /* Called when the checkbox is released by the mouse */
-static void etk_tree2_model_checkbox_clicked_cb(void *data, Evas *e, 
Evas_Object *obj, void *event_info)
+static void _checkbox_clicked_cb(void *data, Evas *e, Evas_Object *obj, void 
*event_info)
 {
    Etk_Tree2_Model *model;
    Etk_Tree2_Row *row;
    Evas_Event_Mouse_Up *event;
-   Evas_Coord ox, oy, ow, oh;
+   int ox, oy, ow, oh;
    Etk_Bool checked;
    
-   if (!(model = data) || !model->col || !(event = event_info) || !(row = 
evas_object_data_get(obj, "_Etk_Tree2_Model_Checkbox::Row")))
+   if (!(model = data) || !model->col || !(event = event_info)
+      || !(row = evas_object_data_get(obj, "_Etk_Tree2_Model_Checkbox::Row")))
+   {
       return;
+   }
    
    evas_object_geometry_get(obj, &ox, &oy, &ow, &oh);
-   if (event->canvas.x >= ox && event->canvas.x <= ox + ow && event->canvas.y 
>= oy && event->canvas.y <= oy + oh)
+   if (ETK_INSIDE(event->canvas.x, event->canvas.y, ox, oy, ow, oh))
    {
+      /* TODO: there is a problem here if several models are combined.... */
       etk_tree2_row_fields_get(row, model->col, &checked, NULL);
       etk_tree2_row_fields_set(row, model->col, !checked, NULL);
    }
 }
 
-/*---------------------
+/**************************
  * Progressbar Model
- *-------------------*/
+ **************************/
 
-/* Progressbar: cell_data_free */
-static void etk_tree2_model_progress_bar_cell_data_free(Etk_Tree2_Model 
*model, void *cell_data)
+/* Progressbar: cell_data_free() */
+static void _progress_bar_cell_data_free(Etk_Tree2_Model *model, void 
*cell_data)
 {
    Etk_Tree2_Model_Progressbar_Data *pbar_data;
    
@@ -657,8 +696,8 @@
    free(pbar_data->text);
 }
 
-/* Progressbar: cell_data_set */
-static void etk_tree2_model_progress_bar_cell_data_set(Etk_Tree2_Model *model, 
void *cell_data, va_list *args)
+/* Progressbar: cell_data_set() */
+static void _progress_bar_cell_data_set(Etk_Tree2_Model *model, void 
*cell_data, va_list *args)
 {
    Etk_Tree2_Model_Progressbar_Data *pbar_data;
    char *text;
@@ -671,11 +710,11 @@
    
    pbar_data->fraction = va_arg(*args, double);
    if ((text = va_arg(*args, char *)))
-     pbar_data->text = strdup(text);
+      pbar_data->text = strdup(text);
 }
 
-/* Progressbar: cell_data_get */
-static void etk_tree2_model_progress_bar_cell_data_get(Etk_Tree2_Model *model, 
void *cell_data, va_list *args)
+/* Progressbar: cell_data_get() */
+static void _progress_bar_cell_data_get(Etk_Tree2_Model *model, void 
*cell_data, va_list *args)
 {
    Etk_Tree2_Model_Progressbar_Data *pbar_data;
    char **string;
@@ -686,15 +725,15 @@
    
    fraction = va_arg(*args, double *);
    if (fraction)
-     *fraction = pbar_data->fraction;
-      
+      *fraction = pbar_data->fraction;
+   
    string = va_arg(*args, char **);
    if (string)
-     *string = pbar_data->text;         
+      *string = pbar_data->text;         
 }
 
-/* Progressbar: objects_create */
-static void etk_tree2_model_progress_bar_objects_create(Etk_Tree2_Model 
*model, Evas_Object **cell_objects, Evas *evas)
+/* Progressbar: objects_create() */
+static void _progress_bar_objects_create(Etk_Tree2_Model *model, Evas_Object 
**cell_objects, Evas *evas)
 {
    if (!model || !cell_objects || !evas)
       return;
@@ -703,13 +742,13 @@
    etk_theme_edje_object_set_from_parent(cell_objects[0], "progress_bar", 
ETK_WIDGET(model->tree));
 }
 
-/* Progressbar: Render */
-static void etk_tree2_model_progress_bar_render(Etk_Tree2_Model *model, 
Etk_Tree2_Row *row, Etk_Geometry geometry, void *cell_data, Evas_Object 
**cell_objects)
+/* Progressbar: render() */
+static void _progress_bar_render(Etk_Tree2_Model *model, Etk_Tree2_Row *row, 
Etk_Geometry geometry, void *cell_data, Evas_Object **cell_objects, Evas *evas)
 {
    Etk_Tree2_Model_Progressbar_Data *pbar_data;   
-   Evas_Coord w, h;
+   int w, h;
    
-   if (!(pbar_data = cell_data) || !cell_objects[0])
+   if (!(pbar_data = cell_data) || !cell_objects || !cell_objects[0])
       return;
    
    edje_object_part_drag_value_set(cell_objects[0], "etk.dragable.filler", 
0.0, 0.0);
@@ -722,4 +761,16 @@
    evas_object_move(cell_objects[0], geometry.x, geometry.y + ((geometry.h - 
h) / 2));
    evas_object_resize(cell_objects[0], w, h);
    evas_object_show(cell_objects[0]);
+}
+
+/* Progressbar: width_get() */
+static int _progress_bar_width_get(Etk_Tree2_Model *model, void *cell_data, 
Evas_Object **cell_objects)
+{  
+   int w;
+   
+   if (!cell_objects || !cell_objects[0])
+      return 0;
+   
+   edje_object_size_min_get(cell_objects[0], &w, NULL);
+   return w;
 }
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_tree2_model.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- etk_tree2_model.h   3 Jan 2007 18:10:11 -0000       1.2
+++ etk_tree2_model.h   3 Jan 2007 23:35:25 -0000       1.3
@@ -13,18 +13,8 @@
  */
 
 /**
- * @enum Etk_Tree2_Model_Image_Type
- * @brief The types of the images that you could have in an "image" or 
"icon_text" model
- */ 
-typedef enum Etk_Tree2_Model_Image_Type
-{
-   ETK_TREE2_FROM_FILE,
-   ETK_TREE2_FROM_EDJE
-} Etk_Tree2_Model_Image_Type;
-
-/**
- * @struct Etk_Tree2_Model
- * @brief A tree model describes how the cells of a column of a tree should be 
displayed and manipulated
+ * @brief A tree model defines the content of a tree's column, and how it 
should be displayed
+ * @structinfo
  */
 struct Etk_Tree2_Model
 {
@@ -38,16 +28,19 @@
    void (*cell_data_set)(Etk_Tree2_Model *model, void *cell_data, va_list 
*args);
    void (*cell_data_get)(Etk_Tree2_Model *model, void *cell_data, va_list 
*args);
    void (*objects_create)(Etk_Tree2_Model *model, Evas_Object **cell_objects, 
Evas *evas);
-   void (*render)(Etk_Tree2_Model *model, Etk_Tree2_Row *row, Etk_Geometry 
geometry, void *cell_data, Evas_Object **cell_objects);
+   void (*render)(Etk_Tree2_Model *model, Etk_Tree2_Row *row, Etk_Geometry 
geometry, void *cell_data, Evas_Object **cell_objects, Evas *evas);
    int  (*width_get)(Etk_Tree2_Model *model, void *cell_data, Evas_Object 
**cell_objects);
 };
 
-Etk_Tree2_Model *etk_tree2_model_text_new(Etk_Tree2 *tree);
-Etk_Tree2_Model *etk_tree2_model_int_new(Etk_Tree2 *tree);
-Etk_Tree2_Model *etk_tree2_model_double_new(Etk_Tree2 *tree);
-Etk_Tree2_Model *etk_tree2_model_image_new(Etk_Tree2 *tree, 
Etk_Tree2_Model_Image_Type image_type);
-Etk_Tree2_Model *etk_tree2_model_checkbox_new(Etk_Tree2 *tree);
-Etk_Tree2_Model *etk_tree2_model_progress_bar_new(Etk_Tree2 *tree);
+Etk_Tree2_Model *etk_tree2_model_text_new(void);
+Etk_Tree2_Model *etk_tree2_model_int_new(void);
+Etk_Tree2_Model *etk_tree2_model_double_new(void);
+Etk_Tree2_Model *etk_tree2_model_image_new(void);
+Etk_Tree2_Model *etk_tree2_model_checkbox_new(void);
+Etk_Tree2_Model *etk_tree2_model_progress_bar_new(void);
+
+/* TODO: image_width_set() */
+
 void etk_tree2_model_free(Etk_Tree2_Model *model);
 
 /** @} */



-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to