Keep the settings page in sync with the real settings

pull/216/head
PlutonicOverkill 8 years ago
parent 64879c03e4
commit dff3828710

@ -10,6 +10,8 @@
#include "state.hpp" #include "state.hpp"
#include "shortcutmanager.hpp" #include "shortcutmanager.hpp"
#include <iostream>
namespace CSMPrefs namespace CSMPrefs
{ {
const int ShortcutSetting::MaxKeys; const int ShortcutSetting::MaxKeys;

@ -591,18 +591,16 @@ CSMPrefs::State& CSMPrefs::State::get()
void CSMPrefs::State::resetCategory(const std::string& category) void CSMPrefs::State::resetCategory(const std::string& category)
{ {
for (Settings::CategorySettingValueMap::iterator i = mSettings.mUserSettings.begin();
i != mSettings.mUserSettings.end(); ++i)
{ {
QMutexLocker lock (&mMutex); // if the category matches
for (Settings::CategorySettingValueMap::iterator i = mSettings.mUserSettings.begin(); i != mSettings.mUserSettings.end(); ++i) if (i->first.first == category)
{ {
// if the category matches // mark the setting as changed
if (i->first.first == category) mSettings.mChangedSettings.insert(std::make_pair(i->first.first, i->first.second));
{ // reset the value to the default
// mark the setting as changed i->second = mSettings.mDefaultSettings[i->first];
mSettings.mChangedSettings.insert(std::make_pair(i->first.first, i->first.second));
// reset the value to the default
i->second = mSettings.mDefaultSettings[i->first];
}
} }
} }

@ -16,35 +16,12 @@ namespace CSVPrefs
{ {
KeyBindingPage::KeyBindingPage(CSMPrefs::Category& category, QWidget* parent) KeyBindingPage::KeyBindingPage(CSMPrefs::Category& category, QWidget* parent)
: PageBase(category, parent) : PageBase(category, parent)
, mTopWidget(0)
, mStackedLayout(0) , mStackedLayout(0)
, mPageLayout(0) , mPageLayout(0)
, mPageSelector(0) , mPageSelector(0)
{ {
// Need one widget for scroll area init();
QWidget* topWidget = new QWidget();
QVBoxLayout* topLayout = new QVBoxLayout(topWidget);
QWidget* resetAll = new QPushButton("Reset all to default", this);
connect(resetAll, SIGNAL(clicked()), this, SLOT(resetCategory()));
topLayout->addWidget(resetAll);
// Allows switching between "pages"
QWidget* stackedWidget = new QWidget();
mStackedLayout = new QStackedLayout(stackedWidget);
mPageSelector = new QComboBox();
connect(mPageSelector, SIGNAL(currentIndexChanged(int)), mStackedLayout, SLOT(setCurrentIndex(int)));
topLayout->addWidget(mPageSelector);
topLayout->addWidget(stackedWidget);
topLayout->setSizeConstraint(QLayout::SetMinAndMaxSize);
// Add each option
for (CSMPrefs::Category::Iterator iter = category.begin(); iter!=category.end(); ++iter)
addSetting (*iter);
setWidgetResizable(true);
setWidget(topWidget);
} }
void KeyBindingPage::addSetting(CSMPrefs::Setting *setting) void KeyBindingPage::addSetting(CSMPrefs::Setting *setting)
@ -91,4 +68,41 @@ namespace CSVPrefs
} }
} }
} }
void KeyBindingPage::refresh()
{
delete mTopWidget;
// reinitialize
init();
}
void KeyBindingPage::init()
{
// Need one widget for scroll area
mTopWidget = new QWidget();
QVBoxLayout* topLayout = new QVBoxLayout(mTopWidget);
QWidget* resetAll = new QPushButton("Reset all to default", this);
connect(resetAll, SIGNAL(clicked()), this, SLOT(resetCategory()));
topLayout->addWidget(resetAll);
// Allows switching between "pages"
QWidget* stackedWidget = new QWidget();
mStackedLayout = new QStackedLayout(stackedWidget);
mPageSelector = new QComboBox();
connect(mPageSelector, SIGNAL(currentIndexChanged(int)), mStackedLayout, SLOT(setCurrentIndex(int)));
topLayout->addWidget(mPageSelector);
topLayout->addWidget(stackedWidget);
topLayout->setSizeConstraint(QLayout::SetMinAndMaxSize);
// Add each option
for (CSMPrefs::Category::Iterator iter = getCategory().begin(); iter!=getCategory().end(); ++iter)
addSetting (*iter);
setWidgetResizable(true);
setWidget(mTopWidget);
}
} }

@ -3,6 +3,7 @@
#include "pagebase.hpp" #include "pagebase.hpp"
class QWidget;
class QComboBox; class QComboBox;
class QGridLayout; class QGridLayout;
class QStackedLayout; class QStackedLayout;
@ -26,6 +27,11 @@ namespace CSVPrefs
private: private:
void refresh();
void init();
QWidget* mTopWidget;
QStackedLayout* mStackedLayout; QStackedLayout* mStackedLayout;
QGridLayout* mPageLayout; QGridLayout* mPageLayout;
QComboBox* mPageSelector; QComboBox* mPageSelector;

@ -10,18 +10,9 @@
CSVPrefs::Page::Page (CSMPrefs::Category& category, QWidget *parent) CSVPrefs::Page::Page (CSMPrefs::Category& category, QWidget *parent)
: PageBase (category, parent) : PageBase (category, parent)
, mParent (parent)
{ {
QWidget *widget = new QWidget (parent); init();
mGrid = new QGridLayout (widget);
QWidget* resetAll = new QPushButton("Reset all to default", this);
connect (resetAll, SIGNAL (clicked()), this, SLOT (resetCategory()));
mGrid->addWidget(resetAll, 0, 0, 1, 2);
for (CSMPrefs::Category::Iterator iter = category.begin(); iter!=category.end(); ++iter)
addSetting (*iter);
setWidget (widget);
} }
void CSVPrefs::Page::addSetting (CSMPrefs::Setting *setting) void CSVPrefs::Page::addSetting (CSMPrefs::Setting *setting)
@ -44,3 +35,26 @@ void CSVPrefs::Page::addSetting (CSMPrefs::Setting *setting)
mGrid->addWidget (new QWidget (this), next, 0); mGrid->addWidget (new QWidget (this), next, 0);
} }
} }
void CSVPrefs::Page::refresh()
{
delete mWidget;
// reinitialize
init();
}
void CSVPrefs::Page::init()
{
mWidget = new QWidget(mParent);
mGrid = new QGridLayout(mWidget);
QWidget* resetAll = new QPushButton("Reset all to default", this);
connect(resetAll, SIGNAL(clicked()), this, SLOT(resetCategory()));
mGrid->addWidget(resetAll, 0, 0, 1, 2);
for (CSMPrefs::Category::Iterator iter = getCategory().begin(); iter!=getCategory().end(); ++iter)
addSetting (*iter);
setWidget(mWidget);
}

@ -4,6 +4,7 @@
#include "pagebase.hpp" #include "pagebase.hpp"
class QGridLayout; class QGridLayout;
class QWidget;
namespace CSMPrefs namespace CSMPrefs
{ {
@ -17,12 +18,20 @@ namespace CSVPrefs
Q_OBJECT Q_OBJECT
QGridLayout *mGrid; QGridLayout *mGrid;
QWidget* mParent;
QWidget* mWidget;
public: public:
Page (CSMPrefs::Category& category, QWidget *parent); Page (CSMPrefs::Category& category, QWidget *parent);
void addSetting (CSMPrefs::Setting *setting); void addSetting (CSMPrefs::Setting *setting);
private:
void refresh();
void init();
}; };
} }

@ -16,4 +16,5 @@ CSMPrefs::Category& CSVPrefs::PageBase::getCategory()
void CSVPrefs::PageBase::resetCategory() void CSVPrefs::PageBase::resetCategory()
{ {
CSMPrefs::get().resetCategory(getCategory().getKey()); CSMPrefs::get().resetCategory(getCategory().getKey());
refresh();
} }

@ -2,6 +2,7 @@
#define CSV_PREFS_PAGEBASE_H #define CSV_PREFS_PAGEBASE_H
#include <QScrollArea> #include <QScrollArea>
#include <QLayout>
namespace CSMPrefs namespace CSMPrefs
{ {
@ -25,6 +26,10 @@ namespace CSVPrefs
public slots: public slots:
void resetCategory(); void resetCategory();
private:
virtual void refresh() {};
}; };
} }

Loading…
Cancel
Save