mirror of
https://github.com/libretro/RetroArch
synced 2025-02-22 03:40:43 +00:00
(iOS) Simplify RAMenu item creation
This commit is contained in:
parent
fae4b05440
commit
dd45169063
@ -60,7 +60,6 @@
|
|||||||
@property (nonatomic) rarch_setting_t* setting;
|
@property (nonatomic) rarch_setting_t* setting;
|
||||||
@property (copy) void (^action)();
|
@property (copy) void (^action)();
|
||||||
@property (nonatomic, weak) UITableView* parentTable;
|
@property (nonatomic, weak) UITableView* parentTable;
|
||||||
+ (id)itemForSetting:(rarch_setting_t*)setting action:(void (^)())action;
|
|
||||||
- (id)initWithSetting:(rarch_setting_t*)setting action:(void (^)())action;
|
- (id)initWithSetting:(rarch_setting_t*)setting action:(void (^)())action;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@ -214,6 +213,7 @@ static void RunActionSheet(const char* title, const struct string_list* items, U
|
|||||||
size_t i;
|
size_t i;
|
||||||
RARunActionSheetDelegate* delegate = [[RARunActionSheetDelegate alloc] initWithCallbackBlock:callback];
|
RARunActionSheetDelegate* delegate = [[RARunActionSheetDelegate alloc] initWithCallbackBlock:callback];
|
||||||
UIActionSheet* actionSheet = [UIActionSheet new];
|
UIActionSheet* actionSheet = [UIActionSheet new];
|
||||||
|
|
||||||
actionSheet.title = BOXSTRING(title);
|
actionSheet.title = BOXSTRING(title);
|
||||||
actionSheet.delegate = delegate;
|
actionSheet.delegate = delegate;
|
||||||
|
|
||||||
@ -341,27 +341,6 @@ static void RunActionSheet(const char* title, const struct string_list* items, U
|
|||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
enum
|
|
||||||
{
|
|
||||||
MENU_ITEM_BASIC = 0,
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct ios_menu_item
|
|
||||||
{
|
|
||||||
char description[PATH_MAX_LENGTH];
|
|
||||||
} ios_menu_item_t;
|
|
||||||
|
|
||||||
static void *menu_item_init(ios_menu_item_t *item, unsigned type)
|
|
||||||
{
|
|
||||||
switch (type)
|
|
||||||
{
|
|
||||||
case MENU_ITEM_BASIC:
|
|
||||||
return (__bridge void*)[RAMenuItemBasic itemWithDescription:BOXSTRING(item->description) action:^{}];
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*********************************************/
|
/*********************************************/
|
||||||
/* RAMenuItemGeneralSetting */
|
/* RAMenuItemGeneralSetting */
|
||||||
/* A simple menu item that displays the */
|
/* A simple menu item that displays the */
|
||||||
@ -374,54 +353,9 @@ static void *menu_item_init(ios_menu_item_t *item, unsigned type)
|
|||||||
|
|
||||||
@implementation RAMenuItemGeneralSetting
|
@implementation RAMenuItemGeneralSetting
|
||||||
|
|
||||||
+ (id)itemForSetting:(rarch_setting_t*)setting action:(void (^)())action
|
|
||||||
{
|
|
||||||
ios_menu_item_t menu_item;
|
|
||||||
|
|
||||||
switch (setting->type)
|
|
||||||
{
|
|
||||||
case ST_NONE:
|
|
||||||
case ST_ACTION:
|
|
||||||
strlcpy(menu_item.description, "Shouldn't be called with ST_NONE or ST_ACTION", sizeof(menu_item.description));
|
|
||||||
return (__bridge RAMenuItemBasic*)menu_item_init(&menu_item, MENU_ITEM_BASIC);
|
|
||||||
case ST_BOOL:
|
|
||||||
return [[RAMenuItemBooleanSetting alloc] initWithSetting:setting action:action];
|
|
||||||
case ST_INT:
|
|
||||||
case ST_UINT:
|
|
||||||
case ST_FLOAT:
|
|
||||||
break;
|
|
||||||
case ST_PATH:
|
|
||||||
case ST_DIR:
|
|
||||||
return [[RAMenuItemPathSetting alloc] initWithSetting:setting action:action];
|
|
||||||
case ST_STRING:
|
|
||||||
case ST_HEX:
|
|
||||||
break;
|
|
||||||
case ST_BIND:
|
|
||||||
return [[RAMenuItemBindSetting alloc] initWithSetting:setting action:action];
|
|
||||||
case ST_GROUP:
|
|
||||||
case ST_SUB_GROUP:
|
|
||||||
case ST_END_GROUP:
|
|
||||||
case ST_END_SUB_GROUP:
|
|
||||||
default:
|
|
||||||
strlcpy(menu_item.description, "Shouldn't be called with ST_GROUP", sizeof(menu_item.description));
|
|
||||||
return (__bridge RAMenuItemBasic*)menu_item_init(&menu_item, MENU_ITEM_BASIC);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (setting_is_of_enum_type(setting))
|
|
||||||
return [[RAMenuItemEnumSetting alloc] initWithSetting:setting action:action];
|
|
||||||
|
|
||||||
RAMenuItemGeneralSetting* item = [[RAMenuItemGeneralSetting alloc] initWithSetting:setting action:action];
|
|
||||||
|
|
||||||
if (setting_is_of_numeric_type(item.setting))
|
|
||||||
item.formatter = [[RANumberFormatter alloc] initWithSetting:item.setting];
|
|
||||||
|
|
||||||
return item;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (id)initWithSetting:(rarch_setting_t*)setting action:(void (^)())action
|
- (id)initWithSetting:(rarch_setting_t*)setting action:(void (^)())action
|
||||||
{
|
{
|
||||||
if ((self = [super init]))
|
if ((self = [super init])) {
|
||||||
{
|
|
||||||
_setting = setting;
|
_setting = setting;
|
||||||
_action = action;
|
_action = action;
|
||||||
}
|
}
|
||||||
@ -433,7 +367,6 @@ static void *menu_item_init(ios_menu_item_t *item, unsigned type)
|
|||||||
char buffer[PATH_MAX_LENGTH];
|
char buffer[PATH_MAX_LENGTH];
|
||||||
UITableViewCell* result;
|
UITableViewCell* result;
|
||||||
static NSString* const cell_id = @"string_setting";
|
static NSString* const cell_id = @"string_setting";
|
||||||
rarch_setting_t *setting = self.setting;
|
|
||||||
|
|
||||||
self.parentTable = tableView;
|
self.parentTable = tableView;
|
||||||
|
|
||||||
@ -448,18 +381,18 @@ static void *menu_item_init(ios_menu_item_t *item, unsigned type)
|
|||||||
|
|
||||||
result.textLabel.text = BOXSTRING("<Uninitialized>");
|
result.textLabel.text = BOXSTRING("<Uninitialized>");
|
||||||
|
|
||||||
if (setting)
|
if (self.setting)
|
||||||
{
|
{
|
||||||
if (setting->short_description)
|
if (self.setting->short_description)
|
||||||
result.textLabel.text = BOXSTRING(setting->short_description);
|
result.textLabel.text = BOXSTRING(self.setting->short_description);
|
||||||
|
|
||||||
setting_get_string_representation(setting, buffer, sizeof(buffer));
|
setting_get_string_representation(self.setting, buffer, sizeof(buffer));
|
||||||
if (buffer[0] == '\0')
|
if (buffer[0] == '\0')
|
||||||
strlcpy(buffer, "<default>", sizeof(buffer));
|
strlcpy(buffer, "<default>", sizeof(buffer));
|
||||||
|
|
||||||
result.detailTextLabel.text = BOXSTRING(buffer);
|
result.detailTextLabel.text = BOXSTRING(buffer);
|
||||||
|
|
||||||
if (setting->type == ST_PATH)
|
if (self.setting->type == ST_PATH)
|
||||||
result.detailTextLabel.text = [result.detailTextLabel.text lastPathComponent];
|
result.detailTextLabel.text = [result.detailTextLabel.text lastPathComponent];
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
@ -471,10 +404,9 @@ static void *menu_item_init(ios_menu_item_t *item, unsigned type)
|
|||||||
NSString *desc = BOXSTRING("N/A");
|
NSString *desc = BOXSTRING("N/A");
|
||||||
UIAlertView *alertView;
|
UIAlertView *alertView;
|
||||||
UITextField *field;
|
UITextField *field;
|
||||||
rarch_setting_t *setting = self.setting;
|
|
||||||
|
|
||||||
if (setting && setting->short_description)
|
if (self.setting && self.setting->short_description)
|
||||||
desc = BOXSTRING(setting->short_description);
|
desc = BOXSTRING(self.setting->short_description);
|
||||||
|
|
||||||
alertView = [[UIAlertView alloc] initWithTitle:BOXSTRING("Enter new value") message:desc delegate:self cancelButtonTitle:BOXSTRING("Cancel") otherButtonTitles:BOXSTRING("OK"), nil];
|
alertView = [[UIAlertView alloc] initWithTitle:BOXSTRING("Enter new value") message:desc delegate:self cancelButtonTitle:BOXSTRING("Cancel") otherButtonTitles:BOXSTRING("OK"), nil];
|
||||||
alertView.alertViewStyle = UIAlertViewStylePlainTextInput;
|
alertView.alertViewStyle = UIAlertViewStylePlainTextInput;
|
||||||
@ -483,7 +415,7 @@ static void *menu_item_init(ios_menu_item_t *item, unsigned type)
|
|||||||
|
|
||||||
field.delegate = self.formatter;
|
field.delegate = self.formatter;
|
||||||
|
|
||||||
setting_get_string_representation(setting, buffer, sizeof(buffer));
|
setting_get_string_representation(self.setting, buffer, sizeof(buffer));
|
||||||
if (buffer[0] == '\0')
|
if (buffer[0] == '\0')
|
||||||
strlcpy(buffer, "N/A", sizeof(buffer));
|
strlcpy(buffer, "N/A", sizeof(buffer));
|
||||||
|
|
||||||
@ -495,14 +427,13 @@ static void *menu_item_init(ios_menu_item_t *item, unsigned type)
|
|||||||
- (void)alertView:(UIAlertView*)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
|
- (void)alertView:(UIAlertView*)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
|
||||||
{
|
{
|
||||||
NSString* text = (NSString*)[alertView textFieldAtIndex:0].text;
|
NSString* text = (NSString*)[alertView textFieldAtIndex:0].text;
|
||||||
rarch_setting_t *setting = self.setting;
|
|
||||||
|
|
||||||
if (buttonIndex != alertView.firstOtherButtonIndex)
|
if (buttonIndex != alertView.firstOtherButtonIndex)
|
||||||
return;
|
return;
|
||||||
if (!text.length)
|
if (!text.length)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
setting_set_with_string_representation(setting, [text UTF8String]);
|
setting_set_with_string_representation(self.setting, [text UTF8String]);
|
||||||
[self.parentTable reloadData];
|
[self.parentTable reloadData];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -516,12 +447,15 @@ static void *menu_item_init(ios_menu_item_t *item, unsigned type)
|
|||||||
|
|
||||||
- (void)resetValue:(UIGestureRecognizer*)gesture
|
- (void)resetValue:(UIGestureRecognizer*)gesture
|
||||||
{
|
{
|
||||||
RAMenuItemGeneralSetting __weak* weakSelf = self;
|
struct string_list* items;
|
||||||
struct string_list *items = string_split("OK", "|");
|
RAMenuItemGeneralSetting __weak* weakSelf;
|
||||||
|
|
||||||
if (gesture.state != UIGestureRecognizerStateBegan)
|
if (gesture.state != UIGestureRecognizerStateBegan)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
weakSelf = self;
|
||||||
|
items = (struct string_list*)string_split("OK", "|");
|
||||||
|
|
||||||
RunActionSheet("Really Reset Value?", items, self.parentTable,
|
RunActionSheet("Really Reset Value?", items, self.parentTable,
|
||||||
^(UIActionSheet* actionSheet, NSInteger buttonIndex)
|
^(UIActionSheet* actionSheet, NSInteger buttonIndex)
|
||||||
{
|
{
|
||||||
@ -558,7 +492,6 @@ static void *menu_item_init(ios_menu_item_t *item, unsigned type)
|
|||||||
static NSString* const cell_id = @"boolean_setting";
|
static NSString* const cell_id = @"boolean_setting";
|
||||||
|
|
||||||
UITableViewCell* result = (UITableViewCell*)[tableView dequeueReusableCellWithIdentifier:cell_id];
|
UITableViewCell* result = (UITableViewCell*)[tableView dequeueReusableCellWithIdentifier:cell_id];
|
||||||
rarch_setting_t *setting = self.setting;
|
|
||||||
|
|
||||||
if (!result)
|
if (!result)
|
||||||
{
|
{
|
||||||
@ -567,20 +500,19 @@ static void *menu_item_init(ios_menu_item_t *item, unsigned type)
|
|||||||
result.accessoryView = [UISwitch new];
|
result.accessoryView = [UISwitch new];
|
||||||
}
|
}
|
||||||
|
|
||||||
result.textLabel.text = BOXSTRING(setting->short_description);
|
result.textLabel.text = BOXSTRING(self.setting->short_description);
|
||||||
[(id)result.accessoryView removeTarget:nil action:NULL forControlEvents:UIControlEventValueChanged];
|
[(id)result.accessoryView removeTarget:nil action:NULL forControlEvents:UIControlEventValueChanged];
|
||||||
[(id)result.accessoryView addTarget:self action:@selector(handleBooleanSwitch:) forControlEvents:UIControlEventValueChanged];
|
[(id)result.accessoryView addTarget:self action:@selector(handleBooleanSwitch:) forControlEvents:UIControlEventValueChanged];
|
||||||
|
|
||||||
if (setting)
|
if (self.setting)
|
||||||
[(id)result.accessoryView setOn:*setting->value.boolean];
|
[(id)result.accessoryView setOn:*self.setting->value.boolean];
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)handleBooleanSwitch:(UISwitch*)swt
|
- (void)handleBooleanSwitch:(UISwitch*)swt
|
||||||
{
|
{
|
||||||
rarch_setting_t *setting = self.setting;
|
if (self.setting)
|
||||||
if (setting)
|
*self.setting->value.boolean = swt.on ? true : false;
|
||||||
*setting->value.boolean = swt.on ? true : false;
|
|
||||||
if (self.action)
|
if (self.action)
|
||||||
self.action();
|
self.action();
|
||||||
}
|
}
|
||||||
@ -604,17 +536,19 @@ static void *menu_item_init(ios_menu_item_t *item, unsigned type)
|
|||||||
NSString *path;
|
NSString *path;
|
||||||
RADirectoryList* list;
|
RADirectoryList* list;
|
||||||
RAMenuItemPathSetting __weak* weakSelf = self;
|
RAMenuItemPathSetting __weak* weakSelf = self;
|
||||||
rarch_setting_t *setting = self.setting;
|
|
||||||
|
|
||||||
if (setting_is_of_path_type(setting))
|
if (self.setting && self.setting->type == ST_ACTION &&
|
||||||
setting->action_toggle( setting, MENU_ACTION_RIGHT, false);
|
self.setting->flags & SD_FLAG_BROWSER_ACTION &&
|
||||||
|
self.setting->action_toggle &&
|
||||||
|
self.setting->change_handler )
|
||||||
|
self.setting->action_toggle( self.setting, MENU_ACTION_RIGHT, false);
|
||||||
|
|
||||||
path = BOXSTRING(setting->value.string);
|
path = BOXSTRING(self.setting->value.string);
|
||||||
|
|
||||||
if (setting->type == ST_PATH )
|
if ( self.setting->type == ST_PATH )
|
||||||
path = [path stringByDeletingLastPathComponent];
|
path = [path stringByDeletingLastPathComponent];
|
||||||
|
|
||||||
list = [[RADirectoryList alloc] initWithPath:path extensions:setting->values action:
|
list = [[RADirectoryList alloc] initWithPath:path extensions:self.setting->values action:
|
||||||
^(RADirectoryList* list, RADirectoryItem* item)
|
^(RADirectoryList* list, RADirectoryItem* item)
|
||||||
{
|
{
|
||||||
const char *newval = "";
|
const char *newval = "";
|
||||||
@ -639,8 +573,8 @@ static void *menu_item_init(ios_menu_item_t *item, unsigned type)
|
|||||||
[weakSelf.parentTable reloadData];
|
[weakSelf.parentTable reloadData];
|
||||||
}];
|
}];
|
||||||
|
|
||||||
list.allowBlank = (setting->flags & SD_FLAG_ALLOW_EMPTY);
|
list.allowBlank = (self.setting->flags & SD_FLAG_ALLOW_EMPTY);
|
||||||
list.forDirectory = (setting->flags & SD_FLAG_PATH_DIR);
|
list.forDirectory = (self.setting->flags & SD_FLAG_PATH_DIR);
|
||||||
|
|
||||||
[controller.navigationController pushViewController:list animated:YES];
|
[controller.navigationController pushViewController:list animated:YES];
|
||||||
}
|
}
|
||||||
@ -657,17 +591,17 @@ static void *menu_item_init(ios_menu_item_t *item, unsigned type)
|
|||||||
|
|
||||||
- (void)wasSelectedOnTableView:(UITableView*)tableView ofController:(UIViewController*)controller
|
- (void)wasSelectedOnTableView:(UITableView*)tableView ofController:(UIViewController*)controller
|
||||||
{
|
{
|
||||||
|
struct string_list* items;
|
||||||
RAMenuItemEnumSetting __weak* weakSelf = self;
|
RAMenuItemEnumSetting __weak* weakSelf = self;
|
||||||
rarch_setting_t *setting = self.setting;
|
|
||||||
struct string_list *items = string_split(setting->values, "|");
|
|
||||||
|
|
||||||
RunActionSheet(setting->short_description, items, self.parentTable,
|
items = (struct string_list*)string_split(self.setting->values, "|");
|
||||||
|
RunActionSheet(self.setting->short_description, items, self.parentTable,
|
||||||
^(UIActionSheet* actionSheet, NSInteger buttonIndex)
|
^(UIActionSheet* actionSheet, NSInteger buttonIndex)
|
||||||
{
|
{
|
||||||
if (buttonIndex == actionSheet.cancelButtonIndex)
|
if (buttonIndex == actionSheet.cancelButtonIndex)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
setting_set_with_string_representation(setting, [[actionSheet buttonTitleAtIndex:buttonIndex] UTF8String]);
|
setting_set_with_string_representation(self.setting, [[actionSheet buttonTitleAtIndex:buttonIndex] UTF8String]);
|
||||||
[weakSelf.parentTable reloadData];
|
[weakSelf.parentTable reloadData];
|
||||||
});
|
});
|
||||||
string_list_free(items);
|
string_list_free(items);
|
||||||
@ -720,13 +654,12 @@ static void *menu_item_init(ios_menu_item_t *item, unsigned type)
|
|||||||
|
|
||||||
- (void)alertView:(UIAlertView*)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
|
- (void)alertView:(UIAlertView*)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
|
||||||
{
|
{
|
||||||
rarch_setting_t *setting = self.setting;
|
|
||||||
if (buttonIndex == alertView.firstOtherButtonIndex)
|
if (buttonIndex == alertView.firstOtherButtonIndex)
|
||||||
BINDFOR(*setting).key = RETROK_UNKNOWN;
|
BINDFOR(*self.setting).key = RETROK_UNKNOWN;
|
||||||
else if(buttonIndex == alertView.firstOtherButtonIndex + 1)
|
else if(buttonIndex == alertView.firstOtherButtonIndex + 1)
|
||||||
BINDFOR(*setting).joykey = NO_BTN;
|
BINDFOR(*self.setting).joykey = NO_BTN;
|
||||||
else if(buttonIndex == alertView.firstOtherButtonIndex + 2)
|
else if(buttonIndex == alertView.firstOtherButtonIndex + 2)
|
||||||
BINDFOR(*setting).joyaxis = AXIS_NONE;
|
BINDFOR(*self.setting).joyaxis = AXIS_NONE;
|
||||||
|
|
||||||
[self finishWithClickedButton:true];
|
[self finishWithClickedButton:true];
|
||||||
}
|
}
|
||||||
@ -735,17 +668,16 @@ static void *menu_item_init(ios_menu_item_t *item, unsigned type)
|
|||||||
{
|
{
|
||||||
int32_t value = 0;
|
int32_t value = 0;
|
||||||
int32_t idx = 0;
|
int32_t idx = 0;
|
||||||
rarch_setting_t *setting = self.setting;
|
|
||||||
|
|
||||||
if (setting->index)
|
if (self.setting->index)
|
||||||
idx = setting->index - 1;
|
idx = self.setting->index - 1;
|
||||||
|
|
||||||
if ((value = cocoa_input_find_any_key()))
|
if ((value = cocoa_input_find_any_key()))
|
||||||
BINDFOR(*setting).key = input_keymaps_translate_keysym_to_rk(value);
|
BINDFOR(*self.setting).key = input_keymaps_translate_keysym_to_rk(value);
|
||||||
else if ((value = cocoa_input_find_any_button(idx)) >= 0)
|
else if ((value = cocoa_input_find_any_button(idx)) >= 0)
|
||||||
BINDFOR(*setting).joykey = value;
|
BINDFOR(*self.setting).joykey = value;
|
||||||
else if ((value = cocoa_input_find_any_axis(idx)))
|
else if ((value = cocoa_input_find_any_axis(idx)))
|
||||||
BINDFOR(*setting).joyaxis = (value > 0) ? AXIS_POS(value - 1) : AXIS_NEG(abs(value) - 1);
|
BINDFOR(*self.setting).joyaxis = (value > 0) ? AXIS_POS(value - 1) : AXIS_NEG(abs(value) - 1);
|
||||||
else
|
else
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -868,11 +800,53 @@ void get_core_title(char *title_msg, size_t title_msg_len)
|
|||||||
|
|
||||||
menu_list_get_at_offset(menu->menu_list->selection_buf, i, &path,
|
menu_list_get_at_offset(menu->menu_list->selection_buf, i, &path,
|
||||||
&entry_label, &type);
|
&entry_label, &type);
|
||||||
|
|
||||||
|
// JM: Ideally, this would be simpler because RA would provide a
|
||||||
|
// function that takes "i" and returns either Path, DirPath, Bool,
|
||||||
|
// Bind, Enum, Number, String, Action. [Sub-menus would be action,
|
||||||
|
// because it causes an effect]
|
||||||
|
|
||||||
setting =
|
setting =
|
||||||
(rarch_setting_t*)setting_find_setting
|
(rarch_setting_t*)setting_find_setting
|
||||||
(menu->list_settings,
|
(menu->list_settings,
|
||||||
menu->menu_list->selection_buf->list[i].label);
|
menu->menu_list->selection_buf->list[i].label);
|
||||||
|
|
||||||
|
if (setting && setting->type == ST_ACTION &&
|
||||||
|
setting->flags & SD_FLAG_BROWSER_ACTION &&
|
||||||
|
setting->action_toggle &&
|
||||||
|
setting->change_handler) {
|
||||||
|
return [[RAMenuItemPathSetting alloc]
|
||||||
|
initWithSetting:setting
|
||||||
|
action:^{}];
|
||||||
|
} else if (setting && setting->type == ST_BOOL ) {
|
||||||
|
return [[RAMenuItemBooleanSetting alloc]
|
||||||
|
initWithSetting:setting
|
||||||
|
action:^{[weakSelf menuSelect: i];}];
|
||||||
|
} else if (setting && ST_PATH <= setting->type && setting->type <= ST_DIR) {
|
||||||
|
return [[RAMenuItemPathSetting alloc]
|
||||||
|
initWithSetting:setting
|
||||||
|
action:^{[weakSelf menuSelect: i];}];
|
||||||
|
} else if (setting && setting->type == ST_BIND ) {
|
||||||
|
return [[RAMenuItemBindSetting alloc]
|
||||||
|
initWithSetting:setting
|
||||||
|
action:^{[weakSelf menuSelect: i];}];
|
||||||
|
} else if (setting && setting->type == ST_STRING && setting->values ) {
|
||||||
|
return [[RAMenuItemEnumSetting alloc]
|
||||||
|
initWithSetting:setting
|
||||||
|
action:^{[weakSelf menuSelect: i];}];
|
||||||
|
} else if (setting && ST_INT <= setting->type && setting->type <= ST_HEX) {
|
||||||
|
RAMenuItemGeneralSetting* item =
|
||||||
|
[[RAMenuItemGeneralSetting alloc]
|
||||||
|
initWithSetting:setting
|
||||||
|
action:^{[weakSelf menuSelect: i];}];
|
||||||
|
|
||||||
|
if (setting->type == ST_INT ||
|
||||||
|
setting->type == ST_UINT ||
|
||||||
|
setting->type == ST_FLOAT)
|
||||||
|
item.formatter = [[RANumberFormatter alloc] initWithSetting:item.setting];
|
||||||
|
|
||||||
|
return item;
|
||||||
|
} else { // This is for ST_GROUP/etc
|
||||||
cbs = (menu_file_list_cbs_t*)
|
cbs = (menu_file_list_cbs_t*)
|
||||||
menu_list_get_actiondata_at_offset(menu->menu_list->selection_buf, i);
|
menu_list_get_actiondata_at_offset(menu->menu_list->selection_buf, i);
|
||||||
|
|
||||||
@ -885,46 +859,9 @@ void get_core_title(char *title_msg, size_t title_msg_len)
|
|||||||
path_buf, sizeof(path_buf));
|
path_buf, sizeof(path_buf));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (setting && setting->type == ST_ACTION &&
|
|
||||||
setting->flags & SD_FLAG_BROWSER_ACTION &&
|
|
||||||
setting->action_toggle &&
|
|
||||||
setting->change_handler )
|
|
||||||
{
|
|
||||||
return [[RAMenuItemPathSetting alloc]
|
|
||||||
initWithSetting:setting
|
|
||||||
action:^{}];
|
|
||||||
}
|
|
||||||
else if (setting && ST_ACTION < setting->type && setting->type < ST_GROUP)
|
|
||||||
{
|
|
||||||
return [RAMenuItemGeneralSetting
|
|
||||||
itemForSetting:setting
|
|
||||||
action:^{
|
|
||||||
menu->navigation.selection_ptr = i;
|
|
||||||
if (cbs && cbs->action_ok)
|
|
||||||
cbs->action_ok(path, entry_label, type, i);
|
|
||||||
}];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return [RAMenuItemBasic
|
return [RAMenuItemBasic
|
||||||
itemWithDescription:BOXSTRING(path_buf)
|
itemWithDescription:BOXSTRING(path_buf)
|
||||||
action:^{
|
action:^{[weakSelf menuSelect: i];}];
|
||||||
menu->navigation.selection_ptr = i;
|
|
||||||
if (cbs && cbs->action_ok)
|
|
||||||
cbs->action_ok(path, entry_label, type, i);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (cbs && cbs->action_start)
|
|
||||||
cbs->action_start(type, entry_label, MENU_ACTION_START);
|
|
||||||
if (cbs && cbs->action_toggle)
|
|
||||||
cbs->action_toggle(type, entry_label, MENU_ACTION_RIGHT, true);
|
|
||||||
menu_list_push_stack(menu->menu_list, "",
|
|
||||||
"info_screen", 0, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
[weakSelf menuRefresh];
|
|
||||||
[weakSelf reloadData];
|
|
||||||
}];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -990,7 +927,9 @@ uint menu_select_entry(uint i) {
|
|||||||
- (void)menuRefresh
|
- (void)menuRefresh
|
||||||
{
|
{
|
||||||
menu_handle_t *menu = menu_driver_get_ptr();
|
menu_handle_t *menu = menu_driver_get_ptr();
|
||||||
if (!menu || !menu->need_refresh)
|
if (!menu)
|
||||||
|
return;
|
||||||
|
if (!menu->need_refresh)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
menu_entries_deferred_push(menu->menu_list->selection_buf,
|
menu_entries_deferred_push(menu->menu_list->selection_buf,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user