home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1995 August / NEBULA.mdf / Apps / DevTools / ManPagesFromHeaders / Source / Controller.m < prev    next >
Encoding:
Text File  |  1993-05-11  |  3.1 KB  |  168 lines

  1. /*
  2.  * Written by Guy Roberts of Object Skills Ltd, drifting
  3.  * in cyberspace without a domain or email address right 
  4.  * now. 
  5.  * May 7 1993. You can use this as a base for a better application
  6.  * as long as it is made publically available.
  7.  */
  8.  
  9. /* Controller coordinates the selection of header files and
  10.  * the creation of Translator objects which themselves
  11.  * create the rich text output of a manual page and optionally
  12.  * launch the Edit application.
  13.  */
  14.  
  15. #import "Controller.h"
  16.  
  17. @implementation Controller
  18.  
  19. #define SUFFIX "h"
  20. #define IS_DIR(m)      (((m)&S_IFMT) == S_IFDIR)
  21.  
  22. - init
  23. {
  24.     [super init];
  25.     
  26.     openReq = [OpenPanel new];
  27.     lastDirectoryUsed = (char *) NXHomeDirectory();
  28.     
  29.     /* Become the delegate of the panels to get 
  30.      * panel:filterFile:inDirectory messages.
  31.      */
  32.     [openReq    setDelegate:self];
  33.     [NXApp    setDelegate: self];
  34.     
  35.     return self;
  36. }
  37.  
  38. - appDidInit: sender
  39. {
  40.     [self    open: self];
  41.  
  42.     return self;
  43. }
  44.  
  45. - (int) app: sender 
  46.         openFile: (const char *) fileName 
  47.         type: (const char *) aType
  48. {    
  49.     [self    createATranslator: (char *) fileName];
  50.  
  51.     return YES;
  52. }
  53.  
  54. -(BOOL) appAcceptsAnotherFile:sender
  55. {
  56.   return (YES);
  57. }
  58.  
  59. - open: sender
  60. {
  61.     const    char    *nameToUse = NULL;
  62.     const    char    *documentDir = NULL;
  63.     char    theTypes[2];
  64.     
  65.     theTypes[0] = 'h';
  66.     theTypes[1] = 0;
  67.  
  68.     [[[openReq    setTitle: [headingNames    valueForStringKey: "openPanelTitle"]]    
  69.         setRequiredFileType: SUFFIX]
  70.         runModalForDirectory: lastDirectoryUsed
  71.         file: ""];
  72.         
  73.     nameToUse = [openReq    filename];
  74.     
  75.     if (!nameToUse)
  76.         return self;
  77.  
  78.     /* Remember where to open the next open panel */
  79.     
  80.     [self createATranslator: (char *) nameToUse];
  81.     
  82.     {
  83.         char    buffer[1024], *ptr;
  84.         
  85.         buffer[0] = '\0';
  86.         strcat(buffer, nameToUse);
  87.         ptr = index(buffer, '/'); /* Truncate it */
  88.         *ptr = '\0';
  89.         /* BUG we leak the space pointed to previously by lastDirectoryUsed */
  90.         lastDirectoryUsed = NXCopyStringBuffer(buffer);
  91.     }
  92.  
  93.     return self;
  94. }
  95.  
  96. - createATranslator: (char *) name;
  97. {    
  98.     /* These Translator objects do the work of creating rich text */
  99.     [[Translator    alloc]    initForHeaderFile: name withTable: headingNames];
  100.     
  101.     return self;
  102. }
  103.  
  104. - (BOOL) panelValidateFilenames:sender
  105. {
  106.     return(YES);
  107. }
  108.  
  109. - (BOOL) panel: panel 
  110.     filterFile: (const char *) fileName
  111.     inDirectory: (const char *) directory
  112. {
  113.     char    *suffix = rindex(fileName, '.');
  114.     char    fullPath[1024];
  115.     struct    stat    buffer;
  116.  
  117.     sprintf(fullPath, "%s/%s", directory, fileName);
  118.  
  119.     /* Collect information about the file to be filtered */ 
  120.     if (stat(fullPath, &buffer) == -1)
  121.         return NO;
  122.     else if (IS_DIR(buffer.st_mode))
  123.             return YES;
  124.     else if (suffix && (strcmp(suffix, ".h") == 0))
  125.         return(YES);
  126.     else
  127.         return(NO);
  128. }
  129.  
  130. - showInfoPanel: sender;
  131. {
  132.     if (infoview == 0)
  133.         [NXApp loadNibSection: "info.nib" owner:self];
  134.     
  135.     [[infoview window] makeKeyAndOrderFront: self];
  136.     
  137. #ifdef SHOW_OFF
  138.     [infoview     fadeAway:self];
  139. #endif
  140.  
  141.     return self;
  142. }
  143.  
  144. - showPreferences:sender
  145. {
  146.     if (preferences == nil)
  147.             [NXApp loadNibSection:"Preferences.nib" owner:self];
  148.   
  149.     [preferences    showPreferencePanel: self];
  150.  
  151.     return self;
  152. }
  153.  
  154. - endAllWars: sender
  155. {
  156.     NXRunAlertPanel(NULL, [headingNames    valueForStringKey: "notImplemented"]
  157.             , NULL, NULL, NULL, "Continue");
  158.  
  159.     return self;
  160. }
  161.  
  162. - free
  163. {
  164.     return [super free];
  165. }
  166.  
  167. @end
  168.