File: programming/cocoa/UKSyntaxColoredTextDocument.zip/UKSyntaxColoredTextDocument/UKSCTDUserIdentifiersPrefsController.m


//
//  UKSCTDUserIdentifiersPrefsController.m
//  UKSyntaxColoredDocument
//
//  Created by Uli Kusterer on Sat May 15 2004.
//  Copyright (c) 2004 M. Uli Kusterer. All rights reserved.
//
 
// -----------------------------------------------------------------------------
//	Headers:
// -----------------------------------------------------------------------------
 
#import "UKSCTDUserIdentifiersPrefsController.h"
#import "UKSyntaxColoredTextDocument.h"
 
 
@implementation UKSCTDUserIdentifiersPrefsController
 
// -----------------------------------------------------------------------------
//	* CONSTRUCTOR:
//
//	REVISIONS:
//		2004-05-18	witness	Documented.
// -----------------------------------------------------------------------------
 
-(id) init
{
	self = [super init];
	if( self )
	{
		identifiers = nil;  // Is instantiated lazily when we need it.
	}
	
	return self;
}
 
 
// -----------------------------------------------------------------------------
//	* DESTRUCTOR:
//
//	REVISIONS:
//		2004-05-18	witness	Documented.
// -----------------------------------------------------------------------------
 
-(void) dealloc
{
    [identifiers release];
    identifiers = nil;
 
    [super dealloc];
}
 
 
// -----------------------------------------------------------------------------
//	awakeFromNib:
//		Make sure GUI looks right after it's been loaded.
//
//	REVISIONS:
//		2004-05-18	witness	Documented.
// -----------------------------------------------------------------------------
 
-(void) awakeFromNib
{
	[self tableViewSelectionDidChange:nil]; // Make sure "remove" button looks right.
}
 
 
// -----------------------------------------------------------------------------
//	createNewIdentifier:
//		Action for "Add Identifier" button. Creates a new untitled identifier
//		entry that the user can then edit.
//
//	REVISIONS:
//		2004-05-18	witness	Documented.
// -----------------------------------------------------------------------------
 
-(IBAction) createNewIdentifier: (id)sender
{
	[[self identifiers] addObject: NSLocalizedString(@"untitled", nil)];
	int		theRow = [[self identifiers] count] -1;
 
	[identifiersList noteNumberOfRowsChanged];
	
	[identifiersList selectRow: theRow byExtendingSelection: NO];
	[identifiersList editColumn: 0 row: theRow withEvent: nil select: YES];
}
 
 
// -----------------------------------------------------------------------------
//	deleteIdentifier:
//		Action for "Remove Identifier" button. Removes the selected identifier
//		from the list and the user defaults.
//
//	REVISIONS:
//		2004-05-18	witness	Documented.
// -----------------------------------------------------------------------------
 
-(IBAction) deleteIdentifier: (id)sender
{
	[identifiers removeObjectAtIndex: [identifiersList selectedRow]];
	[identifiersList noteNumberOfRowsChanged];
 
	[[NSUserDefaults standardUserDefaults] setObject: [self identifiers]
		forKey: TD_USER_DEFINED_IDENTIFIERS];
}
 
 
// -----------------------------------------------------------------------------
//	identifiers:
//		Return and, if needed, lazily instantiate our array of user-defined
//		identifiers.
//
//	REVISIONS:
//		2004-05-18	witness	Documented.
// -----------------------------------------------------------------------------
 
-(NSMutableArray*)  identifiers
{
	if( !identifiers )
	{
		identifiers = [[[NSUserDefaults standardUserDefaults] objectForKey: TD_USER_DEFINED_IDENTIFIERS] mutableCopy];
		if( !identifiers )
			identifiers = [[NSMutableArray alloc] init];
	}
	
	return identifiers;
}
 
 
// -----------------------------------------------------------------------------
//	Table view data source methods:
// -----------------------------------------------------------------------------
 
-(int)  numberOfRowsInTableView:(NSTableView *)tableView
{
	return [[self identifiers] count];
}
 
 
-(void) tableViewSelectionDidChange:(NSNotification *)notification
{
	[removeButton setEnabled: ([identifiersList selectedRow] != -1)];   // Make sure "remove" button is only enabled if we have a selection.
}
 
 
-(id)   tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(int)row
{
	return [[self identifiers] objectAtIndex: row];
}
 
 
-(void) tableView:(NSTableView *)tableView setObjectValue:(id)object forTableColumn:(NSTableColumn *)tableColumn row:(int)row
{
	[identifiers replaceObjectAtIndex: row withObject: object];
	
	[[NSUserDefaults standardUserDefaults] setObject: [self identifiers]
		forKey: TD_USER_DEFINED_IDENTIFIERS];
}
 
 
 
@end

This code uses the PclZip Zip File reading code, which is subject to the GNU LGPL. It also uses the GeSHi syntax highlighter, subject to the GPL. Ask if you want this for your own web site, it's free.