1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193
| #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <gtk/gtk.h>
static void menuNouveau (void);
static void menuOuvrir (void);
static void menuQuitter (void);
/*
static void menuPPV (void);
static void menuPPA (void);
static void menuIMC (void);
static void menuIPL (void); */
static void menuAide (void);
//static void menuAPropos (void);
static void menuAjouterWidget (GtkUIManager *, GtkWidget *, GtkContainer *);
int main (int argc, char* argv[])
{
GtkWidget *pFenetre = NULL;
GtkWidget *pBoite = NULL;
GtkUIManager *puiManager = NULL;
GtkActionGroup *pActionGroupe = NULL;
GError *error;
GtkWidget *menubar = NULL;
GtkWidget *toolbar = NULL;
GtkWidget *image; /* prendre mes images */
GtkIconFactory *factory;
GtkIconSource *source;
GtkIconSet *set;
GtkStockItem item;
char chemin[256]; /* chemin des images */
/* Création du menu */
static GtkActionEntry entries[] =
{
{ "FichierMenuAction", NULL, "Fichier", NULL, NULL, NULL },
{ "NouveauAction", GTK_STOCK_NEW, "_Nouveau", "<control>N", "Nouveau", G_CALLBACK (menuNouveau) },
{ "OuvrirAction", GTK_STOCK_OPEN, "_Ouvrir", "<control>O", "Ouvrir", G_CALLBACK (menuOuvrir) },
{ "QuitterAction", GTK_STOCK_QUIT, "_Quitter", "<control>Q", "Quitter", G_CALLBACK (menuQuitter) },
{ "AlgorithmesMenuAction", NULL, "Algorithmes", NULL, NULL, NULL },
{ "AideMenuAction", NULL, "Aide", NULL, NULL, NULL },
{ "AideAction", GTK_STOCK_HELP, "Aide", "<release>F1", "Aide", G_CALLBACK(menuAide) },
{ "AProposAction", GTK_STOCK_ABOUT, "_A propos", "<control>A" , "A Propos", NULL /*G_CALLBACK(menuAPropos)*/ }
};
static GtkRadioActionEntry radio_entries[] =
{
{ "PlusProcheVoisinAction", "TSP_PROCHE", "Plus Proche Voisin", NULL, "Plus Proche Voisin", 0},
{ "PlusProcheAdditionAction", "TSP_ADDITION", "Plus Proche Addition", NULL, "Plus Proche Addition" , 0 },
{ "InsertionMoindreCoutAction", "TSP_MOINDRE_COUT", "Insertion Moindre Cout", NULL, "Insertion Moindre Cout" , 0 },
{ "InsertionPlusLointaineAction", "TSP_PLUS_LOIN", "Insertion Plus Lointaine", NULL, "Insertion Plus Lointaine", 0 },
};
/* Initialisatio de GTK+ */
gtk_init(&argc, &argv);
/* Création de la fenetre */
pFenetre = gtk_window_new(GTK_WINDOW_TOPLEVEL);
/* création d'une structure pour les images */
static struct
{
gchar *nomFichier;
gchar *stockId;
} stockIcones[] =
{
{ "plusProche.png", "TSP_PROCHE" },
{ "plusAddition.png", "TSP_ADDITION" },
{ "moindreCout.png", "TSP_MOINDRE_COUT" },
{ "plusLoin.png", "TSP_PLUS_LOIN" }
};
static gint nbrIcones = G_N_ELEMENTS (stockIcones);
/* chargement des images */
factory = gtk_icon_factory_new();
int i;
for (i = 0 ; i < nbrIcones ; i++)
{
set = gtk_icon_set_new();
source = gtk_icon_source_new();
sprintf(chemin, "%s/", getcwd(chemin, sizeof(chemin)));
strcat(chemin, stockIcones[i].nomFichier);
gtk_icon_source_set_filename( source, chemin);
gtk_icon_set_add_source( set, source );
gtk_icon_source_free (source);
gtk_icon_factory_add( factory, stockIcones[i].stockId , set );
gtk_icon_set_unref (set);
}
gtk_icon_factory_add_default ( factory );
g_object_unref (factory);
/* Caractéristique de la fenetre principale */
gtk_window_set_position(GTK_WINDOW(pFenetre), GTK_WIN_POS_CENTER_ON_PARENT);
gtk_window_set_title(GTK_WINDOW(pFenetre), "Traveling Salesman Problem");
gtk_window_set_default_size(GTK_WINDOW(pFenetre), 800, 600);
gtk_window_set_resizable (GTK_WINDOW(pFenetre), TRUE);
gtk_window_iconify (GTK_WINDOW(pFenetre));
gtk_window_maximize (GTK_WINDOW(pFenetre));
g_signal_connect(G_OBJECT(pFenetre), "destroy", G_CALLBACK(gtk_main_quit), NULL);
/* Creation d'une vBox */
pBoite = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
gtk_container_add (GTK_CONTAINER (pFenetre), pBoite);
/* Creation du menu */
pActionGroupe = gtk_action_group_new ("menuActionGroupe");
gtk_action_group_add_actions (pActionGroupe, entries, G_N_ELEMENTS (entries), NULL);
gtk_action_group_add_radio_actions (pActionGroupe, radio_entries, G_N_ELEMENTS (radio_entries), 1, NULL, NULL);
puiManager = gtk_ui_manager_new ();
gtk_ui_manager_insert_action_group (puiManager, pActionGroupe, 0);
gtk_ui_manager_add_ui_from_file (puiManager, "menu.xml", NULL);
g_signal_connect (puiManager, "add_widget", G_CALLBACK (menuAjouterWidget), pBoite);
error = NULL;
gtk_ui_manager_add_ui_from_file (puiManager, "menu.xml", &error);
if (error)
{
g_message ("La construction du menu a merdé: %s", error->message);
g_error_free (error);
}
/* Ajout le menu et la barre d'outil à la vertical de la place. */
menubar = gtk_ui_manager_get_widget (puiManager, "/MenuPrincipal");
gtk_box_pack_start (GTK_BOX (pBoite), menubar, FALSE, FALSE, 0);
toolbar = gtk_ui_manager_get_widget (puiManager, "/BarreOutil");
gtk_box_pack_start (GTK_BOX (pBoite), toolbar, FALSE, FALSE, 0);
/* Autorise l'utilisation des raccourcis. */
gtk_window_add_accel_group (GTK_WINDOW (pFenetre), gtk_ui_manager_get_accel_group (puiManager));
/* Boucle principale */
gtk_widget_show_all(pFenetre);
gtk_main();
gtk_widget_destroy(pFenetre);
return EXIT_SUCCESS;
}
static void menuAjouterWidget (GtkUIManager * puiManager, GtkWidget * pWidget, GtkContainer * pBoite)
{
gtk_box_pack_start (GTK_BOX (pBoite), pWidget, FALSE, FALSE, 0);
gtk_widget_show (pWidget);
return;
}
static void menuNouveau (void)
{
GtkWidget *pDialogue = NULL;
pDialogue = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, "Nouveau");
gtk_dialog_run (GTK_DIALOG (pDialogue));
gtk_widget_destroy (pDialogue);
return;
}
static void menuOuvrir (void)
{
GtkWidget *pDialogue = NULL;
pDialogue = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, "Ouvrir");
gtk_dialog_run (GTK_DIALOG (pDialogue));
gtk_widget_destroy (pDialogue);
return;
}
static void menuQuitter (void)
{
gtk_main_quit ();
return;
}
static void menuAide (void)
{
GtkWidget *pDialogue = NULL;
pDialogue = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, "Aide");
gtk_dialog_run (GTK_DIALOG (pDialogue));
gtk_widget_destroy (pDialogue);
return;
} |
Partager