This is MiscVirtual3DMouseFrontend.m in view mode; [Download] [Up]
/* MiscVirtual3DMouseFrontend.m * * This object deals with the GUI we need to do all the settings. * It is the frontend to the slider or trackPad based 3DMouse system. * Basically intended for testing a custom app without owning a real 3Dmouse. * * For interface-info see the header file. The comments in this file mostly * cover only the real implementation details. * * Written by: Thomas Engel * Created: 09.04.1994 (Copyleft) * Last modified: 14.04.1994 */ #import "MiscVirtual3DMouseFrontend.h" #import "Misc3DMouseDriver.h" #import "BBSlider.h" @implementation MiscVirtual3DMouseFrontend - revert:sender { [super revert:sender]; if( !mouseDriver ) mouseDriver = [Misc3DMouseDriver new]; if( !view ) { // Before we will do anything else..lets change the slider class. // we need that for our transForStart/End stuff. [BBSlider poseAs:[Slider class]]; if( [NXApp loadNibSection:"MiscVirtual3DMouse.nib" owner:self] == nil ) NXRunAlertPanel( NULL, "Couldn't load MiscVirtual3DMouse.nib", "OK", NULL, NULL); } [[NXApp delegate] setMouse:mouseDriver]; // BUGGY ! NASTY ! // Let's init all the default data. return self; } - xRotation:sender { float angle; angle = [sender floatValue] - lastSliderValue; [rotValue setIntValue:[sender intValue]]; if( angle == 0.0 ) return self; if( [mouseDriver deliverTranslation:0 :0 :0 andRotation:angle :0 :0] ) lastSliderValue = [sender floatValue]; return self; } - yRotation:sender { float angle; angle = [sender floatValue] - lastSliderValue; [rotValue setIntValue:[sender intValue]]; if( angle == 0.0 ) return self; if( [mouseDriver deliverTranslation:0 :0 :0 andRotation:0 :angle :0] ) lastSliderValue = [sender floatValue]; return self; } - zRotation:sender { float angle; angle = [sender floatValue] - lastSliderValue; [rotValue setIntValue:[sender intValue]]; if( angle == 0.0 ) return self; if( [mouseDriver deliverTranslation:0 :0 :0 andRotation:0 :0 :angle] ) lastSliderValue = [sender floatValue]; return self; } - xTranslation:sender { float delta; delta = [sender floatValue] - lastSliderValue; [transValue setIntValue:[sender intValue]]; if( delta == 0.0 ) return self; if( [mouseDriver deliverTranslation:delta :0: 0 andRotation:0 :0 :0] ) lastSliderValue = [sender floatValue]; return self; } - yTranslation:sender { float delta; delta = [sender floatValue] - lastSliderValue; [transValue setIntValue:[sender intValue]]; if( delta == 0.0 ) return self; if( [mouseDriver deliverTranslation:0 :delta :0 andRotation:0 :0 :0] ) lastSliderValue = [sender floatValue]; return self; } - zTranslation:sender { float delta; delta = [sender floatValue] - lastSliderValue; [transValue setIntValue:[sender intValue]]; if( delta == 0.0 ) return self; if( [mouseDriver deliverTranslation:0 :0 :delta andRotation:0 :0 :0] ) lastSliderValue = [sender floatValue]; return self; } - switchLocking:sender { if( [modeLock state] == YES ) [self transformationWillStart:self]; else [self transformationDidEnd:self]; return self; } - takeRotationRangeFrom:sender { int newRange; newRange = [sender intValue]; if( newRange < 0 ) newRange *= -1; if( newRange < 1 ) newRange = 1; if( newRange > 180 ) newRange = 180; [aSlider setMinValue:-newRange]; [aSlider setMaxValue:newRange]; [bSlider setMinValue:-newRange]; [bSlider setMaxValue:newRange]; [cSlider setMinValue:-newRange]; [cSlider setMaxValue:newRange]; [sender setIntValue:newRange]; [negRotRange setIntValue:-newRange]; return self; } - takeTranslationRangeFrom:sender { int newRange; newRange = [sender intValue]; if( newRange < 0 ) newRange *= -1; if( newRange < 1 ) newRange = 1; if( newRange > 5000 ) newRange = 5000; [xSlider setMinValue:-newRange]; [xSlider setMaxValue:newRange]; [ySlider setMinValue:-newRange]; [ySlider setMaxValue:newRange]; [zSlider setMinValue:-newRange]; [zSlider setMaxValue:newRange]; [sender setIntValue:newRange]; [negTransRange setIntValue:-newRange]; return self; } - (oneway void)transformationWillStart:sender { [[mouseDriver target] transformationWillStart:mouseDriver]; return; } - (oneway void)transformationDidEnd:sender { // If the sender is one of our sliders we will reset it to the // Zero point. if( sender == aSlider || sender == bSlider || sender == cSlider ) { [sender setFloatValue:0]; [rotValue setIntValue:0]; lastSliderValue = 0; } else if( sender == xSlider || sender == ySlider || sender == zSlider ) { [sender setFloatValue:0]; [transValue setIntValue:0]; lastSliderValue = 0; } if( [modeLock state] == NO ) [[mouseDriver target] transformationDidEnd:mouseDriver]; return; } @end /* * History: 14.04.94 Really got it going. * * 09.04.94 First codeing done. * * * Bugs: - Not very likely. */
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.