home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1995 August / NEBULA.mdf / SourceCode / Palettes / ColorBrowser / ColorBrowserInspector.m < prev    next >
Encoding:
Text File  |  1993-01-18  |  7.7 KB  |  291 lines

  1. //----------------------------------------------------------------------------------------------------
  2. //
  3. //    ColorBrowserInspector
  4. //
  5. //    Inherits From:        IBInspector
  6. //
  7. //    Declared In:        ColorBrowserInspector.h
  8. //
  9. //    Disclaimer
  10. //
  11. //        You may freely copy, distribute and reuse this software and its
  12. //        associated documentation. I disclaim any warranty of any kind, 
  13. //        expressed or implied, as to its fitness for any particular use.
  14. //
  15. //----------------------------------------------------------------------------------------------------
  16. #import "ColorBrowserInspector.h"
  17. #import "ColorBrowserCell.h"
  18. #import "ColorBrowser.h"
  19. #import <appkit/appkit.h>
  20.  
  21.  
  22. @implementation ColorBrowserInspector
  23.  
  24. //----------------------------------------------------------------------------------------------------
  25. //    Initialization and Freeing
  26. //----------------------------------------------------------------------------------------------------
  27. - init
  28. {
  29.         char     path[MAXPATHLEN+1];
  30.         id         bundle;
  31.         
  32.         [super init];
  33.         if (! (bundle = [NXBundle bundleForClass:[ColorBrowserInspector class]])) return nil;
  34.         if (! ([bundle getPath: path forResource:"ColorBrowserInspector" ofType:"nib"])) return nil;
  35.            [NXApp loadNibFile:path owner:self withNames:NO ]; 
  36.     font = [Font newFont:"Helvetica" size:12 style:0 matrix:NX_FLIPPEDMATRIX];
  37.     [[colorBrowser cellPrototype] setFont: font];
  38.     [colorBrowser loadColumnZero];
  39.         return self;
  40. }
  41.  
  42.  
  43. - free
  44. {
  45.     if (colorBrowser) [colorBrowser free];
  46.     if (colorPanel) [colorPanel free];
  47.     if (horizontalScrolling) [horizontalScrolling free];
  48.     if (verticalScrolling) [verticalScrolling free];
  49.     if (options) [options free];
  50.     if (font) [font free];
  51.     return [super free];
  52. }
  53.  
  54.     
  55. //----------------------------------------------------------------------------------------------------
  56. //    IB Inspector Methods
  57. //----------------------------------------------------------------------------------------------------
  58. - ok:sender
  59. {
  60.     if (sender == colorPanel)
  61.         {
  62.         [self setTextColor];
  63.         }
  64.     else if (sender == horizontalScrolling)
  65.         {
  66.         [self setHorizontalScrolling];
  67.         }
  68.     else if (sender == verticalScrolling)
  69.         {
  70.         [self setVerticalScrolling];
  71.         }
  72.     else if (sender == options)
  73.         {
  74.         [self setOptions];
  75.         }
  76.  
  77.     [[NXApp activeDocument] touch];
  78.         return [super ok:sender];
  79. }
  80.  
  81.  
  82. - revert:sender
  83. {
  84.     [self revertTextColor];
  85.     [self revertHorizontalScrolling];
  86.     [self revertVerticalScrolling];
  87.     [self revertOptions];
  88.     return [super revert: sender];
  89. }
  90.  
  91.  
  92. - (BOOL)wantsButtons
  93. {
  94.         return NO;
  95. }
  96.  
  97.  
  98. //----------------------------------------------------------------------------------------------------
  99. //    Reverting Attributes
  100. //----------------------------------------------------------------------------------------------------
  101. - revertTextColor
  102. {
  103.     [[colorBrowser cellPrototype] setTextColor: [[object cellPrototype] textColor]];
  104.     [colorPanel setColor: [[colorBrowser cellPrototype] textColor]];
  105.     [colorBrowser loadColumnZero];
  106.     return self;
  107. }
  108.  
  109.  
  110. - revertHorizontalScrolling
  111. {
  112.     [horizontalScrolling clearSelectedCell];
  113.     if ([object isHorizontalScrollerEnabled])
  114.         {
  115.         [horizontalScrolling setState: 0  at: 0 :0];
  116.         [horizontalScrolling setState: 1  at: 1 :0];
  117.         [horizontalScrolling setState: 0  at: 2 :0];
  118.         [[verticalScrolling findCellWithTag: 1] setEnabled: NO];
  119.         }
  120.     else if ([object areHorizontalScrollButtonsEnabled])
  121.         {
  122.         [horizontalScrolling setState: 0  at: 0 :0];
  123.         [horizontalScrolling setState: 0  at: 1 :0];
  124.         [horizontalScrolling setState: 1  at: 2 :0];
  125.         [[verticalScrolling findCellWithTag: 1] setEnabled: YES];
  126.         }
  127.     else
  128.         {
  129.         [horizontalScrolling setState: 1  at: 0 :0];
  130.         [horizontalScrolling setState: 0  at: 1 :0];
  131.         [horizontalScrolling setState: 0  at: 2 :0];
  132.         [[verticalScrolling findCellWithTag: 1] setEnabled: YES];
  133.         }
  134.  
  135.     return self;
  136. }
  137.  
  138.  
  139. - revertVerticalScrolling
  140. {
  141.     NXRect    browserFrame;
  142.     NXRect    columnFrame;
  143.     NXRect    titleFrame;
  144.     float        titleFudgeFactor = 0.0;
  145.  
  146.     [verticalScrolling clearSelectedCell];
  147.  
  148.     [object getFrame: &browserFrame];
  149.     [object getFrame: &columnFrame  ofColumn: 0];
  150.     [object getTitleFrame: &titleFrame  ofColumn: 0];
  151.     if ( NX_HEIGHT(&titleFrame) > 1.0 )
  152.         titleFudgeFactor = 2.0;
  153.  
  154.     if ([object isHorizontalScrollerEnabled])
  155.         {
  156.         [verticalScrolling setState: 1  at: 0 :0];
  157.         [verticalScrolling setState: 0  at: 1 :0];
  158.         [[horizontalScrolling findCellWithTag: 1] setEnabled: YES];
  159.         }
  160.     else if ( (NX_HEIGHT(&columnFrame) + NX_HEIGHT(&titleFrame) + titleFudgeFactor) ==             NX_HEIGHT(&browserFrame) )
  161.         {
  162.         [verticalScrolling setState: 1  at: 0 :0];
  163.         [verticalScrolling setState: 0  at: 1 :0];
  164.         [[horizontalScrolling findCellWithTag: 1] setEnabled: YES];
  165.         }
  166.     else
  167.         {
  168.         [verticalScrolling setState: 0  at: 0 :0];
  169.         [verticalScrolling setState: 1  at: 1 :0];
  170.         [[horizontalScrolling findCellWithTag: 1] setEnabled: NO];
  171.         }
  172.  
  173.     return self;
  174. }
  175.  
  176.  
  177. - revertOptions
  178. {
  179.     [options setState: [object isMultipleSelectionEnabled] at: 0 :0];
  180.     [options setState: [object isEmptySelectionEnabled] at: 1 :0];
  181.     [options setState: [object isBranchSelectionEnabled] at: 2 :0];
  182.     [options setState: [object columnsAreSeparated] at: 3 :0];
  183.     [options setState: [object isTitled] at: 4 :0];
  184.     [[options findCellWithTag: 3] setEnabled: NO];
  185.     return self;
  186. }
  187.  
  188.  
  189. //----------------------------------------------------------------------------------------------------
  190. //    Setting Attributes
  191. //----------------------------------------------------------------------------------------------------
  192. - setTextColor
  193. {
  194.     [colorBrowser setTextColor: [colorPanel color] inColumn:0];
  195.     [(ColorBrowserCell*)[object cellPrototype] setTextColor: [colorPanel color]];
  196.     return self;
  197. }
  198.  
  199.  
  200. - setHorizontalScrolling
  201. {
  202.     switch ([[horizontalScrolling selectedCell] tag])
  203.         {
  204.         case 0:
  205.             [object setHorizontalScrollButtonsEnabled: NO];
  206.             [object setHorizontalScrollerEnabled: NO];
  207.             [[verticalScrolling cellAt: 1 :0] setEnabled: YES];
  208.             break;
  209.         case 2:
  210.             [object setHorizontalScrollButtonsEnabled: YES];
  211.             [object setHorizontalScrollerEnabled: NO];
  212.             [[verticalScrolling cellAt: 1 :0] setEnabled: YES];
  213.             break;
  214.         case 1:
  215.         default:
  216.             [object setHorizontalScrollerEnabled: YES];
  217.             [object setHorizontalScrollButtonsEnabled: NO];
  218.             [[verticalScrolling cellAt: 1 :0] setEnabled: NO];
  219.             break;
  220.         }
  221.     
  222.     return self;
  223. }
  224.  
  225.         
  226. - setVerticalScrolling
  227. {
  228.     switch ([[verticalScrolling selectedCell] tag])
  229.         {
  230.         case 1:
  231.             [object useScrollButtons: YES];
  232.             [object useScrollBars: NO];
  233.             [[horizontalScrolling cellAt: 1 :0] setEnabled: NO];
  234.             break;
  235.         case 0:
  236.         default:
  237.             [object useScrollBars: YES];
  238.             [object useScrollButtons: NO];
  239.             [[horizontalScrolling cellAt: 1 :0] setEnabled: YES];
  240.             break;
  241.         }
  242.     
  243.     return self;
  244. }
  245.  
  246.     
  247. - setOptions
  248. {
  249.     [object setMultipleSelectionEnabled: ([[options cellAt: 0 : 0] state] ? YES : NO)];
  250.     [object setEmptySelectionEnabled: ([[options cellAt: 1 : 0] state] ? YES : NO)];
  251.     [object setBranchSelectionEnabled: ([[options cellAt: 2 : 0] state] ? YES : NO)];
  252.     [object separateColumns: ([[options cellAt: 3 : 0] state] ? YES : NO)];
  253.  
  254.     if ([[options cellAt: 4 : 0] state])
  255.         {
  256.         [object setTitled: YES];
  257.         [[options cellAt: 3 :0] setState: 1];
  258.         [[options cellAt: 3 :0] setEnabled: NO];
  259.         }
  260.     else
  261.         {
  262.         [object setTitled: NO];
  263.         [[options cellAt: 3 :0] setEnabled: YES];
  264.         }
  265.         
  266.     return self;
  267. }
  268.  
  269.  
  270. //----------------------------------------------------------------------------------------------------
  271. //    Browser Methods
  272. //----------------------------------------------------------------------------------------------------
  273. - browserAction: sender
  274. {        
  275.     colorPanel = [NXColorPanel sharedInstance: YES];
  276.     [[colorPanel setTarget: self] setAction: @selector (ok:)];
  277.     [NXApp orderFrontColorPanel: self];
  278.     [[colorBrowser matrixInColumn:0] selectCellAt:-1 :-1];
  279.     return self;
  280. }
  281.                     
  282.  
  283. - (int) browser: aBrowser  fillMatrix: aMatrix  inColumn: (int) aColumn
  284. {
  285.     [aMatrix renewRows: 1 cols:1];
  286.     [[[aMatrix cellAt: 0 : 0] setStringValue: "Click here to set text color..."] setLeaf: YES];
  287.     return 1;
  288. }
  289.     
  290.  
  291. @end