PageRenderTime 49ms CodeModel.GetById 6ms RepoModel.GetById 0ms app.codeStats 0ms

/src/gui/Settings.h

https://github.com/openscad/openscad
C Header | 283 lines | 251 code | 32 blank | 0 comment | 6 complexity | 933afaa66dcbbb1d05410540defa7f15 MD5 | raw file
Possible License(s): GPL-2.0, CC0-1.0
  1. #pragma once
  2. #include <map>
  3. #include <list>
  4. #include <string>
  5. #include <vector>
  6. namespace Settings {
  7. class SettingsEntry
  8. {
  9. public:
  10. const std::string& category() const { return _category; }
  11. const std::string& name() const { return _name; }
  12. virtual bool isDefault() const = 0;
  13. virtual std::string encode() const = 0;
  14. virtual void decode(const std::string& encoded) = 0;
  15. protected:
  16. SettingsEntry(const std::string& category, const std::string& name);
  17. virtual ~SettingsEntry() {}
  18. private:
  19. std::string _category;
  20. std::string _name;
  21. };
  22. class SettingsEntryBool : public SettingsEntry
  23. {
  24. public:
  25. SettingsEntryBool(const std::string& category, const std::string& name, bool defaultValue) :
  26. SettingsEntry(category, name),
  27. _value(defaultValue),
  28. _defaultValue(defaultValue)
  29. {}
  30. bool value() const { return _value; }
  31. void setValue(bool value) { _value = value; }
  32. bool isDefault() const override { return _value == _defaultValue; }
  33. std::string encode() const override;
  34. void decode(const std::string& encoded) override;
  35. private:
  36. bool _value;
  37. bool _defaultValue;
  38. };
  39. class SettingsEntryInt : public SettingsEntry
  40. {
  41. public:
  42. SettingsEntryInt(const std::string& category, const std::string& name, int minimum, int maximum, int defaultValue) :
  43. SettingsEntry(category, name),
  44. _value(defaultValue),
  45. _defaultValue(defaultValue),
  46. _minimum(minimum),
  47. _maximum(maximum)
  48. {}
  49. int value() const { return _value; }
  50. void setValue(int value) { _value = value; }
  51. int minimum() const { return _minimum; }
  52. int maximum() const { return _maximum; }
  53. bool isDefault() const override { return _value == _defaultValue; }
  54. std::string encode() const override;
  55. void decode(const std::string& encoded) override;
  56. private:
  57. int _value;
  58. int _defaultValue;
  59. int _minimum;
  60. int _maximum;
  61. };
  62. class SettingsEntryDouble : public SettingsEntry
  63. {
  64. public:
  65. SettingsEntryDouble(const std::string& category, const std::string& name, double minimum, double step, double maximum, double defaultValue) :
  66. SettingsEntry(category, name),
  67. _value(defaultValue),
  68. _defaultValue(defaultValue),
  69. _minimum(minimum),
  70. _step(step),
  71. _maximum(maximum)
  72. {}
  73. double value() const { return _value; }
  74. void setValue(double value) { _value = value; }
  75. double minimum() const { return _minimum; }
  76. double step() const { return _step; }
  77. double maximum() const { return _maximum; }
  78. bool isDefault() const override { return _value == _defaultValue; }
  79. std::string encode() const override;
  80. void decode(const std::string& encoded) override;
  81. private:
  82. double _value;
  83. double _defaultValue;
  84. double _minimum;
  85. double _step;
  86. double _maximum;
  87. };
  88. class SettingsEntryString : public SettingsEntry
  89. {
  90. public:
  91. SettingsEntryString(const std::string& category, const std::string& name, const std::string& defaultValue) :
  92. SettingsEntry(category, name),
  93. _value(defaultValue),
  94. _defaultValue(defaultValue)
  95. {}
  96. const std::string& value() const { return _value; }
  97. void setValue(const std::string& value) { _value = value; }
  98. bool isDefault() const override { return _value == _defaultValue; }
  99. std::string encode() const override { return value(); }
  100. void decode(const std::string& encoded) override { setValue(encoded); }
  101. private:
  102. std::string _value;
  103. std::string _defaultValue;
  104. };
  105. class SettingsEntryEnum : public SettingsEntry
  106. {
  107. public:
  108. struct Item {
  109. std::string value;
  110. std::string description;
  111. };
  112. SettingsEntryEnum(const std::string& category, const std::string& name, const std::vector<Item>& items, const std::string& defaultValue) :
  113. SettingsEntry(category, name),
  114. _items(items),
  115. _index(0),
  116. _defaultValue(defaultValue)
  117. {
  118. setValue(_defaultValue);
  119. }
  120. const std::string& value() const { return _items[_index].value; }
  121. size_t index() const { return _index; }
  122. void setValue(const std::string& value);
  123. void setIndex(size_t index) { if (index < _items.size()) _index = index; }
  124. const std::vector<Item>& items() const { return _items; }
  125. bool isDefault() const override { return value() == _defaultValue; }
  126. std::string encode() const override { return value(); }
  127. void decode(const std::string& encoded) override { setValue(encoded); }
  128. private:
  129. std::vector<Item> _items;
  130. size_t _index;
  131. std::string _defaultValue;
  132. };
  133. class Settings
  134. {
  135. public:
  136. static SettingsEntryBool showWarningsIn3dView;
  137. static SettingsEntryBool mouseCentricZoom;
  138. static SettingsEntryBool mouseSwapButtons;
  139. static SettingsEntryInt indentationWidth;
  140. static SettingsEntryInt tabWidth;
  141. static SettingsEntryEnum lineWrap;
  142. static SettingsEntryEnum lineWrapIndentationStyle;
  143. static SettingsEntryInt lineWrapIndentation;
  144. static SettingsEntryEnum lineWrapVisualizationBegin;
  145. static SettingsEntryEnum lineWrapVisualizationEnd;
  146. static SettingsEntryEnum showWhitespace;
  147. static SettingsEntryInt showWhitespaceSize;
  148. static SettingsEntryBool autoIndent;
  149. static SettingsEntryBool backspaceUnindents;
  150. static SettingsEntryEnum indentStyle;
  151. static SettingsEntryEnum tabKeyFunction;
  152. static SettingsEntryBool highlightCurrentLine;
  153. static SettingsEntryBool enableBraceMatching;
  154. static SettingsEntryBool enableLineNumbers;
  155. static SettingsEntryBool enableNumberScrollWheel;
  156. static SettingsEntryEnum modifierNumberScrollWheel;
  157. static SettingsEntryString octoPrintUrl;
  158. static SettingsEntryString octoPrintApiKey;
  159. static SettingsEntryEnum octoPrintFileFormat;
  160. static SettingsEntryEnum octoPrintAction;
  161. static SettingsEntryString octoPrintSlicerEngine;
  162. static SettingsEntryString octoPrintSlicerEngineDesc;
  163. static SettingsEntryString octoPrintSlicerProfile;
  164. static SettingsEntryString octoPrintSlicerProfileDesc;
  165. static SettingsEntryBool exportUseAsciiSTL;
  166. static SettingsEntryEnum toolbarExport3D;
  167. static SettingsEntryEnum toolbarExport2D;
  168. static SettingsEntryBool summaryCamera;
  169. static SettingsEntryBool summaryArea;
  170. static SettingsEntryBool summaryBoundingBox;
  171. static SettingsEntryBool inputEnableDriverHIDAPI;
  172. static SettingsEntryBool inputEnableDriverHIDAPILog;
  173. static SettingsEntryBool inputEnableDriverSPNAV;
  174. static SettingsEntryBool inputEnableDriverJOYSTICK;
  175. static SettingsEntryBool inputEnableDriverQGAMEPAD;
  176. static SettingsEntryBool inputEnableDriverDBUS;
  177. static SettingsEntryEnum inputTranslationX;
  178. static SettingsEntryEnum inputTranslationY;
  179. static SettingsEntryEnum inputTranslationZ;
  180. static SettingsEntryEnum inputTranslationXVPRel;
  181. static SettingsEntryEnum inputTranslationYVPRel;
  182. static SettingsEntryEnum inputTranslationZVPRel;
  183. static SettingsEntryEnum inputRotateX;
  184. static SettingsEntryEnum inputRotateY;
  185. static SettingsEntryEnum inputRotateZ;
  186. static SettingsEntryEnum inputRotateXVPRel;
  187. static SettingsEntryEnum inputRotateYVPRel;
  188. static SettingsEntryEnum inputRotateZVPRel;
  189. static SettingsEntryEnum inputZoom;
  190. static SettingsEntryEnum inputZoom2;
  191. static SettingsEntryDouble inputTranslationGain;
  192. static SettingsEntryDouble inputTranslationVPRelGain;
  193. static SettingsEntryDouble inputRotateGain;
  194. static SettingsEntryDouble inputRotateVPRelGain;
  195. static SettingsEntryDouble inputZoomGain;
  196. static SettingsEntryString inputButton0;
  197. static SettingsEntryString inputButton1;
  198. static SettingsEntryString inputButton2;
  199. static SettingsEntryString inputButton3;
  200. static SettingsEntryString inputButton4;
  201. static SettingsEntryString inputButton5;
  202. static SettingsEntryString inputButton6;
  203. static SettingsEntryString inputButton7;
  204. static SettingsEntryString inputButton8;
  205. static SettingsEntryString inputButton9;
  206. static SettingsEntryString inputButton10;
  207. static SettingsEntryString inputButton11;
  208. static SettingsEntryString inputButton12;
  209. static SettingsEntryString inputButton13;
  210. static SettingsEntryString inputButton14;
  211. static SettingsEntryString inputButton15;
  212. static SettingsEntryString inputButton16;
  213. static SettingsEntryString inputButton17;
  214. static SettingsEntryString inputButton18;
  215. static SettingsEntryString inputButton19;
  216. static SettingsEntryString inputButton20;
  217. static SettingsEntryString inputButton21;
  218. static SettingsEntryString inputButton22;
  219. static SettingsEntryString inputButton23;
  220. static SettingsEntryDouble axisTrim0;
  221. static SettingsEntryDouble axisTrim1;
  222. static SettingsEntryDouble axisTrim2;
  223. static SettingsEntryDouble axisTrim3;
  224. static SettingsEntryDouble axisTrim4;
  225. static SettingsEntryDouble axisTrim5;
  226. static SettingsEntryDouble axisTrim6;
  227. static SettingsEntryDouble axisTrim7;
  228. static SettingsEntryDouble axisTrim8;
  229. static SettingsEntryDouble axisDeadzone0;
  230. static SettingsEntryDouble axisDeadzone1;
  231. static SettingsEntryDouble axisDeadzone2;
  232. static SettingsEntryDouble axisDeadzone3;
  233. static SettingsEntryDouble axisDeadzone4;
  234. static SettingsEntryDouble axisDeadzone5;
  235. static SettingsEntryDouble axisDeadzone6;
  236. static SettingsEntryDouble axisDeadzone7;
  237. static SettingsEntryDouble axisDeadzone8;
  238. static SettingsEntryInt joystickNr;
  239. static SettingsEntryString& inputButton(int id);
  240. static SettingsEntryDouble& axisTrim(int id);
  241. static SettingsEntryDouble& axisDeadzone(int id);
  242. static void visit(const class SettingsVisitor& visitor);
  243. };
  244. class SettingsVisitor
  245. {
  246. public:
  247. SettingsVisitor() {}
  248. virtual ~SettingsVisitor() {}
  249. virtual void handle(SettingsEntry& entry) const = 0;
  250. };
  251. } // namespace Settings