diff options
Diffstat (limited to 'src/gui')
-rw-r--r-- | src/gui/menus/file.c | 199 | ||||
-rw-r--r-- | src/gui/panels/panel.c | 24 | ||||
-rw-r--r-- | src/gui/panels/panel.h | 3 |
3 files changed, 226 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". * diff --git a/src/gui/panels/panel.c b/src/gui/panels/panel.c index a12c675..b13c074 100644 --- a/src/gui/panels/panel.c +++ b/src/gui/panels/panel.c @@ -285,6 +285,30 @@ void g_panel_item_dock(GPanelItem *item) /****************************************************************************** * * +* Paramètres : item = composant à retirer de l'affichage. * +* * +* Description : Supprime un panneau de l'ensemble affiché. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void g_panel_item_undock(GPanelItem *item) +{ + GtkWidget *station; /* Base du remplacement */ + + station = gtk_widget_get_parent(G_EDITOR_ITEM(item)->widget); /* NoteBook */ + station = gtk_widget_get_parent(station); /* DockStation */ + + gtk_dock_panel_remove_widget(GTK_DOCK_STATION(station), G_EDITOR_ITEM(item)->widget); + +} + + +/****************************************************************************** +* * * Paramètres : base = support sujet à analyse. * * pos = position de la tête de lecture dans le chemin. * * target = indentifiant de positionnement recherché. * diff --git a/src/gui/panels/panel.h b/src/gui/panels/panel.h index 9c6fa89..893c48b 100644 --- a/src/gui/panels/panel.h +++ b/src/gui/panels/panel.h @@ -57,6 +57,9 @@ GPanelItem *g_panel_item_get(const char *); /* Place un panneau dans l'ensemble affiché. */ void g_panel_item_dock(GPanelItem *); +/* Supprime un panneau de l'ensemble affiché. */ +void g_panel_item_undock(GPanelItem *); + /* ----------------------- PLACEMENTS DES DIFFERENTS PANNEAUX ----------------------- */ |