#include "settings.h" #include "printutils.h" #include using namespace boost::assign; // bring 'operator+=()' into scope namespace Settings { static std::list entries; SettingsEntry::SettingsEntry(const std::string category, const std::string name, const Value range, const Value def) : _category(category), _name(name), _value(def), _range(range), _default(def) { entries.push_back(this); } SettingsEntry::~SettingsEntry() { } const std::string & SettingsEntry::category() const { return _category; } const std::string & SettingsEntry::name() const { return _name; } const Value & SettingsEntry::defaultValue() const { return _default; } const Value & SettingsEntry::range() const { return _range; } bool SettingsEntry::is_default() const { return _value == _default; } static Value value(std::string s1, std::string s2) { Value::VectorType v; v += Value(s1), Value(s2); return v; } static Value values(std::string s1, std::string s1disp, std::string s2, std::string s2disp) { Value::VectorType v; v += value(s1, s1disp), value(s2, s2disp); return v; } static Value values(std::string s1, std::string s1disp, std::string s2, std::string s2disp, std::string s3, std::string s3disp) { Value::VectorType v; v += value(s1, s1disp), value(s2, s2disp), value(s3, s3disp); return v; } static Value values(std::string s1, std::string s1disp, std::string s2, std::string s2disp, std::string s3, std::string s3disp, std::string s4, std::string s4disp) { Value::VectorType v; v += value(s1, s1disp), value(s2, s2disp), value(s3, s3disp), value(s4, s4disp); return v; } Settings *Settings::inst(bool erase) { static Settings *instance = new Settings; if (erase) { delete instance; instance = NULL; } return instance; } Settings::Settings() { } Settings::~Settings() { } void Settings::visit(Visitor& visitor) { for (std::list::iterator it = entries.begin();it != entries.end();it++) { visitor.handle(*(*it)); } } Value Settings::get(const SettingsEntry& entry) { return entry._value; } void Settings::set(SettingsEntry& entry, const Value val) { entry._value = val; } Visitor::Visitor() { } Visitor::~Visitor() { } /* * Supported settings entry types are: bool / int and string selection * * String selection is used to handle comboboxes and has two values * per config selection. The first value is used internally for both * finding the combobox selection and for storing the value in the * external settings file. The second value is the display value that * can be translated. */ SettingsEntry Settings::showWarningsIn3dView("3dview", "showWarningsIn3dView", Value(true), Value(true)); SettingsEntry Settings::indentationWidth("editor", "indentationWidth", Value(Value::RangeType(1, 16)), Value(4)); SettingsEntry Settings::tabWidth("editor", "tabWidth", Value(Value::RangeType(1, 16)), Value(4)); SettingsEntry Settings::lineWrap("editor", "lineWrap", values("None", _("None"), "Char", _("Wrap at character boundaries"), "Word", _("Wrap at word boundaries")), Value("Word")); SettingsEntry Settings::lineWrapIndentationStyle("editor", "lineWrapIndentationStyle", values("Fixed", _("Fixed"), "Same", _("Same"), "Indented", _("Indented")), Value("Fixed")); SettingsEntry Settings::lineWrapIndentation("editor", "lineWrapIndentation", Value(Value::RangeType(0, 999)), Value(4)); SettingsEntry Settings::lineWrapVisualizationBegin("editor", "lineWrapVisualizationBegin", values("None", _("None"), "Text", _("Text"), "Border", _("Border"), "Margin", _("Margin")), Value("None")); SettingsEntry Settings::lineWrapVisualizationEnd("editor", "lineWrapVisualizationEnd", values("None", _("None"), "Text", _("Text"), "Border", _("Border"), "Margin", _("Margin")), Value("Border")); SettingsEntry Settings::showWhitespace("editor", "showWhitespaces", values("Never", _("Never"), "Always", _("Always"), "AfterIndentation", _("After indentation")), Value("Never")); SettingsEntry Settings::showWhitespaceSize("editor", "showWhitespacesSize", Value(Value::RangeType(1, 16)), Value(2)); SettingsEntry Settings::autoIndent("editor", "autoIndent", Value(true), Value(true)); SettingsEntry Settings::indentStyle("editor", "indentStyle", values("Spaces", _("Spaces"), "Tabs", _("Tabs")), Value("Spaces")); SettingsEntry Settings::tabKeyFunction("editor", "tabKeyFunction", values("Indent", _("Indent"), "InsertTab", _("Insert Tab")), Value("Indent")); SettingsEntry Settings::highlightCurrentLine("editor", "highlightCurrentLine", Value(true), Value(true)); SettingsEntry Settings::enableBraceMatching("editor", "enableBraceMatching", Value(true), Value(true)); }