Enlightenment CVS committal

Author  : moom16
Project : e17
Module  : proto

Dir     : e17/proto/etk/src/lib


Modified Files:
        etk_tree.c etk_tree.h 


Log Message:
* Adds functions to get back the data from a row


===================================================================
RCS file: /cvsroot/enlightenment/e17/proto/etk/src/lib/etk_tree.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -3 -r1.5 -r1.6
--- etk_tree.c  23 Oct 2005 22:05:38 -0000      1.5
+++ etk_tree.c  23 Oct 2005 23:27:51 -0000      1.6
@@ -257,6 +257,19 @@
 }
 
 /**
+ * @brief Gets the "nth" column of the tree
+ * @param tree a tree
+ * @param nth the rank of the column you want to get
+ * @return Returns the "nth" column of the tree
+ */
+Etk_Tree_Col *etk_tree_nth_col_get(Etk_Tree *tree, int nth)
+{
+   if (!tree || nth < 0 || nth >= tree->num_cols)
+      return NULL;
+   return tree->columns[nth];
+}
+
+/**
  * @brief Sets whether the column headers should be displayed
  * @param tree a tree
  * @param headers_visible TRUE if the column headers should be displayed
@@ -650,7 +663,7 @@
 /**
  * @brief Appends a new row as a child of a another row of the tree. The tree 
has to be in the ETK_TREE_MODE_TREE mode
  * @param row a row
- * @param ... an Etk_Tree_Col * followed by the value of the cell, then again, 
an Etk_Tree_Col * followed by its value... terminated by NULL
+ * @param ... an Etk_Tree_Col * followed by the value(s) of the cell, then 
again, an Etk_Tree_Col * followed by its value(s)... terminated by NULL
  * @return Returns the new row
  */
 Etk_Tree_Row *etk_tree_append_to_row(Etk_Tree_Row *row, ...)
@@ -702,6 +715,199 @@
 }
 
 /**
+ * @brief Sets the different values of the cells of the row
+ * @param row a row
+ * @param ... an Etk_Tree_Col * followed by the value(s) of the cell, then 
again, an Etk_Tree_Col * followed by its value(s)... terminated by NULL
+ */
+void etk_tree_row_fields_set(Etk_Tree_Row *row, ...)
+{
+   va_list args;
+
+   va_start(args, row);
+   etk_tree_row_fields_set_valist(row, args);
+   va_end(args);
+}
+
+/**
+ * @brief Sets the different values of the cells of the row
+ * @param row a row
+ * @param args an Etk_Tree_Col * followed by the value(s) of the cell, then 
again, an Etk_Tree_Col * followed by its value(s)... terminated by NULL
+ */
+void etk_tree_row_fields_set_valist(Etk_Tree_Row *row, va_list args)
+{
+   Etk_Tree_Col *col;
+
+   if (!row)
+      return;
+
+   while ((col = va_arg(args, Etk_Tree_Col *)))
+   {
+      Etk_Tree_Cell *cell;
+
+      cell = &row->cells[col->id];
+      switch (col->type)
+      {
+         case ETK_TREE_COL_TEXT:
+         {
+            const char *text;
+            text = va_arg(args, char *);
+            if (cell->text_value != text)
+            {
+               free(cell->text_value);
+               if (text)
+                  cell->text_value = strdup(text);
+               else
+                  cell->text_value = NULL;
+            }
+            break;
+         }
+         case ETK_TREE_COL_IMAGE:
+         {
+            const char *image;
+            image = va_arg(args, char *);
+            if (cell->image_filename_value != image)
+            {
+               free(cell->image_filename_value);
+               if (image)
+                  cell->image_filename_value = strdup(image);
+               else
+                  cell->image_filename_value = NULL;
+            }
+            break;
+         }
+         case ETK_TREE_COL_ICON_TEXT:
+         {
+            const char *icon;
+            const char *text;
+
+            icon = va_arg(args, char *);
+            text = va_arg(args, char *);
+
+            if (cell->icon_text_value.icon_filename != icon)
+            {
+               free(cell->icon_text_value.icon_filename);
+               if (icon)
+                  cell->icon_text_value.icon_filename = strdup(icon);
+               else
+                  cell->icon_text_value.icon_filename = NULL;
+            }
+
+            if (cell->icon_text_value.text != text)
+            {
+               free(cell->icon_text_value.text);
+               if (text)
+                  cell->icon_text_value.text = strdup(text);
+               else
+                  cell->icon_text_value.text = NULL;
+            }
+            break;
+         }
+         case ETK_TREE_COL_INT:
+         {
+            int value;
+            value = va_arg(args, int);
+            cell->int_value = value;
+            break;
+         }
+         case ETK_TREE_COL_DOUBLE:
+         {
+            double value;
+            value = va_arg(args, double);
+            cell->double_value = value;
+            break;
+         }
+         default:
+            break;
+      }   
+   }
+
+   if (!row->tree->frozen)
+      etk_widget_redraw_queue(ETK_WIDGET(row->tree));
+}
+
+/**
+ * @brief Gets the different values of the cells of the row
+ * @param row a row
+ * @param ... an Etk_Tree_Col * followed by the location where to store the 
value(s) of the cell, then again, an Etk_Tree_Col * followed by its 
location(s)... terminated by NULL
+ */
+void etk_tree_row_fields_get(Etk_Tree_Row *row, ...)
+{
+   va_list args;
+
+   va_start(args, row);
+   etk_tree_row_fields_get_valist(row, args);
+   va_end(args);
+}
+
+/**
+ * @brief Gets the different values of the cells of the row
+ * @param row a row
+ * @param args an Etk_Tree_Col * followed by the location where to store the 
value(s) of the cell, then again, an Etk_Tree_Col * followed by its 
location(s)... terminated by NULL
+ */
+void etk_tree_row_fields_get_valist(Etk_Tree_Row *row, va_list args)
+{
+   Etk_Tree_Col *col;
+
+   if (!row)
+      return;
+
+   while ((col = va_arg(args, Etk_Tree_Col *)))
+   {
+      Etk_Tree_Cell *cell;
+
+      cell = &row->cells[col->id];
+      switch (col->type)
+      {
+         case ETK_TREE_COL_TEXT:
+         {
+            char **text;
+            text = va_arg(args, char **);
+            if (text)
+               *text = cell->text_value;
+            break;
+         }
+         case ETK_TREE_COL_IMAGE:
+         {
+            char **image;
+            image = va_arg(args, char **);
+            *image = cell->image_filename_value;
+            break;
+         }
+         case ETK_TREE_COL_ICON_TEXT:
+         {
+            char **icon;
+            char **text;
+            icon = va_arg(args, char **);
+            text = va_arg(args, char **);
+            if (icon)
+               *icon = cell->icon_text_value.icon_filename;
+            if (text)
+               *text = cell->icon_text_value.text;
+            break;
+         }
+         case ETK_TREE_COL_INT:
+         {
+            int *value;
+            value = va_arg(args, int *);
+            if (value)
+               *value = cell->int_value;
+            break;
+         }
+         case ETK_TREE_COL_DOUBLE:
+         {
+            double *value;
+            value = va_arg(args, double *);
+            if (value)
+               *value = cell->double_value;
+            break;
+         }
+         default:
+            break;
+      }   
+   }
+}
+
+/**
  * @brief Sets a value to the data member of a row. The date could be 
retrieved with @a etk_tree_row_data_get()
  * @param row a row
  * @param data the data to set
@@ -1738,7 +1944,6 @@
 static Etk_Tree_Row *_etk_tree_row_new_valist(Etk_Tree *tree, Etk_Tree_Node 
*node, va_list args)
 {
    Etk_Tree_Row *new_row;
-   Etk_Tree_Col *col;
    Etk_Tree_Node *n;
 
    if (!tree || !tree->built || !node)
@@ -1755,79 +1960,8 @@
    new_row->node.selected = FALSE;
    new_row->data = NULL;
 
-   new_row->cells = malloc(sizeof(Etk_Tree_Cell) * tree->num_cols);
-   while ((col = va_arg(args, Etk_Tree_Col *)))
-   {
-      Etk_Tree_Cell *new_cell;
-
-      new_cell = &new_row->cells[col->id];
-      switch (col->type)
-      {
-         case ETK_TREE_COL_TEXT:
-         {
-            const char *text;
-
-            text = va_arg(args, char *);
-            if (text)
-               new_cell->text_value = strdup(text);
-            else
-               new_cell->text_value = NULL;
-            break;
-         }
-         case ETK_TREE_COL_IMAGE:
-         {
-            const char *image;
-
-            image = va_arg(args, char *);
-            if (image)
-               new_cell->image_filename_value = strdup(image);
-            else
-               new_cell->image_filename_value = NULL;
-            break;
-         }
-         case ETK_TREE_COL_ICON_TEXT:
-         {
-            const char *icon;
-            const char *text;
-
-            icon = va_arg(args, char *);
-            text = va_arg(args, char *);
-
-            if (icon)
-               new_cell->icon_text_value.icon_filename = strdup(icon);
-            else
-               new_cell->icon_text_value.icon_filename = NULL;
-
-            if (text)
-               new_cell->icon_text_value.text = strdup(text);
-            else
-               new_cell->icon_text_value.text = NULL;
-
-            break;
-         }
-         case ETK_TREE_COL_INT:
-         {
-            int value;
-
-            value = va_arg(args, int);
-            new_cell->int_value = value;
-
-            break;
-         }
-         case ETK_TREE_COL_DOUBLE:
-         {
-            double value;
-
-            value = va_arg(args, double);
-            new_cell->double_value = value;
-
-            break;
-         }
-         default:
-            new_cell->int_value = 0;
-            break;
-      }
-   }
+   new_row->cells = calloc(1, sizeof(Etk_Tree_Cell) * tree->num_cols);
+   etk_tree_row_fields_set_valist(new_row, args);
 
    for (n = new_row->node.parent; n; n = n->parent)
    {
@@ -1845,7 +1979,7 @@
       ecore_list_set_free_cb(node->child_rows, 
ECORE_FREE_CB(_etk_tree_row_free));
    }
    ecore_list_append(node->child_rows, new_row);
-   etk_widget_redraw_queue(ETK_WIDGET(tree));
+
    return new_row;
 }
 
===================================================================
RCS file: /cvsroot/enlightenment/e17/proto/etk/src/lib/etk_tree.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -3 -r1.5 -r1.6
--- etk_tree.h  23 Oct 2005 22:05:38 -0000      1.5
+++ etk_tree.h  23 Oct 2005 23:27:51 -0000      1.6
@@ -175,6 +175,7 @@
 Etk_Tree_Col *etk_tree_col_new(Etk_Tree *tree, const char *title, 
Etk_Tree_Col_Type type, int width);
 
 int etk_tree_num_cols_get(Etk_Tree *tree);
+Etk_Tree_Col *etk_tree_nth_col_get(Etk_Tree *tree, int nth);
 void etk_tree_headers_visible_set(Etk_Tree *tree, Etk_Bool headers_visible);
 Etk_Bool etk_tree_headers_visible_get(Etk_Tree *tree);
 
@@ -204,6 +205,10 @@
 
 Etk_Tree_Row *etk_tree_append(Etk_Tree *tree, ...);
 Etk_Tree_Row *etk_tree_append_to_row(Etk_Tree_Row *row, ...);
+void etk_tree_row_fields_set(Etk_Tree_Row *row, ...);
+void etk_tree_row_fields_set_valist(Etk_Tree_Row *row, va_list args);
+void etk_tree_row_fields_get(Etk_Tree_Row *row, ...);
+void etk_tree_row_fields_get_valist(Etk_Tree_Row *row, va_list args);
 void etk_tree_row_del(Etk_Tree_Row *row);
 void etk_tree_clear(Etk_Tree *tree);
 




-------------------------------------------------------
This SF.Net email is sponsored by the JBoss Inc.
Get Certified Today * Register for a JBoss Training Course
Free Certification Exam for All Training Attendees Through End of 2005
Visit http://www.jboss.com/services/certification for more information
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to