aboutsummaryrefslogtreecommitdiffstats
path: root/SQLiteStudio3/guiSQLiteStudio/dialogs/populateconfigdialog.cpp
diff options
context:
space:
mode:
authorLibravatarUnit 193 <unit193@ubuntu.com>2014-12-06 17:33:25 -0500
committerLibravatarUnit 193 <unit193@ubuntu.com>2014-12-06 17:33:25 -0500
commit7167ce41b61d2ba2cdb526777a4233eb84a3b66a (patch)
treea35c14143716e1f2c98f808c81f89426045a946f /SQLiteStudio3/guiSQLiteStudio/dialogs/populateconfigdialog.cpp
Imported Upstream version 2.99.6upstream/2.99.6
Diffstat (limited to 'SQLiteStudio3/guiSQLiteStudio/dialogs/populateconfigdialog.cpp')
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/populateconfigdialog.cpp119
1 files changed, 119 insertions, 0 deletions
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/populateconfigdialog.cpp b/SQLiteStudio3/guiSQLiteStudio/dialogs/populateconfigdialog.cpp
new file mode 100644
index 0000000..5dc506f
--- /dev/null
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/populateconfigdialog.cpp
@@ -0,0 +1,119 @@
+#include "populateconfigdialog.h"
+#include "ui_populateconfigdialog.h"
+#include "plugins/populateplugin.h"
+#include "services/populatemanager.h"
+#include "sqlitestudio.h"
+#include "formmanager.h"
+#include "configmapper.h"
+#include "uiutils.h"
+#include <QPushButton>
+#include <QDebug>
+#include <QSpinBox>
+
+PopulateConfigDialog::PopulateConfigDialog(PopulateEngine* engine, const QString& column, const QString& pluginName, QWidget *parent) :
+ QDialog(parent),
+ ui(new Ui::PopulateConfigDialog),
+ engine(engine),
+ column(column),
+ pluginName(pluginName)
+{
+ init();
+}
+
+PopulateConfigDialog::~PopulateConfigDialog()
+{
+ safe_delete(configMapper);
+ delete ui;
+}
+
+int PopulateConfigDialog::exec()
+{
+ QString formName = engine->getPopulateConfigFormName();
+ if (formName.isNull())
+ {
+ qCritical() << "Null form name from populating engine.";
+ return QDialog::Rejected;
+ }
+
+ innerWidget = FORMS->createWidget(formName);
+ if (!innerWidget)
+ return QDialog::Rejected;
+
+ configMapper->bindToConfig(innerWidget);
+ ui->contents->layout()->addWidget(innerWidget);
+ adjustSize();
+ validateEngine();
+ return QDialog::exec();
+}
+
+void PopulateConfigDialog::init()
+{
+ ui->setupUi(this);
+ limitDialogWidth(this);
+
+ QString headerString = tr("Configuring <b>%1</b> for column <b>%2</b>").arg(pluginName, column);
+ ui->headerLabel->setText(headerString );
+
+ configMapper = new ConfigMapper(engine->getConfig());
+ connect(configMapper, SIGNAL(modified()), this, SLOT(validateEngine()));
+
+ connect(POPULATE_MANAGER, SIGNAL(validationResultFromPlugin(bool,CfgEntry*,QString)), this, SLOT(validationResultFromPlugin(bool,CfgEntry*,QString)));
+ connect(POPULATE_MANAGER, SIGNAL(stateUpdateRequestFromPlugin(CfgEntry*,bool,bool)), this, SLOT(stateUpdateRequestFromPlugin(CfgEntry*,bool,bool)));
+ connect(POPULATE_MANAGER, SIGNAL(widgetPropertyFromPlugin(CfgEntry*,QString,QVariant)), this, SLOT(widgetPropertyFromPlugin(CfgEntry*,QString,QVariant)));
+}
+
+void PopulateConfigDialog::validateEngine()
+{
+ engine->validateOptions();
+}
+
+void PopulateConfigDialog::validationResultFromPlugin(bool valid, CfgEntry* key, const QString& msg)
+{
+ QWidget* w = configMapper->getBindWidgetForConfig(key);
+ if (w)
+ setValidState(w, valid, msg);
+
+ if (valid == pluginConfigOk.contains(key)) // if state changed
+ {
+ if (!valid)
+ pluginConfigOk[key] = false;
+ else
+ pluginConfigOk.remove(key);
+ }
+ updateState();
+}
+
+void PopulateConfigDialog::stateUpdateRequestFromPlugin(CfgEntry* key, bool visible, bool enabled)
+{
+ QWidget* w = configMapper->getBindWidgetForConfig(key);
+ if (!w)
+ return;
+
+ w->setVisible(visible);
+ w->setEnabled(enabled);
+}
+
+
+void PopulateConfigDialog::widgetPropertyFromPlugin(CfgEntry* key, const QString& propName, const QVariant& value)
+{
+ QWidget* w = configMapper->getBindWidgetForConfig(key);
+ if (!w)
+ return;
+
+ w->setProperty(propName.toLatin1().constData(), value);
+}
+
+void PopulateConfigDialog::updateState()
+{
+ ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(pluginConfigOk.size() == 0);
+}
+
+
+void PopulateConfigDialog::showEvent(QShowEvent* e)
+{
+ QVariant prop = innerWidget->property("initialSize");
+ if (prop.isValid())
+ resize(prop.toSize() + QSize(0, ui->headerLabel->height() + ui->line->height()));
+
+ QDialog::showEvent(e);
+}