This is IFileIconButton.m in view mode; [Download] [Up]
#import "IFileIconButton.h" #import <appkit/Application.h> #import "IMMEditor.h" #import "Object1.h" #import <libc.h> // This object provides the icon for drag and drop from the editor. @implementation IFileIconButton static BOOL doubleClick; static NXEvent theEvent; // ## REWRITE! ## might be better to send a message than use extern extern HashTable *listOfTempFiles; - init { [super init]; return(self); } - mouseDown:(NXEvent *)event { switch(event->data.mouse.click) { case 1: // drag and drop current representation of selection doubleClick = NO; theEvent = *event; [self perform:@selector(singleClickAction:) with:nil afterDelay:200 cancelPrevious:YES]; break; case 2: // toggle between alternate representations for selection doubleClick = YES; [super mouseDown:event]; break; } return(self); } - (void)singleClickAction:dummy // execute drag and drop { const char *filename; char *copyOfFilename; NXRect rect; if (doubleClick == NO) { if ((filename = [[[self cell] target] getFilename:self]) != NULL) { copyOfFilename = NXCopyStringBuffer(filename); rect.origin.x = rect.origin.y = 0.0; rect.size.width = rect.size.height = 48.0; [self dragFile:filename fromRect:&rect slideBack:YES event:&theEvent]; [[[[self cell] target] text] setOwnerOfDraggedIconToMe:YES]; // ## REWRITE! ## very bad to use externs [listOfTempFiles insertKey:copyOfFilename value:nil]; [IFileIconButton perform:@selector(unlink:) with:(id)copyOfFilename afterDelay:600000 cancelPrevious:NO]; } } } + (void)unlink:filename // delete temporary files. Really messy since it is not possible to predict // when workspace manager is finish using the temporary files. { char command[512]; sprintf(command, "rm -r %.505s", (const char *)filename); system(command); [listOfTempFiles removeKey:filename]; free((char *)filename); } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.