diff --git a/CMakeLists.txt b/CMakeLists.txt index 43884bd..61ef18e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,9 +2,9 @@ cmake_minimum_required(VERSION 3.0) cmake_policy(SET CMP0017 NEW) # need include() with .cmake project(qad) set(qad_MAJOR 2) -set(qad_MINOR 1) +set(qad_MINOR 2) set(qad_REVISION 0) -set(qad_SUFFIX beta) +set(qad_SUFFIX ) set(qad_COMPANY SHS) set(qad_DOMAIN org.SHS) diff --git a/libs/graphic/graphic.cpp b/libs/graphic/graphic.cpp index c18e689..5635d32 100644 --- a/libs/graphic/graphic.cpp +++ b/libs/graphic/graphic.cpp @@ -1178,7 +1178,7 @@ QPair Graphic::gridMark(double v) const { ret.first = QString::fromUtf8("%1ยท10").arg(v); ret.second = QString::number(p); } else - ret.first = QString::number(v); + ret.first = QString::number(v, 'g', 8); return ret; } diff --git a/libs/utils/chunkstream.h b/libs/utils/chunkstream.h index 0572e9f..b7b850b 100644 --- a/libs/utils/chunkstream.h +++ b/libs/utils/chunkstream.h @@ -23,6 +23,7 @@ #include #include #include +#include #include #include "qad_utils_export.h" @@ -64,22 +65,55 @@ public: bool atEnd() const {return stream_.atEnd();} Version version() const {return (Version)version_;} + + int read(); void readAll(); int getID() {return last_id;} - template - T getData() const {T ret; QDataStream s(last_data); s.setVersion(QDataStream::Qt_4_8); s >> ret; return ret;} + template void get(T & v) const {v = getData();} - template - const ChunkStream & get(int id, T & v) const { + + template typename std::enable_if::value, T>::type + getData() const { + QDataStream s(last_data); + s.setVersion(QDataStream::Qt_4_8); + T ret; + s >> ret; + return ret; + } + template typename std::enable_if::value, T>::type + getData() const { + QDataStream s(last_data); + s.setVersion(QDataStream::Qt_4_8); + typename std::underlying_type::type ret; + s >> ret; + return (T)ret; + } + + template typename std::enable_if::value, const ChunkStream &>::type + get(int id, T & v) const { QByteArray ba = data_map.value(id); if (!ba.isEmpty()) { - QDataStream s(ba); s.setVersion(QDataStream::Qt_4_8); + QDataStream s(ba); + s.setVersion(QDataStream::Qt_4_8); s >> v; } return *this; } + template typename std::enable_if::value, const ChunkStream &>::type + get(int id, T & v) const { + QByteArray ba = data_map.value(id); + if (!ba.isEmpty()) { + QDataStream s(ba); + s.setVersion(QDataStream::Qt_4_8); + typename std::underlying_type::type iv; + s >> iv; + v = (T)iv; + } + return *this; + } + private: void _init(); @@ -97,12 +131,37 @@ private: template friend ChunkStream & operator <<(ChunkStream & s, const ChunkStream::ChunkConst & c); }; -template -ChunkStream & operator <<(ChunkStream & s, const ChunkStream::Chunk & c) { - QByteArray ba; +template typename std::enable_if::value, void>::type +__writeChunkData(QByteArray & ba, const ChunkStream::Chunk & c) { QDataStream bas(&ba, QIODevice::WriteOnly); bas.setVersion(QDataStream::Qt_4_8); bas << c.data; +} +template typename std::enable_if::value, void>::type +__writeChunkData(QByteArray & ba, const ChunkStream::Chunk & c) { + QDataStream bas(&ba, QIODevice::WriteOnly); + bas.setVersion(QDataStream::Qt_4_8); + typename std::underlying_type::type iv = c.data; + bas << iv; +} +template typename std::enable_if::value, void>::type +__writeChunkConstData(QByteArray & ba, const ChunkStream::ChunkConst & c) { + QDataStream bas(&ba, QIODevice::WriteOnly); + bas.setVersion(QDataStream::Qt_4_8); + bas << c.data; +} +template typename std::enable_if::value, void>::type +__writeChunkConstData(QByteArray & ba, const ChunkStream::ChunkConst & c) { + QDataStream bas(&ba, QIODevice::WriteOnly); + bas.setVersion(QDataStream::Qt_4_8); + typename std::underlying_type::type iv = c.data; + bas << iv; +} + +template +ChunkStream & operator <<(ChunkStream & s, const ChunkStream::Chunk & c) { + QByteArray ba; + __writeChunkData(ba, c); switch (s.version_) { case ChunkStream::Version_1: s.stream_ << c.id << ba; @@ -118,12 +177,11 @@ ChunkStream & operator <<(ChunkStream & s, const ChunkStream::Chunk & c) { } return s; } + template ChunkStream & operator <<(ChunkStream & s, const ChunkStream::ChunkConst & c) { QByteArray ba; - QDataStream bas(&ba, QIODevice::WriteOnly); - bas.setVersion(QDataStream::Qt_4_8); - bas << c.data; + __writeChunkConstData(ba, c); switch (s.version_) { case ChunkStream::Version_1: s.stream_ << c.id << ba;