Keep the settings page in sync with the real settings

0.6.1
PlutonicOverkill 8 years ago
parent 64879c03e4
commit dff3828710

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

@ -591,18 +591,16 @@ CSMPrefs::State& CSMPrefs::State::get()
void CSMPrefs::State::resetCategory(const std::string& category)
{
for (Settings::CategorySettingValueMap::iterator i = mSettings.mUserSettings.begin();
i != mSettings.mUserSettings.end(); ++i)
{
QMutexLocker lock (&mMutex);
for (Settings::CategorySettingValueMap::iterator i = mSettings.mUserSettings.begin(); i != mSettings.mUserSettings.end(); ++i)
// if the category matches
if (i->first.first == category)
{
// if the category matches
if (i->first.first == category)
{
// mark the setting as changed
mSettings.mChangedSettings.insert(std::make_pair(i->first.first, i->first.second));
// reset the value to the default
i->second = mSettings.mDefaultSettings[i->first];
}
// mark the setting as changed
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)
: PageBase(category, parent)
, mTopWidget(0)
, mStackedLayout(0)
, mPageLayout(0)
, mPageSelector(0)
{
// Need one widget for scroll area
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);
init();
}
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"
class QWidget;
class QComboBox;
class QGridLayout;
class QStackedLayout;
@ -26,6 +27,11 @@ namespace CSVPrefs
private:
void refresh();
void init();
QWidget* mTopWidget;
QStackedLayout* mStackedLayout;
QGridLayout* mPageLayout;
QComboBox* mPageSelector;

@ -10,18 +10,9 @@
CSVPrefs::Page::Page (CSMPrefs::Category& category, QWidget *parent)
: PageBase (category, parent)
, mParent (parent)
{
QWidget *widget = new QWidget (parent);
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);
init();
}
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);
}
}
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"
class QGridLayout;
class QWidget;
namespace CSMPrefs
{
@ -17,12 +18,20 @@ namespace CSVPrefs
Q_OBJECT
QGridLayout *mGrid;
QWidget* mParent;
QWidget* mWidget;
public:
Page (CSMPrefs::Category& category, QWidget *parent);
void addSetting (CSMPrefs::Setting *setting);
private:
void refresh();
void init();
};
}

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

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

Loading…
Cancel
Save