|
|
1.1 ! root 1: ! 2: #import "JFTableViewLoader.h" ! 3: #import "JFTableVectorConfiguration.h" ! 4: /* ! 5: * JFTableViewLoader, NeXT Systems Engineering ! 6: * Written by Joe Freeman ! 7: * ! 8: * A list of these configuration objects is fed to a JFTableViewLoader ! 9: * to tell it what ivars and titles map into a DBTableView ! 10: */ ! 11: ! 12: ! 13: @implementation JFTableViewLoader ! 14: ! 15: /* static char VERSION[] = " @(#) Version: 2, Project: TableViewLoader, Written By: Joe Freeman, 1992"; */ ! 16: ! 17: - (const char *)getInspectorClassName ! 18: { ! 19: return "JFDBTVLoaderInspector"; ! 20: } ! 21: ! 22: - setTableView:anObject; ! 23: { ! 24: tableView = anObject; ! 25: [tableView setDataSource:self]; ! 26: return self; ! 27: } ! 28: ! 29: ! 30: - setDataList:anObject ! 31: { ! 32: dataList = anObject; ! 33: [tableView reloadData:self]; ! 34: ! 35: return self; ! 36: } ! 37: ! 38: ! 39: /* this doesn't do what we want in the inspector in IB ! 40: * because it relies on the tableView nstance var being set up ! 41: * in ib, the connections in build mode, are fake. So, ! 42: * we have to have this method happen in awake ! 43: */ ! 44: - setConfigurationList:cList ! 45: { ! 46: ! 47: int i; ! 48: int tCount; ! 49: id <DBTableVectors > aVector; ! 50: ! 51: [[tableView window] disableFlushWindow]; /* DBTV ignores autodisplay */ ! 52: configList = cList; ! 53: /* configure the columns */ ! 54: /* first figure out how many columns there are, and how many we need */ ! 55: tCount = [tableView columnCount]; ! 56: ! 57: for (i = [configList count]; i < tCount; i++) ! 58: [tableView removeColumnAt:[configList count]]; ! 59: ! 60: /* then make the numbers match and load up the titles and identifiers */ ! 61: for (i = 0; i < [configList count]; i++) { ! 62: if (i < tCount) { ! 63: aVector = [tableView columnAt:i]; ! 64: [aVector setIdentifier:(id)i]; ! 65: [aVector setTitle:[[configList objectAt:i] title]]; ! 66: } else { ! 67: [tableView addColumn:(id)i ! 68: withTitle:[[configList objectAt:i] title]]; ! 69: } ! 70: } ! 71: ! 72: [[tableView window] reenableFlushWindow]; ! 73: [[tableView window] flushWindowIfNeeded]; ! 74: ! 75: return self; ! 76: } ! 77: ! 78: - setDataList:anObject andConfigurationList:cList ! 79: { ! 80: [self setConfigurationList:cList]; ! 81: /* now load em up */ ! 82: [self setDataList:anObject]; ! 83: return self; ! 84: } ! 85: ! 86: /*====================================================================== ! 87: * Inspector support ! 88: *======================================================================*/ ! 89: ! 90: - (DBTableView *) tableView ! 91: { ! 92: return tableView; ! 93: } ! 94: ! 95: - (List *) dataList ! 96: { ! 97: if (dataList) ! 98: return dataList; ! 99: else ! 100: return[[List alloc] init]; ! 101: } ! 102: ! 103: - (List *) configList ! 104: { ! 105: if (configList) ! 106: return configList; ! 107: else ! 108: return[[List alloc] init]; ! 109: } ! 110: ! 111: /*====================================================================== ! 112: * Archiving ! 113: *======================================================================*/ ! 114: ! 115: - awakeFromNib ! 116: { ! 117: [self setConfigurationList:configList]; ! 118: return self; ! 119: } ! 120: ! 121: - read:(NXTypedStream *) typedStream ! 122: { ! 123: [super read:typedStream]; ! 124: ! 125: dataList = NXReadObject(typedStream); ! 126: configList = NXReadObject(typedStream); ! 127: tableView = NXReadObject(typedStream); ! 128: ! 129: return self; ! 130: } ! 131: ! 132: - write:(NXTypedStream *) typedStream ! 133: { ! 134: [super write:typedStream]; ! 135: ! 136: NXWriteObjectReference(typedStream, dataList); ! 137: NXWriteObject(typedStream, configList); ! 138: NXWriteObjectReference(typedStream, tableView); ! 139: return self; ! 140: } ! 141: ! 142: /*====================================================================== ! 143: * DBTableView data source (psuedo-delegate) methods ! 144: *======================================================================*/ ! 145: ! 146: - (unsigned int)rowCount ! 147: { ! 148: return[dataList count]; ! 149: } ! 150: ! 151: /* DBTV sends this message when it needs to know what to display */ ! 152: - getValueFor:identifier at:(unsigned int)aPosition into:aValue ! 153: { ! 154: /* ! 155: * note that when loaded, we set the identifiers to be the locations of the ! 156: * configuration objects in the configuration list ! 157: */ ! 158: if (configList) ! 159: [[configList objectAt:(int)identifier] ! 160: getValueFromObject:[dataList objectAt:aPosition] ! 161: into:aValue]; ! 162: else ! 163: [aValue setStringValue:""]; ! 164: return nil; ! 165: } ! 166: ! 167: /* DBTV sends this message when data in a cell has changed */ ! 168: - setValueFor:identifier at:(unsigned int)aPosition from:aValue ! 169: { ! 170: [[configList objectAt:(int)identifier] ! 171: setValueForObject:[dataList objectAt:aPosition] ! 172: from:aValue]; ! 173: return nil; ! 174: } ! 175: ! 176: @end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.