-// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-// Project: The Cheat
-//
-// File: PreferenceController.m
-// Created: Wed Sep 24 2003
-//
-// Copyright: 2003 Chaz McGarvey. All rights reserved.
-// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+/*
+ * The Cheat - The legendary universal game trainer for Mac OS X.
+ * http://www.brokenzipper.com/trac/wiki/TheCheat
+ *
+ * Copyright (c) 2003-2011, Charles McGarvey et al.
+ *
+ * Distributable under the terms and conditions of the 2-clause BSD
+ * license; see the file COPYING for the legal text of the license.
+ */
#import "PreferenceController.h"
@implementation PreferenceController
-- (id)initWithDelegate:(id)del
+- (id)init
{
if ( self = [super initWithWindowNibName:@"Preferences"] )
{
[self setWindowFrameAutosaveName:@"TCPreferencWindowPosition"];
-
- delegate = del;
}
-
return self;
}
+- (void)dealloc
+{
+ [_toolbar release];
+ [_contentView release];
+ [super dealloc];
+}
+
+
- (void)windowDidLoad
{
+ _toolbar = [[NSToolbar alloc] initWithIdentifier:@"TCPreferencesToolbar"];
+ [_toolbar setDelegate:self];
+ [_toolbar setVisible:YES];
+ [[self window] setToolbar:_toolbar];
+
+ _contentView = [[[self window] contentView] retain];
+
[self initialInterfaceSetup];
- [self interfaceUpdate];
}
- (void)initialInterfaceSetup
{
- [playSoundsButton setState:(TCGlobalPlaySounds)? NSOnState:NSOffState];
- [windowsOnTopButton setState:(TCGlobalWindowsOnTop)? NSOnState:NSOffState];
- [allowRemoteButton setState:(TCGlobalAllowRemote)? NSOnState:NSOffState];
- [listenPortTextField setIntValue:TCGlobalListenPort];
- [broadcastNameTextField setStringValue:[[NSUserDefaults standardUserDefaults] objectForKey:TCBroadcastNamePref]];
+ [self chooseGeneral:self];
}
-- (void)interfaceUpdate
+
+- (void)chooseGeneral:(id)object
{
- if ( TCGlobalAllowRemote )
- {
- [listenPortTextField setEnabled:YES];
- [broadcastNameTextField setEnabled:YES];
- }
- else
- {
- [listenPortTextField setEnabled:NO];
- [broadcastNameTextField setEnabled:NO];
+ NSWindow *window = [self window];
+ [self switchToView:ibGeneralView];
+ [window setTitle:@"General"];
+ if ( MacOSXVersion() >= 0x1030 ) {
+ [_toolbar setSelectedItemIdentifier:@"General"];
}
}
-
-- (IBAction)playSoundsButton:(id)sender
+- (void)chooseServer:(id)object
{
- if ( [playSoundsButton state] == NSOnState )
- {
- TCGlobalPlaySounds = YES;
- [[NSUserDefaults standardUserDefaults] setBool:YES forKey:TCPlaySoundsPref];
- }
- else
- {
- TCGlobalPlaySounds = NO;
- [[NSUserDefaults standardUserDefaults] setBool:NO forKey:TCPlaySoundsPref];
+ NSWindow *window = [self window];
+ [self switchToView:ibServerView];
+ [window setTitle:@"Server"];
+ if ( MacOSXVersion() >= 0x1030 ) {
+ [_toolbar setSelectedItemIdentifier:@"Server"];
}
}
-- (IBAction)windowsOnTopButton:(id)sender
+- (void)chooseUpdate:(id)object
{
- if ( [windowsOnTopButton state] == NSOnState )
- {
- TCGlobalWindowsOnTop = YES;
- [[NSUserDefaults standardUserDefaults] setBool:YES forKey:TCWindowsOnTopPref];
- }
- else
- {
- TCGlobalWindowsOnTop = NO;
- [[NSUserDefaults standardUserDefaults] setBool:NO forKey:TCWindowsOnTopPref];
+ NSWindow *window = [self window];
+ [self switchToView:ibUpdateCheckView];
+ [window setTitle:@"Update Check"];
+ if ( MacOSXVersion() >= 0x1030 ) {
+ [_toolbar setSelectedItemIdentifier:@"Update Check"];
}
-
- [[NSNotificationCenter defaultCenter] postNotificationName:@"TCWindowsOnTopChanged" object:nil];
}
-- (IBAction)allowRemoteButton:(id)sender
+- (void)switchToView:(NSView *)view
{
- if ( [allowRemoteButton state] == NSOnState )
- {
- TCGlobalAllowRemote = YES;
- [[NSUserDefaults standardUserDefaults] setBool:YES forKey:TCAllowRemotePref];
- }
- else
- {
- TCGlobalAllowRemote = NO;
- [[NSUserDefaults standardUserDefaults] setBool:NO forKey:TCAllowRemotePref];
+ NSWindow *window = [self window];
+ NSRect frame = [window frame];
+ float xdif, ydif;
+
+ if ( view == [window contentView] ) {
+ return;
}
+
+ xdif = [view frame].size.width - [[window contentView] frame].size.width;
+ ydif = [view frame].size.height - [[window contentView] frame].size.height;
+
+ frame.size.width += xdif;
+ frame.size.height += ydif;
+ frame.origin.y -= ydif;
+
+ // switch to the new view
+ [window setContentView:_contentView];
+ [window setFrame:frame display:YES animate:YES];
+ [window setContentView:view];
+ [window makeFirstResponder:view];
+}
- [self interfaceUpdate];
- [delegate preferenceAllowRemoteChanged:TCGlobalAllowRemote];
+- (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdentifier willBeInsertedIntoToolbar:(BOOL)flag
+{
+ NSToolbarItem *item = [[NSToolbarItem alloc] initWithItemIdentifier:itemIdentifier];
+
+ [item setLabel:itemIdentifier];
+ [item setPaletteLabel:itemIdentifier];
+ [item setImage:[NSImage imageNamed:itemIdentifier]];
+ [item setTarget:self];
+ [item setAction:NSSelectorFromString( [NSString stringWithFormat:@"choose%@:", itemIdentifier] )];
+
+ return [item autorelease];
}
-- (IBAction)listenPortTextField:(id)sender
+- (NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar*)toolbar
{
- TCGlobalListenPort = [listenPortTextField intValue];
-
- [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInt:TCGlobalListenPort] forKey:TCListenPortPref];
-
- [delegate preferenceListenPortChanged:TCGlobalListenPort];
+ return [NSArray arrayWithObjects:@"General", @"Update", @"Server", nil];
}
-- (IBAction)broadcastNameTextField:(id)sender
+- (NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar*)toolbar
{
- NSString *name = [broadcastNameTextField stringValue];
-
- [[NSUserDefaults standardUserDefaults] setObject:name forKey:TCBroadcastNamePref];
+ return [NSArray arrayWithObjects:@"General", @"Update", @"Server", nil];
+}
- [delegate preferenceBroadcastNameChanged:name];
+- (NSArray *)toolbarSelectableItemIdentifiers:(NSToolbar *)toolbar
+{
+ return [NSArray arrayWithObjects:@"General", @"Update", @"Server", nil];
}
-@end
\ No newline at end of file
+@end