Enlightenment CVS committal

Author  : codewarrior
Project : e17
Module  : proto

Dir     : e17/proto/enity/src/bin


Modified Files:
        enity.c enity.h 


Log Message:
- support --checklist for --list

===================================================================
RCS file: /cvsroot/enlightenment/e17/proto/enity/src/bin/enity.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -3 -r1.7 -r1.8
--- enity.c     15 Mar 2006 10:09:31 -0000      1.7
+++ enity.c     15 Mar 2006 12:39:14 -0000      1.8
@@ -1,6 +1,7 @@
 #include "enity.h"
 
 static int _en_retval = 0;
+static Evas_List *_en_checked_rows = NULL;
 
 static Etk_Bool _en_window_delete_cb(void *data)
 {
@@ -22,6 +23,22 @@
    return NULL;
 }
 
+static void _en_tree_checkbox_toggled_cb(Etk_Object *object, Etk_Tree_Row 
*row, void *data)
+{
+   Etk_Bool checked;
+   Etk_Tree_Col *col;
+   
+   if (!(col = ETK_TREE_COL(object)) || !row)
+     return;
+   
+   etk_tree_row_fields_get(row, col, &checked, NULL);
+   if (checked)
+     _en_checked_rows = evas_list_append(_en_checked_rows, row);
+   else
+     _en_checked_rows = evas_list_remove(_en_checked_rows, row);
+}
+
+
 static void _en_ok_print_stdout_cb(Etk_Object *obj, int response_id, void 
*data)
 {
    switch(response_id)
@@ -41,49 +58,54 @@
          {
             Etk_Tree_Row *row;
             Evas_List *cols;
-#if 0       
-            Evas_List *l;
-            void **valist;
-            int j = 0;
-#endif      
-                           
-            row = etk_tree_selected_row_get(ETK_TREE(data));
-            cols = etk_tree_row_data_get(row);      
+            Evas_List *rows;        
+            char *str = NULL;
+            int check_value;
+            
+            if(_en_checked_rows)              
+              row = _en_checked_rows->data;
+            else
+              row = etk_tree_selected_row_get(ETK_TREE(data));
+                 
             if(!row) break;
+
+            cols = etk_tree_row_data_get(row);
             
-              {
-                 char *str;
-                 etk_tree_row_fields_get(row, 
((Enity_Tree_Col*)(cols->data))->col, &str, NULL);
-                 printf("%s\n", str);
-              }             
-#if 0       
-            valist = calloc(evas_list_count(cols) * 2 + 1, sizeof(void*));
+            if(!cols) break;
             
-            for(l = cols; l; l = l->next)
+            switch(((Enity_Tree_Col*)(cols->data))->model)
               {
-                 switch( ((Enity_Tree_Col*)(cols->data))->model)
+               case ENITY_COL_MODEL_TEXT:
+                 if(!row) break;                      
+                 etk_tree_row_fields_get(row, 
((Enity_Tree_Col*)(cols->data))->col, &str, NULL);
+                 break;
+                 
+               case ENITY_COL_MODEL_CHECK:
+                 
+                 str = calloc(PATH_MAX, sizeof(char));
+                 
+                 for(rows = _en_checked_rows; rows; rows = rows->next)
                    {
-                    case ENITY_COL_MODEL_TEXT:
-                      printf("text...\n");
-                      valist[j] = ((Enity_Tree_Col*)l->data)->col;
-                      valist[j + 1] = calloc(1, sizeof(char*));
-                      j += 2;
+                      char *val;                      
                       
-                      break;
-                    case ENITY_COL_MODEL_CHECK:
-                      break;
-                    case ENITY_COL_MODEL_RADIO:
-                      break;
+                      if(!(cols->next))
+                        break;
+                      
+                      if(strlen(str) > 0)
+                        strncat(str, "|", PATH_MAX);                       
+                      etk_tree_row_fields_get(rows->data, 
((Enity_Tree_Col*)(cols->data))->col, &check_value, 
((Enity_Tree_Col*)(cols->next->data))->col, &val, NULL);
+                      strncat(str, val, PATH_MAX);
                    }
+                 break;
+                 
+               case ENITY_COL_MODEL_RADIO:
+                 break;
               }
             
-            valist[j] = NULL;       
-            etk_tree_row_fields_get_valist(row, (va_list)valist);
-            printf("%s\n", valist[1]);
-#endif      
-            break;
-         }     
+            printf("%s\n", str);
+         }
        break;
+       
       case ETK_RESPONSE_CANCEL:
        _en_retval = 1;
        break;
@@ -232,6 +254,11 @@
    /* do any changes / fixes / checks here */
 }
 
+static void _en_list_check_cb(Etk_Argument *args, int index)
+{
+   /* do any changes / fixes / checks here */
+}
+
 static void _en_list_cb(Etk_Argument *args, int index)
 {
    Etk_Widget *dialog;   
@@ -262,8 +289,19 @@
             
             /* todo - implement checkboxes and radio buttons */
             col = calloc(1, sizeof(Enity_Tree_Col));
-            col->col = etk_tree_col_new(ETK_TREE(tree), l->data, 
etk_tree_model_text_new(ETK_TREE(tree)), 60);
-            col->model = ENITY_COL_MODEL_TEXT;
+                    
+            if(etk_argument_is_set(args, "checklist", ' ') && 
evas_list_count(cols) == 0)
+              {
+                 col->col = etk_tree_col_new(ETK_TREE(tree), l->data, 
etk_tree_model_checkbox_new(ETK_TREE(tree)), 60);
+                 col->model = ENITY_COL_MODEL_CHECK;
+                 etk_signal_connect("cell_value_changed", 
ETK_OBJECT(col->col), ETK_CALLBACK(_en_tree_checkbox_toggled_cb), NULL);
+                 
+              }
+            else
+              {
+                 col->col = etk_tree_col_new(ETK_TREE(tree), l->data, 
etk_tree_model_text_new(ETK_TREE(tree)), 60);
+                 col->model = ENITY_COL_MODEL_TEXT;              
+              }
             cols = evas_list_append(cols, col);
          }
        etk_tree_build(ETK_TREE(tree));
@@ -284,7 +322,21 @@
                  value = l->data;
                  
                  valist[j] = ((Enity_Tree_Col*)evas_list_nth(cols, i))->col;
-                 valist[j + 1] = value;
+                 
+                 switch(((Enity_Tree_Col*)evas_list_nth(cols, i))->model)
+                   {
+                    case ENITY_COL_MODEL_TEXT:
+                      valist[j + 1] = value;
+                      break;
+                      
+                    case ENITY_COL_MODEL_CHECK:
+                      valist[j + 1] = ETK_FALSE;
+                      break;
+                      
+                    case ENITY_COL_MODEL_RADIO:
+                      break;
+                   }
+                 
                  j += 2;
                                  
                  if(l->next && i < evas_list_count(cols) - 1)
@@ -354,6 +406,7 @@
      { "warning", ' ', NULL, _en_warning_cb, NULL, ETK_ARGUMENT_FLAG_OPTIONAL, 
"Display warning dialog" },
 
      /* --list options */
+     { "checklist", ' ', NULL, _en_list_check_cb, NULL, 
ETK_ARGUMENT_FLAG_OPTIONAL, "Use check boxes for first column" },
      { "column", ' ', NULL, _en_list_column_cb, NULL, 
ETK_ARGUMENT_FLAG_OPTIONAL|ETK_ARGUMENT_FLAG_VALUE_REQUIRED|ETK_ARGUMENT_FLAG_MULTIVALUE,
 "Set the column header" },
      { "list", ' ', NULL, _en_list_cb, NULL, ETK_ARGUMENT_FLAG_OPTIONAL, 
"Display list dialog" },
      /* terminator */
@@ -364,14 +417,13 @@
 {
    etk_init();
       
-   if(etk_arguments_parse(args, argc, argv) == 
ETK_ARGUMENT_RETURN_OK_NONE_PARSED)
+   if(etk_arguments_parse(args, argc, argv) != ETK_ARGUMENT_RETURN_OK)
      {
        etk_argument_help_show(args);
        goto SHUTDOWN;
      }
    
    etk_main();
-QUIT:   
    etk_main_quit();
 SHUTDOWN:   
    etk_shutdown();
===================================================================
RCS file: /cvsroot/enlightenment/e17/proto/enity/src/bin/enity.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- enity.h     14 Mar 2006 12:02:31 -0000      1.2
+++ enity.h     15 Mar 2006 12:39:14 -0000      1.3
@@ -4,6 +4,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <limits.h>
 
 #include <Etk.h>
 #include <Evas.h>
@@ -21,6 +22,7 @@
 };
 
 static Evas_List *_en_arg_data_get(Etk_Argument *args, char *key);
+static void _en_tree_checkbox_toggled_cb(Etk_Object *object, Etk_Tree_Row 
*row, void *data);
 static void _en_ok_print_stdout_cb(Etk_Object *obj, int response_id, void 
*data);
 static void _en_entry_cb(Etk_Argument *args, int index);
 static void _en_error_cb(Etk_Argument *args, int index);




-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to