ChunkStream add(int, Chunk)

Graphic save() and load() version 2


git-svn-id: svn://db.shs.com.ru/libs@346 a8b55f48-bf90-11e4-a774-851b48703e85
This commit is contained in:
2018-01-18 11:37:50 +00:00
parent e53bcb1733
commit 7a3f3a928e
5 changed files with 106 additions and 27 deletions

View File

@@ -558,3 +558,9 @@ PIVariantTypes::Enum CDSection::enumValues() const {
return ret; return ret;
} }
XType::XType(const CDType & cdt) {
}

View File

@@ -65,6 +65,23 @@ protected:
}; };
class XType : public CDType {
friend class XSection;
public:
enum XMode {X_Current, X_All_Avg};
XType(const CDType & cdt = CDType());
void setXMode(XMode mode) {mode_ = mode;}
void setAvg(int avg) {avg_size = avg;}
double currentValue() const {if (history.isEmpty()) return 0; return history.back();}
private:
PIVector<double> history;
int avg_size;
XMode mode_;
};
class CDSection { class CDSection {
friend class CDCore; friend class CDCore;
friend class ::CD_Pult; friend class ::CD_Pult;
@@ -134,4 +151,16 @@ inline PICout operator <<(PICout s, const CDUtils::CDType & v) {
return s; return s;
} }
inline PICout operator <<(PICout s, const CDUtils::XType & v) {
s.space();
s.setControl(0, true);
switch (v.cd_type()) {
case CDUtils::CDType::cdX : s << "X["; break;
default : s << "Null["; break;
}
s << v.name() << "(" << v.index() << ")] = " << v.currentValue();
s.restoreControl();
return s;
}
#endif // CDUTILS_TYPES_H #endif // CDUTILS_TYPES_H

View File

@@ -1510,25 +1510,67 @@ bool Graphic::legendVisible() const {
QByteArray Graphic::save() { QByteArray Graphic::save() {
QByteArray ba; // QByteArray ba;
QDataStream s(&ba, QIODevice::ReadWrite); // QDataStream s(&ba, QIODevice::ReadWrite);
s << openGL() << antialiasing() << borderInputsVisible() << statusVisible() << legendVisible(); // s << openGL() << antialiasing() << borderInputsVisible() << statusVisible() << legendVisible();
s << graphics; // s << graphics;
return ba; // return ba;
// version '2':
ChunkStream cs;
cs.add(1, antialiasing()).add(2, openGL()).add(3, borderInputsVisible()).add(4, statusVisible()).add(5, legendVisible());
cs.add(6, backgroundColor()).add(7, textColor()).add(8, margins());
cs.add(9, gridPen()).add(10, graduationX()).add(11, graduationY()).add(12, graduationStepX()).add(13, graduationStepY());
cs.add(14, graphics);
cs.add(15, isFit).add(16, visualRect());
return cs.data().prepend('2');
} }
void Graphic::load(QByteArray ba) { void Graphic::load(QByteArray ba) {
if (ba.isEmpty()) return; if (ba.isEmpty()) return;
QDataStream s(ba); char ver = ba[0];
bool a; qDebug() << "load" << (int)ver;
s >> a; setOpenGL(a); switch(ver) {
s >> a; setAntialiasing(a); case '2': {// version '2':
s >> a; setBorderInputsVisible(a); ba.remove(0, 1);
s >> a; setStatusVisible(a); QRectF vrect;
s >> a; ChunkStream cs(ba);
s >> graphics; while (!cs.atEnd()) {
setLegendVisible(a); switch (cs.read()) {
case 1: setAntialiasing(cs.getData<bool>()); break;
case 2: setOpenGL(cs.getData<bool>()); break;
case 3: setBorderInputsVisible(cs.getData<bool>()); break;
case 4: setStatusVisible(cs.getData<bool>()); break;
case 5: setLegendVisible(cs.getData<bool>()); break;
case 6: setBackgroundColor(cs.getData<QColor>()); break;
case 7: setTextColor(cs.getData<QColor>()); break;
case 8: setMargins(cs.getData<QRect>()); break;
case 9: setGridPen(cs.getData<QPen>()); break;
case 10: setGraduationX(cs.getData<Graduation>()); break;
case 11: setGraduationY(cs.getData<Graduation>()); break;
case 12: setGraduationStepX(cs.getData<double>()); break;
case 13: setGraduationStepY(cs.getData<double>()); break;
case 14: graphics = cs.getData<QVector<GraphicType> >(); break;
case 15: isFit = cs.getData<bool>(); break;
case 16: vrect = cs.getData<QRectF>(); break;
default: break;
}
}
if (!isFit) setVisualRect(vrect);
} break;
default: {// old version 0:
QDataStream s(ba);
bool a;
s >> a; setOpenGL(a);
s >> a; setAntialiasing(a);
s >> a; setBorderInputsVisible(a);
s >> a; setStatusVisible(a);
s >> a;
s >> graphics;
setLegendVisible(a);
} break;
}
} }

View File

@@ -420,8 +420,8 @@ Q_DECLARE_METATYPE(Graphic::GraphicsData)
Q_DECLARE_OPERATORS_FOR_FLAGS(Graphic::Buttons) Q_DECLARE_OPERATORS_FOR_FLAGS(Graphic::Buttons)
//inline QDataStream & operator <<(QDataStream & s, const Graphic::GraphicsData & v) {s << v; return s;} inline QDataStream & operator <<(QDataStream & s, const Graphic::Graduation & v) {s << (int)v; return s;}
//inline QDataStream & operator >>(QDataStream & s, Graphic::GraphicsData & v) {s >> v; return s;} inline QDataStream & operator >>(QDataStream & s, Graphic::Graduation & v) {s >> *((int*)(&v)); return s;}
class __GraphicRegistrator__ { class __GraphicRegistrator__ {
public: public:

View File

@@ -22,6 +22,8 @@ public:
}; };
template <typename T> static Chunk<T> chunk(int id, const T & data) {return Chunk<T>(id, data);} template <typename T> static Chunk<T> chunk(int id, const T & data) {return Chunk<T>(id, data);}
template <typename T> ChunkStream & add(int id, const T & data) {*this << Chunk<T>(id, data); return *this;}
void setSource(const QByteArray & data); void setSource(const QByteArray & data);
void setSource(QDataStream & str); void setSource(QDataStream & str);
void setSource(QByteArray * data); void setSource(QByteArray * data);