git-svn-id: svn://db.shs.com.ru/libs@146 a8b55f48-bf90-11e4-a774-851b48703e85

This commit is contained in:
2016-12-01 12:31:44 +00:00
parent 20076e54c6
commit 1e0cf00d99
4 changed files with 62 additions and 2 deletions

View File

@@ -7,6 +7,7 @@
#include <QSqlQuery>
#include <QSqlError>
#include <QSqlRecord>
#include <QCheckBox>
#include <QMessageBox>
@@ -24,6 +25,15 @@ ConnectionEdit::ConnectionEdit(QWidget * parent): QDialog(parent) {
ui->comboMode->addItem(PI2QString(e.name + " (" + PIString::fromNumber(e.value) + ")"), QVariant::fromValue<int>(e.value));
}
ui->comboMode->setCurrentIndex(ui->comboMode->count() - 1);
ei = PICodeInfo::enumsInfo->value("PIIODevice::DeviceOption");
if (ei) {
piForeachC (PICodeInfo::EnumeratorInfo & e, ei->members) {
QCheckBox * cb = new QCheckBox();
cb->setText(PI2QString(e.name + " (" + PIString::fromNumber(e.value) + ")"));
cb->setProperty("__value", e.value);
ui->layoutOptions->addWidget(cb);
}
}
ei = PICodeInfo::enumsInfo->value("PIPacketExtractor::SplitMode");
if (ei) {
piForeachC (PICodeInfo::EnumeratorInfo & e, ei->members)
@@ -171,6 +181,7 @@ void ConnectionEdit::selectionChanged() {
ui->lineDevice->setText(di->name());
ui->linePath->setEditText(di->path());
ui->spinDeviceDT->setValue(di->disconnectTimeout());
setOptions(di->options());
}
if (type == __CV_Filter) {
ui->tabWidget->setCurrentIndex(1);
@@ -219,6 +230,7 @@ void ConnectionEdit::applyDevice(DeviceItem * b) {
}
b->setName(n);
b->setMode(PIIODevice::DeviceMode(ui->comboMode->itemData(ui->comboMode->currentIndex()).toInt()));
b->setOptions(PIIODevice::DeviceOptions(getOptions()));
b->setPath(ui->linePath->currentText());
b->setDisconnectTimeout(ui->spinDeviceDT->value());
recreateConnection();
@@ -233,6 +245,29 @@ void ConnectionEdit::applySender(SenderItem * b) {
}
int ConnectionEdit::getOptions() const {
int ret(0);
for (int i = 0; i < ui->layoutOptions->count(); ++i) {
QCheckBox * cb = qobject_cast<QCheckBox*>(ui->layoutOptions->itemAt(i)->widget());
if (!cb) continue;
if (cb->isChecked())
ret |= cb->property("__value").toInt();
}
return ret;
}
void ConnectionEdit::setOptions(int o) {
for (int i = 0; i < ui->layoutOptions->count(); ++i) {
QCheckBox * cb = qobject_cast<QCheckBox*>(ui->layoutOptions->itemAt(i)->widget());
if (!cb) continue;
int cbf = cb->property("__value").toInt();
//qDebug() << cbf;
cb->setChecked((o & cbf) == cbf);
}
}
void ConnectionEdit::recreateConnection() {
//qDebug() << "recreate";
if (loading) return;
@@ -247,6 +282,7 @@ void ConnectionEdit::recreateConnection() {
//qDebug() << di->path();
PIIODevice * dev = conn->addDevice(Q2PIString(di->path()), di->mode());
if (!dev) continue;
dev->setOptions(di->options());
conn->setDeviceName(dev, Q2PIString(di->name()));
PIDiagnostics * diag = conn->diagnostic(dev);
if (diag) diag->setDisconnectTimeout(di->disconnectTimeout());

View File

@@ -32,6 +32,8 @@ private:
void applyFilter(FilterItem * b);
void applyDevice(DeviceItem * b);
void applySender(SenderItem * b);
int getOptions() const;
void setOptions(int o);
Ui::ConnectionEdit * ui;
PIConnection * conn;

View File

@@ -63,6 +63,9 @@
<property name="fieldGrowthPolicy">
<enum>QFormLayout::AllNonFixedFieldsGrow</enum>
</property>
<property name="labelAlignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<item row="0" column="0">
<widget class="QLabel" name="labelFilter_4">
<property name="text">
@@ -99,7 +102,7 @@
<item row="2" column="1">
<widget class="QComboBox" name="comboMode"/>
</item>
<item row="3" column="0">
<item row="4" column="0">
<widget class="QLabel" name="labelFilter_13">
<property name="text">
<string>Disconnect
@@ -110,7 +113,7 @@ timeout:</string>
</property>
</widget>
</item>
<item row="3" column="1">
<item row="4" column="1">
<widget class="QDoubleSpinBox" name="spinDeviceDT">
<property name="suffix">
<string> ms</string>
@@ -173,6 +176,23 @@ timeout:</string>
</item>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="labelFilter_14">
<property name="text">
<string>Options:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="3" column="1">
<layout class="QVBoxLayout" name="layoutOptions">
<property name="spacing">
<number>2</number>
</property>
</layout>
</item>
</layout>
</item>
<item>

View File

@@ -16,11 +16,13 @@ public:
void setName(const QString & n) {addProperty(BlockItem::Property("name", "", n)); rename();}
void setPath(const QString & p) {addProperty(BlockItem::Property("device", "", p)); rename();}
void setMode(PIIODevice::DeviceMode m) {addProperty(BlockItem::Property("mode", "", int(m))); rename();}
void setOptions(PIIODevice::DeviceOptions o) {addProperty(BlockItem::Property("options", "", int(o))); rename();}
void setDisconnectTimeout(double v) {addProperty(BlockItem::Property("disconnectTimeout", "", v)); rename();}
QString name() const {return propertyByName("name").value.toString();}
QString path() const {return propertyByName("device").value.toString();}
PIIODevice::DeviceMode mode() const {return PIIODevice::DeviceMode(propertyByName("mode").value.toInt());}
PIIODevice::DeviceOptions options() const {return PIIODevice::DeviceOptions(propertyByName("options").value.toInt());}
double disconnectTimeout() const {return PIIODevice::DeviceMode(propertyByName("disconnectTimeout").value.toDouble());}
void rename();