git-svn-id: svn://db.shs.com.ru/libs@475 a8b55f48-bf90-11e4-a774-851b48703e85
This commit is contained in:
@@ -46,6 +46,7 @@ const QVariant PI2QVariant(const PIVariant & v) {
|
|||||||
case PIVariant::pivColor: return QVariant::fromValue(PI2QColor(v.toColor()));
|
case PIVariant::pivColor: return QVariant::fromValue(PI2QColor(v.toColor()));
|
||||||
case PIVariant::pivPoint: return QVariant(PI2QPoint(v.toPoint()));
|
case PIVariant::pivPoint: return QVariant(PI2QPoint(v.toPoint()));
|
||||||
case PIVariant::pivRect: return QVariant(PI2QRect(v.toRect()));
|
case PIVariant::pivRect: return QVariant(PI2QRect(v.toRect()));
|
||||||
|
case PIVariant::pivIODevice: return QVariant::fromValue(PI2QADIODevice(v.toIODevice()));
|
||||||
//case PIVariant::pivSystemTime: return QVariant(v.to());
|
//case PIVariant::pivSystemTime: return QVariant(v.to());
|
||||||
default: return QVariant();
|
default: return QVariant();
|
||||||
}
|
}
|
||||||
@@ -77,5 +78,6 @@ const PIVariant Q2PIVariant(const QVariant & v) {
|
|||||||
if (v.canConvert<QAD::Enum>()) return PIVariant(QAD2PIEnum(v.value<QAD::Enum>()));
|
if (v.canConvert<QAD::Enum>()) return PIVariant(QAD2PIEnum(v.value<QAD::Enum>()));
|
||||||
if (v.canConvert<QAD::File>()) return PIVariant(QAD2PIFile(v.value<QAD::File>()));
|
if (v.canConvert<QAD::File>()) return PIVariant(QAD2PIFile(v.value<QAD::File>()));
|
||||||
if (v.canConvert<QAD::Dir>()) return PIVariant(QAD2PIDir(v.value<QAD::Dir>()));
|
if (v.canConvert<QAD::Dir>()) return PIVariant(QAD2PIDir(v.value<QAD::Dir>()));
|
||||||
|
if (v.canConvert<QAD::IODevice>()) return PIVariant(QAD2PIIODevice(v.value<QAD::IODevice>()));
|
||||||
return PIVariant();
|
return PIVariant();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -72,6 +72,9 @@ inline PropertyStorage PI2QPropertyStorage(const PIPropertyStorage & props) {
|
|||||||
const QAD::Enum PI2QADEnum(const PIVariantTypes::Enum & el);
|
const QAD::Enum PI2QADEnum(const PIVariantTypes::Enum & el);
|
||||||
inline const QAD::File PI2QADFile(const PIVariantTypes::File & v) {return QAD::File(PI2QString(v.file), PI2QString(v.filter), v.is_abs);}
|
inline const QAD::File PI2QADFile(const PIVariantTypes::File & v) {return QAD::File(PI2QString(v.file), PI2QString(v.filter), v.is_abs);}
|
||||||
inline const QAD::Dir PI2QADDir(const PIVariantTypes::Dir & v) {return QAD::Dir(PI2QString(v.dir), v.is_abs);}
|
inline const QAD::Dir PI2QADDir(const PIVariantTypes::Dir & v) {return QAD::Dir(PI2QString(v.dir), v.is_abs);}
|
||||||
|
inline const QAD::IODevice PI2QADIODevice(const PIVariantTypes::IODevice & v) {
|
||||||
|
return QAD::IODevice(PI2QString(v.prefix), PI2QPropertyStorage(v.get()), v.mode, v.options);
|
||||||
|
}
|
||||||
const PIVariantTypes::Enum QAD2PIEnum(const QAD::Enum & el);
|
const PIVariantTypes::Enum QAD2PIEnum(const QAD::Enum & el);
|
||||||
inline const PIVariantTypes::File QAD2PIFile(const QAD::File & v) {return PIVariantTypes::File(Q2PIString(v.file), Q2PIString(v.filter), v.is_abs);}
|
inline const PIVariantTypes::File QAD2PIFile(const QAD::File & v) {return PIVariantTypes::File(Q2PIString(v.file), Q2PIString(v.filter), v.is_abs);}
|
||||||
inline const PIVariantTypes::Dir QAD2PIDir(const QAD::Dir & v) {return PIVariantTypes::Dir(Q2PIString(v.dir), v.is_abs);}
|
inline const PIVariantTypes::Dir QAD2PIDir(const QAD::Dir & v) {return PIVariantTypes::Dir(Q2PIString(v.dir), v.is_abs);}
|
||||||
@@ -80,12 +83,9 @@ inline const PIVariantTypes::IODevice QAD2PIIODevice(const QAD::IODevice & v) {
|
|||||||
d.set(Q2PIPropertyStorage(v.props));
|
d.set(Q2PIPropertyStorage(v.props));
|
||||||
d.prefix = Q2PIString(v.prefix);
|
d.prefix = Q2PIString(v.prefix);
|
||||||
d.mode = v.mode;
|
d.mode = v.mode;
|
||||||
d.options = v.opts;
|
d.options = v.options;
|
||||||
return d;
|
return d;
|
||||||
}
|
}
|
||||||
inline const QAD::IODevice QAD2PIIODevice(const PIVariantTypes::IODevice & v) {
|
|
||||||
return QAD::IODevice(PI2QString(v.prefix), PI2QPropertyStorage(v.get()), v.mode, v.options);
|
|
||||||
}
|
|
||||||
|
|
||||||
//inline const PIVariant QString2PIVariant(const QString & v) {return PIVariant::readFromString(QString2PIString(v));}
|
//inline const PIVariant QString2PIVariant(const QString & v) {return PIVariant::readFromString(QString2PIString(v));}
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ pip_code_model(CCM "../pip/src_main/io_devices/piiodevice.h" "../pip/src_main/io
|
|||||||
find_qt(${QtVersions} Core Gui)
|
find_qt(${QtVersions} Core Gui)
|
||||||
qt_wrap(${SRC} HDRS out_HDR CPPS out_CPP QMS out_QM)
|
qt_wrap(${SRC} HDRS out_HDR CPPS out_CPP QMS out_QM)
|
||||||
qt_add_library(${PROJECT_NAME} ${LIBTYPE} out_CPP CCM)
|
qt_add_library(${PROJECT_NAME} ${LIBTYPE} out_CPP CCM)
|
||||||
qt_target_link_libraries(${PROJECT_NAME} pip qad_utils qad_widgets qad_blockview)
|
qt_target_link_libraries(${PROJECT_NAME} pip qad_utils qad_widgets qad_blockview piqt)
|
||||||
message(STATUS "Building ${PROJECT_NAME}")
|
message(STATUS "Building ${PROJECT_NAME}")
|
||||||
|
|
||||||
if (LIBPROJECT)
|
if (LIBPROJECT)
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
namespace Ui {
|
namespace Ui {
|
||||||
class ConnectionEdit;
|
class ConnectionEdit;
|
||||||
};
|
}
|
||||||
|
|
||||||
class FilterItem;
|
class FilterItem;
|
||||||
class DeviceItem;
|
class DeviceItem;
|
||||||
|
|||||||
75
piqt_utils/piqt_iodevice_edit.cpp
Normal file
75
piqt_utils/piqt_iodevice_edit.cpp
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
#include "piqt_iodevice_edit.h"
|
||||||
|
#include "piqt_iodevice_edit_dialog.h"
|
||||||
|
#include "qvariantedit_custom.h"
|
||||||
|
#include <QLineEdit>
|
||||||
|
#include <QToolButton>
|
||||||
|
#include <QBoxLayout>
|
||||||
|
|
||||||
|
|
||||||
|
IODeviceEdit::IODeviceEdit(QWidget * parent): QWidget(parent) {
|
||||||
|
dlg = new IODeviceEditDialog();
|
||||||
|
line = new QLineEdit();
|
||||||
|
btn = new QToolButton();
|
||||||
|
setLayout(new QBoxLayout(QBoxLayout::LeftToRight));
|
||||||
|
layout()->setContentsMargins(0, 0, 0, 0);
|
||||||
|
layout()->addWidget(line);
|
||||||
|
layout()->addWidget(btn);
|
||||||
|
connect(btn, SIGNAL(clicked(bool)), this, SLOT(buttonDlg_clicked()));
|
||||||
|
line->setReadOnly(true);
|
||||||
|
btn->setText(QString());
|
||||||
|
btn->setIcon(QIcon(":/icons/configure.png"));
|
||||||
|
btn->setToolTip(tr("Edit ..."));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
IODeviceEdit::~IODeviceEdit() {
|
||||||
|
delete dlg;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QVariant IODeviceEdit::value() const {
|
||||||
|
return QVariant::fromValue(dev);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool IODeviceEdit::isReadOnly() const {
|
||||||
|
return btn->isHidden();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void IODeviceEdit::setDevice(const QAD::IODevice & d) {
|
||||||
|
if (dev.toString() == d.toString()) return;
|
||||||
|
dev = d;
|
||||||
|
line->setText(dev.toString());
|
||||||
|
emit valueChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void IODeviceEdit::setValue(const QVariant & v) {
|
||||||
|
setDevice(v.value<QAD::IODevice>());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void IODeviceEdit::setReadOnly(bool yes) {
|
||||||
|
btn->setHidden(yes);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void IODeviceEdit::buttonDlg_clicked() {
|
||||||
|
QAD::IODevice d = dlg->exec(dev);
|
||||||
|
if (!d.isValid()) return;
|
||||||
|
setDevice(d);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class Factory: public QVariantEditorFactoryBase {
|
||||||
|
public:
|
||||||
|
Factory() {}
|
||||||
|
virtual QWidget * createEditor() {return new IODeviceEdit();}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
__IODeviceEditRegistrator__::__IODeviceEditRegistrator__() {
|
||||||
|
QVariantEditorFactories::registerEditorFactory(qMetaTypeId<QAD::IODevice>(), new Factory());
|
||||||
|
}
|
||||||
51
piqt_utils/piqt_iodevice_edit.h
Normal file
51
piqt_utils/piqt_iodevice_edit.h
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
#ifndef PIQT_IODEVICE_EDIT_H
|
||||||
|
#define PIQT_IODEVICE_EDIT_H
|
||||||
|
|
||||||
|
#include <QWidget>
|
||||||
|
#include "qad_types.h"
|
||||||
|
|
||||||
|
class QLineEdit;
|
||||||
|
class QToolButton;
|
||||||
|
class IODeviceEditDialog;
|
||||||
|
|
||||||
|
|
||||||
|
class IODeviceEdit: public QWidget {
|
||||||
|
Q_OBJECT
|
||||||
|
Q_PROPERTY(QVariant value READ value WRITE setValue NOTIFY valueChanged)
|
||||||
|
Q_PROPERTY(bool readOnly READ isReadOnly WRITE setReadOnly)
|
||||||
|
public:
|
||||||
|
explicit IODeviceEdit(QWidget * parent = 0);
|
||||||
|
~IODeviceEdit();
|
||||||
|
|
||||||
|
QVariant value() const;
|
||||||
|
bool isReadOnly() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
void setDevice(const QAD::IODevice & d);
|
||||||
|
|
||||||
|
QLineEdit * line;
|
||||||
|
QToolButton * btn;
|
||||||
|
IODeviceEditDialog * dlg;
|
||||||
|
QAD::IODevice dev;
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void setValue(const QVariant & v);
|
||||||
|
void setReadOnly(bool yes);
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void buttonDlg_clicked();
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void valueChanged();
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class __IODeviceEditRegistrator__ {
|
||||||
|
public:
|
||||||
|
__IODeviceEditRegistrator__();
|
||||||
|
};
|
||||||
|
|
||||||
|
static __IODeviceEditRegistrator__ __iodeviceeditregistrator__;
|
||||||
|
|
||||||
|
#endif // PIQT_IODEVICE_EDIT_H
|
||||||
103
piqt_utils/piqt_iodevice_edit_dialog.cpp
Normal file
103
piqt_utils/piqt_iodevice_edit_dialog.cpp
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
#include "ui_piqt_iodevice_edit_dialog.h"
|
||||||
|
#include "piqt_iodevice_edit_dialog.h"
|
||||||
|
#include "piqt.h"
|
||||||
|
#include "picodeinfo.h"
|
||||||
|
#include "piiodevice.h"
|
||||||
|
#include <QCheckBox>
|
||||||
|
|
||||||
|
|
||||||
|
IODeviceEditDialog::IODeviceEditDialog(QWidget * parent): QDialog(parent) {
|
||||||
|
ui = new Ui::IODeviceEditDialog();
|
||||||
|
ui->setupUi(this);
|
||||||
|
PICodeInfo::EnumInfo * ei = PICodeInfo::enumsInfo->value("PIIODevice::DeviceMode");
|
||||||
|
if (ei) {
|
||||||
|
piForeachC (PICodeInfo::EnumeratorInfo & e, ei->members)
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
PIStringList pl = PIIODevice::availablePrefixes();
|
||||||
|
piForeachC (PIString & p, pl) {
|
||||||
|
ui->comboType->addItem(PI2QString(p));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
IODeviceEditDialog::~IODeviceEditDialog() {
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int IODeviceEditDialog::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 IODeviceEditDialog::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();
|
||||||
|
cb->setChecked((o & cbf) == cbf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void IODeviceEditDialog::on_comboType_currentIndexChanged(int index) {
|
||||||
|
PIString prefix = Q2PIString(ui->comboType->currentText());
|
||||||
|
PIVector<const PIObject * > rd(PICollection::groupElements("__PIIODevices__"));
|
||||||
|
piForeachC (PIObject * d, rd) {
|
||||||
|
const PIIODevice * dev = ((const PIIODevice * )d);
|
||||||
|
if (prefix != dev->fullPathPrefix())
|
||||||
|
continue;
|
||||||
|
ps = PI2QPropertyStorage(dev->constructVariant().get());
|
||||||
|
ui->widgetProperties->setStorage(&ps);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QAD::IODevice IODeviceEditDialog::exec(const QAD::IODevice & d) {
|
||||||
|
setValue(d);
|
||||||
|
if (QDialog::exec() != QDialog::Accepted)
|
||||||
|
return QAD::IODevice();
|
||||||
|
return value();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QAD::IODevice IODeviceEditDialog::value() const {
|
||||||
|
QAD::IODevice d;
|
||||||
|
ui->widgetProperties->applyProperties();
|
||||||
|
d.prefix = ui->comboType->currentText();
|
||||||
|
d.mode = ui->comboMode->itemData(ui->comboMode->currentIndex()).toInt();
|
||||||
|
d.options = getOptions();
|
||||||
|
d.props = ps;
|
||||||
|
return d;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void IODeviceEditDialog::setValue(const QAD::IODevice & d) {
|
||||||
|
ui->comboType->setCurrentText(d.prefix);
|
||||||
|
for (int i = 0; i < ui->comboMode->count(); ++i)
|
||||||
|
if (ui->comboMode->itemData(i).toInt() == d.mode) {
|
||||||
|
ui->comboMode->setCurrentIndex(i);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
setOptions(d.options);
|
||||||
|
ps = d.props;
|
||||||
|
ui->widgetProperties->setStorage(&ps);
|
||||||
|
}
|
||||||
34
piqt_utils/piqt_iodevice_edit_dialog.h
Normal file
34
piqt_utils/piqt_iodevice_edit_dialog.h
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
#ifndef PIQT_IODEVICE_EDIT_DIALOG_H
|
||||||
|
#define PIQT_IODEVICE_EDIT_DIALOG_H
|
||||||
|
|
||||||
|
#include <QDialog>
|
||||||
|
#include "qad_types.h"
|
||||||
|
#include "propertystorage.h"
|
||||||
|
|
||||||
|
namespace Ui {
|
||||||
|
class IODeviceEditDialog;
|
||||||
|
}
|
||||||
|
|
||||||
|
class IODeviceEditDialog: public QDialog {
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
explicit IODeviceEditDialog(QWidget * parent = 0);
|
||||||
|
~IODeviceEditDialog();
|
||||||
|
|
||||||
|
QAD::IODevice exec(const QAD::IODevice & d);
|
||||||
|
|
||||||
|
private:
|
||||||
|
QAD::IODevice value() const;
|
||||||
|
void setValue(const QAD::IODevice & d);
|
||||||
|
int getOptions() const;
|
||||||
|
void setOptions(int o);
|
||||||
|
|
||||||
|
PropertyStorage ps;
|
||||||
|
Ui::IODeviceEditDialog * ui;
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void on_comboType_currentIndexChanged(int index);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // PIQT_IODEVICE_EDIT_DIALOG_H
|
||||||
138
piqt_utils/piqt_iodevice_edit_dialog.ui
Normal file
138
piqt_utils/piqt_iodevice_edit_dialog.ui
Normal file
@@ -0,0 +1,138 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>IODeviceEditDialog</class>
|
||||||
|
<widget class="QDialog" name="IODeviceEditDialog">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>387</width>
|
||||||
|
<height>345</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>IODevice</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<layout class="QFormLayout" name="formLayout_2">
|
||||||
|
<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="label">
|
||||||
|
<property name="text">
|
||||||
|
<string>Type:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QComboBox" name="comboType"/>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QLabel" name="labelFilter_12">
|
||||||
|
<property name="text">
|
||||||
|
<string>Mode:</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QComboBox" name="comboMode"/>
|
||||||
|
</item>
|
||||||
|
<item row="2" 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="2" column="1">
|
||||||
|
<layout class="QVBoxLayout" name="layoutOptions">
|
||||||
|
<property name="spacing">
|
||||||
|
<number>2</number>
|
||||||
|
</property>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="PropertyStorageEditor" name="widgetProperties" native="true"/>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="verticalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QDialogButtonBox" name="buttonBox">
|
||||||
|
<property name="standardButtons">
|
||||||
|
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<customwidgets>
|
||||||
|
<customwidget>
|
||||||
|
<class>PropertyStorageEditor</class>
|
||||||
|
<extends>QWidget</extends>
|
||||||
|
<header>propertystorage_editor.h</header>
|
||||||
|
<container>1</container>
|
||||||
|
</customwidget>
|
||||||
|
</customwidgets>
|
||||||
|
<resources/>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>accepted()</signal>
|
||||||
|
<receiver>IODeviceEditDialog</receiver>
|
||||||
|
<slot>accept()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>227</x>
|
||||||
|
<y>326</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>144</x>
|
||||||
|
<y>302</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>rejected()</signal>
|
||||||
|
<receiver>IODeviceEditDialog</receiver>
|
||||||
|
<slot>reject()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>325</x>
|
||||||
|
<y>315</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>304</x>
|
||||||
|
<y>306</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
<slots>
|
||||||
|
<slot>recreateConnection()</slot>
|
||||||
|
</slots>
|
||||||
|
</ui>
|
||||||
@@ -34,7 +34,7 @@ __QADTypesRegistrator__::__QADTypesRegistrator__() {
|
|||||||
QMetaType::registerConverter<QAD::Enum, QString>(&QAD::Enum::selectedName);
|
QMetaType::registerConverter<QAD::Enum, QString>(&QAD::Enum::selectedName);
|
||||||
QMetaType::registerConverter<QAD::File, QString>(&QAD::File::toString);
|
QMetaType::registerConverter<QAD::File, QString>(&QAD::File::toString);
|
||||||
QMetaType::registerConverter<QAD::Dir, QString>(&QAD::Dir::toString);
|
QMetaType::registerConverter<QAD::Dir, QString>(&QAD::Dir::toString);
|
||||||
/// TDOD : //QMetaType::registerConverter<QAD::Dir, QString>(&QAD::IODevice::constructFullPath);
|
QMetaType::registerConverter<QAD::IODevice, QString>(&QAD::IODevice::toString);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -122,6 +122,30 @@ QAD::Enum & QAD::Enum::operator <<(const QStringList & v) {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
QString QAD::IODevice::toString() const {
|
||||||
|
QString s;
|
||||||
|
s += "IODevice(" + prefix + ", ";
|
||||||
|
int rwc = 0;
|
||||||
|
if (mode & QIODevice::ReadOnly) {s += "r"; ++rwc;}
|
||||||
|
if (mode & QIODevice::WriteOnly) {s += "w"; ++rwc;}
|
||||||
|
if (rwc == 1) s += "o";
|
||||||
|
if (options != 0) {
|
||||||
|
if (options & 1)
|
||||||
|
s += " br";
|
||||||
|
if (options & 2)
|
||||||
|
s += " bw";
|
||||||
|
}
|
||||||
|
PropertyStorage ps = props;
|
||||||
|
foreach (const PropertyStorage::Property & p, ps) {
|
||||||
|
s += ", " + p.name + "=\"" + p.value.toString() + "\"";
|
||||||
|
}
|
||||||
|
s += ")";
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
QVariant::Type typeFromLetter(const QString & l) {
|
QVariant::Type typeFromLetter(const QString & l) {
|
||||||
if (l.isEmpty()) return QVariant::String;
|
if (l.isEmpty()) return QVariant::String;
|
||||||
QString ft = l.left(1);
|
QString ft = l.left(1);
|
||||||
|
|||||||
@@ -48,11 +48,14 @@ namespace QAD {
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct IODevice {
|
struct IODevice {
|
||||||
IODevice(const QString & devece_prefix = QString(), const PropertyStorage & device_properties = PropertyStorage(), int open_mode = QIODevice::ReadWrite, int device_options = 0)
|
IODevice(const QString & device_prefix = QString(), const PropertyStorage & device_properties = PropertyStorage(),
|
||||||
: prefix(devece_prefix), mode(open_mode), opts(device_options), props(device_properties) {}
|
int open_mode = QIODevice::ReadWrite, int device_options = 0)
|
||||||
|
: prefix(device_prefix), mode(open_mode), options(device_options), props(device_properties) {}
|
||||||
|
QString toString() const;
|
||||||
|
bool isValid() const {return !prefix.isEmpty();}
|
||||||
QString prefix;
|
QString prefix;
|
||||||
int mode;
|
int mode;
|
||||||
int opts;
|
int options;
|
||||||
PropertyStorage props;
|
PropertyStorage props;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -79,29 +82,10 @@ inline QDataStream & operator >>(QDataStream & s, QAD::Dir & v) {s >> v.dir >> v
|
|||||||
inline QDebug operator <<(QDebug s, const QAD::Dir & v) {s.nospace() << v.dir; return s.space();}
|
inline QDebug operator <<(QDebug s, const QAD::Dir & v) {s.nospace() << v.dir; return s.space();}
|
||||||
|
|
||||||
Q_DECLARE_METATYPE(QAD::IODevice)
|
Q_DECLARE_METATYPE(QAD::IODevice)
|
||||||
inline QDataStream & operator <<(QDataStream & s, const QAD::IODevice & v) {s << v.prefix << v.mode << v.opts << v.props; return s;}
|
inline QDataStream & operator <<(QDataStream & s, const QAD::IODevice & v) {s << v.prefix << v.mode << v.options << v.props; return s;}
|
||||||
inline QDataStream & operator >>(QDataStream & s, QAD::IODevice & v) {s >> v.prefix >> v.mode >> v.opts >> v.props; return s;}
|
inline QDataStream & operator >>(QDataStream & s, QAD::IODevice & v) {s >> v.prefix >> v.mode >> v.options >> v.props; return s;}
|
||||||
inline QDebug operator <<(QDebug d, const QAD::IODevice & v) {
|
inline QDebug operator <<(QDebug s, const QAD::IODevice & v) {s.nospace() << v.toString(); return s.space();}
|
||||||
QString s;
|
|
||||||
s += "IODevice(" + v.prefix + ", ";
|
|
||||||
int rwc = 0;
|
|
||||||
if (v.mode & QIODevice::ReadOnly) {s += "r"; ++rwc;}
|
|
||||||
if (v.mode & QIODevice::WriteOnly) {s += "w"; ++rwc;}
|
|
||||||
if (rwc == 1) s += "o";
|
|
||||||
if (v.opts != 0) {
|
|
||||||
if (v.opts & 1)
|
|
||||||
s += " br";
|
|
||||||
if (v.opts & 2)
|
|
||||||
s += " bw";
|
|
||||||
}
|
|
||||||
PropertyStorage ps = v.props;
|
|
||||||
foreach (const PropertyStorage::Property & p, ps) {
|
|
||||||
s += ", " + p.name + "=\"" + p.value.toString() + "\"";
|
|
||||||
}
|
|
||||||
s += ")";
|
|
||||||
d.noquote() << s;
|
|
||||||
return d;
|
|
||||||
}
|
|
||||||
|
|
||||||
class __QADTypesRegistrator__ {
|
class __QADTypesRegistrator__ {
|
||||||
public:
|
public:
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ private:
|
|||||||
|
|
||||||
signals:
|
signals:
|
||||||
void resetStorageRequest(PropertyStorage * );
|
void resetStorageRequest(PropertyStorage * );
|
||||||
|
void changed();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // PROPERTYSTORAGEEDITOR_H
|
#endif // PROPERTYSTORAGEEDITOR_H
|
||||||
|
|||||||
@@ -163,7 +163,7 @@ QVariantEdit::QVariantEdit(QWidget * parent): QWidget(parent) {
|
|||||||
_point = 0;
|
_point = 0;
|
||||||
_path = 0;
|
_path = 0;
|
||||||
_enum = 0;
|
_enum = 0;
|
||||||
_cur_edit = 0;
|
_custom =_cur_edit = 0;
|
||||||
_recreate(QVariant());
|
_recreate(QVariant());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -314,6 +314,18 @@ void QVariantEdit::_recreate(const QVariant & new_value) {
|
|||||||
_cur_edit = _path;
|
_cur_edit = _path;
|
||||||
connect(_path, SIGNAL(valueChanged()), this, SLOT(_changed()));
|
connect(_path, SIGNAL(valueChanged()), this, SLOT(_changed()));
|
||||||
}
|
}
|
||||||
|
if (!_cur_edit) { // try custom
|
||||||
|
QVariantEditorFactoryBase * f = QVariantEditorFactories::editorFactory(new_value.userType());
|
||||||
|
if (f) {
|
||||||
|
QWidget * fw = f->createEditor();
|
||||||
|
if (fw) {
|
||||||
|
fw->setParent(this);
|
||||||
|
_custom = fw;
|
||||||
|
_cur_edit = _custom;
|
||||||
|
connect(_custom, SIGNAL(valueChanged()), this, SLOT(_changed()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//qDebug() << _cur_edit;
|
//qDebug() << _cur_edit;
|
||||||
if (_cur_edit) {
|
if (_cur_edit) {
|
||||||
@@ -368,6 +380,9 @@ QVariant QVariantEdit::value() const {
|
|||||||
return QVariant::fromValue<QAD::Dir>(ret);
|
return QVariant::fromValue<QAD::Dir>(ret);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (_custom) {
|
||||||
|
return _custom->property("value");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return QVariant();
|
return QVariant();
|
||||||
}
|
}
|
||||||
@@ -390,6 +405,7 @@ void QVariantEdit::setValue(const QVariant & v) {
|
|||||||
else _setFile(v.value<QAD::File>());
|
else _setFile(v.value<QAD::File>());
|
||||||
}
|
}
|
||||||
if (_enum) {_setEnum(v.value<QAD::Enum>());}
|
if (_enum) {_setEnum(v.value<QAD::Enum>());}
|
||||||
|
if (_custom) {_setCustom(v);}
|
||||||
if (_cur_edit) _cur_edit->blockSignals(false);
|
if (_cur_edit) _cur_edit->blockSignals(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -398,6 +414,7 @@ void QVariantEdit::_delete() {
|
|||||||
if (_cur_edit)
|
if (_cur_edit)
|
||||||
delete _cur_edit;
|
delete _cur_edit;
|
||||||
_cur_edit = 0;
|
_cur_edit = 0;
|
||||||
|
_custom = 0;
|
||||||
_empty = 0;
|
_empty = 0;
|
||||||
_line = 0;
|
_line = 0;
|
||||||
_check = 0;
|
_check = 0;
|
||||||
@@ -460,6 +477,12 @@ void QVariantEdit::_setDir(const QAD::Dir & v) {
|
|||||||
_path->is_abs = v.is_abs;
|
_path->is_abs = v.is_abs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void QVariantEdit::_setCustom(const QVariant & v) {
|
||||||
|
_custom->setProperty("value", v);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void QVariantEdit::_changed() {
|
void QVariantEdit::_changed() {
|
||||||
if (_check) _check->setText(_check->isChecked() ? "true" : "false");
|
if (_check) _check->setText(_check->isChecked() ? "true" : "false");
|
||||||
emit valueChanged(value());
|
emit valueChanged(value());
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
#ifndef QVARIANTEDIT_H
|
#ifndef QVARIANTEDIT_H
|
||||||
#define QVARIANTEDIT_H
|
#define QVARIANTEDIT_H
|
||||||
|
|
||||||
|
#include "qvariantedit_custom.h"
|
||||||
#include "qad_types.h"
|
#include "qad_types.h"
|
||||||
#include "clineedit.h"
|
#include "clineedit.h"
|
||||||
#include "ecombobox.h"
|
#include "ecombobox.h"
|
||||||
@@ -102,6 +103,7 @@ protected:
|
|||||||
void _setEnum(const QAD::Enum & v);
|
void _setEnum(const QAD::Enum & v);
|
||||||
void _setFile(const QAD::File & v);
|
void _setFile(const QAD::File & v);
|
||||||
void _setDir(const QAD::Dir & v);
|
void _setDir(const QAD::Dir & v);
|
||||||
|
void _setCustom(const QVariant & v);
|
||||||
|
|
||||||
|
|
||||||
QLabel * _empty;
|
QLabel * _empty;
|
||||||
@@ -116,7 +118,7 @@ protected:
|
|||||||
QPointEdit * _point;
|
QPointEdit * _point;
|
||||||
PathEdit * _path;
|
PathEdit * _path;
|
||||||
EComboBox * _enum;
|
EComboBox * _enum;
|
||||||
QWidget * _cur_edit;
|
QWidget * _custom, * _cur_edit;
|
||||||
QVariant _value;
|
QVariant _value;
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
|||||||
Reference in New Issue
Block a user