PluginConfig.h 4.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #pragma once
  2. #include "ConfigOption.h"
  3. #include "PluginConfigApi.h"
  4. namespace PluginConfig
  5. {
  6. ConfigOptionBase* GetConfigOption(PluginConfigOption cfg)
  7. {
  8. PluginConfigBooleanData* boolData = (PluginConfigBooleanData*)(cfg.data);
  9. PluginConfigNumericData* numericData = (PluginConfigNumericData*)(cfg.data);
  10. PluginConfigStringData* stringData = (PluginConfigStringData*)(cfg.data);
  11. PluginConfigDropdownIndexData* ddIdxData = (PluginConfigDropdownIndexData*)(cfg.data);
  12. PluginConfigDropdownTextData* ddTextData = (PluginConfigDropdownTextData*)(cfg.data);
  13. PluginConfigDropdownNumberData* ddNumberData = (PluginConfigDropdownNumberData*)(cfg.data);
  14. PluginConfigResolutionData* resData = (PluginConfigResolutionData*)(cfg.data);
  15. PluginConfigGroupData* groupData = (PluginConfigGroupData*)(cfg.data);
  16. PluginConfigButtonData* btnData = (PluginConfigButtonData*)(cfg.data);
  17. PluginConfigSpacerData* spacerData = (PluginConfigSpacerData*)(cfg.data);
  18. switch (cfg.cfgType)
  19. {
  20. case CONFIG_BOOLEAN:
  21. return new BooleanOption(boolData->iniVarName, boolData->iniSectionName, boolData->iniFilePath, boolData->friendlyName, boolData->description, boolData->defaultVal, boolData->saveAsString);
  22. case CONFIG_NUMERIC:
  23. return new NumericOption(numericData->iniVarName, numericData->iniSectionName, numericData->iniFilePath, numericData->friendlyName, numericData->description, numericData->defaultVal, numericData->minVal, numericData->maxVal);
  24. case CONFIG_STRING:
  25. return new StringOption(stringData->iniVarName, stringData->iniSectionName, stringData->iniFilePath, stringData->friendlyName, stringData->description, stringData->defaultVal, stringData->useUtf8);
  26. case CONFIG_DROPDOWN_INDEX:
  27. return new DropdownOption(ddIdxData->iniVarName, ddIdxData->iniSectionName, ddIdxData->iniFilePath, ddIdxData->friendlyName, ddIdxData->description, ddIdxData->defaultVal, ddIdxData->valueStrings);
  28. case CONFIG_DROPDOWN_TEXT:
  29. return new DropdownTextOption(ddTextData->iniVarName, ddTextData->iniSectionName, ddTextData->iniFilePath, ddTextData->friendlyName, ddTextData->description, ddTextData->defaultVal, ddTextData->valueStrings, ddTextData->editable, ddTextData->useUtf8);
  30. case CONFIG_DROPDOWN_NUMBER:
  31. return new DropdownNumberOption(ddNumberData->iniVarName, ddNumberData->iniSectionName, ddNumberData->iniFilePath, ddNumberData->friendlyName, ddNumberData->description, ddNumberData->defaultVal, ddNumberData->valueInts, ddNumberData->editable);
  32. case CONFIG_RESOLUTION:
  33. return new ResolutionOption(resData->iniVarName, resData->iniVarName2, resData->iniSectionName, resData->iniFilePath, resData->friendlyName, resData->description, resData->defaultVal, resData->valueResolutions, resData->editable, (ResolutionOptionOpts)0);
  34. case CONFIG_GROUP_START:
  35. return new OptionMetaGroupStart(groupData->name, groupData->height);
  36. case CONFIG_GROUP_END:
  37. return new OptionMetaGroupEnd();
  38. case CONFIG_BUTTON:
  39. return new ButtonOption(btnData->friendlyName, btnData->description, btnData->func);
  40. case CONFIG_SPACER:
  41. return new OptionMetaSpacer(spacerData->height);
  42. default:
  43. return new ConfigOptionBase();
  44. }
  45. }
  46. std::vector<ConfigOptionBase*> GetConfigOptionVec(PluginConfigArray &in)
  47. {
  48. std::vector<ConfigOptionBase*> outvec;
  49. for (int i = 0; i < in.len; i++)
  50. {
  51. // basic check for validity
  52. if (in.options[i].data == nullptr && in.options[i].cfgType != CONFIG_GROUP_END)
  53. break;
  54. outvec.push_back(GetConfigOption(in.options[i]));
  55. }
  56. return outvec;
  57. }
  58. /*std::vector<PluginConfigOption> testcfg =
  59. {
  60. PluginConfigOption{ CONFIG_GROUP_START, new PluginConfigGroupData{L"Screen Resolution", 400 } },
  61. PluginConfigOption{ CONFIG_DROPDOWN_INDEX, new PluginConfigDropdownIndexData{ L"display", RESOLUTION_SECTION, CONFIG_FILE, L"Display:", L"Sets the window/screen mode.", 0, std::vector<LPCWSTR>({ L"Windowed", L"Borderless", L"Fullscreen" }) } },
  62. PluginConfigOption{ CONFIG_RESOLUTION, new PluginConfigResolutionData{ L"width", L"height", RESOLUTION_SECTION, CONFIG_FILE, L"Resolution:", L"Sets the display resolution.", resolution(1280, 720), getScreenResolutionsVec(screenModes) } }
  63. };*/
  64. //std::vector<ConfigOptionBase*> testcfgconfigopts = GetConfigOptionVec(testcfg);
  65. };