Enlightenment CVS committal Author : werkt Project : misc Module : ewler
Dir : misc/ewler/src Modified Files: Makefile.am ewler.h file.c form.c inspector.c main.c project.c widget.c Added Files: callback.c Log Message: Callback manager has been added and several bugs have been fixed. See TODO for more information. =================================================================== RCS file: /cvsroot/enlightenment/misc/ewler/src/Makefile.am,v retrieving revision 1.11 retrieving revision 1.12 diff -u -3 -r1.11 -r1.12 --- Makefile.am 13 Aug 2005 00:10:39 -0000 1.11 +++ Makefile.am 15 Aug 2005 04:49:12 -0000 1.12 @@ -10,6 +10,7 @@ bin_PROGRAMS = ewler ewler_SOURCES = \ + callback.c \ file.c \ form.c \ inspector.c \ =================================================================== RCS file: /cvsroot/enlightenment/misc/ewler/src/ewler.h,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- ewler.h 13 Aug 2005 00:10:39 -0000 1.6 +++ ewler.h 15 Aug 2005 04:49:12 -0000 1.7 @@ -26,6 +26,11 @@ typedef struct Ewler_Form Ewler_Form; +/* callback.c */ +extern int callbacks_init( void ); +extern void callbacks_update( Ecore_List *selected ); +extern EWL_CALLBACK_DEFN(callbacks_toggle); + /* file.c */ extern void file_project_save( Ewler_Project *p ); extern int file_project_open( Ewler_Project *p ); @@ -194,6 +199,8 @@ char *source; Ecore_Hash *elems; + + Ecore_List *callbacks[EWL_CALLBACK_MAX]; }; struct Ewler_Widget_Elem { =================================================================== RCS file: /cvsroot/enlightenment/misc/ewler/src/file.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- file.c 13 Aug 2005 00:10:39 -0000 1.1 +++ file.c 15 Aug 2005 04:49:12 -0000 1.2 @@ -9,6 +9,37 @@ #include "ewler.h" #include "config.h" +static char *callback_names[] = { + "EWL_CALLBACK_EXPOSE", + "EWL_CALLBACK_REALIZE", + "EWL_CALLBACK_UNREALIZE", + "EWL_CALLBACK_SHOW", + "EWL_CALLBACK_HIDE", + "EWL_CALLBACK_DESTROY", + "EWL_CALLBACK_DELETE_WINDOW", + "EWL_CALLBACK_CONFIGURE", + "EWL_CALLBACK_REPARENT", + "EWL_CALLBACK_KEY_DOWN", + "EWL_CALLBACK_KEY_UP", + "EWL_CALLBACK_MOUSE_DOWN", + "EWL_CALLBACK_MOUSE_UP", + "EWL_CALLBACK_MOUSE_MOVE", + "EWL_CALLBACK_MOUSE_WHEEL", + "EWL_CALLBACK_FOCUS_IN", + "EWL_CALLBACK_FOCUS_OUT", + "EWL_CALLBACK_SELECT", + "EWL_CALLBACK_DESELECT", + "EWL_CALLBACK_CLICKED", + "EWL_CALLBACK_DOUBLE_CLICKED", + "EWL_CALLBACK_HILITED", + "EWL_CALLBACK_VALUE_CHANGED", + "EWL_CALLBACK_STATE_CHANGED", + "EWL_CALLBACK_APPEARANCE_CHANGED", + "EWL_CALLBACK_WIDGET_ENABLE", + "EWL_CALLBACK_WIDGET_DISABLE", + "EWL_CALLBACK_PASTE" +}; + void file_project_save( Ewler_Project *p ) { @@ -491,6 +522,7 @@ Ecore_List *names, *names_stack; char *widget_name; char *name; + int i; exml_start(xml); exml_tag_set(xml, "widget"); @@ -542,6 +574,22 @@ ecore_list_destroy(names_stack); ecore_list_destroy(elems_stack); + for( i=0;i<EWL_CALLBACK_MAX;i++ ) { + char *handler; + + if( !w->callbacks[i] ) + continue; + + ecore_list_goto_first(w->callbacks[i]); + while( (handler = ecore_list_next(w->callbacks[i])) ) { + exml_start(xml); + exml_tag_set(xml, "callback"); + exml_attribute_set(xml, "name", callback_names[i]); + exml_value_set(xml, handler); + exml_end(xml); + } + } + ecore_list_prepend(widget_stack, children); widget_name = (char *) ewl_widget_name_get(w->w); @@ -628,8 +676,33 @@ ecore_list_prepend(elems_stack, elems); ecore_list_prepend(w_stack, parent); w = widget_new(type); + ewler_w = ewl_widget_data_get(w, "EWLER_WIDGET"); ewl_container_child_append(EWL_CONTAINER(parent), w); - ecore_list_append(f->widgets, ewl_widget_data_get(w, "EWLER_WIDGET")); + ecore_list_append(f->widgets, ewler_w); + } else if( !strcmp(tag, "callback") ) { + int callback; + char *handler; + char *name; + + name = exml_attribute_get(xml, "name"); + handler = exml_value_get(xml); + + if( name ) { + for( callback=0;callback<EWL_CALLBACK_MAX;callback++ ) + if( !strcmp(name, callback_names[callback]) ) + break; + + if( callback < EWL_CALLBACK_MAX && handler ) { + if( !ewler_w->callbacks[callback] ) { + ewler_w->callbacks[callback] = ecore_list_new(); + ecore_list_set_free_cb(ewler_w->callbacks[callback], free); + } + + ecore_list_append(ewler_w->callbacks[callback], strdup(handler)); + } + } + + goto next; } else if( !strcmp(tag, "attr") ) { char *name; Ewler_Widget_Elem *elem; @@ -673,6 +746,7 @@ next = exml_down(xml); } else { +next: while( !(next = exml_next_nomove(xml)) && elems != f->overlay->elems ) { if( ecore_list_nodes(elems_stack) == ecore_list_nodes(w_stack) ) =================================================================== RCS file: /cvsroot/enlightenment/misc/ewler/src/form.c,v retrieving revision 1.22 retrieving revision 1.23 diff -u -3 -r1.22 -r1.23 --- form.c 13 Aug 2005 00:10:39 -0000 1.22 +++ form.c 15 Aug 2005 04:49:12 -0000 1.23 @@ -84,18 +84,24 @@ { Ewl_Event_Mouse_Down *ev = ev_data; + if( active_form->menu ) { + ewl_widget_destroy(active_form->menu); + active_form->menu = NULL; + } + switch( ev->button ) { case 1: if( !widget_under_cursor && !(ev->modifiers & (EWL_KEY_MODIFIER_CTRL | EWL_KEY_MODIFIER_SHIFT)) ) form_deselect_all(); - widget_under_cursor = false; break; case 3: if( ecore_list_nodes(active_form->selected) ) form_menu(ev->x, ev->y); break; } + + widget_under_cursor = false; } void @@ -127,10 +133,13 @@ active_form = ecore_list_goto_first(forms); - if( active_form ) + if( active_form ) { inspector_update(active_form->selected); - else + callbacks_update(active_form->selected); + } else { inspector_update(NULL); + callbacks_update(NULL); + } } EWL_CALLBACK_DEFN(form_new) @@ -373,8 +382,10 @@ while( (ewler_w = ecore_list_goto_first(form->selected)) ) form_destroy(form, ewler_w); - if( active_form && active_form->selected ) - inspector_update( active_form->selected ); + if( active_form && active_form->selected ) { + inspector_update(active_form->selected); + callbacks_update(active_form->selected); + } break; } @@ -386,6 +397,8 @@ { ewl_callback_del(w, EWL_CALLBACK_CONFIGURE, form_menu_configure); ewl_widget_hide(w); + + ewl_widget_layer_set(EWL_IMENU(w)->base.popup, 1000); } static bool @@ -534,6 +547,7 @@ widget_deselect(w); inspector_update(active_form->selected); + callbacks_update(active_form->selected); } void @@ -546,6 +560,7 @@ widget_select(w); inspector_update(active_form->selected); + callbacks_update(active_form->selected); } void @@ -559,6 +574,7 @@ widget_deselect(w); inspector_update(active_form->selected); + callbacks_update(active_form->selected); } void @@ -582,6 +598,7 @@ } inspector_update(active_form->selected); + callbacks_update(active_form->selected); } Ecore_List * @@ -672,6 +689,7 @@ form_dirty_set(active_form); inspector_update(active_form->selected); + callbacks_update(active_form->selected); } int =================================================================== RCS file: /cvsroot/enlightenment/misc/ewler/src/inspector.c,v retrieving revision 1.14 retrieving revision 1.15 diff -u -3 -r1.14 -r1.15 --- inspector.c 13 Aug 2005 00:10:39 -0000 1.14 +++ inspector.c 15 Aug 2005 04:49:12 -0000 1.15 @@ -265,7 +265,8 @@ row = ewl_tree_row_add(EWL_TREE(tree), EWL_ROW(prow), row_items); ewl_widget_show(text); - ewl_widget_show(entry); + if( entry ) + ewl_widget_show(entry); if( elem->spec->type == EWLER_SPEC_ELEM_STRUCT ) { ecore_list_prepend(prow_stack, prow); =================================================================== RCS file: /cvsroot/enlightenment/misc/ewler/src/main.c,v retrieving revision 1.11 retrieving revision 1.12 diff -u -3 -r1.11 -r1.12 --- main.c 13 Aug 2005 00:10:39 -0000 1.11 +++ main.c 15 Aug 2005 04:49:12 -0000 1.12 @@ -65,7 +65,8 @@ projects_init(argv[1]) < 0 || forms_init() < 0 || tools_init() < 0 || - inspector_init() < 0 ) + inspector_init() < 0 || + callbacks_init() < 0 ) exit( EXIT_FAILURE ); ewl_main(); =================================================================== RCS file: /cvsroot/enlightenment/misc/ewler/src/project.c,v retrieving revision 1.12 retrieving revision 1.13 diff -u -3 -r1.12 -r1.13 --- project.c 13 Aug 2005 00:10:39 -0000 1.12 +++ project.c 15 Aug 2005 04:49:12 -0000 1.13 @@ -101,6 +101,7 @@ text = ewl_tree_row_column_get(EWL_ROW(row), 0); name = ewl_text_text_get(EWL_TEXT(text)); ecore_hash_remove(active_project->files, name); + FREE(name); active_project->dirty = true; } @@ -649,6 +650,11 @@ ewl_callback_append(item, EWL_CALLBACK_CLICKED, inspector_toggle, NULL); ewl_widget_show(item); + item = ewl_menu_item_new(NULL, "Callbacks"); + ewl_container_child_append(EWL_CONTAINER(windows_menu), item); + ewl_callback_append(item, EWL_CALLBACK_CLICKED, callbacks_toggle, NULL); + ewl_widget_show(item); + ewl_widget_show(windows_menu); ewl_widget_show(menu); =================================================================== RCS file: /cvsroot/enlightenment/misc/ewler/src/widget.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- widget.c 13 Aug 2005 00:10:39 -0000 1.3 +++ widget.c 15 Aug 2005 04:49:12 -0000 1.4 @@ -120,7 +120,7 @@ } ewl_object_current_geometry_get(EWL_OBJECT(ewler_w->w), - &x, &y, &height, &width); + &x, &y, &width, &height); ewl_object_preferred_inner_size_get(EWL_OBJECT(ewler_w->w), &pref_w, &pref_h); current = ecore_hash_get(ewler_w->elems, "current"); @@ -135,13 +135,13 @@ ewl_text_color_apply(EWL_TEXT(elem->text), 255, 0, 0, 255, len); } + elem->info.ivalue = x; + elem->changed = true; if( elem->entry ) ewl_text_text_set(EWL_TEXT(elem->entry), elem_to_s(elem)); } - elem->info.ivalue = x; - elem = ecore_hash_get(current->info.children, "y"); if( elem->info.ivalue != y ) { if( elem->text && !elem->changed ) { @@ -152,13 +152,13 @@ ewl_text_color_apply(EWL_TEXT(elem->text), 255, 0, 0, 255, len); } + elem->info.ivalue = y; + elem->changed = true; if( elem->entry ) ewl_text_text_set(EWL_TEXT(elem->entry), elem_to_s(elem)); } - elem->info.ivalue = y; - elem = ecore_hash_get(current->info.children, "w"); if( elem->info.ivalue != width ) { if( elem->text && !elem->changed ) { @@ -169,6 +169,8 @@ ewl_text_color_apply(EWL_TEXT(elem->text), 255, 0, 0, 255, len); } + elem->info.ivalue = width; + elem->changed = true; if( elem->entry ) ewl_text_text_set(EWL_TEXT(elem->entry), elem_to_s(elem)); @@ -186,6 +188,8 @@ ewl_text_color_apply(EWL_TEXT(elem->text), 255, 0, 0, 255, len); } + elem->info.ivalue = height; + elem->changed = true; if( elem->entry ) ewl_text_text_set(EWL_TEXT(elem->entry), elem_to_s(elem)); @@ -503,6 +507,7 @@ Ewler_Widget *ewler_w = user_data; Ewl_Embed *embed; Ewl_Event_Mouse_Down *ev = ev_data; + bool multi; if( !ewler_w->selectable || widget_under_cursor ) @@ -520,19 +525,23 @@ ewler_w->corners.u = CURRENT_X(w) + CURRENT_W(w); ewler_w->corners.v = CURRENT_Y(w) + CURRENT_H(w); - if( ev->button == 1 ) { - if( ev->modifiers & (EWL_KEY_MODIFIER_CTRL | EWL_KEY_MODIFIER_SHIFT) ) { - form_toggle(ewler_w); - } else { - Ecore_List *selected; + if( ev->modifiers & (EWL_KEY_MODIFIER_CTRL | EWL_KEY_MODIFIER_SHIFT) ) + multi = true; + else + multi = false; - selected = form_selected(); - if( selected && - (ecore_list_nodes(selected) != 1 || - ecore_list_goto_first(selected) != ewler_w) ) { - form_deselect_all(); - form_select(ewler_w); - } + if( ev->button == 1 && multi ) { + form_toggle(ewler_w); + } else if( ev->button == 1 || + (!multi && !ecore_list_nodes(form_selected())) ) { + Ecore_List *selected; + + selected = form_selected(); + if( selected && + (ecore_list_nodes(selected) != 1 || + ecore_list_goto_first(selected) != ewler_w) ) { + form_deselect_all(); + form_select(ewler_w); } } @@ -563,6 +572,7 @@ static EWL_CALLBACK_DEFN(widget_destroy) { Ewler_Widget *ewler_w; + int i; ewler_w = user_data; if( !ewler_w ) @@ -576,6 +586,10 @@ ecore_hash_destroy(ewler_w->elems); + for( i=0;i<EWL_CALLBACK_MAX;i++ ) + if( ewler_w->callbacks[i] ) + ecore_list_destroy(ewler_w->callbacks[i]); + FREE(ewler_w); } ------------------------------------------------------- SF.Net email is Sponsored by the Better Software Conference & EXPO September 19-22, 2005 * San Francisco, CA * Development Lifecycle Practices Agile & Plan-Driven Development * Managing Projects & Teams * Testing & QA Security * Process Improvement & Measurement * http://www.sqe.com/bsce5sf _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs