Enlightenment CVS committal Author : werkt Project : misc Module : ewler
Dir : misc/ewler/src Modified Files: Makefile.am ewler.c form.c form.h inspector.c main.c project.c selected.c selected.h widgets.c widgets.h Removed Files: ewl_button_stock.c ewl_button_stock.h ewl_dialog.c ewl_dialog.h ewl_filedialog_stock.c ewl_filedialog_stock.h ewl_stock.c ewl_stock.h Log Message: Layouts, selected, and enums are now in the tree. =================================================================== RCS file: /cvsroot/enlightenment/misc/ewler/src/Makefile.am,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- Makefile.am 6 Jul 2004 03:38:12 -0000 1.3 +++ Makefile.am 25 Jul 2004 01:01:49 -0000 1.4 @@ -7,10 +7,6 @@ bin_PROGRAMS = ewler ewler_SOURCES = \ - ewl_button_stock.c ewl_button_stock.h \ - ewl_dialog.c ewl_dialog.h \ - ewl_filedialog_stock.c ewl_filedialog_stock.h \ - ewl_stock.c ewl_stock.h \ ewler.c ewler.h \ form.c form.h \ form_file.c form_file.h \ @@ -18,6 +14,7 @@ main.c \ project.c project.h \ selected.c selected.h \ - widgets.c widgets.h + widgets.c widgets.h \ + layout.c ewler_LDADD = @ewl_libs@ @xml2_libs@ =================================================================== RCS file: /cvsroot/enlightenment/misc/ewler/src/ewler.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- ewler.c 6 Jul 2004 05:19:54 -0000 1.3 +++ ewler.c 25 Jul 2004 01:01:49 -0000 1.4 @@ -2,10 +2,6 @@ #include <stdio.h> #include <Ewl.h> -#include "ewl_dialog.h" -#include "ewl_stock.h" -#include "ewl_filedialog_stock.h" - #include "ewler.h" #include "form.h" #include "widgets.h" @@ -48,23 +44,28 @@ __open_form_cb( Ewl_Widget *w, void *ev_data, void *user_data ) { char *filename = ev_data; + Ewl_Widget *window = user_data; if( filename ) { ewler_open_file( filename ); - ewl_widget_destroy( w ); + ewl_widget_destroy( window ); } } static void __open_form( Ewl_Widget *w, void *ev_data, void *user_data ) { - Ewl_Widget *dialog; + Ewl_Widget *window, *dialog; + + window = ewl_window_new(); + ewl_widget_show( window ); - dialog = ewl_filedialog_stock_new( EWL_FILEDIALOG_TYPE_OPEN ); + dialog = ewl_filedialog_new( EWL_FILEDIALOG_TYPE_OPEN ); + ewl_container_append_child( EWL_CONTAINER(window), dialog ); ewl_callback_append( dialog, EWL_CALLBACK_VALUE_CHANGED, - __open_form_cb, NULL ); - ewl_callback_append( dialog, EWL_CALLBACK_DELETE_WINDOW, - __destroy_dialog, dialog ); + __open_form_cb, window ); + ewl_callback_append( window, EWL_CALLBACK_DELETE_WINDOW, + __destroy_dialog, window ); ewl_widget_show( dialog ); } @@ -192,7 +193,7 @@ void tool_set_name( Ewl_Widget *w, void *ev_data, void *user_data ) { - active_tool = ewl_button_get_label( EWL_TEXT(w) ); + active_tool = ewl_button_get_label( EWL_BUTTON(w) ); } void @@ -231,11 +232,12 @@ tool_set_name, NULL ); } else text[0] = ewl_text_new( class ); - ewl_object_set_fill_policy( text[0], EWL_FLAG_FILL_NONE ); + ewl_object_set_fill_policy( EWL_OBJECT(text[0]), EWL_FLAG_FILL_NONE ); ewl_widget_show( text[0] ); row = ewl_tree_add_row( EWL_TREE(tool_tree), EWL_ROW(prow), text ); ewl_object_set_fill_policy( EWL_OBJECT(row->parent), EWL_FLAG_FILL_FILL ); + ewl_tree_set_row_expand( EWL_ROW(row), EWL_TREE_NODE_EXPANDED ); add_tools_with_parent( class, row ); ewl_widget_show( row ); =================================================================== RCS file: /cvsroot/enlightenment/misc/ewler/src/form.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -3 -r1.8 -r1.9 --- form.c 6 Jul 2004 05:19:54 -0000 1.8 +++ form.c 25 Jul 2004 01:01:49 -0000 1.9 @@ -5,10 +5,6 @@ */ #include <Ewl.h> -#include "ewl_stock.h" -#include "ewl_dialog.h" -#include "ewl_filedialog_stock.h" - #include "ewler.h" #include "widgets.h" #include "form.h" @@ -16,9 +12,12 @@ #include "project.h" #include "inspector.h" #include "selected.h" +#include "layout.h" Ecore_List *forms; static int widget_selected = 0; +static int widget_created = 0; +static Ecore_Hash *key_bindings = NULL; Ewl_Widget *widget_container = NULL; static struct { @@ -50,7 +49,7 @@ static void __destroy_form( Ewl_Widget *w, void *ev_data, void *user_data ) { - Ewler_Form *form = EWLER_FORM(user_data); + Ewler_Form *form = user_data; if( form->dirty ) { /* manufacture save/ok/cancel dialog */ @@ -71,6 +70,17 @@ } static void +__destroy_popup( Ewl_Widget *w, void *ev_data, void *user_data ) +{ + Ewler_Form *form = user_data; + + if( form->popup ) { + ewl_widget_destroy( form->popup ); + form->popup = NULL; + } +} + +static void __mouse_down_widget( Ewl_Widget *w, void *ev_data, void *user_data ) { Ewler_Form *form = EWLER_FORM(user_data); @@ -78,25 +88,29 @@ Ewler_Ctor tool_ctor; tool_ctor = widget_get_ctor( tool_get_name() ); - if( tool_ctor && widget_is_type( w, "Ewl_Container" ) ) { - widget_container = w; - } else if( !widget_selected ) { - /* check for shift down */ - if( ev->modifiers != EWL_KEY_MODIFIER_SHIFT && - ev->modifiers != EWL_KEY_MODIFIER_CTRL ) - form_selected_clear( form ); - - form_selected_append( form, w ); + if( ev->button == 1 ) { + if( tool_ctor && widget_is_type( w, "Ewl_Container" ) ) { + widget_container = w; + dragging.active = 0; + } else if( !widget_selected ) { + /* check for shift down */ + if( ev->modifiers != EWL_KEY_MODIFIER_SHIFT && + ev->modifiers != EWL_KEY_MODIFIER_CTRL ) + form_selected_clear( form ); + + form_selected_append( form, w->parent ); + + dragging.ox = ev->x; + dragging.oy = ev->y; + dragging.active = 1; - dragging.ox = ev->x; - dragging.oy = ev->y; - dragging.active = 1; + widget_selected = 1; + } - widget_selected = 1; - } - if( form->popup ) { - ewl_widget_destroy(form->popup); - form->popup = NULL; + if( form->popup ) { + ewl_widget_destroy(form->popup); + form->popup = NULL; + } } } @@ -140,10 +154,15 @@ ecore_list_goto_first( form->selected ); while( (c_s = ecore_list_next( form->selected )) ) { + Ewl_Widget *c_w = ewler_selected_get( EWLER_SELECTED(c_s) ); ewl_object_request_position(EWL_OBJECT(c_s), CURRENT_X(c_s) - dx, CURRENT_Y(c_s) - dy); - widget_changed(ewler_selected_get(EWLER_SELECTED(c_s))); + ewl_object_set_fill_policy( EWL_OBJECT(c_s), + ewl_object_get_fill_policy(EWL_OBJECT(c_w)) ); + ewl_object_set_alignment( EWL_OBJECT(c_s), + ewl_object_get_alignment(EWL_OBJECT(c_w)) ); + widget_changed(c_w); } dragging.active = 0; } @@ -167,7 +186,8 @@ ecore_list_goto_first( form->selected ); while( (c_s = ecore_list_next( form->selected )) ) - ewl_callback_call_with_event_data(c_s, EWL_CALLBACK_MOUSE_MOVE, ev_data); + if( c_s != form->overlay ) + ewl_callback_call_with_event_data(c_s, EWL_CALLBACK_MOUSE_MOVE, ev_data); } static void @@ -190,6 +210,7 @@ tool_ctor = widget_get_ctor( tool_get_name() ); if( tool_ctor ) { char *widget_name; + Ewl_Widget *s; if( !widget_container ) widget_container = form->overlay; @@ -217,14 +238,18 @@ ewl_container_append_child( EWL_CONTAINER(widget_container), nw ); ewl_widget_show( nw ); + s = ewler_selected_new( nw ); + ewl_widget_show( s ); + form_selected_clear( form ); - form_selected_append( form, nw ); + form_selected_append( form, s ); form_set_dirty( form ); ecore_hash_set( form->elements, widget_name, nw ); ecore_hash_set( form->elements_rev, nw, widget_name ); + widget_created = 1; } else { form_selected_clear( form ); form_selected_append( form, form->overlay ); @@ -243,12 +268,35 @@ ewl_callback_call(form->popup, EWL_CALLBACK_SELECT); menu_item = ewl_menu_item_new(NULL, "Lay Out Horizontally"); + ewl_callback_append( menu_item, EWL_CALLBACK_SELECT, + layout_horizontal_cb, form ); + ewl_callback_append( menu_item, EWL_CALLBACK_SELECT, + __destroy_popup, form ); ewl_container_append_child(EWL_CONTAINER(form->popup), menu_item); ewl_widget_show(menu_item); menu_item = ewl_menu_item_new(NULL, "Lay Out Vertically"); + ewl_callback_append( menu_item, EWL_CALLBACK_SELECT, + layout_vertical_cb, form ); + ewl_callback_append( menu_item, EWL_CALLBACK_SELECT, + __destroy_popup, form ); ewl_container_append_child(EWL_CONTAINER(form->popup), menu_item); ewl_widget_show(menu_item); + + menu_item = EWL_WIDGET(ewl_menu_separator_new()); + ewl_container_append_child(EWL_CONTAINER(form->popup), menu_item); + ewl_widget_show(menu_item); + + menu_item = ewl_menu_item_new(NULL, "Edit Callbacks"); + ewl_container_append_child(EWL_CONTAINER(form->popup), menu_item); + ewl_callback_append( menu_item, EWL_CALLBACK_SELECT, + __destroy_popup, form ); +#if 0 + ewl_callback_append( menu_item, EWL_CALLBACK_SELECT, + callbacks_show, NULL ); +#endif + + ewl_widget_show(menu_item); break; } @@ -256,6 +304,17 @@ widget_selected = 0; } +static void +__key_down_form( Ewl_Widget *w, void *ev_data, void *user_data ) +{ + Ewler_Form *form = user_data; + Ewl_Event_Key_Down *ev = ev_data; + Ewler_Form_Key_Cb key_cb = ecore_hash_get( key_bindings, ev->keyname ); + + if( key_cb ) + key_cb( form ); +} + void form_set_widget_selected( void ) { @@ -268,6 +327,18 @@ widget_selected = 0; } +int +form_widget_created( void ) +{ + return widget_created; +} + +void +form_clear_widget_created( void ) +{ + widget_created = 0; +} + void form_set_widget_dragging( Ewl_Widget *w, Ewl_Event_Mouse_Down *ev ) { @@ -286,12 +357,17 @@ form_add_widget( Ewler_Form *form, char *name, Ewl_Widget *w ) { ewl_callback_del_type( w, EWL_CALLBACK_CLICKED ); + ewl_callback_del_type( w, EWL_CALLBACK_MOUSE_DOWN ); + ewl_callback_del_type( w, EWL_CALLBACK_MOUSE_UP ); + ewl_callback_del_type( w, EWL_CALLBACK_MOUSE_MOVE ); ewl_callback_append( w, EWL_CALLBACK_MOUSE_DOWN, __mouse_down_widget, form ); ewl_callback_append( w, EWL_CALLBACK_FOCUS_IN, __mouse_in_form, form ); + ewl_object_set_fill_policy( EWL_OBJECT(w), EWL_FLAG_FILL_NONE ); + ecore_hash_set( form->elements, name, w ); ecore_hash_set( form->elements_rev, w, name ); } @@ -336,10 +412,19 @@ __mouse_in_form, form ); ewl_callback_append( form->overlay, EWL_CALLBACK_MOUSE_MOVE, __mouse_move_widget, form ); + ewl_callback_append( form->overlay, EWL_CALLBACK_KEY_DOWN, + __key_down_form, form ); ewl_container_append_child( EWL_CONTAINER(form->window), form->overlay ); ewl_widget_set_data( form->overlay, "unsizable", (void *) 1 ); ewl_widget_show( form->overlay ); +#if 0 + form->selector = ewler_selected_new( form->overlay ); + ewl_callback_call( form->selector, EWL_CALLBACK_DESELECT ); + ewl_object_set_preferred_size( EWL_OBJECT(form->selector), 800, 600 ); + ewl_widget_show( form->selector ); +#endif + form->selected = ecore_list_new(); form->elements = ecore_hash_new( ecore_str_hash, ecore_str_compare ); form->elements_rev = @@ -386,12 +471,16 @@ if( form ) { if( !form->has_been_saved || save_as ) { - Ewl_Widget *dialog; + Ewl_Widget *window, *dialog; - dialog = ewl_filedialog_stock_new( EWL_FILEDIALOG_TYPE_SAVE ); + window = ewl_window_new(); + ewl_widget_show( window ); + + dialog = ewl_filedialog_new( EWL_FILEDIALOG_TYPE_SAVE ); + ewl_container_append_child( EWL_CONTAINER(window), dialog ); ewl_callback_append( dialog, EWL_CALLBACK_VALUE_CHANGED, __save_form_cb, form ); - ewl_callback_append( dialog, EWL_CALLBACK_DELETE_WINDOW, + ewl_callback_append( window, EWL_CALLBACK_DELETE_WINDOW, __destroy_window, NULL ); ewl_widget_show( dialog ); } else { @@ -427,6 +516,8 @@ form->elements_rev = ecore_hash_new( ecore_direct_hash, ecore_direct_compare ); + form->popup = NULL; + if( form_file_read( form ) ) { /* add support for more verbose errors from form_file */ ewler_error_dialog( "Error opening form '%s'", form->filename ); @@ -435,8 +526,15 @@ return; } + ewl_widget_set_data( form->overlay, "unsizable", (void *) 1 ); + ewl_object_set_fill_policy( EWL_OBJECT(form->overlay), EWL_FLAG_FILL_FILL ); + + ewl_widget_set_appearance(form->overlay, "background"); + ewl_theme_data_set_str(form->overlay, "/background/file", + PACKAGE_DATA_DIR"/themes/ewler.eet"); + ewl_theme_data_set_str(form->overlay, "/background/group", "background"); + ewl_container_append_child( EWL_CONTAINER(form->window), form->overlay ); - ewl_widget_set_appearance( form->overlay, "entry" ); ewl_callback_del_type( form->overlay, EWL_CALLBACK_MOUSE_DOWN ); ewl_callback_del_type( form->overlay, EWL_CALLBACK_MOUSE_UP ); @@ -444,8 +542,12 @@ ewl_callback_append( form->overlay, EWL_CALLBACK_MOUSE_DOWN, __mouse_down_form, form ); + ewl_callback_append( form->overlay, EWL_CALLBACK_MOUSE_MOVE, + __mouse_move_form, form ); ewl_callback_append( form->overlay, EWL_CALLBACK_FOCUS_IN, __mouse_in_form, form ); + ewl_callback_append( form->overlay, EWL_CALLBACK_MOUSE_MOVE, + __mouse_move_widget, form ); form->selected = ecore_list_new(); form->has_been_saved = 1; @@ -462,25 +564,34 @@ ecore_list_goto_first( form->selected ); while( (s = ecore_list_remove(form->selected)) ) { + if( s == form->overlay ) + continue; + + ewl_callback_del(s, EWL_CALLBACK_MOUSE_MOVE, + __mouse_move_widget); + ewl_callback_del(ewler_selected_get(EWLER_SELECTED(s)), + EWL_CALLBACK_MOUSE_UP, + __mouse_up_widget); ewl_callback_call(s, EWL_CALLBACK_DESELECT); - ewl_widget_destroy( s ); } } void -form_selected_append( Ewler_Form *form, Ewl_Widget *w ) +form_selected_append( Ewler_Form *form, Ewl_Widget *s ) { - Ewl_Widget *s; - - s = ewler_selected_new( w ); - ewl_callback_append(s, EWL_CALLBACK_MOUSE_MOVE, - __mouse_move_widget, form); - ewl_callback_append(w, EWL_CALLBACK_MOUSE_UP, - __mouse_up_widget, form); - ewl_widget_show(s); + if( s != form->overlay ) { + ewl_callback_call( s, EWL_CALLBACK_SELECT ); + ewl_callback_append(s, EWL_CALLBACK_MOUSE_MOVE, + __mouse_move_widget, form); + ewl_callback_append(ewler_selected_get(EWLER_SELECTED(s)), + EWL_CALLBACK_MOUSE_UP, + __mouse_up_widget, form); + } - ecore_list_append( form->selected, s ); - inspector_reset(); + if( ecore_list_goto( form->selected, s ) == NULL ) { + ecore_list_append( form->selected, s ); + inspector_reset(); + } } void @@ -517,7 +628,57 @@ } void +__form_delete( Ewler_Form *form ) +{ +} + +void +__form_select_up( Ewler_Form *form ) +{ + Ewl_Widget *s = ecore_list_goto_first( form->selected ); + + if( !s || s == form->overlay ) { + return; + } else { + form_selected_clear( form ); + if( (s = s->parent) == form->overlay ) + form_selected_append( form, s ); + else if( (s = s->parent) ) + form_selected_append( form, s ); + } +} + +void +__form_select_down( Ewler_Form *form ) +{ + Ewl_Widget *s = ecore_list_goto_first( form->selected ); + + if( !s ) + return; + + if(s != form->overlay) { + s = ewler_selected_get( EWLER_SELECTED(s) ); + if( widget_is_type(s, "Ewl_Container") && + !ecore_list_is_empty( EWL_CONTAINER(s)->children ) ) { + s = ecore_list_goto_first( EWL_CONTAINER(s)->children ); + form_selected_clear( form ); + form_selected_append( form, s ); + } + } else if( !ecore_list_is_empty( EWL_CONTAINER(s)->children ) ) { + s = ecore_list_goto_first( EWL_CONTAINER(s)->children ); + form_selected_clear( form ); + form_selected_append( form, s ); + } +} + +void ewler_forms_init( void ) { forms = ecore_list_new(); + + key_bindings = ecore_hash_new( ecore_str_hash, ecore_str_compare ); + + ecore_hash_set( key_bindings, "Delete", __form_delete ); + ecore_hash_set( key_bindings, "Up", __form_select_up ); + ecore_hash_set( key_bindings, "Down", __form_select_down ); } =================================================================== RCS file: /cvsroot/enlightenment/misc/ewler/src/form.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- form.h 10 Jun 2004 23:32:39 -0000 1.2 +++ form.h 25 Jul 2004 01:01:49 -0000 1.3 @@ -7,6 +7,7 @@ struct Ewler_Form { Ewl_Widget *window; Ewl_Widget *overlay; + Ewl_Widget *selector; Ecore_List *selected; Ecore_Hash *elements, *elements_rev; Ewl_Widget *popup; @@ -16,6 +17,8 @@ int cnt; }; +typedef void (*Ewler_Form_Key_Cb)( Ewler_Form *form ); + void ewler_forms_init( void ); void ewler_forms_close( void ); =================================================================== RCS file: /cvsroot/enlightenment/misc/ewler/src/inspector.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- inspector.c 6 Jul 2004 03:38:12 -0000 1.4 +++ inspector.c 25 Jul 2004 01:01:49 -0000 1.5 @@ -151,10 +151,50 @@ break; } + widget_changed( active_widget ); inspector_update(); } static void +__inspector_combo_changed( Ewl_Widget *w, void *ev_data, void *user_data ) +{ + Widget_Data_Elem *data = user_data; + char *text; + int value; + Ewl_Object *active_object = EWL_OBJECT(active_widget); + + text = ewl_combo_get_selected( EWL_COMBO(w) ); + + if( data->type->w.w_type != WIDGET_ENUM_TYPE ) + return; + + value = (int) ecore_hash_get( data->type->w_enum.map, text ); + + if( data->type->w.set ) { + data->type->w.set( EWL_OBJECT(active_widget), value ); + } + + ewl_object_set_fill_policy( EWL_OBJECT(active_widget->parent), + ewl_object_get_fill_policy(active_object) ); + ewl_object_set_alignment( EWL_OBJECT(active_widget->parent), + ewl_object_get_alignment(active_object) ); + widget_changed( active_widget ); +} + +static Ewl_Widget *t_combo; + +static void +__populate_combo_cb( void *val ) +{ + Ecore_Hash_Node *node = val; + Ewl_Widget *text; + + text = ewl_menu_item_new( NULL, node->key ); + ewl_container_append_child( EWL_CONTAINER(t_combo), text ); + ewl_widget_show( text ); +} + +static void __populate_tree( void *val ) { Ewl_Widget *trow, *row, *row_elems[3] = { NULL, NULL, NULL }; @@ -164,7 +204,23 @@ row_elems[0] = ewl_text_new( data->type->w.name ); ewl_widget_show( row_elems[0] ); - if( data->type->w.w_type != WIDGET_STRUCT_TYPE ) { + if( data->type->w.w_type == WIDGET_ENUM_TYPE ) { + char *enum_val; + + enum_val = ecore_hash_get( data->type->w_enum.map_rev, + (void *) data->w_enum.value ); + row_elems[1] = t_combo = ewl_combo_new( enum_val ); + + ecore_hash_for_each_node( data->type->w_enum.map, __populate_combo_cb ); + + ewl_callback_append( EWL_WIDGET(row_elems[1]), EWL_CALLBACK_DESELECT, + __inspector_combo_changed, data ); + ewl_callback_append( EWL_WIDGET(row_elems[1]), EWL_CALLBACK_VALUE_CHANGED, + __inspector_combo_changed, data ); + + ewl_widget_show( row_elems[1] ); + ewl_widget_set_data( row_elems[1], "get", data ); + } else if( data->type->w.w_type != WIDGET_STRUCT_TYPE ) { row_elems[1] = ewl_entry_new( NULL ); ewl_callback_append( EWL_WIDGET(row_elems[1]), EWL_CALLBACK_DESELECT, @@ -261,7 +317,7 @@ void inspector_reset( void ) { - Ewl_Widget *s, *w; + Ewl_Widget *s, *w = NULL; Ecore_List *info; if( !active_form ) { @@ -271,14 +327,20 @@ s = ecore_list_goto_first( active_form->selected ); - if( s && ewler_selected_get(EWLER_SELECTED(s)) == active_widget ) { + if( s == active_form->overlay ) { + w = s; + } else if( s ) { + w = ewler_selected_get(EWLER_SELECTED(s)); + } + + if( w == active_widget ) { inspector_update(); return; } ewl_container_reset( EWL_CONTAINER(inspector_tree) ); - if( (w = ewler_selected_get(EWLER_SELECTED(s))) ) { + if( w ) { info = widget_get_info(w); active_widget = w; =================================================================== RCS file: /cvsroot/enlightenment/misc/ewler/src/main.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- main.c 8 Jun 2004 18:30:05 -0000 1.1 +++ main.c 25 Jul 2004 01:01:49 -0000 1.2 @@ -28,8 +28,11 @@ ewl_window_set_title( EWL_WINDOW(main_win), "Ewler" ); ewl_callback_append( main_win, EWL_CALLBACK_DELETE_WINDOW, __destroy_main_window, NULL ); +#if 0 ewl_object_set_minimum_size( EWL_OBJECT(main_win), 300, 400 ); ewl_object_set_maximum_size( EWL_OBJECT(main_win), 300, 400 ); +#endif + ewl_object_set_preferred_size( EWL_OBJECT(main_win), 300, 400 ); ewl_widget_show( main_win ); main_layout = ewl_vbox_new(); =================================================================== RCS file: /cvsroot/enlightenment/misc/ewler/src/project.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- project.c 8 Jun 2004 18:30:05 -0000 1.1 +++ project.c 25 Jul 2004 01:01:49 -0000 1.2 @@ -1,9 +1,5 @@ #include <Ewl.h> -#include "ewl_dialog.h" -#include "ewl_stock.h" -#include "ewl_filedialog_stock.h" - #include "ewler.h" #include "project.h" @@ -206,12 +202,16 @@ void project_open_dialog( void ) { - Ewl_Widget *dialog; + Ewl_Widget *window, *dialog; + + window = ewl_window_new(); + ewl_widget_show( window ); - dialog = ewl_filedialog_stock_new( EWL_FILEDIALOG_TYPE_OPEN ); + dialog = ewl_filedialog_new( EWL_FILEDIALOG_TYPE_OPEN ); + ewl_container_append_child( EWL_CONTAINER(window), dialog ); ewl_callback_append( dialog, EWL_CALLBACK_VALUE_CHANGED, __open_project_cb, NULL ); - ewl_callback_append( dialog, EWL_CALLBACK_DELETE_WINDOW, + ewl_callback_append( window, EWL_CALLBACK_DELETE_WINDOW, __destroy_window, NULL ); ewl_widget_show( dialog ); } =================================================================== RCS file: /cvsroot/enlightenment/misc/ewler/src/selected.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -3 -r1.9 -r1.10 --- selected.c 6 Jul 2004 05:19:54 -0000 1.9 +++ selected.c 25 Jul 2004 01:01:49 -0000 1.10 @@ -66,6 +66,7 @@ ewl_theme_data_set_str(sw, "/selected/file", PACKAGE_DATA_DIR"/themes/ewler.eet"); ewl_theme_data_set_str(sw, "/selected/group", "selected"); + ewl_widget_set_layer( sw, 0 ); ewl_container_insert_child(parent, sw, s->index); ewl_object_request_geometry(EWL_OBJECT(s), @@ -80,6 +81,8 @@ ewler_selected_realize_cb, s); ewl_callback_append(sw, EWL_CALLBACK_REALIZE, ewler_selected_selector_realize_cb, NULL); + ewl_callback_append(sw, EWL_CALLBACK_SELECT, + ewler_selected_select_cb, NULL); ewl_callback_append(sw, EWL_CALLBACK_DESELECT, ewler_selected_deselect_cb, NULL); ewl_callback_append(sw, EWL_CALLBACK_MOUSE_MOVE, @@ -88,7 +91,6 @@ ewler_selected_mouse_down_cb, NULL); ewl_callback_append(sw, EWL_CALLBACK_MOUSE_UP, ewler_selected_mouse_up_cb, NULL); - ewl_container_intercept_callback(EWL_CONTAINER(sw), EWL_CALLBACK_MOUSE_DOWN); if( ewl_object_get_preferred_w(EWL_OBJECT(w)) < SELECTED_MIN_WIDTH && ewl_object_get_preferred_h(EWL_OBJECT(w)) < SELECTED_MIN_HEIGHT ) @@ -149,7 +151,7 @@ s = EWLER_SELECTED(w); - evas_object_layer_set(w->theme_object, 10000); + evas_object_layer_set(w->theme_object, 1000); ewl_container_append_child(EWL_CONTAINER(s), s->selected); if( ewl_widget_get_data( s->selected, "unsizable" ) ) @@ -235,13 +237,27 @@ s = EWLER_SELECTED(w); + ewl_container_nointercept_callback(EWL_CONTAINER(s), EWL_CALLBACK_MOUSE_DOWN); ewl_object_get_current_geometry(EWL_OBJECT(s), &x, &y, &width, &height); - ewl_container_insert_child(EWL_CONTAINER(w->parent), s->selected, s->index); ewl_object_request_geometry(EWL_OBJECT(s->selected), x, y, width, height); - s->selected = NULL; - s->index = -1; + ewl_widget_set_state( w, "deselect" ); + evas_object_layer_set(w->theme_object, -990); + + DLEAVE_FUNCTION(DLEVEL_STABLE); +} + +void +ewler_selected_select_cb(Ewl_Widget *w, void *ev_data, void *user_data) +{ + DENTER_FUNCTION(DLEVEL_STABLE); + + ewl_widget_set_state( w, "default" ); + evas_object_layer_set(w->theme_object, 1000); + ewl_callback_append(w, EWL_CALLBACK_MOUSE_DOWN, + ewler_selected_mouse_down_cb, NULL); + ewl_container_intercept_callback(EWL_CONTAINER(w), EWL_CALLBACK_MOUSE_DOWN); DLEAVE_FUNCTION(DLEVEL_STABLE); } @@ -325,36 +341,47 @@ Ewl_Embed *embed; Ewl_Event_Mouse_Down *ev = ev_data; Ewler_Selected *s = EWLER_SELECTED(w); - static int second_time = 0; + static Ecore_List *w_stack = NULL; int x, y; x = ev->x; y = ev->y; - if( second_time ) - return; - - form_set_widget_dragging( s->selected, ev ); - embed = ewl_embed_find_by_widget(w); - - part_selected = 0; + if( !w_stack ) + w_stack = ecore_list_new(); - evas_event_feed_mouse_down(embed->evas, ev->button); + if( ecore_list_goto_first( w_stack ) == s ) + return; - if( !part_selected ) { - ewl_container_nointercept_callback(EWL_CONTAINER(s), + if( ev->button == 1 ) { + form_set_widget_dragging( s->selected, ev ); + embed = ewl_embed_find_by_widget(w); + + part_selected = 0; + + evas_event_feed_mouse_down(embed->evas, ev->button); + + if( !part_selected && !form_widget_created() ) { + ewl_container_nointercept_callback(EWL_CONTAINER(s), + EWL_CALLBACK_MOUSE_DOWN); + form_clear_widget_selected(); + + ecore_list_prepend( w_stack, s ); + ewl_embed_feed_mouse_down(embed, ev->button, ev->clicks, + ev->x, ev->y, ev->modifiers); + ecore_list_remove_first( w_stack ); + + ewl_callback_del_type(w, EWL_CALLBACK_MOUSE_DOWN); + ewl_callback_append(w, EWL_CALLBACK_MOUSE_DOWN, + ewler_selected_mouse_down_cb, NULL); + ewl_container_intercept_callback(EWL_CONTAINER(s), EWL_CALLBACK_MOUSE_DOWN); - form_clear_widget_selected(); - - second_time = 1; - ewl_embed_feed_mouse_down(embed, ev->button, ev->clicks, - ev->x, ev->y, ev->modifiers); - second_time = 0; - - ewl_container_intercept_callback(EWL_CONTAINER(s), - EWL_CALLBACK_MOUSE_DOWN); - form_set_widget_selected(); + form_set_widget_selected(); + } else if( form_widget_created() ) { + form_clear_widget_created(); + form_clear_widget_dragging(); + } } } =================================================================== RCS file: /cvsroot/enlightenment/misc/ewler/src/selected.h,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- selected.h 5 Jul 2004 02:40:46 -0000 1.5 +++ selected.h 25 Jul 2004 01:01:49 -0000 1.6 @@ -27,6 +27,7 @@ void ewler_selected_realize_cb(Ewl_Widget *w, void *ev_data, void *user_data); void ewler_selected_selector_realize_cb(Ewl_Widget *w, void *ev_data, void *user_data); +void ewler_selected_select_cb(Ewl_Widget *w, void *ev_data, void *user_data); void ewler_selected_deselect_cb(Ewl_Widget *w, void *ev_data, void *user_data); void ewler_selected_focus_out_cb(Ewl_Widget *w, void *ev_data, void *user_data); =================================================================== RCS file: /cvsroot/enlightenment/misc/ewler/src/widgets.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- widgets.c 6 Jul 2004 05:19:54 -0000 1.2 +++ widgets.c 25 Jul 2004 01:01:49 -0000 1.3 @@ -262,6 +262,12 @@ lvl--; c_info = t_info; break; + case WIDGET_ENUM_TYPE: + if( elem->type->w.get ) + elem->w_enum.value = elem->type->w.get( EWL_OBJECT(c_widget) ); + else + elem->w_enum.value = elem->type->w_enum.default_value; + break; } ecore_list_prepend( c_info, elem ); @@ -293,6 +299,10 @@ case WIDGET_STRUCT_TYPE: ecore_list_for_each( data->w_struct.members, __update_elem_from_widget ); break; + case WIDGET_ENUM_TYPE: + if( data->type->w.get ) + data->w_enum.value = data->type->w.get( EWL_OBJECT(c_widget) ); + break; } } @@ -493,6 +503,12 @@ 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; @@ -516,6 +532,7 @@ static int class_visible; static Ecore_Hash *class, *elem_hash; static Widget_Type_Elem *elem, *last_elem = NULL; + Widget_Type_Elem *e; static void *ctor; int token; @@ -576,7 +593,28 @@ 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; @@ -608,13 +646,15 @@ 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/widgets.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- widgets.h 8 Jun 2004 18:30:05 -0000 1.1 +++ widgets.h 25 Jul 2004 01:01:49 -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 @@ -44,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; @@ -52,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 */ @@ -77,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)(); ------------------------------------------------------- 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