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:
@@ -1510,25 +1510,67 @@ bool Graphic::legendVisible() const {
|
||||
|
||||
|
||||
QByteArray Graphic::save() {
|
||||
QByteArray ba;
|
||||
QDataStream s(&ba, QIODevice::ReadWrite);
|
||||
s << openGL() << antialiasing() << borderInputsVisible() << statusVisible() << legendVisible();
|
||||
s << graphics;
|
||||
return ba;
|
||||
// QByteArray ba;
|
||||
// QDataStream s(&ba, QIODevice::ReadWrite);
|
||||
// s << openGL() << antialiasing() << borderInputsVisible() << statusVisible() << legendVisible();
|
||||
// s << graphics;
|
||||
// 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) {
|
||||
if (ba.isEmpty()) return;
|
||||
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);
|
||||
char ver = ba[0];
|
||||
qDebug() << "load" << (int)ver;
|
||||
switch(ver) {
|
||||
case '2': {// version '2':
|
||||
ba.remove(0, 1);
|
||||
QRectF vrect;
|
||||
ChunkStream cs(ba);
|
||||
while (!cs.atEnd()) {
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -83,7 +83,7 @@ class Graphic: public QFrame
|
||||
Q_PROPERTY(QRectF visualRect READ visualRect WRITE setVisualRect)
|
||||
Q_PROPERTY(QRectF defaultRect READ defaultRect WRITE setDefaultRect)
|
||||
Q_PROPERTY(int minimumRepaintInterval READ minimumRepaintInterval WRITE setMinimumRepaintInterval)
|
||||
|
||||
|
||||
Q_PROPERTY(double gridNumbersMultiplierX READ gridNumbersMultiplierX WRITE setGridNumbersMultiplierX)
|
||||
Q_PROPERTY(double gridNumbersMultiplierY READ gridNumbersMultiplierY WRITE setGridNumbersMultiplierY)
|
||||
Q_PROPERTY(Graduation graduationX READ graduationX WRITE setGraduationX)
|
||||
@@ -95,7 +95,7 @@ class Graphic: public QFrame
|
||||
Q_PROPERTY(int histogramMinIntervals READ histogramMinIntervals WRITE setHistogramMinIntervals)
|
||||
Q_PROPERTY(int histogramMaxIntervals READ histogramMaxIntervals WRITE setHistogramMaxIntervals)
|
||||
Q_PROPERTY(double histogramMinDeltaMultiplier READ histogramMinDeltaMultiplier WRITE setHistogramMinDeltaMultiplier)
|
||||
|
||||
|
||||
Q_PROPERTY(Graphic::GraphicsData graphicsData READ graphicsData WRITE setGraphicsData)
|
||||
|
||||
public:
|
||||
@@ -191,13 +191,13 @@ public:
|
||||
|
||||
///void reset() {mutex.lock(); clear(); mutex.unlock();}
|
||||
void reset() {clear();}
|
||||
|
||||
|
||||
GraphicType graphic(int arg) {if (arg < 0 || arg >= graphics.size()) return GraphicType(); return graphics[arg];}
|
||||
const QVector<GraphicType> & allGraphics() const {return graphics;}
|
||||
void setAllGraphics(const QVector<GraphicType> & g, bool update = true) {graphics = g; if (update) updateLegend();}
|
||||
void setHistogramData(const QVector<float> & g, int graphic);
|
||||
void setHistogramData(const QVector<float> & g) {setHistogramData(g, curGraphic);}
|
||||
|
||||
|
||||
double canvas2realX(double px) const;
|
||||
double canvas2realY(double py) const;
|
||||
double real2canvasX(double px) const;
|
||||
@@ -270,7 +270,7 @@ public slots:
|
||||
void setHistogramMaxIntervals(int value) {max_int = value; updateGraphics();}
|
||||
void setHistogramMinDeltaMultiplier(double value) {mdm = value; updateGraphics();}
|
||||
void setGraphicsData(const GraphicsData & gd);
|
||||
|
||||
|
||||
void setGridNumbersMultiplierX(double value) {grid_numbers_x = value; updateGraphics();}
|
||||
void setGridNumbersMultiplierY(double value) {grid_numbers_y = value; updateGraphics();}
|
||||
void setGraduationX(Graduation value) {grad_x = value; if (aupdate) update();;}
|
||||
@@ -301,7 +301,7 @@ public slots:
|
||||
void updateGraphics() {findGraphicsRect(); update();}
|
||||
void setCurrentGraphic(int arg) {if (arg < 0 || arg >= graphics.size()) return; curGraphic = arg;}
|
||||
void setGraphicsCount(int arg, bool update = true);
|
||||
|
||||
|
||||
void zoom(float factor);
|
||||
void zoomIn() {zoom(1. / 1.2);}
|
||||
void zoomOut() {zoom(1.2);}
|
||||
@@ -420,8 +420,8 @@ Q_DECLARE_METATYPE(Graphic::GraphicsData)
|
||||
|
||||
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, 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::Graduation & v) {s >> *((int*)(&v)); return s;}
|
||||
|
||||
class __GraphicRegistrator__ {
|
||||
public:
|
||||
|
||||
@@ -13,7 +13,7 @@ public:
|
||||
ChunkStream(QDataStream & str) {setSource(str);}
|
||||
ChunkStream(QByteArray * data = 0) {setSource(data);}
|
||||
~ChunkStream();
|
||||
|
||||
|
||||
template <typename T>
|
||||
struct Chunk {
|
||||
Chunk(int i, const T & d): id(i), data(d) {}
|
||||
@@ -21,14 +21,16 @@ public:
|
||||
T 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(QDataStream & str);
|
||||
void setSource(QByteArray * data);
|
||||
QDataStream & dataStream() {return stream_;}
|
||||
QByteArray data() const {return tmp_data;}
|
||||
bool atEnd() const {return stream_.atEnd();}
|
||||
|
||||
|
||||
int read() {stream_ >> last_id >> last_data; return last_id;}
|
||||
int getID() {return last_id;}
|
||||
template <typename T>
|
||||
@@ -37,12 +39,12 @@ public:
|
||||
void get(T & v) const {v = getData<T>();}
|
||||
private:
|
||||
void _init();
|
||||
|
||||
|
||||
int last_id;
|
||||
QByteArray * data_, last_data, tmp_data;
|
||||
QBuffer buffer;
|
||||
QDataStream stream_;
|
||||
|
||||
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
|
||||
Reference in New Issue
Block a user