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

This commit is contained in:
2017-01-23 07:36:07 +00:00
parent 9f9b624124
commit dfb021c228
7 changed files with 64 additions and 26 deletions

View File

@@ -153,6 +153,7 @@ void CDCore::initPult() {
void CDCore::init(const PIString & configuration) { void CDCore::init(const PIString & configuration) {
PIString c = configuration; PIString c = configuration;
//piCoutObj << "init" << c;
connection.stop(); connection.stop();
connection.removeAllDevices(); connection.removeAllDevices();
connection.configureFromString(&c); connection.configureFromString(&c);

View File

@@ -10,7 +10,7 @@ using namespace CDUtils;
Form::Form(QWidget *parent) : QWidget(parent), ui(new Ui::Form) { Form::Form(QWidget *parent) : QWidget(parent), ui(new Ui::Form) {
CDCore::instance()->initPult(); //CDCore::instance()->initPult();
ui->setupUi(this); ui->setupUi(this);
ui->treeView->setKFile(""); ui->treeView->setKFile("");
ui->treeView->refresh(); ui->treeView->refresh();

View File

@@ -11,6 +11,7 @@
#include <QLineEdit> #include <QLineEdit>
#include <spinslider.h> #include <spinslider.h>
#include <clineedit.h> #include <clineedit.h>
#include <qcd_kview.h>
using namespace CDUtils; using namespace CDUtils;
@@ -60,6 +61,7 @@ void QCDCore::slotBool(bool v) {
if (!w || updating) return; if (!w || updating) return;
PIDeque<int> path = binded_widgets.value(w); PIDeque<int> path = binded_widgets.value(w);
CDCore::instance()->k()[path].setValue(PIString::fromBool(v)); CDCore::instance()->k()[path].setValue(PIString::fromBool(v));
emit updateViewRequest();
} }
@@ -68,6 +70,7 @@ void QCDCore::slotInt(int v) {
if (!w || updating) return; if (!w || updating) return;
PIDeque<int> path = binded_widgets.value(w); PIDeque<int> path = binded_widgets.value(w);
CDCore::instance()->k()[path].setValue(PIString::fromNumber(v)); CDCore::instance()->k()[path].setValue(PIString::fromNumber(v));
emit updateViewRequest();
} }
@@ -76,6 +79,7 @@ void QCDCore::slotDouble(double v) {
if (!w || updating) return; if (!w || updating) return;
PIDeque<int> path = binded_widgets.value(w); PIDeque<int> path = binded_widgets.value(w);
CDCore::instance()->k()[path].setValue(PIString::fromNumber(v)); CDCore::instance()->k()[path].setValue(PIString::fromNumber(v));
emit updateViewRequest();
} }
@@ -84,6 +88,7 @@ void QCDCore::slotText(QString v) {
if (!w || updating) return; if (!w || updating) return;
PIDeque<int> path = binded_widgets.value(w); PIDeque<int> path = binded_widgets.value(w);
CDCore::instance()->k()[path].setValue(Q2PIString(v)); CDCore::instance()->k()[path].setValue(Q2PIString(v));
emit updateViewRequest();
} }
@@ -105,35 +110,49 @@ int QCDCore::bindWidgets(QList<QWidget * > wl) {
bool QCDCore::bindWidget(QWidget * w) { bool QCDCore::bindWidget(QWidget * w) {
if (!w) return false; if (!w) return false;
QString on = w->objectName(); QString on = w->objectName();
QString cn = w->metaObject()->className();
if (cn == "CDKView") {
bindView(w);
return false;
}
PIVector<CDType * > ak = CDCore::instance()->k().children(); PIVector<CDType * > ak = CDCore::instance()->k().children();
piForeachC (CDType * k, ak) { piForeachC (CDType * k, ak) {
if (!on.endsWith(PI2QString(k->name()))) continue; if (!on.endsWith(PI2QString(k->name()))) continue;
QString cn = w->metaObject()->className(); if (bindWidget(w, *k)) return true;
bool ok = false;
if (cn == "QCheckBox" || cn == "QGroupBox") {
connect(w, SIGNAL(toggled(bool)), this, SLOT(slotBool(bool)), Qt::UniqueConnection);
ok = true;
}
if (cn == "QSpinBox" || cn == "QSlider" || cn == "QScrollBar") {
connect(w, SIGNAL(valueChanged(int)), this, SLOT(slotInt(int)), Qt::UniqueConnection);
ok = true;
}
if (cn == "QDoubleSpinBox" || cn == "SpinSlider") {
connect(w, SIGNAL(valueChanged(double)), this, SLOT(slotDouble(double)), Qt::UniqueConnection);
ok = true;
}
if (cn == "QLineEdit" || cn == "CLineEdit") {
connect(w, SIGNAL(textChanged(QString)), this, SLOT(slotText(QString)), Qt::UniqueConnection);
ok = true;
}
if (!ok) continue;
binded_widgets[w] = k->path();
return true;
} }
return false; return false;
} }
bool QCDCore::bindWidget(QWidget * w, const CDType & k) {
if (!w) return false;
QString cn = w->metaObject()->className();
bool ok = false;
if (cn == "QCheckBox" || cn == "QGroupBox") {
connect(w, SIGNAL(toggled(bool)), this, SLOT(slotBool(bool)), Qt::UniqueConnection);
ok = true;
}
if (cn == "QSpinBox" || cn == "QSlider" || cn == "QScrollBar") {
connect(w, SIGNAL(valueChanged(int)), this, SLOT(slotInt(int)), Qt::UniqueConnection);
ok = true;
}
if (cn == "QDoubleSpinBox" || cn == "SpinSlider") {
connect(w, SIGNAL(valueChanged(double)), this, SLOT(slotDouble(double)), Qt::UniqueConnection);
ok = true;
}
if (cn == "QLineEdit" || cn == "CLineEdit") {
connect(w, SIGNAL(textChanged(QString)), this, SLOT(slotText(QString)), Qt::UniqueConnection);
ok = true;
}
if (cn == "CDKView") {
bindView(w);
}
if (!ok) return false;
binded_widgets[w] = k.path();
return true;
}
void QCDCore::updateBindedWidgets() { void QCDCore::updateBindedWidgets() {
QMapIterator<QWidget * , PIDeque<int> > it(binded_widgets); QMapIterator<QWidget * , PIDeque<int> > it(binded_widgets);
updating = true; updating = true;
@@ -155,6 +174,13 @@ void QCDCore::updateBindedWidgets() {
} }
void QCDCore::bindView(QWidget * v) {
CDKView * w = qobject_cast<CDKView * >(v);
if (!w) return;
connect(this, SIGNAL(updateViewRequest()), w->model(), SLOT(updateModel()), Qt::UniqueConnection);
}
int QCDCore::unbindWindow(QWidget * wnd) { int QCDCore::unbindWindow(QWidget * wnd) {
if (!wnd) return 0; if (!wnd) return 0;
return unbindWidgets(wnd->findChildren<QWidget * >()); return unbindWidgets(wnd->findChildren<QWidget * >());

View File

@@ -4,6 +4,7 @@
#include <QObject> #include <QObject>
#include <QMap> #include <QMap>
#include "piobject.h" #include "piobject.h"
#include "cdutils_types.h"
class QCDCore; class QCDCore;
@@ -29,7 +30,8 @@ public:
int bindWindow(QWidget * wnd); int bindWindow(QWidget * wnd);
int bindWidgets(QList<QWidget * > wl); int bindWidgets(QList<QWidget * > wl);
bool bindWidget(QWidget * w); bool bindWidget(QWidget * w);
void updateBindedWidgets(); bool bindWidget(QWidget * w, const CDUtils::CDType & k);
int unbindWindow(QWidget * wnd); int unbindWindow(QWidget * wnd);
int unbindWidgets(QList<QWidget * > wl); int unbindWidgets(QList<QWidget * > wl);
bool unbindWidget(QWidget * w); bool unbindWidget(QWidget * w);
@@ -39,6 +41,7 @@ private:
QCDCore(); QCDCore();
~QCDCore(); ~QCDCore();
void bindView(QWidget * v);
EVENT_HANDLER(void, K_ChangedGlobal); EVENT_HANDLER(void, K_ChangedGlobal);
QMap<QWidget * , PIDeque<int> > binded_widgets; QMap<QWidget * , PIDeque<int> > binded_widgets;
@@ -51,10 +54,11 @@ private slots:
void slotText(QString v); void slotText(QString v);
public slots: public slots:
void updateBindedWidgets();
signals: signals:
void updateViewRequest();
}; };

View File

@@ -127,6 +127,12 @@ void CDKItemModel::buildItem(CDKItem *it, CDSection & r) {
} }
void CDKItemModel::updateModel() {
beginResetModel();
endResetModel();
}
void CDKItemModel::internalRebuild() { void CDKItemModel::internalRebuild() {
//qDebug() << "[CDKItemModel]" << "internalRebuild()"; //qDebug() << "[CDKItemModel]" << "internalRebuild()";
if (root) delete root; if (root) delete root;

View File

@@ -62,10 +62,11 @@ public:
Qt::ItemFlags flags(const QModelIndex &index) const; Qt::ItemFlags flags(const QModelIndex &index) const;
bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
void rebuildModel();
void buildItem(CDKItem * it, CDUtils::CDSection &r); void buildItem(CDKItem * it, CDUtils::CDSection &r);
public slots: public slots:
void rebuildModel();
void updateModel();
private: private:
void internalRebuild(); void internalRebuild();

View File

@@ -29,7 +29,7 @@ CDKView::~CDKView() {
void CDKView::refresh() { void CDKView::refresh() {
if (!kmodel) { if (!kmodel) {
K.reinitConnection(K.pultConfig()); //K.reinitConnection(K.pultConfig());
kmodel = new CDKItemModel(); kmodel = new CDKItemModel();
setModel(kmodel); setModel(kmodel);
setItemDelegateForColumn(4, new CDKDelegate()); setItemDelegateForColumn(4, new CDKDelegate());