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