| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | |
| | #include <QSettings> |
| |
|
| | #include "rs_debug.h" |
| | #include "rs_settings.h" |
| |
|
| | #include "rs_pen.h" |
| |
|
| | RS_Settings::GroupGuard::GroupGuard(const QString &group):m_group{group} {} |
| |
|
| | RS_Settings::GroupGuard::~GroupGuard(){ |
| | try { |
| | const auto instance = RS_Settings::instance(); |
| | instance ->endGroup(); |
| | if (!m_group.isEmpty()) { |
| | RS_Settings::instance()-> beginGroup(m_group); |
| | } |
| | } catch (...) { |
| | LC_LOG(RS_Debug::D_CRITICAL) << "RS_SETTINGS cleanup error"; |
| | } |
| | } |
| |
|
| |
|
| | bool RS_Settings::save_is_allowed = true; |
| |
|
| |
|
| | RS_Settings *RS_Settings::instance() { |
| | return INSTANCE; |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | void RS_Settings::init(const QString &companyKey,const QString &appKey) { |
| | auto* settings = new QSettings(companyKey, appKey); |
| | INSTANCE = new RS_Settings(settings); |
| | } |
| |
|
| | RS_Settings::RS_Settings(QSettings *qsettings) { |
| | settings = qsettings; |
| | m_group = ""; |
| | } |
| |
|
| | RS_Settings::~RS_Settings() { |
| | delete settings; |
| | cache.clear(); |
| | } |
| |
|
| |
|
| | void RS_Settings::beginGroup(QString group) { |
| | QString actualGroup = group; |
| | m_group = std::move(actualGroup); |
| | } |
| |
|
| | void RS_Settings::endGroup() { |
| | m_group.clear(); |
| | } |
| |
|
| | std::unique_ptr<RS_Settings::GroupGuard> RS_Settings::beginGroupGuard(QString group) { |
| | auto guard = std::make_unique<RS_Settings::GroupGuard>(std::move(m_group)); |
| | m_group = std::move(group); |
| | return guard; |
| | } |
| |
|
| | bool RS_Settings::write(const QString &key, int value) { |
| | return writeSingle(m_group, key, value); |
| | } |
| | bool RS_Settings::writeColor(const QString &key, int value) { ; |
| | return writeEntry(key, QVariant(value % 0x80000000)); |
| | } |
| |
|
| | bool RS_Settings::writeSingle(const QString& group, const QString &key, int value) { |
| | return writeEntrySingle(group, key, QVariant(value)); |
| | } |
| |
|
| | bool RS_Settings::write(const QString &key, const QString &value) { |
| | return writeSingle(m_group, key, value); |
| | } |
| |
|
| | bool RS_Settings::writeSingle(const QString& group, const QString &key, const QString &value) { |
| | return writeEntrySingle(group, key, QVariant(value)); |
| | } |
| |
|
| | bool RS_Settings::write(const QString &key, double value) { |
| | return writeSingle(m_group, key, value); |
| | } |
| |
|
| | bool RS_Settings::writeSingle(const QString & group, const QString &key, double value) { |
| | return writeEntrySingle(group, key, QVariant(value)); |
| | } |
| | bool RS_Settings::write(const QString &key, bool value) { |
| | return writeSingle(m_group, key, value); |
| | } |
| |
|
| | bool RS_Settings::writeSingle(const QString &group, const QString &key, bool value) { |
| | return writeSingle(group, key, value ? 1 : 0); |
| | } |
| |
|
| | bool RS_Settings::readBool(const QString &key, bool defaultValue) { |
| | return readBoolSingle(m_group, key, defaultValue); |
| | } |
| |
|
| | bool RS_Settings::readBoolSingle(const QString &group, const QString &key, bool defaultValue) { |
| | int def = defaultValue ? 1 : 0; |
| | return readIntSingle(group, key, def) == 1; |
| | } |
| |
|
| | bool RS_Settings::writeEntry(const QString &key, const QVariant &value) { |
| | return writeEntrySingle(m_group, key, QVariant(value)); |
| | } |
| |
|
| | QString RS_Settings::getFullName(const QString &group, const QString &key) const { |
| | const QString &fullName = QString("/%1/%2").arg(group, key); |
| | return fullName; |
| | } |
| |
|
| | void RS_Settings::emitOptionsChanged() { |
| | emit optionsChanged(); |
| | } |
| |
|
| | QString RS_Settings::readStr(const QString &key,const QString &def) { |
| | return readStrSingle(m_group, key, def); |
| | } |
| |
|
| | bool RS_Settings::writeEntrySingle(const QString& group, const QString &key, const QVariant &value) { |
| | QString fullName = getFullName(group, key); |
| |
|
| | |
| | |
| |
|
| | QVariant ret = readEntryCache(fullName); |
| | if (ret.isValid() && ret == value) { |
| | return true; |
| | } |
| |
|
| | |
| |
|
| | settings->setValue(fullName, value); |
| | cache[fullName] = value; |
| |
|
| | |
| | |
| | emit optionChanged(m_group, key, ret, value); |
| |
|
| | return true; |
| | } |
| |
|
| | QString RS_Settings::readStrSingle(const QString& group, const QString &key,const QString &def) { |
| | QString fullName = getFullName(group, key); |
| | QVariant value = readEntryCache(fullName); |
| | if (!value.isValid()) { |
| | value = settings->value(fullName, QVariant(def)).toString(); |
| | cache[fullName] = value; |
| | } |
| | return value.toString(); |
| | } |
| |
|
| | int RS_Settings::readColor(const QString &key, int def) { |
| | return readColorSingle(m_group, key, def); |
| | } |
| |
|
| | QStringList RS_Settings::getAllKeys() const { |
| | return settings->allKeys(); |
| | } |
| |
|
| | QStringList RS_Settings::getChildKeys() const { |
| | QString currentGroup = settings->group(); |
| | settings->beginGroup(m_group); |
| | auto result = settings->childKeys(); |
| | settings->endGroup(); |
| | settings->beginGroup(currentGroup); |
| | return result; |
| | } |
| |
|
| | void RS_Settings::remove(const QString& key) const { |
| | QString fullName = getFullName(m_group, key); |
| | settings->remove(fullName); |
| | } |
| |
|
| | int RS_Settings::readColorSingle(const QString& group, const QString &key, int def) { |
| | QString fullName = getFullName(group, key); |
| | QVariant value = readEntryCache(fullName); |
| | if (!value.isValid()) { |
| | value = settings->value(fullName, QVariant(def)); |
| | cache[fullName] = value; |
| | } |
| | unsigned long long uValue = value.toULongLong(); |
| | uValue = uValue % 0x80000000ull; |
| | int result = int(uValue); |
| | return result; |
| | } |
| |
|
| | int RS_Settings::readInt(const QString &key, int def) { |
| | return readIntSingle(m_group, key, def); |
| | } |
| |
|
| | int RS_Settings::readIntSingle(const QString& group, const QString &key, int def) { |
| | QString fullName = getFullName(group, key); |
| | QVariant value = readEntryCache(fullName); |
| | if (!value.isValid()) { |
| | value = settings->value(fullName, QVariant(def)); |
| | cache[fullName] = value; |
| | } |
| | int result = value.toInt(); |
| | return result; |
| | } |
| |
|
| | QByteArray RS_Settings::readByteArray(const QString &key) { |
| | return readByteArraySingle(m_group, key); |
| | } |
| |
|
| | QByteArray RS_Settings::readByteArraySingle(const QString& group, const QString &key) { |
| | QString fullName = getFullName(group, key); |
| | return settings->value(fullName, "").toByteArray(); |
| | } |
| |
|
| | QVariant RS_Settings::readEntryCache(const QString &key) { |
| | if (cache.count(key) == 0) { |
| | return QVariant(); |
| | } |
| | return cache[key]; |
| | } |
| |
|
| | void RS_Settings::clear_all() { |
| | settings->clear(); |
| | cache.clear(); |
| | save_is_allowed = false; |
| | } |
| |
|
| | void RS_Settings::clear_geometry() { |
| | settings->remove("/Geometry"); |
| | cache.clear(); |
| | save_is_allowed = false; |
| | } |
| |
|
| | void RS_Settings::writePen(QString name, RS_Pen const &pen){ |
| | LC_SET("pen" + name + "Color", pen.getColor().name()); |
| | LC_SET("pen" + name + "LineType", pen.getLineType()); |
| | LC_SET("pen" + name + "Width", pen.getWidth()); |
| | } |
| |
|
| | RS_Pen RS_Settings::readPen(QString name, RS_Pen &defaultPen){ |
| | RS_Color color = QColor(LC_GET_STR("pen" + name + "Color", defaultPen.getColor().name())); |
| | |
| | RS2::LineType lineType = static_cast<RS2::LineType> (LC_GET_INT("pen" + name + "LineType", defaultPen.getLineType())); |
| | RS2::LineWidth lineWidth = static_cast<RS2::LineWidth> (LC_GET_INT("pen" + name + "Width", defaultPen.getWidth())); |
| |
|
| | RS_Pen result = RS_Pen(color, lineWidth, lineType); |
| | return result; |
| | } |
| |
|