summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/editor.c201
-rw-r--r--src/gtkext/gtkdockstation.c27
-rw-r--r--src/gtkext/gtkdockstation.h11
-rw-r--r--src/gui/menus/file.c199
-rw-r--r--src/gui/panels/panel.c24
-rw-r--r--src/gui/panels/panel.h3
-rw-r--r--src/project.c103
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);
}