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
|
#include<gtk/gtk.h>
#include<strings.h>
#include "lmem_menu.h"
/* Wrapper functions to extract callback_action from menu items */
static void lmem_Level_wrapper(GtkWidget *menu_item, GtkWidget *window)
{
guint callback_action = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(menu_item), "callback_action"));
lmem_Level(window, callback_action, menu_item);
}
static void lmem_Set_Option_wrapper(GtkWidget *menu_item, GtkWidget *window)
{
guint callback_action = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(menu_item), "callback_action"));
lmem_Set_Option(window, callback_action, menu_item);
}
static void lmem_Newgame_wrapper(GtkWidget *menu_item, GtkWidget *window)
{
lmem_Newgame(window, 1, menu_item);
}
void get_main_menu( GtkWidget *window,
GtkWidget **menubar )
{
GtkWidget *game_menu, *level_menu, *options_menu, *help_menu;
GtkWidget *game_item, *level_item, *options_item, *help_item;
GtkWidget *menu_item;
GtkAccelGroup *accel_group;
accel_group = gtk_accel_group_new ();
gtk_window_add_accel_group (GTK_WINDOW (window), accel_group);
*menubar = gtk_menu_bar_new ();
/* Game menu */
game_menu = gtk_menu_new ();
game_item = gtk_menu_item_new_with_mnemonic ("_Game");
gtk_menu_item_set_submenu (GTK_MENU_ITEM (game_item), game_menu);
gtk_menu_shell_append (GTK_MENU_SHELL (*menubar), game_item);
menu_item = gtk_menu_item_new_with_mnemonic ("_New");
g_signal_connect (menu_item, "activate",
G_CALLBACK (lmem_Newgame_wrapper), window);
gtk_widget_add_accelerator (menu_item, "activate", accel_group,
GDK_KEY_n, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
gtk_menu_shell_append (GTK_MENU_SHELL (game_menu), menu_item);
menu_item = gtk_separator_menu_item_new ();
gtk_menu_shell_append (GTK_MENU_SHELL (game_menu), menu_item);
menu_item = gtk_menu_item_new_with_label ("Quit");
g_signal_connect (menu_item, "activate",
G_CALLBACK (gtk_main_quit), NULL);
gtk_widget_add_accelerator (menu_item, "activate", accel_group,
GDK_KEY_q, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
gtk_menu_shell_append (GTK_MENU_SHELL (game_menu), menu_item);
/* Level menu */
level_menu = gtk_menu_new ();
level_item = gtk_menu_item_new_with_mnemonic ("_Level");
gtk_menu_item_set_submenu (GTK_MENU_ITEM (level_item), level_menu);
gtk_menu_shell_append (GTK_MENU_SHELL (*menubar), level_item);
menu_item = gtk_menu_item_new_with_label ("Little One");
g_object_set_data (G_OBJECT (menu_item), "callback_action", GINT_TO_POINTER(2));
g_signal_connect (menu_item, "activate",
G_CALLBACK (lmem_Level_wrapper), window);
gtk_menu_shell_append (GTK_MENU_SHELL (level_menu), menu_item);
menu_item = gtk_menu_item_new_with_label ("Beginner");
g_object_set_data (G_OBJECT (menu_item), "callback_action", GINT_TO_POINTER(3));
g_signal_connect (menu_item, "activate",
G_CALLBACK (lmem_Level_wrapper), window);
gtk_menu_shell_append (GTK_MENU_SHELL (level_menu), menu_item);
menu_item = gtk_menu_item_new_with_label ("Skilled");
g_object_set_data (G_OBJECT (menu_item), "callback_action", GINT_TO_POINTER(4));
g_signal_connect (menu_item, "activate",
G_CALLBACK (lmem_Level_wrapper), window);
gtk_menu_shell_append (GTK_MENU_SHELL (level_menu), menu_item);
menu_item = gtk_menu_item_new_with_label ("Master");
g_object_set_data (G_OBJECT (menu_item), "callback_action", GINT_TO_POINTER(5));
g_signal_connect (menu_item, "activate",
G_CALLBACK (lmem_Level_wrapper), window);
gtk_menu_shell_append (GTK_MENU_SHELL (level_menu), menu_item);
menu_item = gtk_menu_item_new_with_label ("Daemon");
g_object_set_data (G_OBJECT (menu_item), "callback_action", GINT_TO_POINTER(6));
g_signal_connect (menu_item, "activate",
G_CALLBACK (lmem_Level_wrapper), window);
gtk_menu_shell_append (GTK_MENU_SHELL (level_menu), menu_item);
/* Options menu */
options_menu = gtk_menu_new ();
options_item = gtk_menu_item_new_with_mnemonic ("_Options");
gtk_menu_item_set_submenu (GTK_MENU_ITEM (options_item), options_menu);
gtk_menu_shell_append (GTK_MENU_SHELL (*menubar), options_item);
menu_item = gtk_check_menu_item_new_with_label ("Match 3 Cards");
g_object_set_data (G_OBJECT (menu_item), "callback_action", GINT_TO_POINTER(7));
g_signal_connect (menu_item, "activate",
G_CALLBACK (lmem_Set_Option_wrapper), window);
gtk_menu_shell_append (GTK_MENU_SHELL (options_menu), menu_item);
menu_item = gtk_check_menu_item_new_with_label ("Different Cards");
g_object_set_data (G_OBJECT (menu_item), "callback_action", GINT_TO_POINTER(8));
g_signal_connect (menu_item, "activate",
G_CALLBACK (lmem_Set_Option_wrapper), window);
gtk_menu_shell_append (GTK_MENU_SHELL (options_menu), menu_item);
/* Help menu */
help_menu = gtk_menu_new ();
help_item = gtk_menu_item_new_with_mnemonic ("_Help");
gtk_menu_item_set_submenu (GTK_MENU_ITEM (help_item), help_menu);
gtk_menu_shell_append (GTK_MENU_SHELL (*menubar), help_item);
menu_item = gtk_menu_item_new_with_label ("How to play");
g_signal_connect (menu_item, "activate",
G_CALLBACK (lmem_rules), NULL);
gtk_menu_shell_append (GTK_MENU_SHELL (help_menu), menu_item);
menu_item = gtk_menu_item_new_with_label ("Options");
g_signal_connect (menu_item, "activate",
G_CALLBACK (lmem_option), NULL);
gtk_menu_shell_append (GTK_MENU_SHELL (help_menu), menu_item);
menu_item = gtk_separator_menu_item_new ();
gtk_menu_shell_append (GTK_MENU_SHELL (help_menu), menu_item);
menu_item = gtk_menu_item_new_with_label ("About");
g_signal_connect (menu_item, "activate",
G_CALLBACK (lmem_about), NULL);
gtk_menu_shell_append (GTK_MENU_SHELL (help_menu), menu_item);
}
|