public NodeRoleSelectionSetting() : base() { Content.SetPanelContent((panelContent) => { Dropdown = panelContent.Add.TranslationDropdown(); Dropdown.AddEventListener("onchange", (e) => { if (Dropdown?.Selected?.Value is Type roleType) { OnSelectRole(roleType); } }); foreach (Type roleType in Utils.GetTypes <Role>()) { Dropdown.Options.Add(new TranslationOption(new TranslationData(Utils.GetTranslationKey(Utils.GetLibraryName(roleType), "NAME")), roleType)); } }); }
private static void CreateDropdownSetting(Panel parent, Settings.Settings settings, string categoryName, string propertyName, object propertyObject, PropertyInfo propertyInfo, PropertyInfo subPropertyInfo) { parent.Add.Panel(categoryName.ToLower()); parent.Add.TranslationLabel(new TranslationData($"MENU.SETTINGS.TABS.{categoryName.ToUpper()}.{propertyName.ToUpper()}.TITLE"), "h3").AddTooltip(new TranslationData($"MENU.SETTINGS.TABS.{categoryName.ToUpper()}.{propertyName.ToUpper()}.DESCRIPTION")); TranslationDropdown dropdownSelection = parent.Add.TranslationDropdown(); foreach (PropertyInfo possibleDropdownPropertyInfo in propertyInfo.PropertyType.GetProperties()) { foreach (object possibleDropdownAttribute in possibleDropdownPropertyInfo.GetCustomAttributes()) { if (possibleDropdownAttribute is DropdownOptionsAttribute dropdownOptionsAttribute && dropdownOptionsAttribute.DropdownSetting.Equals(subPropertyInfo.Name)) { dropdownSelection.AddEventListener("onchange", (e) => { UpdateSettingsProperty(settings, propertyObject, propertyName, dropdownSelection.Selected.Value); }); foreach (KeyValuePair <string, object> keyValuePair in Utils.GetPropertyValue <Dictionary <string, object> >(propertyObject, possibleDropdownPropertyInfo.Name)) { Option option; if (dropdownOptionsAttribute.AvoidTranslation) { option = new Option(keyValuePair.Key, keyValuePair.Value); } else { option = new TranslationOption(new TranslationData(keyValuePair.Key), keyValuePair.Value); } dropdownSelection.Options.Add(option); } } } } dropdownSelection.Select(Utils.GetPropertyValue <string>(propertyObject, propertyName)); }