vlc | branch: master | David Fuhrmann <[email protected]> | Sat Jan 18 19:34:22 2014 +0100| [b954a5927defb181d53ce9ab09a8a1d6de76d6ba] | committer: David Fuhrmann
macosx: advanced prefs: use string list control for CONFIG_ITEM_MODULE and simplify Uses config_GetPszChoices. close #8941 > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=b954a5927defb181d53ce9ab09a8a1d6de76d6ba --- modules/gui/macosx/prefs_widgets.m | 131 ++++++++++++++++-------------------- 1 file changed, 57 insertions(+), 74 deletions(-) diff --git a/modules/gui/macosx/prefs_widgets.m b/modules/gui/macosx/prefs_widgets.m index a3fa441..33bae45 100644 --- a/modules/gui/macosx/prefs_widgets.m +++ b/modules/gui/macosx/prefs_widgets.m @@ -783,6 +783,10 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain]; \ withView: o_parent_view]; break; case CONFIG_ITEM_MODULE: + p_control = [[StringListConfigControl alloc] + initWithItem: _p_item + withView: o_parent_view]; + break; case CONFIG_ITEM_MODULE_CAT: p_control = [[ModuleConfigControl alloc] initWithItem: _p_item @@ -994,7 +998,10 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain]; \ mainFrame.origin.y = 0; if ([super initWithFrame: mainFrame item: _p_item] != nil) { - i_view_type = CONFIG_ITEM_STRING_LIST; + if (p_item->i_type == CONFIG_ITEM_STRING) + i_view_type = CONFIG_ITEM_STRING_LIST; + else + i_view_type = CONFIG_ITEM_MODULE; o_textfieldTooltip = [[VLCStringUtility sharedInstance] wrapString: _NS(p_item->psz_longtext) toWidth: PREFS_WRAP]; @@ -1013,21 +1020,7 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain]; \ [o_popup setAutoresizingMask:NSViewWidthSizable]; /* add items */ - for (int i_index = 0; i_index < p_item->list_count; i_index++) { - NSString *o_text; - if (p_item->list_text && p_item->list_text[i_index]) - o_text = _NS((char *)p_item->list_text[i_index]); - else - o_text = _NS((char *)p_item->list.psz[i_index]); - [o_popup addItemWithTitle: o_text]; - - /* select default item */ - if (!p_item->value.psz && !p_item->list.psz[i_index]) - [o_popup selectItemAtIndex: i_index]; - else if (p_item->value.psz && p_item->list.psz[i_index] && - !strcmp(p_item->value.psz, p_item->list.psz[i_index])) - [o_popup selectItemAtIndex: i_index]; - } + [self resetValues]; [self addSubview: o_popup]; } @@ -1056,27 +1049,41 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain]; \ - (char *)stringValue { - if ([o_popup indexOfSelectedItem] >= 0) { - if (p_item->list.psz[[o_popup indexOfSelectedItem]] != NULL) - return strdup(p_item->list.psz[[o_popup indexOfSelectedItem]]); - } + if ([o_popup indexOfSelectedItem] < 0) + return NULL; - return NULL; + NSString *o_data = [[o_popup selectedItem] representedObject]; + return strdup([o_data UTF8String]); } - (void)resetValues { + [o_popup removeAllItems]; + char *psz_value = config_GetPsz(VLCIntf, p_item->psz_name); - for (int i_index = 0; i_index < p_item->list_count; i_index++) { - if (!psz_value && !p_item->list.psz[i_index]) - [o_popup selectItemAtIndex: i_index]; - else if (psz_value && p_item->list.psz[i_index] && - !strcmp(psz_value, p_item->list.psz[i_index])) - [o_popup selectItemAtIndex: i_index]; + char **values, **texts; + ssize_t count = config_GetPszChoices(VLC_OBJECT(VLCIntf), p_item->psz_name, + &values, &texts); + for (ssize_t i = 0; i < count && texts; i++) { + if (texts[i] == NULL || values[i] == NULL) + continue; + + [o_popup addItemWithTitle: toNSStr(texts[i])]; + NSMenuItem *lastItem = [o_popup lastItem]; + [lastItem setRepresentedObject: toNSStr(values[i])]; + + if (!strcmp(psz_value ? psz_value : "", values[i])) + [o_popup selectItem: [o_popup lastItem]]; + + free(texts[i]); + free(values[i]); } + free(texts); + free(values); free(psz_value); + [super resetValues]; } @end @@ -1253,32 +1260,22 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain]; \ for (i_module_index = 0; i_module_index < count; i_module_index++) { p_parser = p_list[i_module_index]; - if (p_item->i_type == CONFIG_ITEM_MODULE) { - if (module_provides(p_parser, p_item->psz_type)) { + if (module_is_main(p_parser)) + continue; + + unsigned int confsize; + module_config_t *p_config = module_config_get(p_parser, &confsize); + for (size_t i = 0; i < confsize; i++) { + module_config_t *p_cfg = p_config + i; + /* Hack: required subcategory is stored in i_min */ + if (p_cfg->i_type == CONFIG_SUBCATEGORY && + p_cfg->value.i == p_cfg->min.i) { NSString *o_description = _NS(module_get_name(p_parser, TRUE)); if ([newval isEqualToString: o_description]) { returnval = strdup(module_get_object(p_parser)); break; } } - } else { - if (module_is_main(p_parser)) - continue; - - unsigned int confsize; - module_config_t *p_config = module_config_get(p_parser, &confsize); - for (size_t i = 0; i < confsize; i++) { - module_config_t *p_cfg = p_config + i; - /* Hack: required subcategory is stored in i_min */ - if (p_cfg->i_type == CONFIG_SUBCATEGORY && - p_cfg->value.i == p_cfg->min.i) { - NSString *o_description = _NS(module_get_name(p_parser, TRUE)); - if ([newval isEqualToString: o_description]) { - returnval = strdup(module_get_object(p_parser)); - break; - } - } - } module_config_free(p_config); } } @@ -1300,39 +1297,25 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain]; \ for (size_t i_index = 0; i_index < count; i_index++) { p_parser = p_list[i_index]; - if (p_item->i_type == CONFIG_ITEM_MODULE) { - if (module_provides(p_parser, p_item->psz_type)) { + if (module_is_main(p_parser)) + continue; + unsigned int confsize; + + module_config_t *p_configlist = module_config_get(p_parser, &confsize); + for (size_t i = 0; i < confsize; i++) { + module_config_t *p_config = &p_configlist[i]; + /* Hack: required subcategory is stored in i_min */ + if (p_config->i_type == CONFIG_SUBCATEGORY && + p_config->value.i == p_item->min.i) { NSString *o_description = _NS(module_get_name(p_parser, TRUE)); [o_popup addItemWithTitle: o_description]; - char *psz_value = config_GetPsz(VLCIntf, p_item->psz_name); - if (psz_value && - !strcmp(psz_value, module_get_object(p_parser))) + if (p_item->value.psz && !strcmp(p_item->value.psz, + module_get_object(p_parser))) [o_popup selectItem:[o_popup lastItem]]; - - free(psz_value); - } - } else { - if (module_is_main(p_parser)) - continue; - unsigned int confsize; - - module_config_t *p_configlist = module_config_get(p_parser, &confsize); - for (size_t i = 0; i < confsize; i++) { - module_config_t *p_config = &p_configlist[i]; - /* Hack: required subcategory is stored in i_min */ - if (p_config->i_type == CONFIG_SUBCATEGORY && - p_config->value.i == p_item->min.i) { - NSString *o_description = _NS(module_get_name(p_parser, TRUE)); - [o_popup addItemWithTitle: o_description]; - - if (p_item->value.psz && !strcmp(p_item->value.psz, - module_get_object(p_parser))) - [o_popup selectItem:[o_popup lastItem]]; - } } - module_config_free(p_configlist); } + module_config_free(p_configlist); } module_list_free(p_list); [super resetValues]; _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
