home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1995 August / NEBULA.bin / SourceCode / Palettes / TTools / TToolsPalette / Ranker.subproj / CellSelector.m < prev    next >
Encoding:
Text File  |  1993-11-09  |  1.9 KB  |  91 lines

  1. /* CellSelector.m
  2.  * Written By:  Thomas Burkholder
  3.  *
  4.  * You may freely copy, distribute, and reuse the code in this example.
  5.  * NeXT disclaims any warranty of any kind, expressed or  implied, as to its
  6.  * fitness for any particular use.
  7.  */
  8.  
  9. #import <objc/objc-runtime.h>
  10. #import "../Utilities.subproj/SortedList.h"
  11. #import "../Utilities.subproj/ClassAgent.h"
  12. #import "CellSelector.h"
  13.  
  14. @implementation CellSelector
  15.  
  16. static CellSelector *cellSelector;
  17.  
  18. + (id)getCellClass
  19. {
  20.     return [CellSelector getCellClassRespondsTo:(SEL)0];
  21. }
  22.  
  23. + (id)getCellClassRespondsTo:(SEL)aSel
  24. {
  25.     if (!cellSelector) // set up a new one
  26.         cellSelector = [[CellSelector alloc] init];
  27.     [cellSelector setFilterSel:aSel];
  28.     return [cellSelector choose];
  29. }
  30.  
  31. - init
  32. {
  33.     char buf[MAXPATHLEN+1];
  34.     NXBundle *bundle;
  35.  
  36.     [super init];
  37.  
  38.     // load the nib file
  39.     bundle = [NXBundle bundleForClass:[CellSelector class]];
  40.     [bundle getPath:buf forResource:"CellSelector" ofType:"nib"];
  41.     [NXApp loadNibFile:buf owner:self withNames:NO
  42.                             fromZone:[self zone]];
  43.     list = [[SortedList alloc] init];
  44.     [list setAgent:[[ClassAgent alloc] init]];
  45.     [list addObject:[ActionCell class]];
  46.     [browser setDelegate:list];
  47.     [browser setTarget:self];
  48.     [browser setAction:@selector(check:)];
  49.     [okButton setEnabled:NO];
  50.     [browser loadColumnZero];
  51.     return self;
  52. }
  53.  
  54. - choose
  55. {
  56.     [panel makeFirstResponder:browser];
  57.     [panel orderFront:cellSelector];
  58.     [NXApp runModalFor:panel];
  59.     [panel orderOut:self];
  60.     return objc_lookUpClass([[browser selectedCell] stringValue]);
  61. }
  62.  
  63. - check:sender
  64. {
  65.     id p;
  66.  
  67.     p = objc_lookUpClass([[browser selectedCell] stringValue]);
  68.     if ((p && !filterSel) || (p && [p respondsTo:filterSel])) {
  69.         [okButton setEnabled:YES];
  70.         [browser setDoubleAction:@selector(ok:)];
  71.     } else {
  72.         [okButton setEnabled:NO];
  73.         [browser setDoubleAction:(SEL)0];
  74.     }
  75.     return self;
  76. }
  77.  
  78. - ok:sender
  79. {
  80.     [NXApp stopModal];
  81.     return self;
  82. }
  83.  
  84. - setFilterSel:(SEL)aSel
  85. {
  86.     filterSel = aSel;
  87.     return self;
  88. }
  89.  
  90. @end
  91.