You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

85 lines
1.9KB

  1. #include "settings.hpp"
  2. #include "app.hpp"
  3. #include "plugin.hpp"
  4. #include <jansson.h>
  5. namespace rack {
  6. static json_t *settingsToJson() {
  7. // root
  8. json_t *rootJ = json_object();
  9. // token
  10. json_t *tokenJ = json_string(gToken.c_str());
  11. json_object_set_new(rootJ, "token", tokenJ);
  12. // opacity
  13. float opacity = dynamic_cast<RackScene*>(gScene)->toolbar->wireOpacitySlider->value;
  14. json_t *opacityJ = json_real(opacity);
  15. json_object_set_new(rootJ, "wireOpacity", opacityJ);
  16. // tension
  17. float tension = dynamic_cast<RackScene*>(gScene)->toolbar->wireTensionSlider->value;
  18. json_t *tensionJ = json_real(tension);
  19. json_object_set_new(rootJ, "wireTension", tensionJ);
  20. return rootJ;
  21. }
  22. static void settingsFromJson(json_t *rootJ) {
  23. // token
  24. json_t *tokenJ = json_object_get(rootJ, "token");
  25. if (tokenJ)
  26. gToken = json_string_value(tokenJ);
  27. // opacity
  28. json_t *opacityJ = json_object_get(rootJ, "wireOpacity");
  29. if (opacityJ)
  30. dynamic_cast<RackScene*>(gScene)->toolbar->wireOpacitySlider->value = json_number_value(opacityJ);
  31. // tension
  32. json_t *tensionJ = json_object_get(rootJ, "wireTension");
  33. if (tensionJ)
  34. dynamic_cast<RackScene*>(gScene)->toolbar->wireTensionSlider->value = json_number_value(tensionJ);
  35. }
  36. void settingsSave(std::string filename) {
  37. printf("Saving settings %s\n", filename.c_str());
  38. FILE *file = fopen(filename.c_str(), "w");
  39. if (!file)
  40. return;
  41. json_t *rootJ = settingsToJson();
  42. if (rootJ) {
  43. json_dumpf(rootJ, file, JSON_INDENT(2));
  44. json_decref(rootJ);
  45. }
  46. fclose(file);
  47. }
  48. void settingsLoad(std::string filename) {
  49. printf("Loading settings %s\n", filename.c_str());
  50. FILE *file = fopen(filename.c_str(), "r");
  51. if (!file)
  52. return;
  53. json_error_t error;
  54. json_t *rootJ = json_loadf(file, 0, &error);
  55. if (rootJ) {
  56. settingsFromJson(rootJ);
  57. json_decref(rootJ);
  58. }
  59. else {
  60. printf("JSON parsing error at %s %d:%d %s\n", error.source, error.line, error.column, error.text);
  61. }
  62. fclose(file);
  63. }
  64. } // namespace rack