home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.3 (Developer) / NeXT_Developer-3.3.iso / NextDeveloper / Examples / AppKit / Yap / PSText.m < prev    next >
Encoding:
Text File  |  1992-02-10  |  1.4 KB  |  50 lines

  1. /*
  2.  *  PSText.m, subclass of Text overriding paste: for adding functionality
  3.  *  Author: Ali Ozer
  4.  *  Created: Mar 22, 89
  5.  *
  6.  *  You may freely copy, distribute and reuse the code in this example.
  7.  *  NeXT disclaims any warranty of any kind, expressed or implied,
  8.  *  as to its fitness for any particular use.
  9.  */
  10.  
  11. #import <appkit/appkit.h>
  12. #import <string.h>
  13. #import <mach/mach.h>
  14. #import "PSText.h"
  15.  
  16. @implementation PSText
  17.  
  18. /*
  19.  * The following method overrides the Text paste: method. If there's any
  20.  * PostScript on the pasteboard, this method will paste that in before pasting
  21.  * ASCII. If there's no PostScript on the pasteboard, then this method will
  22.  * simply call the overridden paste: method.
  23.  */
  24. - paste:(id)sender
  25. {
  26.     id pb = [Pasteboard new];  
  27.     char *data;
  28.     char *const *s;  /* We use s to go through types. */
  29.     char *const *types = [pb types];
  30.     int len;
  31.  
  32.     /* Check to see if we have any PostScript on the pasteboard... */
  33.  
  34.     for (s = types; *s; s++) if (!strcmp(*s, NXPostScriptPboard)) break;
  35.  
  36.     /* At this point, if *s != NULL, we found PostScript on the pasteboard. */
  37.  
  38.     if (*s && [pb readType:NXPostScriptPboard data:&data length:&len] && len) {
  39.     [self replaceSel:data length:len];
  40.         vm_deallocate (task_self(), (vm_address_t)data, (vm_size_t)len);     
  41.     } else {
  42.         [super paste:sender];  /* No PS; pass the task on to Text. */
  43.     }
  44.  
  45.     return self;
  46. }
  47.  
  48. @end
  49.  
  50.