(OSX) Some setting menu work

This commit is contained in:
meancoot 2013-08-25 19:28:57 -04:00
parent 72057ab9be
commit 2c20644ecb
2 changed files with 83 additions and 16 deletions

View File

@ -17,6 +17,9 @@
#import "../RetroArch/RetroArch_Apple.h" #import "../RetroArch/RetroArch_Apple.h"
#include "../RetroArch/setting_data.h" #include "../RetroArch/setting_data.h"
struct settings fake_settings;
struct global fake_extern;
@interface RASettingsDelegate : NSObject<NSTableViewDataSource, NSTableViewDelegate, @interface RASettingsDelegate : NSObject<NSTableViewDataSource, NSTableViewDelegate,
NSOutlineViewDataSource, NSOutlineViewDelegate> NSOutlineViewDataSource, NSOutlineViewDelegate>
@end @end
@ -37,6 +40,9 @@
NSMutableArray* thisSubGroup = nil; NSMutableArray* thisSubGroup = nil;
_settings = [NSMutableArray array]; _settings = [NSMutableArray array];
memcpy(&fake_settings, &g_settings, sizeof(struct settings));
memcpy(&fake_extern, &g_extern, sizeof(struct global));
for (int i = 0; setting_data[i].type; i ++) for (int i = 0; setting_data[i].type; i ++)
{ {
switch (setting_data[i].type) switch (setting_data[i].type)
@ -83,11 +89,51 @@
- (IBAction)close:(id)sender - (IBAction)close:(id)sender
{ {
#if 0
config_file_t* conf = config_file_new(0);
for (int i = 0; setting_data[i].type; i ++)
{
switch (setting_data[i].type)
{
case ST_BOOL: config_set_bool (conf, setting_data[i].name, * (bool*)setting_data[i].value); break;
case ST_INT: config_set_int (conf, setting_data[i].name, * (int*)setting_data[i].value); break;
case ST_FLOAT: config_set_float (conf, setting_data[i].name, *(float*)setting_data[i].value); break;
case ST_PATH: config_set_string(conf, setting_data[i].name, (char*)setting_data[i].value); break;
case ST_STRING: config_set_string(conf, setting_data[i].name, (char*)setting_data[i].value); break;
case ST_HEX: break;
default: break;
}
}
config_file_free(conf);
#endif
[NSApplication.sharedApplication stopModal]; [NSApplication.sharedApplication stopModal];
[NSApplication.sharedApplication endSheet:_window returnCode:0]; [NSApplication.sharedApplication endSheet:_window returnCode:0];
[_window orderOut:nil]; [_window orderOut:nil];
} }
- (void)readConfigFile:(const char*)path
{
config_file_t* conf = config_file_new(path);
if (conf)
{
for (int i = 0; setting_data[i].type; i ++)
{
switch (setting_data[i].type)
{
case ST_BOOL: config_get_bool (conf, setting_data[i].name, (bool*)setting_data[i].value); break;
case ST_INT: config_get_int (conf, setting_data[i].name, (int*)setting_data[i].value); break;
case ST_FLOAT: config_get_float(conf, setting_data[i].name, (float*)setting_data[i].value); break;
case ST_PATH: config_get_array(conf, setting_data[i].name, (char*)setting_data[i].value, setting_data[i].size); break;
case ST_STRING: config_get_array(conf, setting_data[i].name, (char*)setting_data[i].value, setting_data[i].size); break;
case ST_HEX: break;
default: break;
}
}
config_file_free(conf);
}
}
#pragma mark View Builders #pragma mark View Builders
- (NSView*)labelAccessoryFor:(NSString*)text onTable:(NSTableView*)table - (NSView*)labelAccessoryFor:(NSString*)text onTable:(NSTableView*)table
@ -105,7 +151,7 @@
return result; return result;
} }
- (NSView*)booleanAccessoryFor:(const rarch_setting_t*)setting onTable:(NSTableView*)table - (NSView*)booleanAccessoryFor:(const rarch_setting_t*)setting index:(NSNumber*)index onTable:(NSTableView*)table
{ {
NSButton* result = [table makeViewWithIdentifier:@"boolean" owner:self]; NSButton* result = [table makeViewWithIdentifier:@"boolean" owner:self];
@ -114,12 +160,21 @@
result = [NSButton new]; result = [NSButton new];
result.buttonType = NSSwitchButton; result.buttonType = NSSwitchButton;
result.title = @""; result.title = @"";
result.target = self;
result.action = @selector(booleanChanged:);
} }
result.state = *(bool*)setting->value; result.state = *(bool*)setting->value;
objc_setAssociatedObject(result, "INDEX", index, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
return result; return result;
} }
- (void)booleanChanged:(NSButton*)sender
{
int index = [objc_getAssociatedObject(sender, "INDEX") intValue];
*(bool*)setting_data[index].value = sender.state;
}
#pragma mark Section Table #pragma mark Section Table
- (NSInteger)numberOfRowsInTableView:(NSTableView*)view - (NSInteger)numberOfRowsInTableView:(NSTableView*)view
{ {
@ -172,7 +227,7 @@
{ {
switch (setting->type) switch (setting->type)
{ {
case ST_BOOL: return [self booleanAccessoryFor:setting onTable:outlineView]; case ST_BOOL: return [self booleanAccessoryFor:setting index:item onTable:outlineView];
case ST_PATH: case ST_PATH:
case ST_STRING: case ST_STRING:

View File

@ -28,6 +28,7 @@ typedef struct
const char* name; const char* name;
void* value; void* value;
uint32_t size;
const char* short_description; const char* short_description;
const char* long_description; const char* long_description;
@ -40,18 +41,25 @@ typedef struct
bool allow_blank; bool allow_blank;
} rarch_setting_t; } rarch_setting_t;
#define START_GROUP(NAME) { ST_GROUP, NAME, 0, 0, 0, 0, 0, 0.0, 0.0, false }, extern struct settings fake_settings;
#define END_GROUP() { ST_END_GROUP, 0, 0, 0, 0, 0, 0, 0.0, 0.0, false }, extern struct global fake_extern;
#define START_SUB_GROUP(NAME) { ST_SUB_GROUP, NAME, 0, 0, 0, 0, 0, 0.0, 0.0, false },
#define END_SUB_GROUP() { ST_END_SUB_GROUP, 0, 0, 0, 0, 0, 0, 0.0, 0.0, false }, // HACK
#define START_GROUP(NAME) { ST_GROUP, NAME, 0, 0, 0, 0, 0, 0.0, 0.0, false }, #define g_settings fake_settings
#define END_GROUP() { ST_END_GROUP, 0, 0, 0, 0, 0, 0, 0.0, 0.0, false }, #define g_extern fake_extern
#define CONFIG_BOOL(TARGET, NAME, SHORT) { ST_BOOL, NAME, &TARGET, SHORT, 0, 0, 0, 0.0, 0.0, false },
#define CONFIG_INT(TARGET, NAME, SHORT) { ST_INT, NAME, &TARGET, SHORT, 0, 0, 0, 0.0, 0.0, false }, #define START_GROUP(NAME) { ST_GROUP, NAME },
#define CONFIG_FLOAT(TARGET, NAME, SHORT) { ST_FLOAT, NAME, &TARGET, SHORT, 0, 0, 0, 0.0, 0.0, false }, #define END_GROUP() { ST_END_GROUP },
#define CONFIG_PATH(TARGET, NAME, SHORT) { ST_PATH, NAME, &TARGET, SHORT, 0, 0, 0, 0.0, 0.0, false }, #define START_SUB_GROUP(NAME) { ST_SUB_GROUP, NAME },
#define CONFIG_STRING(TARGET, NAME, SHORT) { ST_STRING, NAME, &TARGET, SHORT, 0, 0, 0, 0.0, 0.0, false }, #define END_SUB_GROUP() { ST_END_SUB_GROUP },
#define CONFIG_HEX(TARGET, NAME, SHORT) { ST_HEX, NAME, &TARGET, SHORT, 0, 0, 0, 0.0, 0.0, false }, #define START_GROUP(NAME) { ST_GROUP, NAME, 0, 0, 0, 0, 0, 0, 0.0, 0.0, false },
#define END_GROUP() { ST_END_GROUP, 0, 0, 0, 0, 0, 0, 0, 0.0, 0.0, false },
#define CONFIG_BOOL(TARGET, NAME, SHORT) { ST_BOOL, NAME, &TARGET, sizeof(TARGET), SHORT, 0, 0, 0, 0.0, 0.0, false },
#define CONFIG_INT(TARGET, NAME, SHORT) { ST_INT, NAME, &TARGET, sizeof(TARGET), SHORT, 0, 0, 0, 0.0, 0.0, false },
#define CONFIG_FLOAT(TARGET, NAME, SHORT) { ST_FLOAT, NAME, &TARGET, sizeof(TARGET), SHORT, 0, 0, 0, 0.0, 0.0, false },
#define CONFIG_PATH(TARGET, NAME, SHORT) { ST_PATH, NAME, &TARGET, sizeof(TARGET), SHORT, 0, 0, 0, 0.0, 0.0, false },
#define CONFIG_STRING(TARGET, NAME, SHORT) { ST_STRING, NAME, &TARGET, sizeof(TARGET), SHORT, 0, 0, 0, 0.0, 0.0, false },
#define CONFIG_HEX(TARGET, NAME, SHORT) { ST_HEX, NAME, &TARGET, sizeof(TARGET), SHORT, 0, 0, 0, 0.0, 0.0, false },
const rarch_setting_t setting_data[] = const rarch_setting_t setting_data[] =
{ {
@ -162,8 +170,8 @@ const rarch_setting_t setting_data[] =
/* Input: Overlay */ /* Input: Overlay */
#ifdef HAVE_OVERLAY #ifdef HAVE_OVERLAY
CONFIG_PATH(g_settings.input.overlay, "input_overlay", "Input Overlay") CONFIG_PATH(g_settings.input.overlay, "input_overlay", "Input Overlay")
CONFIG_FLOAT(g_settings.input.overlay_opacity, "overlay_opacity", "Overlay Opacity") CONFIG_FLOAT(g_settings.input.overlay_opacity, "input_overlay_opacity", "Overlay Opacity")
CONFIG_FLOAT(g_settings.input.overlay_scale, "overlay_scale", "Overlay Scale") CONFIG_FLOAT(g_settings.input.overlay_scale, "input_overlay_scale", "Overlay Scale")
#endif #endif
/* Input: Android */ /* Input: Android */
@ -266,4 +274,8 @@ const rarch_setting_t setting_data[] =
{ 0 } { 0 }
}; };
// HACK
#undef g_settings fake_settings
#undef g_extern fake_extern
#endif #endif