home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1995 August / NEBULA.mdf / Apps / DevTools / ClassBuilder / Source / MenuManager.m < prev    next >
Encoding:
Text File  |  1993-01-25  |  7.5 KB  |  293 lines

  1.  
  2. /* Generated by Interface Builder */
  3.  
  4. #import "MenuManager.h"
  5. #import "ClassManager.h"
  6. #import "WindowManager.h"
  7. #import <appkit/Matrix.h>
  8. #import <appkit/ButtonCell.h>
  9. #import <appkit/OpenPanel.h>
  10. #import <appkit/ScrollView.h>
  11. #import <appkit/Text.h>
  12. #import <appkit/NXBrowser.h>
  13. #import <appkit/NXBrowserCell.h>
  14. #import <objc/List.h>
  15. #import <objc/Storage.h>
  16. #import <strings.h>
  17. #import <libc.h>
  18.  
  19. char thisAppsName[] = "CB" ;
  20.  
  21. const char *objCTypes[] = 
  22. { "m",
  23.   "wsp",
  24.   NULL 
  25. } ;
  26.  
  27. struct loadClass
  28. { char *className ;
  29.   char *dotOFileName ;
  30. } ;
  31.  
  32. @implementation MenuManager
  33.  
  34. - appendFileToTranscript: (char *) fileName ;
  35. { // append the text of the indicated file to the transcript
  36.   char *aStr ;
  37.   struct stat statBuf ;
  38.   int fd ;
  39.   if(!(fd = open(fileName,O_RDONLY)))
  40.   { NXRunAlertPanel("CB","Cannot open: %c",NULL,NULL,NULL,fileName) ;
  41.     return self ;
  42.   }
  43.   fstat(fd,&statBuf) ;
  44.   aStr = malloc(statBuf.st_size + 1) ;
  45.   read(fd,aStr,statBuf.st_size) ;
  46.   aStr[statBuf.st_size] = '\0' ;
  47.   [self printf: aStr] ;
  48.   close(fd) ;
  49.   free(aStr) ;
  50.   return self ;
  51. }
  52.  
  53. - (int)browser:sender fillMatrix:matrix inColumn:(int)column ;
  54. { // delegate method for the browser object 
  55.   return [[ClassManager loadList] count] ; 
  56. }
  57.  
  58. - browser:sender loadCell:cell atRow:(int)row inColumn:(int)column ;
  59. {  struct loadClass *lcPtr ;
  60.    lcPtr = [[ClassManager loadList] elementAt: row] ;
  61.    [cell setStringValue: lcPtr->className] ;
  62.    [cell setLeaf:YES] ;
  63.    return self ;
  64. }
  65.  
  66.  
  67. -cancelNewClass:sender ;
  68. { [self stopModal] ;
  69.   [newClassPanel orderOut: self] ;
  70.   return self ;
  71. }
  72.  
  73. - clearTranscript: sender ;
  74. { [transcriptText setText: ""] ;
  75.   return self ;
  76. }
  77.  
  78. - createNewClass:sender ;
  79. { // create a new class browser and initialize its text
  80.   char initText[1024] ;
  81.   const char  *className, *superClassFileName, *superClassName ;
  82.   BOOL anglies ;
  83.   id manager ;
  84.   [self stopModal] ;
  85.   [newClassPanel orderOut: self] ;
  86.   className = [[[newClassInfoMatrix cellList] objectAt: 0] stringValue] ;
  87.   superClassName = [[[newClassInfoMatrix cellList] objectAt: 1] stringValue] ;
  88.   superClassFileName = [[[newClassInfoMatrix cellList] objectAt: 2] stringValue] ;
  89.   anglies = index(superClassFileName, '<') == NULL? NO : YES ; 
  90.   sprintf(initText,
  91.     "#pragma .h #import %c%s%c\n"
  92.     "#import \"%s.h\"\n"
  93.     "@implementation %s:%s\n"
  94.     "{\n"
  95.     "}\n"
  96.     "\n"
  97.     "@end",
  98.     anglies? ' ':'"', superClassFileName, anglies? ' ':'"',
  99.     className, className,superClassName) ;  
  100.    manager = [NXApp loadNibSection:"ClassManager.nib"
  101.      owner:self] ;
  102.   [manager className: (char *) className] ;
  103.   [manager classText: initText] ;
  104.   [manager makeKeyAndOrderFront: self] ;
  105.   return self ;  
  106. }
  107.  
  108. - finder: sender ;
  109. { [[finderLineTextField window] center] ;
  110.   [[finderLineTextField window] orderFront: self] ;
  111.   return self ;
  112. }
  113.  
  114. - finderAddDigit: sender ;
  115. { // add a digit (the finder's tag) to the finderLineTextField
  116.   int sum ;
  117.   sum = [finderLineTextField intValue] ;
  118.   sum *= 10 ;
  119.   sum += [[sender selectedCell] tag] ;
  120.   [finderLineTextField setIntValue: sum] ;
  121.   return self ;
  122. }
  123.  
  124. - finderBackUp: sender ;
  125. { // erase previous digit in the finderLineTextField
  126.   int sum ;
  127.   sum = [finderLineTextField intValue] ;
  128.   sum /= 10 ;
  129.   [finderLineTextField setIntValue: sum] ;
  130.   return self ;
  131. }
  132.  
  133. - finderCurrent: sender ;
  134. { // put line number of beginning of selection into
  135.   // the finderLineTextField 
  136.   id aView ;
  137.   if([mainWindow respondsTo: @selector(textView)])
  138.   { NXSelPt start,end ;
  139.     aView = [mainWindow textView] ;
  140.     [aView getSel: &start :&end] ;
  141.     [finderLineTextField setIntValue: [aView lineFromPosition: start.cp]] ;
  142.   }
  143.   return self ;
  144. }
  145.  
  146. - finderGoTo: sender ;
  147. { // set selection at beginning of line indicated by
  148.   // finderLineTextField 
  149.   id aView ;
  150.   if([mainWindow respondsTo: @selector(textView)])
  151.   { int pos1, pos2, lineNum ;
  152.     aView = [mainWindow textView] ;
  153.     pos1 = [aView positionFromLine:lineNum = [finderLineTextField intValue]] ;
  154.     pos2 = [aView positionFromLine: lineNum + 1] ;
  155.     [aView setSel:pos1 :pos2] ;
  156.     [aView scrollSelToVisible] ;
  157.   }
  158.   return self ;
  159. }
  160.  
  161.  
  162. - loadedClassesBrowser ;
  163. { return loadedClassesBrowser ;
  164. }
  165.  
  166. - newClass:sender
  167. { // run the newClass panel modally
  168.    [newClassPanel center] ;
  169.    [self runModalFor: newClassPanel] ;
  170.    return self;
  171. }
  172.  
  173. - newDictionary:sender ;
  174. { // open a new Dictionary Manager
  175.   [[[NXApp loadNibSection:"DictManager.nib" 
  176.          owner: self] center] makeKeyAndOrderFront: self] ;
  177.     return self;
  178. }
  179.  
  180. - newWorkspace:sender
  181. { [[[NXApp loadNibSection:"WorkspaceManager.nib" 
  182.          owner: self] center] makeKeyAndOrderFront: self] ;
  183.     return self;
  184. }
  185.  
  186. - open:sender
  187. { // pop up an open panel with .m or .wsp as the file extension.  get
  188.   // the results, open a manager on the code
  189.   id openPanel ;
  190.   openPanel = [OpenPanel new] ;
  191.   [openPanel allowMultipleFiles: YES] ;
  192.   if([openPanel runModalForDirectory: NULL file:NULL types: objCTypes])
  193.     [self openList: [openPanel filenames] path: [openPanel directory]] ;
  194.   return self;
  195. }
  196.  
  197. - openList:  (const char * const *) fileNames  path: (const char *) path ;
  198. // open all files in the NULL terminated list of filenames. If
  199. // path is non-null, then it is used as the directory in which to find
  200. // the files.  If null, the fileNames are considered as paths themselves.
  201. { char fName[512], className[128] ;
  202.   id manager ;
  203.   int i ;
  204.   float x = 100.0, y = 800.0 ;
  205.   while(*fileNames != NULL)
  206.   { char *extension ;
  207.     extension = rindex(*fileNames,'.') ;
  208.     if(path)
  209.       sprintf(fName,"%s/%s",path,*fileNames) ;
  210.     else
  211.       strcpy(fName,*fileNames) ;
  212.     if(!strcmp(extension,".m"))
  213.     { manager = [NXApp loadNibSection:"ClassManager.nib" 
  214.         owner: self] ;
  215.       [manager moveTopLeftTo:x :y] ;
  216.       [manager fileName: fName] ;
  217.       x += 25.0 ; y -= 25.0 ;
  218.       [manager makeKeyAndOrderFront: self] ;
  219.       for(i = 0 ; (*fileNames)[i] != '.'; i++)
  220.         className[i] = (*fileNames)[i] ;  // strip off extension 
  221.       className[i] ='\0' ;
  222.       [manager className: className] ;
  223.     }
  224.     else // open anything else in a workspace 
  225.     { manager = [NXApp loadNibSection:"WorkspaceManager.nib" 
  226.         owner: self] ;
  227.       [manager fileName: fName] ;
  228.       [manager moveTopLeftTo:x :y] ;
  229.       [manager fileName: fName] ;
  230.       x += 25.0 ; y -= 25.0 ;
  231.       [manager makeKeyAndOrderFront: self] ;
  232.      }
  233.     [manager readFile] ;
  234.     fileNames++ ;
  235.   }
  236.   return self ;
  237. }
  238.  
  239. - printf: (char *) format, ... ;
  240. { // format (as in printf) and print into the transcript
  241.   NXStream *aStream ;
  242.   char *textBuf ;
  243.   int textLen, maxLen ;
  244.   va_list argList ;
  245.   aStream = NXOpenMemory(NULL, 0, NX_READWRITE) ;
  246.   va_start(argList, format) ;
  247.   NXVPrintf(aStream, format, argList) ;
  248.   NXGetMemoryBuffer(aStream, &textBuf, &textLen, &maxLen);
  249.   textLen = [transcriptText textLength] ;
  250.   [transcriptText setSel: textLen :textLen] ;
  251.   [transcriptText replaceSel: textBuf] ;
  252.   NXCloseMemory(aStream,NX_TRUNCATEBUFFER) ;
  253.   return self ;
  254. }
  255.  
  256.  
  257. - setTranscriptText: anObject ;
  258. { // this set method is also used to open up an
  259.   // initial open panel
  260.   transcriptText = [anObject docView] ;
  261.   return self ;
  262. }
  263.  
  264. - showLoadedClasses: sender ;
  265. { [loadedClassesBrowser loadColumnZero] ;
  266.   [[loadedClassesBrowser window] orderFront: self] ;
  267.   return self ;
  268. }
  269.  
  270. - showTranscript: sender ;
  271. { [[transcriptWindow center] orderFront: self] ;
  272.   return self ;
  273. }
  274.  
  275. - transcriptText ;
  276. { return transcriptText ;
  277. }
  278.  
  279. - unloadAllclasses: sender ;
  280. { [ClassManager unloadAll] ; 
  281.   return self ;
  282. }
  283.  
  284.  
  285. - unloadClass: sender ;
  286. { if([loadedClassesBrowser selectedColumn] == 0)
  287.     [ClassManager unload: 
  288.       [[[loadedClassesBrowser matrixInColumn: 0] selectedCell] stringValue]] ; 
  289.   return self ;
  290. }
  291.  
  292. @end
  293.