Enlightenment CVS committal Author : davemds Project : e17 Module : proto/edje_editor
Dir : e17/proto/edje_editor/src/bin Modified Files: callbacks.c callbacks.h inout.c inout.h interface.c interface.h main.c main.h Log Message: * Better save routines not yet finished, have to fix engrave_edc_output() to return correct values. the same on engrave_load_edc()) * Remove unused play_dialog functions =================================================================== RCS file: /cvs/e/e17/proto/edje_editor/src/bin/callbacks.c,v retrieving revision 1.26 retrieving revision 1.27 diff -u -3 -r1.26 -r1.27 --- callbacks.c 3 Aug 2007 19:53:29 -0000 1.26 +++ callbacks.c 11 Aug 2007 19:33:15 -0000 1.27 @@ -58,7 +58,7 @@ case TOOLBAR_SAVE: printf("Clicked signal on Toolbar Button 'Save' EMITTED\n"); if (Cur.open_file_name) - engrave_edj_output(Cur.ef,Cur.open_file_name); + SaveEDJ(Cur.open_file_name); else ShowFilechooser(FILECHOOSER_SAVE_EDJ); break; @@ -177,6 +177,7 @@ } } + /* Tree callbacks */ void on_PartsTree_row_selected(Etk_Object *object, Etk_Tree_Row *row, void *data) @@ -1324,8 +1325,7 @@ break; case FILECHOOSER_SAVE_EDJ: printf("SAVE EDJ\n"); - engrave_edj_output(Cur.ef, - (char*)etk_entry_text_get(ETK_ENTRY(UI_FilechooserFileNameEntry))); + SaveEDJ(etk_entry_text_get(ETK_ENTRY(UI_FilechooserFileNameEntry))); break; case FILECHOOSER_SAVE_EDC: printf("SAVE EDC\n"); @@ -1412,26 +1412,8 @@ etk_object_destroy(ETK_OBJECT(str)); } -void on_PlayDialog_response(Etk_Dialog *dialog, int response_id, void *data){ -/* GString *command = g_string_new(""); - if (response_id == ETK_RESPONSE_OK){ - printf("TEST IN VIEWER\n"); - g_string_printf(command,"edje_viewer %s",EDCFile->str); - command->str[command->len - 1] = 'j'; - command = g_string_append(command," &"); - printf("TEST IN VIEWER %s\n",command->str); - system(command->str); - etk_widget_hide(UI_PlayDialog); - } - else{ - etk_widget_hide(ETK_WIDGET(dialog)); - } - g_string_free(command,TRUE); */ -} - void on_AlertDialog_response(Etk_Dialog *dialog, int response_id, void *data) { etk_widget_hide(ETK_WIDGET(dialog)); } - =================================================================== RCS file: /cvs/e/e17/proto/edje_editor/src/bin/callbacks.h,v retrieving revision 1.12 retrieving revision 1.13 diff -u -3 -r1.12 -r1.13 --- callbacks.h 13 Jul 2007 16:54:57 -0000 1.12 +++ callbacks.h 11 Aug 2007 19:33:15 -0000 1.13 @@ -22,8 +22,6 @@ void on_TextEntry_text_changed (Etk_Object *object, void *data); void on_FileChooser_response (Etk_Dialog *dialog, int response_id, void *data); -void on_PlayDialog_response (Etk_Dialog *dialog, int response_id, - void *data); void on_BorderSpinner_value_changed (Etk_Range *range, double value, void *data); void on_RelSpinner_value_changed (Etk_Range *range, double value, void *data); void on_RelOffsetSpinner_value_changed (Etk_Range *range, double value, void *data); =================================================================== RCS file: /cvs/e/e17/proto/edje_editor/src/bin/inout.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- inout.c 4 Aug 2007 21:33:30 -0000 1.2 +++ inout.c 11 Aug 2007 19:33:15 -0000 1.3 @@ -1,7 +1,349 @@ #include <string.h> -#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <errno.h> #include <Etk.h> #include "main.h" -#include "interface.h" #include "inout.h" + +#define MAIN_EDC_NAME "edje_editor_link.edc" + +Etk_Widget *Load_TextView; +Etk_Widget *Load_ProgBar; +Etk_Widget *Load_Win; +Etk_Widget *Save_ProgBar; +Etk_Widget *Save_TextView; +Ecore_Timer *progress_bar_timer; + + +void +etk_textview_append(Etk_Widget *tv, char *str) +{ + Etk_Textblock_Iter *iter; + iter = etk_text_view_cursor_get (ETK_TEXT_VIEW(tv)); + etk_textblock_insert_markup(ETK_TEXT_VIEW(tv)->textblock, iter, + str, strlen(str)); +} + +void +create_load_window() +{ + Etk_Widget *vbox; + Etk_Widget *scrolled_view; + Etk_Widget *button; + Etk_Widget *label; + + //Load Win + Load_Win = etk_window_new(); + etk_widget_size_request_set(Load_Win, 400, 300); + etk_window_title_set(ETK_WINDOW(Load_Win), "Loading..."); + etk_signal_connect("destroyed", ETK_OBJECT(Load_Win), ETK_CALLBACK(etk_main_quit), NULL); + + vbox = etk_vbox_new(ETK_FALSE, 0); + etk_container_add(ETK_CONTAINER(Load_Win), vbox); + + label = etk_label_new("<font_size=20><b>Loading file</b></>"); + etk_object_properties_set (ETK_OBJECT(label), "xalign",0.5,NULL); + etk_box_append(ETK_BOX(vbox), label, ETK_BOX_START, ETK_BOX_NONE, 5); + + //Progress bar + Load_ProgBar = etk_progress_bar_new_with_text("Working..."); + etk_progress_bar_pulse_step_set(ETK_PROGRESS_BAR(Load_ProgBar), 0.03); + etk_box_append(ETK_BOX(vbox), Load_ProgBar, ETK_BOX_START, ETK_BOX_NONE, 5); + + //Text_view + Load_TextView = etk_text_view_new (); + //etk_textblock_object_cursor_visible_set(ETK_TEXT_VIEW(LS_TextView)->textblock, ETK_FALSE); //TODO questa riga non funziona + scrolled_view = etk_scrolled_view_new(); + etk_scrolled_view_policy_set(ETK_SCROLLED_VIEW(scrolled_view), ETK_POLICY_HIDE, ETK_POLICY_SHOW); + etk_bin_child_set( ETK_BIN(scrolled_view), Load_TextView); + etk_box_append(ETK_BOX(vbox), scrolled_view, ETK_BOX_START, ETK_BOX_EXPAND_FILL, 5); + + //buttons + button = etk_button_new_from_stock(ETK_STOCK_DIALOG_CLOSE); + etk_box_append(ETK_BOX(vbox), button, ETK_BOX_START, ETK_BOX_NONE, 5); + etk_signal_connect("clicked", ETK_OBJECT(button), ETK_CALLBACK(etk_main_quit), NULL); + + etk_widget_show_all(Load_Win); +} + +void +create_save_window() +{ + Etk_Widget *Save_Win; + Etk_Widget *vbox; + Etk_Widget *scrolled_view; + Etk_Widget *button; + Etk_Widget *label; + + //Save Win + Save_Win = etk_window_new(); + etk_widget_size_request_set(Save_Win, 400, 300); + etk_window_title_set(ETK_WINDOW(Save_Win), "Saving..."); + //etk_signal_connect("delete_event_signal", ETK_OBJECT(Save_Win), ETK_CALLBACK(NULL), NULL); + + vbox = etk_vbox_new(ETK_FALSE, 0); + etk_container_add(ETK_CONTAINER(Save_Win), vbox); + + label = etk_label_new("<font_size=20><b>Saving file</b></>"); + etk_object_properties_set (ETK_OBJECT(label), "xalign",0.5,NULL); + etk_box_append(ETK_BOX(vbox), label, ETK_BOX_START, ETK_BOX_NONE, 5); + + //Progress bar + Save_ProgBar = etk_progress_bar_new_with_text("Working..."); + etk_progress_bar_pulse_step_set(ETK_PROGRESS_BAR(Save_ProgBar), 0.03); + etk_box_append(ETK_BOX(vbox), Save_ProgBar, ETK_BOX_START, ETK_BOX_NONE, 5); + + //Text_view + Save_TextView = etk_text_view_new (); + //etk_textblock_object_cursor_visible_set(ETK_TEXT_VIEW(LS_TextView)->textblock, ETK_FALSE); //TODO questa riga non funziona + scrolled_view = etk_scrolled_view_new(); + etk_scrolled_view_policy_set(ETK_SCROLLED_VIEW(scrolled_view), ETK_POLICY_HIDE, ETK_POLICY_SHOW); + etk_bin_child_set( ETK_BIN(scrolled_view), Save_TextView); + etk_box_append(ETK_BOX(vbox), scrolled_view, ETK_BOX_START, ETK_BOX_EXPAND_FILL, 5); + + //buttons + button = etk_button_new_from_stock(ETK_STOCK_DIALOG_CLOSE); + etk_box_append(ETK_BOX(vbox), button, ETK_BOX_START, ETK_BOX_NONE, 5); + etk_signal_connect_swapped("clicked", ETK_OBJECT(button), ETK_CALLBACK(etk_widget_hide), Save_Win); + + etk_widget_show_all(Save_Win); +} + +char* +backup_file(char *file_name) +{ + char bkname[4096]; + if (!ecore_file_exists(file_name)) + return 0; + + snprintf(bkname,4095,"%s.bkp",file_name); + + if (ecore_file_cp(file_name,bkname)) + return &bkname; + else + return NULL; +} + +int +SaveEDJ(char *file_name) +{ + char tmpn[1024]; + char ipart[1024], fpart[1024]; + char buf[4096]; + char cmd[2048]; + int fd = 0; + const char *imgdir, *fontdir; + + create_save_window(); + + //Start progress_bar + progress_bar_timer = + ecore_timer_add(0.025, (int(*)(void *data))etk_progress_bar_pulse, Save_ProgBar); + + //backup existing file + backup_file(file_name); + + //Create tmp file + strcpy(tmpn, "/tmp/edje_editor_tmp.edc-XXXXXX"); + fd = mkstemp(tmpn); + if (fd < 0) + { + snprintf(buf,4096,"<font color=#FF0000><b>Can't create temp file:</b> %s\n<b>Error:</b> %s</font>\n",tmpn,strerror(errno)); + etk_textview_append(Save_TextView,buf); + stop_bar(Save_ProgBar); + return 0; + } + close(fd); + snprintf(buf,4096,"<b>Create temp file:</b> %s\n",tmpn); + etk_textview_append(Save_TextView,buf); + + //TODO check engrave success + engrave_edc_output(Cur.ef, tmpn); + + //Get image and font directory + imgdir = engrave_file_image_dir_get(Cur.ef); + fontdir = engrave_file_font_dir_get(Cur.ef); + snprintf(buf,4096,"<b>Image dir:</b> %s\n<b>Font dir:</b> %s\n",imgdir,fontdir); + etk_textview_append(Save_TextView,buf); + + if (imgdir) snprintf(ipart, sizeof(ipart), "-id %s", imgdir); + else ipart[0] = '\0'; + + if (fontdir) snprintf(fpart, sizeof(fpart), "-fd %s", fontdir); + else fpart[0] = '\0'; + + //Create edje_cc command line + snprintf(cmd, sizeof(cmd), "edje_cc -v %s %s %s \"%s\"", + ipart, fpart, tmpn, file_name); + snprintf(buf,4096,"<b>Executing: </b>%s\n",cmd); + etk_textview_append(Save_TextView, buf); + + //Execute edje_cc through a pipe + Ecore_Exe* exe; + ecore_event_handler_add(ECORE_EXE_EVENT_DATA, exe_data, Save_TextView); + ecore_event_handler_add(ECORE_EXE_EVENT_DEL, exe_exit, NULL); + exe = ecore_exe_pipe_run(cmd, + ECORE_EXE_PIPE_READ | ECORE_EXE_PIPE_READ_LINE_BUFFERED,(void*)SAVE_WIN); + + return 1; //1 means success +} + +void +LoadEDJ(char *file) +{ + create_load_window(); + + ecore_timer_add(0.1,Decompile,file); + + etk_main(); + etk_widget_hide(Load_Win); +} + +int Decompile(void *data) //data is the name of the file to open +{ + char *file = (char*)data; + char buf[4096]; + char tmpn[4096]; + char cmd[4096]; + char *old_fname; + char *ptr; + char *work_dir = NULL; + + progress_bar_timer = + ecore_timer_add(0.025, (int(*)(void *data))etk_progress_bar_pulse, Load_ProgBar); + + //TODO Check source integrity (is an edje file?) + Cur.open_file_name = strdup(file); + + //Create working dir + memset(tmpn, '\0', sizeof(tmpn)); + strcpy(tmpn, "/tmp/edje_editor-tmp-XXXXXX"); +#if defined (__SVR4) && defined (__sun) + if (mkdir(tmpn, S_IRWXU | S_IRWXG) == NULL) +#else + if (mkdtemp(tmpn) == NULL) +#endif + { + snprintf(buf,4096,"<font color=#FF0000><b>Can't create working dir:</b> %s\n<b>Error:</b> %s</font>\n",tmpn,strerror(errno)); + etk_textview_append(Load_TextView,buf); + stop_bar(Load_ProgBar); + return 0; + } + work_dir = strdup(tmpn); + + //Change to the working dir + snprintf(buf,4096,"<b>Change to working dir:</b> %s\n",work_dir); + etk_textview_append(Load_TextView,buf); + getcwd(tmpn, sizeof(tmpn)); + if (chdir(work_dir) == -1) { + snprintf(buf,4096,"<font color=#FF0000><b>Can't change to dir:</b> %s\n<b>Error: </b> %s</font>\n",work_dir,strerror(errno)); + etk_textview_append(Load_TextView, buf); + stop_bar(Load_ProgBar); + return 0; + } + + //Calculate Cur.source_dir, image_dir, font_dir, main_source_file + old_fname = strdup(file); + ptr = strstr(old_fname, ".edj"); + *ptr = '\0'; + ptr = strrchr(old_fname, '/'); + if (ptr == NULL) ptr = old_fname; + snprintf(buf,4096,"%s%s",work_dir,ptr); + Cur.source_dir = strdup(buf); + snprintf(buf,4096,"%s/"MAIN_EDC_NAME,Cur.source_dir); + 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(buf,4096,"<b>Executing: </b>%s\n",cmd); + etk_textview_append(Load_TextView, buf); + + Ecore_Exe* exe; + ecore_event_handler_add(ECORE_EXE_EVENT_DATA, exe_data, Load_TextView); + ecore_event_handler_add(ECORE_EXE_EVENT_DEL, exe_exit, NULL); + exe = ecore_exe_pipe_run(cmd, + ECORE_EXE_PIPE_READ | ECORE_EXE_PIPE_READ_LINE_BUFFERED,(void*)LOAD_WIN); + + return 0; //Stop executing timer +} + +int +exe_data(void *data, int ev_type, void *ev) // Data is Load_TextView or Save_TextView +{ + Ecore_Exe_Event_Data *e; + e = (Ecore_Exe_Event_Data *)ev; + Etk_Widget* text_view = data; + + if (e->lines) + { + int i; + for (i = 0; e->lines[i].line != NULL; i++) + { + //printf("++ %d %s\n", e->lines[i].size, e->lines[i].line); + //Don't show edje_cc malicious warnings + if (strcmp(e->lines[i].line,"*** CAUTION ***")) + { + etk_textview_append(text_view,"<font color=#0000FF>"); + etk_textview_append(text_view,e->lines[i].line); + etk_textview_append(text_view,"</font>\n"); + } + else + i++; + } + //etk_textblock_object_yoffset_set(ETK_TEXT_VIEW(LS_TextView)->textblock, -200 ); + } + + return 1; +} + +int +exe_exit(void *data, int ev_type, void *ev) // Data is Load_TextView or Save_TextView +{ + char buf[1024]; + Ecore_Exe_Event_Del *e = (Ecore_Exe_Event_Del *)ev; + + if (e->exit_code){ + snprintf(buf,1024,"<font color=#FF0000><b>Error in edje_cc/decc, exit code: </b> %d</font>\n",e->exit_code); + etk_textview_append(data,buf); + return 1; + } + + if (ecore_exe_data_get(e->exe) == (void*)LOAD_WIN) //if Load Win + { + Cur.ef = engrave_load_edc(Cur.main_source_file, Cur.source_dir, Cur.source_dir); + + etk_textview_append(Load_TextView,"<font color=#00AA00><b>Operation completed.</b>\n"); + + snprintf(buf,1024,"<b>Main source file:</b> %s\n",Cur.main_source_file); + etk_textview_append(Load_TextView, buf); + + snprintf(buf,1024,"<b>Source dir:</b> %s\n",Cur.source_dir); + etk_textview_append(Load_TextView, buf); + + snprintf(buf,1024,"<b>Image dir:</b> %s\n",engrave_file_image_dir_get(Cur.ef)); + etk_textview_append(Load_TextView, buf); + + snprintf(buf,1024,"<b>Font dir:</b> %s</font>\n",engrave_file_font_dir_get(Cur.ef)); + etk_textview_append(Load_TextView, buf); + + stop_bar(Load_ProgBar); + } + else + { + stop_bar(Save_ProgBar); + etk_textview_append(Save_TextView,"<font color=#00AA00><b>Operation completed.</b>\n"); + } + + //TODO Check engrave load success + return 0; +} + +void +stop_bar(Etk_Widget* pbar) +{ + ecore_timer_del(progress_bar_timer); + etk_progress_bar_text_set (ETK_PROGRESS_BAR(pbar), "Done!"); + etk_progress_bar_fraction_set (ETK_PROGRESS_BAR(pbar), 1.0); +} =================================================================== RCS file: /cvs/e/e17/proto/edje_editor/src/bin/inout.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- inout.h 4 Aug 2007 21:22:21 -0000 1.1 +++ inout.h 11 Aug 2007 19:33:15 -0000 1.2 @@ -1,2 +1,8 @@ #include "main.h" +void LoadEDJ (char *file); +int SaveEDJ (char *file_name); +int Decompile (void *data); //data is the name of the file to open +int exe_data (void *data, int ev_type, void *ev); +int exe_exit (void *data, int ev_type, void *ev); +void stop_bar (Etk_Widget * pbar); =================================================================== RCS file: /cvs/e/e17/proto/edje_editor/src/bin/interface.c,v retrieving revision 1.33 retrieving revision 1.34 diff -u -3 -r1.33 -r1.34 --- interface.c 3 Aug 2007 19:53:29 -0000 1.33 +++ interface.c 11 Aug 2007 19:33:15 -0000 1.34 @@ -953,44 +953,6 @@ /* functions to create interface*/ Etk_Widget* -create_play_dialog(void) -{ - Etk_Widget *dialog; - Etk_Widget *label; - Etk_Widget *vbox; - - //Dialog - dialog = etk_dialog_new(); - //etk_container_border_width_set (dialog,5); //TODO Can't exec this line(don't show the dialog). Etk bug? - etk_dialog_has_separator_set (ETK_DIALOG(dialog), ETK_FALSE); - etk_signal_connect("delete-event", ETK_OBJECT(dialog), ETK_CALLBACK(etk_window_hide_on_delete), NULL); - etk_signal_connect("response", ETK_OBJECT(dialog), ETK_CALLBACK(on_PlayDialog_response), NULL); - etk_widget_size_request_set(dialog, 400, 300); - - vbox = etk_vbox_new(ETK_FALSE, 10); - etk_dialog_pack_in_main_area(ETK_DIALOG(dialog), vbox, - ETK_BOX_START, ETK_BOX_EXPAND_FILL,0); - - label = etk_label_new("<b>Executing_edje_cc</>"); - etk_object_properties_set (ETK_OBJECT(label), "xalign",0.5,NULL); - etk_box_append(ETK_BOX(vbox), label, ETK_BOX_START, ETK_BOX_NONE, 0); - - //Text_view - UI_PlayTextView = etk_text_view_new (); - etk_box_append(ETK_BOX(vbox), UI_PlayTextView, ETK_BOX_START, ETK_BOX_EXPAND_FILL, 0); - //etk_textblock_object_cursor_visible_set (ETK_TEXT_VIEW(UI_PlayTextView)->textblock, ETK_FALSE); //TODO questa riga non funziona - - //etk_dialog_button_add_from_stock(ETK_DIALOG(dialog),ETK_STOCK_DOCUMENT_OPEN ,ETK_RESPONSE_OK ); - etk_dialog_button_add_from_stock(ETK_DIALOG(dialog),ETK_STOCK_DIALOG_CLOSE ,ETK_RESPONSE_CLOSE); - etk_dialog_button_add (ETK_DIALOG(dialog), "Test!", ETK_RESPONSE_OK); - - etk_widget_show_all(dialog); - etk_widget_hide(dialog); - - return dialog; -} - -Etk_Widget* create_filechooser_dialog(void) { Etk_Widget *dialog = NULL; @@ -2221,8 +2183,6 @@ etk_tooltips_enable(); UI_FileChooserDialog = create_filechooser_dialog(); - - UI_PlayDialog = create_play_dialog(); //Alert Dialog UI_AlertDialog = etk_message_dialog_new (ETK_MESSAGE_DIALOG_INFO, ETK_MESSAGE_DIALOG_OK, "Hallo world!"); =================================================================== RCS file: /cvs/e/e17/proto/edje_editor/src/bin/interface.h,v retrieving revision 1.16 retrieving revision 1.17 diff -u -3 -r1.16 -r1.17 --- interface.h 3 Aug 2007 19:53:29 -0000 1.16 +++ interface.h 11 Aug 2007 19:33:15 -0000 1.17 @@ -57,7 +57,6 @@ Etk_Widget *UI_BorderRightSpinner; Etk_Widget *UI_FileChooser; Etk_Widget *UI_FileChooserDialog; -Etk_Widget *UI_PlayDialog; Etk_Widget *UI_PlayTextView; Etk_Widget *UI_FilechooserFileNameEntry; Etk_Widget *UI_FilechooserFileNameLabel; =================================================================== RCS file: /cvs/e/e17/proto/edje_editor/src/bin/main.c,v retrieving revision 1.12 retrieving revision 1.13 diff -u -3 -r1.12 -r1.13 --- main.c 25 Jul 2007 17:01:02 -0000 1.12 +++ main.c 11 Aug 2007 19:33:15 -0000 1.13 @@ -1,18 +1,15 @@ #include "config.h" -#include <errno.h> -#include <unistd.h> -#include <stdlib.h> #include <string.h> #include <Edje.h> #include <Etk.h> #include <Engrave.h> +#include <Ecore_Str.h> #include "evas.h" #include "interface.h" +#include "inout.h" #include "main.h" -#define MAIN_EDC_NAME "edje_editor_link.edc" - Evas_Object *EdjeTest_bg; Evas_Object *EdjeTest_edje; @@ -37,7 +34,7 @@ */ /*EAPI*/ void PROTO_engrave_part_state_image_tween_remove_nth(Engrave_Part_State *eps, - int tween_num) + int tween_num) { Evas_List *l; @@ -176,7 +173,8 @@ engrave_group_parent_set(eg, NULL); } -void DebugInfo(int full) +void +DebugInfo(int full) { Engrave_Group *gro; Engrave_Part *par; @@ -240,254 +238,6 @@ printf(" *********************** E N D *****************************\n\n"); } - - - - -//Etk_Widget *LABEL; -Etk_Widget *UI_LoadTextView; -Etk_Widget *UI_LoadPBar; -Ecore_Timer *progress_bar_timer; - - -void -etk_textview_append(Etk_Widget *tv, char *str) -{ - Etk_Textblock_Iter *iter; - iter = etk_text_view_cursor_get (ETK_TEXT_VIEW(tv)); - etk_textblock_insert_markup(ETK_TEXT_VIEW(tv)->textblock, iter, - str, strlen(str)); -} - -int -exe_data(void *data, int ev_type, void *ev) -{ - Ecore_Exe_Event_Data *e; - e = (Ecore_Exe_Event_Data *)ev; - - if (e->lines) - { - int i; - for (i = 0; e->lines[i].line != NULL; i++) - { - //printf("++ %d %s\n", e->lines[i].size, e->lines[i].line); - etk_textview_append(UI_LoadTextView,e->lines[i].line); - etk_textview_append(UI_LoadTextView,"\n"); - } - //etk_textblock_object_yoffset_set(ETK_TEXT_VIEW(UI_LoadTextView)->textblock, -200 ); - } - - return 1; -} - -void -stop_bar(void) -{ - ecore_timer_del(progress_bar_timer); - etk_progress_bar_text_set (ETK_PROGRESS_BAR(UI_LoadPBar), "Done!"); - etk_progress_bar_fraction_set (ETK_PROGRESS_BAR(UI_LoadPBar), 1.0); -} - -int -exe_exit(void *data, int ev_type, void *ev) -{ - char buf[1024]; - Ecore_Exe_Event_Del *e = (Ecore_Exe_Event_Del *)ev; - - stop_bar(); - if (e->exit_code){ - snprintf(buf,1024,"<b>Error in edje_decc, exit code: </b> %d\n",e->exit_code); - etk_textview_append(UI_LoadTextView,buf); - return 1; - } - - etk_textview_append(UI_LoadTextView,"<b>Decompile complete.</b>\n"); - - - Cur.ef = engrave_load_edc(Cur.main_source_file, Cur.source_dir, Cur.source_dir); - - snprintf(buf,1024,"<b>Main source file:</b> %s\n",Cur.main_source_file); - etk_textview_append(UI_LoadTextView, buf); - - snprintf(buf,1024,"<b>Source dir:</b> %s\n",Cur.source_dir); - etk_textview_append(UI_LoadTextView, buf); - - snprintf(buf,1024,"<b>Image dir:</b> %s\n",engrave_file_image_dir_get(Cur.ef)); - etk_textview_append(UI_LoadTextView, buf); - - snprintf(buf,1024,"<b>Font dir:</b> %s\n",engrave_file_font_dir_get(Cur.ef)); - etk_textview_append(UI_LoadTextView, buf); - - - - //TODO Check engrave load success - etk_main_quit(); - return 0; -} - - -int Decompile(void *data) //data is the name of the file to open -{ - char buf[4096]; - char tmpn[4096]; - char cmd[4096]; - char *file = (char*)data; - char *old_fname; - char *ptr; - char *work_dir = NULL; - - - progress_bar_timer = - ecore_timer_add(0.025, etk_progress_bar_pulse, UI_LoadPBar); - - //TODO Check source integrity (is an edje file? - Cur.open_file_name = strdup(file); - - //Create working dir - memset(tmpn, '\0', sizeof(tmpn)); - strcpy(tmpn, "/tmp/edje_editor-tmp-XXXXXX"); -#if defined (__SVR4) && defined (__sun) - if (mkdir(tmpn, S_IRWXU | S_IRWXG) == NULL) { -#else - if (mkdtemp(tmpn) == NULL) { -#endif - snprintf(buf,4096,"<font color=#FF0000><b>Can't create working dir:</b> %s\n<b>Error:</b> %s</font>\n",tmpn,strerror(errno)); - etk_textview_append(UI_LoadTextView,buf); - stop_bar(); - return 0; - } - work_dir = strdup(tmpn); - - //Change to the working dir - snprintf(buf,4096,"<b>Change to working dir:</b> %s\n",work_dir); - etk_textview_append(UI_LoadTextView,buf); - getcwd(tmpn, sizeof(tmpn)); - if (chdir(work_dir) == -1) { - snprintf(buf,4096,"<font color=#FF0000><b>Can't change to dir:</b> %s\n<b>Error: </b> %s</font>\n",work_dir,strerror(errno)); - etk_textview_append(UI_LoadTextView, buf); - stop_bar(); - return 0; - } - - //Calculate Cur.source_dir, image_dir, font_dir, main_source_file - old_fname = strdup(file); - ptr = strstr(old_fname, ".edj"); - *ptr = '\0'; - ptr = strrchr(old_fname, '/'); - if (ptr == NULL) ptr = old_fname; - snprintf(buf,4096,"%s%s",work_dir,ptr); - Cur.source_dir = strdup(buf); - snprintf(buf,4096,"%s/"MAIN_EDC_NAME,Cur.source_dir); - 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(buf,4096,"<b>Executing: </b>%s\n",cmd); - etk_textview_append(UI_LoadTextView, buf); - - Ecore_Exe* exe; - Ecore_Event_Handler *handler1 = NULL; - Ecore_Event_Handler *handler2 = NULL; - handler1 = ecore_event_handler_add(ECORE_EXE_EVENT_DATA, exe_data, NULL); - handler2 = ecore_event_handler_add(ECORE_EXE_EVENT_DEL, exe_exit, NULL); - exe = ecore_exe_pipe_run(cmd,ECORE_EXE_PIPE_READ | ECORE_EXE_PIPE_READ_LINE_BUFFERED,"test"); - - /* if (!(pipe = popen(cmd, "r"))){ - etk_textview_append(UI_LoadTextView,"<font color=#FF0000>Error executing edje_decc</font>\n"); - return 0; - } - while (fgets(pbuf, 4096, pipe) != NULL){ - etk_textview_append(UI_LoadTextView, pbuf); - } - pclose(pipe); - */ - - /* we need the info on the work dir to pass the cpp so it can - * include files correctly - */ -/* ptr = strstr(old_fname, ".edj"); - *ptr = '\0'; - - ptr = strrchr(old_fname, '/'); - if (ptr == NULL) - ptr = old_fname; - - - len = strlen(ptr) + strlen(work_dir) + 2; - out_dir = (char *)calloc(len, sizeof(char)); - snprintf(out_dir, len, "%s/%s", work_dir, ptr); - etk_textview_append(UI_LoadTextView, "<b>Out dir:</b> "); - etk_textview_append(UI_LoadTextView, out_dir); - etk_textview_append(UI_LoadTextView, "\n"); - - len = strlen(out_dir) + strlen(MAIN_EDC_NAME) + 2; - new_fname = (char *)calloc(len, sizeof(char)); - snprintf(new_fname, len, "%s/%s", out_dir, MAIN_EDC_NAME); - //FREE(old_fname); - etk_textview_append(UI_LoadTextView, "<b>Main edc:</b> "); - etk_textview_append(UI_LoadTextView, new_fname); - etk_textview_append(UI_LoadTextView, "\n"); - - - Cur.ef = engrave_load_edc(new_fname, out_dir, out_dir); - - */ - //ecore_timer_add(0,cb,NULL); - return 0; -} -void -LoadEDJ(char *file) -{ - Etk_Widget *win; - Etk_Widget *vbox; - Etk_Widget *scrolled_view; - Etk_Widget *button; - Etk_Widget *label; - - - //Load Win - win = etk_window_new(); - etk_widget_size_request_set(win, 400, 300); - etk_window_title_set(ETK_WINDOW(win), "Loading..."); - etk_signal_connect("destroyed", ETK_OBJECT(win), ETK_CALLBACK(etk_main_quit), NULL); - // etk_signal_connect("show", ETK_OBJECT(win), ETK_CALLBACK(on_LoadWin_realize), NULL); - - vbox = etk_vbox_new(ETK_FALSE, 0); - etk_container_add(ETK_CONTAINER(win), vbox); - - label = etk_label_new("<font_size=20><b>Loading</b></>"); - etk_object_properties_set (ETK_OBJECT(label), "xalign",0.5,NULL); - etk_box_append(ETK_BOX(vbox), label, ETK_BOX_START, ETK_BOX_NONE, 5); - - UI_LoadPBar = etk_progress_bar_new_with_text("Loading..."); - etk_progress_bar_pulse_step_set(ETK_PROGRESS_BAR(UI_LoadPBar), 0.03); - - etk_box_append(ETK_BOX(vbox), UI_LoadPBar, ETK_BOX_START, ETK_BOX_NONE, 5); - - //Text_view - UI_LoadTextView = etk_text_view_new (); - //etk_textblock_object_cursor_visible_set(ETK_TEXT_VIEW(UI_LoadTextView)->textblock, ETK_FALSE); //TODO questa riga non funziona - scrolled_view = etk_scrolled_view_new(); - etk_scrolled_view_policy_set(ETK_SCROLLED_VIEW(scrolled_view), ETK_POLICY_HIDE, ETK_POLICY_SHOW); - etk_bin_child_set( ETK_BIN(scrolled_view), UI_LoadTextView); - etk_box_append(ETK_BOX(vbox), scrolled_view, ETK_BOX_START, ETK_BOX_EXPAND_FILL, 5); - - //buttons - button = etk_button_new_from_stock(ETK_STOCK_DIALOG_CLOSE); - etk_box_append(ETK_BOX(vbox), button, ETK_BOX_START, ETK_BOX_NONE, 5); - etk_signal_connect("clicked", ETK_OBJECT(button), ETK_CALLBACK(etk_main_quit), NULL); - - - etk_widget_show_all(win); - - ecore_timer_add(0.1,Decompile,file); - printf("MAIN\n"); - //etk_progress_bar_pulse(ETK_PROGRESS_BAR(UI_LoadPBar)); - etk_main(); - etk_widget_hide(win); -} - - void TestEdjeGroup(char *File,char *Group) { @@ -624,10 +374,9 @@ printf("File not exists: '%s'\n",argv[1]); return 1; } - if (strstr(file, ".edj")) - //Cur.ef = engrave_load_edj(file); + if (ecore_str_has_suffix(file, ".edj")) LoadEDJ(file); - if (strstr(file, ".edc")) + else if (ecore_str_has_suffix(file, ".edc")) { char *edc_dir = ecore_file_dir_get(file); if (argc == 2) @@ -643,9 +392,7 @@ if (!Cur.ef) Cur.ef = engrave_file_new(); - engrave_canvas_file_set (engrave_canvas, Cur.ef); - //Populate Interface PopulateTree(); =================================================================== RCS file: /cvs/e/e17/proto/edje_editor/src/bin/main.h,v retrieving revision 1.11 retrieving revision 1.12 diff -u -3 -r1.11 -r1.12 --- main.h 15 Jul 2007 05:01:04 -0000 1.11 +++ main.h 11 Aug 2007 19:33:15 -0000 1.12 @@ -88,7 +88,9 @@ IMAGE_TWEEN_DELETE, IMAGE_TWEEN_RADIO, IMAGE_NORMAL_RADIO, - SAVE_SCRIPT + SAVE_SCRIPT, + LOAD_WIN, + SAVE_WIN }; struct Current_State ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs