aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThierry Crozat2013-03-17 18:14:21 +0000
committerThierry Crozat2013-03-17 18:14:21 +0000
commitf1d59de3d51cf292623474d204dd5060f873d79c (patch)
tree3a7d0813cbae0f6824407785473b6e8dc6d47b49
parent2f73d64e803c3be97d20bdbd1c4c482e783eb3d6 (diff)
downloadscummvm-rg350-f1d59de3d51cf292623474d204dd5060f873d79c.tar.gz
scummvm-rg350-f1d59de3d51cf292623474d204dd5060f873d79c.tar.bz2
scummvm-rg350-f1d59de3d51cf292623474d204dd5060f873d79c.zip
OSX: Allow user to display hidden files in the browser dialog
-rw-r--r--gui/browser.h1
-rw-r--r--gui/browser_osx.mm76
2 files changed, 77 insertions, 0 deletions
diff --git a/gui/browser.h b/gui/browser.h
index 7c098617bb..b82fe516f9 100644
--- a/gui/browser.h
+++ b/gui/browser.h
@@ -51,6 +51,7 @@ protected:
#ifdef MACOSX
const void *_titleRef;
const void *_chooseRef;
+ const void *_hiddenFilesRef;
#else
ListWidget *_fileList;
StaticTextWidget *_currentPath;
diff --git a/gui/browser_osx.mm b/gui/browser_osx.mm
index ecd60915f8..d0bbfd546d 100644
--- a/gui/browser_osx.mm
+++ b/gui/browser_osx.mm
@@ -31,9 +31,53 @@
#include "common/translation.h"
#include <AppKit/NSOpenPanel.h>
+#include <AppKit/NSButton.h>
#include <Foundation/NSString.h>
#include <Foundation/NSURL.h>
+@interface ShowHiddenFilesControler : NSObject {
+ NSOpenPanel* _panel;
+}
+
+- (id) init;
+- (void) dealloc;
+- (void) setOpenPanel : (NSOpenPanel*) panel;
+- (IBAction) showHiddenFiles : (id) sender;
+
+@end
+
+@implementation ShowHiddenFilesControler
+
+- (id) init {
+ self = [super init];
+ _panel = 0;
+
+ return self;
+}
+
+- (void) dealloc {
+ [_panel release];
+ [super dealloc];
+}
+
+- (void) setOpenPanel : (NSOpenPanel*) panel {
+ _panel = panel;
+ [_panel retain];
+}
+
+
+- (IBAction) showHiddenFiles : (id) sender {
+ if ([sender state] == NSOnState) {
+ [_panel setShowsHiddenFiles: YES];
+ ConfMan.setBool("gui_browser_show_hidden", true, Common::ConfigManager::kApplicationDomain);
+ } else {
+ [_panel setShowsHiddenFiles: NO];
+ ConfMan.setBool("gui_browser_show_hidden", false, Common::ConfigManager::kApplicationDomain);
+ }
+}
+
+@end
+
namespace GUI {
BrowserDialog::BrowserDialog(const char *title, bool dirBrowser)
@@ -56,11 +100,13 @@ BrowserDialog::BrowserDialog(const char *title, bool dirBrowser)
// Convert button text to NSString
_chooseRef = CFStringCreateWithCString(0, _("Choose"), stringEncoding);
+ _hiddenFilesRef = CFStringCreateWithCString(0, _("Show hidden files"), stringEncoding);
}
BrowserDialog::~BrowserDialog() {
CFRelease(_titleRef);
CFRelease(_chooseRef);
+ CFRelease(_hiddenFilesRef);
}
int BrowserDialog::runModal() {
@@ -82,6 +128,31 @@ int BrowserDialog::runModal() {
[panel setCanChooseDirectories:_isDirBrowser];
[panel setTitle:(NSString *)_titleRef];
[panel setPrompt:(NSString *)_chooseRef];
+
+ NSButton *shoHiddenFilesButton = 0;
+ ShowHiddenFilesControler *shoHiddenFilesControler = 0;
+ if ([panel respondsToSelector:@selector(setShowsHiddenFiles:)]) {
+ shoHiddenFilesButton = [[NSButton alloc] init];
+ [shoHiddenFilesButton retain];
+ [shoHiddenFilesButton setButtonType:NSSwitchButton];
+ [shoHiddenFilesButton setTitle:(NSString *)_hiddenFilesRef];
+ [shoHiddenFilesButton sizeToFit];
+ if (ConfMan.getBool("gui_browser_show_hidden", Common::ConfigManager::kApplicationDomain)) {
+ [shoHiddenFilesButton setState:NSOnState];
+ [panel setShowsHiddenFiles: YES];
+ } else {
+ [shoHiddenFilesButton setState:NSOffState];
+ [panel setShowsHiddenFiles: NO];
+ }
+ [panel setAccessoryView:shoHiddenFilesButton];
+
+ shoHiddenFilesControler = [[ShowHiddenFilesControler alloc] init];
+ [shoHiddenFilesControler retain];
+ [shoHiddenFilesControler setOpenPanel:panel];
+ [shoHiddenFilesButton setTarget:shoHiddenFilesControler];
+ [shoHiddenFilesButton setAction:@selector(showHiddenFiles:)];
+ }
+
if ([panel runModal] == NSOKButton) {
NSURL *url = [panel URL];
if ([url isFileURL]) {
@@ -91,6 +162,11 @@ int BrowserDialog::runModal() {
}
}
+ if (shoHiddenFilesButton != 0)
+ [shoHiddenFilesButton release];
+ if (shoHiddenFilesControler != 0)
+ [shoHiddenFilesControler release];
+
// If we were in fullscreen mode, switch back
if (wasFullscreen) {
g_system->beginGFXTransaction();