diff options
Diffstat (limited to 'src/editor.c')
-rw-r--r-- | src/editor.c | 118 |
1 files changed, 96 insertions, 22 deletions
diff --git a/src/editor.c b/src/editor.c index eed0868..5e39f27 100644 --- a/src/editor.c +++ b/src/editor.c @@ -69,8 +69,10 @@ void sigchld_handler(int num); GtkWidget *create_editor(void); /* Quitte le programme en sortie de la boucle de GTK. */ -void destroy_editor(GtkWidget *, gpointer); +static gboolean on_delete_editor(GtkWidget *, GdkEvent *, gpointer); +/* Quitte le programme en sortie de la boucle de GTK. */ +static void on_destroy_editor(GtkWidget *, gpointer); /* Réagit au menu "Fichier -> Nouveau projet". */ void mcb_file_new_project(GtkMenuItem *, gpointer); @@ -216,7 +218,8 @@ GtkWidget *create_editor(void) gtk_container_set_border_width(GTK_CONTAINER(result), 4); gtk_window_set_title(GTK_WINDOW(result), _("OpenIDA")); - g_signal_connect(G_OBJECT(result), "destroy", G_CALLBACK(destroy_editor), NULL); + g_signal_connect(G_OBJECT(result), "delete-event", G_CALLBACK(on_delete_editor), NULL); + g_signal_connect(G_OBJECT(result), "destroy", G_CALLBACK(on_destroy_editor), NULL); ref = G_OBJECT(result); @@ -554,6 +557,7 @@ GtkWidget *create_editor(void) /****************************************************************************** * * * Paramètres : widget = fenêtre de l'éditeur de préférences. * +* event = informations liées à l'événement. * * data = adresse non utilisée ici. * * * * Description : Quitte le programme en sortie de la boucle de GTK. * @@ -564,15 +568,77 @@ GtkWidget *create_editor(void) * * ******************************************************************************/ -void destroy_editor(GtkWidget *widget, gpointer data) +static gboolean on_delete_editor(GtkWidget *widget, GdkEvent *event, gpointer data) { - close_openida_project(get_current_openida_project()); + gboolean result; /* Continuation à retourner */ + openida_project *project; /* Projet courant */ + GtkWidget *dialog; /* Boîte à afficher */ - gtk_main_quit(); + result = FALSE; + + project = get_current_openida_project(); + + if (g_openida_project_get_filename(project) == NULL) + { + dialog = gtk_message_dialog_new(widget, + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_QUESTION, + GTK_BUTTONS_NONE, + _("The current project will be lost. Do you you want to save it ?")); + + gtk_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_YES, GTK_RESPONSE_YES); + gtk_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_NO, GTK_RESPONSE_NO); + gtk_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL); + + switch (gtk_dialog_run(GTK_DIALOG(dialog))) + { + case GTK_RESPONSE_YES: + mcb_file_save_project_as(NULL, widget); + break; + + case GTK_RESPONSE_NO: + break; + + case GTK_RESPONSE_CANCEL: + result = TRUE; + break; + + } + + gtk_widget_destroy(dialog); + + } + + return result; } +/****************************************************************************** +* * +* Paramètres : widget = fenêtre de l'éditeur de préférences. * +* event = informations liées à l'événement. * +* data = adresse non utilisée ici. * +* * +* Description : Quitte le programme en sortie de la boucle de GTK. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void on_destroy_editor(GtkWidget *widget, gpointer data) +{ + close_openida_project(get_current_openida_project()); + + /* Fermeture propre */ + + /* ... */ + + gtk_main_quit(); + +} @@ -620,16 +686,21 @@ void mcb_file_new_project(GtkMenuItem *menuitem, gpointer data) void mcb_file_open_project(GtkMenuItem *menuitem, gpointer data) { GtkWidget *dialog; /* Boîte à afficher */ - gchar *filename; /* Nom du fichier à intégrer */ openida_project *project; /* Projet chargé */ + gchar *filename; /* Nom du fichier à intégrer */ - dialog = gtk_file_chooser_dialog_new (_("Open a project"), GTK_WINDOW(data), - GTK_FILE_CHOOSER_ACTION_OPEN, - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, - GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, - NULL); + dialog = gtk_file_chooser_dialog_new(_("Open a project"), GTK_WINDOW(data), + GTK_FILE_CHOOSER_ACTION_OPEN, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, + NULL); + + project = get_current_openida_project(); + + if (g_openida_project_get_filename(project) != NULL) + gtk_file_chooser_set_filename(dialog, g_openida_project_get_filename(project)); - if (gtk_dialog_run(GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) + if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); @@ -669,7 +740,7 @@ void mcb_file_save_project(GtkMenuItem *menuitem, gpointer data) project = get_current_openida_project(); - if (has_storing_filename(project)) + if (g_openida_project_get_filename(project) != NULL) { if (g_openida_project_save(project, NULL)) push_openida_project_into_recent_list(project); @@ -700,16 +771,19 @@ void mcb_file_save_project_as(GtkMenuItem *menuitem, gpointer data) openida_project *project; /* Projet courant */ gchar *filename; /* Nom du fichier à intégrer */ - dialog = gtk_file_chooser_dialog_new (_("Save the project as..."), GTK_WINDOW(data), - GTK_FILE_CHOOSER_ACTION_SAVE, - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, - GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, - NULL); + dialog = gtk_file_chooser_dialog_new(_("Save the project as..."), GTK_WINDOW(data), + GTK_FILE_CHOOSER_ACTION_SAVE, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, + NULL); - if (gtk_dialog_run(GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) - { - project = get_current_openida_project(); + project = get_current_openida_project(); + + if (g_openida_project_get_filename(project) != NULL) + gtk_file_chooser_set_filename(dialog, g_openida_project_get_filename(project)); + if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) + { filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); if (g_openida_project_save(project, filename)) @@ -892,7 +966,7 @@ void mcb_project_add_binary(GtkMenuItem *menuitem, gpointer data) GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); - if (gtk_dialog_run(GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) + if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); |