This is InfoController.m in view mode; [Download] [Up]
//** Craig Laurent
#import "InfoController.h"
#import "Converse.h" //** for prefDataMaster messages
#import "Preferences.h"
#import "User.h"
@implementation InfoController
- initWithPrefMaster:(Converse*)newMaster;
{
if (self = [super init]) {
infoPanel = nil;
preferencesPanel = nil;
[self setPrefDataMaster:newMaster];
return self;
}
return nil;
}
- init
{
return [self initWithPrefMaster:nil];
}
- (void)dealloc
{
if (infoPanel)
[infoPanel free];
if (preferencesPanel)
[preferencesPanel free];
[super dealloc];
}
- awakeFromNib
{
[self swapMessage:nil];
[self loadPref:nil];
return self;
}
/* showInfoPanel - load and display the info panel */
- showInfoPanel:sender
{
if (!infoPanel)
[NXApp loadNibSection:"InfoPanel.nib" owner:self withNames:YES fromZone:(NXZone*)[self zone]];
[infoPanel makeKeyAndOrderFront:self];
return self;
}
/* showPreferences - load and display the preferences panel */
- showPreferences:sender
{
if (!preferencesPanel)
[NXApp loadNibSection:"PreferencesPanel.nib" owner:self withNames:YES fromZone:(NXZone*)[self zone]];
[preferencesPanel makeKeyAndOrderFront:self];
return self;
}
- (Converse*)prefDataMaster
{ return prefDataMaster; }
- (void)setPrefDataMaster:(Converse*)newMaster
{
prefDataMaster = newMaster;
}
/* swapMessage: - change preference panel to show the Display information choices. */
- swapMessage:sender
{
[swapBox setContentView:[swapMessageBox contentView]];
[swapBox display];
return self;
}
/* swapUser: - change preference panel to show the User information choices. */
- swapUser:sender
{
[swapBox setContentView:[swapUserBox contentView]];
[swapBox display];
return self;
}
/* changeSoundFile: - change file to load sound from */
- changeSoundFile:sender
{
OpenPanel *oPanel = [OpenPanel new];
const char *types[] = {"snd", NULL};
const char *tempName;
//** get file to open
if ([oPanel runModalForDirectory:"~/Library/Sounds/" file:NULL types:types]) {
tempName = [oPanel filename];
if (tempName) {
[alertSoundField setStringValue:tempName];
}
}
return self;
}
/* changeAddressFile: - change file to load address from */
- changeAddressFile:sender
{
NSString *currentFile = nil;
NSString *currentDirectory = nil;
NSString *currentFilename = nil;
OpenPanel *oPanel = [OpenPanel new];
int openStatus;
const char *types[] = {"cvs", NULL};
const char *tempName;
//** change types in Converse as well!!
//** if filename exists, it should be complete: dir/file/ext
currentFile = [prefDataMaster filename];
currentDirectory = [currentFile stringByDeletingLastPathComponent];
currentFilename = [currentFile lastPathComponent];
//** get file to open
if (currentFile)
openStatus = [oPanel runModalForDirectory:[currentDirectory cString] file:[currentFilename cString] types:types];
else
openStatus = [oPanel runModalForTypes:types];
if (openStatus) {
tempName = [oPanel filename];
if (tempName) {
[defaultAddressField setStringValue:tempName];
}
}
return self;
}
- emptyAddressFile:sender
{
[defaultAddressField setStringValue:NULL];
return self;
}
/* updateNickname: - update nickname to reflect display prefs. */
- updateNickname:sender
{
NSString *nickname;
nickname = [[prefDataMaster userInfo] userNicknameWithID:[userIDCheck state] andName:[realNameCheck state] andMachine:[machineNameCheck state]];
[nicknameField setStringValue:[nickname cString]];
return self;
}
/* changeTextEnable: - change the editable status for the User information. Reverse from current. eg if editable make not-editable. */
- changeTextEnable:sender
{
BOOL editStatus;
//** set editStatus to opposite of what it is currently.
//** use this value to set status to it's opposite.
editStatus = ! ([userIDField isEditable]);
//** change editability
[userIDField setEditable:editStatus];
[realNameField setEditable:editStatus];
[machineNameField setEditable:editStatus];
//** if setting to editable, highlight UserId
//** else, in order to remove cursor from uneditable fields,
//** must disable and then re-enable the fields.
if (editStatus) {
[userIDField selectText:self];
}
else {
[userIDField setEnabled:NO];
[realNameField setEnabled:NO];
[machineNameField setEnabled:NO];
[userIDField setEnabled:YES];
[realNameField setEnabled:YES];
[machineNameField setEnabled:YES];
}
return self;
}
/* loadPref: - display preference panel information from the Preference and User Objects. */
- loadPref:sender
{
//** load Preferences to the screen
id userData;
id prefData;
userData = [[self prefDataMaster] userInfo];
prefData = [[self prefDataMaster] prefs];
//** load MessageBox
[alertAudibleCheck setState:[prefData alertAudio]];
[alertIconCheck setState:[prefData alertIcon]];
[alertWindowCheck setState:[prefData alertWindow]];
[alertApplicationCheck setState:[prefData alertApplication]];
[alertSoundField setStringValue:[[prefData soundFile] cString]];
[defaultAddressField setStringValue:[[prefData addressFile] cString]];
//** load UserBox
[userIDField setStringValue:[[userData userID] cString]];
[realNameField setStringValue:[[userData userName] cString]];
[machineNameField setStringValue:[[userData userMachine] cString]];
[userIDCheck setState:[prefData discloseID]];
[realNameCheck setState:[prefData discloseName]];
[machineNameCheck setState:[prefData discloseMachine]];
[self updateNickname:nil];
return self;
}
/* savePref: - save preference panel information from the screen to the Preference and User Objects. */
- savePref:sender
{
//** save Prefs from the screen
id userData;
id prefData;
userData = [prefDataMaster userInfo];
prefData = [prefDataMaster prefs];
//** save MessageBox
[prefData setAlertAudio:[alertAudibleCheck state]];
[prefData setAlertIcon:[alertIconCheck state]];
[prefData setAlertWindow:[alertWindowCheck state]];
[prefData setAlertApplication:[alertApplicationCheck state]];
//** set soundFile if one entered
if ([alertSoundField stringValue])
[prefData setSoundFile:[NSString stringWithCString:[alertSoundField stringValue]]];
else
[prefData setSoundFile:nil];
//** set addressFile if one entered
if ([defaultAddressField stringValue])
[prefData setAddressFile:[NSString stringWithCString:[defaultAddressField stringValue]]];
else
[prefData setAddressFile:nil];
//** save UserBox
[userData setUserID:[NSString stringWithCString:[userIDField stringValue]]];
[userData setUserName:[NSString stringWithCString:[realNameField stringValue]]];
[userData setUserMachine:[NSString stringWithCString:[machineNameField stringValue]]];
[prefData setDiscloseID:[userIDCheck state]];
[prefData setDiscloseName:[realNameCheck state]];
[prefData setDiscloseMachine:[machineNameCheck state]];
[prefData savePreferences];
//** must set the sound in the controller
[prefDataMaster setMsgSoundWithName:[[prefData soundFile] cString]];
[prefDataMaster refreshAddress]; //** update address list
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.