1 /*
2  * Maximum menu ID.
3  * IMPORTANT: see note in main-crb.c if you wish to add menus.
4  */
5 #define MAX_MENU_ID (150)
6 
7 /* These numbers must agree with the corresponding Menu ID in the nib. */
8 enum MenuID {
9 	kAngbandMenu	= 100,
10 	kFileMenu		= 101,
11 	kEditMenu		= 102,
12 	kStyleMenu		= 103,
13 	/* deleted */
14 	kWindowMenu		= 105,
15 	kSpecialMenu	= 106,
16 
17 	kTileWidMenu	= 107,
18 	kTileHgtMenu	= 108
19 };
20 
21 // Edit menu
22 enum {
23 	kCopy			= 1,	/* C, 'copy' */
24 	kSelectAll		= 2,	/* A, 'sall' */
25 	kUndo			= 3		/* Z, 'undo' */
26 };
27 
28 // File Menu
29 enum {
30 	kNew			= 1,	/* N, 'new' */
31 	kOpen			= 2,	/* O, 'open' */
32 	kImport			= 3,	/* I, 'impo' */
33 	/* \-p */
34 	kSave 			= 5,	/* S, 'save' */
35 	kClose			= 6,	/* W, 'clos' */
36 	/* \-p
37 	 setup
38 	  print
39 	 \-p */
40 };
41 
42 
43 // Window menu
44 enum {
45 	kZoomWindow 		= 1, /* Not used */
46 	kMinimize			= 2, /* Not used */
47 	kMinimizeAll		= 3, /* Not used */
48 	kAngbandTerm		= 5,
49 	kTerminal1			= 6,  /* Terminal ids are relative to Terminal 1 */
50 	/* ... */
51 	kBringToFront 		= 14
52 };
53 
54 // Special Menu
55 enum {
56 	/* kSound	 		= -1, Toggle sound */
57 	kWizard				= 1, /* Toggle wizard mode */
58 	kFiddle				= 2  /* Don't know what this is. */
59 };
60 
61 
62 
63 // Styles menu
64 enum {
65 	kFonts				= 1,
66 	kAntialias			= 2,
67 	kGrafNone			= 4,
68 	kGraf8x8			= 5,
69 	kGraf16x16			= 6,
70 	kGraf32x32			= 7,
71 	kGraf54x54			= 8,
72 	kInterpolate		= 10,
73 	kBigTile			= 11,
74 	kTileWidth			= 12,
75 	kTileHeight			= 13,
76 };
77 
78 
79 enum {
80 	// Event target are windows, not a menu.
81 	kWINDOW = -1
82 };
83 
84 
85 /* Opcodes for various events (OS X specific) */
86 
87 
88 /* Specifications for graphics modes.  */
89 /* graf_mode variable is index of current mode */
90 
91 static const struct {
92 	int menuItem;		// Index in Graphics Menu
93  	cptr file;			// Base name of png file (if any)
94 	cptr name;			// Value of ANGBAND_GRAF variable
95 	int size;			// Tile size (in pixels)
96 	bool trans;			// Use transparent foreground tiles
97 } graphics_modes [] = {
98 	{ kGrafNone,	NULL, 		NULL,		0,			false },
99 	{ kGraf8x8,		"8x8",		"old",		8,			false },
100 	{ kGraf16x16,	"16x16",	"new",		16,			true },
101 	{ kGraf32x32,	"32x32",	"david",	32,			true },
102 	{ kGraf54x54,	"54x54",	"davidiso",	54,			true },
103 };
104 
105 
106 /* Event handler specification */
107 struct CommandDef {
108 	int				evtClass; // Eventspec class - char-style constant eg 'quit'
109 	int				evtType;  // Eventspec type - enumeration
110 	EventHandlerUPP	handler;
111 	UInt32			targetID; // Menu target (0 if no target)
112 	void		  * userData; // Event user data (Not used currently)
113 };
114 typedef struct CommandDef CommandDef;
115 
116 #define HICOM kEventProcessCommand
117 #define KYDWN kEventRawKeyDown
118 #define KYRPT kEventRawKeyRepeat
119 #define CLICK kEventWindowHandleContentClick
120 #define WNUPD kEventWindowUpdate
121 #define WNRSZ kEventWindowResizeCompleted
122 #define WNDRG kEventWindowDragCompleted
123 
124 #define HANDLERDEF(func) \
125 		static OSStatus func(EventHandlerCallRef inHandlerCallRef, \
126 							 EventRef inEvent, \
127 						     void * inUserData )
128 
129 HANDLERDEF(CloseCommand);				HANDLERDEF(PrintCommand);
130 HANDLERDEF(QuitCommand);				HANDLERDEF(TileSizeCommand);
131 HANDLERDEF(FontCommand);				HANDLERDEF(RestoreCommand);
132 HANDLERDEF(ToggleCommand);				HANDLERDEF(TerminalCommand);
133 HANDLERDEF(GraphicsCommand);			HANDLERDEF(KeyboardCommand);
134 HANDLERDEF(MouseCommand);				HANDLERDEF(ResizeCommand);
135 HANDLERDEF(UpdateCommand);				HANDLERDEF(AboutCommand);
136 HANDLERDEF(ValidateMenuCommand);		HANDLERDEF(ResumeCommand);
137 HANDLERDEF(CommandCommand);				HANDLERDEF(AngbandGame);
138 
139 
140 
141 
142 /* WARNING: This list must be grouped by (func, userData) pairs */
143 
144 const CommandDef event_defs [] =
145 {
146 	{ 'font', kEventFontSelection,
147 						FontCommand,	 0, NULL }, // Change Font
148 	{ 'font', kEventFontPanelClosed,
149 						FontCommand,	 0, NULL }, // Menu state change
150 	{ 'appl',  kEventAppActiveWindowChanged,
151 						FontCommand,	 0, NULL }, // Store "true" focus
152 
153 	{ 'cmds', HICOM,	AboutCommand,	 kAngbandMenu, NULL},
154 	{ 'cmds', HICOM,	PrintCommand,	 kEditMenu, "Cheaters never win!"},
155 	{ 'cmds', HICOM,	TerminalCommand, kWindowMenu, NULL }, // Open a window
156 	{ 'cmds', HICOM,	ToggleCommand,	 kSpecialMenu, NULL}, // Toggle a bool
157 	{ 'cmds', HICOM,	ToggleCommand,	 kStyleMenu, NULL},
158 	{ 'cmds', HICOM,	TileSizeCommand, kTileWidMenu, NULL}, // Change tile wid
159 	{ 'cmds', HICOM,	TileSizeCommand, kTileHgtMenu, NULL}, // Change tile hgt
160 	{ 'cmds', HICOM,	GraphicsCommand, kStyleMenu, NULL}, // New Graf-mode
161 	{ 'cmds', HICOM,	CommandCommand,	 0,		NULL }, // Exec boring commands
162 	{ 'appl',  kEventAppQuit,
163 						QuitCommand,	 0,		NULL }, // Exit the game
164 
165 	{ 'keyb', KYDWN,	KeyboardCommand, 0,		NULL }, // Normal keyboard input
166 	{ 'keyb', KYRPT,	KeyboardCommand, 0,		NULL }, // Keyboard repeat
167 
168 	{ 'menu', kEventMenuEnableItems,
169 						ValidateMenuCommand, 0,	NULL }, // Reset menus
170 	{ 'wind', kEventWindowClose,
171 						CloseCommand,	 kWINDOW, NULL },
172 	{ 'wind', kEventWindowActivated,
173 						RestoreCommand,	 kWINDOW, NULL },
174 	{ 'wind', CLICK,	MouseCommand,	 kWINDOW, NULL },
175 	{ 'wind', WNUPD, 	UpdateCommand,	 kWINDOW, NULL },
176 
177 	{ 'wind', WNRSZ,	ResizeCommand,	 kWINDOW, NULL }, // Change window size
178 	{ 'wind', WNDRG,	ResizeCommand,	 kWINDOW, NULL }, // Change window size
179 	{ 'appl', kEventAppActivated,
180 						ResumeCommand,	 0,		NULL },
181 	{ 'Play', 'Band',	AngbandGame,	 0,		NULL }, // Start event dispatch
182 };
183 
184 /*
185  * Interpolate images when rescaling them
186  */
187 static bool interpolate = 0;
188 
189 /*
190  * Use antialiasing.  Without image differencing from
191  * OSX  10.4 features, you won't want to use this.
192  */
193 
194 static bool antialias = 0;
195 
196 static struct {
197 	bool *var;				// Value to toggle (*var = !*var)
198 	int menuID;				// Menu for this action (MenuRef would be better)
199 	int menuItem;			// Index of menu item for this acton
200 	bool refresh; 			// Change requires graphics refresh of main window.
201 } toggle_defs [] = {
202 	{ &interpolate, kStyleMenu,  kInterpolate, true},
203 	{ &antialias,	kStyleMenu,	kAntialias,	true}
204 };
205 
206