From a74150ff717fb72cbe13a20b7127a4772b708e0c 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: Wed, 22 Feb 2017 13:00:46 +0000 Subject: [PATCH] git-svn-id: svn://db.shs.com.ru/libs@164 a8b55f48-bf90-11e4-a774-851b48703e85 --- cd_utils/cdutils_types.cpp | 20 ++++++++++---------- cd_utils/cdutils_types.h | 12 ++++++------ piqt/CMakeLists.txt | 2 +- piqt/piqt.cpp | 26 +++++++++++++++++++++++++- piqt/piqt.h | 9 +++++++++ qad_utils/qad_types.cpp | 6 ++++++ qad_utils/qad_types.h | 1 + qad_widgets/qpointedit.cpp | 1 + qad_widgets/qpointedit.h | 1 - qad_widgets/qrectedit.cpp | 1 + qad_widgets/qrectedit.h | 1 - qad_widgets/spinslider.cpp | 1 + qad_widgets/spinslider.h | 1 - qcd_utils/qcd_kmodel.cpp | 11 +---------- 14 files changed, 62 insertions(+), 31 deletions(-) diff --git a/cd_utils/cdutils_types.cpp b/cd_utils/cdutils_types.cpp index dbe00b1..ada4a35 100644 --- a/cd_utils/cdutils_types.cpp +++ b/cd_utils/cdutils_types.cpp @@ -141,8 +141,8 @@ bool CDType::calculate(PIEvaluator * e, PIVector stack) { } -PIVector CDType::parseEnumComment(PIString c) { - PIVector ret; +PIVariantTypes::Enum CDType::parseEnumComment(PIString c) { + PIVariantTypes::Enum ret; if (c.isEmpty()) return ret; if (type_ == "e") { PIStringList sl = c.inBrackets('{', '}').split(","); @@ -157,11 +157,11 @@ PIVector CDType::parseEnumComment(PIString c) { s.cutLeft(ind + 1).trim(); } } - ret << CDType::Enumerator(cval, s); + ret << PIVariantTypes::Enumerator(cval, s); ++cval; } } - piCout << c << "=" << ret; + //piCout << c << "=" << ret; return ret; } @@ -317,11 +317,11 @@ void CDSection::write(PIIODevice * d, const PIString & prefix) { d->write(l.toUTF8()); l.clear(); l << ck.index() << ".v = " << ck.value() << " #" << ck.type() << " " << ck.name() << " \n"; d->write(l.toUTF8()); - if (!ck.enumValues().isEmpty()) { + if (!ck.enumValues().enum_list.isEmpty()) { l.clear(); l << ck.index() << ".ev = {"; //PIVector el = ck.enumValues(); - piForeachC (CDType::Enumerator & e, ck.enumValues()) - l << e.first << " - " << e.second << ", "; + piForeachC (PIVariantTypes::Enumerator & e, ck.enumValues().enum_list) + l << e.value << " - " << e.name << ", "; l.cutRight(2); l << "} \n"; d->write(l.toUTF8()); @@ -497,11 +497,11 @@ PIVector CDSection::children(bool recursive) const { } -PIVector CDSection::enumValues() const { - PIVector ret; +PIVariantTypes::Enum CDSection::enumValues() const { + PIVariantTypes::Enum ret; PIMap::const_iterator 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; } diff --git a/cd_utils/cdutils_types.h b/cd_utils/cdutils_types.h index aef4186..be664e7 100644 --- a/cd_utils/cdutils_types.h +++ b/cd_utils/cdutils_types.h @@ -3,6 +3,7 @@ #include "pistring.h" #include "pimap.h" +#include "pivarianttypes.h" class PIIODevice; class PIEvaluator; @@ -18,7 +19,6 @@ class CDType { friend class CDSection; public: enum cdT {cdNull, cdK, cdX, cdC}; - typedef PIPair Enumerator; CDType(); 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_;} @@ -35,19 +35,19 @@ public: void setFormula(const PIString & formula); void setComment(const PIString & comment) {comment_ = comment;} operator double() const {return value_d;} - const PIVector & enumValues() const {return enum_values;} - void setEnumValues(const PIVector & ev) {enum_values = ev;} + const PIVariantTypes::Enum & enumValues() const {return enum_values;} + void setEnumValues(const PIVariantTypes::Enum & ev) {enum_values = ev;} const PIString & errorString() const {return error_;} PIDeque path() const {return path_;} protected: bool calculate(PIEvaluator * e, PIVector stack = PIVector()); - PIVector parseEnumComment(PIString c); + PIVariantTypes::Enum parseEnumComment(PIString c); cdT cd_type_; int index_; PIString name_, type_; PIString value_s, formula_, comment_, error_; - PIVector enum_values; + PIVariantTypes::Enum enum_values; CDSection * parent; PIDeque path_; double value_d; @@ -85,7 +85,7 @@ public: void calculate(); void makePath(PIDeque p = PIDeque()); PIVector children(bool recursive = true) const; - PIVector enumValues() const; + PIVariantTypes::Enum enumValues() const; PIString name; PIString alias; diff --git a/piqt/CMakeLists.txt b/piqt/CMakeLists.txt index 6415a32..6630321 100644 --- a/piqt/CMakeLists.txt +++ b/piqt/CMakeLists.txt @@ -15,7 +15,7 @@ if(DEFINED ENV{QNX_HOST}) else() add_library(${PROJECT_NAME} SHARED ${CPPS}) endif() -set(LIBS ${QT_QTCORE_LIBRARY} ${PIP_LIBRARY}) +set(LIBS ${QT_QTCORE_LIBRARY} ${PIP_LIBRARY} qad_utils) target_link_libraries(${PROJECT_NAME} ${LIBS}) if(LIB) if(WIN32) diff --git a/piqt/piqt.cpp b/piqt/piqt.cpp index f15c2e7..a8c07c7 100644 --- a/piqt/piqt.cpp +++ b/piqt/piqt.cpp @@ -2,6 +2,24 @@ #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) { switch (v.type()) { 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::pivDate: return QVariant(PI2QDate(v.toDate())); 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()); default: return QVariant(); } @@ -43,7 +64,10 @@ const PIVariant Q2PIVariant(const QVariant & v) { case QVariant::Time: return PIVariant(Q2PITime(v.toTime())); case QVariant::Date: return PIVariant(Q2PIDate(v.toDate())); case QVariant::DateTime: return PIVariant(Q2PIDateTime(v.toDateTime())); - default: return PIVariant(); + default: break; } + if (v.canConvert()) return PIVariant(QAD2PIEnum(v.value())); + if (v.canConvert()) return PIVariant(QAD2PIFile(v.value())); + if (v.canConvert()) return PIVariant(QAD2PIDir(v.value())); return PIVariant(); } diff --git a/piqt/piqt.h b/piqt/piqt.h index 0c2a250..28045e2 100644 --- a/piqt/piqt.h +++ b/piqt/piqt.h @@ -5,6 +5,7 @@ #include "pimathmatrix.h" #include "pitime.h" #include "pivariant.h" +#include "qad_types.h" #include #include #include @@ -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 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 PIVariant Q2PIVariant(const QVariant & v); diff --git a/qad_utils/qad_types.cpp b/qad_utils/qad_types.cpp index faab484..76a5394 100644 --- a/qad_utils/qad_types.cpp +++ b/qad_utils/qad_types.cpp @@ -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) { enum_list << Enumerator(enum_list.size(), v); return *this; diff --git a/qad_utils/qad_types.h b/qad_utils/qad_types.h index 7f4e8a0..e3815e4 100644 --- a/qad_utils/qad_types.h +++ b/qad_utils/qad_types.h @@ -32,6 +32,7 @@ namespace QAD { QString enum_name; QString selected; QList enum_list; + Enum & operator <<(const Enumerator & v); Enum & operator <<(const QString & v); Enum & operator <<(const QStringList & v); }; diff --git a/qad_widgets/qpointedit.cpp b/qad_widgets/qpointedit.cpp index 1312232..ebd0aae 100644 --- a/qad_widgets/qpointedit.cpp +++ b/qad_widgets/qpointedit.cpp @@ -1,4 +1,5 @@ #include "qpointedit.h" +#include "float.h" QPointEdit::QPointEdit(QWidget * parent): QWidget(parent), lay(QBoxLayout::LeftToRight, this) { diff --git a/qad_widgets/qpointedit.h b/qad_widgets/qpointedit.h index 4d8e7fd..15119c7 100644 --- a/qad_widgets/qpointedit.h +++ b/qad_widgets/qpointedit.h @@ -5,7 +5,6 @@ #include #include #include -#include "float.h" class QPointEdit: public QWidget diff --git a/qad_widgets/qrectedit.cpp b/qad_widgets/qrectedit.cpp index 750cda6..e1387a4 100644 --- a/qad_widgets/qrectedit.cpp +++ b/qad_widgets/qrectedit.cpp @@ -1,4 +1,5 @@ #include "qrectedit.h" +#include "float.h" QRectEdit::QRectEdit(QWidget * parent): QWidget(parent), lay(QBoxLayout::LeftToRight, this) { diff --git a/qad_widgets/qrectedit.h b/qad_widgets/qrectedit.h index ed79136..7e4064d 100644 --- a/qad_widgets/qrectedit.h +++ b/qad_widgets/qrectedit.h @@ -5,7 +5,6 @@ #include #include #include -#include "float.h" class QRectEdit: public QWidget diff --git a/qad_widgets/spinslider.cpp b/qad_widgets/spinslider.cpp index 336dccb..29ac431 100644 --- a/qad_widgets/spinslider.cpp +++ b/qad_widgets/spinslider.cpp @@ -1,4 +1,5 @@ #include "spinslider.h" +#include SpinSlider::SpinSlider(QWidget * parent): QWidget(parent) { diff --git a/qad_widgets/spinslider.h b/qad_widgets/spinslider.h index 9da2a55..6c9d0c8 100644 --- a/qad_widgets/spinslider.h +++ b/qad_widgets/spinslider.h @@ -4,7 +4,6 @@ #include #include #include -#include QT_BEGIN_HEADER diff --git a/qcd_utils/qcd_kmodel.cpp b/qcd_utils/qcd_kmodel.cpp index aac6ca6..0b51c1e 100644 --- a/qcd_utils/qcd_kmodel.cpp +++ b/qcd_utils/qcd_kmodel.cpp @@ -11,14 +11,6 @@ using namespace CDUtils; -QList CDEnum2QADEnum(const PIVector & el) { - QList ret; - piForeachC (CDType::Enumerator & e, el) - ret << QAD::Enumerator(e.first, PI2QString(e.second)); - return ret; -} - - CDKItemModel::CDKItemModel(QObject *parent) : QAbstractItemModel(parent) { root = 0; internalRebuild(); @@ -233,8 +225,7 @@ QVariant CDKItem::value(CDType t, int role) const { if (t.type() == "n") return t.toInt(); if (t.type() == "b") return t.toBool(); if (t.type() == "e") { - QAD::Enum et; - et.enum_list = CDEnum2QADEnum(t.enumValues()); + QAD::Enum et = PI2QADEnum(t.enumValues()); et.selectValue(t.toInt()); if (role == Qt::EditRole) return QVariant::fromValue(et); else return et.selectedName();