1/* 2 Project: Sudoku 3 main.m 4 5 Copyright (C) 2007-2011 The Free Software Foundation, Inc 6 7 Author: Marko Riedel 8 9 This application is free software; you can redistribute it and/or 10 modify it under the terms of the GNU General Public 11 License as published by the Free Software Foundation; either 12 version 3 of the License, or (at your option) any later version. 13 14 This application is distributed in the hope that it will be useful, 15 but WITHOUT ANY WARRANTY; without even the implied warranty of 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 17 Library General Public License for more details. 18 19 You should have received a copy of the GNU General Public 20 License along with this library; if not, write to the Free 21 Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 22*/ 23 24#import <Foundation/Foundation.h> 25#import <AppKit/AppKit.h> 26 27#import "Controller.h" 28 29#ifdef __MINGW__ 30#define srand48 srand 31#endif 32 33time_t time(time_t *t); 34 35int main(int argc, const char **argv, char** env) 36{ 37 NSAutoreleasePool *pool; 38 NSApplication *app; 39 NSMenu *mainMenu, *menu; 40 NSMenuItem *menuItem; 41 NSMenu *file; 42 Controller *controller; 43 44 pool = [NSAutoreleasePool new]; 45 app = [NSApplication sharedApplication]; 46 47 // 48 // Create the Menu 49 // 50 51 52 53 // Main Menu 54 mainMenu = AUTORELEASE ([NSMenu new]); 55 56 // Info SubMenu 57 menuItem = (NSMenuItem *)[mainMenu addItemWithTitle: @"Info" 58 action: NULL 59 keyEquivalent: @""]; 60 menu = AUTORELEASE ([NSMenu new]); 61 [mainMenu setSubmenu: menu forItem: menuItem]; 62 [menu addItemWithTitle: @"Info Panel..." 63 action: @selector (orderFrontStandardInfoPanel:) 64 keyEquivalent: @""]; 65 [menu addItemWithTitle: @"Preferences..." 66 action: @selector (runPreferencesPanel:) 67 keyEquivalent: @""]; 68 [menu addItemWithTitle: @"Help..." 69 action: @selector (orderFrontHelpPanel:) 70 keyEquivalent: @"?"]; 71 72 // Create the file submenu 73 file = [NSMenu new]; 74 75 menuItem = (NSMenuItem *)[mainMenu addItemWithTitle: @"File" 76 action: NULL 77 keyEquivalent: @""]; 78 [mainMenu setSubmenu:file forItem: menuItem]; 79 80 [file addItemWithTitle: @"Open Document" 81 action: @selector(openDocument:) 82 keyEquivalent: @"o"]; 83 84 [file addItemWithTitle: @"Save" 85 action: @selector(saveDocument:) 86 keyEquivalent: @"s"]; 87 88 [file addItemWithTitle: @"Save To..." 89 action: @selector(saveDocumentTo:) 90 keyEquivalent: @"t"]; 91 92 [file addItemWithTitle: @"Save All" 93 action: @selector(saveDocumentAll:) 94 keyEquivalent: @""]; 95 96 [file addItemWithTitle: @"Revert to Saved" 97 action: @selector(revertDocumentToSaved:) 98 keyEquivalent: @"u"]; 99 100 [file addItemWithTitle: @"Close" 101 action: @selector(close) 102 keyEquivalent: @""]; 103 104 RELEASE(file); 105 106 // create new game menu 107 menuItem = (NSMenuItem *)[mainMenu addItemWithTitle: @"New game" 108 action: NULL 109 keyEquivalent: @""]; 110 menu = AUTORELEASE ([NSMenu new]); 111 [mainMenu setSubmenu:menu forItem: menuItem]; 112 113 [[menu addItemWithTitle: _(@"20 clues") 114 action: @selector(newPuzzle:) 115 keyEquivalent: @""] setTag:MENU_NEW_20CLUES]; 116 117 [[menu addItemWithTitle: _(@"25 clues") 118 action: @selector(newPuzzle:) 119 keyEquivalent: @"n"] setTag:MENU_NEW_25CLUES]; 120 121 [[menu addItemWithTitle: _(@"30 clues") 122 action: @selector(newPuzzle:) 123 keyEquivalent: @""] setTag:MENU_NEW_30CLUES]; 124 125 [[menu addItemWithTitle: _(@"35 clues") 126 action: @selector(newPuzzle:) 127 keyEquivalent: @""] setTag:MENU_NEW_35CLUES]; 128 129 [[menu addItemWithTitle: _(@"48 clues") 130 action: @selector(newPuzzle:) 131 keyEquivalent: @""] setTag:MENU_NEW_48CLUES]; 132 133 [[menu addItemWithTitle: _(@"60 clues") 134 action: @selector(newPuzzle:) 135 keyEquivalent: @""] setTag:MENU_NEW_60CLUES]; 136 137 [[menu addItemWithTitle: _(@"70 clues") 138 action: @selector(newPuzzle:) 139 keyEquivalent: @""] setTag:MENU_NEW_70CLUES]; 140 141 // Reset puzzle 142 [mainMenu addItemWithTitle: @"Reset Puzzle" 143 action: @selector (resetPuzzle:) 144 keyEquivalent: @""]; 145 146 // Load solution 147 [mainMenu addItemWithTitle: @"Load solution" 148 action: @selector (solvePuzzle:) 149 keyEquivalent: @""]; 150 151 // Enter puzzle 152 [mainMenu addItemWithTitle: @"Enter Puzzle" 153 action: @selector (enterPuzzle:) 154 keyEquivalent: @""]; 155 156 // Hide MenuItem 157 [mainMenu addItemWithTitle: @"Hide" 158 action: @selector (hide:) 159 keyEquivalent: @"h"]; 160 161 // Quit MenuItem 162 [mainMenu addItemWithTitle: @"Quit" 163 action: @selector (terminate:) 164 keyEquivalent: @"q"]; 165 166 [app setMainMenu: mainMenu]; 167 168 srand48(time(NULL)); 169 170 controller = [Controller new]; 171 [app setDelegate: controller]; 172 173 NSApplicationMain(argc, argv); 174 175 [[NSUserDefaults standardUserDefaults] synchronize]; 176 177 RELEASE (controller); 178 RELEASE (pool); 179 return 0; 180} 181 182