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