celestia/macosx/RenderPanelController.m

146 lines
7.1 KiB
Objective-C

#import "RenderPanelController.h"
#import "CelestiaAppCore.h"
NSDictionary *_labelDict, *_renderDict;
@implementation RenderPanelController
-(void)finishSetup
{
CelestiaRenderer *renderer;
NSDictionary *flags;
NSEnumerator *enumerator;
id obj;
NSLog(@"[RenderPanelController(PrivateAPI) finishSetup]");
renderer = [[CelestiaAppCore sharedAppCore] renderer];
NSLog(@"setup _labelDict");
_labelDict = [[NSDictionary dictionaryWithObjectsAndKeys:@"Asteroids",[NSValue valueWithNonretainedObject:lAsteroids],@"Constellations",[NSValue valueWithNonretainedObject:lConstellations],@"Galaxies",[NSValue valueWithNonretainedObject:lGalaxies],@"Moons",[NSValue valueWithNonretainedObject:lMoons],@"Planets",[NSValue valueWithNonretainedObject:lPlanets],@"Spacecraft",[NSValue valueWithNonretainedObject:lSpacecraft],@"Stars",[NSValue valueWithNonretainedObject:lStars],nil,nil] retain];
NSLog(@"setup _renderDict");
_renderDict = [[NSDictionary dictionaryWithObjectsAndKeys:@"Atmospheres",[NSValue valueWithNonretainedObject:rAtmospheres],@"AutoMag",[NSValue valueWithNonretainedObject:rAutoMag],@"Boundaries",[NSValue valueWithNonretainedObject:rBoundaries],@"CelestialSphere",[NSValue valueWithNonretainedObject:rCelestialSphere],@"CloudMaps",[NSValue valueWithNonretainedObject:rCloudMaps],@"Diagrams",[NSValue valueWithNonretainedObject:rDiagrams],@"EclipseShadows",[NSValue valueWithNonretainedObject:rEclipseShadows],@"Galaxies",[NSValue valueWithNonretainedObject:rGalaxies],@"NightMaps",[NSValue valueWithNonretainedObject:rNightMaps],@"Orbits",[NSValue valueWithNonretainedObject:rOrbits],@"Planets",[NSValue valueWithNonretainedObject:rPlanets],@"RingShadows",[NSValue valueWithNonretainedObject:rRingShadows],@"SmoothLines",[NSValue valueWithNonretainedObject:rSmoothLines],@"Stars",[NSValue valueWithNonretainedObject:rStars],@"StarsAsPoints",[NSValue valueWithNonretainedObject:rStarsAsPoints],nil,nil] retain];
if ([[NSUserDefaults standardUserDefaults] objectForKey:@"renderPreferences"]!=nil) {
NSDictionary *prefs;
NSLog(@"deserializing render preferences from user defaults");
prefs = [[NSUserDefaults standardUserDefaults] objectForKey:@"renderPreferences"];
[renderer setLabelFlags:[prefs objectForKey:@"labelFlags"]];
[renderer setRenderFlags:[prefs objectForKey:@"renderFlags"]];
[renderer setBrightnessBias:[prefs objectForKey:@"brightnessBias"]];
[renderer setSaturationMagnitude:[prefs objectForKey:@"saturationMagnitude"]];
[renderer setVertexShaderEnabled:[prefs objectForKey:@"vertexShaderEnabled"]];
[renderer setFragmentShaderEnabled:[prefs objectForKey:@"fragmentShaderEnabled"]];
[renderer setResolution:[prefs objectForKey:@"resolution"]];
}
NSLog(@"enumerate renderFlags");
flags = [renderer renderFlags];
enumerator = [_renderDict keyEnumerator];
while ((obj = [enumerator nextObject]) != nil)
[[obj nonretainedObjectValue] setState:([[flags objectForKey:[_renderDict objectForKey:obj]] boolValue])!=NO?NSOnState:NSOffState];
NSLog(@"enumerate labelFlags");
flags = [renderer labelFlags];
enumerator = [_labelDict keyEnumerator];
while ((obj = [enumerator nextObject]) != nil)
[[obj nonretainedObjectValue] setState:([[flags objectForKey:[_labelDict objectForKey:obj]] boolValue])!=NO?NSOnState:NSOffState];
NSLog(@"setup vertexShader");
[rVertexShader setState:([renderer isVertexShaderEnabled]?NSOnState:NSOffState)];
[rVertexShader setEnabled:([renderer isVertexShaderSupported]?YES:NO)];
NSLog(@"setup fragmentShader");
[rFragmentShader setState:([renderer isFragmentShaderEnabled]?NSOnState:NSOffState)];
[rFragmentShader setEnabled:([renderer isFragmentShaderSupported]?YES:NO)];
[fBrightnessBias setFloatValue:[[renderer brightnessBias] floatValue]];
[fSaturation setFloatValue:[[renderer saturationMagnitude] floatValue]];
[fResolution selectItemAtIndex:[[renderer resolution] intValue]];
[self applyChanges:nil];
}
-(void)awakeFromNib
{
_labelDict = nil;
_renderDict = nil;
}
- (IBAction)showWindow:(id)sender
{
NSLog(@"[RenderPanelController showWindow:%@]",sender);
if (_labelDict == nil || _renderDict == nil)
[self finishSetup];
[super showWindow:sender];
}
- (IBAction)applyChanges:(id)sender
{
CelestiaRenderer *renderer;
NSLog(@"[RenderPanelController applyChanges:%@]",sender);
renderer = [[CelestiaAppCore sharedAppCore] renderer];
if ((sender == bButton)||(sender == nil)) {
NSMutableDictionary *flags;
NSEnumerator *enumerator;
id obj;
flags = [[renderer labelFlags] mutableCopy];
enumerator = [_labelDict keyEnumerator];
while ((obj = [enumerator nextObject]) != nil)
[flags setObject:[NSNumber numberWithBool:([[obj nonretainedObjectValue] state]==NSOnState)] forKey:[_labelDict objectForKey:obj]];
[renderer setLabelFlags:flags];
NSLog(@"labelFlags = %@",flags);
flags = [[renderer renderFlags] mutableCopy];
enumerator = [_renderDict keyEnumerator];
while ((obj = [enumerator nextObject]) != nil)
[flags setObject:[NSNumber numberWithBool:([[obj nonretainedObjectValue] state]==NSOnState)] forKey:[_renderDict objectForKey:obj]];
[renderer setRenderFlags:flags];
NSLog(@"renderFlags = %@",flags);
[renderer setVertexShaderEnabled:[NSNumber numberWithBool:([rVertexShader state]==NSOnState)]];
[renderer setFragmentShaderEnabled:[NSNumber numberWithBool:([rFragmentShader state]==NSOnState)]];
[renderer setBrightnessBias:[NSNumber numberWithFloat:[fBrightnessBias floatValue]]];
[renderer setSaturationMagnitude:[NSNumber numberWithFloat:[fSaturation floatValue]]];
[renderer setResolution:[NSNumber numberWithInt:[fResolution indexOfSelectedItem]]];
return;
}
if (sender == rVertexShader) {
[renderer setVertexShaderEnabled:[NSNumber numberWithBool:([rVertexShader state]==NSOnState)]];
return;
}
if (sender == rFragmentShader) {
[renderer setFragmentShaderEnabled:[NSNumber numberWithBool:([rFragmentShader state]==NSOnState)]];
return;
}
if (sender == fBrightnessBias) {
[renderer setBrightnessBias:[NSNumber numberWithFloat:[fBrightnessBias floatValue]]];
return;
}
if (sender == fSaturation) {
[renderer setSaturationMagnitude:[NSNumber numberWithFloat:[fSaturation floatValue]]];
return;
}
if (sender == fResolution) {
[renderer setResolution:[NSNumber numberWithInt:[fResolution indexOfSelectedItem]]];
return;
}
if ([_renderDict objectForKey:[NSValue valueWithNonretainedObject:sender]]!=nil) {
[renderer setRenderFlag:[_renderDict objectForKey:[NSValue valueWithNonretainedObject:sender]] value:[NSNumber numberWithBool:([sender state]==NSOnState)]];
return;
}
if ([_labelDict objectForKey:[NSValue valueWithNonretainedObject:sender]]!=nil) {
[renderer setLabelFlag:[_labelDict objectForKey:[NSValue valueWithNonretainedObject:sender]] value:[NSNumber numberWithBool:([sender state]==NSOnState)]];
return;
}
}
@end