This is FileManager.m in view mode; [Download] [Up]
#pragma .h #import <IconKit/iconkit.h>
#include <stdlib.h>
#include <string.h>
#import <AppKit/NSApplication.h>
#import <AppKit/NSWorkspace.h>
#import "File.h"
#import "FileManager.h"
#import "AppDelegate.h"
static int compare_names (const void * one, const void * two)
{
id A = * ((id *) one),
B = * ((id *) two);
return [[(IKFolder *)A name] compare:[(IKFolder *)B name] options:NSCaseInsensitiveSearch];
}
@implementation FileManager: IKBrowserManager
{
id window;
id shelf;
}
#define OFFSET 30
static int viewers = 0;
- init
{
if(self = [super init]) {
NSRect frame;
int dx = (viewers++ % 10) * OFFSET;
[NSBundle loadNibNamed:@"FileManager.nib" owner:self];
[shelf setClassToHold:@"File"];
[shelf addListener: [File class]];
[shelf setTarget:browser];
[shelf setAction:@selector(takePathFrom:)];
[shelf setDoubleAction:@selector(doDoubleClick:)];
[browser setAllowsBranchSelection:YES];
frame = [window frame];
frame.origin.x += dx;
frame.origin.y -= dx;
[window setFrameOrigin:frame.origin];
}
return self;
}
- (void)dealloc
{
[shelf removeListener:[File class]];
[window release];
window = nil;
[super dealloc];
}
- sort: (id *) files count: (int) n for: (int) column
{
qsort(files, n, sizeof(id), compare_names);
return self;
}
- browserDoubleClicked:sender
{
id file = [[[browser iconPath] selectedCell] delegate];
NSString *appName;
NSString *type;
[[NSWorkspace sharedWorkspace] getInfoForFile:[file path] application:&appName type:&type];
if([type isEqual:NSDirectoryFileType]) {
[self openFolder:sender];
} else {
[self openFile:sender];
}
return self;
}
- (void)openFile:(id)sender
{
NSRect frame;
id iconPath = [browser iconPath],
cell = [iconPath selectedCell],
file = [cell delegate];
frame = [iconPath cellFrameAtRow:0 column:[iconPath selectedColumn]];
frame = [cell imageRectForBounds:frame];
frame.origin.y += frame.size.height;
[[NSWorkspace sharedWorkspace] openFile: [file path]
fromImage: [file image]
at:frame.origin
inView: iconPath];
}
- (void)openFolder:(id)sender
{
id file = [[[browser iconPath] selectedCell] delegate];
id fileManager = [[FileManager alloc] init];
[fileManager setRoot:file];
[[[fileManager shelf] cellAtRow:0 column:0] setDelegate:file];
[[fileManager window] setTitleWithRepresentedFilename:[file path]];
[[fileManager window] makeKeyAndOrderFront:self];
}
- (void)windowWillClose:(NSNotification *)notification
{
[window setDelegate:nil];
[self autorelease];
}
- window
{
return window;
}
- browser
{
return browser;
}
- shelf
{
return shelf;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.