From 0d2777c4ae7ef8b95734d3bc5855fa10f312d2c1 Mon Sep 17 00:00:00 2001 From: omigamedev Date: Sat, 7 Sep 2019 11:39:45 +0200 Subject: [PATCH] add file picker to osx --- PanoPainter-OSX/main.cpp | 26 ++++++++++++++++++++++++++ PanoPainter-OSX/main.h | 1 + src/app_events.cpp | 18 +++++++++--------- src/node_progress_bar.h | 2 +- 4 files changed, 37 insertions(+), 10 deletions(-) diff --git a/PanoPainter-OSX/main.cpp b/PanoPainter-OSX/main.cpp index 637d07b..2087a67 100644 --- a/PanoPainter-OSX/main.cpp +++ b/PanoPainter-OSX/main.cpp @@ -97,6 +97,32 @@ } return ret; } +- (std::string)pick_file_save:(NSArray*)types +{ + NSSavePanel *panel = [NSSavePanel savePanel]; + [panel setCanCreateDirectories:YES]; + + [panel setAllowedFileTypes:types]; + + [self removeTrackingArea:trackingArea]; + if (!cursor_visible) + [NSCursor unhide]; + + NSInteger clicked = [panel runModal]; + + [self addTrackingArea:trackingArea]; + if (!cursor_visible) + [NSCursor hide]; + + std::string ret; + if (clicked == NSFileHandlingPanelOKButton) + { + NSURL *url = [panel URL]; + LOG("selected file: %s", [[url path] cStringUsingEncoding:NSUTF8StringEncoding]); + ret = [[url path] cStringUsingEncoding:NSUTF8StringEncoding]; + } + return ret; +} - (std::string)pick_dir { NSOpenPanel *panel = [NSOpenPanel openPanel]; diff --git a/PanoPainter-OSX/main.h b/PanoPainter-OSX/main.h index 3b5f87c..ca42514 100644 --- a/PanoPainter-OSX/main.h +++ b/PanoPainter-OSX/main.h @@ -24,6 +24,7 @@ - (void)async_unlock; - (void)async_swap; - (std::string)pick_file:(NSArray*)types; +- (std::string)pick_file_save:(NSArray*)types; - (std::string)pick_dir; - (void)share_file:(NSString*)file_path; - (void)hockeyapp_crash; diff --git a/src/app_events.cpp b/src/app_events.cpp index 663fea7..e9eb409 100644 --- a/src/app_events.cpp +++ b/src/app_events.cpp @@ -204,15 +204,15 @@ void App::pick_file_save(std::vector types, std::function* fileTypes = [NSMutableArray arrayWithCapacity:types.size()]; - // for (const auto& t : types) - // [fileTypes addObject:[NSString stringWithCString:t.c_str() encoding:NSUTF8StringEncoding]]; - // std::string path = [osx_view pick_file:fileTypes]; - // if (!path.empty()) - // callback(path); - //}); + dispatch_async(dispatch_get_main_queue(), ^{ + //NSArray* fileTypes = [NSArray arrayWithObjects:@"ppi", @"PPI", nil]; + NSMutableArray* fileTypes = [NSMutableArray arrayWithCapacity:types.size()]; + for (const auto& t : types) + [fileTypes addObject:[NSString stringWithCString:t.c_str() encoding:NSUTF8StringEncoding]]; + std::string path = [osx_view pick_file_save:fileTypes]; + if (!path.empty()) + callback(path); + }); #elif __ANDROID__ //android_pick_file(callback); #elif _WIN32 diff --git a/src/node_progress_bar.h b/src/node_progress_bar.h index c570419..9e7a125 100644 --- a/src/node_progress_bar.h +++ b/src/node_progress_bar.h @@ -13,7 +13,7 @@ public: NodeBorder* m_progress; NodeBorder* m_body; int m_total = 0; - std::atomic_int m_count = 0; + std::atomic_int m_count{0}; virtual Node* clone_instantiate() const override; virtual void init() override; void increment() noexcept;