Add new settings to project page

This includes the previously hidden initial file browser location, whether or not to permanently show the tab bar, placement of file browser and command output.
This commit is contained in:
Allan Odgaard
2012-08-25 23:26:11 +02:00
parent 0ca407b72c
commit 7ecc0a8731
3 changed files with 884 additions and 44 deletions

View File

@@ -2,5 +2,6 @@
@interface ProjectsPreferences : PreferencesPane
{
IBOutlet NSPopUpButton* fileBrowserPathPopUp;
}
@end

View File

@@ -2,16 +2,24 @@
#import "Keys.h"
#import <settings/settings.h>
#import <OakAppKit/NSImage Additions.h>
#import <OakAppKit/NSMenuItem Additions.h>
#import <OakFoundation/NSString Additions.h>
#import <OakFoundation/OakStringListTransformer.h>
@implementation ProjectsPreferences
- (id)init
{
if(self = [super initWithNibName:@"ProjectsPreferences" label:@"Projects" image:[NSImage imageNamed:@"Projects" inSameBundleAsClass:[self class]]])
{
[OakStringListTransformer createTransformerWithName:@"OakFileBrowserPlacementSettingsTransformer" andObjectsArray:@[ @"left", @"right" ]];
[OakStringListTransformer createTransformerWithName:@"OakHTMLOutputPlacementSettingsTransformer" andObjectsArray:@[ @"bottom", @"right", @"window" ]];
self.defaultsProperties = @{
@"foldersOnTop" : kUserDefaultsFoldersOnTopKey,
@"showFileExtensions" : kUserDefaultsShowFileExtensionsKey,
@"foldersOnTop" : kUserDefaultsFoldersOnTopKey,
@"showFileExtensions" : kUserDefaultsShowFileExtensionsKey,
@"disableTabBarCollapsing" : kUserDefaultsDisableTabBarCollapsingKey,
@"fileBrowserPlacement" : kUserDefaultsFileBrowserPlacementKey,
@"htmlOutputPlacement" : kUserDefaultsHTMLOutputPlacementKey,
};
self.tmProperties = @{
@@ -22,4 +30,65 @@
}
return self;
}
- (void)selectOtherFileBrowserPath:(id)sender
{
NSOpenPanel* openPanel = [NSOpenPanel openPanel];
[openPanel setCanChooseFiles:NO];
[openPanel setCanChooseDirectories:YES];
[openPanel beginSheetModalForWindow:[self view].window completionHandler:^(NSInteger result) {
if(result == NSOKButton)
[[NSUserDefaults standardUserDefaults] setObject:[[openPanel URL] absoluteString] forKey:kUserDefaultsInitialFileBrowserURLKey];
[self updatePathPopUp];
}];
}
- (void)takeFileBrowserPathFrom:(id)sender
{
[[NSUserDefaults standardUserDefaults] setObject:[[sender representedObject] absoluteString] forKey:kUserDefaultsInitialFileBrowserURLKey];
[self updatePathPopUp];
}
- (NSMenuItem*)menuItemForURL:(NSURL*)aURL
{
NSMenuItem* res = [[[NSMenuItem alloc] initWithTitle:[[NSFileManager defaultManager] displayNameAtPath:[aURL path]] action:@selector(takeFileBrowserPathFrom:) keyEquivalent:@""] autorelease];
[res setTarget:self];
[res setRepresentedObject:aURL];
if([aURL isFileURL])
[res setIconForFile:[aURL path]];
return res;
}
- (void)updatePathPopUp
{
NSMenu* menu = [fileBrowserPathPopUp menu];
[menu removeAllItems];
NSURL* url = [NSURL fileURLWithPath:NSHomeDirectory()];
if(NSString* urlString = [[NSUserDefaults standardUserDefaults] stringForKey:kUserDefaultsInitialFileBrowserURLKey])
url = [NSURL URLWithString:urlString];
NSArray* defaultPathList = @[ [NSHomeDirectory() stringByAppendingPathComponent:@"Desktop"], NSHomeDirectory(), @"/" ];
if(![defaultPathList containsObject:[url path]])
{
[menu addItem:[self menuItemForURL:url]];
[menu addItem:[NSMenuItem separatorItem]];
}
for(NSString* path in defaultPathList)
{
[menu addItem:[self menuItemForURL:[NSURL fileURLWithPath:path]]];
if([path isEqualToString:[url path]])
[fileBrowserPathPopUp selectItemAtIndex:[menu numberOfItems]-1];
}
[menu addItem:[NSMenuItem separatorItem]];
[menu addItemWithTitle:@"Other…" action:@selector(selectOtherFileBrowserPath:) keyEquivalent:@""];
}
- (void)loadView
{
[super loadView];
[self updatePathPopUp];
}
@end