home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1 / Nebula One.iso / Internet / News / Alexandra.0.82 / Source / NiceStuff.subproj / KVTableController.m < prev    next >
Encoding:
Text File  |  1996-01-30  |  3.9 KB  |  207 lines

  1.  
  2. #import <appkit/appkit.h>
  3. #import <dbkit/dbkit.h>
  4. #import <misckit/misckit.h>
  5. #import "KVTableController.h"
  6. #import "KVPair.h"
  7.  
  8.  
  9. @implementation KVTableController
  10.  
  11. NXAtom KVTableKeyIdentifier;
  12. NXAtom KVTableValueIdentifier;
  13.  
  14. //-----------------------------------------------------------
  15. // INIT & FREE
  16. //-----------------------------------------------------------
  17.  
  18. + initialize
  19.     {
  20.     KVTableKeyIdentifier = NXUniqueString("KVTable-KeyIdentifier");
  21.     KVTableValueIdentifier=NXUniqueString("KVTable-ValueIdentifier");
  22.     return self;
  23.     }
  24.  
  25.  
  26. - init
  27.     {
  28.     [super init];
  29.     kvPairs=[[MiscList allocFromZone:[self zone]] init];
  30.     delimiter=',';
  31.     return self;
  32.     }
  33.     
  34.     
  35. - free
  36.     {
  37.     [kvPairs freeObjects];
  38.     kvPairs=[kvPairs free];
  39.     return [super free];
  40.     }
  41.  
  42.  
  43. //-----------------------------------------------------------
  44. // I-VAR 
  45. //-----------------------------------------------------------
  46.  
  47. - setTableView:(DBTableView *)aView;
  48.     {
  49.     tableView=aView;
  50.     [[tableView columnAt:0] setIdentifier:(id)KVTableKeyIdentifier];
  51.     [[tableView columnAt:1] setIdentifier:(id)KVTableValueIdentifier];
  52.     [tableView setDataSource:self];
  53.     [tableView reloadData:self];
  54.     return self;
  55.     }
  56.  
  57.  
  58. - (DBTableView *)tableView;
  59.     {
  60.     return tableView;
  61.     }
  62.  
  63.  
  64. - setDelimiter:(char)delim;
  65.     {
  66.     delimiter=delim;
  67.     return self;
  68.     }
  69.     
  70.  
  71. - (char)delimiter;
  72.     {
  73.     return delimiter;
  74.     }
  75.  
  76.  
  77. - setDelegate:anObject;
  78.     {
  79.     delegate=anObject;
  80.     return self;
  81.     }
  82.     
  83.  
  84. - delegate;
  85.     {
  86.     return delegate;
  87.     }
  88.  
  89.  
  90. - (MiscList *)kvPairs;
  91.     {
  92.     return kvPairs;
  93.     }
  94.  
  95.  
  96. //-----------------------------------------------------------
  97. // Add
  98. //-----------------------------------------------------------
  99.  
  100. - addEmptyRow:sender;
  101.     {
  102.     int    row=[kvPairs count];
  103.     
  104.     [kvPairs addObject:[[KVPair allocFromZone:[self zone]] init]];
  105.     if(sender)
  106.         {
  107.         [tableView reloadData:self];
  108.         [tableView selectRow:row byExtension:NO];
  109.         }
  110.     return self;
  111.     }
  112.  
  113.  
  114. - addPair:(KVPair *)pair;
  115.     {
  116.     [kvPairs addObject:[pair copyFromZone:[self zone]]];
  117.     [tableView reloadData:self];
  118.     return self;
  119.     }
  120.  
  121.  
  122. - addPairFromString:(const char *)strg;
  123.     {
  124.     KVPair    *new=[[KVPair allocFromZone:[self zone]] init:strg delimiter:delimiter];
  125.  
  126.     [new cleanupWithDelimiter:delimiter];
  127.     [kvPairs addObject:new];
  128.     [tableView reloadData:self];
  129.     return self;
  130.     }
  131.     
  132.  
  133. //-----------------------------------------------------------
  134. // REMOVE 
  135. //-----------------------------------------------------------
  136.  
  137. - removeSelectedRow:sender;
  138.     {
  139.     int    row=[tableView selectedRow];
  140.     
  141.     if(row<0)
  142.         return nil;
  143.     [kvPairs removeObjectAt:row];
  144.     if(sender)
  145.         [tableView reloadData:self];
  146.     return self;    
  147.     }
  148.     
  149.  
  150. - empty:sender;
  151.     {
  152.     [kvPairs freeObjects];
  153.     [kvPairs empty];
  154.     if(sender)
  155.         [tableView reloadData:self];
  156.     return self;
  157.     }
  158.     
  159. //-----------------------------------------------------------
  160. // Data Source Protocol
  161. //-----------------------------------------------------------
  162.         
  163. - (unsigned int)rowCount;
  164.     {
  165.     return [kvPairs count];
  166.     }
  167.  
  168.  
  169. - getValueFor:identifier at:(unsigned int)aPosition into:aValue;
  170.     {
  171.     if((NXAtom)identifier==KVTableKeyIdentifier)
  172.         [aValue setStringValue:[[kvPairs objectAt:aPosition] key]];
  173.     else
  174.         [aValue setStringValue:[[kvPairs objectAt:aPosition] value]];
  175.     return self;
  176.     }
  177.  
  178.  
  179. - setValueFor:identifier at:(unsigned int)aPosition from:aValue;
  180.     {
  181.     if((NXAtom)identifier==KVTableKeyIdentifier)
  182.         [[kvPairs objectAt:aPosition] takeKeyFrom:aValue];
  183.     else
  184.         [[kvPairs objectAt:aPosition] takeValueFrom:aValue];
  185.     [[kvPairs objectAt:aPosition] cleanupWithDelimiter:delimiter];
  186.     if([delegate respondsTo:@selector(kvTableController:valueDidChangeFor:at:)])
  187.         [delegate kvTableController:self valueDidChangeFor:identifier at:aPosition];
  188.     return self;
  189.     }    
  190.  
  191.  
  192. //-----------------------------------------------------------
  193. // DELEGATION METHODS 
  194. //-----------------------------------------------------------
  195.  
  196. - kvTableController:sender valueDidChangeFor:identifier at:(unsigned int)position;
  197.     {
  198.     return self;
  199.     }
  200.  
  201. //-----------------------------------------------------------
  202. // THAT'S IT
  203. //-----------------------------------------------------------
  204.  
  205. @end
  206.  
  207.