#include "osdialog.h" #include #include int osdialog_message(osdialog_message_level level, osdialog_message_buttons buttons, const char *message) { NSAlert *alert = [[NSAlert alloc] init]; switch (level) { default: #ifdef __MAC_10_12 case OSDIALOG_INFO: [alert setAlertStyle:NSAlertStyleInformational]; break; case OSDIALOG_WARNING: [alert setAlertStyle:NSAlertStyleWarning]; break; case OSDIALOG_ERROR: [alert setAlertStyle:NSAlertStyleCritical]; break; #else case OSDIALOG_INFO: [alert setAlertStyle:NSInformationalAlertStyle]; break; case OSDIALOG_WARNING: [alert setAlertStyle:NSWarningAlertStyle]; break; case OSDIALOG_ERROR: [alert setAlertStyle:NSCriticalAlertStyle]; break; #endif } switch (buttons) { default: case OSDIALOG_OK: [alert addButtonWithTitle:@"OK"]; break; case OSDIALOG_OK_CANCEL: [alert addButtonWithTitle:@"OK"]; [alert addButtonWithTitle:@"Cancel"]; break; case OSDIALOG_YES_NO: [alert addButtonWithTitle:@"Yes"]; [alert addButtonWithTitle:@"No"]; break; } NSString *messageString = [NSString stringWithUTF8String:message]; // [alert setInformativeText:messageString]; [alert setMessageText:messageString]; int result; if ([alert runModal] == NSAlertFirstButtonReturn) { result = 1; } else { result = 0; } [alert release]; return result; } char *osdialog_file(osdialog_file_action action, const char *path, const char *filename, osdialog_filters *filters) { NSSavePanel *panel; NSOpenPanel *open_panel; // No idea how to manage memory with Objective C. Please help! NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; if (action == OSDIALOG_OPEN || action == OSDIALOG_OPEN_DIR) { open_panel = [NSOpenPanel openPanel]; panel = open_panel; } else { panel = [NSSavePanel savePanel]; } // Bring dialog to front // https://stackoverflow.com/a/2402069 // Thanks Dave! [panel setLevel:CGShieldingWindowLevel()]; if (filters) { NSMutableArray *fileTypes = [[NSMutableArray alloc] init]; for (; filters; filters = filters->next) { for (osdialog_filter_patterns *patterns = filters->patterns; patterns; patterns = patterns->next) { NSString *fileType = [NSString stringWithUTF8String:patterns->pattern]; [fileTypes addObject:fileType]; } } [panel setAllowedFileTypes:fileTypes]; // [fileTypes release]; } if (action == OSDIALOG_OPEN || action == OSDIALOG_OPEN_DIR) { open_panel.allowsMultipleSelection = NO; } if (action == OSDIALOG_OPEN) { open_panel.canChooseDirectories = NO; open_panel.canChooseFiles = YES; } if (action == OSDIALOG_OPEN_DIR) { open_panel.canCreateDirectories = YES; open_panel.canChooseDirectories = YES; open_panel.canChooseFiles = NO; } if (path) { NSString *path_str = [NSString stringWithUTF8String:path]; NSURL *path_url = [NSURL fileURLWithPath:path_str]; panel.directoryURL = path_url; // [path_url release]; // [path_str release]; } if (filename) { NSString *filenameString = [NSString stringWithUTF8String:filename]; panel.nameFieldStringValue = filenameString; // [filenameString release]; } char *result = NULL; #ifdef __MAC_10_9 #define OK NSModalResponseOK #else #define OK NSOKButton #endif if ([panel runModal] == OK) { NSURL *result_url = [panel URL]; result = strdup([[result_url path] UTF8String]); // [result_url release]; } // [panel release]; [pool release]; return result; } int osdialog_color_picker(osdialog_color *color, int opacity) { assert(0); // TODO I have no idea what I'm doing here NSColorPanel *panel = [NSColorPanel sharedColorPanel]; // [panel setDelegate:self]; [panel isVisible]; // if (opacity) // [panel setShowAlpha:YES]; // else // [panel setShowAlpha:NO]; // [panel makeKeyAndOrderFront:self]; return 0; }