summaryrefslogtreecommitdiff
path: root/src/gui/menus
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/menus')
-rw-r--r--src/gui/menus/file.c199
1 files changed, 199 insertions, 0 deletions
diff --git a/src/gui/menus/file.c b/src/gui/menus/file.c
index 95b50cb..8d218c1 100644
--- a/src/gui/menus/file.c
+++ b/src/gui/menus/file.c
@@ -33,6 +33,18 @@
+/* Réagit au menu "Fichier -> Nouveau projet". */
+static void mcb_file_new_project(GtkMenuItem *, gpointer);
+
+/* Réagit au menu "Fichier -> Ouvrir un projet". */
+static void mcb_file_open_project(GtkMenuItem *, gpointer);
+
+/* Réagit au menu "Fichier -> Enregistrer le projet". */
+static void mcb_file_save_project(GtkMenuItem *, gpointer);
+
+/* Réagit au menu "Fichier -> Enregistrer le projet sous...". */
+static void mcb_file_save_project_as(GtkMenuItem *, gpointer);
+
/* Réagit avec le menu "Fichier -> Quitter". */
static void mcb_file_quit(GtkMenuItem *, GObject *);
@@ -57,6 +69,7 @@ GtkWidget *build_menu_file(GObject *ref, GtkAccelGroup *accgroup)
GtkWidget *menubar; /* Support pour éléments */
GtkWidget *submenuitem; /* Sous-élément de menu #1 */
GtkWidget *deepmenuitem; /* Sous-élément de menu #2 */
+ GtkRecentFilter *filter; /* Filtre gardant les projets */
result = gtk_menu_item_new_with_mnemonic(_("_File"));
gtk_widget_show(result);
@@ -64,6 +77,19 @@ GtkWidget *build_menu_file(GObject *ref, GtkAccelGroup *accgroup)
menubar = gtk_menu_new();
gtk_menu_item_set_submenu(GTK_MENU_ITEM(result), menubar);
+ submenuitem = qck_create_menu_item(NULL, NULL, _("New project"),
+ G_CALLBACK(mcb_file_new_project), ref);
+ add_accelerator_to_menu_item(submenuitem, "<Ctrl>N", accgroup);
+ gtk_container_add(GTK_CONTAINER(menubar), submenuitem);
+
+ submenuitem = qck_create_menu_separator();
+ gtk_container_add(GTK_CONTAINER(menubar), submenuitem);
+
+ submenuitem = qck_create_menu_item(NULL, NULL, _("Open project"),
+ G_CALLBACK(mcb_file_open_project), ref);
+ add_accelerator_to_menu_item(submenuitem, "<Ctrl>O", accgroup);
+ gtk_container_add(GTK_CONTAINER(menubar), submenuitem);
+
submenuitem = qck_create_menu_item(NULL, NULL, _("Recent projects..."), NULL, NULL);
gtk_container_add(GTK_CONTAINER(menubar), submenuitem);
@@ -73,6 +99,22 @@ GtkWidget *build_menu_file(GObject *ref, GtkAccelGroup *accgroup)
gtk_recent_chooser_set_show_icons(GTK_RECENT_CHOOSER(deepmenuitem), FALSE);
gtk_menu_item_set_submenu(GTK_MENU_ITEM(submenuitem), deepmenuitem);
+ filter = gtk_recent_filter_new();
+ gtk_recent_filter_add_mime_type(filter, "application/chrysalide.project");
+ gtk_recent_chooser_add_filter(GTK_RECENT_CHOOSER(deepmenuitem), filter);
+
+ submenuitem = qck_create_menu_separator();
+ gtk_container_add(GTK_CONTAINER(menubar), submenuitem);
+
+ submenuitem = qck_create_menu_item(NULL, NULL, _("Save project"),
+ G_CALLBACK(mcb_file_save_project), ref);
+ add_accelerator_to_menu_item(submenuitem, "<Ctrl>S", accgroup);
+ gtk_container_add(GTK_CONTAINER(menubar), submenuitem);
+
+ submenuitem = qck_create_menu_item(NULL, NULL, _("Save project as..."),
+ G_CALLBACK(mcb_file_save_project_as), ref);
+ gtk_container_add(GTK_CONTAINER(menubar), submenuitem);
+
submenuitem = qck_create_menu_separator();
gtk_container_add(GTK_CONTAINER(menubar), submenuitem);
@@ -88,6 +130,163 @@ GtkWidget *build_menu_file(GObject *ref, GtkAccelGroup *accgroup)
/******************************************************************************
* *
* Paramètres : menuitem = élément de menu sélectionné. *
+* data = adresse de l'espace de référencement global. *
+* *
+* Description : Réagit au menu "Fichier -> Nouveau projet". *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static void mcb_file_new_project(GtkMenuItem *menuitem, gpointer data)
+{
+ GStudyProject *project; /* Nouveau projet courant */
+
+ project = g_study_project_new();
+
+ set_current_project(project);
+
+ g_study_project_display(project);
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : menuitem = élément de menu sélectionné. *
+* data = adresse de l'espace de référencement global. *
+* *
+* Description : Réagit au menu "Fichier -> Ouvrir un projet". *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static void mcb_file_open_project(GtkMenuItem *menuitem, gpointer data)
+{
+ GtkWidget *dialog; /* Boîte à afficher */
+ GStudyProject *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);
+
+ project = get_current_project();
+
+ if (g_study_project_get_filename(project) != NULL)
+ gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog),
+ g_study_project_get_filename(project));
+
+ if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
+ {
+ filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
+
+ project = g_study_project_open(filename);
+
+ if (project != NULL)
+ {
+ set_current_project(project);
+ g_study_project_display(project);
+ push_project_into_recent_list(project);
+ }
+
+ g_free(filename);
+
+ }
+
+ gtk_widget_destroy(dialog);
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : menuitem = élément de menu sélectionné. *
+* data = adresse de l'espace de référencement global. *
+* *
+* Description : Réagit au menu "Fichier -> Enregistrer le projet". *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static void mcb_file_save_project(GtkMenuItem *menuitem, gpointer data)
+{
+ GStudyProject *project; /* Projet courant */
+
+ project = get_current_project();
+
+ if (g_study_project_get_filename(project) != NULL)
+ {
+ if (g_study_project_save(project, NULL))
+ push_project_into_recent_list(project);
+ }
+
+ else
+ mcb_file_save_project_as(menuitem, data);
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : menuitem = élément de menu sélectionné. *
+* data = adresse de l'espace de référencement global. *
+* *
+* Description : Réagit au menu "Fichier -> Enregistrer le projet sous...". *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static void mcb_file_save_project_as(GtkMenuItem *menuitem, gpointer data)
+{
+ GtkWidget *dialog; /* Boîte à afficher */
+ GStudyProject *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);
+
+ project = get_current_project();
+
+ if (g_study_project_get_filename(project) != NULL)
+ gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog),
+ g_study_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_study_project_save(project, filename))
+ push_project_into_recent_list(project);
+
+ g_free(filename);
+
+ }
+
+ gtk_widget_destroy(dialog);
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : menuitem = élément de menu sélectionné. *
* ref = adresse de l'espace de référencement global. *
* *
* Description : Réagit avec le menu "Fichier -> Quitter". *