aboutsummaryrefslogtreecommitdiffstats
path: root/SQLiteStudio3/guiSQLiteStudio/dialogs/bindparamsdialog.cpp
diff options
context:
space:
mode:
authorLibravatarUnit 193 <unit193@ubuntu.com>2018-07-27 23:54:15 -0400
committerLibravatarUnit 193 <unit193@ubuntu.com>2018-07-27 23:54:15 -0400
commit6d3d39356473078c6b47e03b8a7616e4b34de928 (patch)
treefe5be2e6a08e4cfc73207746aba4c9fccfecfa10 /SQLiteStudio3/guiSQLiteStudio/dialogs/bindparamsdialog.cpp
parentf98e49169a40876bcf1df832de6e908d1b350193 (diff)
parentfeda8a7db8d1d7c5439aa8f8feef7cc0dd2b59a0 (diff)
Update upstream source from tag 'upstream/3.2.1+dfsg1'
Update to upstream version '3.2.1+dfsg1' with Debian dir 5ea0333565de4dc898c062cc0ff4ba1153e2c1e4
Diffstat (limited to 'SQLiteStudio3/guiSQLiteStudio/dialogs/bindparamsdialog.cpp')
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/bindparamsdialog.cpp133
1 files changed, 133 insertions, 0 deletions
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/bindparamsdialog.cpp b/SQLiteStudio3/guiSQLiteStudio/dialogs/bindparamsdialog.cpp
new file mode 100644
index 0000000..1d7ba66
--- /dev/null
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/bindparamsdialog.cpp
@@ -0,0 +1,133 @@
+#include "bindparamsdialog.h"
+#include "ui_bindparamsdialog.h"
+#include "common/bindparam.h"
+#include "multieditor/multieditor.h"
+#include "widgetresizer.h"
+#include "services/pluginmanager.h"
+#include "multieditor/multieditorwidgetplugin.h"
+#include "multieditor/multieditorwidget.h"
+#include <QDebug>
+
+BindParamsDialog::BindParamsDialog(QWidget *parent) :
+ QDialog(parent),
+ ui(new Ui::BindParamsDialog)
+{
+ init();
+}
+
+BindParamsDialog::~BindParamsDialog()
+{
+ delete ui;
+}
+
+void BindParamsDialog::setBindParams(const QVector<BindParam*>& params)
+{
+ bindParams = params;
+ initEditors();
+}
+
+void BindParamsDialog::init()
+{
+ ui->setupUi(this);
+
+ contents = new QWidget();
+ QVBoxLayout *contentsLayout = new QVBoxLayout();
+ contentsLayout->setSpacing(spacing);
+ contentsLayout->setMargin(margins);
+ contentsLayout->setAlignment(Qt::AlignTop);
+ contents->setLayout(contentsLayout);
+
+ ui->scrollArea->setWidget(contents);
+ ui->scrollArea->setAlignment(Qt::AlignTop);
+}
+
+void BindParamsDialog::initEditors()
+{
+ QStringList paramNames;
+ for (BindParam* param : bindParams)
+ paramNames << param->originalName;
+
+ MultiEditor* firstEditor = nullptr;
+ MultiEditor* multiEditor = nullptr;
+ QVector<QPair<QString, QVariant>> paramHistory = CFG->getBindParamHistory(paramNames);
+ for (BindParam* param : bindParams)
+ {
+ multiEditor = initEditor(param, paramHistory.size() > param->position ? paramHistory[param->position].second : QVariant());
+ if (firstEditor == nullptr)
+ firstEditor = multiEditor;
+ }
+
+ firstEditor->focusThisEditor();
+}
+
+MultiEditor* BindParamsDialog::initEditor(BindParam* param, const QVariant& cachedValue)
+{
+ // Label
+ static_qstring(nameTpl, "[%1] %2");
+ QString label = nameTpl.arg(param->position + 1).arg(param->originalName);
+
+ // MultiEditor
+ MultiEditor* multiEditor = new MultiEditor(this, MultiEditor::DYNAMIC);
+ multiEditor->setReadOnly(false);
+ multiEditor->setCornerLabel(label);
+ contents->layout()->addWidget(multiEditor);
+ contents->layout()->setAlignment(multiEditor, Qt::AlignTop);
+ editors[param] = multiEditor;
+
+ // MultiEditor editors
+ MultiEditorWidgetPlugin* plugin = dynamic_cast<MultiEditorWidgetPlugin*>(PLUGINS->getLoadedPlugin("MultiEditorNumericPlugin"));
+ MultiEditorWidget* editor = plugin->getInstance();
+ editor->setTabLabel(plugin->getTabLabel());
+ multiEditor->addEditor(editor);
+
+ plugin = dynamic_cast<MultiEditorWidgetPlugin*>(PLUGINS->getLoadedPlugin("MultiEditorTextPlugin"));
+ editor = plugin->getInstance();
+ editor->setTabLabel(plugin->getTabLabel());
+ multiEditor->addEditor(editor);
+
+ // Resizer
+ WidgetResizer* resizer = new WidgetResizer(Qt::Vertical);
+ resizer->setWidget(multiEditor);
+ resizer->setWidgetMinimumSize(0, minimumFieldHeight);
+ contents->layout()->addWidget(resizer);
+ resizer->minimizeHeight();
+
+ if (cachedValue.isValid())
+ {
+ switch (cachedValue.type())
+ {
+ case QVariant::LongLong:
+ case QVariant::ULongLong:
+ case QVariant::Int:
+ case QVariant::UInt:
+ case QVariant::Double:
+ multiEditor->showTab(0);
+ break;
+ default:
+ multiEditor->showTab(1);
+ break;
+ }
+
+ multiEditor->setValue(cachedValue);
+ }
+
+ return multiEditor;
+}
+
+void BindParamsDialog::accept()
+{
+ QVector<QPair<QString, QVariant>> paramHistory;
+ paramHistory.reserve(bindParams.size());
+ bool rememberValue = false;
+ QVariant emptyValue;
+ for (BindParam* param : bindParams)
+ {
+ param->value = editors[param]->getValue();
+ rememberValue = (param->value.type() != QVariant::ByteArray || param->value.toByteArray().size() <= 102400);
+ paramHistory << QPair<QString, QVariant>(param->originalName, rememberValue ? param->value : emptyValue);
+ }
+
+ CFG->addBindParamHistory(paramHistory);
+
+ QDialog::accept();
+}