mirror of
https://github.com/vcmi/vcmi.git
synced 2024-12-26 22:57:00 +02:00
73 lines
2.2 KiB
Plaintext
73 lines
2.2 KiB
Plaintext
/*
|
|
* selectdirectory.mm, part of VCMI engine
|
|
*
|
|
* Authors: listed in file AUTHORS in main folder
|
|
*
|
|
* License: GNU General Public License v2.0 or later
|
|
* Full text of license available in license.txt file, in main folder
|
|
*
|
|
*/
|
|
#include "selectdirectory.h"
|
|
|
|
#include <QEventLoop>
|
|
|
|
#import <UIKit/UIKit.h>
|
|
#import <UniformTypeIdentifiers/UniformTypeIdentifiers.h>
|
|
#import <MobileCoreServices/MobileCoreServices.h>
|
|
|
|
|
|
@interface ObjcDocumentPickerDelegate : NSObject <UIDocumentPickerDelegate>
|
|
@property (nonatomic, assign, readonly) QEventLoop & eventLoop;
|
|
@property (nonatomic, copy, nullable) NSURL * selectedDirectoryURL;
|
|
@end
|
|
|
|
@implementation ObjcDocumentPickerDelegate
|
|
{
|
|
QEventLoop _eventLoop;
|
|
}
|
|
|
|
- (QEventLoop &)eventLoop { return _eventLoop; }
|
|
|
|
- (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentsAtURLs:(NSArray<NSURL *> *)urls
|
|
{
|
|
self.selectedDirectoryURL = urls.firstObject;
|
|
_eventLoop.exit();
|
|
}
|
|
|
|
- (void)documentPickerWasCancelled:(UIDocumentPickerViewController *)controller
|
|
{
|
|
_eventLoop.exit();
|
|
}
|
|
|
|
@end
|
|
|
|
static ObjcDocumentPickerDelegate * documentPickerDelegate;
|
|
|
|
|
|
SelectDirectory::~SelectDirectory()
|
|
{
|
|
[documentPickerDelegate.selectedDirectoryURL stopAccessingSecurityScopedResource];
|
|
documentPickerDelegate = nil;
|
|
}
|
|
|
|
QString SelectDirectory::getExistingDirectory()
|
|
{
|
|
documentPickerDelegate = [ObjcDocumentPickerDelegate new];
|
|
|
|
UIDocumentPickerViewController * documentPickerVc;
|
|
if(@available(iOS 14.0, *))
|
|
documentPickerVc = [[UIDocumentPickerViewController alloc] initForOpeningContentTypes:@[UTTypeFolder]];
|
|
else
|
|
documentPickerVc = [[UIDocumentPickerViewController alloc] initWithDocumentTypes:@[(__bridge NSString *)kUTTypeFolder] inMode:UIDocumentPickerModeOpen];
|
|
documentPickerVc.allowsMultipleSelection = NO;
|
|
documentPickerVc.delegate = documentPickerDelegate;
|
|
[UIApplication.sharedApplication.keyWindow.rootViewController presentViewController:documentPickerVc animated:YES completion:nil];
|
|
|
|
documentPickerDelegate.eventLoop.exec(QEventLoop::DialogExec);
|
|
if(!documentPickerDelegate.selectedDirectoryURL)
|
|
return {};
|
|
|
|
[documentPickerDelegate.selectedDirectoryURL startAccessingSecurityScopedResource];
|
|
return QString::fromNSString(documentPickerDelegate.selectedDirectoryURL.path);
|
|
}
|