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);  }  | 
