ardour/gtk2_ardour/open_file_dialog.mm

181 lines
5.6 KiB
Text
Raw Normal View History

/*
Copyright (C) 2014 Waves Audio Ltd.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#import "open_file_dialog.h"
#import <Cocoa/Cocoa.h>
#include <string>
#include <iostream>
using namespace std;
/* ====== "trampoline" functions to invoke Objective-C method ====== */
string
ARDOUR::open_file_dialog (std::string initial_path, string title)
{
NSString *nsTitle = [NSString stringWithUTF8String:title.c_str()];
//NP: we should find some gentle way to do this
NSString *nsDefaultPath = [NSString stringWithUTF8String:initial_path.c_str()];
// Call the Objective-C method using Objective-C syntax
NSString *nsPath = [FileDialog class_open_file_dialog:nsTitle withArg2:nsDefaultPath];
string stdPath = [nsPath UTF8String];
return stdPath;
}
string
ARDOUR::save_file_dialog (std::string initial_path, string title)
{
NSString *nsTitle = [NSString stringWithUTF8String:title.c_str()];
//NP: we should find some gentle way to do this
NSString *nsDefaultPath = [NSString stringWithUTF8String:initial_path.c_str()];
// Call the Objective-C method using Objective-C syntax
NSString *nsPath = [FileDialog class_save_file_dialog:nsTitle withArg2:nsDefaultPath];
string stdPath = [nsPath UTF8String];
return stdPath;
}
string
ARDOUR::choose_folder_dialog(std::string initial_path, string title)
{
NSString *nsTitle = [NSString stringWithUTF8String:title.c_str()];
//NP: we should find some gentle way to do this
NSString *nsDefaultPath = [NSString stringWithUTF8String:initial_path.c_str()];
// Call the Objective-C method using Objective-C syntax
NSString *nsPath = [FileDialog class_choose_folder_dialog:nsTitle withArg2:nsDefaultPath];
string stdPath = [nsPath UTF8String];
return stdPath;
}
/* ====== Objective-C functions called from C++ functions ====== */
@implementation FileDialog
/* On open saved session */
+ (NSString*) class_open_file_dialog:(NSString *)title withArg2:(NSString *)initial_path
{
// Create a File Open Dialog class.
NSOpenPanel* openDlg = [NSOpenPanel openPanel];
// Set array of file types
NSArray *fileTypesArray;
fileTypesArray = [NSArray arrayWithObjects:@"ardour", nil];
[openDlg setCanChooseFiles:YES];
[openDlg setAllowedFileTypes:fileTypesArray];
[openDlg setAllowsMultipleSelection:FALSE];
[openDlg setTitle:title];
NSFileManager *fm = [[NSFileManager alloc] init];
BOOL isDir;
BOOL exists = [fm fileExistsAtPath:initial_path isDirectory:&isDir];
if(!exists)
initial_path = NSHomeDirectory();
[openDlg setDirectoryURL : [NSURL fileURLWithPath:initial_path]];
// Display the dialog box. If the OK pressed,
// process the files.
if ( [openDlg runModal] == NSOKButton )
{
// Gets first selected file
NSArray *files = [openDlg URLs];
NSURL *saveURL = [files objectAtIndex:0];
NSString *filePath = [saveURL path];
return filePath;
}
return @"";
}
/* On create new session */
+ (NSString*) class_save_file_dialog:(NSString *)title withArg2:(NSString *)initial_path
{
// Create a File Open Dialog class.
NSSavePanel* saveDlg = [NSSavePanel savePanel];
[saveDlg setTitle:title];
[saveDlg setCanCreateDirectories:YES];
NSFileManager *fm = [[NSFileManager alloc] init];
BOOL isDir;
BOOL exists = [fm fileExistsAtPath:initial_path isDirectory:&isDir];
if(!exists)
initial_path = NSHomeDirectory();
[saveDlg setDirectoryURL : [NSURL fileURLWithPath:initial_path]];
// Display the dialog box. If the OK pressed,
// process the files.
if ( [saveDlg runModal] == NSOKButton )
{
// Gets list of all files selected
NSURL *saveURL = [saveDlg URL];
NSString *filePath = [saveURL path];
return filePath;
}
return @"";
}
+ (NSString*) class_choose_folder_dialog:(NSString *)title withArg2:(NSString *)initial_path
{
// Create a File Open Dialog class.
NSOpenPanel* openDlg = [NSOpenPanel openPanel];
[openDlg setCanChooseDirectories:YES];
[openDlg setAllowsMultipleSelection:FALSE];
[openDlg setTitle:title];
NSFileManager *fm = [[NSFileManager alloc] init];
BOOL isDir;
BOOL exists = [fm fileExistsAtPath:initial_path isDirectory:&isDir];
if(!exists)
initial_path = NSHomeDirectory();
[openDlg setDirectoryURL : [NSURL fileURLWithPath:initial_path]];
// Display the dialog box. If the OK pressed,
// process the files.
if ( [openDlg runModal] == NSOKButton )
{
// Gets first selected file
NSArray *files = [openDlg URLs];
NSURL *saveURL = [files objectAtIndex:0];
NSString *filePath = [saveURL path];
return filePath;
}
return @"";
}
@end