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:
@@ -558,3 +558,9 @@ PIVariantTypes::Enum CDSection::enumValues() const {
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
XType::XType(const CDType & cdt) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user