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
| #include <stdio.h>
#include "include.h"
int main (int argc, char *argv[])
{
GtkWidget *button = NULL;
GtkWidget *win = NULL;
GtkWidget *vbox = NULL;
GtkAccelGroup *pAccel;
void * param[10]; /* pour le passage des paramètres */
/* Definition des elements du menu */
/* menu */
GtkUIManager *menu_Manager;
GtkWidget *menubar;
/* Le menu complet, sans les boutons radio, mtout de même l'entrée du menu relative aux boutons radios : ModeDeTirage */
GtkActionEntry entrees_menu[] =
{
{"FichierMenuAction",NULL ,"Jeu" , NULL , NULL , NULL },
{"Quitter" ,GTK_STOCK_QUIT ,"Quitter" ,"<Control>Q","Finir la partie" , G_CALLBACK( cb_fin )},
{"AideMenuAction" ,NULL ,"Aide" , NULL , NULL , NULL },
{"Aide" ,GTK_STOCK_HELP ,"Aide" ,"<Shift>A" , NULL , G_CALLBACK( menu_aide )},
{"AproposAction" ,GTK_STOCK_ABOUT,"A propos" ,"<Alt>A" , NULL , G_CALLBACK( menu_a_propos )},
{"Licence" ,GTK_STOCK_INFO ,"Licence GPL" ,"<Release>L", NULL , G_CALLBACK( menu_licence )},
{"Tirage",NULL ,"Choix et spécification du tirage" },
{"ModeDeTirage",NULL ,"Mode de tirage" },
{"Minima",NULL ,"Mimima" }
};
/* Radio items */
static const GtkRadioActionEntry radio_entries[] = {
{ "_3D6" , "_3D6" , "_3 dès à 6 faces", NULL, "Tirages des caractéristiques avec 3 dès à 6 faces", _3D6 },
{ "_4D6" , "_4D6" , "_4 dès à 6 faces, 3 meilleurs", NULL, "Tirages des caractéristiques avec 4 dès à 6 faces, somme des 3 meilleurs", _4D6 },
{ "_5D6" , "_5D6" , "_5 dès à 6 faces, 3 meilleurs", NULL, "Tirages des caractéristiques avec 5 dès à 6 faces, somme des 3 meilleurs", _5D6 },
{ "_3D6x6", "_3D6x6", "_6 fois 3 dès à 6 faces, le meilleur", NULL, "Tirages des caractéristiques avec 6 fois 3 dès à 6 faces, on garde le meilleur", _3D6x6 },
{ "_4D5p3", "_4D5p3", "4 dès à 5 faces, 3 meilleurs _+ 3", NULL, "Tirages des caractéristiques avec 4 dès à 5 faces, somme des 3 meilleurs plus 3", _4D5p3 },
};
/* Toggle items */
static const GtkToggleActionEntry toggle_entries[] =
{ /* liste des paramètres fournie avec gtk_action_group_add_toggle_actions */
{ "guerrier", NULL, "_Guerrier", NULL, "Minima du guerrier", (GCallback)liste_guerrier,TRUE },
{ "paladin", NULL, "_Paladin", NULL, "Minima du paladin", (GCallback)liste_paladin, FALSE },
{ "ranger", NULL, "_Ranger", NULL, "Minima du ranger", (GCallback)liste_ranger, FALSE },
{ "voleur", NULL, "_Voleur", NULL, "Minima du voleur", (GCallback)liste_voleur, FALSE },
{ "barde", NULL, "_Barde", NULL, "Minima du barde", (GCallback)liste_barde, FALSE },
{ "pretre", NULL, "Prê_Tre", NULL, "Minima du prêtre", (GCallback)liste_pretre, FALSE },
{ "druide", NULL, "_Druide", NULL, "Minima du druide", (GCallback)liste_druide, FALSE },
{ "magicien", NULL, "_Magicien", NULL, "Minima du magicien", (GCallback)liste_magicien, FALSE },
{ "illusionniste", NULL, "_Illusionniste", NULL, "Minima de l'illusionniste ",(GCallback)liste_illusionniste, FALSE },
{ "autre", NULL, "_Autre", NULL, "Autre", NULL, FALSE }
};
static struct
{
gchar *filename;
gchar *stock_id;
} stock_icons[] =
{
{ "/home/bs/Documents/add/gtk/perso/3d6.png", "_3D6" },
{ "/home/bs/Documents/add/gtk/perso/4d6.png", "_4D6" },
{ "/home/bs/Documents/add/gtk/perso/5d6.png", "_5D6" },
{ "/home/bs/Documents/add/gtk/perso/3d6x6.png", "_3D6x6" },
};
static gint n_stock_icons = G_N_ELEMENTS (stock_icons);
GtkIconFactory *icon_factory;
GtkIconSet *icon_set;
GtkIconSource *icon_source;
gint i;
param[2]=(void *)radio_entries;
GtkActionGroup * p_actionGroup;
unsigned short fct[35]={1,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,1,2,3,4,5,6,7,8,1,0,0,0,0,0,0,0,0,0};
/* Le premier : mode de tirage, les 8 suivants : minima particuliers, les 8 suivants : ordre de préférence, guerrier, paladin,ranger, voleur, barde, prêtre, druide, magicien, illusionniste, autre */
GError * error;
/* paramètres à passer aux fonctions */
param[1]=(void *)fct;
/* Initialize GTK+ */
g_log_set_handler ("Gtk", G_LOG_LEVEL_WARNING, (GLogFunc) gtk_false, NULL);
gtk_init (&argc, &argv); /* initialisation GTK */
g_log_set_handler ("Gtk", G_LOG_LEVEL_WARNING, g_log_default_handler, NULL);
/* creation des icones */
icon_factory = gtk_icon_factory_new ();
for (i = 0; i < n_stock_icons; i++)
{
icon_set = gtk_icon_set_new ();
icon_source = gtk_icon_source_new ();
gtk_icon_source_set_filename (icon_source, stock_icons[i].filename);
gtk_icon_set_add_source (icon_set, icon_source);
gtk_icon_source_free (icon_source);
gtk_icon_factory_add (icon_factory, stock_icons[i].stock_id, icon_set);
gtk_icon_set_unref (icon_set);
}
gtk_icon_factory_add_default (icon_factory);
g_object_unref (icon_factory);
/* Create the main window */
win = gtk_window_new (GTK_WINDOW_TOPLEVEL); /* déclaration d'une fenêtre complète */
param[0]=(void *)win;
gtk_container_set_border_width (GTK_CONTAINER (win), 8);
gtk_window_set_title (GTK_WINDOW (win), "Tirage de personnages");
gtk_window_set_position (GTK_WINDOW (win), GTK_WIN_POS_CENTER);
gtk_widget_realize (win);
g_signal_connect (win, "destroy", gtk_main_quit, NULL);
/* icone */
if (!gtk_window_set_icon_from_file(GTK_WINDOW (win),"add.png",&error))
{ /* met une icone à la fenêtre */
traite_erreur(error);
free(error);
}
/* Create a vertical box with buttons */
vbox = gtk_vbox_new (TRUE, 6);
gtk_container_add (GTK_CONTAINER (win), vbox);
/* initialisation du menu */
p_actionGroup = gtk_action_group_new( "menuActionGroup" );
gtk_action_group_add_actions( p_actionGroup, entrees_menu, G_N_ELEMENTS( entrees_menu ), NULL );
/* boutons radio */
gtk_action_group_add_radio_actions (p_actionGroup, radio_entries, G_N_ELEMENTS (radio_entries), 1, (GCallback)print_selected, (gpointer) param);
/* cases à cocher */
gtk_action_group_add_toggle_actions (p_actionGroup, toggle_entries, G_N_ELEMENTS (toggle_entries), param);
/* déclaration de l'item menu */
menu_Manager = gtk_ui_manager_new ();
/******************************************************/
/* manipulation pour activer les raccourcis clavier */
pAccel = gtk_ui_manager_get_accel_group (menu_Manager); /* Création de l'AccelGroup à partir du GtkActionEntry */
gtk_window_add_accel_group (GTK_WINDOW (win), pAccel); /* Activation des raccourcis clavier à partir de l'AccelGroup */
/******************************************************/
gtk_ui_manager_add_ui_from_file(menu_Manager,"main.menu.xml",NULL);
gtk_ui_manager_insert_action_group( menu_Manager, p_actionGroup, 0 );
g_signal_connect(menu_Manager,"add_widget",G_CALLBACK( menu_addWidget ),GTK_CONTAINER(vbox));
menubar = gtk_ui_manager_get_widget (menu_Manager, "/MainMenu"); /* pour placer le menu devant ?? */
//g_signal_connect(G_OBJECT(p_actionGroup), "", G_CALLBACK(print_selected), (gpointer)param );
button = gtk_button_new_from_stock (GTK_STOCK_DIALOG_INFO);
g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (explication), (gpointer) win);
gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
button = gtk_button_new_from_stock (GTK_STOCK_APPLY); /*GTK_STOCK_DIALOG_INFO);*/
g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (tirage), (gpointer) param);
gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
button = gtk_button_new_from_stock (GTK_STOCK_CLOSE);
g_signal_connect (button, "clicked", gtk_main_quit, NULL);
gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
/* Enter the main loop */
gtk_widget_show_all (win);
gtk_main ();
//gtk_widget_destroy(win); /* destruction de le fenêtre */
return 0;
} |