home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Nebula
/
nebula.bin
/
SourceCode
/
MiniExamples
/
ImageText
/
FileImage.m
< prev
next >
Wrap
Text File
|
1993-01-19
|
2KB
|
95 lines
// FileImage.h
// By Jayson Adams
// NeXT Strategic Developer Engineer
//
// You may freely copy, distribute and reuse the code in this example.
// NeXT disclaims any warranty of any kind, expressed or implied, as to its
// fitness for any particular use.
#import <libc.h> // for free()
#import <sys/param.h> // for MAXPATHLEN
#import <appkit/NXImage.h>
#import <appkit/Speaker.h>
#import <appkit/Listener.h>
#import <appkit/Panel.h> // for NXRunAlertPanel()
#import <appkit/Application.h>
#import "FileImage.h"
@implementation FileImage
- initForImage:anImage fileName:(const char *)name
{
[super init];
/* save our graphic image and the file we represent */
image = anImage;
fileName = NXCopyStringBuffer(name);
return self;
}
- free
{
free(fileName);
return [super free];
}
- readRichText:(NXStream *)stream forView:view
{
char stringBuffer[MAXPATHLEN], *currentPosition, nextChar,
*tiffBuffer;
int length, flag;
NXStream *imageStream;
/* get and remember the file name */
currentPosition = stringBuffer;
while ((nextChar = NXGetc(stream)) != '\n') {
*(currentPosition++) = nextChar;
}
*currentPosition = '\0';
fileName = NXCopyStringBuffer(stringBuffer);
/* ask the Workspace for its icon */
[[NXApp appSpeaker] setSendPort:NXPortFromName(NX_WORKSPACEREQUEST, NULL)];
[[NXApp appSpeaker] getFileIconFor:fileName TIFF:&tiffBuffer
TIFFLength:&length ok:&flag];
/* copy the image into our NXImage */
imageStream = NXOpenMemory(tiffBuffer, length, NX_READONLY);
image = [[NXImage alloc] initFromStream:imageStream];
NXCloseMemory(imageStream, NX_FREEBUFFER);
return self;
}
- writeRichText:(NXStream *)stream forView:view
{
/*
* for files, we write the file name; this isn't a robust solution since
* the file may not be present when the user reopens the RTF file
*/
NXPrintf(stream, "%s\n", fileName);
return self;
}
- performDoubleClickAction
{
int ok;
[[NXApp appSpeaker] setSendPort:NXPortFromName(NX_WORKSPACEREQUEST, NULL)];
[[NXApp appSpeaker] openFile:fileName ok:&ok];
if (!ok) {
NXRunAlertPanel(NULL, "Couldn't open %s", NULL, NULL, NULL, fileName);
}
return self;
}
@end