|
|
1.1 ! root 1: /*-------------------------------------------------------------------------- ! 2: * ! 3: * You may freely copy, distribute, and reuse the code in this example. ! 4: * SHL Systemhouse disclaims any warranty of any kind, expressed or ! 5: * implied, as to its fitness for any particular use. ! 6: * ! 7: * ! 8: * Database ! 9: * ! 10: * Category Of: EOFDelegate ! 11: * ! 12: * Conforms To: None ! 13: * ! 14: * Declared In: EOFDelegateDatabaseCategory.h ! 15: * ! 16: * ! 17: *------------------------------------------------------------------------*/ ! 18: #import "EOFDelegateDatabaseCategory.h" ! 19: ! 20: ! 21: ! 22: ! 23: @implementation EOFDelegate (Database) ! 24: ! 25: /*-------------------------------------------------------------------------- ! 26: * EODatabaseChannel Delegate Methods ! 27: *------------------------------------------------------------------------*/ ! 28: - databaseChannel:channel willInsertObject:object ! 29: { ! 30: // Invoked from -insertObject: to tell the delegate that an object will ! 31: // be inserted. The delegate may return the object, a substitute, or nil ! 32: // to prevent insertion. ! 33: ! 34: id result = object; ! 35: ! 36: [[NXApp delegate] announce:channel ! 37: selector:_cmd ! 38: with:[NSArray arrayWithObject:object]]; ! 39: ! 40: if ([[NXApp delegate] wantsAlertPanels] == YES) ! 41: { ! 42: switch (NXRunAlertPanel ("EODatabaseChannel", ! 43: "%s", "YES", "NO", NULL, sel_getName(_cmd))) ! 44: { ! 45: case NX_ALERTALTERNATE: ! 46: result = nil; ! 47: break; ! 48: case NX_ALERTDEFAULT: ! 49: default: ! 50: result = object; ! 51: break; ! 52: } ! 53: } ! 54: ! 55: return result; ! 56: } ! 57: ! 58: ! 59: - (void)databaseChannel:channel didInsertObject:object ! 60: { ! 61: // Invoked from -insertObject: to tell the delegate that ! 62: // an object was inserted. ! 63: ! 64: [[NXApp delegate] announce:channel ! 65: selector:_cmd ! 66: with:[NSArray arrayWithObject:object]]; ! 67: } ! 68: ! 69: ! 70: - databaseChannel:channel willDeleteObject:object ! 71: { ! 72: // Invoked from -deleteObject: to tell the delegate that an object will ! 73: // be deleted. The delegate may return the object, a substitute, or nil ! 74: // to prevent deletion. ! 75: ! 76: id result = object; ! 77: ! 78: [[NXApp delegate] announce:channel ! 79: selector:_cmd ! 80: with:[NSArray arrayWithObject:object]]; ! 81: ! 82: if ([[NXApp delegate] wantsAlertPanels] == YES) ! 83: { ! 84: switch (NXRunAlertPanel ("EODatabaseChannel", ! 85: "%s", "YES", "NO", NULL, sel_getName(_cmd))) ! 86: { ! 87: case NX_ALERTALTERNATE: ! 88: result = nil; ! 89: break; ! 90: case NX_ALERTDEFAULT: ! 91: default: ! 92: result = object; ! 93: break; ! 94: } ! 95: } ! 96: ! 97: return result; ! 98: } ! 99: ! 100: ! 101: - (void)databaseChannel:channel didDeleteObject:object ! 102: { ! 103: // Invoked from -deleteObject: to tell the delegate that ! 104: // an object was deleted. ! 105: ! 106: [[NXApp delegate] announce:channel ! 107: selector:_cmd ! 108: with:[NSArray arrayWithObject:object]]; ! 109: } ! 110: ! 111: ! 112: - databaseChannel:channel willUpdateObject:object ! 113: { ! 114: // Invoked from -updateObject: to tell the delegate that an object will ! 115: // be updated. The delegate may return the object, a substitute, or nil ! 116: // to prevent updating. ! 117: ! 118: id result = object; ! 119: ! 120: [[NXApp delegate] announce:channel ! 121: selector:_cmd ! 122: with:[NSArray arrayWithObject:object]]; ! 123: ! 124: if ([[NXApp delegate] wantsAlertPanels] == YES) ! 125: { ! 126: switch (NXRunAlertPanel ("EODatabaseChannel", ! 127: "%s", "YES", "NO", NULL, sel_getName(_cmd))) ! 128: { ! 129: case NX_ALERTALTERNATE: ! 130: result = nil; ! 131: break; ! 132: case NX_ALERTDEFAULT: ! 133: default: ! 134: result = object; ! 135: break; ! 136: } ! 137: } ! 138: ! 139: return result; ! 140: } ! 141: ! 142: ! 143: - (void)databaseChannel:channel didUpdateObject:object ! 144: { ! 145: // Invoked from -updateObject: to tell the delegate that ! 146: // an object was updated. ! 147: ! 148: [[NXApp delegate] announce:channel ! 149: selector:_cmd ! 150: with:[NSArray arrayWithObject:object]]; ! 151: } ! 152: ! 153: ! 154: - (NSDictionary *)databaseChannel:channel ! 155: willRefetchObject:object ! 156: fromSnapshot:(NSDictionary *)snapshot ! 157: { ! 158: // Invoked whenever an object that was previously fetched is fetched again ! 159: // and the re-fetched data is different from that in the object. The ! 160: // object will be refetched with the dictionary returned by this method, ! 161: // which may be the snapshot provided or a substitute. The delegate may ! 162: // also return nil to prevent the object from being refetched. ! 163: ! 164: id result = object; ! 165: ! 166: [[NXApp delegate] announce:channel ! 167: selector:_cmd ! 168: with:[NSArray arrayWithObjects: object, snapshot, nil]]; ! 169: ! 170: if ([[NXApp delegate] wantsAlertPanels] == YES) ! 171: { ! 172: switch (NXRunAlertPanel ("EODatabaseChannel", ! 173: "%s", "YES", "NO", NULL, sel_getName(_cmd))) ! 174: { ! 175: case NX_ALERTALTERNATE: ! 176: result = nil; ! 177: break; ! 178: case NX_ALERTDEFAULT: ! 179: default: ! 180: result = object; ! 181: break; ! 182: } ! 183: } ! 184: ! 185: return result; ! 186: } ! 187: ! 188: ! 189: ! 190: - (BOOL)databaseChannel:channel ! 191: willSelectObjectsDescribedByQualifier:(EOQualifier *)qualifier ! 192: fetchOrder:(NSArray *)fetchOrder ! 193: { ! 194: // Invoked from -selectObjectsDescribedByQualifier:... to tell the ! 195: // delegate that the channel will select objects as specified by ! 196: // qualifier. The delegate can modify the qualifier and fetch order. If ! 197: // the delegate returns YES the channel will go ahead and select the ! 198: // object; if the delegate returns NO the channel will abort the select ! 199: // and return NO. ! 200: ! 201: BOOL result = YES; ! 202: ! 203: [[NXApp delegate] announce:channel ! 204: selector:_cmd ! 205: with:[NSArray arrayWithObjects: qualifier, fetchOrder, nil]]; ! 206: ! 207: if ([[NXApp delegate] wantsAlertPanels] == YES) ! 208: { ! 209: switch (NXRunAlertPanel ("EODatabaseChannel", ! 210: "%s", "YES", "NO", NULL, sel_getName(_cmd))) ! 211: { ! 212: case NX_ALERTALTERNATE: ! 213: result = NO; ! 214: break; ! 215: case NX_ALERTDEFAULT: ! 216: default: ! 217: result = YES; ! 218: break; ! 219: } ! 220: } ! 221: ! 222: return result; ! 223: } ! 224: ! 225: ! 226: - (void)databaseChannel:channel ! 227: didSelectObjectsDescribedByQualifier:(EOQualifier *)qualifier ! 228: fetchOrder:(NSArray *)fetchOrder ! 229: { ! 230: // Invoked from -selectObjectsDescribedByQualifier:... to tell the ! 231: // delegate that the channel selected objects as specified by qualifier. ! 232: ! 233: [[NXApp delegate] announce:channel ! 234: selector:_cmd ! 235: with:[NSArray arrayWithObjects: qualifier, fetchOrder, nil]]; ! 236: } ! 237: ! 238: ! 239: - (void)databaseChannel:channel ! 240: willFetchObjectOfClass:(Class)class ! 241: withZone:(NSZone *)zone ! 242: { ! 243: // Invoked from -fetchWithZone: to tell the delegate that ! 244: // the channel willfetch the next selected object. ! 245: ! 246: [[NXApp delegate] announce:channel ! 247: selector:_cmd ! 248: with:[NSArray arrayWithObject:class]]; ! 249: } ! 250: ! 251: ! 252: - (void)databaseChannel:channel didFetchObject:object ! 253: { ! 254: // Invoked from -fetchWithZone: to tell the delegate that ! 255: // the channel fetched the next selected object. ! 256: ! 257: [[NXApp delegate] announce:channel ! 258: selector:_cmd ! 259: with:[NSArray arrayWithObject:object]]; ! 260: } ! 261: ! 262: ! 263: - (BOOL)databaseChannel:channel willLockObject:object ! 264: { ! 265: // Invoked from -lockObject: to tell the delegate that object will be ! 266: // locked using snapshot data to determine whether the database has been ! 267: // modified. The delegate may return YES to allow the channel to proceed, ! 268: // or NO to cause the operation to fail and -lockObject: to return NO. ! 269: ! 270: BOOL result = YES; ! 271: ! 272: [[NXApp delegate] announce:channel ! 273: selector:_cmd ! 274: with:[NSArray arrayWithObject:object]]; ! 275: ! 276: if ([[NXApp delegate] wantsAlertPanels] == YES) ! 277: { ! 278: switch (NXRunAlertPanel ("EODatabaseChannel", ! 279: "%s", "YES", "NO", NULL, sel_getName(_cmd))) ! 280: { ! 281: case NX_ALERTALTERNATE: ! 282: result = NO; ! 283: break; ! 284: case NX_ALERTDEFAULT: ! 285: default: ! 286: result = YES; ! 287: break; ! 288: } ! 289: } ! 290: ! 291: return result; ! 292: } ! 293: ! 294: ! 295: - (void)databaseChannel:channel didLockObject:object ! 296: { ! 297: // Invoked from -lockObject: to tell the delegate that ! 298: // object was locked. ! 299: ! 300: [[NXApp delegate] announce:channel ! 301: selector:_cmd ! 302: with:[NSArray arrayWithObject:object]]; ! 303: } ! 304: ! 305: ! 306: @end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.