This is MailReader.m in view mode; [Download] [Up]
/* -*-C-*-
*******************************************************************************
*
* File: MailReader.m
* RCS: $Header: /usr/local/lib/cvs/EnhanceMail/MailReader.m,v 1.1.1.17 1996/04/14 16:59:41 cedman Exp $
* Description:
* Author: Carl Edman
* Created: Fri Oct 13 11:48:05 1995
* Modified: Sat Apr 13 19:09:44 1996 (Carl Edman) cedman@capitalist.princeton.edu
* Language: C
* Package: N/A
* Status: Experimental (Do Not Distribute)
*
* (C) Copyright 1995, but otherwise this file is perfect freeware.
*
*******************************************************************************
*/
#import "EnhanceMail.h"
#import "MailReader.h"
#import "MailBox.h"
#import "XFace.h"
#import "XImageURL.h"
#import "Preferences.h"
#define MENU_MESSAGE_FLAG NXLocalizedStringFromTableInBundle("Localizable", EnhanceBundle, "Message/Flag", NULL, Slashed menu path to flag command)
#define MENU_MESSAGE_STRIP NXLocalizedStringFromTableInBundle("Localizable", EnhanceBundle, "Message/Strip", NULL, Slashed menu path to strip command)
#define MENU_MAILBOX_INDEX NXLocalizedStringFromTableInBundle("Localizable", EnhanceBundle, "Mailbox/Index", NULL, Slashed menu path to create index command)
#define MENU_MAILBOX_UNINDEX NXLocalizedStringFromTableInBundle("Localizable", EnhanceBundle, "Mailbox/Delete index", NULL, Slashed menu path to remove index command)
static id index_menucell=nil;
static id indextag_image=nil;
@implementation EnhanceMailReader
+ finishLoading:(struct mach_header *)header
{
char path[MAXPATHLEN+1];
if (EnhanceBundle==0) EnhanceBundle=[NXBundle bundleForClass:[self class]];
[self poseAs:[self superclass]];
[[NXApp mainMenu] addSlashItem:MENU_MESSAGE_FLAG action:@selector(toggleFlagged:) keyEquivalent:0];
#if 0
[[NXApp mainMenu] addSlashItem:MENU_MESSAGE_STRIP action:@selector(strip:) keyEquivalent:0];
#endif
index_menucell=[[NXApp mainMenu] addSlashItem:MENU_MAILBOX_INDEX action:@selector(toggleIndexing:) keyEquivalent:0];
if ([EnhanceBundle getPath:path forResource:"indexTag" ofType:"tiff"])
indextag_image=[[NXImage alloc] initFromFile:path];
return self;
}
- loadMessage:(int)fp16 newMsg:(BOOL)fp20 withAllHeaders:(BOOL)fp24
{
const char *header;
id ret=[super loadMessage:fp16 newMsg:fp20 withAllHeaders:fp24];
if (EnhanceShowXImageURL
&& (header=[mailMessage headerValueForKey:"X-Image-URL"]))
[command setXImageURL:header];
if (EnhanceShowXFace
&& (header=[mailMessage headerValueForKey:"X-Face"]))
[command setXFace:header];
return ret;
}
- free
{
if (EnhanceAutoCompact && mailbox)
{
struct u_mailboxstatus stat;
[mailbox getMailboxStatus:&stat];
if ((stat.delmsgno>0) && (![mailbox hasStore])) [self compact:self];
}
return [super free];
}
- compact:sender
{
if (mailbox && [mailbox hasStore])
[self toggleIndexing:sender];
return [super compact:sender];
}
- strip:sender
{
#if 0
id list=[matrix getSelectedCells:nil];
id cell;
int i;
for(i=0;i<[list count];i++)
{
cell=[list objectAt:i];
if (cell==nil) continue;
/* XXX Strip every message of all NeXT/MIME/uuencoded attachments XXX */
}
list=[list free];
#endif
return self;
}
- (void)setFlagged:(BOOL)flag
{
id cell=[matrix selectedCell];
if (cell==nil) return;
[cell setFlagged:YES];
if (mailbox==nil) return;
[mailbox setState:'+' forMsg:[cell msgId] flush:NO];
[self display];
return;
}
- toggleIndexing:sender
{
if (mailbox==nil) return nil;
if ([mailbox hasStore])
[mailbox deleteStore];
else
[mailbox createStore];
[self display];
[self windowDidBecomeMain:self];
[self updateStatus];
return self;
}
- windowDidBecomeMain:sender
{
const char *c;
if ((mailbox==nil)||(index_menucell==nil)) return self;
c=[mailbox hasStore] ? MENU_MAILBOX_UNINDEX : MENU_MAILBOX_INDEX;
if (c=rindex(c,'/')) [index_menucell setTitle:(c+1)];
return self;
}
- (void)updateStatus
{
const char *val;
char buf[MAXPATHLEN+1];
float size;
[super updateStatus];
if ((statusField==nil)
||(mailbox==nil)||((size=[mailbox storeSize])<0)) return;
val=[statusField stringValue];
if (strstr(val,"MB"))
sprintf(buf,"%s \320 index (%.1fMB)",val,size/(1<<20));
else if (strstr(val,"KB"))
sprintf(buf,"%s \320 index (%.0fKB)",val,size/(1<<10));
else
sprintf(buf,"%s \320 index",val);
[statusField setStringValue:buf];
}
- drawSelf:(const NXRect *)rects :(int)rectCount
{
id ret=[super drawSelf:rects:rectCount];
NXPoint p;
NXSize s;
if ((mailbox==nil)||(indextag_image==nil)) return nil;
[indextag_image getSize:&s];
p.x=0; p.y=s.height;
if ([mailbox hasStore]) [indextag_image composite:NX_SOVER toPoint:&p];
return ret;
}
@end
@implementation CommandView(EnhanceMailReader)
- setXFace:(const char *)xface
{
NXSize size;
if (face) return self;
size.width=size.height=64;
face=[[NXImage alloc] initXFace:xface size:&size];
[self display];
return self;
}
- setXImageURL:(const char *)ximageurl
{
if (face) return self;
face=[[NXImage alloc] initURL:ximageurl];
[self display];
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.