Enlightenment CVS committal Author : davemds Project : e17 Module : proto
Dir : e17/proto/edje_editor/src/bin Modified Files: callbacks.c callbacks.h interface.c interface.h main.c main.h Log Message: * Add Tween animation support (create and manage) * Use an internal test app for show the edje result (instead of using edje_viewer) * some formatting * some shell escape inside system() invocations to handle space in file/dir name NOTE: You can now use edje_editor to view and test edje files. There is a new switch (-t) that open an edje file and show the content of the given group, without load the whole editor interface. Seems usefull to me. There was also a thread on the forum about this :) USAGE: edje_editor -t edje_file.edj "group/to/display" =================================================================== RCS file: /cvs/e/e17/proto/edje_editor/src/bin/callbacks.c,v retrieving revision 1.23 retrieving revision 1.24 diff -u -3 -r1.23 -r1.24 --- callbacks.c 10 Jul 2007 02:16:37 -0000 1.23 +++ callbacks.c 13 Jul 2007 16:54:57 -0000 1.24 @@ -38,6 +38,9 @@ on_AllButton_click(Etk_Button *button, void *data) { char cmd[1024]; + Etk_Tree_Row *sel_row; + int row_num; + switch ((int)data) { case TOOLBAR_NEW: @@ -103,12 +106,13 @@ printf("Clicked signal on Toolbar Button 'Play' EMITTED\n"); if (Cur.open_file_name) { - snprintf(cmd,1024,"edje_viewer %s &",Cur.open_file_name); - printf("TEST IN VIEWER. cmd: %s\n",cmd); - if (!system("type edje_viewer")) - system(cmd); - else - ShowAlert("<b>Could not find 'edje_viewer'.</b><br>Check that the executable is in your path."); + snprintf(cmd,1024,"edje_editor -t %s %s &",Cur.open_file_name,Cur.eg->name); + printf("TESTING EDJE. cmd: %s\n",cmd); + system(cmd); + //if (!system("type edje_viewer")) + // system(cmd); + //else + // ShowAlert("<b>Could not find 'edje_viewer'.</b><br>Check that the executable is in your path."); }else{ ShowAlert("You need to save the file before testing it."); } @@ -124,6 +128,35 @@ if (engrave_file_font_dir_get(Cur.ef)) ShowFilechooser(FILECHOOSER_FONT); else ShowAlert("You have to save the file once for insert font."); break; + case IMAGE_TWEEN_UP: + ShowAlert("Up not yet implemented."); + break; + case IMAGE_TWEEN_DOWN: + ShowAlert("Down not yet implemented."); + break; + case IMAGE_TWEEN_DELETE: + sel_row = etk_tree_selected_row_get(ETK_TREE(UI_ImageTweenList)); + if (row_num = (int)etk_tree_row_data_get (sel_row)) + { + PROTO_engrave_part_state_image_tween_remove_nth(Cur.eps,row_num-1); + UpdateImageFrame(); + } + break; + case IMAGE_TWEEN_RADIO: + UpdateImageFrame(); + etk_toggle_button_active_set(ETK_TOGGLE_BUTTON(UI_ImageTweenRadio), TRUE); + etk_toggle_button_active_set(ETK_TOGGLE_BUTTON(UI_ImageNormalRadio), FALSE); + etk_widget_show(UI_ImageTweenList); + etk_widget_show(UI_MoveUpTweenButton); + etk_widget_show(UI_MoveDownTweenButton); + etk_widget_show(UI_DeleteTweenButton); + etk_combobox_active_item_set (ETK_COMBOBOX(UI_ImageComboBox), + etk_combobox_nth_item_get(ETK_COMBOBOX(UI_ImageComboBox),0)); + break; + case IMAGE_NORMAL_RADIO: + PROTO_engrave_part_state_image_tween_remove_all(Cur.eps); + UpdateImageFrame(); + break; } } @@ -452,18 +485,40 @@ on_ImageComboBox_changed(Etk_Combobox *combobox, void *data) { Engrave_Image *image; - printf("Changed signal on Image Combo EMITED\n"); - + printf("Changed signal on Image Combo EMITTED\n"); + + if ((image = etk_combobox_item_data_get(etk_combobox_active_item_get (combobox)))){ //Set an existing image if (Cur.eps){ - engrave_part_state_image_normal_set(Cur.eps, image); + if (!etk_toggle_button_active_get(UI_ImageTweenRadio)) + { + engrave_part_state_image_normal_set(Cur.eps, image); + }else{ + engrave_part_state_image_tween_add(Cur.eps,image); + UpdateImageFrame(); + } ev_redraw(); } } } void +on_ImageTweenList_row_selected(Etk_Object *object, Etk_Tree_Row *row, void *data) +{ + printf("Row selected signal on ImageTweenList EMITTED\n"); + if (row != etk_tree_first_row_get (ETK_TREE(UI_ImageTweenList))) + { + etk_widget_disabled_set(UI_DeleteTweenButton,FALSE); + etk_widget_disabled_set(UI_MoveUpTweenButton,FALSE); + etk_widget_disabled_set(UI_MoveDownTweenButton,FALSE); + }else{ + etk_widget_disabled_set(UI_DeleteTweenButton,TRUE); + etk_widget_disabled_set(UI_MoveUpTweenButton,TRUE); + etk_widget_disabled_set(UI_MoveDownTweenButton,TRUE); + } +} +void on_ImageAlphaSlider_value_changed(Etk_Object *object, double va, void *data) { printf("ImageSlieder value_changed signale EMIT: %.2f\n",va); @@ -1238,7 +1293,7 @@ switch(FileChooserOperation){ case FILECHOOSER_OPEN: - snprintf(cmd,4096,"edje_editor %s/%s &", + snprintf(cmd,4096,"edje_editor \"%s/%s\" &", etk_filechooser_widget_current_folder_get (ETK_FILECHOOSER_WIDGET(UI_FileChooser)), etk_filechooser_widget_selected_file_get (ETK_FILECHOOSER_WIDGET(UI_FileChooser))); system(cmd); @@ -1258,9 +1313,9 @@ if (Cur.eps){ //If the new image is not in the edc dir if (strcmp(etk_filechooser_widget_current_folder_get (ETK_FILECHOOSER_WIDGET(UI_FileChooser)),engrave_file_image_dir_get(Cur.ef))){ - //TODO check if image already exist + //TODO check if image already exist and is a valid image //Copy the image to the image_dir - snprintf(cmd, 4096, "cp %s %s", etk_entry_text_get(ETK_ENTRY(UI_FilechooserFileNameEntry)), engrave_file_image_dir_get(Cur.ef)); + snprintf(cmd, 4096, "cp \"%s\" \"%s\"", etk_entry_text_get(ETK_ENTRY(UI_FilechooserFileNameEntry)), engrave_file_image_dir_get(Cur.ef)); ret = system(cmd); if (ret < 0) { ShowAlert("Error: unable to copy image!"); @@ -1270,8 +1325,11 @@ //Set the new image Engrave_Image* eimg; eimg = engrave_image_new(etk_filechooser_widget_selected_file_get(ETK_FILECHOOSER_WIDGET(UI_FileChooser)),ENGRAVE_IMAGE_TYPE_LOSSY,95); - engrave_file_image_add(Cur.ef,eimg); - engrave_part_state_image_normal_set(Cur.eps,eimg); + engrave_file_image_add(Cur.ef,eimg); + if (!etk_toggle_button_active_get(UI_ImageTweenRadio)) + engrave_part_state_image_normal_set(Cur.eps,eimg); + else + engrave_part_state_image_tween_add(Cur.eps,eimg); PopulateImagesComboBox(); UpdateImageFrame(); =================================================================== RCS file: /cvs/e/e17/proto/edje_editor/src/bin/callbacks.h,v retrieving revision 1.11 retrieving revision 1.12 diff -u -3 -r1.11 -r1.12 --- callbacks.h 10 Jul 2007 02:16:37 -0000 1.11 +++ callbacks.h 13 Jul 2007 16:54:57 -0000 1.12 @@ -1,5 +1,4 @@ - /* Called when the window is destroyed */ void etk_main_quit_cb(void *data); @@ -35,6 +34,7 @@ void on_ColorCanvas_realize (Etk_Widget *canvas, void *data); void on_ImageAlphaSlider_value_changed (Etk_Object *object, double value, void *data); void on_ImageComboBox_changed (Etk_Combobox *combobox, void *data); +void on_ImageTweenList_row_selected (Etk_Object *object, Etk_Tree_Row *row, void *data); void on_EffectComboBox_changed (Etk_Combobox *combobox, void *data); void on_AlertDialog_response (Etk_Dialog *dialog, int response_id, void *data); void on_StateIndexSpinner_value_changed(Etk_Range *range, double value, void *data); =================================================================== RCS file: /cvs/e/e17/proto/edje_editor/src/bin/interface.c,v retrieving revision 1.27 retrieving revision 1.28 diff -u -3 -r1.27 -r1.28 --- interface.c 10 Jul 2007 02:16:37 -0000 1.27 +++ interface.c 13 Jul 2007 16:54:57 -0000 1.28 @@ -194,7 +194,11 @@ printf("Populate Images Combobox\n"); etk_combobox_clear(ETK_COMBOBOX(UI_ImageComboBox)); - + + ComboItem = etk_combobox_item_append(ETK_COMBOBOX(UI_ImageComboBox), + NULL, "<b>Choose an image</b>"); + etk_combobox_item_data_set (ComboItem, NULL); + for (l = Cur.ef->images; l ; l = l->next) { image = l->data; @@ -266,7 +270,8 @@ } void -PopulateSourceComboBox(void){ +PopulateSourceComboBox(void) +{ Evas_List *l; Engrave_Part *ep; @@ -297,6 +302,39 @@ ETK_CALLBACK(on_SourceEntry_item_changed)); } void +PupulateTweenList(void) +{ + char buf[4096]; + Engrave_Image *im; + Etk_Tree_Row *row; + Evas_List *l; + int row_num = 1; + Etk_Tree_Col *col1 = etk_tree_nth_col_get (ETK_TREE(UI_ImageTweenList),0); + + etk_tree_clear(ETK_TREE(UI_ImageTweenList)); + if (Cur.eps->image.normal) + { + snprintf(buf,4095,"%s/%s",Cur.ef->im_dir,Cur.eps->image.normal->name); + etk_tree_row_append(ETK_TREE(UI_ImageTweenList), NULL, + col1, buf, NULL,Cur.eps->image.normal->name, + NULL); + } + // for all the frame in the tween + for (l = Cur.eps->image.tween; l; l = l->next) + { + im = l->data; + snprintf(buf,4095,"%s/%s",Cur.ef->im_dir,im->name); + row = etk_tree_row_append(ETK_TREE(UI_ImageTweenList), NULL, + col1, buf, NULL,im->name, + NULL); + etk_tree_row_data_set(row,(void*)row_num); + row_num++; + } + etk_widget_disabled_set(UI_DeleteTweenButton,TRUE); + etk_widget_disabled_set(UI_MoveUpTweenButton,TRUE); + etk_widget_disabled_set(UI_MoveDownTweenButton,TRUE); +} +void UpdateGroupFrame(void) { //Stop signal propagation @@ -439,6 +477,9 @@ Engrave_Image *image; int i; Etk_Combobox_Item *item = NULL; + Etk_Tree_Col *col1 = etk_tree_nth_col_get (ETK_TREE(UI_ImageTweenList),0); + char buf[4096]; + //Stop signal propagation etk_signal_block("value-changed",ETK_OBJECT(UI_BorderLeftSpinner),ETK_CALLBACK(on_BorderSpinner_value_changed)); etk_signal_block("value-changed",ETK_OBJECT(UI_BorderRightSpinner),ETK_CALLBACK(on_BorderSpinner_value_changed)); @@ -447,25 +488,48 @@ etk_signal_block("value-changed",ETK_OBJECT(UI_ImageAlphaSlider),ETK_CALLBACK(on_ImageAlphaSlider_value_changed)); etk_signal_block("active-item-changed", ETK_OBJECT(UI_ImageComboBox), ETK_CALLBACK(on_ImageComboBox_changed)); - //Set the images combobox - if (Cur.eps->image.normal) + PupulateTweenList(); + + if (Cur.eps->image.tween) { - i=0; - //Loop for all the item in the Combobox - while ((item = etk_combobox_nth_item_get(ETK_COMBOBOX(UI_ImageComboBox),i))) + etk_toggle_button_active_set(ETK_TOGGLE_BUTTON(UI_ImageTweenRadio), TRUE); + etk_toggle_button_active_set(ETK_TOGGLE_BUTTON(UI_ImageNormalRadio), FALSE); + etk_widget_show(UI_ImageTweenList); + etk_widget_show(UI_MoveUpTweenButton); + etk_widget_show(UI_MoveDownTweenButton); + etk_widget_show(UI_DeleteTweenButton); + etk_combobox_active_item_set (ETK_COMBOBOX(UI_ImageComboBox), + etk_combobox_nth_item_get(ETK_COMBOBOX(UI_ImageComboBox),0)); + }else{ + etk_toggle_button_active_set(ETK_TOGGLE_BUTTON(UI_ImageTweenRadio), FALSE); + etk_toggle_button_active_set(ETK_TOGGLE_BUTTON(UI_ImageNormalRadio), TRUE); + etk_widget_hide(UI_ImageTweenList); + etk_widget_hide(UI_MoveUpTweenButton); + etk_widget_hide(UI_MoveDownTweenButton); + etk_widget_hide(UI_DeleteTweenButton); + //Set the images combobox for normal image + if (Cur.eps->image.normal) { - if ((image = etk_combobox_item_data_get(item))) + i=0; + //Loop for all the item in the Combobox + while ((item = etk_combobox_nth_item_get(ETK_COMBOBOX(UI_ImageComboBox),i))) { - //Get the data for the item (should be an char* with the name of the image file) - if (image == Cur.eps->image.normal) + if ((image = etk_combobox_item_data_get(item))) { - etk_combobox_active_item_set (ETK_COMBOBOX(UI_ImageComboBox),item); //If we found the item set active - break; + //Get the data for the item (should be an char* with the name of the image file) + if (image == Cur.eps->image.normal) + { + etk_combobox_active_item_set (ETK_COMBOBOX(UI_ImageComboBox),item); //If we found the item set active + break; + } } + i++; } - i++; + }else{ + etk_combobox_active_item_set (ETK_COMBOBOX(UI_ImageComboBox), + etk_combobox_nth_item_get(ETK_COMBOBOX(UI_ImageComboBox),0)); } - }else{etk_combobox_active_item_set (ETK_COMBOBOX(UI_ImageComboBox), etk_combobox_nth_item_get(ETK_COMBOBOX(UI_ImageComboBox),0));} + } etk_range_value_set (ETK_RANGE(UI_BorderTopSpinner), Cur.eps->image.border.t); etk_range_value_set (ETK_RANGE(UI_BorderLeftSpinner), Cur.eps->image.border.l); @@ -1004,30 +1068,35 @@ //NewButton button = etk_tool_button_new_from_stock(ETK_STOCK_DOCUMENT_NEW); etk_toolbar_append(ETK_TOOLBAR(ToolBar), button); - etk_signal_connect("clicked", ETK_OBJECT(button), ETK_CALLBACK(on_AllButton_click), (void*)TOOLBAR_NEW); + etk_signal_connect("clicked", ETK_OBJECT(button), + ETK_CALLBACK(on_AllButton_click), (void*)TOOLBAR_NEW); //OpenButton button = etk_tool_button_new_from_stock(ETK_STOCK_DOCUMENT_OPEN); etk_toolbar_append(ETK_TOOLBAR(ToolBar), button); - etk_signal_connect("clicked", ETK_OBJECT(button), ETK_CALLBACK(on_AllButton_click), (void*)TOOLBAR_OPEN); + etk_signal_connect("clicked", ETK_OBJECT(button), + ETK_CALLBACK(on_AllButton_click), (void*)TOOLBAR_OPEN); //SaveButton button = etk_tool_button_new_from_stock(ETK_STOCK_DOCUMENT_SAVE); etk_object_properties_set(ETK_OBJECT(button),"label","Save",NULL); etk_toolbar_append(ETK_TOOLBAR(ToolBar), button); - etk_signal_connect("clicked", ETK_OBJECT(button), ETK_CALLBACK(on_AllButton_click), (void*)TOOLBAR_SAVE); + etk_signal_connect("clicked", ETK_OBJECT(button), + ETK_CALLBACK(on_AllButton_click), (void*)TOOLBAR_SAVE); //SaveEDJButton button = etk_tool_button_new_from_stock(ETK_STOCK_DOCUMENT_SAVE_AS); etk_object_properties_set(ETK_OBJECT(button),"label","Save as",NULL); etk_toolbar_append(ETK_TOOLBAR(ToolBar), button); - etk_signal_connect("clicked", ETK_OBJECT(button), ETK_CALLBACK(on_AllButton_click), (void*)TOOLBAR_SAVE_EDJ); + etk_signal_connect("clicked", ETK_OBJECT(button), + ETK_CALLBACK(on_AllButton_click), (void*)TOOLBAR_SAVE_EDJ); /* //SaveEDCButton button = etk_tool_button_new_from_stock(ETK_STOCK_DOCUMENT_SAVE); etk_object_properties_set(ETK_OBJECT(button),"label","Export edc",NULL); etk_toolbar_append(ETK_TOOLBAR(ToolBar), button); - etk_signal_connect("clicked", ETK_OBJECT(button), ETK_CALLBACK(on_AllButton_click), (void*)TOOLBAR_SAVE_EDC); + etk_signal_connect("clicked", ETK_OBJECT(button), + ETK_CALLBACK(on_AllButton_click), (void*)TOOLBAR_SAVE_EDC); */ sep = etk_hseparator_new(); etk_toolbar_append(ETK_TOOLBAR(ToolBar), sep); @@ -1036,7 +1105,8 @@ //AddButton button = etk_tool_button_new_from_stock(ETK_STOCK_LIST_ADD); - etk_signal_connect("clicked", ETK_OBJECT(button), ETK_CALLBACK(on_AllButton_click), (void*)TOOLBAR_ADD); + etk_signal_connect("clicked", ETK_OBJECT(button), + ETK_CALLBACK(on_AllButton_click), (void*)TOOLBAR_ADD); etk_toolbar_append(ETK_TOOLBAR(ToolBar), button); //AddMenu @@ -1046,28 +1116,32 @@ menu_item = etk_menu_item_image_new_with_label("Rectangle"); image = etk_image_new_from_edje(EdjeFile,"RECT.PNG"); etk_menu_item_image_set(ETK_MENU_ITEM_IMAGE(menu_item), ETK_IMAGE(image)); - etk_signal_connect("activated", ETK_OBJECT(menu_item), ETK_CALLBACK(on_AddMenu_item_activated), (void*)NEW_RECT); + etk_signal_connect("activated", ETK_OBJECT(menu_item), + ETK_CALLBACK(on_AddMenu_item_activated), (void*)NEW_RECT); etk_menu_shell_append(ETK_MENU_SHELL(UI_AddMenu), ETK_MENU_ITEM(menu_item)); //New Image menu_item = etk_menu_item_image_new_with_label("Image"); image = etk_image_new_from_edje(EdjeFile,"IMAGE.PNG"); etk_menu_item_image_set(ETK_MENU_ITEM_IMAGE(menu_item), ETK_IMAGE(image)); - etk_signal_connect("activated", ETK_OBJECT(menu_item), ETK_CALLBACK(on_AddMenu_item_activated),(void*) NEW_IMAGE); + etk_signal_connect("activated", ETK_OBJECT(menu_item), + ETK_CALLBACK(on_AddMenu_item_activated),(void*) NEW_IMAGE); etk_menu_shell_append(ETK_MENU_SHELL(UI_AddMenu), ETK_MENU_ITEM(menu_item)); //New Text menu_item = etk_menu_item_image_new_with_label("Text"); image = etk_image_new_from_edje(EdjeFile,"TEXT.PNG"); etk_menu_item_image_set(ETK_MENU_ITEM_IMAGE(menu_item), ETK_IMAGE(image)); - etk_signal_connect("activated", ETK_OBJECT(menu_item), ETK_CALLBACK(on_AddMenu_item_activated), (void*)NEW_TEXT); + etk_signal_connect("activated", ETK_OBJECT(menu_item), + ETK_CALLBACK(on_AddMenu_item_activated), (void*)NEW_TEXT); etk_menu_shell_append(ETK_MENU_SHELL(UI_AddMenu), ETK_MENU_ITEM(menu_item)); //New Program menu_item = etk_menu_item_image_new_with_label("Program"); image = etk_image_new_from_edje(EdjeFile,"PROG.PNG"); etk_menu_item_image_set(ETK_MENU_ITEM_IMAGE(menu_item), ETK_IMAGE(image)); - etk_signal_connect("activated", ETK_OBJECT(menu_item), ETK_CALLBACK(on_AddMenu_item_activated), (void*)NEW_PROG); + etk_signal_connect("activated", ETK_OBJECT(menu_item), + ETK_CALLBACK(on_AddMenu_item_activated), (void*)NEW_PROG); etk_menu_shell_append(ETK_MENU_SHELL(UI_AddMenu), ETK_MENU_ITEM(menu_item)); //Separator @@ -1075,37 +1149,50 @@ etk_menu_shell_append(ETK_MENU_SHELL(UI_AddMenu), ETK_MENU_ITEM(menu_item)); //New Description - menu_item = etk_menu_item_image_new_with_label("Add a new description"); - etk_signal_connect("activated", ETK_OBJECT(menu_item), ETK_CALLBACK(on_AddMenu_item_activated), (void*)NEW_DESC); + menu_item = etk_menu_item_image_new_with_label("A new state to part"); + image = etk_image_new_from_edje(EdjeFile,"DESC.PNG"); + etk_menu_item_image_set(ETK_MENU_ITEM_IMAGE(menu_item), ETK_IMAGE(image)); + etk_signal_connect("activated", ETK_OBJECT(menu_item), + ETK_CALLBACK(on_AddMenu_item_activated), (void*)NEW_DESC); etk_menu_shell_append(ETK_MENU_SHELL(UI_AddMenu), ETK_MENU_ITEM(menu_item)); //New Group - menu_item = etk_menu_item_image_new_with_label("Add a new group"); - etk_signal_connect("activated", ETK_OBJECT(menu_item), ETK_CALLBACK(on_AddMenu_item_activated), (void*)NEW_GROUP); - + menu_item = etk_menu_item_image_new_with_label("A new group to edj"); + image = etk_image_new_from_edje(EdjeFile,"NONE.PNG"); + etk_menu_item_image_set(ETK_MENU_ITEM_IMAGE(menu_item), ETK_IMAGE(image)); + etk_signal_connect("activated", ETK_OBJECT(menu_item), + ETK_CALLBACK(on_AddMenu_item_activated), (void*)NEW_GROUP); etk_menu_shell_append(ETK_MENU_SHELL(UI_AddMenu), ETK_MENU_ITEM(menu_item)); //RemoveButton button = etk_tool_button_new_from_stock(ETK_STOCK_LIST_REMOVE); - etk_signal_connect("clicked", ETK_OBJECT(button), ETK_CALLBACK(on_AllButton_click), (void*)TOOLBAR_REMOVE); + etk_signal_connect("clicked", ETK_OBJECT(button), + ETK_CALLBACK(on_AllButton_click), (void*)TOOLBAR_REMOVE); etk_toolbar_append(ETK_TOOLBAR(ToolBar), button); //RemoveMenu UI_RemoveMenu = etk_menu_new(); //description - menu_item = etk_menu_item_image_new_with_label("Selected Description"); - etk_signal_connect("activated", ETK_OBJECT(menu_item), ETK_CALLBACK(on_RemoveMenu_item_activated), (void*)REMOVE_DESCRIPTION); + menu_item = etk_menu_item_image_new_with_label("Selected State"); + image = etk_image_new_from_edje(EdjeFile,"DESC.PNG"); + etk_menu_item_image_set(ETK_MENU_ITEM_IMAGE(menu_item), ETK_IMAGE(image)); + etk_signal_connect("activated", ETK_OBJECT(menu_item), + ETK_CALLBACK(on_RemoveMenu_item_activated), (void*)REMOVE_DESCRIPTION); etk_menu_shell_append(ETK_MENU_SHELL(UI_RemoveMenu), ETK_MENU_ITEM(menu_item)); //part menu_item = etk_menu_item_image_new_with_label("Selected Part"); - etk_signal_connect("activated", ETK_OBJECT(menu_item), ETK_CALLBACK(on_RemoveMenu_item_activated), (void*)REMOVE_PART); + etk_signal_connect("activated", ETK_OBJECT(menu_item), + ETK_CALLBACK(on_RemoveMenu_item_activated), (void*)REMOVE_PART); etk_menu_shell_append(ETK_MENU_SHELL(UI_RemoveMenu), ETK_MENU_ITEM(menu_item)); //group menu_item = etk_menu_item_image_new_with_label("Selected Group"); - etk_signal_connect("activated", ETK_OBJECT(menu_item), ETK_CALLBACK(on_RemoveMenu_item_activated), (void*)REMOVE_GROUP); + image = etk_image_new_from_edje(EdjeFile,"NONE.PNG"); + etk_menu_item_image_set(ETK_MENU_ITEM_IMAGE(menu_item), ETK_IMAGE(image)); + etk_signal_connect("activated", ETK_OBJECT(menu_item), + ETK_CALLBACK(on_RemoveMenu_item_activated), (void*)REMOVE_GROUP); etk_menu_shell_append(ETK_MENU_SHELL(UI_RemoveMenu), ETK_MENU_ITEM(menu_item)); sep = etk_hseparator_new(); @@ -1115,12 +1202,14 @@ //MoveUp Button button = etk_tool_button_new_from_stock( ETK_STOCK_GO_UP); - etk_signal_connect("clicked", ETK_OBJECT(button), ETK_CALLBACK(on_AllButton_click), (void*)TOOLBAR_MOVE_UP); + etk_signal_connect("clicked", ETK_OBJECT(button), + ETK_CALLBACK(on_AllButton_click), (void*)TOOLBAR_MOVE_UP); etk_toolbar_append(ETK_TOOLBAR(ToolBar), button); //MoveDown Button button = etk_tool_button_new_from_stock( ETK_STOCK_GO_DOWN); - etk_signal_connect("clicked", ETK_OBJECT(button), ETK_CALLBACK(on_AllButton_click), (void*)TOOLBAR_MOVE_DOWN); + etk_signal_connect("clicked", ETK_OBJECT(button), + ETK_CALLBACK(on_AllButton_click), (void*)TOOLBAR_MOVE_DOWN); etk_toolbar_append(ETK_TOOLBAR(ToolBar), button); sep = etk_hseparator_new(); @@ -1128,16 +1217,18 @@ sep = etk_vseparator_new(); etk_toolbar_append(ETK_TOOLBAR(ToolBar), sep); - //Compile Button + //Test Button button = etk_tool_button_new_from_stock( ETK_STOCK_MEDIA_PLAYBACK_START); - etk_signal_connect("clicked", ETK_OBJECT(button), ETK_CALLBACK(on_AllButton_click), (void*)TOOLBAR_PLAY); - etk_object_properties_set(ETK_OBJECT(button),"label","Test in viewer",NULL); + etk_signal_connect("clicked", ETK_OBJECT(button), + ETK_CALLBACK(on_AllButton_click), (void*)TOOLBAR_PLAY); + etk_object_properties_set(ETK_OBJECT(button),"label","Test group",NULL); etk_toolbar_append(ETK_TOOLBAR(ToolBar), button); //DebugButton button = etk_tool_button_new_from_stock(ETK_STOCK_DOCUMENT_PROPERTIES); etk_toolbar_append(ETK_TOOLBAR(ToolBar), button); - etk_signal_connect("clicked", ETK_OBJECT(button), ETK_CALLBACK(on_AllButton_click), (void*)TOOLBAR_DEBUG); + etk_signal_connect("clicked", ETK_OBJECT(button), + ETK_CALLBACK(on_AllButton_click), (void*)TOOLBAR_DEBUG); etk_object_properties_set(ETK_OBJECT(button),"label","Debug",NULL); return ToolBar; @@ -1260,7 +1351,7 @@ Etk_Combobox_Item *ComboItem; //DescriptionFrame - UI_DescriptionFrame = etk_frame_new("Description property"); + UI_DescriptionFrame = etk_frame_new("State"); //vbox vbox = etk_vbox_new(ETK_FALSE, 0); @@ -1367,9 +1458,6 @@ etk_widget_size_request_set(UI_StateMaxHSpinner, 45, 20); etk_box_append(ETK_BOX(hbox),UI_StateMaxHSpinner, ETK_BOX_START, ETK_BOX_NONE, 0); - - - etk_signal_connect("text-changed", ETK_OBJECT(UI_StateEntry), ETK_CALLBACK(on_StateEntry_text_changed), NULL); etk_signal_connect("value-changed", ETK_OBJECT(UI_StateIndexSpinner), ETK_CALLBACK(on_StateIndexSpinner_value_changed), NULL); etk_signal_connect("value-changed", ETK_OBJECT(UI_AspectMinSpinner), ETK_CALLBACK(on_AspectSpinner_value_changed), NULL); @@ -1400,86 +1488,141 @@ { Etk_Widget *label; Etk_Widget *table; + Etk_Tree_Col *col1; + Etk_Widget *button; //ImageFrame UI_ImageFrame = etk_frame_new("Image"); //table - table = etk_table_new (5, 4, ETK_TABLE_NOT_HOMOGENEOUS); + table = etk_table_new (5, 8, ETK_TABLE_NOT_HOMOGENEOUS); etk_container_add(ETK_CONTAINER(UI_ImageFrame), table); - label = etk_label_new("Image"); - //etk_object_properties_set (ETK_OBJECT(label), "xalign",0.5,NULL); - etk_table_attach_default (ETK_TABLE(table),label, 0, 0, 0, 0); + //ImageTweenRadio + UI_ImageNormalRadio = etk_radio_button_new_with_label("Normal",NULL); + UI_ImageTweenRadio = etk_radio_button_new_with_label_from_widget("Tween", + ETK_RADIO_BUTTON(UI_ImageNormalRadio)); + etk_table_attach_default (ETK_TABLE(table),UI_ImageNormalRadio, 1, 2, 0, 0); + etk_table_attach_default (ETK_TABLE(table),UI_ImageTweenRadio, 3, 4, 0, 0); //imageComboBox UI_ImageComboBox = etk_combobox_new(); etk_combobox_column_add(ETK_COMBOBOX(UI_ImageComboBox), ETK_COMBOBOX_IMAGE, 24, ETK_COMBOBOX_NONE, 0.0); etk_combobox_column_add(ETK_COMBOBOX(UI_ImageComboBox), ETK_COMBOBOX_LABEL, 75, ETK_COMBOBOX_NONE, 0.0); etk_combobox_build(ETK_COMBOBOX(UI_ImageComboBox)); - etk_table_attach_default (ETK_TABLE(table),UI_ImageComboBox, 1, 3, 0, 0); + etk_table_attach_default (ETK_TABLE(table),UI_ImageComboBox, 0, 3, 1, 1); //AddImageButton UI_ImageAddButton = etk_button_new_from_stock (ETK_STOCK_DOCUMENT_OPEN); etk_object_properties_set (ETK_OBJECT(UI_ImageAddButton), "label","",NULL); - etk_table_attach_default (ETK_TABLE(table),UI_ImageAddButton, 4, 4, 0, 0); - - label = etk_label_new("Alpha"); - etk_table_attach_default (ETK_TABLE(table),label, 0, 0, 1, 1); + etk_table_attach_default (ETK_TABLE(table),UI_ImageAddButton, 4, 4, 1, 1); + //ImageTweenVBox + UI_ImageTweenVBox = etk_vbox_new(ETK_TRUE, 2); + etk_table_attach_default (ETK_TABLE(table),UI_ImageTweenVBox, 0, 0, 2, 2); + + //MoveUpTweenButton + UI_MoveUpTweenButton = etk_button_new_from_stock (ETK_STOCK_GO_UP); + etk_button_style_set(UI_MoveUpTweenButton, ETK_BUTTON_ICON); + etk_signal_connect("clicked", ETK_OBJECT(UI_MoveUpTweenButton), + ETK_CALLBACK(on_AllButton_click), (void*)IMAGE_TWEEN_UP); + etk_box_append (UI_ImageTweenVBox, UI_MoveUpTweenButton, + ETK_BOX_START, ETK_BOX_EXPAND_FILL, 0); + + //MoveDownTweenButton + UI_MoveDownTweenButton = etk_button_new_from_stock (ETK_STOCK_GO_DOWN); + etk_button_style_set(UI_MoveDownTweenButton, ETK_BUTTON_ICON); + etk_signal_connect("clicked", ETK_OBJECT(UI_MoveDownTweenButton), + ETK_CALLBACK(on_AllButton_click), (void*)IMAGE_TWEEN_DOWN); + etk_box_append (UI_ImageTweenVBox, UI_MoveDownTweenButton, + ETK_BOX_START, ETK_BOX_EXPAND_FILL, 0); + + //DeleteTweenButton + UI_DeleteTweenButton = etk_button_new_from_stock (ETK_STOCK_EDIT_DELETE); + etk_button_style_set(UI_DeleteTweenButton, ETK_BUTTON_ICON); + etk_signal_connect("clicked", ETK_OBJECT(UI_DeleteTweenButton), + ETK_CALLBACK(on_AllButton_click), (void*)IMAGE_TWEEN_DELETE); + etk_box_append (UI_ImageTweenVBox, UI_DeleteTweenButton, + ETK_BOX_START, ETK_BOX_EXPAND_FILL, 0); + + //ImageTweenList + UI_ImageTweenList = etk_tree_new(); + etk_tree_mode_set(ETK_TREE(UI_ImageTweenList), ETK_TREE_MODE_LIST); + etk_tree_headers_visible_set(ETK_TREE(UI_ImageTweenList), FALSE); + // etk_tree_multiple_select_set(ETK_TREE(UI_ImageTweenList), ETK_TRUE); + col1 = etk_tree_col_new(ETK_TREE(UI_ImageTweenList), "Tween", 130, 0.0); + etk_tree_col_model_add(col1, etk_tree_model_image_new()); + etk_tree_col_model_add(col1, etk_tree_model_text_new()); + etk_tree_build(ETK_TREE(UI_ImageTweenList)); + etk_table_attach_default (ETK_TABLE(table),UI_ImageTweenList, 1, 4, 2, 2); + label = etk_label_new("Alpha"); + etk_table_attach_default (ETK_TABLE(table),label, 0, 0, 3, 3); //ImageAlphaSlider UI_ImageAlphaSlider = etk_hslider_new (0, 255, 15, 1,20); - etk_table_attach_default (ETK_TABLE(table),UI_ImageAlphaSlider, 1, 4, 1, 1); + etk_table_attach_default (ETK_TABLE(table),UI_ImageAlphaSlider, 1, 4, 3, 3); label = etk_label_new("Left"); etk_object_properties_set (ETK_OBJECT(label), "xalign",0.5,NULL); - etk_table_attach_default (ETK_TABLE(table),label, 1, 1, 2, 2); + etk_table_attach_default (ETK_TABLE(table),label, 1, 1, 4, 4); label = etk_label_new("Right"); etk_object_properties_set (ETK_OBJECT(label), "xalign",0.5,NULL); - etk_table_attach_default (ETK_TABLE(table),label, 2, 2, 2, 2); + etk_table_attach_default (ETK_TABLE(table),label, 2, 2, 4, 4); label = etk_label_new("Top"); etk_object_properties_set (ETK_OBJECT(label), "xalign",0.5,NULL); - etk_table_attach_default (ETK_TABLE(table),label, 3, 3, 2, 2); + etk_table_attach_default (ETK_TABLE(table),label, 3, 3, 4, 4); label = etk_label_new("Bottom"); etk_object_properties_set (ETK_OBJECT(label), "xalign",0.5,NULL); - etk_table_attach_default (ETK_TABLE(table),label, 4, 4, 2, 2); + etk_table_attach_default (ETK_TABLE(table),label, 4, 4, 4, 4); label = etk_label_new("Border"); //etk_object_properties_set (ETK_OBJECT(label), "xalign",0.5,NULL); - etk_table_attach_default (ETK_TABLE(table),label, 0, 0, 3, 3); + etk_table_attach_default (ETK_TABLE(table),label, 0, 0, 5, 5); //UI_BorderLeftSpinner UI_BorderLeftSpinner = etk_spinner_new (0, 500, 0, 1, 10); etk_widget_size_request_set(UI_BorderLeftSpinner,45, 20); - etk_table_attach_default (ETK_TABLE(table),UI_BorderLeftSpinner, 1, 1, 3, 3); + etk_table_attach_default (ETK_TABLE(table),UI_BorderLeftSpinner, 1, 1, 5, 5); //UI_BorderRightSpinner UI_BorderRightSpinner = etk_spinner_new (0, 500, 0, 1, 10); etk_widget_size_request_set(UI_BorderRightSpinner,45, 20); - etk_table_attach_default (ETK_TABLE(table),UI_BorderRightSpinner, 2, 2, 3, 3); + etk_table_attach_default (ETK_TABLE(table),UI_BorderRightSpinner, 2, 2, 5, 5); //UI_BorderTopSpinner UI_BorderTopSpinner = etk_spinner_new (0, 500, 0, 1, 10); etk_widget_size_request_set(UI_BorderTopSpinner,45, 20); - etk_table_attach_default (ETK_TABLE(table),UI_BorderTopSpinner, 3, 3, 3, 3); + etk_table_attach_default (ETK_TABLE(table),UI_BorderTopSpinner, 3, 3, 5, 5); //UI_BorderBottomSpinner UI_BorderBottomSpinner = etk_spinner_new (0, 500, 0, 1, 10); etk_widget_size_request_set(UI_BorderBottomSpinner,45, 20); - etk_table_attach_default (ETK_TABLE(table),UI_BorderBottomSpinner, 4, 4, 3, 3); + etk_table_attach_default (ETK_TABLE(table),UI_BorderBottomSpinner, 4, 4, 5, 5); - etk_signal_connect("clicked", ETK_OBJECT(UI_ImageAddButton), ETK_CALLBACK(on_AllButton_click), (void*)TOOLBAR_IMAGE_FILE_ADD); - etk_signal_connect("active-item-changed", ETK_OBJECT(UI_ImageComboBox), ETK_CALLBACK(on_ImageComboBox_changed), NULL); - etk_signal_connect("value-changed", ETK_OBJECT(UI_ImageAlphaSlider), ETK_CALLBACK(on_ImageAlphaSlider_value_changed), NULL); - etk_signal_connect("value-changed", ETK_OBJECT(UI_BorderLeftSpinner), ETK_CALLBACK(on_BorderSpinner_value_changed), (void *)BORDER_LEFT); - etk_signal_connect("value-changed", ETK_OBJECT(UI_BorderRightSpinner), ETK_CALLBACK(on_BorderSpinner_value_changed), (void *)BORDER_RIGHT); - etk_signal_connect("value-changed", ETK_OBJECT(UI_BorderTopSpinner), ETK_CALLBACK(on_BorderSpinner_value_changed), (void *)BORDER_TOP); - etk_signal_connect("value-changed", ETK_OBJECT(UI_BorderBottomSpinner), ETK_CALLBACK(on_BorderSpinner_value_changed), (void *)BORDER_BOTTOM); + etk_signal_connect("clicked", ETK_OBJECT(UI_ImageNormalRadio), + ETK_CALLBACK(on_AllButton_click), (void*)IMAGE_NORMAL_RADIO); + etk_signal_connect("clicked", ETK_OBJECT(UI_ImageTweenRadio), + ETK_CALLBACK(on_AllButton_click), (void*)IMAGE_TWEEN_RADIO); + etk_signal_connect("row-selected", ETK_OBJECT(UI_ImageTweenList), + ETK_CALLBACK(on_ImageTweenList_row_selected), NULL); + etk_signal_connect("clicked", ETK_OBJECT(UI_ImageAddButton), + ETK_CALLBACK(on_AllButton_click), (void*)TOOLBAR_IMAGE_FILE_ADD); + etk_signal_connect("active-item-changed", ETK_OBJECT(UI_ImageComboBox), + ETK_CALLBACK(on_ImageComboBox_changed), NULL); + etk_signal_connect("value-changed", ETK_OBJECT(UI_ImageAlphaSlider), + ETK_CALLBACK(on_ImageAlphaSlider_value_changed), NULL); + etk_signal_connect("value-changed", ETK_OBJECT(UI_BorderLeftSpinner), + ETK_CALLBACK(on_BorderSpinner_value_changed), (void *)BORDER_LEFT); + etk_signal_connect("value-changed", ETK_OBJECT(UI_BorderRightSpinner), + ETK_CALLBACK(on_BorderSpinner_value_changed), (void *)BORDER_RIGHT); + etk_signal_connect("value-changed", ETK_OBJECT(UI_BorderTopSpinner), + ETK_CALLBACK(on_BorderSpinner_value_changed), (void *)BORDER_TOP); + etk_signal_connect("value-changed", ETK_OBJECT(UI_BorderBottomSpinner), + ETK_CALLBACK(on_BorderSpinner_value_changed), (void *)BORDER_BOTTOM); return UI_ImageFrame; } =================================================================== RCS file: /cvs/e/e17/proto/edje_editor/src/bin/interface.h,v retrieving revision 1.13 retrieving revision 1.14 diff -u -3 -r1.13 -r1.14 --- interface.h 10 Jul 2007 02:16:37 -0000 1.13 +++ interface.h 13 Jul 2007 16:54:57 -0000 1.14 @@ -22,7 +22,14 @@ Etk_Widget *UI_ProgramFrame; Etk_Widget *UI_TextEntry; Etk_Widget *UI_FontComboBox; +Etk_Widget *UI_ImageTweenList; +Etk_Widget *UI_ImageTweenRadio; +Etk_Widget *UI_ImageNormalRadio; Etk_Widget *UI_ImageComboBox; +Etk_Widget *UI_ImageTweenVBox; +Etk_Widget *UI_DeleteTweenButton; +Etk_Widget *UI_MoveDownTweenButton; +Etk_Widget *UI_MoveUpTweenButton; Etk_Widget *UI_FontSizeSpinner; Etk_Widget *UI_EffectComboBox; Etk_Widget *UI_PartFrame; =================================================================== RCS file: /cvs/e/e17/proto/edje_editor/src/bin/main.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -3 -r1.9 -r1.10 --- main.c 13 Mar 2007 05:27:11 -0000 1.9 +++ main.c 13 Jul 2007 16:54:57 -0000 1.10 @@ -13,7 +13,54 @@ #define MAIN_EDC_NAME "edje_editor_link.edc" +Evas_Object *EdjeTest_bg; +Evas_Object *EdjeTest_edje; +void +on_test_win_resize(Ecore_Evas * ee) +{ + int w, h; + + evas_output_size_get(ecore_evas_get(ee), &w, &h); + printf("RESIZE: %d - %d\n", w,h); + + //evas_object_move(preview, barwidth, 0); + evas_object_resize(EdjeTest_bg, w , h ); + evas_object_resize(EdjeTest_edje, w , h ); +} +/** + * engrave_part_state_image_tween_remove_nth - Remove the nth image from the tween list. + * @param eps: The Engrave_Part_State to remove the image to. + * @param tween_num: The number of the image to remove from the tween list. + * + * @return Returns no value + */ +/*EAPI*/ void +PROTO_engrave_part_state_image_tween_remove_nth(Engrave_Part_State *eps, + int tween_num) +{ + Evas_List *l; + + if ((!eps) || (tween_num < 0)) return; + + l = evas_list_nth_list (eps->image.tween, tween_num); + //printf("Remove tween num: %d (%s)\n",tween_num,((Engrave_Image*)(l->data))->name); + if (!l) return; + + eps->image.tween = evas_list_remove_list (eps->image.tween, l); +} +/** + * engrave_part_state_image_tween_remove_all - Clear the tween list for a state. + * @param eps: The Engrave_Part_State that contain the list to clear. + * + * @return Returns no value + */ +/*EAPI*/ void +PROTO_engrave_part_state_image_tween_remove_all(Engrave_Part_State *eps) +{ + if (!eps && !eps->image.tween) return; + eps->image.tween = evas_list_free(eps->image.tween); +} /** * engrave_part_state_remove - remove the state from the part. * @param ep: The Engrave_Part to remove the state to. @@ -330,7 +377,7 @@ Cur.main_source_file = strdup(buf); //Execute edje_decc through a pipe - snprintf(cmd, 4096, "edje_decc %s -main-out "MAIN_EDC_NAME, file); + snprintf(cmd, 4096, "edje_decc \"%s\" -main-out "MAIN_EDC_NAME, file); snprintf(buf,4096,"<b>Executing: </b>%s\n",cmd); etk_textview_append(UI_LoadTextView, buf); @@ -436,6 +483,68 @@ etk_widget_hide(win); } + +void +TestEdjeGroup(char *File,char *Group) +{ + Ecore_Evas *ee; + Evas *evas; + + printf("Test EdjeFile: %s\nGroup: %s\nTheme: %s\n",File,Group,EdjeFile); + + /* ecore evas init */ + ecore_init(); + ecore_evas_init(); + ee = ecore_evas_software_x11_new(NULL, 0, 0, 0, 0, 0); + ecore_evas_title_set(ee, "Edje Test Application"); + ecore_evas_callback_resize_set(ee, on_test_win_resize); + edje_init(); + evas = ecore_evas_get(ee); + + /* Background */ + EdjeTest_bg = evas_object_image_add(evas); + evas_object_image_file_set(EdjeTest_bg, EdjeFile, "images/0"); //TODO Find a method to load by name and not by number + evas_object_image_fill_set(EdjeTest_bg,0,0,128,128); + evas_object_move(EdjeTest_bg, 0, 0); + evas_object_resize(EdjeTest_bg, 300, 300); + evas_object_show(EdjeTest_bg); + + /* Edje Goroup */ + EdjeTest_edje = edje_object_add(evas); + edje_object_file_set(EdjeTest_edje,File, Group); + evas_object_move(EdjeTest_edje, 0, 0); + evas_object_resize(EdjeTest_edje, 300, 300); + evas_object_show(EdjeTest_edje); + + /* Window Size */ + int minw,minh,maxw,maxh; + edje_object_size_min_get(EdjeTest_edje, &minw, &minh); + edje_object_size_max_get(EdjeTest_edje, &maxw, &maxh); + if (minw <= 0) minw = 30; + if (minh <= 0) minh = 30; + ecore_evas_size_min_set(ee,minw,minh); + ecore_evas_size_max_set(ee,maxw,maxh); + ecore_evas_resize(ee, minw, minh); + + ecore_evas_show(ee); + + ecore_main_loop_begin(); +} +void +PrintUsage(void) +{ + printf("\nUsage:\n"); + printf(" edje_editor [EDC | EDJ] [IMAGE_DIR] [FONT_DIR]\n"); + printf("\nExample:\n"); + printf(" edje_editor #Open an empty file\n"); + printf(" edje_editor default.edj #Open the given EDJ\n"); + printf(" edje_editor default.edc #Open the given EDC\n"); + printf("\nTesting Edje file:\n"); + printf(" edje_editor -t file.edj \"group_name\"\n"); + printf("\nNote on open an EDC:\n"); + printf(" To open an EDC file you must pass the IMAGE_DIR and FONT_DIR\n"); + printf(" parameters. If not given the EDC directory is assumed.\n\n"); +} /* main */ int main(int argc, char **argv) @@ -461,19 +570,22 @@ (0 == strcmp(argv[1],"--help")) || (0 == strcmp(argv[1],"--usage")) ) { - printf("\nUsage:\n"); - printf(" edje_editor [EDC | EDJ] [IMAGE_DIR] [FONT_DIR]\n"); - printf("\nExample:\n"); - printf(" edje_editor #Open an empty file\n"); - printf(" edje_editor default.edj #Open the given EDJ\n"); - printf(" edje_editor default.edc #Open the given EDC\n"); - printf("\nNote on open an EDC:\n"); - printf(" To open an EDC file you must pass the IMAGE_DIR and FONT_DIR\n"); - printf(" parameters. If not given the EDC directory is assumed.\n\n"); - return 0; + PrintUsage(); + return 1; } } + //Test EDJ + if (argc > 1 && (0 == strcmp(argv[1],"-t"))) + { + if (argc < 4) + { + PrintUsage(); + return 1; + } + TestEdjeGroup(argv[2],argv[3]); + return 0; + } //Init ETK if (!etk_init(&argc, &argv)) { =================================================================== RCS file: /cvs/e/e17/proto/edje_editor/src/bin/main.h,v retrieving revision 1.9 retrieving revision 1.10 diff -u -3 -r1.9 -r1.10 --- main.h 10 Jul 2007 02:16:37 -0000 1.9 +++ main.h 13 Jul 2007 16:54:57 -0000 1.10 @@ -4,6 +4,7 @@ #include <Engrave.h> #include <Ecore_Data.h> #include <Ecore_File.h> +#include <Ecore_Evas.h> /* DEFINES */ #define FAKEWIN_BORDER_TOP 16 @@ -81,7 +82,12 @@ DRAG_REL1, DRAG_REL2, DRAG_MOVEBOX, - REL_COMBO_INTERFACE + REL_COMBO_INTERFACE, + IMAGE_TWEEN_UP, + IMAGE_TWEEN_DOWN, + IMAGE_TWEEN_DELETE, + IMAGE_TWEEN_RADIO, + IMAGE_NORMAL_RADIO }; struct Current_State ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs