Exemplo n.º 1
0
        public static void CreateSettings(TranslationTabContainer tabContainer, Settings.Settings settings, Type settingsType = null)
        {
            settingsType ??= settings.GetType();

            Type baseSettingsType = typeof(Settings.Settings);

            if (settingsType != baseSettingsType)
            {
                CreateSettings(tabContainer, settings, settingsType.BaseType);
            }

            PropertyInfo[] properties = settingsType.GetProperties();
            string         nsp        = typeof(Settings.Categories.Round).Namespace;

            foreach (PropertyInfo propertyInfo in properties)
            {
                if (propertyInfo.DeclaringType.BaseType != baseSettingsType && settingsType != baseSettingsType || !propertyInfo.PropertyType.Namespace.Equals(nsp))
                {
                    continue;
                }

                string categoryName   = propertyInfo.Name;
                object propertyObject = propertyInfo.GetValue(settings);

                if (propertyObject == null)
                {
                    continue;
                }

                Panel tab = new();
                tab.AddClass("root");

                foreach (PropertyInfo subPropertyInfo in propertyInfo.PropertyType.GetProperties())
                {
                    foreach (object attribute in subPropertyInfo.GetCustomAttributes())
                    {
                        if (attribute is not SettingAttribute settingAttribute)
                        {
                            continue;
                        }

                        string propertyName = subPropertyInfo.Name;

                        switch (settingAttribute)
                        {
                        case SwitchSettingAttribute:
                            CreateSwitchSetting(tab, settings, categoryName, propertyName, propertyObject);

                            break;

                        case InputSettingAttribute:
                            CreateInputSetting(tab, settings, categoryName, propertyName, propertyObject);

                            break;

                        case DropdownSettingAttribute:
                            CreateDropdownSetting(tab, settings, categoryName, propertyName, propertyObject, propertyInfo, subPropertyInfo);

                            break;
                        }

                        break;
                    }

                    tab.Add.LineBreak();
                }

                tabContainer.AddTab(tab, new TranslationData($"MENU.SETTINGS.TABS.{categoryName.ToUpper()}.TITLE"));
            }
        }