1#import "GeneralPage.h" 2#import "Preferences.h" 3#import "LDViewCategories.h" 4 5#include <LDLib/LDPreferences.h> 6#include <TCFoundation/TCUserDefaults.h> 7 8@implementation GeneralPage 9 10- (void)dealloc 11{ 12 [saveDirPopUps release]; 13 [saveDirFields release]; 14 [saveDirButtons release]; 15 [saveDirs release]; 16 [super dealloc]; 17} 18 19- (NSString *)defaultSaveDirForOp:(LDPreferences::SaveOp)op modelFilename:(NSString *)filename 20{ 21 return [NSString stringWithUTF8String:ldPreferences->getDefaultSaveDir(op, [filename UTF8String]).c_str()]; 22} 23 24//- (void)setSnapshotsDir:(NSString *)value 25//{ 26// if (value != snapshotsDir) 27// { 28// [snapshotsDir release]; 29// snapshotsDir = [value retain]; 30// } 31//} 32// 33//- (void)setPartsListsDir:(NSString *)value 34//{ 35// if (value != partsListsDir) 36// { 37// [partsListsDir release]; 38// partsListsDir = [value retain]; 39// } 40//} 41 42- (void)updateDirField:(NSTextField *)field browseButton:(NSButton *)browseButton mode:(int)mode value:(NSString *)value 43{ 44 if (mode == LDPreferences::DDMSpecificDir) 45 { 46 [field setStringValue:value]; 47 [field setEnabled:YES]; 48 [browseButton setEnabled:YES]; 49 } 50 else 51 { 52 [field setStringValue:@""]; 53 [field setEnabled:NO]; 54 [browseButton setEnabled:NO]; 55 } 56} 57 58- (void)updateSaveDirForOp:(int)op 59{ 60 NSString *value = [saveDirs objectAtIndex:op]; 61 int mode = (int)[[saveDirPopUps objectAtIndex:op] selectedTag]; 62 NSTextField *field = [saveDirFields objectAtIndex:op]; 63 NSButton *browseButton = [saveDirButtons objectAtIndex:op]; 64 65 if (mode == LDPreferences::DDMSpecificDir) 66 { 67 [field setStringValue:value]; 68 [field setEnabled:YES]; 69 [browseButton setEnabled:YES]; 70 } 71 else 72 { 73 [field setStringValue:@""]; 74 [field setEnabled:NO]; 75 [browseButton setEnabled:NO]; 76 } 77} 78 79- (void)setup 80{ 81 int r, g, b; 82 int i; 83 84 [super setup]; 85 [self setCheck:promptAtStartupCheck value:[self promptAtStartup]]; 86 [self setCheck:newModelWindowsCheck value:[self newModelWindows]]; 87 [self setCheck:antialiasedLinesCheck 88 value:ldPreferences->getLineSmoothing()]; 89 [self setCheck:showFrameRateCheck value:ldPreferences->getShowFps()]; 90 [self setCheck:showAxesCheck value:ldPreferences->getShowAxes()]; 91 [self setCheck:showErrorsCheck value:ldPreferences->getShowErrors()]; 92 [self setCheck:disableSmpCheck value:ldPreferences->getDisableSmp()]; 93 [self setCheck:processLDConfigCheck 94 value:ldPreferences->getProcessLdConfig()]; 95 [self setCheck:randomColorsCheck value:ldPreferences->getRandomColors()]; 96 ldPreferences->getBackgroundColor(r, g, b); 97 [self setColorWell:backgroundColorWell r:r g:g b:b]; 98 ldPreferences->getDefaultColor(r, g, b); 99 [self setColorWell:defaultColorWell r:r g:g b:b]; 100 [self setCheck:transparentDefaultCheck 101 value:ldPreferences->getTransDefaultColor()]; 102 [fovField setFloatValue:ldPreferences->getFov()]; 103 [memoryUsagePopUp selectItemWithTag:ldPreferences->getMemoryUsage()]; 104 saveDirPopUps = [[NSArray alloc] initWithObjects:snapshotsDirPopUp, partsListsDirPopUp, exportsDirPopUp, nil]; 105 saveDirFields = [[NSArray alloc] initWithObjects:snapshotsDirField, partsListsDirField, exportsDirField, nil]; 106 saveDirButtons = [[NSArray alloc] initWithObjects:snapshotsBrowseButton, partsListsBrowseButton, exportsBrowseButton, nil]; 107 saveDirs = [[NSMutableArray alloc] init]; 108 for (i = LDPreferences::SOFirst; i <= LDPreferences::SOLast && i < [saveDirPopUps count]; i++) 109 { 110 LDPreferences::SaveOp op = (LDPreferences::SaveOp)i; 111 112 [saveDirs addObject:[NSString stringWithUTF8String:ldPreferences->getSaveDir(op).c_str()]]; 113 [[saveDirPopUps objectAtIndex:i] selectItemWithTag:ldPreferences->getSaveDirMode(op)]; 114 [self updateSaveDirForOp:i]; 115 } 116} 117 118- (bool)promptAtStartup 119{ 120 return TCUserDefaults::boolForKey("PromptForModelAtStartup", true, false); 121} 122 123- (bool)newModelWindows 124{ 125 return TCUserDefaults::boolForKey("OpenModelsInNewWindows", false, false); 126} 127 128- (bool)showErrorsIfNeeded 129{ 130 return ldPreferences->getShowErrors(); 131} 132 133- (bool)updateLdPreferences 134{ 135 int r, g, b, i; 136 137 TCUserDefaults::setBoolForKey([self getCheck:promptAtStartupCheck], "PromptForModelAtStartup", false); 138 TCUserDefaults::setBoolForKey([self getCheck:newModelWindowsCheck], "OpenModelsInNewWindows", false); 139 ldPreferences->setLineSmoothing([self getCheck:antialiasedLinesCheck]); 140 ldPreferences->setProcessLdConfig([self getCheck:processLDConfigCheck]); 141 ldPreferences->setRandomColors([self getCheck:randomColorsCheck]); 142 ldPreferences->setShowErrors([self getCheck:showErrorsCheck]); 143 ldPreferences->setDisableSmp([disableSmpCheck getCheck]); 144 ldPreferences->setShowFps([self getCheck:showFrameRateCheck]); 145 ldPreferences->setShowAxes([self getCheck:showAxesCheck]); 146 [self getColorWell:backgroundColorWell r:&r g:&g b:&b]; 147 ldPreferences->setBackgroundColor(r,g,b); 148 [self getColorWell:defaultColorWell r:&r g:&g b:&b]; 149 ldPreferences->setDefaultColor(r,g,b); 150 ldPreferences->setTransDefaultColor( 151 [self getCheck:transparentDefaultCheck]); 152 ldPreferences->setFov([fovField floatValue]); 153 ldPreferences->setMemoryUsage((int)[[memoryUsagePopUp selectedItem] tag]); 154 for (i = LDPreferences::SOFirst; i <= LDPreferences::SOLast; i++) 155 { 156 if (i < [saveDirs count]) 157 { 158 LDPreferences::SaveOp op = (LDPreferences::SaveOp)i; 159 160 ldPreferences->setSaveDirMode(op, (LDPreferences::DefaultDirMode)[[saveDirPopUps objectAtIndex:i] selectedTag]); 161 ldPreferences->setSaveDir(op, [[saveDirs objectAtIndex:i] UTF8String]); 162 } 163 } 164 return [super updateLdPreferences]; 165} 166 167- (IBAction)resetPage:(id)sender 168{ 169 ldPreferences->loadDefaultGeneralSettings(false); 170 [super resetPage:sender]; 171} 172 173- (IBAction)saveDirMode:(id)sender 174{ 175 int tag = (int)[sender tag]; 176 177 [self updateSaveDirForOp:tag]; 178} 179 180- (void)textDidChange:(NSNotification *)aNotification 181{ 182 id sender = [aNotification object]; 183 int tag = (int)[sender tag]; 184 185 if (tag < [saveDirFields count] && [saveDirFields objectAtIndex:tag] == sender) 186 { 187 [saveDirs replaceObjectAtIndex:tag withObject:[sender stringValue]]; 188 } 189 [super textDidChange:aNotification]; 190} 191 192- (void)openPanelDidEnd:(NSOpenPanel *)openPanel returnCode:(NSModalResponse)returnCode contextInfo:(void *)contextInfo 193{ 194 if (returnCode == NSModalResponseOK) 195 { 196 int tag = (int)[(id)contextInfo tag]; 197 198 if (tag < [saveDirFields count]) 199 { 200 NSTextField *textField = [saveDirFields objectAtIndex:tag]; 201 202 [textField setStringValue:[openPanel ldvFilename]]; 203 [[NSNotificationCenter defaultCenter] postNotificationName:NSControlTextDidChangeNotification object:textField]; 204 } 205 } 206} 207 208- (IBAction)saveDirBrowse:(id)sender 209{ 210 int tag = (int)[sender tag]; 211 212 if (tag < [saveDirs count]) 213 { 214 NSString *dir = [saveDirs objectAtIndex:tag]; 215 216 if ([dir length] > 0) 217 { 218 [self browseForFolder:sender initialDir:dir]; 219 return; 220 } 221 } 222 [self browseForFolder:sender]; 223} 224 225- (int)saveDirModeForOp:(LDPreferences::SaveOp)op 226{ 227 return ldPreferences->getSaveDirMode(op); 228} 229 230- (NSString *)saveDirForOp:(LDPreferences::SaveOp)op 231{ 232 return [NSString stringWithUTF8String:ldPreferences->getSaveDir(op).c_str()]; 233} 234 235@end 236