diff --git a/cd_utils/cdutils_types.cpp b/cd_utils/cdutils_types.cpp index a3345a9..76f1dfe 100644 --- a/cd_utils/cdutils_types.cpp +++ b/cd_utils/cdutils_types.cpp @@ -558,3 +558,9 @@ PIVariantTypes::Enum CDSection::enumValues() const { return ret; } + + +XType::XType(const CDType & cdt) { + +} + diff --git a/cd_utils/cdutils_types.h b/cd_utils/cdutils_types.h index cb036b5..bc19517 100644 --- a/cd_utils/cdutils_types.h +++ b/cd_utils/cdutils_types.h @@ -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 history; + int avg_size; + XMode mode_; +}; + + class CDSection { friend class CDCore; friend class ::CD_Pult; @@ -134,4 +151,16 @@ inline PICout operator <<(PICout s, const CDUtils::CDType & v) { 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 diff --git a/qad/graphic/graphic.cpp b/qad/graphic/graphic.cpp index d13a94d..b802564 100644 --- a/qad/graphic/graphic.cpp +++ b/qad/graphic/graphic.cpp @@ -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()); break; + case 2: setOpenGL(cs.getData()); break; + case 3: setBorderInputsVisible(cs.getData()); break; + case 4: setStatusVisible(cs.getData()); break; + case 5: setLegendVisible(cs.getData()); break; + case 6: setBackgroundColor(cs.getData()); break; + case 7: setTextColor(cs.getData()); break; + case 8: setMargins(cs.getData()); break; + case 9: setGridPen(cs.getData()); break; + case 10: setGraduationX(cs.getData()); break; + case 11: setGraduationY(cs.getData()); break; + case 12: setGraduationStepX(cs.getData()); break; + case 13: setGraduationStepY(cs.getData()); break; + case 14: graphics = cs.getData >(); break; + case 15: isFit = cs.getData(); break; + case 16: vrect = cs.getData(); 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; + } } diff --git a/qad/graphic/graphic.h b/qad/graphic/graphic.h index f8c3a29..17102f2 100644 --- a/qad/graphic/graphic.h +++ b/qad/graphic/graphic.h @@ -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 & allGraphics() const {return graphics;} void setAllGraphics(const QVector & g, bool update = true) {graphics = g; if (update) updateLegend();} void setHistogramData(const QVector & g, int graphic); void setHistogramData(const QVector & 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: diff --git a/qad/utils/chunkstream.h b/qad/utils/chunkstream.h index 108fd0b..e873395 100644 --- a/qad/utils/chunkstream.h +++ b/qad/utils/chunkstream.h @@ -13,7 +13,7 @@ public: ChunkStream(QDataStream & str) {setSource(str);} ChunkStream(QByteArray * data = 0) {setSource(data);} ~ChunkStream(); - + template struct Chunk { Chunk(int i, const T & d): id(i), data(d) {} @@ -21,14 +21,16 @@ public: T data; }; template static Chunk chunk(int id, const T & data) {return Chunk(id, data);} - + + template ChunkStream & add(int id, const T & data) {*this << Chunk(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 @@ -37,12 +39,12 @@ public: void get(T & v) const {v = getData();} private: void _init(); - + int last_id; QByteArray * data_, last_data, tmp_data; QBuffer buffer; QDataStream stream_; - + }; template