This is UIMgr.m in view mode; [Download] [Up]
// Written by Todd Thomas Copyright (c) 1995 by Todd Thomas.
// Version 1.0. All rights reserved.
//
// This notice may not be removed from this source code.
//
// This object is included in the MiscKit by permission from the author
// and its use is governed by the MiscKit license, found in the file
// "LICENSE.rtf" in the MiscKit distribution. Please refer to that file
// for a list of all applicable permissions and restrictions.
//
#import "Controller.h"
#import "UIMgr.h"
@implementation UIMgr
- init
{
[super init];
reloadBrowser = YES;
return self;
}
- allUsersClicked:sender
{
// The "Show all Users" button was clicked, so show them all in the
// browser.
[self clearStatusLine];
[controller loadAllUsers];
[browser setTitle: "All Users" ofColumn: 0];
// Set so when you click on a selection, we send ourselves a userSelected
// message.
[browser setAction: @selector(userSelected:)];
[browser loadColumnZero];
return self;
}
- allGroupsClicked:sender
{
// The "Show All Groups" button was clicked, so show them all in the
// browser.
[controller loadAllGroups];
[browser setTitle: "All Groups" ofColumn: 0];
// Set so when you click on a selection, we send a groupSelected message.
[browser setAction: @selector (groupSelected:)];
[browser loadColumnZero];
return self;
}
- gidEntered:sender
{
int gid = [sender intValue];
char tmp[100];
// A group's Gid was entered, so look it up and display it. If successful // the controller will set the actual fields in the UI (through us).
if ([controller lookupGid: gid] == NO)
{
[self setStatusLine: "No group exists for that Gid"];
// Easier to clear all fields and put back the entered one...
[self clearGroupInfo];
[self setGid: gid];
return self;
}
[self clearStatusLine];
sprintf (tmp, "Members of group %s", [self groupName]);
// Browser is loaded with users, so send a userSelected if cell selected.
[browser setAction: @selector (userSelected:)];
[browser setTitle: tmp ofColumn: 0];
[browser loadColumnZero];
return self;
}
- groupEntered:sender
{
char tmp[100];
if ([sender stringValue] == NULL)
return self;
// A group's name was entered, so look it up and display it.
if ([controller lookupGroupName: [sender stringValue] ] == NO)
{
[self setStatusLine: "No group matches that name."];
// Make a copy of the string before you clear the fields.
strcpy (tmp, [sender stringValue]);
[self clearGroupInfo];
[self setGroupName: tmp ];
return self;
}
[self clearStatusLine];
if (reloadBrowser == NO)
{
reloadBrowser = YES;
return self;
}
// The reloadBrowser stops this code from executing when the groups
// are already in the browser and you wish to click through them
// without having them all cleared if their members were to appear.
sprintf (tmp, "Members of group %s", [self groupName]);
[browser setAction: @selector(userSelected:)];
[browser setTitle: tmp ofColumn: 0];
[browser loadColumnZero];
return self;
}
- uidEntered:sender
{
int uid = [sender intValue];
char tmp[100];
// A user id was entered, so look it up and display it.
if ([controller lookupUid: uid] == NO)
{
[self setStatusLine: "There is no user with that Uid"];
[self clearUserInfo];
[self setUid: uid];
return self;
}
[self clearStatusLine];
sprintf (tmp, "%s's groups", [self username]);
// There are now groups in the browser, so if one is selected...
[browser setAction: @selector (groupSelected:)];
[browser setTitle: tmp ofColumn: 0];
[browser loadColumnZero];
return self;
}
- usernameEntered:sender
{
char tmp[100];
if ([sender stringValue] == NULL)
return self;
// A username was entered, so look it up.
if ([controller lookupUsername: [sender stringValue] ] == NO)
{
[self setStatusLine: "There is no user with that name"];
strcpy (tmp, [sender stringValue]);
[self clearUserInfo];
[self setUsername: tmp];
return self;
}
[self clearStatusLine];
if (reloadBrowser == NO)
{
reloadBrowser = YES;
return self;
}
// The reloadBrowser stops this code from executing when the users
// are already in the browser and you wish to click through them
// without having them all cleared by the user groups they belong to
// which normally would be displayed in the browser.
sprintf (tmp, "%s's groups", [self username]);
[browser setAction: @selector (groupSelected:)];
[browser setTitle: tmp ofColumn: 0];
[browser loadColumnZero];
return self;
}
// Methods for getting/setting values from the user interface.
- (const char *)username
{
return [ [userMatrix cellAt: 0 : 0] stringValue];
}
- setUsername: (const char *)uname
{
[ [userMatrix cellAt: 0 : 0] setStringValue: uname];
return self;
}
- setUid: (int)uid
{
[ [userMatrix cellAt: 1 : 0] setIntValue: uid];
return self;
}
- setFullName: (const char *)fname
{
[ [userMatrix cellAt: 2 : 0] setStringValue: fname];
return self;
}
- setHomeDirectory: (const char *)homeDir
{
[ [userMatrix cellAt: 3 : 0] setStringValue: homeDir];
return self;
}
- setShell: (const char *)shell
{
[ [userMatrix cellAt: 4 : 0] setStringValue: shell];
return self;
}
- clearUserInfo
{
int rows, cols;
int i;
[userMatrix getNumRows: &rows numCols: &cols];
for (i=0; i<rows; i++)
[ [userMatrix cellAt: i : 0] setStringValue: ""];
return self;
}
- (const char *)groupName
{
return [ [groupMatrix cellAt: 0 : 0] stringValue];
}
- setGroupName: (const char *)gname
{
[ [groupMatrix cellAt: 0 : 0] setStringValue: gname];
return self;
}
- setGid: (int)gid
{
[ [groupMatrix cellAt: 1 : 0] setIntValue: gid];
return self;
}
- clearGroupInfo
{
int rows, cols;
int i;
[groupMatrix getNumRows: &rows numCols: &cols];
for (i=0; i<rows; i++)
[ [groupMatrix cellAt: i : 0] setStringValue: ""];
return self;
}
- setStatusLine: (const char *)info
{
[status setStringValue: info];
return self;
}
- clearStatusLine
{
[self setStatusLine: ""];
return self;
}
@end
@implementation UIMgr (BrowserTarget)
- userSelected: sender
{
// This is called when there is a list of users in the browser and
// one of them was selected. reLoadBrowser is set to NO so the browser
// will not be overwritten with the user's groups.
reloadBrowser = NO;
[self setUsername: [sender stringValue] ];
// This assumes that the sender is the cell and contains only the
// username. If it changed, this would break.
[self usernameEntered: sender];
return self;
}
- groupSelected: sender
{
// This is called when there is a list of groups in the browser and
// one of them was selected. reloadBrowser is NO because we don't want
// the groupEntered method to fill the browser with the group's members.
reloadBrowser = NO;
[self setGroupName: [sender stringValue] ];
// Assumes that the sender's (the selected cell) string value is just
// a user group name.
[self groupEntered: sender];
return self;
}
@end
@implementation UIMgr (NibInitialization)
- awakeFromNib
{
// Wake me up and clear out status line and browser title.
[self clearStatusLine];
[browser setTitle: "" ofColumn: 0];
// When a cell is selected I want to know about it.
[browser setTarget: self];
// When you want to be loaded, let the controller know.
[browser setDelegate: controller];
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.