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

This commit is contained in:
2017-02-22 13:00:46 +00:00
parent 02e0bddd09
commit a74150ff71
14 changed files with 62 additions and 31 deletions

View File

@@ -141,8 +141,8 @@ bool CDType::calculate(PIEvaluator * e, PIVector<const CDType * > stack) {
} }
PIVector<CDType::Enumerator> CDType::parseEnumComment(PIString c) { PIVariantTypes::Enum CDType::parseEnumComment(PIString c) {
PIVector<CDType::Enumerator> ret; PIVariantTypes::Enum ret;
if (c.isEmpty()) return ret; if (c.isEmpty()) return ret;
if (type_ == "e") { if (type_ == "e") {
PIStringList sl = c.inBrackets('{', '}').split(","); PIStringList sl = c.inBrackets('{', '}').split(",");
@@ -157,11 +157,11 @@ PIVector<CDType::Enumerator> CDType::parseEnumComment(PIString c) {
s.cutLeft(ind + 1).trim(); s.cutLeft(ind + 1).trim();
} }
} }
ret << CDType::Enumerator(cval, s); ret << PIVariantTypes::Enumerator(cval, s);
++cval; ++cval;
} }
} }
piCout << c << "=" << ret; //piCout << c << "=" << ret;
return ret; return ret;
} }
@@ -317,11 +317,11 @@ void CDSection::write(PIIODevice * d, const PIString & prefix) {
d->write(l.toUTF8()); d->write(l.toUTF8());
l.clear(); l << ck.index() << ".v = " << ck.value() << " #" << ck.type() << " " << ck.name() << " \n"; l.clear(); l << ck.index() << ".v = " << ck.value() << " #" << ck.type() << " " << ck.name() << " \n";
d->write(l.toUTF8()); d->write(l.toUTF8());
if (!ck.enumValues().isEmpty()) { if (!ck.enumValues().enum_list.isEmpty()) {
l.clear(); l << ck.index() << ".ev = {"; l.clear(); l << ck.index() << ".ev = {";
//PIVector<CDType::Enumerator> el = ck.enumValues(); //PIVector<CDType::Enumerator> el = ck.enumValues();
piForeachC (CDType::Enumerator & e, ck.enumValues()) piForeachC (PIVariantTypes::Enumerator & e, ck.enumValues().enum_list)
l << e.first << " - " << e.second << ", "; l << e.value << " - " << e.name << ", ";
l.cutRight(2); l.cutRight(2);
l << "} \n"; l << "} \n";
d->write(l.toUTF8()); d->write(l.toUTF8());
@@ -497,11 +497,11 @@ PIVector<CDType * > CDSection::children(bool recursive) const {
} }
PIVector<CDType::Enumerator> CDSection::enumValues() const { PIVariantTypes::Enum CDSection::enumValues() const {
PIVector<CDType::Enumerator> ret; PIVariantTypes::Enum ret;
PIMap<int, CDType>::const_iterator i; PIMap<int, CDType>::const_iterator i;
for (i = k.begin(); i != k.end(); ++i) for (i = k.begin(); i != k.end(); ++i)
ret << CDType::Enumerator(i.key(), i.value().name()); ret << PIVariantTypes::Enumerator(i.key(), i.value().name());
return ret; return ret;
} }

View File

@@ -3,6 +3,7 @@
#include "pistring.h" #include "pistring.h"
#include "pimap.h" #include "pimap.h"
#include "pivarianttypes.h"
class PIIODevice; class PIIODevice;
class PIEvaluator; class PIEvaluator;
@@ -18,7 +19,6 @@ class CDType {
friend class CDSection; friend class CDSection;
public: public:
enum cdT {cdNull, cdK, cdX, cdC}; enum cdT {cdNull, cdK, cdX, cdC};
typedef PIPair<int, PIString> Enumerator;
CDType(); CDType();
CDType(int i, const PIString & n, const PIString & t, const PIString & v, const PIString & f, const PIString & c, cdT cd_t); CDType(int i, const PIString & n, const PIString & t, const PIString & v, const PIString & f, const PIString & c, cdT cd_t);
int index() const {return index_;} int index() const {return index_;}
@@ -35,19 +35,19 @@ public:
void setFormula(const PIString & formula); void setFormula(const PIString & formula);
void setComment(const PIString & comment) {comment_ = comment;} void setComment(const PIString & comment) {comment_ = comment;}
operator double() const {return value_d;} operator double() const {return value_d;}
const PIVector<CDType::Enumerator> & enumValues() const {return enum_values;} const PIVariantTypes::Enum & enumValues() const {return enum_values;}
void setEnumValues(const PIVector<CDType::Enumerator> & ev) {enum_values = ev;} void setEnumValues(const PIVariantTypes::Enum & ev) {enum_values = ev;}
const PIString & errorString() const {return error_;} const PIString & errorString() const {return error_;}
PIDeque<int> path() const {return path_;} PIDeque<int> path() const {return path_;}
protected: protected:
bool calculate(PIEvaluator * e, PIVector<const CDType * > stack = PIVector<const CDType * >()); bool calculate(PIEvaluator * e, PIVector<const CDType * > stack = PIVector<const CDType * >());
PIVector<CDType::Enumerator> parseEnumComment(PIString c); PIVariantTypes::Enum parseEnumComment(PIString c);
cdT cd_type_; cdT cd_type_;
int index_; int index_;
PIString name_, type_; PIString name_, type_;
PIString value_s, formula_, comment_, error_; PIString value_s, formula_, comment_, error_;
PIVector<CDType::Enumerator> enum_values; PIVariantTypes::Enum enum_values;
CDSection * parent; CDSection * parent;
PIDeque<int> path_; PIDeque<int> path_;
double value_d; double value_d;
@@ -85,7 +85,7 @@ public:
void calculate(); void calculate();
void makePath(PIDeque<int> p = PIDeque<int>()); void makePath(PIDeque<int> p = PIDeque<int>());
PIVector<CDType * > children(bool recursive = true) const; PIVector<CDType * > children(bool recursive = true) const;
PIVector<CDType::Enumerator> enumValues() const; PIVariantTypes::Enum enumValues() const;
PIString name; PIString name;
PIString alias; PIString alias;

View File

@@ -15,7 +15,7 @@ if(DEFINED ENV{QNX_HOST})
else() else()
add_library(${PROJECT_NAME} SHARED ${CPPS}) add_library(${PROJECT_NAME} SHARED ${CPPS})
endif() endif()
set(LIBS ${QT_QTCORE_LIBRARY} ${PIP_LIBRARY}) set(LIBS ${QT_QTCORE_LIBRARY} ${PIP_LIBRARY} qad_utils)
target_link_libraries(${PROJECT_NAME} ${LIBS}) target_link_libraries(${PROJECT_NAME} ${LIBS})
if(LIB) if(LIB)
if(WIN32) if(WIN32)

View File

@@ -2,6 +2,24 @@
#include "qvariantedit.h" #include "qvariantedit.h"
const QAD::Enum PI2QADEnum(const PIVariantTypes::Enum & el) {
QAD::Enum ret;
piForeachC (PIVariantTypes::Enumerator & e, el.enum_list)
ret << QAD::Enumerator(e.value, PI2QString(e.name));
ret.selectValue(el.selectedValue());
return ret;
}
const PIVariantTypes::Enum QAD2PIEnum(const QAD::Enum & el) {
PIVariantTypes::Enum ret;
foreach (const QAD::Enumerator & e, el.enum_list)
ret << PIVariantTypes::Enumerator(e.value, Q2PIString(e.name));
ret.selectValue(el.selectedValue());
return ret;
}
const QVariant PI2QVariant(const PIVariant & v) { const QVariant PI2QVariant(const PIVariant & v) {
switch (v.type()) { switch (v.type()) {
case PIVariant::pivBool: return QVariant(v.toBool()); case PIVariant::pivBool: return QVariant(v.toBool());
@@ -22,6 +40,9 @@ const QVariant PI2QVariant(const PIVariant & v) {
case PIVariant::pivTime: return QVariant(PI2QTime(v.toTime())); case PIVariant::pivTime: return QVariant(PI2QTime(v.toTime()));
case PIVariant::pivDate: return QVariant(PI2QDate(v.toDate())); case PIVariant::pivDate: return QVariant(PI2QDate(v.toDate()));
case PIVariant::pivDateTime: return QVariant(PI2QDateTime(v.toDateTime())); case PIVariant::pivDateTime: return QVariant(PI2QDateTime(v.toDateTime()));
case PIVariant::pivEnum: return QVariant::fromValue(PI2QADEnum(v.toEnum()));
case PIVariant::pivFile: return QVariant::fromValue(PI2QADFile(v.toFile()));
case PIVariant::pivDir: return QVariant::fromValue(PI2QADDir(v.toDir()));
//case PIVariant::pivSystemTime: return QVariant(v.to()); //case PIVariant::pivSystemTime: return QVariant(v.to());
default: return QVariant(); default: return QVariant();
} }
@@ -43,7 +64,10 @@ const PIVariant Q2PIVariant(const QVariant & v) {
case QVariant::Time: return PIVariant(Q2PITime(v.toTime())); case QVariant::Time: return PIVariant(Q2PITime(v.toTime()));
case QVariant::Date: return PIVariant(Q2PIDate(v.toDate())); case QVariant::Date: return PIVariant(Q2PIDate(v.toDate()));
case QVariant::DateTime: return PIVariant(Q2PIDateTime(v.toDateTime())); case QVariant::DateTime: return PIVariant(Q2PIDateTime(v.toDateTime()));
default: return PIVariant(); default: break;
} }
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::Dir>()) return PIVariant(QAD2PIDir(v.value<QAD::Dir>()));
return PIVariant(); return PIVariant();
} }

View File

@@ -5,6 +5,7 @@
#include "pimathmatrix.h" #include "pimathmatrix.h"
#include "pitime.h" #include "pitime.h"
#include "pivariant.h" #include "pivariant.h"
#include "qad_types.h"
#include <QString> #include <QString>
#include <QByteArray> #include <QByteArray>
#include <QPointF> #include <QPointF>
@@ -47,6 +48,14 @@ inline const PIDate Q2PIDate(const QDate & v) {return PIDate(v.year(), v.month()
inline const PITime Q2PITime(const QTime & v) {return PITime(v.hour(), v.minute(), v.second(), v.msec());} inline const PITime Q2PITime(const QTime & v) {return PITime(v.hour(), v.minute(), v.second(), v.msec());}
inline const PIDateTime Q2PIDateTime(const QDateTime & v) {return PIDateTime(Q2PIDate(v.date()), Q2PITime(v.time()));} inline const PIDateTime Q2PIDateTime(const QDateTime & v) {return PIDateTime(Q2PIDate(v.date()), Q2PITime(v.time()));}
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::Dir PI2QADDir(const PIVariantTypes::Dir & v) {return QAD::Dir(PI2QString(v.dir), v.is_abs);}
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::Dir QAD2PIDir(const QAD::Dir & v) {return PIVariantTypes::Dir(Q2PIString(v.dir), v.is_abs);}
const QVariant PI2QVariant(const PIVariant & v); const QVariant PI2QVariant(const PIVariant & v);
const PIVariant Q2PIVariant(const QVariant & v); const PIVariant Q2PIVariant(const QVariant & v);

View File

@@ -64,6 +64,12 @@ QStringList QAD::Enum::names() const {
} }
QAD::Enum & QAD::Enum::operator <<(const QAD::Enumerator & v) {
enum_list << v;
return *this;
}
QAD::Enum & QAD::Enum::operator <<(const QString & v) { QAD::Enum & QAD::Enum::operator <<(const QString & v) {
enum_list << Enumerator(enum_list.size(), v); enum_list << Enumerator(enum_list.size(), v);
return *this; return *this;

View File

@@ -32,6 +32,7 @@ namespace QAD {
QString enum_name; QString enum_name;
QString selected; QString selected;
QList<Enumerator> enum_list; QList<Enumerator> enum_list;
Enum & operator <<(const Enumerator & v);
Enum & operator <<(const QString & v); Enum & operator <<(const QString & v);
Enum & operator <<(const QStringList & v); Enum & operator <<(const QStringList & v);
}; };

View File

@@ -1,4 +1,5 @@
#include "qpointedit.h" #include "qpointedit.h"
#include "float.h"
QPointEdit::QPointEdit(QWidget * parent): QWidget(parent), lay(QBoxLayout::LeftToRight, this) { QPointEdit::QPointEdit(QWidget * parent): QWidget(parent), lay(QBoxLayout::LeftToRight, this) {

View File

@@ -5,7 +5,6 @@
#include <QBoxLayout> #include <QBoxLayout>
#include <QLabel> #include <QLabel>
#include <QEvent> #include <QEvent>
#include "float.h"
class QPointEdit: public QWidget class QPointEdit: public QWidget

View File

@@ -1,4 +1,5 @@
#include "qrectedit.h" #include "qrectedit.h"
#include "float.h"
QRectEdit::QRectEdit(QWidget * parent): QWidget(parent), lay(QBoxLayout::LeftToRight, this) { QRectEdit::QRectEdit(QWidget * parent): QWidget(parent), lay(QBoxLayout::LeftToRight, this) {

View File

@@ -5,7 +5,6 @@
#include <QBoxLayout> #include <QBoxLayout>
#include <QLabel> #include <QLabel>
#include <QEvent> #include <QEvent>
#include "float.h"
class QRectEdit: public QWidget class QRectEdit: public QWidget

View File

@@ -1,4 +1,5 @@
#include "spinslider.h" #include "spinslider.h"
#include <qmath.h>
SpinSlider::SpinSlider(QWidget * parent): QWidget(parent) { SpinSlider::SpinSlider(QWidget * parent): QWidget(parent) {

View File

@@ -4,7 +4,6 @@
#include <QSlider> #include <QSlider>
#include <QDoubleSpinBox> #include <QDoubleSpinBox>
#include <QBoxLayout> #include <QBoxLayout>
#include <qmath.h>
QT_BEGIN_HEADER QT_BEGIN_HEADER

View File

@@ -11,14 +11,6 @@
using namespace CDUtils; using namespace CDUtils;
QList<QAD::Enumerator> CDEnum2QADEnum(const PIVector<CDType::Enumerator> & el) {
QList<QAD::Enumerator> ret;
piForeachC (CDType::Enumerator & e, el)
ret << QAD::Enumerator(e.first, PI2QString(e.second));
return ret;
}
CDKItemModel::CDKItemModel(QObject *parent) : QAbstractItemModel(parent) { CDKItemModel::CDKItemModel(QObject *parent) : QAbstractItemModel(parent) {
root = 0; root = 0;
internalRebuild(); internalRebuild();
@@ -233,8 +225,7 @@ QVariant CDKItem::value(CDType t, int role) const {
if (t.type() == "n") return t.toInt(); if (t.type() == "n") return t.toInt();
if (t.type() == "b") return t.toBool(); if (t.type() == "b") return t.toBool();
if (t.type() == "e") { if (t.type() == "e") {
QAD::Enum et; QAD::Enum et = PI2QADEnum(t.enumValues());
et.enum_list = CDEnum2QADEnum(t.enumValues());
et.selectValue(t.toInt()); et.selectValue(t.toInt());
if (role == Qt::EditRole) return QVariant::fromValue<QAD::Enum>(et); if (role == Qt::EditRole) return QVariant::fromValue<QAD::Enum>(et);
else return et.selectedName(); else return et.selectedName();