Enlightenment CVS committal

Author  : werkt
Project : misc
Module  : ewler

Dir     : misc/ewler/src


Modified Files:
        Makefile.am ewler.c ewler.h form.c form.h main.c project.c 
        project.h 


Log Message:
Project management.

===================================================================
RCS file: /cvsroot/enlightenment/misc/ewler/src/Makefile.am,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- Makefile.am 25 Jul 2004 01:01:49 -0000      1.4
+++ Makefile.am 10 Aug 2004 21:45:34 -0000      1.5
@@ -12,9 +12,9 @@
        form_file.c form_file.h \
        inspector.c inspector.h \
        main.c \
-       project.c project.h \
        selected.c selected.h \
        widgets.c widgets.h \
+       project.c project.h \
        layout.c
 
 ewler_LDADD = @ewl_libs@ @xml2_libs@
===================================================================
RCS file: /cvsroot/enlightenment/misc/ewler/src/ewler.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -3 -r1.5 -r1.6
--- ewler.c     27 Jul 2004 13:51:05 -0000      1.5
+++ ewler.c     10 Aug 2004 21:45:34 -0000      1.6
@@ -14,7 +14,7 @@
 extern void
 __destroy_main_window( Ewl_Widget *w, void *ev_data, void *user_data );
 
-static void
+void
 __destroy_dialog( Ewl_Widget *w, void *ev_data, void *user_data )
 {
        Ewl_Widget *dialog = user_data;
@@ -31,13 +31,18 @@
 static void
 __create_new_project( Ewl_Widget *w, void *ev_data, void *user_data )
 {
-       project_new_dialog();
+       project_new();
 }
 
 static void
 __open_project( Ewl_Widget *w, void *ev_data, void *user_data )
 {
-       project_open_dialog();
+}
+
+static void
+__project_options( Ewl_Widget *w, void *ev_data, void *user_data )
+{
+       project_options_dialog();
 }
 
 static void
@@ -86,6 +91,12 @@
                inspector_show();
 }
 
+static void
+__toggle_projects( Ewl_Widget *w, void *ev_data, void *user_data )
+{
+       projects_toggle();
+}
+
 void
 ewler_open_file( char *filename )
 {
@@ -144,6 +155,12 @@
                                                                                       
  __open_project, NULL );
        ewl_widget_show( menu_item );
 
+       menu_item = ewl_menu_item_new( NULL, "Project Options..." );
+       ewl_container_append_child( EWL_CONTAINER(menu), menu_item );
+       ewl_callback_append( menu_item, EWL_CALLBACK_SELECT,
+                                                                                      
  __project_options, NULL );
+       ewl_widget_show( menu_item );
+
        menu_item = EWL_WIDGET(ewl_menu_separator_new());
        ewl_object_set_fill_policy( EWL_OBJECT(menu_item), EWL_FLAG_FILL_HFILL );
        ewl_container_append_child( EWL_CONTAINER(menu), menu_item );
@@ -182,6 +199,12 @@
        ewl_callback_append( menu_item, EWL_CALLBACK_SELECT,
                                                                                       
  __toggle_inspector, NULL );
        ewl_widget_show( menu_item );
+
+       menu_item = ewl_menu_item_new( NULL, "Project Overview" );
+       ewl_container_append_child( EWL_CONTAINER(menu), menu_item );
+       ewl_callback_append( menu_item, EWL_CALLBACK_SELECT,
+                                                                                      
  __toggle_projects, NULL );
+       ewl_widget_show( menu_item );
 }
 
 char *
@@ -287,3 +310,43 @@
        ewl_widget_show( dialog );
 }
 
+void
+ewler_yesno_dialog( Ewl_Callback_Function yes_cb, Ewl_Callback_Function no_cb,
+                                                                               void 
*user_data, const char *fmt, ... )
+{
+       Ewl_Widget *dialog, *text, *button;
+       static char buf[1024];
+       va_list ap;
+
+       dialog = ewl_dialog_new(EWL_POSITION_BOTTOM);
+       ewl_window_set_title( EWL_WINDOW(dialog), "ewler" );
+       ewl_callback_append( dialog, EWL_CALLBACK_DELETE_WINDOW,
+                                                                                      
  __destroy_dialog, dialog );
+       if( no_cb )
+               ewl_callback_append( dialog, EWL_CALLBACK_DELETE_WINDOW, no_cb, 
user_data );
+
+       va_start( ap, fmt );
+       vsnprintf( buf, 1023, fmt, ap );
+       va_end( ap );
+
+       text = ewl_text_new( buf );
+       ewl_object_set_padding( EWL_OBJECT(text), 5, 5, 5, 5 );
+       ewl_container_prepend_child( EWL_CONTAINER(EWL_DIALOG(dialog)->vbox), text );
+       ewl_widget_show( text );
+
+       button = ewl_dialog_add_button( EWL_DIALOG(dialog),
+                                                                                      
                                                 EWL_STOCK_OK, EWL_RESPONSE_OK );
+       ewl_callback_append( button, EWL_CALLBACK_CLICKED,
+                                                                                      
  __destroy_dialog, dialog );
+       if( yes_cb )
+               ewl_callback_append( button, EWL_CALLBACK_CLICKED, yes_cb, user_data );
+
+       button = ewl_dialog_add_button( EWL_DIALOG(dialog),
+                                                                                      
                                                 EWL_STOCK_CANCEL, EWL_RESPONSE_CANCEL 
);
+       ewl_callback_append( button, EWL_CALLBACK_CLICKED,
+                                                                                      
  __destroy_dialog, dialog );
+       if( no_cb )
+               ewl_callback_append( button, EWL_CALLBACK_CLICKED, no_cb, user_data );
+
+       ewl_widget_show( dialog );
+}
===================================================================
RCS file: /cvsroot/enlightenment/misc/ewler/src/ewler.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- ewler.h     8 Jun 2004 18:30:05 -0000       1.1
+++ ewler.h     10 Aug 2004 21:45:34 -0000      1.2
@@ -10,9 +10,15 @@
 void ewler_tools_init( Ewl_Widget *main_layout );
 void ewler_populate_tools( void );
 void ewler_error_dialog( const char *fmt, ... );
+void ewler_yesno_dialog( Ewl_Callback_Function yes_cb,
+                                                                                      
          Ewl_Callback_Function no_cb,
+                                                                                      
          void *user_data,
+                                                                                      
          const char *fmt, ... );
 void ewler_open_file( char *filename );
 
 char *tool_get_name( void );
 void tool_clear_name( void );
 
+void __destroy_dialog( Ewl_Widget *w, void *ev_data, void *user_data );
+
 #endif
===================================================================
RCS file: /cvsroot/enlightenment/misc/ewler/src/form.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -3 -r1.11 -r1.12
--- form.c      9 Aug 2004 09:03:14 -0000       1.11
+++ form.c      10 Aug 2004 21:45:34 -0000      1.12
@@ -9,10 +9,10 @@
 #include "widgets.h"
 #include "form.h"
 #include "form_file.h"
-#include "project.h"
 #include "inspector.h"
 #include "selected.h"
 #include "layout.h"
+#include "project.h"
 
 Ecore_List *forms;
 static int widget_selected = 0;
@@ -56,6 +56,9 @@
                /* manufacture save/ok/cancel dialog */
        }
 
+       if( !form->has_been_saved )
+               project_remove_file( form->filename );
+
        FREE( form->filename );
        ecore_list_destroy( form->selected );
        ecore_hash_set_free_value( form->elements, __free_elements_cb );
@@ -414,7 +417,7 @@
        form = ALLOC(Ewler_Form);
        form->filename = strdup( buf );
 
-       project_add_form( form->filename );
+       project_add_file( form->filename );
 
        form->window = ewl_window_new();
        ewl_window_set_title( EWL_WINDOW(form->window), form->filename );
@@ -450,13 +453,6 @@
        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 =
@@ -478,16 +474,20 @@
        FILE *fptr;
        char *filename = ev_data;
        Ewler_Form *form = user_data;
+       char *title;
 
        if( filename ) {
                if( (fptr = fopen( filename, "w" )) ) {
                        fclose( fptr );
 
+                       if( (title = project_set_file( form->filename, filename )) == 
NULL )
+                               return;
+
                        FREE(form->filename);
                        form->filename = strdup( filename );
 
                        form->has_been_saved = 1;
-                       ewl_window_set_title( EWL_WINDOW(form->window), form->filename 
);
+                       ewl_window_set_title( EWL_WINDOW(form->window), title );
                        form_save_file( form, 0 );
                        ewl_widget_destroy( w->parent );
                } else
@@ -500,6 +500,8 @@
 void
 form_save_file( Ewler_Form *form, int save_as )
 {
+       char *path;
+
        if( !form )
                form = inspector_get_form();
 
@@ -511,6 +513,10 @@
                        ewl_widget_show( window );
 
                        dialog = ewl_filedialog_new( EWL_FILEDIALOG_TYPE_SAVE );
+
+                       if( (path = project_get_path()) )
+                               ewl_filedialog_set_directory( EWL_FILEDIALOG(dialog), 
path );
+
                        ewl_container_append_child( EWL_CONTAINER(window), dialog );
                        ewl_callback_append( dialog, EWL_CALLBACK_VALUE_CHANGED,
                                                                                       
                  __save_form_cb, form );
@@ -656,6 +662,9 @@
                        if( form->dirty )
                                fprintf( stderr, "closing a dirty form\n" );
 
+                       if( !form->has_been_saved )
+                               project_remove_file( form->filename );
+
                        FREE( form->filename );
                        ewl_widget_destroy( form->window );
                        FREE( form );
@@ -665,6 +674,20 @@
        }
 }
 
+int
+form_is_open( char *filename )
+{
+       Ewler_Form *form;
+
+       ecore_list_goto_first( forms );
+
+       while( (form = ecore_list_next(forms)) )
+               if( !strcmp( form->filename, filename ) )
+                       return 1;
+
+       return 0;
+}
+
 void
 __form_delete( Ewler_Form *form )
 {
===================================================================
RCS file: /cvsroot/enlightenment/misc/ewler/src/form.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- form.h      27 Jul 2004 13:51:05 -0000      1.4
+++ form.h      10 Aug 2004 21:45:34 -0000      1.5
@@ -33,5 +33,6 @@
 
 void form_save_file( Ewler_Form *form, int save_as );
 void form_open_file( char *filename );
+int form_is_open( char *filename );
 
 #endif
===================================================================
RCS file: /cvsroot/enlightenment/misc/ewler/src/main.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- main.c      27 Jul 2004 13:51:05 -0000      1.3
+++ main.c      10 Aug 2004 21:45:34 -0000      1.4
@@ -4,6 +4,7 @@
 #include "form.h"
 #include "widgets.h"
 #include "inspector.h"
+#include "project.h"
 
 static Ewl_Widget *main_win;
 static Ewl_Widget *main_layout;
@@ -30,9 +31,6 @@
                                                                                       
  __destroy_main_window, NULL );
        ewl_object_set_fill_policy( EWL_OBJECT(main_win), EWL_FLAG_FILL_SHRINK );
        ewl_object_set_minimum_size( EWL_OBJECT(main_win), 300, 400 );
-#if 0
-       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 );
 
@@ -46,6 +44,8 @@
        ewler_forms_init();
        ewler_inspector_init();
 
+       ewler_projects_init();
+
        ewl_main();
 
        return 0;
===================================================================
RCS file: /cvsroot/enlightenment/misc/ewler/src/project.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- project.c   25 Jul 2004 01:01:49 -0000      1.2
+++ project.c   10 Aug 2004 21:45:34 -0000      1.3
@@ -1,232 +1,323 @@
 #include <Ewl.h>
+#include <sys/time.h>
+#include <time.h>
 
+#include "form.h"
 #include "ewler.h"
 #include "project.h"
 
 static Ewl_Widget *project_win;
-static Ewl_Widget *new_project_win;
-
-static int project_dirty = 0;
-static Ecore_Sheap *project_files;
-static char *project_filename;
 static Ewl_Widget *project_tree;
-static int project_open = 0;
 
-static void create_new_project( const char *filename );
+static Ewler_Project *project;
+
+static Ewl_Widget *options_dialog;
+static Ewl_Widget *params[3];
 
 static void
-__destroy_window( Ewl_Widget *w, void *ev_data, void *user_data )
+__projects_destroy_cb( Ewl_Widget *w, void *ev_data, void *user_data )
 {
-       if( user_data )
-               ewl_widget_destroy( EWL_WIDGET(user_data) );
-       else
-               ewl_widget_destroy( w );
+       projects_toggle();
 }
 
 static void
-__ok_new_project( Ewl_Widget *w, void *ev_data, void *user_data )
+__project_new_cb( Ewl_Widget *w, void *ev_data, void *user_data )
 {
-       FILE *fptr;
-       char *filename = ewl_entry_get_text( EWL_ENTRY(user_data) );
+       char *headers[2] = { NULL, NULL };
 
-       if( (fptr = fopen( filename, "r" )) ) {
-               fclose( fptr );
-               ewler_error_dialog( "File already exists" );
-       } else {
-               create_new_project( filename );
-
-               ewl_widget_destroy( new_project_win );
+       IF_FREE(project->name);
+       IF_FREE(project->filename);
+       IF_FREE(project->path);
+       
+       if( project->members ) {
+               ecore_list_set_free_cb( project->members, free );
+               ecore_list_destroy( project->members );
        }
+
+       project->name = strdup( "Untitled" );
+       project->filename = NULL;
+       project->path = NULL;
+       project->members = ecore_list_new();
+       ecore_list_set_free_cb( project->members, free );
+
+       project->dirty = 0;
+       project->filename_set = 0;
+
+       headers[0] = project->name;
+
+       ewl_container_reset( EWL_CONTAINER(project_tree) );
+       ewl_tree_set_headers( EWL_TREE(project_tree), headers );
 }
 
 static void
-create_new_project( const char *filename )
+__project_member_mouse_down( Ewl_Widget *w, void *ev_data, void *user_data )
 {
-       FILE *fptr;
-       char *headers[] = { NULL };
+       Ewl_Widget *text, *cell;
+       char *filename;
+       Ewl_Event_Mouse_Down *ev = ev_data;
+       static struct timeval last = { 0, 0 };
+       struct timeval now;
+       int msec_diff;
+
+       gettimeofday( &now, NULL );
+
+       cell = ewl_row_get_column( EWL_ROW(w), 0 );
+
+       text = ecore_list_goto_first( EWL_CONTAINER(cell)->children );
+
+       filename = ewl_text_text_get( EWL_TEXT(text) );
+
+       if( ev->button == 1 ) {
+               msec_diff = (now.tv_sec - last.tv_sec) * 1000 +
+                                                               (now.tv_usec - 
last.tv_usec) / 1000;
+
+               if( msec_diff < 250 ) {
+                       static char buf[1024];
+
+                       if( *filename == '/' ) {
+                               if( !form_is_open( filename ) )
+                                       form_open_file( filename );
+                       } else {
+                               sprintf( buf, "%s/%s", project->path, filename );
+                               if( !form_is_open( buf ) )
+                                       form_open_file( buf );
+                       }
+               }
 
-       fptr = fopen( filename, "w" );
-       fclose( fptr );
+               last = now;
+       }
+}
+
+void
+projects_toggle( void )
+{
+       if( VISIBLE(project_win) )
+               ewl_widget_hide( project_win );
+       else
+               ewl_widget_show( project_win );
+}
 
-       project_files = ecore_sheap_new( ecore_str_compare, 17 );
-       project_filename = strdup( filename );
+void
+ewler_projects_init( void )
+{
        project_win = ewl_window_new();
+
        ewl_window_set_title( EWL_WINDOW(project_win), "Project Overview" );
-       /* add hide_project_win */
-       ewl_object_set_minimum_size( EWL_OBJECT(project_win), 200, 400 );
-       ewl_widget_show( project_win );
+       ewl_object_set_minimum_size( EWL_OBJECT(project_win), 300, 200 );
+       ewl_object_set_insets( EWL_OBJECT(project_tree), 5, 5, 5, 5 );
 
-       project_tree = ewl_tree_new( 1 );
+       ewl_callback_append( project_win, EWL_CALLBACK_DELETE_WINDOW,
+                                                                                      
  __projects_destroy_cb, NULL );
 
-       headers[0] = project_filename;
+       project = NEW(Ewler_Project, 1);
 
-       ewl_tree_set_headers( EWL_TREE(project_tree), headers );
+       project_tree = ewl_tree_new( 1 );
        ewl_container_append_child( EWL_CONTAINER(project_win), project_tree );
-       ewl_widget_show( project_tree );
 
-       project_open = 1;
-}
+       __project_new_cb( NULL, NULL, NULL );
 
-static void
-__open_file_from_project( Ewl_Widget *e, void *ev_data, void *user_data )
-{
-       ewler_open_file( (char *) user_data );
+       ewl_widget_show( project_tree );
 }
 
 static void
-project_rebuild_tree( void )
+project_update( void )
 {
-       if( project_tree ) {
-               int i;
-               char *filename;
+       char *headers[2] = { NULL, NULL };
+       Ecore_Sheap *sorted_list;
+       char *filename;
+       int i;
+
+       headers[0] = project->name;
+
+       ewl_container_reset( EWL_CONTAINER(project_tree) );
+       ewl_tree_set_headers( EWL_TREE(project_tree), headers );
+
+       sorted_list = ecore_sheap_new( ecore_str_compare,
+                                                                                      
                                          ecore_list_nodes( project->members ) );
 
-               ewl_container_reset( EWL_CONTAINER(project_tree) );
+       ecore_list_goto_first( project->members );
 
-               for( i = 0; (filename = ecore_sheap_item( project_files, i )); i++ ) {
-                       Ewl_Widget *row;
+       while( (filename = ecore_list_next( project->members )) )
+               ecore_sheap_insert( sorted_list, filename );
 
-                       row = ewl_tree_add_text_row( EWL_TREE(project_tree), NULL, 
&filename );
-                       ewl_callback_del_type( row->parent, EWL_CALLBACK_CLICKED );
-                       ewl_callback_append( row, EWL_CALLBACK_CLICKED,
-                                                                                      
                  __open_file_from_project, filename );
+       ecore_sheap_sort( sorted_list );
+
+       for( i=0;i<sorted_list->size;i++ ) {
+               Ewl_Widget *text, *row;
+
+               filename = ecore_sheap_item( sorted_list, i );
+
+               if( filename ) {
+                       text = ewl_text_new( filename );
+                       ewl_widget_show( text );
+
+                       row = ewl_tree_add_row( EWL_TREE(project_tree), NULL, &text );
+                       ewl_callback_append( row, EWL_CALLBACK_MOUSE_DOWN,
+                                                                                      
                  __project_member_mouse_down, NULL );
                        ewl_widget_show( row );
                }
        }
+
+       ecore_sheap_destroy( sorted_list );
 }
 
 void
-project_new_dialog( void )
+project_new( void )
 {
-       Ewl_Widget *entry_layout;
-       Ewl_Widget *label, *entry, *button;
-
-       new_project_win = ewl_dialog_new(EWL_POSITION_BOTTOM);
-       ewl_window_set_title( EWL_WINDOW(new_project_win), "New Project" );
-       ewl_callback_append( new_project_win, EWL_CALLBACK_DELETE_WINDOW,
-                                                                                      
  __destroy_window, NULL );
-
-       entry_layout = ewl_hbox_new();
-       ewl_container_prepend_child( EWL_CONTAINER(EWL_DIALOG(new_project_win)->vbox),
-                                                                                      
                                  entry_layout );
-       ewl_object_set_insets( EWL_OBJECT(entry_layout), 20, 20, 10, 10 );
-       ewl_widget_show( entry_layout );
-
-       label = ewl_text_new( "Project File" );
-       ewl_container_append_child( EWL_CONTAINER(entry_layout), label );
-       ewl_object_set_alignment( EWL_OBJECT(label), EWL_FLAG_ALIGN_BOTTOM );
-       ewl_object_set_padding( EWL_OBJECT(label), 0, 0, 0, 3 );
-       ewl_widget_show( label );
-
-       entry = ewl_entry_new( "unnamed.pro" );
-       ewl_container_append_child( EWL_CONTAINER(entry_layout), entry );
-       ewl_object_set_alignment( EWL_OBJECT(entry), EWL_FLAG_ALIGN_BOTTOM );
-       ewl_callback_append( entry, EWL_CALLBACK_VALUE_CHANGED,
-                                                                                      
  __ok_new_project, entry );
-       ewl_widget_show( entry );
-
-       button = ewl_dialog_add_button( EWL_DIALOG(new_project_win),
-                                                                                      
                                                 EWL_STOCK_OK, EWL_RESPONSE_OK );
-       ewl_callback_append( button, EWL_CALLBACK_CLICKED, __ok_new_project, entry );
+       ewler_yesno_dialog( __project_new_cb, NULL, NULL,
+                                                                                      
 "This will destroy your current project, are you sure?" );
+}
 
-  button = ewl_dialog_add_button( EWL_DIALOG(new_project_win),
-                                                                                      
                                                 EWL_STOCK_CANCEL, 
EWL_RESPONSE_CANCEL);
-       ewl_callback_append( button, EWL_CALLBACK_CLICKED,
-                                                                                      
  __destroy_window, new_project_win );
+void
+project_add_file( char *filename )
+{
+       ecore_list_append( project->members, strdup(filename) );
 
-       ewl_widget_show( new_project_win );
+       project_update();
 }
 
-static void
-open_project( char *filename )
+char *
+project_set_file( char *old, char *filename )
 {
-       FILE *fptr;
-       char *headers[] = { NULL };
-       static char type[64], prj_file[256];
+       char *old_name = NULL;
 
-       if( (fptr = fopen( filename, "r" )) == NULL ) {
-               ewler_error_dialog( "File '%s' cannot be opened.", filename );
-               return;
+       if( project->path )
+               if( !strncmp( project->path, filename, strlen( project->path ) ) ) {
+                       filename += strlen( project->path );
+                       if( filename[0] == '/' )
+                               filename++;
+               }
+
+       ecore_list_goto_first( project->members );
+
+       while( (old_name = ecore_list_current( project->members )) ) {
+               if( !strcmp( old, old_name ) )
+                       break;
+               ecore_list_next( project->members );
        }
 
-       /* make sure that the current project is closed */
+       ecore_list_remove_destroy( project->members );
 
-       project_files = ecore_sheap_new( ecore_str_compare, 17 );
-       project_tree = ewl_tree_new( 1 );
+       ecore_list_append( project->members, strdup( filename ) );
 
-       while( !feof( fptr ) ) {
-               fscanf( fptr, "%s %s\n", type, prj_file );
-               if( !strcmp( type, "form" ) )
-                       project_add_form( strdup( prj_file ) );
-       }
+       project_update();
 
-       fclose( fptr );
+       return filename;
+}
 
-       project_filename = strdup( filename );
-       project_win = ewl_window_new();
-       ewl_window_set_title( EWL_WINDOW(project_win), "Project Overview" );
-       /* add hide_project_win */
-       ewl_object_set_minimum_size( EWL_OBJECT(project_win), 200, 400 );
-       ewl_widget_show( project_win );
+void
+project_remove_file( char *filename )
+{
+       char *old_name = NULL;
+       
+       if( project->path )
+               if( !strncmp( project->path, filename, strlen( project->path ) ) ) {
+                       filename += strlen( project->path );
+                       while( *filename == '/' )
+                               filename++;
+               }
 
-       headers[0] = project_filename;
+       ecore_list_goto_first( project->members );
 
-       ewl_tree_set_headers( EWL_TREE(project_tree), headers );
-       ewl_container_append_child( EWL_CONTAINER(project_win), project_tree );
-       ewl_widget_show( project_tree );
+       while( (old_name = ecore_list_current( project->members )) ) {
+               if( !strcmp( filename, old_name ) )
+                       break;
+               ecore_list_next( project->members );
+       }
 
-       project_dirty = 0;
+       ecore_list_remove_destroy( project->members );
+
+       project_update();
+}
+
+char *
+project_get_path( void )
+{
+       return project->path;
 }
 
 static void
-__open_project_cb( Ewl_Widget *w, void *ev_data, void *user_data )
+__apply_changes( Ewl_Widget *w, void *ev_data, void *user_data )
 {
-       FILE *fptr;
-       char *filename = ev_data;
+       IF_FREE(project->name);
+       IF_FREE(project->filename);
+       IF_FREE(project->path);
+
+       project->name = ewl_entry_get_text( EWL_ENTRY(params[0]) );
+       project->path = ewl_entry_get_text( EWL_ENTRY(params[1]) );
+       if( strlen( project->path ) == 0 )
+               project->path = NULL;
+       project->filename = ewl_entry_get_text( EWL_ENTRY(params[2]) );
+       if( strlen( project->filename ) == 0 )
+               project->filename = NULL;
 
-       if( filename ) {
-               /* ok clicked */
-               if( (fptr = fopen( filename, "r" )) ) {
-                       fclose( fptr );
-                       open_project( filename );
-
-                       ewl_widget_destroy( w );
-               } else {
-                       ewler_error_dialog( "File '%s' cannot be opened.", filename );
-               }
-       } else {
-               /* cancelled */
-               ewl_widget_destroy( w );
-       }
+       project->filename_set = 1;
+
+       project_update();
 }
 
 void
-project_open_dialog( void )
+project_options_dialog( void )
 {
-       Ewl_Widget *window, *dialog;
+       Ewl_Widget *label;
+       Ewl_Widget *vbox, *hbox;
+       Ewl_Widget *button;
 
-       window = ewl_window_new();
-       ewl_widget_show( window );
+       if( options_dialog && VISIBLE(options_dialog) )
+               return;
 
-       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( window, EWL_CALLBACK_DELETE_WINDOW,
-                                                                                      
  __destroy_window, NULL );
-       ewl_widget_show( dialog );
-}
+       options_dialog = ewl_dialog_new(EWL_POSITION_BOTTOM);
+       ewl_object_set_minimum_w( EWL_OBJECT(options_dialog), 400 );
+       ewl_window_set_title( EWL_WINDOW(options_dialog), "Project Options" );
+       ewl_callback_append( options_dialog, EWL_CALLBACK_DELETE_WINDOW,
+                                                                                      
  __destroy_dialog, options_dialog );
+
+       vbox = ewl_vbox_new();
+       ewl_container_prepend_child( EWL_CONTAINER(EWL_DIALOG(options_dialog)->vbox),
+                                                                                      
                                  vbox );
+       ewl_widget_show( vbox );
+
+       hbox = ewl_hbox_new();
+       ewl_container_append_child( EWL_CONTAINER(vbox), hbox );
+       ewl_widget_show( hbox );
+       label = ewl_text_new( "Project Name:" );
+       params[0] = ewl_entry_new( project->name ? project->name : "" );
+       ewl_container_append_child( EWL_CONTAINER(hbox), label );
+       ewl_container_append_child( EWL_CONTAINER(hbox), params[0] );
+       ewl_widget_show( label );
+       ewl_widget_show( params[0] );
 
-int
-project_add_form( char *filename )
-{
-       if( project_files ) {
-               ecore_sheap_insert( project_files, filename );
-               ecore_sheap_sort( project_files );
+       hbox = ewl_hbox_new();
+       ewl_container_append_child( EWL_CONTAINER(vbox), hbox );
+       ewl_widget_show( hbox );
+       label = ewl_text_new( "Project Directory:" );
+       params[1] = ewl_entry_new( project->path ? project->path : "" );
+       ewl_container_append_child( EWL_CONTAINER(hbox), label );
+       ewl_container_append_child( EWL_CONTAINER(hbox), params[1] );
+       ewl_widget_show( label );
+       ewl_widget_show( params[1] );
 
-               project_rebuild_tree();
-               project_dirty = 1;
-               return 0;
-       }
+       hbox = ewl_hbox_new();
+       ewl_container_append_child( EWL_CONTAINER(vbox), hbox );
+       ewl_widget_show( hbox );
+       label = ewl_text_new( "Project File:" );
+       params[2] = ewl_entry_new( project->filename ? project->filename : "" );
+       ewl_container_append_child( EWL_CONTAINER(hbox), label );
+       ewl_container_append_child( EWL_CONTAINER(hbox), params[2] );
+       ewl_widget_show( label );
+       ewl_widget_show( params[2] );
+
+       button = ewl_dialog_add_button( EWL_DIALOG(options_dialog),
+                                                                                      
                                                 EWL_STOCK_OK, EWL_RESPONSE_OK );
+       ewl_callback_append( button, EWL_CALLBACK_CLICKED,
+                                                                                      
  __apply_changes, NULL );
+       ewl_callback_append( button, EWL_CALLBACK_CLICKED,
+                                                                                      
  __destroy_dialog, options_dialog );
+
+       button = ewl_dialog_add_button( EWL_DIALOG(options_dialog),
+                                                                                      
                                                 EWL_STOCK_CANCEL, EWL_RESPONSE_CANCEL 
);
+       ewl_callback_append( button, EWL_CALLBACK_CLICKED,
+                                                                                      
  __destroy_dialog, options_dialog );
 
-       return -1;
+       ewl_widget_show( options_dialog );
 }
===================================================================
RCS file: /cvsroot/enlightenment/misc/ewler/src/project.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- project.h   8 Jun 2004 18:30:05 -0000       1.1
+++ project.h   10 Aug 2004 21:45:34 -0000      1.2
@@ -1,8 +1,25 @@
 #ifndef PROJECT_H
 #define PROJECT_H
 
-void project_new_dialog( void );
-int project_add_form( char *filename );
-void project_open_dialog( void );
+typedef struct Ewler_Project Ewler_Project;
+
+struct Ewler_Project {
+       char *name;
+       char *filename; /* filename of the project description */
+       char *path; /* project dir */
+       Ecore_List *members;
+       
+       int dirty : 1;
+       int filename_set : 1;
+};
+
+void projects_toggle( void );
+void ewler_projects_init( void );
+void project_new( void );
+void project_add_file( char *filename );
+char *project_set_file( char *old, char *filename );
+void project_remove_file( char *filename );
+char *project_get_path( void );
+void project_options_dialog( void );
 
 #endif




-------------------------------------------------------
SF.Net email is sponsored by Shop4tech.com-Lowest price on Blank Media
100pk Sonic DVD-R 4x for only $29 -100pk Sonic DVD+R for only $33
Save 50% off Retail on Ink & Toner - Free Shipping and Free Gift.
http://www.shop4tech.com/z/Inkjet_Cartridges/9_108_r285
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to