home *** CD-ROM | disk | FTP | other *** search
/ Nebula 2 / Nebula Two.iso / Apps / DevTools / eText5 / Source / MailTo.subproj / MailTo.m < prev    next >
Encoding:
Text File  |  1995-06-20  |  4.6 KB  |  166 lines

  1. ///////////////////////////////////////////////////////////////////////////////
  2. //    FILENAME:    MailTo.m 
  3. //    SUMMARY:    Implementation of a mailto:URL -like device
  4. //    SUPERCLASS:    MailTo:eTImage:Object
  5. //    INTERFACE:    None
  6. //    PROTOCOLS:    <Annotation,HTMDSupport,ASCIISupport,LaTeXSupport,Tool,
  7. //                InspectableTarget>
  8. //    AUTHOR:        Rohit Khare and Tom Zavisca
  9. //    COPYRIGHT:    (c) 1994 California Institure of Technology, eText Project
  10. ///////////////////////////////////////////////////////////////////////////////
  11. //    IMPLEMENTATION COMMENTS
  12. //        Does its job by holding subject & address and yelling at NXApp.
  13. ///////////////////////////////////////////////////////////////////////////////
  14. //    HISTORY
  15. //    10/30/94:    Modified to support <InspectableTarget>
  16. //    07/20/94:    Converted over to eTImage/eTImageComponent. (rk)
  17. //  07/07/94:    Converted to subclass of ImageAnnotation
  18. //    07/03/94:   Minimal Creation
  19. ///////////////////////////////////////////////////////////////////////////////
  20.  
  21. #import "MailTo.h"
  22. #define _MailToVERSION    10
  23.  
  24. @implementation MailTo
  25.  
  26. + toolAwake:theApp
  27. {
  28.     char        buf[MAXPATHLEN];
  29.     NXBundle    *bundle;
  30.     id             icon=nil;
  31.  
  32.     bundle = [NXBundle bundleForClass:[MailTo class]];
  33.     if ([bundle getPath:buf forResource:".MailTo" ofType:"tiff"] ) {
  34.         icon=[[NXImage alloc] initFromFile:buf];
  35.         [icon setName:"MailToIcon"];
  36.     } else {
  37.         NXLogError("Image not found: MailToIcon");
  38.     }    
  39.     [theApp   registerAnnotation: [MailTo class] 
  40.                             name: "MailTo"
  41.                     RTFDirective: "MailTo"
  42.                        menuLabel: "HTML/Insert mailTo:..."
  43.                          menuKey: '\0'
  44.                         menuIcon: (NXImage *) icon];
  45.     //[theApp registerType:NXCreateFileContentsPboardType("mailTo") for:[MailTo class]];
  46.     return self;
  47. }
  48.  
  49. - init
  50. {
  51.     [super init];
  52.     [self setUsesButtonStyle:NO];
  53.     [self setDraggable:YES];
  54.     [self setImageComponent:[eTImageComponent newImageNamed:"MailToIcon"]];
  55.     address = NXUniqueString(NXUserName());
  56.     subject = NXUniqueString("No Subject");
  57.     
  58.     return self;
  59. }
  60.  
  61. - initFromPboard:thePboard inDoc:theDoc linked:(BOOL) linked
  62. {
  63.     [super initFromPboard:thePboard inDoc:theDoc linked:linked];
  64.     //[self init];
  65.     [imageComponent setDoc:theDoc];
  66.     subject = NXUniqueString([[etDoc docInfo] docTitle]);
  67.     return self;
  68. }
  69.  
  70. - readRichText:(NXStream *)stream forView:view 
  71. {
  72.     int i;
  73.     char buf[MAXPATHLEN];
  74.     
  75.     NXScanf(stream, "%d ", &i);
  76.     if (i != _MailToVERSION) {
  77.         // bad version block.
  78.      NXLogError("MailTo found unparseable version %d at position %d",
  79.                     i, NXTell(stream));
  80.         return nil;
  81.     }
  82.     NXScanf(stream, "%d", &i); NXGetc(stream); //space-eater
  83.     if(i) NXRead(stream,buf,i);
  84.     buf[i]=0;
  85.     address=NXUniqueString(buf);
  86.     NXScanf(stream, "%d", &i); NXGetc(stream); //space-eater
  87.     if(i) NXRead(stream,buf,i);
  88.     buf[i]=0;
  89.     subject=NXUniqueString(buf);
  90.     NXGetc(stream); // trailing space
  91.     [super readRichText:stream forView:view];
  92.     return self;
  93. }
  94.  
  95. - writeRichText:(NXStream *)stream forView:view
  96. {
  97.     NXPrintf(stream, "%d %d %s %d %s ", _MailToVERSION, 
  98.              strlen(address), address,strlen(subject),subject);
  99.     [super writeRichText:stream forView:view];
  100.     return self;
  101. }
  102.  
  103. - writeASCIIRef:(NXStream *)stream forView:view
  104. {
  105.     NXPrintf(stream, "Send e-mail to %s about %s\n\t",address,subject);
  106.     [super writeASCIIRef:stream forView:view];
  107.     return self;
  108. }
  109.  
  110. - writeHTML:(NXStream *)stream forView: view
  111. {
  112.     int i;
  113.     
  114.     NXPrintf(stream,"<A HREF=\"mailto:%V\">",address);
  115.     [super writeHTML:stream forView:view];
  116.     NXPrintf(stream," to comment on <I>%v</I></A>", subject);
  117.     return self;
  118. }
  119. - writeLaTeX:(NXStream *)stream forView: view
  120. {    
  121.     [super writeLaTeX:stream forView:view];
  122.     NXPrintf(stream,"\n\\footnote{send e-mail to {\tt %w} about{\tt %w}}\n", address, subject);
  123.     return self;
  124. }
  125.  
  126. - click:(NXEvent*)e
  127.     { NXBeep(); return self;}
  128. - doubleClick:(NXEvent *)e
  129.     { return [self sendMail:self];}
  130. - inspect:(NXEvent*)e
  131.     { [[NXApp inspector] inspect:self];return self;}
  132. - (id <Inspectable>) inspectableDelegate {
  133.     return [[MailToUI new] setAnnotation:self]; }
  134.  
  135. - sendMail:sender
  136. {    
  137.     if (address && subject){
  138.         char    bodyStr[4*MAXPATHLEN];
  139.         id        dI;
  140.         
  141.         dI = [etDoc docInfo];
  142.         sprintf(bodyStr, "---\n This message is re: the eText document %s written by %s", [dI docTitle], [dI author]);
  143.         [NXApp     sendMailTo: address cc:"" subject: subject 
  144.                 body: bodyStr deliver:NO];
  145.     }
  146.     return self;
  147. }
  148.  
  149. - setSubject: (NXAtom) newSubject
  150.     {subject = newSubject; return self;}
  151. - setAddress: (NXAtom) newAddress
  152.     {address = newAddress; return self;}
  153. - (NXAtom) subject {return subject;}
  154. - (NXAtom) address {return address;}
  155. - setImageComponent:newImageComponent
  156. {
  157.     const char *name;
  158.     
  159.     name = [[newImageComponent theImage] name];
  160.     if (name && !strcmp(name,"MailToIcon"))
  161.         usesButtonStyle = NO;
  162.     else
  163.         usesButtonStyle = YES;
  164.     return [super setImageComponent:newImageComponent];
  165. }
  166. @end