Enlightenment CVS committal

Author  : moom
Project : e17
Module  : libs/etk

Dir     : e17/libs/etk/src/lib


Modified Files:
        etk_tree.c etk_tree.h etk_tree_model.c etk_tree_model.h 


Log Message:
* [Tree] Chady's patch applied: it adds etk_tree_row_model_fields_set/get(). 
Thanks :)


===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_tree.c,v
retrieving revision 1.84
retrieving revision 1.85
diff -u -3 -r1.84 -r1.85
--- etk_tree.c  26 Jan 2007 23:09:45 -0000      1.84
+++ etk_tree.c  28 Jan 2007 22:57:06 -0000      1.85
@@ -530,6 +530,7 @@
    col->models[col->num_models] = model;
    model->tree = col->tree;
    model->col = col;
+   model->index = col->num_models;
    col->num_models++;
 }
 
@@ -1040,7 +1041,7 @@
  * @brief Sets the values of the cells of the row
  * @param row a row of the tree
  * @param emit_signal whether or not the "cell_value_changed" signal should be 
emitted on the modified columns.
- * Most of the time, the signal don't need to be emitted (so @a emit_signal 
should be ETK_FALSE), except if you have
+ * Most of the time, the signal don't need to be emitted (so @a emit_signal 
should be ETK_FALSE), except if you have a
  * callback connected on this signal
  * @param ... an "Etk_Tree_Col *" followed by the value of the cell,
  * then any number of "Etk_Tree_Col *"/Value pairs, and terminated by NULL.
@@ -1062,7 +1063,7 @@
  * @brief Sets the values of the cells of the row
  * @param row a row of the tree
  * @param emit_signal whether or not the "cell_value_changed" signal should be 
emitted on the modified columns.
- * Most of the time, the signal don't need to be emitted (so @a emit_signal 
should be ETK_FALSE), except if you have
+ * Most of the time, the signal don't need to be emitted (so @a emit_signal 
should be ETK_FALSE), except if you have a
  * callback connected on this signal
  * @param args an "Etk_Tree_Col *" followed by the value of the cell,
  * then any number of "Etk_Tree_Col *"/Value pairs, and terminated by NULL.
@@ -1137,6 +1138,104 @@
          if (col->models[i]->cell_data_get)
             col->models[i]->cell_data_get(col->models[i], 
row->cells_data[col->id][i], &args);
       }
+   }
+   va_end(args2);
+}
+
+/**
+ * @brief Sets the values of the models of the row
+ * @param row a row of the tree
+ * @param emit_signal whether or not the "cell_value_changed" signal should be 
emitted on the modified columns.
+ * Most of the time, the signal don't need to be emitted (so @a emit_signal 
should be ETK_FALSE), except if you have a
+ * callback connected on this signal
+ * @param args an "Etk_Tree_Model *" followed by the value of the model, then 
any number of
+ * "Etk_Tree_Model *"/Value pairs, and terminated by NULL.
+ * Note that, according to the models, a cell value can use several parameters
+ */
+void etk_tree_row_model_fields_set(Etk_Tree_Row *row, Etk_Bool emit_signal, 
...)
+{
+   va_list args;
+   
+   if (!row)
+      return;
+   
+   va_start(args, emit_signal);
+   etk_tree_row_model_fields_set_valist(row, emit_signal, args);
+   va_end(args);
+}
+
+/**
+ * @brief Sets the values of the models of the row
+ * @param row a row of the tree
+ * @param emit_signal whether or not the "cell_value_changed" signal should be 
emitted on the modified columns.
+ * Most of the time, the signal don't need to be emitted (so @a emit_signal 
should be ETK_FALSE), except if you have a
+ * callback connected on this signal
+ * @param args an "Etk_Tree_Model *" followed by the value of the model, then 
any number of
+ * "Etk_Tree_Model *"/Value pairs, and terminated by NULL.
+ * Note that, according to the models, a cell value can use several parameters
+ */
+void etk_tree_row_model_fields_set_valist(Etk_Tree_Row *row, Etk_Bool 
emit_signal, va_list args)
+{
+   Etk_Tree_Model *model;
+   va_list args2;
+   
+   if (!row)
+      return;
+   
+   va_copy(args2, args);
+   while ((model = va_arg(args2, Etk_Tree_Model *)))
+   {
+      if (model->cell_data_set)
+         model->cell_data_set(model, 
row->cells_data[model->col->id][model->index], &args2);
+      if (emit_signal)
+         
etk_signal_emit(_etk_tree_col_signals[ETK_TREE_COL_CELL_VALUE_CHANGED], 
ETK_OBJECT(model->col), NULL, row);
+   }
+   va_end(args2);
+   
+   if (!row->tree->frozen)
+      etk_widget_redraw_queue(ETK_WIDGET(row->tree));
+}
+
+/**
+ * @brief Gets the values of the models of the row
+ * @param row a row of the tree
+ * @param ... an "Etk_Tree_Model *" followed by the location where to store 
the value of this model,
+ * then any number of "Etk_Tree_Model *"/Location pairs, and terminated by 
NULL.
+ * Note that some models may require several locations to store their value
+ */
+void etk_tree_row_model_fields_get(Etk_Tree_Row *row, ...)
+{
+   va_list args;
+   
+   if (!row)
+      return;
+   
+   va_start(args, row);
+   etk_tree_row_model_fields_get_valist(row, args);
+   va_end(args);
+}
+
+/**
+ * @brief Gets the values of the models of the row
+ * @param row a row of the tree
+ * @param args an "Etk_Tree_Model *" followed by the location where to store 
the value of this model,
+ * then any number of "Etk_Tree_Model *"/Location pairs, and terminated by 
NULL.
+ * Note that some models may require several locations to store their value
+ */
+void etk_tree_row_model_fields_get_valist(Etk_Tree_Row *row, va_list args)
+{
+   Etk_Tree_Model *model;
+   va_list args2;
+   int i;
+   
+   if (!row)
+      return;
+   
+   va_copy(args2, args);
+   while ((model = va_arg(args, Etk_Tree_Model *)))
+   {
+      if (model->cell_data_get)
+         model->cell_data_get(model, 
row->cells_data[model->col->id][model->index], &args);
    }
    va_end(args2);
 }
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_tree.h,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -3 -r1.28 -r1.29
--- etk_tree.h  17 Jan 2007 04:57:05 -0000      1.28
+++ etk_tree.h  28 Jan 2007 22:57:07 -0000      1.29
@@ -207,6 +207,11 @@
 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_model_fields_set(Etk_Tree_Row *row, Etk_Bool emit_signal, 
...);
+void etk_tree_row_model_fields_set_valist(Etk_Tree_Row *row, Etk_Bool 
emit_signal, va_list args);
+void etk_tree_row_model_fields_get(Etk_Tree_Row *row, ...);
+void etk_tree_row_model_fields_get_valist(Etk_Tree_Row *row, va_list args);
+
 void  etk_tree_row_data_set(Etk_Tree_Row *row, void *data);
 void  etk_tree_row_data_set_full(Etk_Tree_Row *row, void *data, void 
(*free_cb)(void *data));
 void *etk_tree_row_data_get(Etk_Tree_Row *row);
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_tree_model.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -3 -r1.13 -r1.14
--- etk_tree_model.c    28 Jan 2007 19:30:11 -0000      1.13
+++ etk_tree_model.c    28 Jan 2007 22:57:07 -0000      1.14
@@ -767,7 +767,6 @@
    edje_object_message_signal_process(cell_objects[0]);
    
    evas_object_data_set(cell_objects[0], "_Etk_Tree_Model_Checkbox::Row", row);
-   evas_object_data_set(cell_objects[0], "_Etk_Tree_Model_Checkbox::Checked", 
checked);
    edje_object_size_min_get(cell_objects[0], &w, &h);
    evas_object_move(cell_objects[0], geometry.x, geometry.y + ((geometry.h - 
h) / 2));
    evas_object_resize(cell_objects[0], w, h);
@@ -793,13 +792,12 @@
 {
    Etk_Tree_Model *model;
    Etk_Tree_Row *row;
-   Etk_Bool *checked;
    Evas_Event_Mouse_Up *event;
    int ox, oy, ow, oh;
+   Etk_Bool checked;
    
    if (!(model = data) || !model->col || !(event = event_info)
-      || !(row = evas_object_data_get(obj, "_Etk_Tree_Model_Checkbox::Row"))
-      || !(checked = evas_object_data_get(obj, 
"_Etk_Tree_Model_Checkbox::Checked")))
+      || !(row = evas_object_data_get(obj, "_Etk_Tree_Model_Checkbox::Row")))
    {
       return;
    }
@@ -807,11 +805,8 @@
    evas_object_geometry_get(obj, &ox, &oy, &ow, &oh);
    if (ETK_INSIDE(event->canvas.x, event->canvas.y, ox, oy, ow, oh))
    {
-      *checked = !(*checked);
-      etk_signal_emit_by_name("cell_value_changed", ETK_OBJECT(model->col), 
NULL, row);
-      
-      /* Force the redraw the tree */
-      etk_widget_redraw_queue(ETK_WIDGET(model->tree));
+      etk_tree_row_model_fields_get(row, model, &checked, NULL);
+      etk_tree_row_model_fields_set(row, ETK_TRUE, model, !checked, NULL);
    }
 }
 
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_tree_model.h,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -3 -r1.8 -r1.9
--- etk_tree_model.h    17 Jan 2007 04:57:05 -0000      1.8
+++ etk_tree_model.h    28 Jan 2007 22:57:07 -0000      1.9
@@ -22,6 +22,7 @@
    Etk_Tree *tree;
    Etk_Tree_Col *col;
    int cell_data_size;
+   int index;
    
    void (*model_free)(Etk_Tree_Model *model);
    void (*cell_data_init)(Etk_Tree_Model *model, void *cell_data);



-------------------------------------------------------------------------
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