1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
|
#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;
}
if (firstEditor)
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();
}
|