81 lines · 2.1 KB · C++
RawDownload
////  SettingManager.cpp//////  Created by Clement on 2/2/15.//  Copyright 2015 High Fidelity, Inc.////  Distributed under the Apache License, Version 2.0.//  See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html// #include <QDebug> #include "SettingInterface.h"#include "SettingManager.h" namespace Setting {    Manager::~Manager() {        // Cleanup timer        stopTimer();        delete _saveTimer;         // Save all settings before exit        saveAll();         // sync will be called in the QSettings destructor    }        void Manager::registerHandle(Setting::Interface* handle) {        QString key = handle->getKey();        if (_handles.contains(key)) {            qWarning() << "Setting::Manager::registerHandle(): Key registered more than once, overriding: " << key;        }        _handles.insert(key, handle);    }        void Manager::removeHandle(const QString& key) {        _handles.remove(key);    }        void Manager::loadSetting(Interface* handle) {        handle->setVariant(value(handle->getKey()));    }        void Manager::saveSetting(Interface* handle) {        if (handle->isSet()) {            setValue(handle->getKey(), handle->getVariant());        } else {            remove(handle->getKey());        }    }        static const int SAVE_INTERVAL_MSEC = 5 * 1000; // 5 sec    void Manager::startTimer() {        if (!_saveTimer) {            _saveTimer = new QTimer(this);            Q_CHECK_PTR(_saveTimer);            _saveTimer->setSingleShot(true); // We will restart it once settings are saved.            _saveTimer->setInterval(SAVE_INTERVAL_MSEC);            connect(_saveTimer, SIGNAL(timeout()), this, SLOT(saveAll()));        }        _saveTimer->start();    }        void Manager::stopTimer() {        if (_saveTimer) {            _saveTimer->stop();        }    }        void Manager::saveAll() {        for (auto handle : _handles) {            saveSetting(handle);        }                // Restart timer        if (_saveTimer) {            _saveTimer->start();        }    }}