Enlightenment CVS committal

Author  : werkt
Project : misc
Module  : ewler

Dir     : misc/ewler/src/ewl_uic


Modified Files:
        ewl_uic.c form_file.c generate.c widgets.c widgets.h 


Log Message:
Bugfixes and major changes to layout/selected/inspector.

===================================================================
RCS file: /cvsroot/enlightenment/misc/ewler/src/ewl_uic/ewl_uic.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- ewl_uic.c   6 Jul 2004 03:38:12 -0000       1.1
+++ ewl_uic.c   27 Jul 2004 13:51:05 -0000      1.2
@@ -32,6 +32,7 @@
        Ecore_List *info;
        int out_fd, in_fd, header_fd = 0;
        char *src_buf = NULL, *header_buf = NULL;
+       char *filename_start, *filename_end;
        char *output_filename = NULL;
        char *output_header = NULL;
        char *input_filename;
@@ -109,11 +110,20 @@
                in_fd = 0;
        }
 
-       prefix_len = strrchr( output_filename, '.' ) -
-                                                        strrchr( output_filename, '/' 
) - 1;
+       if( strchr( output_filename, '/' ) )
+               filename_start = strrchr( output_filename, '/' ) + 1;
+       else
+               filename_start = output_filename;
+
+       if( strchr( output_filename, '.' ) > filename_start )
+               filename_end = strrchr( output_filename, '.' );
+       else
+               filename_end = output_filename + strlen( output_filename );
+
+       prefix_len = filename_end - filename_start;
 
        prefix = (char *) malloc( prefix_len + 1 );
-       strncpy( prefix, strrchr( output_filename, '/' ) + 1, prefix_len );
+       strncpy( prefix, filename_start, prefix_len );
 
        remove( output_filename );
        out_fd = open( output_filename, O_WRONLY | O_CREAT, 0644 );
===================================================================
RCS file: /cvsroot/enlightenment/misc/ewler/src/ewl_uic/form_file.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- form_file.c 6 Jul 2004 03:38:12 -0000       1.1
+++ form_file.c 27 Jul 2004 13:51:06 -0000      1.2
@@ -49,6 +49,7 @@
        const xmlChar *xml_attr;
        static char *elem_name;
        static Ecore_List *cur = NULL, *parent, *cur_info;
+       Ecore_List *last = NULL;
        Widget_Data_Elem *data;
        static Ecore_List *info_stack = NULL;
        static Ecore_List *data_stack = NULL;
@@ -76,7 +77,10 @@
                                        ecore_list_prepend( info_stack, cur );
                                        break;
                                case XML_READER_TYPE_END_ELEMENT:
-                                       cur = ecore_list_remove_first( info_stack );
+                                       last = cur;
+
+                                       ecore_list_remove_first( info_stack );
+                                       cur = ecore_list_goto_first( info_stack );
                                        if( !cur )
                                                done = 1;
                                        break;
@@ -114,7 +118,7 @@
        }
 
        if( done ) {
-               Ecore_List *c = cur;
+               Ecore_List *c = last;
 
                ecore_list_destroy( info_stack );
                ecore_list_destroy( data_stack );
===================================================================
RCS file: /cvsroot/enlightenment/misc/ewler/src/ewl_uic/generate.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- generate.c  6 Jul 2004 03:38:12 -0000       1.1
+++ generate.c  27 Jul 2004 13:51:06 -0000      1.2
@@ -54,10 +54,6 @@
                                                fprintf( fout, "\t%s( %s(%s), \"%s\" 
);\n", 
                                                                                 
data->type->w.set, data->type->w.cast,
                                                                                 name, 
data->w_str.value );
-                                       } else {
-                                               fprintf( fout, "\t%s( %s(%s), \"%s\" 
);\n", 
-                                                                                
data->type->w.set, data->type->w.cast,
-                                                                                name, 
data->w_str.value );
                                        }
                                        break;
                                case WIDGET_STRUCT_TYPE:
@@ -85,6 +81,19 @@
                                                                                else
                                                                                       
 fprintf( fout, "NULL" );
                                                                                break;
+                                                                       case 
WIDGET_ENUM_TYPE:
+                                                                               {
+                                                                                      
 char *enum_name;
+
+                                                                                      
 enum_name = ecore_hash_get( data->type->w_enum.map_rev,
+                                                                                      
                                                                                       
                          (void *) data->w_enum.value );
+
+                                                                                      
 if( enum_name )
+                                                                                      
         fprintf( fout, "%s", enum_name );
+                                                                                      
 else
+                                                                                      
         fprintf( fout, "0" );
+                                                                               }
+                                                                               break;
                                                                        case 
WIDGET_STRUCT_TYPE:
                                                                                /* 
well, we're fucked here */
                                                                                break;
@@ -93,6 +102,19 @@
 
                                        fprintf( fout, " );\n" );
                                        break;
+                               case WIDGET_ENUM_TYPE:
+                                       {
+                                               char *enum_name;
+
+                                               enum_name = ecore_hash_get( 
data->type->w_enum.map_rev,
+                                                                                      
                                                                         (void *) 
data->w_enum.value );
+
+                                               if( enum_name )
+                                                       fprintf( fout, "\t%s( %s(%s), 
%s );\n",
+                                                                                      
  data->type->w.set, data->type->w.cast,
+                                                                                      
  name, enum_name );
+                                       }
+                                       break;
                        }
                } else if( data->type->w.w_type == WIDGET_STRUCT_TYPE )
                        gen_sets( data->w_struct.members, name, NULL );
@@ -129,9 +151,41 @@
        args = widget_get_ctor_nargs( class );
 
        for( i=0;i<args;i++ ) {
+               Widget_Data_Elem *ctor_arg;
+
                if( i )
                        fprintf( fout, ", " );
-               fprintf( fout, "NULL" );
+       
+               ctor_arg = widget_lookup_ctor_arg( w, i );
+
+               if( ctor_arg ) {
+                       switch( ctor_arg->type->w.w_type ) {
+                               case WIDGET_INTEGER_TYPE:
+                                       fprintf( fout, "%d", ctor_arg->w_int.value );
+                                       break;
+                               case WIDGET_STRING_TYPE:
+                                       if( ctor_arg->w_str.value )
+                                               fprintf( fout, "\"%s\"", 
ctor_arg->w_str.value );
+                                       else
+                                               fprintf( fout, "NULL" );
+                                       break;
+                               case WIDGET_STRUCT_TYPE:
+                               case WIDGET_POINTER_TYPE: fprintf( fout, "NULL" ); 
break;
+                               case WIDGET_ENUM_TYPE:
+                                       {
+                                               char *enum_name;
+
+                                               enum_name = ecore_hash_get( 
ctor_arg->type->w_enum.map_rev,
+                                                                                      
                                                                         (void *) 
ctor_arg->w_enum.value );
+                                               if( enum_name )
+                                                       fprintf( fout, "%s", enum_name 
);
+                                               else
+                                                       fprintf( fout, "0" );
+                                       }
+                                       break;
+                       }
+               } else
+                       fprintf( fout, "NULL" );
        }
 
        fprintf( fout, " );\n\n" );
===================================================================
RCS file: /cvsroot/enlightenment/misc/ewler/src/ewl_uic/widgets.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- widgets.c   6 Jul 2004 03:38:12 -0000       1.1
+++ widgets.c   27 Jul 2004 13:51:06 -0000      1.2
@@ -47,7 +47,7 @@
 static Widget_Type_Elem widget_name_type = {
        {
                WIDGET_STRING_TYPE, "ewler_widget_name", 0,
-               NULL, NULL, NULL
+               NULL, NULL, NULL, NULL, -1, 0
        }
 };
 
@@ -189,6 +189,9 @@
                        lvl--;
                        c_info = t_info;
                        break;
+               case WIDGET_ENUM_TYPE:
+                       elem->w_enum.value = elem->type->w_enum.default_value;
+                       break;
        }
 
        ecore_list_prepend( c_info, elem );
@@ -271,6 +274,7 @@
 
        switch( data->type->w.w_type ) {
                case WIDGET_INTEGER_TYPE: break;
+               case WIDGET_ENUM_TYPE: break;
                case WIDGET_STRING_TYPE:
                        if( data->w_str.value ) {
                                FREE(data->w_str.value);
@@ -319,6 +323,20 @@
        return NULL;
 }
 
+Widget_Data_Elem *
+widget_lookup_ctor_arg( Ecore_List *info, int arg )
+{
+       Widget_Data_Elem *data;
+
+       ecore_list_goto_first( info );
+
+       while( (data = ecore_list_next( info )) )
+               if( data->type->w.ctor_arg == arg )
+                       return data;
+
+       return NULL;
+}
+
 void
 widget_strset_info( Ecore_List *info, char *elem, char *value )
 {
@@ -341,6 +359,10 @@
                                        else
                                                data->w_str.value = NULL;
                                        return;
+                               case WIDGET_ENUM_TYPE:
+                                       data->w_enum.value =
+                                               (int) ecore_hash_get( 
data->type->w_enum.map, value );
+                                       break;
                        }
                }
 }
@@ -399,6 +421,13 @@
                elem->w_struct.w_type = WIDGET_STRUCT_TYPE;
                elem->w_struct.members =
                        ecore_hash_new( ecore_str_hash, ecore_str_compare );
+       } else if( !strcmp( type, "enum" ) ) {
+               elem->w_enum.w_type = WIDGET_ENUM_TYPE;
+               elem->w_enum.map = ecore_hash_new( ecore_str_hash, ecore_str_compare );
+               elem->w_enum.map_rev =
+                       ecore_hash_new( ecore_direct_hash, ecore_direct_compare );
+       } else if( !strcmp( type, "enum_val" ) ) {
+               FREE(elem);
        } else if( type[len-1] == '*' && strpbrk( type, " \t" ) ) {
                elem->w_ptr.w_type = WIDGET_POINTER_TYPE;
 
@@ -421,6 +450,7 @@
        static char *class_name, *super_name;
        static Ecore_Hash *class, *elem_hash;
        static Widget_Type_Elem *elem, *last_elem = NULL;
+       Widget_Type_Elem *e;
        static void *ctor;
        static int nargs;
        int token;
@@ -477,7 +507,27 @@
                                case XML_READER_TYPE_ELEMENT:
                                        xml_attr = xmlTextReaderGetAttribute( reader, 
"type" );
 
-                                       elem = elem_new( xml_attr, reader );
+                                       e = elem_new( xml_attr, reader );
+                                       if( !e ) {
+                                               if( !strcmp( xml_attr, "enum_val" ) ) {
+                                                       int value;
+                                                       char *id;
+
+                                                       xml_attr = 
xmlTextReaderGetAttribute( reader, "value" );
+                                                       value = strtol( xml_attr, 
NULL, 0 );
+
+                                                       xml_attr = 
xmlTextReaderGetAttribute( reader, "id" );
+                                                       id = strdup( xml_attr );
+
+                                                       ecore_hash_set( 
elem->w_enum.map, id, (void *) value );
+                                                       ecore_hash_set( 
elem->w_enum.map_rev, (void *) value, id );
+                                               }
+                                               last_elem = elem;
+                                               elem = NULL;
+                                               break;
+                                       }
+
+                                       elem = e;
                                        elem->w.parent = last_elem;
                                        last_elem = elem;
 
@@ -505,19 +555,27 @@
                                        else
                                                elem->w.index = 0;
 
+                                       xml_attr = xmlTextReaderGetAttribute( reader, 
"ctor_arg" );
+                                       if( xml_attr )
+                                               elem->w.ctor_arg = strtol( xml_attr, 
NULL, 0 );
+                                       else
+                                               elem->w.ctor_arg = -1;
+
                                        elem->w.cast = strudup( class_name );
 
                                        if( elem->w.w_type == WIDGET_STRUCT_TYPE )
                                                elem_hash = elem->w_struct.members;
                                        break;
                                case XML_READER_TYPE_END_ELEMENT:
-                                       last_elem = elem->w.parent;
-                                       if( elem->w.w_type == WIDGET_STRUCT_TYPE && 
last_elem )
-                                               elem_hash = 
last_elem->w_struct.members;
-                                       else if( elem->w.w_type == WIDGET_STRUCT_TYPE )
-                                               elem_hash = class;
+                                       if( elem ) {
+                                               last_elem = elem->w.parent;
+                                               if( elem->w.w_type == 
WIDGET_STRUCT_TYPE && last_elem )
+                                                       elem_hash = 
last_elem->w_struct.members;
+                                               else if( elem->w.w_type == 
WIDGET_STRUCT_TYPE )
+                                                       elem_hash = class;
 
-                                       ecore_hash_set( elem_hash, elem->w.name, elem 
);
+                                               ecore_hash_set( elem_hash, 
elem->w.name, elem );
+                                       }
 
                                        elem = last_elem;
                                        break;
===================================================================
RCS file: /cvsroot/enlightenment/misc/ewler/src/ewl_uic/widgets.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- widgets.h   6 Jul 2004 03:38:12 -0000       1.1
+++ widgets.h   27 Jul 2004 13:51:06 -0000      1.2
@@ -5,6 +5,7 @@
 #define WIDGET_STRING_TYPE     2
 #define WIDGET_POINTER_TYPE    3
 #define WIDGET_STRUCT_TYPE     4
+#define WIDGET_ENUM_TYPE               5
 
 /* elem flags */
 #define ELEM_NO_MODIFY                 0x01
@@ -20,6 +21,7 @@
        char *set; \
        char *cast;     \
        Widget_Type_Elem *parent; \
+       int ctor_arg; \
        int index
 
 struct Widget_Integer_Elem {
@@ -43,6 +45,13 @@
        Ecore_Hash *members;
 };
 
+struct Widget_Enum_Elem {
+       WIDGET_TYPE_BASE;
+       Ecore_Hash *map;
+       Ecore_Hash *map_rev;
+       int default_value;
+};
+
 union Widget_Type_Elem {
        struct {
                WIDGET_TYPE_BASE;
@@ -51,6 +60,7 @@
        struct Widget_String_Elem w_str;
        struct Widget_Pointer_Elem w_ptr;
        struct Widget_Struct_Elem w_struct;
+       struct Widget_Enum_Elem w_enum;
 };
 
 /* The actual structures used to store widget info */
@@ -76,12 +86,18 @@
        Ecore_List *members;
 };
 
+struct Widget_Enum_Data_Elem {
+       Widget_Type_Elem *type;
+       int value;
+};
+
 union Widget_Data_Elem {
        Widget_Type_Elem *type;
        struct Widget_Integer_Data_Elem w_int;
        struct Widget_String_Data_Elem w_str;
        struct Widget_Pointer_Data_Elem w_ptr;
        struct Widget_Struct_Data_Elem w_struct;
+       struct Widget_Enum_Data_Elem w_enum;
 };
 
 typedef Ewl_Widget *(*Ewler_Ctor)();
@@ -99,6 +115,7 @@
 int widget_is_type( Ewl_Widget *w, char *type );
 void widget_strset_info( Ecore_List *info, char *elem, char *value );
 Widget_Data_Elem *widget_lookup_data( Ecore_List *info, char *elem );
+Widget_Data_Elem *widget_lookup_ctor_arg( Ecore_List *info, int arg );
 int widget_get_name( Ewl_Object *o );
 char *widget_get_class( Ecore_List *w );
 void widget_destroy_info( Ecore_List *info );




-------------------------------------------------------
This SF.Net email is sponsored by BEA Weblogic Workshop
FREE Java Enterprise J2EE developer tools!
Get your free copy of BEA WebLogic Workshop 8.1 today.
http://ads.osdn.com/?ad_id=4721&alloc_id=10040&op=click
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to