Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/slic3r/GUI/InstanceCheckMac.mm')
-rw-r--r--src/slic3r/GUI/InstanceCheckMac.mm84
1 files changed, 84 insertions, 0 deletions
diff --git a/src/slic3r/GUI/InstanceCheckMac.mm b/src/slic3r/GUI/InstanceCheckMac.mm
new file mode 100644
index 000000000..9969b1a7b
--- /dev/null
+++ b/src/slic3r/GUI/InstanceCheckMac.mm
@@ -0,0 +1,84 @@
+#import "InstanceCheck.hpp"
+#import "InstanceCheckMac.h"
+#import "GUI_App.hpp"
+
+@implementation OtherInstanceMessageHandlerMac
+
+-(instancetype) init
+{
+ self = [super init];
+ return self;
+}
+-(void)add_observer:(NSString *)version_hash
+{
+ //NSLog(@"adding observer");
+ //NSString *nsver = @"OtherPrusaSlicerInstanceMessage" + version_hash;
+ NSString *nsver = [NSString stringWithFormat: @"%@%@", @"OtherPrusaSlicerInstanceMessage", version_hash];
+ [[NSDistributedNotificationCenter defaultCenter] addObserver:self selector:@selector(message_update:) name:nsver object:nil suspensionBehavior:NSNotificationSuspensionBehaviorDeliverImmediately];
+}
+
+-(void)message_update:(NSNotification *)msg
+{
+ [self bring_forward];
+ //pass message
+ Slic3r::GUI::wxGetApp().other_instance_message_handler()->handle_message(std::string([msg.userInfo[@"data"] UTF8String]));
+}
+
+-(void) bring_forward
+{
+ //demiaturize all windows
+ for(NSWindow* win in [NSApp windows])
+ {
+ if([win isMiniaturized])
+ {
+ [win deminiaturize:self];
+ }
+ }
+ //bring window to front
+ [[NSApplication sharedApplication] activateIgnoringOtherApps : YES];
+}
+
+@end
+
+namespace Slic3r {
+
+void send_message_mac(const std::string &msg, const std::string &version)
+{
+ NSString *nsmsg = [NSString stringWithCString:msg.c_str() encoding:[NSString defaultCStringEncoding]];
+ //NSString *nsver = @"OtherPrusaSlicerInstanceMessage" + [NSString stringWithCString:version.c_str() encoding:[NSString defaultCStringEncoding]];
+ NSString *nsver = [NSString stringWithCString:version.c_str() encoding:[NSString defaultCStringEncoding]];
+ NSString *notifname = [NSString stringWithFormat: @"%@%@", @"OtherPrusaSlicerInstanceMessage", nsver];
+ [[NSDistributedNotificationCenter defaultCenter] postNotificationName:notifname object:nil userInfo:[NSDictionary dictionaryWithObject:nsmsg forKey:@"data"] deliverImmediately:YES];
+}
+
+namespace GUI {
+void OtherInstanceMessageHandler::register_for_messages(const std::string &version_hash)
+{
+ m_impl_osx = [[OtherInstanceMessageHandlerMac alloc] init];
+ if(m_impl_osx) {
+ NSString *nsver = [NSString stringWithCString:version_hash.c_str() encoding:[NSString defaultCStringEncoding]];
+ [m_impl_osx add_observer:nsver];
+ }
+}
+
+void OtherInstanceMessageHandler::unregister_for_messages()
+{
+ //NSLog(@"unreegistering other instance messages");
+ if (m_impl_osx) {
+ [m_impl_osx release];
+ m_impl_osx = nullptr;
+ } else {
+ NSLog(@"warning: unregister instance InstanceCheck notifications not required");
+ }
+}
+
+void OtherInstanceMessageHandler::bring_instance_forward()
+{
+ if (m_impl_osx) {
+ [m_impl_osx bring_forward];
+ }
+}
+}//namespace GUI
+}//namespace Slicer
+
+