]> Dogcows Code - chaz/thecheat/blob - AppController.m
Remove support of Mac OS X 10.3 and earlier system, change codes for Mac OS X 10.7.
[chaz/thecheat] / AppController.m
1
2 /*
3 * The Cheat - The legendary universal game trainer for Mac OS X.
4 * http://www.brokenzipper.com/trac/wiki/TheCheat
5 *
6 * Copyright (c) 2003-2011, Charles McGarvey et al.
7 *
8 * Distributable under the terms and conditions of the 2-clause BSD
9 * license; see the file COPYING for the legal text of the license.
10 */
11
12 #import "AppController.h"
13
14 #import "CheatDocument.h"
15 #import "AboutBoxController.h"
16 #import "HelpController.h"
17 #import "PreferenceController.h"
18
19 @implementation AppController
20
21
22 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
23 #pragma mark Initialization
24 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
25
26
27 + (void)initialize
28 {
29 NSMutableDictionary *defaults = [NSMutableDictionary dictionary];
30
31 TCFirstLaunchPref = [[NSString stringWithFormat:@"TC%@%@Pref", ChazAppName(), ChazAppVersion()] retain];
32 NSString *broadcastName = [NSString stringWithFormat:@"%@'s Computer", NSFullUserName()];
33
34 // register user defaults
35 [defaults setObject:[NSNumber numberWithBool:NO] forKey:TCFirstLaunchPref];
36 [defaults setObject:[NSNumber numberWithBool:NO] forKey:TCWindowsOnTopPref];
37 [defaults setObject:[NSNumber numberWithBool:YES] forKey:TCUpdateCheckPref];
38 [defaults setObject:[NSNumber numberWithBool:YES] forKey:TCDisplayValuesPref];
39 [defaults setObject:[NSNumber numberWithFloat:1.0] forKey:TCValueUpdatePref];
40 [defaults setObject:[NSNumber numberWithInt:1000] forKey:TCHitsDisplayedPref];
41 [defaults setObject:[NSNumber numberWithBool:NO] forKey:TCRunServerPref];
42 [defaults setObject:broadcastName forKey:TCBroadcastNamePref];
43 [defaults setObject:[NSNumber numberWithInt:TCDefaultListenPort] forKey:TCListenPortPref];
44 [defaults setObject:[NSNumber numberWithFloat:gFadeAnimationDuration] forKey:TCFadeAnimationPref];
45 [defaults setObject:[NSNumber numberWithBool:YES] forKey:TCAskForSavePref];
46 [defaults setObject:[NSNumber numberWithBool:YES] forKey:TCSwitchVariablesPref];
47 [defaults setObject:[NSNumber numberWithBool:YES] forKey:TCAutoStartEditingVarsPref];
48
49 // register it
50 [[NSUserDefaults standardUserDefaults] registerDefaults:defaults];
51
52 // set globals
53 gFadeAnimationDuration = [[NSUserDefaults standardUserDefaults] floatForKey:TCFadeAnimationPref];
54 }
55
56 - (id)init
57 {
58 if ( self = [super init] ) {
59 [self setDelegate:self];
60 }
61
62 return self;
63 }
64
65
66 - (void)dealloc
67 {
68 ChazLog( @"AppController deallocated!!" );
69 [self stopCheatServer];
70 [super dealloc];
71 }
72
73 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
74 #pragma mark NSApplication Delegate
75 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
76
77 - (void)applicationDidFinishLaunching:(NSNotification *)aNotification
78 {
79 [NSApp activateIgnoringOtherApps:YES];
80
81 // check if this is the first launch
82 if ( ![[NSUserDefaults standardUserDefaults] boolForKey:TCFirstLaunchPref] ) {
83 // FIRST LAUNCH
84 [self showAboutBoxWindow:self];
85 [[NSUserDefaults standardUserDefaults] setBool:YES forKey:TCFirstLaunchPref];
86 }
87
88 // if should check for updates on launch
89 if ( [[NSUserDefaults standardUserDefaults] boolForKey:TCUpdateCheckPref] ) {
90 ChazCheckForUpdate( TCUpdateCheckURL, NO );
91 }
92
93 // automatically start the cheat server if the pref is set
94 if ( [[NSUserDefaults standardUserDefaults] boolForKey:TCRunServerPref] ) {
95 if ( ![self startCheatServer] ) {
96 // inform the user that the server won't start
97 NSRunAlertPanel( @"The Cheat could not start the server.",
98 @"The cheat server failed to start. Check the server settings and start it manually.",
99 @"OK", nil, nil );
100 // open server prefs
101 [self showPreferenceWindow:self];
102 [_preferenceController chooseServer:self];
103 }
104 }
105 }
106
107
108 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
109 #pragma mark Interface Actions
110 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
111
112
113 - (IBAction)newSearchWindow:(id)sender
114 {
115 NSError *error = nil;
116 NSDocumentController *controller = [NSDocumentController sharedDocumentController];
117 CheatDocument *doc = [controller makeUntitledDocumentOfType:@"Cheat Document" error:&error];
118 if ( !doc ) {
119 ChazLog( @"nil document, error=%@", error);
120 }
121 [doc setMode:TCSearchMode];
122 [controller addDocument:doc];
123 [doc makeWindowControllers];
124 [doc showWindows];
125 }
126
127 - (IBAction)newBlankCheatWindow:(id)sender
128 {
129 NSError *error = nil;
130 NSDocumentController *controller = [NSDocumentController sharedDocumentController];
131 CheatDocument *doc = [controller makeUntitledDocumentOfType:@"Cheat Document" error:&error];
132 if ( !doc ) {
133 ChazLog( @"nil document, error=%@", error);
134 }
135 [doc setMode:TCCheatMode];
136 [controller addDocument:doc];
137 [doc makeWindowControllers];
138 [doc showWindows];
139 }
140
141 - (IBAction)showAboutBoxWindow:(id)sender
142 {
143 if ( !_aboutBoxController ) {
144 _aboutBoxController = [[AboutBoxController alloc] init];
145 }
146 [_aboutBoxController showWindow:self];
147 }
148
149 - (IBAction)showPreferenceWindow:(id)sender
150 {
151 if ( !_preferenceController ) {
152 _preferenceController = [[PreferenceController alloc] init];
153 }
154 [_preferenceController showWindow:self];
155 }
156
157
158 - (IBAction)launchHelpFile:(id)sender
159 {
160 if ( !_helpController ) {
161 _helpController = [[HelpController alloc] init];
162 }
163 [_helpController showWindow:self];
164 }
165
166 - (IBAction)launchEmailMenu:(id)sender
167 {
168 LaunchEmail();
169 }
170
171 - (IBAction)launchWebsiteMenu:(id)sender
172 {
173 LaunchWebsite();
174 }
175
176
177 - (IBAction)checkForUpdate:(id)sender
178 {
179 ChazCheckForUpdate( TCUpdateCheckURL, YES );
180 }
181
182
183 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
184 #pragma mark CheatServer Stuff
185 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
186
187 - (CheatServer *)cheatServer
188 {
189 if ( !_server ) {
190 _server = [[CheatServer alloc] initWithDelegate:self];
191 }
192 return _server;
193 }
194
195 - (BOOL)startCheatServer
196 {
197 ChazLog( @"cheat server starting..." );
198
199 // start the server with saved settings
200 int port = [[NSUserDefaults standardUserDefaults] integerForKey:TCListenPortPref];
201 NSString *name = [[NSUserDefaults standardUserDefaults] objectForKey:TCBroadcastNamePref];
202 if ( [name isEqualToString:@""] ) {
203 name = nil;
204 }
205
206 // stop the cheat server if it's running
207 [self stopCheatServer];
208
209 // start the server
210 if ( [[self cheatServer] listenOnPort:port broadcast:name] ) {
211 [[NSNotificationCenter defaultCenter] postNotificationName:TCServerStartedNote object:[self cheatServer]];
212 return YES;
213 }
214 return NO;
215 }
216
217 - (void)stopCheatServer
218 {
219 if ( _server ) {
220 [_server stop];
221 [[NSNotificationCenter defaultCenter] postNotificationName:TCServerStoppedNote object:[self cheatServer]];
222 }
223 }
224
225
226 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
227 #pragma mark CheatServerDelegate
228 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
229
230 - (void)serverDisconnectedUnexpectedly:(CheatServer *)theServer
231 {
232 ChazLog( @"server disconnected unexpectedly." );
233 [self stopCheatServer];
234 }
235
236 - (void)server:(CheatServer *)theServer failedToBroadcastName:(NSString *)theName
237 {
238 NSBeginInformationalAlertSheet( @"The cheat server can not broadcast.", @"OK", nil, nil, [_preferenceController window], nil, NULL, NULL, NULL,
239 @"The Cheat can't broadcast as \"%@\" because that name is in use by another server. The server will continue running with broadcasting disabled.", theName );
240 }
241
242 - (void)serverChildrenChanged:(CheatServer *)theServer
243 {
244 [[NSNotificationCenter defaultCenter] postNotificationName:TCServerConnectionsChangedNote object:theServer];
245 }
246
247
248 @end
This page took 0.039826 seconds and 4 git commands to generate.