File: osx.m

package info (click to toggle)
hivelytracker 0%2Bgit20180223-3
  • links: PTS
  • area: main
  • in suites: buster
  • size: 3,092 kB
  • sloc: ansic: 19,601; objc: 434; cpp: 175; makefile: 88
file content (134 lines) | stat: -rw-r--r-- 3,895 bytes parent folder | download | duplicates (3)
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;
}