1// The following is necessary to get rid of some truly screwed up warnings 2#pragma GCC visibility push(default) 3 4#import "LDrawPage.h" 5#import "OCLocalStrings.h" 6#import "LDViewCategories.h" 7 8#include <TCFoundation/TCUserDefaults.h> 9#include <LDLib/LDPreferences.h> 10#include <LDLib/LDUserDefaultsKeys.h> 11 12@implementation LDrawPage 13 14- (void)dealloc 15{ 16 [tableViewReorder release]; 17 [super dealloc]; 18} 19 20- (void)setupExtraFolders:(const StringVector &)extraDirs 21{ 22 [extraFolders release]; 23 extraFolders = [[NSMutableArray alloc] initWithCapacity:extraDirs.size()]; 24 for (size_t i = 0; i < extraDirs.size(); i++) 25 { 26 [extraFolders addObject:[NSString stringWithUTF8String:extraDirs[i].c_str()]]; 27 } 28 [extraFoldersTableView reloadData]; 29} 30 31- (void)setup 32{ 33 [ldrawDirField setStringValue:[NSString stringWithUTF8String:ldPreferences->getLDrawDir()]]; 34 [self setupExtraFolders:ldPreferences->getExtraDirs()]; 35 [self setCheck:generateThumbnailsCheck value:[self generateThumbnails]]; 36 [super setup]; 37} 38 39+ (bool)verifyLDrawDir:(NSString *)ldrawDir 40{ 41 NSFileManager *fileManager = [NSFileManager defaultManager]; 42 BOOL isDir; 43 44 if ([ldrawDir length] == 0 && !TCUserDefaults::boolForKey(VERIFY_LDRAW_DIR_KEY, true, false)) 45 { 46 return true; 47 } 48 if ([fileManager fileExistsAtPath:ldrawDir isDirectory:&isDir] && isDir) 49 { 50 NSString *partsDir = [ldrawDir stringByAppendingPathComponent:@"parts"]; 51 52 if ([fileManager fileExistsAtPath:partsDir isDirectory:&isDir] && isDir) 53 { 54 NSString *pDir = [ldrawDir stringByAppendingPathComponent:@"p"]; 55 56 if ([fileManager fileExistsAtPath:pDir isDirectory:&isDir] && isDir) 57 { 58 return true; 59 } 60 } 61 } 62 return false; 63} 64 65- (void)updateLDrawDir:(NSString *)ldrawDir apply:(BOOL)apply 66{ 67 const char *value = [ldrawDir UTF8String]; 68 69 ldPreferences->setLDrawDir(value); 70 if (apply) 71 { 72 ldPreferences->applyLDrawSettings(); 73 ldPreferences->commitLDrawSettings(); 74 [ldrawDirField setStringValue:ldrawDir]; 75 LDrawModelViewer::resetUnofficialDownloadTimes(); 76 } 77} 78 79- (NSString *)ldrawDir 80{ 81 return [NSString stringWithUTF8String:ldPreferences->getLDrawDir()]; 82} 83 84- (void)updateLDrawDir:(NSString *)ldrawDir 85{ 86 [self updateLDrawDir:ldrawDir apply:YES]; 87} 88 89- (void)setGenerateThumbnails:(bool)value 90{ 91 BOOL disableThumbnails = value ? NO : YES; 92 NSUserDefaults *sud = [NSUserDefaults standardUserDefaults]; 93 NSMutableDictionary<NSString *, id>* udDomain = [[sud persistentDomainForName:@"com.cobbsville.LDViewQuickLook"] mutableCopy]; 94 [udDomain setObject:[NSNumber numberWithBool:disableThumbnails] forKey:@"DisableThumbnails"]; 95 [[NSUserDefaults standardUserDefaults] setPersistentDomain:udDomain forName:@"com.cobbsville.LDViewQuickLook"]; 96 [sud synchronize]; 97 [udDomain release]; 98} 99 100- (bool)updateLdPreferences 101{ 102 StringVector extraDirs; 103 104 if (![[self class] verifyLDrawDir:[ldrawDirField stringValue]]) 105 { 106 [preferences setApplyFailed:self]; 107 NSRunCriticalAlertPanel([OCLocalStrings get:@"InvalidDir"], [OCLocalStrings get:@"LDrawNotInDir"], [OCLocalStrings get:@"OK"], nil, nil); 108 return false; 109 } 110 [self updateLDrawDir:[ldrawDirField stringValue] apply:NO]; 111 for (int i = 0; i < [extraFolders count]; i++) 112 { 113 extraDirs.push_back([[extraFolders objectAtIndex:i] UTF8String]); 114 } 115 ldPreferences->setExtraDirs(extraDirs); 116 [self setGenerateThumbnails:[self getCheck:generateThumbnailsCheck]]; 117 return [super updateLdPreferences]; 118} 119 120- (IBAction)resetPage:(id)sender 121{ 122 ldPreferences->loadDefaultLDrawSettings(false); 123 [self setGenerateThumbnails:YES]; 124 [super resetPage:sender]; 125} 126 127- (void)openPanelDidEnd:(NSOpenPanel *)openPanel returnCode:(NSModalResponse)returnCode contextInfo:(void *)contextInfo 128{ 129 if (returnCode == NSModalResponseOK) 130 { 131 NSString *filename = [openPanel ldvFilename]; 132 133 if (filename) 134 { 135 if (contextInfo == ldrawDirField) 136 { 137 [ldrawDirField setStringValue:filename]; 138 } 139 else 140 { 141 [extraFolders addObject:filename]; 142 [extraFoldersTableView reloadData]; 143 } 144 [self valueChanged:self]; 145 } 146 } 147} 148 149- (void)addExtraFolder 150{ 151 [self browseForFolder:NULL]; 152} 153 154- (void)removeExtraFolder 155{ 156 NSInteger index = [extraFoldersTableView selectedRow]; 157 158 if (index >= 0) 159 { 160 [extraFolders removeObjectAtIndex:index]; 161 } 162 [extraFoldersTableView reloadData]; 163 [self valueChanged:self]; 164} 165 166- (IBAction)addRemoveExtraFolder:(id)sender 167{ 168 switch ([addRemoveExtraFolder selectedSegment]) 169 { 170 case 0: 171 [self addExtraFolder]; 172 break; 173 case 1: 174 [self removeExtraFolder]; 175 break; 176 } 177} 178 179- (NSMutableArray *)tableRows:(TableViewReorder *)sender 180{ 181 return extraFolders; 182} 183 184- (void)awakeFromNib 185{ 186 NSSegmentedCell *segmentCell = [addRemoveExtraFolder cell]; 187 188 [segmentCell setToolTip:[OCLocalStrings get:@"AddExtraSearchFolder"] forSegment:0]; 189 [segmentCell setToolTip:[OCLocalStrings get:@"RemoveExtraSearchFolder"] forSegment:1]; 190 tableViewReorder = [[TableViewReorder alloc] initWithTableView:extraFoldersTableView owner:self dragType:@"LDViewExtraDirsDragType"]; 191 [super awakeFromNib]; 192} 193 194- (IBAction)extraFolderSelected:(id)sender 195{ 196 [addRemoveExtraFolder setEnabled:[extraFoldersTableView selectedRow] != -1 forSegment:1]; 197} 198 199- (IBAction)ldrawFolderBrowse:(id)sender 200{ 201 [self browseForFolder:ldrawDirField]; 202} 203 204- (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView 205{ 206 return (NSInteger)extraFolders.count; 207} 208 209- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex 210{ 211 return [extraFolders objectAtIndex:rowIndex]; 212} 213 214- (void)tableViewReorderDidOccur:(id)sender 215{ 216 [self valueChanged:self]; 217} 218 219- (bool)generateThumbnails 220{ 221 NSUserDefaults *sud = [NSUserDefaults standardUserDefaults]; 222 NSDictionary<NSString *, id>* udDomain = [sud persistentDomainForName:@"com.cobbsville.LDViewQuickLook"]; 223 BOOL disableThumbnails = [[udDomain objectForKey:@"DisableThumbnails"] boolValue]; 224 return disableThumbnails ? false : true; 225} 226 227@end 228