From 1e0cf00d99ccff874769964fd9ff4c4d7f4bd3fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9F=D0=B5=D0=BB=D0=B8=D0=BF=D0=B5=D0=BD=D0=BA=D0=BE=20?= =?UTF-8?q?=D0=98=D0=B2=D0=B0=D0=BD?= Date: Thu, 1 Dec 2016 12:31:44 +0000 Subject: [PATCH] git-svn-id: svn://db.shs.com.ru/libs@146 a8b55f48-bf90-11e4-a774-851b48703e85 --- piqt_utils/piqt_connection_edit.cpp | 36 +++++++++++++++++++++++++++++ piqt_utils/piqt_connection_edit.h | 2 ++ piqt_utils/piqt_connection_edit.ui | 24 +++++++++++++++++-- piqt_utils/piqt_connection_view.h | 2 ++ 4 files changed, 62 insertions(+), 2 deletions(-) diff --git a/piqt_utils/piqt_connection_edit.cpp b/piqt_utils/piqt_connection_edit.cpp index 3a40cc3..6b1940c 100644 --- a/piqt_utils/piqt_connection_edit.cpp +++ b/piqt_utils/piqt_connection_edit.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include @@ -24,6 +25,15 @@ ConnectionEdit::ConnectionEdit(QWidget * parent): QDialog(parent) { ui->comboMode->addItem(PI2QString(e.name + " (" + PIString::fromNumber(e.value) + ")"), QVariant::fromValue(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(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(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()); diff --git a/piqt_utils/piqt_connection_edit.h b/piqt_utils/piqt_connection_edit.h index 6b6b903..7ae9a42 100644 --- a/piqt_utils/piqt_connection_edit.h +++ b/piqt_utils/piqt_connection_edit.h @@ -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; diff --git a/piqt_utils/piqt_connection_edit.ui b/piqt_utils/piqt_connection_edit.ui index 7b7102e..3795a4e 100644 --- a/piqt_utils/piqt_connection_edit.ui +++ b/piqt_utils/piqt_connection_edit.ui @@ -63,6 +63,9 @@ QFormLayout::AllNonFixedFieldsGrow + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + @@ -99,7 +102,7 @@ - + Disconnect @@ -110,7 +113,7 @@ timeout: - + ms @@ -173,6 +176,23 @@ timeout: + + + + Options: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 2 + + + diff --git a/piqt_utils/piqt_connection_view.h b/piqt_utils/piqt_connection_view.h index 98bf5d4..6cf72af 100644 --- a/piqt_utils/piqt_connection_view.h +++ b/piqt_utils/piqt_connection_view.h @@ -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();