]> Dogcows Code - chaz/thecheat/blob - AppController.m
update contact information and project URL
[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 NSDocumentController *controller = [NSDocumentController sharedDocumentController];
116 CheatDocument *doc = [controller makeUntitledDocumentOfType:@"Cheat Document"];
117 if ( !doc ) {
118 ChazLog( @"nil document" );
119 }
120 [doc setMode:TCSearchMode];
121 [controller addDocument:doc];
122 [doc makeWindowControllers];
123 [doc showWindows];
124 }
125
126 - (IBAction)newBlankCheatWindow:(id)sender
127 {
128 NSDocumentController *controller = [NSDocumentController sharedDocumentController];
129 CheatDocument *doc = [controller makeUntitledDocumentOfType:@"Cheat Document"];
130 if ( !doc ) {
131 ChazLog( @"nil document" );
132 }
133 [doc setMode:TCCheatMode];
134 [controller addDocument:doc];
135 [doc makeWindowControllers];
136 [doc showWindows];
137 }
138
139 - (IBAction)showAboutBoxWindow:(id)sender
140 {
141 if ( !_aboutBoxController ) {
142 _aboutBoxController = [[AboutBoxController alloc] init];
143 }
144 [_aboutBoxController showWindow:self];
145 }
146
147 - (IBAction)showPreferenceWindow:(id)sender
148 {
149 if ( !_preferenceController ) {
150 _preferenceController = [[PreferenceController alloc] init];
151 }
152 [_preferenceController showWindow:self];
153 }
154
155
156 - (IBAction)launchHelpFile:(id)sender
157 {
158 if ( !_helpController ) {
159 _helpController = [[HelpController alloc] init];
160 }
161 [_helpController showWindow:self];
162 }
163
164 - (IBAction)launchEmailMenu:(id)sender
165 {
166 LaunchEmail();
167 }
168
169 - (IBAction)launchWebsiteMenu:(id)sender
170 {
171 LaunchWebsite();
172 }
173
174
175 - (IBAction)checkForUpdate:(id)sender
176 {
177 ChazCheckForUpdate( TCUpdateCheckURL, YES );
178 }
179
180
181 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
182 #pragma mark CheatServer Stuff
183 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
184
185 - (CheatServer *)cheatServer
186 {
187 if ( !_server ) {
188 _server = [[CheatServer alloc] initWithDelegate:self];
189 }
190 return _server;
191 }
192
193 - (BOOL)startCheatServer
194 {
195 ChazLog( @"cheat server starting..." );
196
197 // start the server with saved settings
198 int port = [[NSUserDefaults standardUserDefaults] integerForKey:TCListenPortPref];
199 NSString *name = [[NSUserDefaults standardUserDefaults] objectForKey:TCBroadcastNamePref];
200 if ( [name isEqualToString:@""] ) {
201 name = nil;
202 }
203
204 // stop the cheat server if it's running
205 [self stopCheatServer];
206
207 // start the server
208 if ( [[self cheatServer] listenOnPort:port broadcast:name] ) {
209 [[NSNotificationCenter defaultCenter] postNotificationName:TCServerStartedNote object:[self cheatServer]];
210 return YES;
211 }
212 return NO;
213 }
214
215 - (void)stopCheatServer
216 {
217 if ( _server ) {
218 [_server stop];
219 [[NSNotificationCenter defaultCenter] postNotificationName:TCServerStoppedNote object:[self cheatServer]];
220 }
221 }
222
223
224 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
225 #pragma mark CheatServerDelegate
226 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
227
228 - (void)serverDisconnectedUnexpectedly:(CheatServer *)theServer
229 {
230 ChazLog( @"server disconnected unexpectedly." );
231 [self stopCheatServer];
232 }
233
234 - (void)server:(CheatServer *)theServer failedToBroadcastName:(NSString *)theName
235 {
236 NSBeginInformationalAlertSheet( @"The cheat server can not broadcast.", @"OK", nil, nil, [_preferenceController window], nil, NULL, NULL, NULL,
237 @"The Cheat can't broadcast as \"%@\" because that name is in use by another server. The server will continue running with broadcasting disabled.", theName );
238 }
239
240 - (void)serverChildrenChanged:(CheatServer *)theServer
241 {
242 [[NSNotificationCenter defaultCenter] postNotificationName:TCServerConnectionsChangedNote object:theServer];
243 }
244
245
246 @end
This page took 0.040252 seconds and 4 git commands to generate.