diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2012-04-01 11:44:00 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2012-04-01 11:44:00 (GMT) |
commit | c989181c56ff97d2c4918c0e9028762a1ed46623 (patch) | |
tree | 24a413f71c65d90994e435bf86f5c85ab732a244 /src | |
parent | a174ee784f5d9e554ed09181b8e6d8c0205f8ef5 (diff) |
Moved all the File menu entries in the GUI menu.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@242 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src')
-rw-r--r-- | src/editor.c | 201 | ||||
-rw-r--r-- | src/gtkext/gtkdockstation.c | 27 | ||||
-rw-r--r-- | src/gtkext/gtkdockstation.h | 11 | ||||
-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 | ||||
-rw-r--r-- | src/project.c | 103 |
7 files changed, 314 insertions, 254 deletions
diff --git a/src/editor.c b/src/editor.c index 6f45fec..fff2052 100644 --- a/src/editor.c +++ b/src/editor.c @@ -74,18 +74,6 @@ 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); - -/* Réagit au menu "Fichier -> Ouvrir un projet". */ -void mcb_file_open_project(GtkMenuItem *, gpointer); - -/* Réagit au menu "Fichier -> Enregistrer le projet". */ -void mcb_file_save_project(GtkMenuItem *, gpointer); - -/* Réagit au menu "Fichier -> Enregistrer le projet sous...". */ -void mcb_file_save_project_as(GtkMenuItem *, gpointer); - /* Charge un projet récent et met à jour la liste. */ void mcb_open_recent_project(GtkMenuItem *, GObject *); @@ -254,38 +242,6 @@ GtkWidget *create_editor(void) gtk_widget_show(menuboard); gtk_box_pack_start(GTK_BOX(vbox1), menuboard, FALSE, FALSE, 0); - menuitem = gtk_menu_item_new_with_mnemonic(_("_File")); - gtk_widget_show(menuitem); - gtk_container_add(GTK_CONTAINER(menuboard), menuitem); - - menubar = gtk_menu_new(); - gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), menubar); - - submenuitem = qck_create_menu_item(NULL, NULL, _("New project"), G_CALLBACK(mcb_file_new_project), result); - add_accelerator_to_menu_item(submenuitem, "<Control>N", accgroup); - gtk_container_add(GTK_CONTAINER(menubar), submenuitem); - - submenuitem = qck_create_menu_item(NULL, NULL, _("Open project"), G_CALLBACK(mcb_file_open_project), result); - 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, _("Save project"), G_CALLBACK(mcb_file_save_project), result); - gtk_container_add(GTK_CONTAINER(menubar), submenuitem); - - submenuitem = qck_create_menu_item(NULL, NULL, _("Save project as..."), G_CALLBACK(mcb_file_save_project_as), result); - gtk_container_add(GTK_CONTAINER(menubar), submenuitem); - - submenuitem = qck_create_menu_separator(); - gtk_container_add(GTK_CONTAINER(menubar), submenuitem); - - submenuitem = qck_create_menu_item(G_OBJECT(result), "menu_recent_prjs", _("Recent projects..."), NULL, NULL); - gtk_container_add(GTK_CONTAINER(menubar), submenuitem); - - submenubar = gtk_menu_new(); - gtk_menu_item_set_submenu(GTK_MENU_ITEM(submenuitem), submenubar); - /* Affichage */ menuitem = gtk_menu_item_new_with_mnemonic(_("_View")); @@ -560,7 +516,7 @@ static gboolean on_delete_editor(GtkWidget *widget, GdkEvent *event, gpointer da switch (gtk_dialog_run(GTK_DIALOG(dialog))) { case GTK_RESPONSE_YES: - mcb_file_save_project_as(NULL, widget); + //mcb_file_save_project_as(NULL, widget); /* FIXME */ break; case GTK_RESPONSE_NO: @@ -614,161 +570,6 @@ static void on_destroy_editor(GtkWidget *widget, gpointer 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 -> Nouveau projet". * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -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 : - * -* * -******************************************************************************/ - -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(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 : - * -* * -******************************************************************************/ - -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 : - * -* * -******************************************************************************/ - -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(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 : Charge un projet récent et met à jour la liste. * diff --git a/src/gtkext/gtkdockstation.c b/src/gtkext/gtkdockstation.c index d85d11e..a91998e 100644 --- a/src/gtkext/gtkdockstation.c +++ b/src/gtkext/gtkdockstation.c @@ -275,6 +275,33 @@ void gtk_dock_panel_change_active_widget(GtkDockStation *station, GtkWidget *wid * * * Paramètres : station = plateforme GTK à compléter. * * widget = nouvel élément à intégrer. * +* * +* Description : Retire un paquet d'informations de l'affichage centralisé. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void gtk_dock_panel_remove_widget(GtkDockStation *station, GtkWidget *widget) +{ + gint index; /* Indice de l'onglet visé */ + + index = gtk_notebook_page_num(station->notebook, widget); + + gtk_notebook_remove_page(station->notebook, index); + + if (gtk_notebook_get_n_pages(station->notebook) == 0) + gtk_container_remove(gtk_widget_get_parent(GTK_WIDGET(station)), GTK_WIDGET(station)); + +} + + +/****************************************************************************** +* * +* Paramètres : station = plateforme GTK à compléter. * +* widget = nouvel élément à intégrer. * * caption = intitulé court à afficher sur les onglets. * * * * Description : Met à jour, si besoin est, le titre de l'affichage concentré.* diff --git a/src/gtkext/gtkdockstation.h b/src/gtkext/gtkdockstation.h index 770681f..c285dc7 100644 --- a/src/gtkext/gtkdockstation.h +++ b/src/gtkext/gtkdockstation.h @@ -78,6 +78,9 @@ void gtk_dock_panel_add_widget(GtkDockStation *, GtkWidget *, const char *); /* Change le contenu de l'onglet courant uniquement. */ void gtk_dock_panel_change_active_widget(GtkDockStation *, GtkWidget *); +/* Retire un paquet d'informations de l'affichage centralisé. */ +void gtk_dock_panel_remove_widget(GtkDockStation *, GtkWidget *); + /* Met à jour, si besoin est, le titre de l'affichage concentré. */ void gtk_dock_panel_update_title(GtkDockStation *, GtkWidget *, const char *); @@ -86,14 +89,6 @@ GtkWidget *gtk_dock_panel_get_widget(GtkDockStation *, gint); -/* Ajoute un nouveau composant à l'ensemble. */ -//void gtk_dock_station_add_item(GtkDockStation *, GDockItem *); - -/* Supprime un composant à l'ensemble. */ -//void gtk_dock_station_remove_item(GtkDockStation *, GDockItem *); - - - G_END_DECLS 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 ----------------------- */ diff --git a/src/project.c b/src/project.c index 47bbe3e..245bac4 100644 --- a/src/project.c +++ b/src/project.c @@ -49,6 +49,8 @@ typedef struct _loaded_binary GtkViewPanel *views[BVW_COUNT]; /* Composants pour l'affichage */ GtkWidget *scrollwindows[BVW_COUNT]; /* Supports pour l'affichage */ + GEditorItem *item; /* Support d'affichage final */ + } loaded_binary; @@ -80,6 +82,9 @@ static void g_study_project_class_init(GStudyProjectClass *); /*Initialise une instance de projet d'étude. */ static void g_study_project_init(GStudyProject *); +/* Supprime de l'écran un projet en place. */ +static void g_study_project_hide(const GStudyProject *); + /* ---------------------------------------------------------------------------------- */ @@ -313,20 +318,10 @@ const char *g_study_project_get_filename(const GStudyProject *project) void g_study_project_add_loaded_binary(GOpenidaBinary *binary, GStudyProject *project) { size_t index; /* Indice du nouveau binaire */ - GtkWidget *view; /* Affichage du code binaire */ - const char *title; /* Titre associé au binaire */ - GEditorItem *item; /* Panneau avec ses infos. */ index = g_study_project_attach_binary(project, binary); - view = project->binaries[index]->scrollwindows[BVW_BLOCK]; - - title = g_openida_binary_to_string(binary); - - //gdk_threads_enter(); - - item = g_panel_item_new(strrchr(title, G_DIR_SEPARATOR) + 1, title, view, "M"); - g_panel_item_dock(G_PANEL_ITEM(item)); + g_panel_item_dock(G_PANEL_ITEM(project->binaries[index]->item)); //gdk_flush (); //gdk_threads_leave(); @@ -353,7 +348,8 @@ size_t g_study_project_attach_binary(GStudyProject *project, GOpenidaBinary *bin loaded_binary *loaded; /* Structure à renvoyer */ BinaryView i; /* Boucle de parcours */ GtkWidget *view; /* Affichage du binaire */ - GtkWidget *scrolledwindow; /* Surface d'exposition */ + GtkWidget *scroll; /* Surface d'exposition */ + const char *title; /* Titre associé au binaire */ loaded = (loaded_binary *)calloc(1, sizeof(loaded_binary)); @@ -395,13 +391,20 @@ size_t g_study_project_attach_binary(GStudyProject *project, GOpenidaBinary *bin //gdk_threads_enter(); - scrolledwindow = qck_create_scrolled_window(NULL, NULL); - gtk_container_add(GTK_CONTAINER(scrolledwindow), view); + scroll = qck_create_scrolled_window(NULL, NULL); + gtk_container_add(GTK_CONTAINER(scroll), view); - loaded->scrollwindows[i] = scrolledwindow; + loaded->scrollwindows[i] = scroll; } + /* Support graphique final */ + + scroll = loaded->scrollwindows[BVW_BLOCK]; + title = g_openida_binary_to_string(binary); + + loaded->item = g_panel_item_new(strrchr(title, G_DIR_SEPARATOR) + 1, title, scroll, "M"); + /* Enregistrement dans le projet */ g_mutex_lock(project->mutex); @@ -511,22 +514,31 @@ GtkWidget *g_study_project_get_view_for_binary(const GStudyProject *project, con void g_study_project_display(const GStudyProject *project) { size_t i; /* Boucle de parcours */ - GOpenidaBinary *binary; /* Binaire chargé */ - GtkWidget *scroll; /* Affichage du code binaire */ - const char *title; /* Titre associé au binaire */ - GEditorItem *item; /* Panneau avec ses infos. */ for (i = 0; i < project->binaries_count; i++) - { - binary = project->binaries[i]->binary; + g_panel_item_dock(G_PANEL_ITEM(project->binaries[i]->item)); - scroll = project->binaries[i]->scrollwindows[BVW_BLOCK]; - title = g_openida_binary_to_string(binary); +} - item = g_panel_item_new(strrchr(title, G_DIR_SEPARATOR) + 1, title, scroll, "M"); - g_panel_item_dock(G_PANEL_ITEM(item)); - } +/****************************************************************************** +* * +* Paramètres : project = projet dont le contenu est à cacher. * +* * +* Description : Supprime de l'écran un projet en place. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void g_study_project_hide(const GStudyProject *project) +{ + size_t i; /* Boucle de parcours */ + + for (i = 0; i < project->binaries_count; i++) + g_panel_item_undock(G_PANEL_ITEM(project->binaries[i]->item)); } @@ -586,8 +598,14 @@ GStudyProject *_get_current_study_project(GStudyProject *project) if (project != NULL) { - if (result != NULL) g_object_unref(G_OBJECT(result)); + if (result != NULL) + { + g_study_project_hide(result); + g_object_unref(G_OBJECT(result)); + } + result = project; + } return result; @@ -613,7 +631,7 @@ GtkRecentManager *get_projects_manager(void) if (result == NULL) { - result = gtk_recent_manager_new(); + result = gtk_recent_manager_get_default(); //gtk_recent_manager_purge_items(result, NULL); } @@ -637,34 +655,27 @@ GtkRecentManager *get_projects_manager(void) void push_project_into_recent_list(const GStudyProject *project) { GtkRecentManager *manager; /* Gestionnaire global */ - GtkRecentData *recent; /* Données complètes */ - - - + char *qualified; /* Chemin avec 'file://' */ + GtkRecentData recent; /* Données complètes */ if (project->filename == NULL) return; manager = get_projects_manager(); - /* Recherche un éventuel vestige à remplacer */ - - - - - + qualified = (char *)calloc(strlen("file://") + strlen(project->filename) + 1, sizeof(char)); + strcpy(qualified, "file://"); + strcat(qualified, project->filename); - /* Inscrit le projet dans l'actualité */ + memset(&recent, 0, sizeof(GtkRecentData)); - recent = g_slice_new0(GtkRecentData); + recent.mime_type = "application/chrysalide.project"; + recent.app_name = "Chrysalide"; + recent.app_exec = "chrysalide %f"; - recent->display_name = project->filename; - recent->mime_type = "application/chrysalide.project"; - recent->mime_type = "plain/text"; - recent->app_name = "chrysalide"; - recent->app_exec = "chrysalide %s"; + gtk_recent_manager_add_full(manager, qualified, &recent); - gtk_recent_manager_add_full(manager, project->filename, recent); + free(qualified); } |