This is MailController.m in view mode; [Download] [Up]
#import "EnhancedText.h"
#import "EmacsText.h"
#import "StringStorage.h"
#import "MailController.h"
#import "MailMessage.h"
#import "FileShelfView.h"
#import "MasterController.h"
#import "Defaults.h"
#import "PopUpButton.h"
#import "ModuleMgr.h"
#import "version.h"
@implementation MailController
- init
{
[super init];
[self setDocType: "send"];
MUA = [[StringStorage alloc] init: [NXApp appName]];
[MUA appendStringValue: " ( %s )"];
[MUA replaceSubstring: "%s" with: version + 9];
MTA = [[StringStorage alloc] init: "/usr/lib/sendmail"];
return self;
}
- free
{
[MUA free];
[MTA free];
return [super free];
}
- awakeFromNib
{
[self empty];
[ccField setNextText: text]; /* I have to do this here since setText broke connections */
[self selectTypeByName: [[[NXApp delegate] defaults] get: "DefaultSendType" ]];
return self;
}
- empty
{
[toField setStringValue: ""];
[ccField setStringValue: ""];
[subjectField setStringValue: ""];
[text empty: self];
[shelf empty];
[toField selectText: self];
return self;
}
- deliver:sender
{
id mailMessage = nil;
const char *format = [typeList title];
id bundle = [[[NXApp delegate] sendBundles] getModule: format];
if(!bundle)
return nil;
if(!([toField stringValue] && strlen([toField stringValue])))
{
NXRunAlertPanel([NXApp appName], "Mail requires at least a recipient.", (char *)0, (char *)0, (char *)0);
return nil;
}
mailMessage = [[[bundle principalClass] alloc] initForMUA: [MUA stringValue] andMTA: [MTA stringValue]];
if(!mailMessage)
{
NXLogError("Unsupported type\n");
return nil;
}
if([[mailMessage class] supportsAttachments])
[mailMessage setAttachments: [shelf fileNames]];
[mailMessage deliverTo: [toField stringValue]
subject: [subjectField stringValue]
cc: [ccField stringValue]
text: [text stringValue]];
[panel orderOut: self];
[self empty];
[mailMessage free];
return self;
}
- selectType: sender
{
return [self selectTypeByName: [[sender selectedCell] title]];
}
- selectTypeByName: (const char *)str
{
id bundle;
bundle = [[[NXApp delegate] sendBundles] getModule: str];
if(!bundle)
return nil;
[typeList setPopUpTitle: str]; /* make sure UI reflects choice */
if([[bundle principalClass] supportsAttachments])
[shelf setEnabled: YES];
else
[shelf setEnabled: NO];
return self;
}
- setTypeList: anObject
{
id sendBundles = [[NXApp delegate] sendBundles];
const char *key;
id popUp = [anObject target];
/* select first item in matrix and on button */
typeList = anObject;
[sendBundles initState];
while (key = [sendBundles nextKey])
[popUp addItem: (const char *)key];
[popUp removeItemAt: 0]; /* clear out the .nibs' item */
/* set up the target */
[popUp setTarget: self];
[popUp setAction: @selector(selectType:)];
return self;
}
/* I need to place an EmacsText in a ScrollView. But Grouping in IB
* creates one that can not be resized. So I just swap out one
* from a ScrollView/Text pulled right from the IB Palette.
*/
- setText: anObject
{
id origText = [anObject docView]; /* get the TeXT IB put in the scroller */
id newText;
NXRect theRect;
[origText getFrame: &theRect]; /* get its frame */
/* create an EmacsText using that Rect */
newText = [[EmacsText alloc] initFrame: &theRect];
[anObject setDocView: newText]; /* set it as the scrollers docView */
text = newText; /* get the pointer for later use */
[origText free]; /* free the one IB put in there. */
return self;
}
- shelf
{
return shelf;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.