diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,13 +17,16 @@ include(GenerateExportHeader) include(ECMGenerateHeaders) +include(ECMGenerateExportHeader) include(ECMGeneratePriFile) include(ECMAddQch) include(ECMAddTests) include(CMakePackageConfigHelpers) include(ECMSetupVersion) include(ECMQtDeclareLoggingCategory) +set(EXCLUDE_DEPRECATED_BEFORE_AND_AT 0 CACHE STRING "Control the range of deprecated API excluded from the build [default=0].") + option(BUILD_QCH "Build API documentation in QCH format (for e.g. Qt Assistant, Qt Creator & KDevelop)" OFF) add_feature_info(QCH ${BUILD_QCH} "API documentation in QCH format (for e.g. Qt Assistant, Qt Creator & KDevelop)") diff --git a/autotests/aztecbarcodetest.cpp b/autotests/aztecbarcodetest.cpp --- a/autotests/aztecbarcodetest.cpp +++ b/autotests/aztecbarcodetest.cpp @@ -7,10 +7,14 @@ #include "../src/lib/aztecbarcode.h" #include "../src/lib/bitvector_p.h" +#include + #include #include #include +#include + Q_DECLARE_METATYPE(Prison::BitVector) using namespace Prison; @@ -372,6 +376,13 @@ ref = ref.convertToFormat(img.format()); QCOMPARE(img, ref); } + + void testDimension() + { + std::unique_ptr barcode(Prison::createBarcode(Prison::Aztec)); + QVERIFY(barcode); + QCOMPARE(barcode->dimensions(), Prison::AbstractBarcode::TwoDimensions); + } }; QTEST_APPLESS_MAIN(AztecBarcodeTest) diff --git a/autotests/code128barcodetest.cpp b/autotests/code128barcodetest.cpp --- a/autotests/code128barcodetest.cpp +++ b/autotests/code128barcodetest.cpp @@ -7,6 +7,8 @@ #include "../src/lib/code128barcode.h" #include "../src/lib/bitvector_p.h" +#include + #include #include #include @@ -91,6 +93,13 @@ } QCOMPARE(v, output); } + + void testDimension() + { + std::unique_ptr barcode(Prison::createBarcode(Prison::Code128)); + QVERIFY(barcode); + QCOMPARE(barcode->dimensions(), Prison::AbstractBarcode::OneDimension); + } }; QTEST_APPLESS_MAIN(Code128BarcodeTest) diff --git a/src/lib/CMakeLists.txt b/src/lib/CMakeLists.txt --- a/src/lib/CMakeLists.txt +++ b/src/lib/CMakeLists.txt @@ -28,8 +28,14 @@ ) add_library(KF5Prison ${prison_SRCS}) -generate_export_header(KF5Prison BASE_NAME Prison) - +ecm_generate_export_header(KF5Prison + BASE_NAME Prison + GROUP_BASE_NAME KF + VERSION ${KF5_VERSION} + DEPRECATED_BASE_VERSION 0 + DEPRECATION_VERSIONS 5.69 + EXCLUDE_DEPRECATED_BEFORE_AND_AT ${EXCLUDE_DEPRECATED_BEFORE_AND_AT} +) add_library(KF5::Prison ALIAS KF5Prison) target_include_directories(KF5Prison INTERFACE "$") diff --git a/src/lib/abstractbarcode.h b/src/lib/abstractbarcode.h --- a/src/lib/abstractbarcode.h +++ b/src/lib/abstractbarcode.h @@ -29,10 +29,15 @@ */ class PRISON_EXPORT AbstractBarcode { public: +#if PRISON_ENABLE_DEPRECATED_SINCE(5, 69) /** * creates a barcode generator without any data + * @deprecated since 5.69 Use Prison::createBarcode instead. */ + PRISON_DEPRECATED_VERSION(5, 69, "Use Prison::createBarcode()") AbstractBarcode(); +#endif + virtual ~AbstractBarcode(); /** * @return the QString encoded in this barcode. @@ -80,7 +85,25 @@ */ void setBackgroundColor(const QColor& backgroundcolor); + /** Dimensions of the barcode. + * @since 5.69 + */ + enum Dimensions : uint8_t { + NoDimensions, ///< Null barcode. + OneDimension, ///< One-dimensional barcode. + TwoDimensions ///< 2D matrix code. + }; + + /** Returns the amount of dimensions of the barcode. + * @since 5.69 + */ + Dimensions dimensions() const; + protected: + ///@cond internal + explicit AbstractBarcode(Dimensions dim); + ///@endcond + /** * Sets the minimum size for this barcode. * Some barcodes have minimum sizes for when they are readable and such diff --git a/src/lib/abstractbarcode.cpp b/src/lib/abstractbarcode.cpp --- a/src/lib/abstractbarcode.cpp +++ b/src/lib/abstractbarcode.cpp @@ -21,6 +21,7 @@ QColor m_foreground; QColor m_background; QSizeF m_minimum_size; + AbstractBarcode::Dimensions m_dimension = AbstractBarcode::NoDimensions; AbstractBarcode* q; bool sizeTooSmall(const QSizeF& size) { if(m_minimum_size.width() > size.width()) { @@ -36,9 +37,17 @@ * @endcond */ +#if PRISON_BUILD_DEPRECATED_SINCE(5, 69) AbstractBarcode::AbstractBarcode() : d(new AbstractBarcode::Private(this)) { } +#endif + +AbstractBarcode::AbstractBarcode(AbstractBarcode::Dimensions dim) : + d(new AbstractBarcode::Private(this)) +{ + d->m_dimension = dim; +} QString AbstractBarcode::data() const { return d->m_data; @@ -98,6 +107,11 @@ } } +AbstractBarcode::Dimensions AbstractBarcode::dimensions() const +{ + return d->m_dimension; +} + AbstractBarcode::~AbstractBarcode() { delete d; } diff --git a/src/lib/aztecbarcode.cpp b/src/lib/aztecbarcode.cpp --- a/src/lib/aztecbarcode.cpp +++ b/src/lib/aztecbarcode.cpp @@ -33,7 +33,7 @@ CompactLayerCount = 4 }; -AztecBarcode::AztecBarcode() = default; +AztecBarcode::AztecBarcode() : AbstractBarcode(AbstractBarcode::TwoDimensions) {} AztecBarcode::~AztecBarcode() = default; // encoding properties depending on layer count diff --git a/src/lib/code128barcode.cpp b/src/lib/code128barcode.cpp --- a/src/lib/code128barcode.cpp +++ b/src/lib/code128barcode.cpp @@ -38,7 +38,7 @@ LatchC = 99 }; -Code128Barcode::Code128Barcode() = default; +Code128Barcode::Code128Barcode() : AbstractBarcode(AbstractBarcode::OneDimension) {} Code128Barcode::~Code128Barcode() = default; QImage Code128Barcode::paintImage(const QSizeF& size) diff --git a/src/lib/code39barcode.cpp b/src/lib/code39barcode.cpp --- a/src/lib/code39barcode.cpp +++ b/src/lib/code39barcode.cpp @@ -69,7 +69,7 @@ } } -Code39Barcode::Code39Barcode() = default; +Code39Barcode::Code39Barcode() : AbstractBarcode(AbstractBarcode::OneDimension) {} Code39Barcode::~Code39Barcode() = default; QImage Code39Barcode::paintImage(const QSizeF& size) { diff --git a/src/lib/code93barcode.cpp b/src/lib/code93barcode.cpp --- a/src/lib/code93barcode.cpp +++ b/src/lib/code93barcode.cpp @@ -225,7 +225,7 @@ return check % 47; } -Code93Barcode::Code93Barcode() = default; +Code93Barcode::Code93Barcode() : AbstractBarcode(AbstractBarcode::OneDimension) {} Code93Barcode::~Code93Barcode() = default; QImage Code93Barcode::paintImage(const QSizeF& size) { diff --git a/src/lib/datamatrixbarcode.cpp b/src/lib/datamatrixbarcode.cpp --- a/src/lib/datamatrixbarcode.cpp +++ b/src/lib/datamatrixbarcode.cpp @@ -9,7 +9,7 @@ #include using namespace Prison; -DataMatrixBarcode::DataMatrixBarcode() = default; +DataMatrixBarcode::DataMatrixBarcode() : AbstractBarcode(AbstractBarcode::TwoDimensions) {} DataMatrixBarcode::~DataMatrixBarcode() = default; QImage DataMatrixBarcode::paintImage(const QSizeF& size) { diff --git a/src/lib/qrcodebarcode.cpp b/src/lib/qrcodebarcode.cpp --- a/src/lib/qrcodebarcode.cpp +++ b/src/lib/qrcodebarcode.cpp @@ -10,7 +10,7 @@ using namespace Prison; -QRCodeBarcode::QRCodeBarcode() = default; +QRCodeBarcode::QRCodeBarcode() : AbstractBarcode(AbstractBarcode::TwoDimensions) {} QRCodeBarcode::~QRCodeBarcode() = default; QImage QRCodeBarcode::paintImage(const QSizeF& size) { diff --git a/src/quick/barcodequickitem.h b/src/quick/barcodequickitem.h --- a/src/quick/barcodequickitem.h +++ b/src/quick/barcodequickitem.h @@ -25,6 +25,7 @@ Q_PROPERTY(BarcodeType barcodeType READ barcodeType WRITE setBarcodeType NOTIFY barcodeTypeChanged) Q_PROPERTY(QColor foregroundColor READ foregroundColor WRITE setForegroundColor NOTIFY foregroundColorChanged) Q_PROPERTY(QColor backgroundColor READ backgroundColor WRITE setBackgroundColor NOTIFY backgroundColorChanged) + Q_PROPERTY(Dimensions dimensions READ dimensions NOTIFY dimensionsChanged) public: enum BarcodeType { @@ -51,14 +52,23 @@ QColor backgroundColor() const; void setBackgroundColor(const QColor &color); + enum Dimensions { + NoDimensions, + OneDimension, + TwoDimensions + }; + Q_ENUM(Dimensions); + Dimensions dimensions() const; + void paint(QPainter *painter) override; void componentComplete() override; Q_SIGNALS: void contentChanged(); void barcodeTypeChanged(); void foregroundColorChanged(); void backgroundColorChanged(); + void dimensionsChanged(); private: void updateBarcode(); diff --git a/src/quick/barcodequickitem.cpp b/src/quick/barcodequickitem.cpp --- a/src/quick/barcodequickitem.cpp +++ b/src/quick/barcodequickitem.cpp @@ -77,6 +77,11 @@ updateBarcode(); } +BarcodeQuickItem::Dimensions Prison::BarcodeQuickItem::dimensions() const +{ + return m_barcode ? static_cast(m_barcode->dimensions()) : NoDimensions; +} + void BarcodeQuickItem::paint(QPainter* painter) { if (!m_barcode) @@ -105,6 +110,7 @@ if (m_type == Prison::Null || m_content.isEmpty()) { m_barcode.reset(); update(); + emit dimensionsChanged(); return; } @@ -120,4 +126,5 @@ } update(); + emit dimensionsChanged(); } diff --git a/tests/barcode.qml b/tests/barcode.qml --- a/tests/barcode.qml +++ b/tests/barcode.qml @@ -30,12 +30,22 @@ } Prison.Barcode { + id: barcode Layout.fillWidth: true Layout.fillHeight: true content: contentEdit.text barcodeType: typeCombobox.currentIndex // foregroundColor: "red" // backgroundColor: "green" } + + RowLayout { + Label { + text: "1D: " + (barcode.dimensions == Prison.Barcode.OneDimension) + } + Label { + text: "2D: " + (barcode.dimensions == 2) + } + } } }