forked from qt-creator/qt-creator
CPaster: Use new pattern for SettingsPage
Change-Id: I90f8684e51dd7855000dd93b68b94c7c6b56402b Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
@@ -115,9 +115,10 @@ bool CodepasterPlugin::initialize(const QStringList &arguments, QString *errorMe
|
||||
|
||||
// Create the settings Page
|
||||
m_settings->fromSettings(ICore::settings());
|
||||
auto settingsPage = new SettingsPage(m_settings, this);
|
||||
|
||||
// Create the protocols and append them to the Settings
|
||||
QStringList protocolNames;
|
||||
|
||||
Protocol *protos[] = {new PasteBinDotComProtocol,
|
||||
new FileShareProtocol,
|
||||
new PasteCodeDotXyzProtocol,
|
||||
@@ -126,10 +127,12 @@ bool CodepasterPlugin::initialize(const QStringList &arguments, QString *errorMe
|
||||
for (int i = 0; i < count; ++i) {
|
||||
connect(protos[i], &Protocol::pasteDone, this, &CodepasterPlugin::finishPost);
|
||||
connect(protos[i], &Protocol::fetchDone, this, &CodepasterPlugin::finishFetch);
|
||||
settingsPage->addProtocol(protos[i]->name());
|
||||
protocolNames.append(protos[i]->name());
|
||||
m_protocols.append(protos[i]);
|
||||
}
|
||||
|
||||
(void) new SettingsPage(m_settings, protocolNames, this);
|
||||
|
||||
m_urlOpen = new UrlOpenProtocol;
|
||||
connect(m_urlOpen, &Protocol::fetchDone, this, &CodepasterPlugin::finishFetch);
|
||||
|
||||
|
||||
@@ -30,7 +30,6 @@
|
||||
#include <extensionsystem/iplugin.h>
|
||||
|
||||
#include <QStringList>
|
||||
#include <QSharedPointer>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
class QAction;
|
||||
@@ -87,7 +86,7 @@ private:
|
||||
void fetchUrl();
|
||||
|
||||
static CodepasterPlugin *m_instance;
|
||||
const QSharedPointer<Settings> m_settings;
|
||||
Settings *m_settings = nullptr;
|
||||
QAction *m_postEditorAction = nullptr;
|
||||
QAction *m_fetchAction = nullptr;
|
||||
QAction *m_fetchUrlAction = nullptr;
|
||||
|
||||
@@ -34,24 +34,33 @@
|
||||
|
||||
namespace CodePaster {
|
||||
|
||||
SettingsWidget::SettingsWidget(const QStringList &protocols, QWidget *parent) :
|
||||
QWidget(parent)
|
||||
class SettingsWidget final : public Core::IOptionsPageWidget
|
||||
{
|
||||
public:
|
||||
SettingsWidget(const QStringList &protocols, Settings *settings);
|
||||
|
||||
private:
|
||||
void apply() final;
|
||||
|
||||
Settings *m_settings;
|
||||
Internal::Ui::SettingsPage m_ui;
|
||||
};
|
||||
|
||||
SettingsWidget::SettingsWidget(const QStringList &protocols, Settings *settings)
|
||||
: m_settings(settings)
|
||||
{
|
||||
m_ui.setupUi(this);
|
||||
m_ui.defaultProtocol->addItems(protocols);
|
||||
}
|
||||
|
||||
void SettingsWidget::setSettings(const Settings &settings)
|
||||
{
|
||||
m_ui.userEdit->setText(settings.username);
|
||||
const int index = m_ui.defaultProtocol->findText(settings.protocol);
|
||||
m_ui.userEdit->setText(m_settings->username);
|
||||
const int index = m_ui.defaultProtocol->findText(m_settings->protocol);
|
||||
m_ui.defaultProtocol->setCurrentIndex(index == -1 ? 0 : index);
|
||||
m_ui.expirySpinBox->setValue(settings.expiryDays);
|
||||
m_ui.clipboardBox->setChecked(settings.copyToClipboard);
|
||||
m_ui.displayBox->setChecked(settings.displayOutput);
|
||||
m_ui.expirySpinBox->setValue(m_settings->expiryDays);
|
||||
m_ui.clipboardBox->setChecked(m_settings->copyToClipboard);
|
||||
m_ui.displayBox->setChecked(m_settings->displayOutput);
|
||||
}
|
||||
|
||||
Settings SettingsWidget::settings()
|
||||
void SettingsWidget::apply()
|
||||
{
|
||||
Settings rc;
|
||||
rc.username = m_ui.userEdit->text();
|
||||
@@ -59,44 +68,24 @@ Settings SettingsWidget::settings()
|
||||
rc.expiryDays = m_ui.expirySpinBox->value();
|
||||
rc.copyToClipboard = m_ui.clipboardBox->isChecked();
|
||||
rc.displayOutput = m_ui.displayBox->isChecked();
|
||||
return rc;
|
||||
|
||||
if (rc != *m_settings) {
|
||||
*m_settings = rc;
|
||||
m_settings->toSettings(Core::ICore::settings());
|
||||
}
|
||||
}
|
||||
|
||||
SettingsPage::SettingsPage(const QSharedPointer<Settings> &settings, QObject *parent)
|
||||
: Core::IOptionsPage(parent), m_settings(settings), m_widget(nullptr)
|
||||
SettingsPage::SettingsPage(Settings *settings, const QStringList &protocolNames, QObject *parent)
|
||||
: Core::IOptionsPage(parent)
|
||||
{
|
||||
setId("A.CodePaster.General");
|
||||
setDisplayName(tr("General"));
|
||||
setCategory(Constants::CPASTER_SETTINGS_CATEGORY);
|
||||
setDisplayCategory(QCoreApplication::translate("CodePaster", "Code Pasting"));
|
||||
setCategoryIconPath(":/cpaster/images/settingscategory_cpaster.png");
|
||||
}
|
||||
|
||||
SettingsPage::~SettingsPage() = default;
|
||||
|
||||
QWidget *SettingsPage::widget()
|
||||
{
|
||||
if (!m_widget) {
|
||||
m_widget = new SettingsWidget(m_protocols);
|
||||
m_widget->setSettings(*m_settings);
|
||||
}
|
||||
return m_widget;
|
||||
}
|
||||
|
||||
void SettingsPage::apply()
|
||||
{
|
||||
if (!m_widget) // page was never shown
|
||||
return;
|
||||
const Settings newSettings = m_widget->settings();
|
||||
if (newSettings != *m_settings) {
|
||||
*m_settings = newSettings;
|
||||
m_settings->toSettings(Core::ICore::settings());
|
||||
}
|
||||
}
|
||||
|
||||
void SettingsPage::addProtocol(const QString &name)
|
||||
{
|
||||
m_protocols.append(name);
|
||||
setWidgetCreator([settings, protocolNames] {
|
||||
return new SettingsWidget(protocolNames, settings);
|
||||
});
|
||||
}
|
||||
|
||||
} // namespace CodePaster
|
||||
|
||||
@@ -30,46 +30,15 @@
|
||||
#include <coreplugin/dialogs/ioptionspage.h>
|
||||
|
||||
#include <QStringList>
|
||||
#include <QSharedPointer>
|
||||
#include <QPointer>
|
||||
|
||||
namespace CodePaster {
|
||||
|
||||
class Settings;
|
||||
|
||||
class SettingsWidget : public QWidget
|
||||
class SettingsPage final : public Core::IOptionsPage
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit SettingsWidget(const QStringList &protocols, QWidget *parent = nullptr);
|
||||
|
||||
void setSettings(const Settings &);
|
||||
Settings settings();
|
||||
|
||||
private:
|
||||
Internal::Ui::SettingsPage m_ui;
|
||||
};
|
||||
|
||||
class SettingsPage : public Core::IOptionsPage
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit SettingsPage(const QSharedPointer<Settings> &settings, QObject *parent);
|
||||
~SettingsPage() override;
|
||||
|
||||
QWidget *widget() override;
|
||||
void apply() override;
|
||||
void finish() override { }
|
||||
|
||||
void addProtocol(const QString& name);
|
||||
|
||||
private:
|
||||
const QSharedPointer<Settings> m_settings;
|
||||
|
||||
QPointer<SettingsWidget> m_widget;
|
||||
QStringList m_protocols;
|
||||
SettingsPage(Settings *settings, const QStringList &protocolNames, QObject *parent);
|
||||
};
|
||||
|
||||
} // namespace CodePaster
|
||||
|
||||
Reference in New Issue
Block a user