Enlightenment CVS committal

Author  : moom16
Project : e17
Module  : apps/eclair

Dir     : e17/apps/eclair/src


Modified Files:
        eclair.c eclair_args.c eclair_callbacks.c eclair_config.c 
        eclair_dialogs.c eclair_dialogs.h eclair_playlist.c 
        eclair_playlist.h eclair_private.h 


Log Message:

* Should fix a segv which happened on exit, related to gtk
* Improve the behavior of the gtk file chooser:
    - We can now add folders
    - an "All" and a "None" buttons to select the files in the chooser
    - Save the last location opened
    - Add a file chooser for load a playlist
* Save the the playlist on exit, and reload it during the next start of eclair
* Some code cleanup

===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair.c,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -3 -r1.16 -r1.17
--- eclair.c    18 May 2005 15:36:25 -0000      1.16
+++ eclair.c    20 May 2005 13:50:32 -0000      1.17
@@ -76,10 +76,15 @@
    eclair_cover_init(&eclair->cover_manager, eclair);
    eclair_update_current_file_info(eclair, 0);
    
-   for (l = filenames; l; l = l->next)
-      eclair_playlist_add_uri(&eclair->playlist, (char *)l->data, 0);
-   evas_list_free(filenames);
-   eclair_playlist_container_update(eclair->playlist_container);
+   if ((l = filenames))
+   {
+      for (; l; l = l->next)
+         eclair_playlist_add_uri(&eclair->playlist, (char *)l->data, 0);
+      evas_list_free(filenames);
+      eclair_playlist_container_update(eclair->playlist_container);
+   }
+   else
+      eclair_playlist_add_uri(&eclair->playlist, 
eclair->config.default_playlist_path, 0);
 
    ecore_event_handler_add(ECORE_X_EVENT_XDND_POSITION, 
eclair_gui_dnd_position_cb, eclair);
        ecore_event_handler_add(ECORE_X_EVENT_XDND_DROP, 
eclair_gui_dnd_drop_cb, eclair);
@@ -106,9 +111,11 @@
       fprintf(stderr, "Eclair: Debug: Destroying create video object 
thread\n");
       pthread_join(eclair->video_create_thread, NULL); 
       fprintf(stderr, "Eclair: Debug: Create video object thread destroyed\n");
+      eclair_dialogs_shutdown(&eclair->dialogs_manager);
       eclair_subtitles_free(&eclair->subtitles);
       eclair_meta_tag_shutdown(&eclair->meta_tag_manager);
       eclair_cover_shutdown(&eclair->cover_manager);
+      eclair_playlist_save(&eclair->playlist, 
eclair->config.default_playlist_path);
       eclair_playlist_shutdown(&eclair->playlist);
       eclair_config_shutdown(&eclair->config);
       free(eclair->gui_theme_file);
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_args.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -3 -r1.5 -r1.6
--- eclair_args.c       18 May 2005 15:36:25 -0000      1.5
+++ eclair_args.c       20 May 2005 13:50:32 -0000      1.6
@@ -73,7 +73,7 @@
 
 static void _eclair_args_print_usage()
 {
-  printf("Usage: eclair [arguments] file(s)\n"
+   fprintf(stdout, "Usage: eclair [arguments] file(s)\n"
       "\n"
       "Available arguments:\n"
       "-h, --help                            Print this message and exit\n"
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_callbacks.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -3 -r1.11 -r1.12
--- eclair_callbacks.c  18 May 2005 15:36:25 -0000      1.11
+++ eclair_callbacks.c  20 May 2005 13:50:32 -0000      1.12
@@ -183,7 +183,7 @@
    if (!eclair)
       return;
 
-   eclair_dialogs_open_file_dialog(&eclair->dialogs_manager);
+   eclair_dialogs_open_add_files_fc(&eclair->dialogs_manager);
 }
 
 //Called when the user clicks on play button
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_config.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -3 -r1.6 -r1.7
--- eclair_config.c     18 May 2005 15:36:25 -0000      1.6
+++ eclair_config.c     20 May 2005 13:50:32 -0000      1.7
@@ -17,6 +17,7 @@
    config->config_dir_path[0] = 0;
    config->covers_dir_path[0] = 0;
    config->config_file_path[0] = 0;
+   config->default_playlist_path[0] = 0;
    
    if (!(home = getenv("HOME")))
       return 0;
@@ -26,6 +27,7 @@
    sprintf(config->covers_dir_path, "%scovers/", config->config_dir_path);
    ecore_file_mkdir(config->covers_dir_path);
    sprintf(config->config_file_path, "%seclair.cfg", config->config_dir_path);
+   sprintf(config->default_playlist_path, "%splaylist.m3u", 
config->config_dir_path);
 
    eclair_config_load(config);
 
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_dialogs.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- eclair_dialogs.c    18 May 2005 15:36:25 -0000      1.1
+++ eclair_dialogs.c    20 May 2005 13:50:32 -0000      1.2
@@ -1,40 +1,46 @@
 #include "eclair_dialogs.h"
 #include <gtk/gtk.h>
 #include "eclair.h"
+#include "eclair_config.h"
 #include "eclair_playlist.h"
 #include "eclair_playlist_container.h"
 
-static void _eclair_dialogs_on_open_files(gpointer data, guint action, 
GtkWidget  *widget);
-static void _eclair_dialogs_on_select_all(gpointer data, guint action, 
GtkWidget  *widget);
-static void _eclair_dialogs_on_select_none(gpointer data, guint action, 
GtkWidget  *widget);
-static void _eclair_dialogs_on_invert_selection(gpointer data, guint action, 
GtkWidget  *widget);
-static void _eclair_dialogs_on_remove_selected(gpointer data, guint action, 
GtkWidget  *widget);
-static void _eclair_dialogs_on_remove_unselected(gpointer data, guint action, 
GtkWidget  *widget);
-static void _eclair_dialogs_on_remove_all(gpointer data, guint action, 
GtkWidget  *widget);
+static void *_eclair_dialogs_thread(void *param);
+static gint _eclair_dialogs_update(gpointer data);
+static void _eclair_dialogs_open_fc_open(Eclair_Dialogs_Manager 
*dialogs_manager, Eclair_Dialog_Open_FC_Type fc_type);
+static gboolean _eclair_dialogs_open_fc_on_ok(GtkWidget *widget, gpointer 
data);
+static gboolean _eclair_dialogs_open_fc_on_delete(GtkWidget *widget, GdkEvent 
*event, gpointer data);
+static void _eclair_dialogs_menu_on_add_files(gpointer data, guint action, 
GtkWidget  *widget);
+static void _eclair_dialogs_menu_on_load_list(gpointer data, guint action, 
GtkWidget  *widget);
+static void _eclair_dialogs_menu_on_save_list(gpointer data, guint action, 
GtkWidget  *widget);
+static void _eclair_dialogs_menu_on_select_all(gpointer data, guint action, 
GtkWidget  *widget);
+static void _eclair_dialogs_menu_on_select_none(gpointer data, guint action, 
GtkWidget  *widget);
+static void _eclair_dialogs_menu_on_invert_selection(gpointer data, guint 
action, GtkWidget  *widget);
+static void _eclair_dialogs_menu_on_remove_selected(gpointer data, guint 
action, GtkWidget  *widget);
+static void _eclair_dialogs_menu_on_remove_unselected(gpointer data, guint 
action, GtkWidget  *widget);
+static void _eclair_dialogs_menu_on_remove_all(gpointer data, guint action, 
GtkWidget  *widget);
 
 static GtkItemFactoryEntry menu_items[] = {
-   { "/tear",                       NULL,       NULL,                          
        0, "<Tearoff>" },
-   { "/Open",                       NULL,       NULL,                          
        0, "<Branch>" },
-   { "/Open/tear",                  NULL,       NULL,                          
        0, "<Tearoff>" },
-   { "/Open/Open Files...",         NULL,       _eclair_dialogs_on_open_files, 
        1, "<Item>" },
-   { "/Playlist",                   NULL,       NULL,                          
        0, "<Branch>" },
-   { "/Playlist/tear",              NULL,       NULL,                          
        0, "<Tearoff>" },
-   { "/Playlist/Select All",        NULL,       _eclair_dialogs_on_select_all, 
        1, "<Item>" },
-   { "/Playlist/Select None",       NULL,       
_eclair_dialogs_on_select_none,        1, "<Item>" },
-   { "/Playlist/Invert Selection",  NULL,       
_eclair_dialogs_on_invert_selection,   1, "<Item>" },
-   { "/Playlist/separator1",        NULL,       NULL,                          
        0, "<Separator>" },
-   { "/Playlist/Remove Selected",   NULL,       
_eclair_dialogs_on_remove_selected,    1, "<Item>" },
-   { "/Playlist/Remove Unselected", NULL,       
_eclair_dialogs_on_remove_unselected,  1, "<Item>" },
-   { "/Playlist/Remove All",        NULL,       _eclair_dialogs_on_remove_all, 
        1, "<Item>" }
+   { "/tear",                       NULL,       NULL,                          
              0, "<Tearoff>" },
+   { "/Open",                       NULL,       NULL,                          
              0, "<Branch>" },
+   { "/Open/tear",                  NULL,       NULL,                          
              0, "<Tearoff>" },
+   { "/Open/Add Files",             NULL,       
_eclair_dialogs_menu_on_add_files,           1, "<Item>" },
+   { "/Playlist",                   NULL,       NULL,                          
              0, "<Branch>" },
+   { "/Playlist/tear",              NULL,       NULL,                          
              0, "<Tearoff>" },
+   { "/Playlist/Load List",         NULL,       
_eclair_dialogs_menu_on_load_list,           1, "<Item>" },
+   { "/Playlist/Save List",         NULL,       
_eclair_dialogs_menu_on_save_list,           1, "<Item>" },
+   { "/Playlist/separator1",        NULL,       NULL,                          
              0, "<Separator>" },
+   { "/Playlist/Select All",        NULL,       
_eclair_dialogs_menu_on_select_all,          1, "<Item>" },
+   { "/Playlist/Select None",       NULL,       
_eclair_dialogs_menu_on_select_none,         1, "<Item>" },
+   { "/Playlist/Invert Selection",  NULL,       
_eclair_dialogs_menu_on_invert_selection,    1, "<Item>" },
+   { "/Playlist/separator2",        NULL,       NULL,                          
              0, "<Separator>" },
+   { "/Playlist/Remove Selected",   NULL,       
_eclair_dialogs_menu_on_remove_selected,     1, "<Item>" },
+   { "/Playlist/Remove Unselected", NULL,       
_eclair_dialogs_menu_on_remove_unselected,   1, "<Item>" },
+   { "/Playlist/Remove All",        NULL,       
_eclair_dialogs_menu_on_remove_all,          1, "<Item>" }
 };
 
 static gint num_menu_items = sizeof(menu_items) / sizeof(menu_items[0]);
 
-
-static void *_eclair_dialogs_thread(void *param);
-static gint _eclair_dialogs_update(gpointer data);
-static void _eclair_dialogs_file_chooser(Eclair_Dialogs_Manager 
*dialogs_manager);
-
 //Initialize dialogs manager
 void eclair_dialogs_init(Eclair_Dialogs_Manager *dialogs_manager, Eclair 
*eclair)
 {
@@ -42,10 +48,22 @@
       return;
 
    dialogs_manager->eclair = eclair;
-   dialogs_manager->file_chooser_dialog = NULL;
+
+   dialogs_manager->open_fc_all_button = NULL;
+   dialogs_manager->open_fc_none_button = NULL;
+   dialogs_manager->open_fc_ok_button = NULL;
+   dialogs_manager->open_fc_close_button = NULL;
+   dialogs_manager->open_fc_widget = NULL;
+   dialogs_manager->open_fc_dialog = NULL;
+   dialogs_manager->save_fc_ok_button = NULL;
+   dialogs_manager->save_fc_close_button = NULL;
+   dialogs_manager->save_fc_widget = NULL;
+   dialogs_manager->save_fc_dialog = NULL;
    dialogs_manager->menu_widget = NULL;
+
+   dialogs_manager->should_quit = FALSE;
    dialogs_manager->should_popup_menu = FALSE;
-   dialogs_manager->should_open_file_chooser = FALSE;
+   dialogs_manager->should_open_open_fc = ECLAIR_FC_NONE;
 
    pthread_create(&dialogs_manager->dialogs_thread, NULL, 
_eclair_dialogs_thread, eclair);
 }
@@ -53,77 +71,49 @@
 //Shutdown dialogs manager
 void eclair_dialogs_shutdown(Eclair_Dialogs_Manager *dialogs_manager)
 {
+   gchar *last_location_path;
+
    if (!dialogs_manager)
       return;
-   
+
+   if (dialogs_manager->open_fc_widget && dialogs_manager->eclair && 
(last_location_path = 
gtk_file_chooser_get_current_folder(GTK_FILE_CHOOSER(dialogs_manager->open_fc_widget))))
+   {
+      eclair_config_set_prop_string(&dialogs_manager->eclair->config, 
"last_location", "path", last_location_path);
+      g_free(last_location_path);
+   }
+
+   dialogs_manager->should_quit = TRUE;
    fprintf(stderr, "Dialogs: Debug: Destroying dialogs thread\n");
    pthread_join(dialogs_manager->dialogs_thread, NULL); 
-   fprintf(stderr, "Meta tag: Debug: Meta dialogs destroyed\n");  
+   fprintf(stderr, "Dialogs: Debug: Dialogs thread destroyed\n");  
 }
 
-//Will open the file selection dialog
-void eclair_dialogs_open_file_dialog(Eclair_Dialogs_Manager *dialogs_manager)
+//Will open the file chooser dialog to add files
+void eclair_dialogs_open_add_files_fc(Eclair_Dialogs_Manager *dialogs_manager)
 {
    if (!dialogs_manager)
       return;
 
-   dialogs_manager->should_open_file_chooser = TRUE;
+   dialogs_manager->should_open_open_fc = ECLAIR_FC_ADD_FILES;
 }
 
-//Will popup the eclair menu 
-void eclair_popup_menu(Eclair_Dialogs_Manager *dialogs_manager)
+//Will open the file chooser dialog to load playlist
+void eclair_dialogs_open_load_playlist_fc(Eclair_Dialogs_Manager 
*dialogs_manager)
 {
    if (!dialogs_manager)
       return;
 
-   dialogs_manager->should_popup_menu = TRUE;
+   dialogs_manager->should_open_open_fc = ECLAIR_FC_LOAD_PLAYLIST;
 }
 
-//Open the file chooser
-static void _eclair_dialogs_file_chooser(Eclair_Dialogs_Manager 
*dialogs_manager)
+//Will popup the eclair menu 
+void eclair_popup_menu(Eclair_Dialogs_Manager *dialogs_manager)
 {
-   Eclair *eclair;
-   GSList *filenames, *l;
-
-   if (!dialogs_manager || !(eclair = dialogs_manager->eclair))
+   if (!dialogs_manager)
       return;
 
-   dialogs_manager->file_chooser_dialog = gtk_file_chooser_dialog_new("Open 
files...", NULL, GTK_FILE_CHOOSER_ACTION_OPEN,
-      GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, 
GTK_RESPONSE_ACCEPT, NULL);
-       
gtk_dialog_set_default_response(GTK_DIALOG(dialogs_manager->file_chooser_dialog),
 GTK_RESPONSE_ACCEPT);
-       
gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialogs_manager->file_chooser_dialog),
 1);
-       
gtk_file_chooser_set_local_only(GTK_FILE_CHOOSER(dialogs_manager->file_chooser_dialog),
 0);
-
-   gtk_widget_show(dialogs_manager->file_chooser_dialog);
-
-   if (gtk_dialog_run(GTK_DIALOG(dialogs_manager->file_chooser_dialog)) == 
GTK_RESPONSE_ACCEPT)
-   {
-      filenames = 
gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(dialogs_manager->file_chooser_dialog));
-      for (l = filenames; l; l = l->next)
-         eclair_playlist_add_uri(&eclair->playlist, (char *)l->data, 0);
-      eclair_playlist_container_update(eclair->playlist_container);
-
-      g_slist_foreach(filenames, (GFunc)g_free, NULL);
-      g_slist_free(filenames);
-   }
-
-   gtk_widget_destroy(dialogs_manager->file_chooser_dialog);
-   dialogs_manager->file_chooser_dialog = NULL;
-   //gtk_window_present(GTK_WINDOW(dialogs_manager->file_chooser_dialog));
+   dialogs_manager->should_popup_menu = TRUE;
 }
-/*
-static void _eclair_dialogs_file_chooser_add(GtkFileChooser *file_chooser)
-{
-   GSList *filenames, *l;
-
-   if (!(filenames = 
gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(file_chooser))))
-      return;
-
-   for (l = filenames; l; l = l->next)
-         eclair_playlist_add_uri(&eclair->playlist, (char *)l->data);
-   g_slist_foreach(filenames, (GFunc)g_free, NULL);
-   g_slist_free(filenames);
-}*/
 
 //Called each 50ms and check if we must do something (popup menu, open file 
selection dialog...)
 static gint _eclair_dialogs_update(gpointer data)
@@ -133,15 +123,21 @@
    if (!dialogs_manager)
       return 1;
 
+   if (dialogs_manager->should_quit)
+   {
+      gtk_main_quit();
+      return 0;
+   }
+
    if (dialogs_manager->should_popup_menu)
    {
       gtk_menu_popup(GTK_MENU(dialogs_manager->menu_widget), NULL, NULL, NULL, 
NULL, 0, gtk_get_current_event_time());
       dialogs_manager->should_popup_menu = FALSE;
    }
-   if (dialogs_manager->should_open_file_chooser)
+   if (dialogs_manager->should_open_open_fc != ECLAIR_FC_NONE)
    {
-      _eclair_dialogs_file_chooser(dialogs_manager);
-      dialogs_manager->should_open_file_chooser = FALSE;
+      _eclair_dialogs_open_fc_open(dialogs_manager, 
dialogs_manager->should_open_open_fc);
+      dialogs_manager->should_open_open_fc = ECLAIR_FC_NONE;
    }
 
    return 1;
@@ -161,11 +157,12 @@
 
    dialogs_manager = &eclair->dialogs_manager;
 
+   //Create the menu
    item_factory = gtk_item_factory_new(GTK_TYPE_MENU, "<main>", NULL);
    gtk_item_factory_create_items(item_factory, num_menu_items, menu_items, 
eclair);
    dialogs_manager->menu_widget = gtk_item_factory_get_widget(item_factory, 
"<main>");
 
-   g_timeout_add(50, G_CALLBACK(_eclair_dialogs_update), dialogs_manager);
+   g_timeout_add(50, _eclair_dialogs_update, dialogs_manager);
 
    gtk_main();
 
@@ -173,61 +170,198 @@
 }
 
 //------------------------------
+// File chooser functions
+//------------------------------
+
+//Open the file chooser
+static void _eclair_dialogs_open_fc_open(Eclair_Dialogs_Manager 
*dialogs_manager, Eclair_Dialog_Open_FC_Type fc_type)
+{
+   char *last_location_path;
+   Eclair *eclair;
+
+   if (!dialogs_manager || !(eclair = dialogs_manager->eclair) || fc_type == 
ECLAIR_FC_NONE)
+      return;
+
+   if (!dialogs_manager->open_fc_dialog)
+   {
+      //Create the file chooser
+      dialogs_manager->open_fc_dialog = gtk_dialog_new_with_buttons("Add 
Files", NULL, GTK_DIALOG_NO_SEPARATOR, NULL);
+      gtk_window_set_wmclass(GTK_WINDOW(dialogs_manager->open_fc_dialog), 
"eclair", "eclair");
+      gtk_window_set_default_size(GTK_WINDOW(dialogs_manager->open_fc_dialog), 
600, 420);
+      dialogs_manager->open_fc_widget = 
gtk_file_chooser_widget_new(GTK_FILE_CHOOSER_ACTION_OPEN);
+      
gtk_file_chooser_set_local_only(GTK_FILE_CHOOSER(dialogs_manager->open_fc_widget),
 FALSE);
+      if (eclair_config_get_prop_string(&eclair->config, "last_location", 
"path", &last_location_path))
+      {
+         if (strlen(last_location_path) > 0)
+            
gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialogs_manager->open_fc_widget),
 last_location_path);
+         free(last_location_path);
+      }
+      
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialogs_manager->open_fc_dialog)->vbox), 
dialogs_manager->open_fc_widget, TRUE, TRUE, 0);
+   
+      dialogs_manager->open_fc_all_button = gtk_button_new_with_label("All");
+      
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialogs_manager->open_fc_dialog)->action_area),
 dialogs_manager->open_fc_all_button, TRUE, TRUE, 0);
+      dialogs_manager->open_fc_none_button = gtk_button_new_with_label("None");
+      
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialogs_manager->open_fc_dialog)->action_area),
 dialogs_manager->open_fc_none_button, TRUE, TRUE, 0);
+      dialogs_manager->open_fc_ok_button = gtk_button_new_with_label("Add 
Files");
+      
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialogs_manager->open_fc_dialog)->action_area),
 dialogs_manager->open_fc_ok_button, TRUE, TRUE, 0);
+      dialogs_manager->open_fc_close_button = 
gtk_button_new_with_label("Close");
+      
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialogs_manager->open_fc_dialog)->action_area),
 dialogs_manager->open_fc_close_button, TRUE, TRUE, 0);
+   
+      g_signal_connect_swapped(dialogs_manager->open_fc_all_button, "clicked", 
G_CALLBACK(gtk_file_chooser_select_all), dialogs_manager->open_fc_widget);
+      g_signal_connect_swapped(dialogs_manager->open_fc_none_button, 
"clicked", G_CALLBACK(gtk_file_chooser_unselect_all), 
dialogs_manager->open_fc_widget);
+      g_signal_connect(dialogs_manager->open_fc_ok_button, "clicked", 
G_CALLBACK(_eclair_dialogs_open_fc_on_ok), eclair);
+      g_signal_connect_swapped(dialogs_manager->open_fc_close_button, 
"clicked", G_CALLBACK(gtk_widget_hide), dialogs_manager->open_fc_dialog);
+      g_signal_connect(dialogs_manager->open_fc_dialog, "delete_event", 
G_CALLBACK(_eclair_dialogs_open_fc_on_delete), eclair);
+      
+      gtk_widget_show_all(dialogs_manager->open_fc_dialog);
+   }
+
+   if (fc_type == ECLAIR_FC_ADD_FILES)
+   {
+      
gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialogs_manager->open_fc_widget),
 TRUE);
+      gtk_button_set_label(GTK_BUTTON(dialogs_manager->open_fc_ok_button), 
"Add Files");
+      gtk_window_set_title(GTK_WINDOW(dialogs_manager->open_fc_dialog), "Add 
Files");
+      gtk_widget_show(dialogs_manager->open_fc_all_button);
+      gtk_widget_show(dialogs_manager->open_fc_none_button);
+   }
+   else if (fc_type == ECLAIR_FC_LOAD_PLAYLIST)
+   {
+      
gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialogs_manager->open_fc_widget),
 FALSE);
+      gtk_button_set_label(GTK_BUTTON(dialogs_manager->open_fc_ok_button), 
"Load Playlist");
+      gtk_window_set_title(GTK_WINDOW(dialogs_manager->open_fc_dialog), "Load 
Playlist");
+      gtk_widget_hide(dialogs_manager->open_fc_all_button);
+      gtk_widget_hide(dialogs_manager->open_fc_none_button);
+   }
+
+   gtk_window_present(GTK_WINDOW(dialogs_manager->open_fc_dialog));
+}
+
+//Add the files to the playlist
+static gboolean _eclair_dialogs_open_fc_on_ok(GtkWidget *widget, gpointer data)
+{
+   Eclair *eclair = (Eclair *)data;
+   GtkWidget *file_chooser;
+   GSList *filenames, *l;
+
+   if (!eclair || !(file_chooser = eclair->dialogs_manager.open_fc_widget))
+      return FALSE;
+
+   if (!(filenames = 
gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(file_chooser))))
+      return FALSE;
+
+
+   for (l = filenames; l; l = l->next)
+      eclair_playlist_add_uri(&eclair->playlist, (char *)l->data, 0);
+   eclair_playlist_container_update(eclair->playlist_container);
+   g_slist_foreach(filenames, (GFunc)g_free, NULL);
+   g_slist_free(filenames);
+
+   gtk_file_chooser_unselect_all(GTK_FILE_CHOOSER(file_chooser));
+   gtk_widget_hide(eclair->dialogs_manager.open_fc_dialog);
+   return TRUE;
+}
+
+//Do not delete the open file chooser, just hide it
+static gboolean _eclair_dialogs_open_fc_on_delete(GtkWidget *widget, GdkEvent 
*event, gpointer data)
+{
+   Eclair *eclair = (Eclair *)data;
+
+   if (!eclair)
+      return FALSE;
+
+   
gtk_file_chooser_unselect_all(GTK_FILE_CHOOSER(eclair->dialogs_manager.open_fc_widget));
+   gtk_widget_hide(eclair->dialogs_manager.open_fc_dialog);
+   return TRUE;
+}
+
+//------------------------------
 // Menu functions
 //------------------------------
 
-static void _eclair_dialogs_on_open_files(gpointer data, guint action, 
GtkWidget *widget)
+static void _eclair_dialogs_menu_on_add_files(gpointer data, guint action, 
GtkWidget *widget)
 {
    Eclair *eclair = (Eclair *)data;
+
+   if (!eclair)
+      return;
+
+   eclair_dialogs_open_add_files_fc(&eclair->dialogs_manager);
+}
+
+static void _eclair_dialogs_menu_on_load_list(gpointer data, guint action, 
GtkWidget  *widget)
+{
+   Eclair *eclair = (Eclair *)data;
+
+   if (!eclair)
+      return;
+
+   eclair_dialogs_open_load_playlist_fc(&eclair->dialogs_manager);
+}
+
+static void _eclair_dialogs_menu_on_save_list(gpointer data, guint action, 
GtkWidget  *widget)
+{
+   Eclair *eclair = (Eclair *)data;
+
    if (!eclair)
       return;
-   eclair_dialogs_open_file_dialog(&eclair->dialogs_manager);
 }
 
-static void _eclair_dialogs_on_select_all(gpointer data, guint action, 
GtkWidget *widget)
+static void _eclair_dialogs_menu_on_select_all(gpointer data, guint action, 
GtkWidget *widget)
 {
    Eclair *eclair = (Eclair *)data;
+
    if (!eclair)
       return;
+
    eclair_playlist_container_select_all(eclair->playlist_container);
 }
 
-static void _eclair_dialogs_on_select_none(gpointer data, guint action, 
GtkWidget *widget)
+static void _eclair_dialogs_menu_on_select_none(gpointer data, guint action, 
GtkWidget *widget)
 {
    Eclair *eclair = (Eclair *)data;
+
    if (!eclair)
       return;
+
    eclair_playlist_container_select_none(eclair->playlist_container);
 }
 
-static void _eclair_dialogs_on_invert_selection(gpointer data, guint action, 
GtkWidget *widget)
+static void _eclair_dialogs_menu_on_invert_selection(gpointer data, guint 
action, GtkWidget *widget)
 {
    Eclair *eclair = (Eclair *)data;
+
    if (!eclair)
       return;
+
    eclair_playlist_container_invert_selection(eclair->playlist_container);
 }
 
-static void _eclair_dialogs_on_remove_selected(gpointer data, guint action, 
GtkWidget *widget)
+static void _eclair_dialogs_menu_on_remove_selected(gpointer data, guint 
action, GtkWidget *widget)
 {
    Eclair *eclair = (Eclair *)data;
+
    if (!eclair)
       return;
+
    eclair_playlist_remove_selected_media_files(&eclair->playlist);
 }
 
-static void _eclair_dialogs_on_remove_unselected(gpointer data, guint action, 
GtkWidget *widget)
+static void _eclair_dialogs_menu_on_remove_unselected(gpointer data, guint 
action, GtkWidget *widget)
 {
    Eclair *eclair = (Eclair *)data;
+
    if (!eclair)
       return;
+
    eclair_playlist_remove_unselected_media_files(&eclair->playlist);
 }
 
-static void _eclair_dialogs_on_remove_all(gpointer data, guint action, 
GtkWidget *widget)
+static void _eclair_dialogs_menu_on_remove_all(gpointer data, guint action, 
GtkWidget *widget)
 {
    Eclair *eclair = (Eclair *)data;
+
    if (!eclair)
       return;
+
    eclair_playlist_empty(&eclair->playlist);
 }
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_dialogs.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- eclair_dialogs.h    18 May 2005 15:36:25 -0000      1.1
+++ eclair_dialogs.h    20 May 2005 13:50:32 -0000      1.2
@@ -5,7 +5,8 @@
 
 void eclair_dialogs_init(Eclair_Dialogs_Manager *dialogs_manager, Eclair 
*eclair);
 void eclair_dialogs_shutdown(Eclair_Dialogs_Manager *dialogs_manager);
-void eclair_dialogs_open_file_dialog(Eclair_Dialogs_Manager *dialogs_manager);
+void eclair_dialogs_open_add_files_fc(Eclair_Dialogs_Manager *dialogs_manager);
+void eclair_dialogs_open_load_playlist_fc(Eclair_Dialogs_Manager 
*dialogs_manager);
 void eclair_popup_menu(Eclair_Dialogs_Manager *dialogs_manager);
 
 #endif
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_playlist.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -3 -r1.9 -r1.10
--- eclair_playlist.c   18 May 2005 15:36:25 -0000      1.9
+++ eclair_playlist.c   20 May 2005 13:50:32 -0000      1.10
@@ -34,6 +34,30 @@
    eclair_playlist_empty(playlist);
 }
 
+//Save the playlist
+//0 if failed
+Evas_Bool eclair_playlist_save(Eclair_Playlist *playlist, const char *path)
+{
+   Evas_List *l;
+   FILE *playlist_file;
+   Eclair_Media_File *media_file;
+
+   if (!playlist || !path)
+      return 0;
+   
+   if (!(playlist_file = fopen(path, "wt")))
+      return 0;
+
+   for (l = playlist->playlist; l; l = l->next)
+   {
+      if (!(media_file = (Eclair_Media_File *)l->data) || !media_file->path || 
strlen(media_file->path) <= 0)
+         continue;
+      fprintf(playlist_file, "%s\n", media_file->path);
+   }
+   fclose(playlist_file);
+   return 1;
+}
+
 //Return the active media file
 Eclair_Media_File *eclair_playlist_current_media_file(Eclair_Playlist 
*playlist)
 {
@@ -79,11 +103,15 @@
             continue;
          filepath = (char *)malloc(strlen(dir) + strlen(filename) + 2);
          sprintf(filepath, "%s/%s", dir, filename);
-         eclair_playlist_add_uri(playlist, filepath, update_container);
+         eclair_playlist_add_uri(playlist, filepath, 0);
          free(filepath);
       }
       ecore_list_destroy(files);
    }
+
+   if (playlist->eclair && update_container)
+      eclair_playlist_container_update(playlist->eclair->playlist_container);
+
    return 1;
 }
 
@@ -107,18 +135,22 @@
          *c = 0;
    
       if (line[0] == '/')
-         eclair_playlist_add_uri(playlist, line, update_container);
+         eclair_playlist_add_uri(playlist, line, 0);
       else if (m3u_dir)
       {
          path = (char *)malloc(strlen(m3u_dir) + strlen(line) + 2);
          sprintf(path, "%s/%s", m3u_dir, line);
-         eclair_playlist_add_uri(playlist, path, update_container);
+         eclair_playlist_add_uri(playlist, path, 0);
          free(path);
       }
    }
 
    free(m3u_dir);
    fclose(m3u_file);
+
+   if (playlist->eclair && update_container)
+      eclair_playlist_container_update(playlist->eclair->playlist_container);
+
    return 1;
 }
 
@@ -150,14 +182,14 @@
 
    if (!strstr(new_path, "://"))
    {
-      if (eclair_playlist_add_dir(playlist, new_path, update_container))
+      if (eclair_playlist_add_dir(playlist, new_path, 0))
       {
          free(new_path);
          return 1;
       }
       if ((ext = eclair_utils_file_get_extension(new_path)) && strcmp(ext, 
"m3u") == 0)
       {
-         eclair_playlist_add_m3u(playlist, new_path, update_container);
+         eclair_playlist_add_m3u(playlist, new_path, 0);
          free(new_path);
          return 1;  
       }
@@ -260,15 +292,12 @@
 {
    Evas_List *l;
 
-   printf("Rohhhh\n");
-
    if (!playlist)
       return;
 
    for (l = playlist->playlist; l; l = 
eclair_playlist_remove_media_file_list(playlist, l, 0));
    playlist->playlist = evas_list_free(playlist->playlist);
    playlist->current = NULL;
-   printf("playlist->playlist: %p\n", playlist->playlist);
 
    if (playlist->eclair && playlist->eclair->playlist_container)
       eclair_playlist_container_update(playlist->eclair->playlist_container);
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_playlist.h,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -3 -r1.7 -r1.8
--- eclair_playlist.h   18 May 2005 15:36:25 -0000      1.7
+++ eclair_playlist.h   20 May 2005 13:50:32 -0000      1.8
@@ -5,6 +5,7 @@
 
 void eclair_playlist_init(Eclair_Playlist *playlist, Eclair *eclair);
 void eclair_playlist_shutdown(Eclair_Playlist *playlist);
+Evas_Bool eclair_playlist_save(Eclair_Playlist *playlist, const char *path);
 
 Eclair_Media_File *eclair_playlist_current_media_file(Eclair_Playlist 
*playlist);
 Eclair_Media_File *eclair_playlist_prev_media_file(Eclair_Playlist *playlist);
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_private.h,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -3 -r1.12 -r1.13
--- eclair_private.h    18 May 2005 15:36:25 -0000      1.12
+++ eclair_private.h    20 May 2005 13:50:32 -0000      1.13
@@ -23,6 +23,7 @@
 typedef struct _Eclair_Config Eclair_Config;
 typedef enum _Eclair_Config_Type Eclair_Config_Type;
 typedef enum _Eclair_Drop_Object Eclair_Drop_Object;
+typedef enum _Eclair_Dialog_Open_FC_Type Eclair_Dialog_Open_FC_Type;
 typedef struct _Eclair_Dialogs_Manager Eclair_Dialogs_Manager;
 typedef struct _Eclair_Playlist_Container Eclair_Playlist_Container;
 typedef struct _Eclair_Playlist_Container_Object 
Eclair_Playlist_Container_Object;
@@ -64,6 +65,7 @@
    char config_dir_path[256];
    char covers_dir_path[256];
    char config_file_path[256];
+   char default_playlist_path[256];
    xmlDocPtr config_doc;
    xmlNodePtr root_node;
 };
@@ -75,12 +77,33 @@
    ECLAIR_ADDING_FILE_TO_TREAT
 };
 
+enum _Eclair_Dialog_Open_FC_Type
+{
+   ECLAIR_FC_NONE = 0,
+   ECLAIR_FC_ADD_FILES,
+   ECLAIR_FC_LOAD_PLAYLIST
+};
+
 struct _Eclair_Dialogs_Manager
 {
-   GtkWidget *file_chooser_dialog;
+   GtkWidget *open_fc_all_button;
+   GtkWidget *open_fc_none_button;
+   GtkWidget *open_fc_ok_button;
+   GtkWidget *open_fc_close_button;
+   GtkWidget *open_fc_widget;
+   GtkWidget *open_fc_dialog;
+
+   GtkWidget *save_fc_ok_button;
+   GtkWidget *save_fc_close_button;
+   GtkWidget *save_fc_widget;
+   GtkWidget *save_fc_dialog;
+
    GtkWidget *menu_widget;
+
    gboolean should_popup_menu;
-   gboolean should_open_file_chooser;
+   Eclair_Dialog_Open_FC_Type should_open_open_fc;
+   gboolean should_quit;
+
    pthread_t dialogs_thread;
    Eclair *eclair;
 };




-------------------------------------------------------
This SF.Net email is sponsored by Oracle Space Sweepstakes
Want to be the first software developer in space?
Enter now for the Oracle Space Sweepstakes!
http://ads.osdn.com/?ad_id=7412&alloc_id=16344&op=click
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to