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