This is Misc3DMetaDriver.m in view mode; [Download] [Up]
/* Misc3DMetaDriver.m * * The MetaDriver is a driver wrapper. It will transparently switch between * drivers taking care that there will be no conflicts. It is not a real driver * and so all standard events will be passed to the realDriver. (Confuising ?!) * * For more interface-info see the header file. More in depth information * can be found in the source-code. * * Written by: Thomas Engel * Created: 10.04.1994 (Copyleft) * Last modified: 18.04.1994 */ #import "Misc3DMetaDriver.h" @implementation Misc3DMetaDriver - setTarget:anObject { target = anObject; if( !realDriver ) return self; return [realDriver setTarget:anObject]; } - target { if( !realDriver ) return target; return [realDriver target]; } - (oneway void)enableEvents { sendEvents = YES; [realDriver enableEvents]; return; } - (oneway void)disableEvents { sendEvents = NO; [realDriver disableEvents]; return; } - (oneway void)syncEvents { [realDriver syncEvents]; return; } - setUseExternalSync:(BOOL)aFlag { syncEvents = aFlag; return [realDriver setUseExternalSync:aFlag]; } - (BOOL)doesUseExternalSync { if( !realDriver ) return syncEvents; return [realDriver doesUseExternalSync]; } - (BOOL)areEventsEnabled { if( !realDriver ) return sendEvents; return [realDriver areEventsEnabled]; } - setRealDriver:aDriver { // Let's check the new driver. If it does conform to our driver protocol // we will accept it. // We will use the old target but only the new driver will know about // it. Ensuring that only one device is active at the same time. // // We have to transfer all the settings to the other driver. But only // the general event settings will be transferred! id oldDriver; id theTarget; BOOL doesSend; BOOL doesSync; if( [aDriver conformsTo:@protocol(Misc3DDeviceDriverProtocol)] ) { // If our old target refuses to drop its target we won't install // the new driver. // If there was no old driver we will serve as the source for all the // settings. This class keeps track of all the settings passed to a // realDriver so this should work real nice. if( realDriver ) oldDriver = realDriver; else oldDriver = self; // Our code tries to ensure that the old driver will be deactivated // before the new one becomes active. theTarget = [oldDriver target]; doesSend = [oldDriver areEventsEnabled]; doesSync = [oldDriver doesUseExternalSync]; if( [oldDriver setTarget:nil] ) { [oldDriver disableEvents]; [aDriver setTarget:theTarget]; if( doesSend ) [aDriver enableEvents]; else [aDriver disableEvents]; [aDriver setUseExternalSync:doesSync]; realDriver = aDriver; } } return self; } - realDriver { return realDriver; } @end /* * History: 18.04.94 Added the setTarget:nil feature. * * 10.04.94 Invented to allow device switching while device is in * use. * * * Bugs: - Not really. see the .h file. */
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.