1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
|
//
// osx.m
// Hivelytracker: OSX dialog and file reqester support
//
// Created by Christopher O'Neill on 15/10/2012.
//
#import <Cocoa/Cocoa.h>
#import "NSFileManager+DirectoryLocations.h"
typedef uint32_t uint32;
typedef int32_t int32;
typedef char TEXT;
extern BOOL enableKeys;
int32 gui_req( uint32 img, const TEXT *title, const TEXT *reqtxt, const TEXT *buttons )
{
int i;
NSAlert *alert = [[[NSAlert alloc] init] autorelease];
[alert setMessageText:[NSString stringWithCString:title encoding:NSASCIIStringEncoding]];
[alert setInformativeText:[NSString stringWithCString:reqtxt encoding:NSASCIIStringEncoding]];
NSMutableString *btnStr = [NSMutableString stringWithCString:buttons encoding:NSASCIIStringEncoding];
[btnStr replaceOccurrencesOfString:@"_" withString:@"" options:0
range:NSMakeRange(0, [btnStr length])];
NSArray *btnArr = [btnStr componentsSeparatedByString:@"|"];
for (btnStr in [[btnArr reverseObjectEnumerator] allObjects])
{
[alert addButtonWithTitle:btnStr];
}
enableKeys = TRUE;
i = [alert runModal] - 1000;
enableKeys = FALSE;
return i;
}
#define FR_HVLSAVE 0
#define FR_AHXSAVE 1
#define FR_INSSAVE 2
#define FR_MODLOAD 3
#define FR_INSLOAD 4
char *filerequester( const char *title, const char *path, const char *fname, int type )
{
NSArray *fileTypes;
NSSavePanel *savePanel;
NSOpenPanel *panel;
switch (type) {
case FR_HVLSAVE:
fileTypes = [NSArray arrayWithObjects:@"hvl", @"HVL", nil];
break;
case FR_AHXSAVE:
fileTypes = [NSArray arrayWithObjects:@"ahx", @"AHX", nil];
break;
case FR_INSSAVE:
case FR_INSLOAD:
fileTypes = [NSArray arrayWithObjects:@"ins", @"INS", nil];
break;
case FR_MODLOAD:
fileTypes = [NSArray arrayWithObjects:@"hvl", @"HVL", @"ahx", @"AHX", nil];
break;
default:
return NULL;
}
if ((type == FR_INSLOAD) || (type == FR_MODLOAD)) {
panel = [NSOpenPanel openPanel];
} else {
savePanel = [NSSavePanel savePanel];
panel = (NSOpenPanel *)savePanel;
}
[panel setAllowedFileTypes:fileTypes];
[panel setAllowsOtherFileTypes:YES];
[panel setTitle:[NSString stringWithCString:title encoding:NSASCIIStringEncoding]];
[panel setDirectoryURL:[NSURL fileURLWithPath:[NSString stringWithCString:path encoding:NSASCIIStringEncoding] isDirectory:YES]];
[panel setNameFieldStringValue:[NSString stringWithCString:fname encoding:NSASCIIStringEncoding]];
enableKeys = TRUE;
int i = [panel runModal];
enableKeys = FALSE;
if (i == 1) {
const char *cstr = [[[panel URL] path] UTF8String];
char *rval = (char *)malloc(strlen(cstr) + 1);
strcpy(rval, cstr);
return rval;
};
return NULL;
}
BOOL directoryrequester( const char *title, char *path )
{
NSOpenPanel *panel = [NSOpenPanel openPanel];
[panel setCanChooseFiles:NO];
[panel setCanChooseDirectories:YES];
[panel setTitle: [NSString stringWithCString:title encoding:NSASCIIStringEncoding]];
[panel setDirectoryURL:[NSURL fileURLWithPath:[NSString stringWithCString:path encoding:NSASCIIStringEncoding] isDirectory:YES]];
enableKeys = FALSE;
int i = [panel runModal];
enableKeys = FALSE;
if (i == 1) {
const char *cstr = [[[panel URL] path] UTF8String];
strncpy(path, cstr, 512);
return TRUE;
};
return FALSE;
}
char *osxGetPrefsPath()
{
static char *path;
if(!path) {
NSString *strPath = [[NSFileManager defaultManager] applicationSupportDirectory];
strPath = [strPath stringByAppendingPathComponent:@"ht.prefs"];
path = malloc([strPath length] + 1);
strcpy(path, [strPath UTF8String]);
}
return path;
}
char *osxGetResourcesPath(char *path, const char *pathAppend)
{
NSBundle *bundle = [NSBundle mainBundle];
NSString *strPath = [bundle resourcePath];
strPath = [strPath stringByAppendingPathComponent:[NSString stringWithUTF8String:pathAppend]];
if(!path)
path = malloc([strPath length] + 1);
strcpy(path, [strPath UTF8String]);
return path;
}
|