From efe9d0228480e11b30569e52578adc8525f5d317 Mon Sep 17 00:00:00 2001 From: Oleksandr Movchan Date: Wed, 4 Feb 2026 22:46:07 +0200 Subject: [PATCH 1/9] Starting work on new example combining QmlBarcodeReader and QmlBarcodeGenerator --- examples/QmlBarcode/.gitignore | 4 + examples/QmlBarcode/CMakeLists.txt | 62 +++ examples/QmlBarcode/ColorController.cpp | 15 + examples/QmlBarcode/ColorController.h | 18 + examples/QmlBarcode/QmlBarcodeApp.pro | 38 ++ examples/QmlBarcode/Qt5qml.qrc | 17 + examples/QmlBarcode/Qt6qml.qrc | 12 + examples/QmlBarcode/VersionHelper.h | 21 + .../QmlBarcode/android/AndroidManifest.xml | 68 +++ examples/QmlBarcode/android/build.gradle | 82 ++++ examples/QmlBarcode/android/gradle.properties | 14 + .../android/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59536 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + examples/QmlBarcode/android/gradlew | 234 +++++++++ examples/QmlBarcode/android/gradlew.bat | 89 ++++ .../android/res/drawable-hdpi/icon.png | Bin 0 -> 4750 bytes .../android/res/drawable-ldpi/icon.png | Bin 0 -> 1633 bytes .../android/res/drawable-mdpi/icon.png | Bin 0 -> 2945 bytes .../android/res/drawable-xhdpi/icon.png | Bin 0 -> 8029 bytes .../android/res/drawable-xxhdpi/icon.png | Bin 0 -> 14136 bytes .../android/res/drawable-xxxhdpi/icon.png | Bin 0 -> 21651 bytes .../QmlBarcode/android/res/values/libs.xml | 20 + examples/QmlBarcode/cmake/Locations.cmake | 37 ++ examples/QmlBarcode/icons/logo.png | Bin 0 -> 2471 bytes examples/QmlBarcode/main.cpp | 48 ++ examples/QmlBarcode/qml/CButton.qml | 25 + examples/QmlBarcode/qml/CComboBox.qml | 19 + examples/QmlBarcode/qml/CTabButton.qml | 32 ++ examples/QmlBarcode/qml/CTextField.qml | 25 + examples/QmlBarcode/qml/GeneratorPage.qml | 447 ++++++++++++++++++ examples/QmlBarcode/qml/Qt5ScannerOverlay.qml | 30 ++ examples/QmlBarcode/qml/Qt5ScannerPage.qml | 98 ++++ examples/QmlBarcode/qml/Qt6ScannerOverlay.qml | 211 +++++++++ examples/QmlBarcode/qml/Qt6ScannerPage.qml | 94 ++++ examples/QmlBarcode/qml/Subtrack.qml | 28 ++ examples/QmlBarcode/qml/Theme.qml | 23 + examples/QmlBarcode/qml/main.qml | 91 ++++ examples/QmlBarcode/qrScanner/QrDecoder.cpp | 200 ++++++++ examples/QmlBarcode/qrScanner/QrDecoder.h | 113 +++++ .../QmlBarcode/qrScanner/QrScannerFilter.cpp | 126 +++++ .../QmlBarcode/qrScanner/QrScannerFilter.h | 125 +++++ examples/QmlBarcode/shaders/subtrack.frag | 22 + examples/QmlBarcode/shaders/subtrack.vert | 9 + 43 files changed, 2502 insertions(+) create mode 100644 examples/QmlBarcode/.gitignore create mode 100644 examples/QmlBarcode/CMakeLists.txt create mode 100644 examples/QmlBarcode/ColorController.cpp create mode 100644 examples/QmlBarcode/ColorController.h create mode 100644 examples/QmlBarcode/QmlBarcodeApp.pro create mode 100644 examples/QmlBarcode/Qt5qml.qrc create mode 100644 examples/QmlBarcode/Qt6qml.qrc create mode 100644 examples/QmlBarcode/VersionHelper.h create mode 100644 examples/QmlBarcode/android/AndroidManifest.xml create mode 100644 examples/QmlBarcode/android/build.gradle create mode 100644 examples/QmlBarcode/android/gradle.properties create mode 100644 examples/QmlBarcode/android/gradle/wrapper/gradle-wrapper.jar create mode 100644 examples/QmlBarcode/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 examples/QmlBarcode/android/gradlew create mode 100644 examples/QmlBarcode/android/gradlew.bat create mode 100644 examples/QmlBarcode/android/res/drawable-hdpi/icon.png create mode 100644 examples/QmlBarcode/android/res/drawable-ldpi/icon.png create mode 100644 examples/QmlBarcode/android/res/drawable-mdpi/icon.png create mode 100644 examples/QmlBarcode/android/res/drawable-xhdpi/icon.png create mode 100644 examples/QmlBarcode/android/res/drawable-xxhdpi/icon.png create mode 100644 examples/QmlBarcode/android/res/drawable-xxxhdpi/icon.png create mode 100644 examples/QmlBarcode/android/res/values/libs.xml create mode 100644 examples/QmlBarcode/cmake/Locations.cmake create mode 100644 examples/QmlBarcode/icons/logo.png create mode 100644 examples/QmlBarcode/main.cpp create mode 100644 examples/QmlBarcode/qml/CButton.qml create mode 100644 examples/QmlBarcode/qml/CComboBox.qml create mode 100644 examples/QmlBarcode/qml/CTabButton.qml create mode 100644 examples/QmlBarcode/qml/CTextField.qml create mode 100644 examples/QmlBarcode/qml/GeneratorPage.qml create mode 100644 examples/QmlBarcode/qml/Qt5ScannerOverlay.qml create mode 100644 examples/QmlBarcode/qml/Qt5ScannerPage.qml create mode 100644 examples/QmlBarcode/qml/Qt6ScannerOverlay.qml create mode 100644 examples/QmlBarcode/qml/Qt6ScannerPage.qml create mode 100644 examples/QmlBarcode/qml/Subtrack.qml create mode 100644 examples/QmlBarcode/qml/Theme.qml create mode 100644 examples/QmlBarcode/qml/main.qml create mode 100644 examples/QmlBarcode/qrScanner/QrDecoder.cpp create mode 100644 examples/QmlBarcode/qrScanner/QrDecoder.h create mode 100644 examples/QmlBarcode/qrScanner/QrScannerFilter.cpp create mode 100644 examples/QmlBarcode/qrScanner/QrScannerFilter.h create mode 100644 examples/QmlBarcode/shaders/subtrack.frag create mode 100644 examples/QmlBarcode/shaders/subtrack.vert diff --git a/examples/QmlBarcode/.gitignore b/examples/QmlBarcode/.gitignore new file mode 100644 index 0000000..ed2dcca --- /dev/null +++ b/examples/QmlBarcode/.gitignore @@ -0,0 +1,4 @@ +*.pro.user +*.pro.user* +build-* +*DS_Store diff --git a/examples/QmlBarcode/CMakeLists.txt b/examples/QmlBarcode/CMakeLists.txt new file mode 100644 index 0000000..f2e98d9 --- /dev/null +++ b/examples/QmlBarcode/CMakeLists.txt @@ -0,0 +1,62 @@ +cmake_minimum_required(VERSION 3.16.3) + +project(QmlBarcodeApp LANGUAGES CXX) + +set(CMAKE_INCLUDE_CURRENT_DIR ON) + +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTORCC ON) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +#Check this file for any *_DIR variable definitions and other +include("cmake/Locations.cmake") + +set(SOURCES + ColorController.h + ColorController.cpp + VersionHelper.h + main.cpp +) + +if(QT_VERSION_MAJOR EQUAL 5) + qt5_add_resources(RSCS Qt5qml.qrc) +else() + qt6_add_resources(RSCS Qt6qml.qrc) +endif() + +add_subdirectory(${LIB_DIR} ${CMAKE_BINARY_DIR}/SCodes) + +if(ANDROID) + if(QT_VERSION_MAJOR EQUAL 5) + set(ANDROID_MIN_SDK_VERSION 21) + set(ANDROID_ABI "armeabi-v7a") + set(QT_ANDROID_PACKAGE_SOURCE_DIR ${PROJECT_SOURCE_DIR}/android) + + set(ANDROID_SOURCES + ${QT_ANDROID_PACKAGE_SOURCE_DIR}/AndroidManifest.xml + ${QT_ANDROID_PACKAGE_SOURCE_DIR}/build.gradle + ${QT_ANDROID_PACKAGE_SOURCE_DIR}/gradle/wrapper/gradle-wrapper.jar + ${QT_ANDROID_PACKAGE_SOURCE_DIR}/gradle/wrapper/gradle-wrapper.properties + ${QT_ANDROID_PACKAGE_SOURCE_DIR}/gradlew + ${QT_ANDROID_PACKAGE_SOURCE_DIR}/res/values/libs.xml + ) + add_library(${PROJECT_NAME} SHARED ${SOURCES} ${RSCS} ${ANDROID_SOURCES}) + else() + qt_add_executable(${PROJECT_NAME} MANUAL_FINALIZATION ${SOURCES} ${RSCS}) + set_target_properties(${PROJECT_NAME} PROPERTIES + QT_ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android" + ) + endif() +else() + add_executable(${PROJECT_NAME} ${SOURCES} ${RSCS}) +endif() + +target_link_libraries(${PROJECT_NAME} PRIVATE ${REQUIRED_QT_LIBS} SCodes) + +if(QT_VERSION_MAJOR EQUAL 6) + qt_import_qml_plugins(${PROJECT_NAME}) + qt_finalize_executable(${PROJECT_NAME}) + qt_finalize_project(${PROJECT_NAME}) +endif() diff --git a/examples/QmlBarcode/ColorController.cpp b/examples/QmlBarcode/ColorController.cpp new file mode 100644 index 0000000..55b4463 --- /dev/null +++ b/examples/QmlBarcode/ColorController.cpp @@ -0,0 +1,15 @@ +#include "ColorController.h" + +ColorController::ColorController(QObject *parent) + : QObject{parent} +{} + +bool ColorController::checkColor(const QString &color) +{ + return QColor(color).isValid(); +} + +QColor ColorController::convertStringToColor(const QString &color) +{ + return QColor(color); +} diff --git a/examples/QmlBarcode/ColorController.h b/examples/QmlBarcode/ColorController.h new file mode 100644 index 0000000..d327bdb --- /dev/null +++ b/examples/QmlBarcode/ColorController.h @@ -0,0 +1,18 @@ +#ifndef COLORCONTROLLER_H +#define COLORCONTROLLER_H + +#include +#include + +class ColorController : public QObject +{ + Q_OBJECT +public: + explicit ColorController(QObject *parent = nullptr); + Q_INVOKABLE static QColor convertStringToColor(const QString &color); + +public slots: + bool checkColor(const QString &color); +}; + +#endif // COLORCONTROLLER_H diff --git a/examples/QmlBarcode/QmlBarcodeApp.pro b/examples/QmlBarcode/QmlBarcodeApp.pro new file mode 100644 index 0000000..c31ff66 --- /dev/null +++ b/examples/QmlBarcode/QmlBarcodeApp.pro @@ -0,0 +1,38 @@ +include("../../src/SCodes.pri") + +QT += quick +CONFIG += c++17 + +DEFINES += QT_DEPRECATED_WARNINGS + +SOURCES += \ + main.cpp + +equals(QT_MAJOR_VERSION, 6) { + RESOURCES += Qt6qml.qrc +} + +equals(QT_MAJOR_VERSION, 5) { + RESOURCES += Qt5qml.qrc +} + +# Default rules for deployment. +qnx: target.path = /tmp/$${TARGET}/bin +else: unix:!android: target.path = /opt/$${TARGET}/bin +!isEmpty(target.path): INSTALLS += target + +android { + DISTFILES += \ + android/AndroidManifest.xml \ + android/build.gradle \ + android/gradle/wrapper/gradle-wrapper.jar \ + android/gradle/wrapper/gradle-wrapper.properties \ + android/gradlew \ + android/gradlew.bat \ + android/res/values/libs.xml + + ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android + + ANDROID_ABIS = armeabi-v7a +} + diff --git a/examples/QmlBarcode/Qt5qml.qrc b/examples/QmlBarcode/Qt5qml.qrc new file mode 100644 index 0000000..fd2d1b6 --- /dev/null +++ b/examples/QmlBarcode/Qt5qml.qrc @@ -0,0 +1,17 @@ + + + qml/Qt5ScannerPage.qml + qml/Qt5ScannerOverlay.qml + qml/Theme.qml + qml/main.qml + qml/GeneratorPage.qml + qml/CButton.qml + qml/CTextField.qml + qml/CComboBox.qml + icons/logo.png + qml/CTabButton.qml + qml/Subtrack.qml + shaders/subtrack.frag + shaders/subtrack.vert + + diff --git a/examples/QmlBarcode/Qt6qml.qrc b/examples/QmlBarcode/Qt6qml.qrc new file mode 100644 index 0000000..e8013b7 --- /dev/null +++ b/examples/QmlBarcode/Qt6qml.qrc @@ -0,0 +1,12 @@ + + + qml/Qt6ScannerPage.qml + qml/Qt6ScannerOverlay.qml + qml/Theme.qml + qml/GeneratorPage.qml + qml/CButton.qml + qml/CTextField.qml + qml/CComboBox.qml + icons/logo.png + + diff --git a/examples/QmlBarcode/VersionHelper.h b/examples/QmlBarcode/VersionHelper.h new file mode 100644 index 0000000..9f26e87 --- /dev/null +++ b/examples/QmlBarcode/VersionHelper.h @@ -0,0 +1,21 @@ +#pragma once + +#include +#include + +class VersionHelper : public QObject +{ + Q_OBJECT + Q_PROPERTY(bool isQt6 READ isQt6 CONSTANT) + +public: + explicit VersionHelper(QObject *parent = nullptr) : QObject(parent) {} + + inline bool isQt6() const { +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + return true; +#else + return false; +#endif + } +}; diff --git a/examples/QmlBarcode/android/AndroidManifest.xml b/examples/QmlBarcode/android/AndroidManifest.xml new file mode 100644 index 0000000..9d38395 --- /dev/null +++ b/examples/QmlBarcode/android/AndroidManifest.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/QmlBarcode/android/build.gradle b/examples/QmlBarcode/android/build.gradle new file mode 100644 index 0000000..5378967 --- /dev/null +++ b/examples/QmlBarcode/android/build.gradle @@ -0,0 +1,82 @@ +buildscript { + repositories { + google() + mavenCentral() + } + + dependencies { + classpath 'com.android.tools.build:gradle:7.0.2' + } +} + +repositories { + google() + mavenCentral() +} + +apply plugin: 'com.android.application' + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar']) +} + +android { + /******************************************************* + * The following variables: + * - androidBuildToolsVersion, + * - androidCompileSdkVersion + * - qtAndroidDir - holds the path to qt android files + * needed to build any Qt application + * on Android. + * + * are defined in gradle.properties file. This file is + * updated by QtCreator and androiddeployqt tools. + * Changing them manually might break the compilation! + *******************************************************/ + + compileSdkVersion androidCompileSdkVersion.toInteger() + buildToolsVersion androidBuildToolsVersion + ndkVersion '22.1.7171670' + + sourceSets { + main { + manifest.srcFile 'AndroidManifest.xml' + java.srcDirs = [qtAndroidDir + '/src', 'src', 'java'] + aidl.srcDirs = [qtAndroidDir + '/src', 'src', 'aidl'] + res.srcDirs = [qtAndroidDir + '/res', 'res'] + resources.srcDirs = ['resources'] + renderscript.srcDirs = ['src'] + assets.srcDirs = ['assets'] + jniLibs.srcDirs = ['libs'] + } + } + + tasks.withType(JavaCompile) { + options.incremental = true + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + lintOptions { + abortOnError false + } + + // Do not compress Qt binary resources file + aaptOptions { + noCompress 'rcc' + } + + defaultConfig { + resConfig "en" + minSdkVersion qtMinSdkVersion + targetSdkVersion qtTargetSdkVersion + ndk.abiFilters = qtTargetAbiList.split(",") + + ndk { + abiFilters 'armeabi-v7a' + } + } +} diff --git a/examples/QmlBarcode/android/gradle.properties b/examples/QmlBarcode/android/gradle.properties new file mode 100644 index 0000000..53321a4 --- /dev/null +++ b/examples/QmlBarcode/android/gradle.properties @@ -0,0 +1,14 @@ +# Project-wide Gradle settings. +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +org.gradle.jvmargs=-Xmx512m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 + +# Enable building projects in parallel +org.gradle.parallel=true + +# Gradle caching allows reusing the build artifacts from a previous +# build with the same inputs. However, over time, the cache size will +# grow. Uncomment the following line to enable it. +#org.gradle.caching=true diff --git a/examples/QmlBarcode/android/gradle/wrapper/gradle-wrapper.jar b/examples/QmlBarcode/android/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..7454180f2ae8848c63b8b4dea2cb829da983f2fa GIT binary patch literal 59536 zcma&NbC71ylI~qywr$(CZQJHswz}-9F59+k+g;UV+cs{`J?GrGXYR~=-ydruB3JCa zB64N^cILAcWk5iofq)<(fq;O7{th4@;QxID0)qN`mJ?GIqLY#rX8-|G{5M0pdVW5^ zzXk$-2kQTAC?_N@B`&6-N-rmVFE=$QD?>*=4<|!MJu@}isLc4AW#{m2if&A5T5g&~ ziuMQeS*U5sL6J698wOd)K@oK@1{peP5&Esut<#VH^u)gp`9H4)`uE!2$>RTctN+^u z=ASkePDZA-X8)rp%D;p*~P?*a_=*Kwc<^>QSH|^<0>o37lt^+Mj1;4YvJ(JR-Y+?%Nu}JAYj5 z_Qc5%Ao#F?q32i?ZaN2OSNhWL;2oDEw_({7ZbgUjna!Fqn3NzLM@-EWFPZVmc>(fZ z0&bF-Ch#p9C{YJT9Rcr3+Y_uR^At1^BxZ#eo>$PLJF3=;t_$2|t+_6gg5(j{TmjYU zK12c&lE?Eh+2u2&6Gf*IdKS&6?rYbSEKBN!rv{YCm|Rt=UlPcW9j`0o6{66#y5t9C zruFA2iKd=H%jHf%ypOkxLnO8#H}#Zt{8p!oi6)7#NqoF({t6|J^?1e*oxqng9Q2Cc zg%5Vu!em)}Yuj?kaP!D?b?(C*w!1;>R=j90+RTkyEXz+9CufZ$C^umX^+4|JYaO<5 zmIM3#dv`DGM;@F6;(t!WngZSYzHx?9&$xEF70D1BvfVj<%+b#)vz)2iLCrTeYzUcL z(OBnNoG6Le%M+@2oo)&jdOg=iCszzv59e zDRCeaX8l1hC=8LbBt|k5?CXgep=3r9BXx1uR8!p%Z|0+4Xro=xi0G!e{c4U~1j6!) zH6adq0}#l{%*1U(Cb%4AJ}VLWKBPi0MoKFaQH6x?^hQ!6em@993xdtS%_dmevzeNl z(o?YlOI=jl(`L9^ z0O+H9k$_@`6L13eTT8ci-V0ljDMD|0ifUw|Q-Hep$xYj0hTO@0%IS^TD4b4n6EKDG z??uM;MEx`s98KYN(K0>c!C3HZdZ{+_53DO%9k5W%pr6yJusQAv_;IA}925Y%;+!tY z%2k!YQmLLOr{rF~!s<3-WEUs)`ix_mSU|cNRBIWxOox_Yb7Z=~Q45ZNe*u|m^|)d* zog=i>`=bTe!|;8F+#H>EjIMcgWcG2ORD`w0WD;YZAy5#s{65~qfI6o$+Ty&-hyMyJ z3Ra~t>R!p=5ZpxA;QkDAoPi4sYOP6>LT+}{xp}tk+<0k^CKCFdNYG(Es>p0gqD)jP zWOeX5G;9(m@?GOG7g;e74i_|SmE?`B2i;sLYwRWKLy0RLW!Hx`=!LH3&k=FuCsM=9M4|GqzA)anEHfxkB z?2iK-u(DC_T1};KaUT@3nP~LEcENT^UgPvp!QC@Dw&PVAhaEYrPey{nkcn(ro|r7XUz z%#(=$7D8uP_uU-oPHhd>>^adbCSQetgSG`e$U|7mr!`|bU0aHl_cmL)na-5x1#OsVE#m*+k84Y^+UMeSAa zbrVZHU=mFwXEaGHtXQq`2ZtjfS!B2H{5A<3(nb-6ARVV8kEmOkx6D2x7~-6hl;*-*}2Xz;J#a8Wn;_B5=m zl3dY;%krf?i-Ok^Pal-}4F`{F@TYPTwTEhxpZK5WCpfD^UmM_iYPe}wpE!Djai6_{ z*pGO=WB47#Xjb7!n2Ma)s^yeR*1rTxp`Mt4sfA+`HwZf%!7ZqGosPkw69`Ix5Ku6G z@Pa;pjzV&dn{M=QDx89t?p?d9gna*}jBly*#1!6}5K<*xDPJ{wv4& zM$17DFd~L*Te3A%yD;Dp9UGWTjRxAvMu!j^Tbc}2v~q^59d4bz zvu#!IJCy(BcWTc`;v$9tH;J%oiSJ_i7s;2`JXZF+qd4C)vY!hyCtl)sJIC{ebI*0> z@x>;EzyBv>AI-~{D6l6{ST=em*U( z(r$nuXY-#CCi^8Z2#v#UXOt`dbYN1z5jzNF2 z411?w)whZrfA20;nl&C1Gi+gk<`JSm+{|*2o<< zqM#@z_D`Cn|0H^9$|Tah)0M_X4c37|KQ*PmoT@%xHc3L1ZY6(p(sNXHa&49Frzto& zR`c~ClHpE~4Z=uKa5S(-?M8EJ$zt0&fJk~p$M#fGN1-y$7!37hld`Uw>Urri(DxLa;=#rK0g4J)pXMC zxzraOVw1+kNWpi#P=6(qxf`zSdUC?D$i`8ZI@F>k6k zz21?d+dw7b&i*>Kv5L(LH-?J%@WnqT7j#qZ9B>|Zl+=> z^U-pV@1y_ptHo4hl^cPRWewbLQ#g6XYQ@EkiP z;(=SU!yhjHp%1&MsU`FV1Z_#K1&(|5n(7IHbx&gG28HNT)*~-BQi372@|->2Aw5It z0CBpUcMA*QvsPy)#lr!lIdCi@1k4V2m!NH)%Px(vu-r(Q)HYc!p zJ^$|)j^E#q#QOgcb^pd74^JUi7fUmMiNP_o*lvx*q%_odv49Dsv$NV;6J z9GOXKomA{2Pb{w}&+yHtH?IkJJu~}Z?{Uk++2mB8zyvh*xhHKE``99>y#TdD z&(MH^^JHf;g(Tbb^&8P*;_i*2&fS$7${3WJtV7K&&(MBV2~)2KB3%cWg#1!VE~k#C z!;A;?p$s{ihyojEZz+$I1)L}&G~ml=udD9qh>Tu(ylv)?YcJT3ihapi!zgPtWb*CP zlLLJSRCj-^w?@;RU9aL2zDZY1`I3d<&OMuW=c3$o0#STpv_p3b9Wtbql>w^bBi~u4 z3D8KyF?YE?=HcKk!xcp@Cigvzy=lnFgc^9c%(^F22BWYNAYRSho@~*~S)4%AhEttv zvq>7X!!EWKG?mOd9&n>vvH1p4VzE?HCuxT-u+F&mnsfDI^}*-d00-KAauEaXqg3k@ zy#)MGX!X;&3&0s}F3q40ZmVM$(H3CLfpdL?hB6nVqMxX)q=1b}o_PG%r~hZ4gUfSp zOH4qlEOW4OMUc)_m)fMR_rl^pCfXc{$fQbI*E&mV77}kRF z&{<06AJyJ!e863o-V>FA1a9Eemx6>^F$~9ppt()ZbPGfg_NdRXBWoZnDy2;#ODgf! zgl?iOcF7Meo|{AF>KDwTgYrJLb$L2%%BEtO>T$C?|9bAB&}s;gI?lY#^tttY&hfr# zKhC+&b-rpg_?~uVK%S@mQleU#_xCsvIPK*<`E0fHE1&!J7!xD#IB|SSPW6-PyuqGn3^M^Rz%WT{e?OI^svARX&SAdU77V(C~ zM$H{Kg59op{<|8ry9ecfP%=kFm(-!W&?U0@<%z*+!*<e0XesMxRFu9QnGqun6R_%T+B%&9Dtk?*d$Q zb~>84jEAPi@&F@3wAa^Lzc(AJz5gsfZ7J53;@D<;Klpl?sK&u@gie`~vTsbOE~Cd4 z%kr56mI|#b(Jk&;p6plVwmNB0H@0SmgdmjIn5Ne@)}7Vty(yb2t3ev@22AE^s!KaN zyQ>j+F3w=wnx7w@FVCRe+`vUH)3gW%_72fxzqX!S&!dchdkRiHbXW1FMrIIBwjsai8`CB2r4mAbwp%rrO>3B$Zw;9=%fXI9B{d(UzVap7u z6piC-FQ)>}VOEuPpuqznpY`hN4dGa_1Xz9rVg(;H$5Te^F0dDv*gz9JS<|>>U0J^# z6)(4ICh+N_Q`Ft0hF|3fSHs*?a=XC;e`sJaU9&d>X4l?1W=|fr!5ShD|nv$GK;j46@BV6+{oRbWfqOBRb!ir88XD*SbC(LF}I1h#6@dvK%Toe%@ zhDyG$93H8Eu&gCYddP58iF3oQH*zLbNI;rN@E{T9%A8!=v#JLxKyUe}e}BJpB{~uN zqgxRgo0*-@-iaHPV8bTOH(rS(huwK1Xg0u+e!`(Irzu@Bld&s5&bWgVc@m7;JgELd zimVs`>vQ}B_1(2#rv#N9O`fJpVfPc7V2nv34PC);Dzbb;p!6pqHzvy?2pD&1NE)?A zt(t-ucqy@wn9`^MN5apa7K|L=9>ISC>xoc#>{@e}m#YAAa1*8-RUMKwbm|;5p>T`Z zNf*ph@tnF{gmDa3uwwN(g=`Rh)4!&)^oOy@VJaK4lMT&5#YbXkl`q?<*XtsqD z9PRK6bqb)fJw0g-^a@nu`^?71k|m3RPRjt;pIkCo1{*pdqbVs-Yl>4E>3fZx3Sv44grW=*qdSoiZ9?X0wWyO4`yDHh2E!9I!ZFi zVL8|VtW38}BOJHW(Ax#KL_KQzarbuE{(%TA)AY)@tY4%A%P%SqIU~8~-Lp3qY;U-} z`h_Gel7;K1h}7$_5ZZT0&%$Lxxr-<89V&&TCsu}LL#!xpQ1O31jaa{U34~^le*Y%L za?7$>Jk^k^pS^_M&cDs}NgXlR>16AHkSK-4TRaJSh#h&p!-!vQY%f+bmn6x`4fwTp z$727L^y`~!exvmE^W&#@uY!NxJi`g!i#(++!)?iJ(1)2Wk;RN zFK&O4eTkP$Xn~4bB|q8y(btx$R#D`O@epi4ofcETrx!IM(kWNEe42Qh(8*KqfP(c0 zouBl6>Fc_zM+V;F3znbo{x#%!?mH3`_ANJ?y7ppxS@glg#S9^MXu|FM&ynpz3o&Qh z2ujAHLF3($pH}0jXQsa#?t--TnF1P73b?4`KeJ9^qK-USHE)4!IYgMn-7z|=ALF5SNGkrtPG@Y~niUQV2?g$vzJN3nZ{7;HZHzWAeQ;5P|@Tl3YHpyznGG4-f4=XflwSJY+58-+wf?~Fg@1p1wkzuu-RF3j2JX37SQUc? zQ4v%`V8z9ZVZVqS8h|@@RpD?n0W<=hk=3Cf8R?d^9YK&e9ZybFY%jdnA)PeHvtBe- zhMLD+SSteHBq*q)d6x{)s1UrsO!byyLS$58WK;sqip$Mk{l)Y(_6hEIBsIjCr5t>( z7CdKUrJTrW%qZ#1z^n*Lb8#VdfzPw~OIL76aC+Rhr<~;4Tl!sw?Rj6hXj4XWa#6Tp z@)kJ~qOV)^Rh*-?aG>ic2*NlC2M7&LUzc9RT6WM%Cpe78`iAowe!>(T0jo&ivn8-7 zs{Qa@cGy$rE-3AY0V(l8wjI^uB8Lchj@?L}fYal^>T9z;8juH@?rG&g-t+R2dVDBe zq!K%{e-rT5jX19`(bP23LUN4+_zh2KD~EAYzhpEO3MUG8@}uBHH@4J zd`>_(K4q&>*k82(dDuC)X6JuPrBBubOg7qZ{?x!r@{%0);*`h*^F|%o?&1wX?Wr4b z1~&cy#PUuES{C#xJ84!z<1tp9sfrR(i%Tu^jnXy;4`Xk;AQCdFC@?V%|; zySdC7qS|uQRcH}EFZH%mMB~7gi}a0utE}ZE_}8PQH8f;H%PN41Cb9R%w5Oi5el^fd z$n{3SqLCnrF##x?4sa^r!O$7NX!}&}V;0ZGQ&K&i%6$3C_dR%I7%gdQ;KT6YZiQrW zk%q<74oVBV>@}CvJ4Wj!d^?#Zwq(b$E1ze4$99DuNg?6t9H}k_|D7KWD7i0-g*EO7 z;5{hSIYE4DMOK3H%|f5Edx+S0VI0Yw!tsaRS2&Il2)ea^8R5TG72BrJue|f_{2UHa z@w;^c|K3da#$TB0P3;MPlF7RuQeXT$ zS<<|C0OF(k)>fr&wOB=gP8!Qm>F41u;3esv7_0l%QHt(~+n; zf!G6%hp;Gfa9L9=AceiZs~tK+Tf*Wof=4!u{nIO90jH@iS0l+#%8=~%ASzFv7zqSB^?!@N7)kp0t&tCGLmzXSRMRyxCmCYUD2!B`? zhs$4%KO~m=VFk3Buv9osha{v+mAEq=ik3RdK@;WWTV_g&-$U4IM{1IhGX{pAu%Z&H zFfwCpUsX%RKg);B@7OUzZ{Hn{q6Vv!3#8fAg!P$IEx<0vAx;GU%}0{VIsmFBPq_mb zpe^BChDK>sc-WLKl<6 zwbW|e&d&dv9Wu0goueyu>(JyPx1mz0v4E?cJjFuKF71Q1)AL8jHO$!fYT3(;U3Re* zPPOe%*O+@JYt1bW`!W_1!mN&=w3G9ru1XsmwfS~BJ))PhD(+_J_^N6j)sx5VwbWK| zwRyC?W<`pOCY)b#AS?rluxuuGf-AJ=D!M36l{ua?@SJ5>e!IBr3CXIxWw5xUZ@Xrw z_R@%?{>d%Ld4p}nEsiA@v*nc6Ah!MUs?GA7e5Q5lPpp0@`%5xY$C;{%rz24$;vR#* zBP=a{)K#CwIY%p} zXVdxTQ^HS@O&~eIftU+Qt^~(DGxrdi3k}DdT^I7Iy5SMOp$QuD8s;+93YQ!OY{eB24%xY7ml@|M7I(Nb@K_-?F;2?et|CKkuZK_>+>Lvg!>JE~wN`BI|_h6$qi!P)+K-1Hh(1;a`os z55)4Q{oJiA(lQM#;w#Ta%T0jDNXIPM_bgESMCDEg6rM33anEr}=|Fn6)|jBP6Y}u{ zv9@%7*#RI9;fv;Yii5CI+KrRdr0DKh=L>)eO4q$1zmcSmglsV`*N(x=&Wx`*v!!hn6X-l0 zP_m;X??O(skcj+oS$cIdKhfT%ABAzz3w^la-Ucw?yBPEC+=Pe_vU8nd-HV5YX6X8r zZih&j^eLU=%*;VzhUyoLF;#8QsEfmByk+Y~caBqSvQaaWf2a{JKB9B>V&r?l^rXaC z8)6AdR@Qy_BxQrE2Fk?ewD!SwLuMj@&d_n5RZFf7=>O>hzVE*seW3U?_p|R^CfoY`?|#x9)-*yjv#lo&zP=uI`M?J zbzC<^3x7GfXA4{FZ72{PE*-mNHyy59Q;kYG@BB~NhTd6pm2Oj=_ zizmD?MKVRkT^KmXuhsk?eRQllPo2Ubk=uCKiZ&u3Xjj~<(!M94c)Tez@9M1Gfs5JV z->@II)CDJOXTtPrQudNjE}Eltbjq>6KiwAwqvAKd^|g!exgLG3;wP+#mZYr`cy3#39e653d=jrR-ulW|h#ddHu(m9mFoW~2yE zz5?dB%6vF}+`-&-W8vy^OCxm3_{02royjvmwjlp+eQDzFVEUiyO#gLv%QdDSI#3W* z?3!lL8clTaNo-DVJw@ynq?q!%6hTQi35&^>P85G$TqNt78%9_sSJt2RThO|JzM$iL zg|wjxdMC2|Icc5rX*qPL(coL!u>-xxz-rFiC!6hD1IR%|HSRsV3>Kq~&vJ=s3M5y8SG%YBQ|{^l#LGlg!D?E>2yR*eV%9m$_J6VGQ~AIh&P$_aFbh zULr0Z$QE!QpkP=aAeR4ny<#3Fwyw@rZf4?Ewq`;mCVv}xaz+3ni+}a=k~P+yaWt^L z@w67!DqVf7D%7XtXX5xBW;Co|HvQ8WR1k?r2cZD%U;2$bsM%u8{JUJ5Z0k= zZJARv^vFkmWx15CB=rb=D4${+#DVqy5$C%bf`!T0+epLJLnh1jwCdb*zuCL}eEFvE z{rO1%gxg>1!W(I!owu*mJZ0@6FM(?C+d*CeceZRW_4id*D9p5nzMY&{mWqrJomjIZ z97ZNnZ3_%Hx8dn;H>p8m7F#^2;T%yZ3H;a&N7tm=Lvs&lgJLW{V1@h&6Vy~!+Ffbb zv(n3+v)_D$}dqd!2>Y2B)#<+o}LH#%ogGi2-?xRIH)1!SD)u-L65B&bsJTC=LiaF+YOCif2dUX6uAA|#+vNR z>U+KQekVGon)Yi<93(d!(yw1h3&X0N(PxN2{%vn}cnV?rYw z$N^}_o!XUB!mckL`yO1rnUaI4wrOeQ(+&k?2mi47hzxSD`N#-byqd1IhEoh!PGq>t z_MRy{5B0eKY>;Ao3z$RUU7U+i?iX^&r739F)itdrTpAi-NN0=?^m%?{A9Ly2pVv>Lqs6moTP?T2-AHqFD-o_ znVr|7OAS#AEH}h8SRPQ@NGG47dO}l=t07__+iK8nHw^(AHx&Wb<%jPc$$jl6_p(b$ z)!pi(0fQodCHfM)KMEMUR&UID>}m^(!{C^U7sBDOA)$VThRCI0_+2=( zV8mMq0R(#z;C|7$m>$>`tX+T|xGt(+Y48@ZYu#z;0pCgYgmMVbFb!$?%yhZqP_nhn zy4<#3P1oQ#2b51NU1mGnHP$cf0j-YOgAA}A$QoL6JVLcmExs(kU{4z;PBHJD%_=0F z>+sQV`mzijSIT7xn%PiDKHOujX;n|M&qr1T@rOxTdxtZ!&u&3HHFLYD5$RLQ=heur zb>+AFokUVQeJy-#LP*^)spt{mb@Mqe=A~-4p0b+Bt|pZ+@CY+%x}9f}izU5;4&QFE zO1bhg&A4uC1)Zb67kuowWY4xbo&J=%yoXlFB)&$d*-}kjBu|w!^zbD1YPc0-#XTJr z)pm2RDy%J3jlqSMq|o%xGS$bPwn4AqitC6&e?pqWcjWPt{3I{>CBy;hg0Umh#c;hU3RhCUX=8aR>rmd` z7Orw(5tcM{|-^J?ZAA9KP|)X6n9$-kvr#j5YDecTM6n z&07(nD^qb8hpF0B^z^pQ*%5ePYkv&FabrlI61ntiVp!!C8y^}|<2xgAd#FY=8b*y( zuQOuvy2`Ii^`VBNJB&R!0{hABYX55ooCAJSSevl4RPqEGb)iy_0H}v@vFwFzD%>#I>)3PsouQ+_Kkbqy*kKdHdfkN7NBcq%V{x^fSxgXpg7$bF& zj!6AQbDY(1u#1_A#1UO9AxiZaCVN2F0wGXdY*g@x$ByvUA?ePdide0dmr#}udE%K| z3*k}Vv2Ew2u1FXBaVA6aerI36R&rzEZeDDCl5!t0J=ug6kuNZzH>3i_VN`%BsaVB3 zQYw|Xub_SGf{)F{$ZX5`Jc!X!;eybjP+o$I{Z^Hsj@D=E{MnnL+TbC@HEU2DjG{3-LDGIbq()U87x4eS;JXnSh;lRlJ z>EL3D>wHt-+wTjQF$fGyDO$>d+(fq@bPpLBS~xA~R=3JPbS{tzN(u~m#Po!?H;IYv zE;?8%^vle|%#oux(Lj!YzBKv+Fd}*Ur-dCBoX*t{KeNM*n~ZPYJ4NNKkI^MFbz9!v z4(Bvm*Kc!-$%VFEewYJKz-CQN{`2}KX4*CeJEs+Q(!kI%hN1!1P6iOq?ovz}X0IOi z)YfWpwW@pK08^69#wSyCZkX9?uZD?C^@rw^Y?gLS_xmFKkooyx$*^5#cPqntNTtSG zlP>XLMj2!VF^0k#ole7`-c~*~+_T5ls?x4)ah(j8vo_ zwb%S8qoaZqY0-$ZI+ViIA_1~~rAH7K_+yFS{0rT@eQtTAdz#8E5VpwnW!zJ_^{Utv zlW5Iar3V5t&H4D6A=>?mq;G92;1cg9a2sf;gY9pJDVKn$DYdQlvfXq}zz8#LyPGq@ z+`YUMD;^-6w&r-82JL7mA8&M~Pj@aK!m{0+^v<|t%APYf7`}jGEhdYLqsHW-Le9TL z_hZZ1gbrz7$f9^fAzVIP30^KIz!!#+DRLL+qMszvI_BpOSmjtl$hh;&UeM{ER@INV zcI}VbiVTPoN|iSna@=7XkP&-4#06C};8ajbxJ4Gcq8(vWv4*&X8bM^T$mBk75Q92j z1v&%a;OSKc8EIrodmIiw$lOES2hzGDcjjB`kEDfJe{r}yE6`eZL zEB`9u>Cl0IsQ+t}`-cx}{6jqcANucqIB>Qmga_&<+80E2Q|VHHQ$YlAt{6`Qu`HA3 z03s0-sSlwbvgi&_R8s={6<~M^pGvBNjKOa>tWenzS8s zR>L7R5aZ=mSU{f?ib4Grx$AeFvtO5N|D>9#)ChH#Fny2maHWHOf2G=#<9Myot#+4u zWVa6d^Vseq_0=#AYS(-m$Lp;*8nC_6jXIjEM`omUmtH@QDs3|G)i4j*#_?#UYVZvJ z?YjT-?!4Q{BNun;dKBWLEw2C-VeAz`%?A>p;)PL}TAZn5j~HK>v1W&anteARlE+~+ zj>c(F;?qO3pXBb|#OZdQnm<4xWmn~;DR5SDMxt0UK_F^&eD|KZ=O;tO3vy4@4h^;2 zUL~-z`-P1aOe?|ZC1BgVsL)2^J-&vIFI%q@40w0{jjEfeVl)i9(~bt2z#2Vm)p`V_ z1;6$Ae7=YXk#=Qkd24Y23t&GvRxaOoad~NbJ+6pxqzJ>FY#Td7@`N5xp!n(c!=RE& z&<<@^a$_Ys8jqz4|5Nk#FY$~|FPC0`*a5HH!|Gssa9=~66&xG9)|=pOOJ2KE5|YrR zw!w6K2aC=J$t?L-;}5hn6mHd%hC;p8P|Dgh6D>hGnXPgi;6r+eA=?f72y9(Cf_ho{ zH6#)uD&R=73^$$NE;5piWX2bzR67fQ)`b=85o0eOLGI4c-Tb@-KNi2pz=Ke@SDcPn za$AxXib84`!Sf;Z3B@TSo`Dz7GM5Kf(@PR>Ghzi=BBxK8wRp>YQoXm+iL>H*Jo9M3 z6w&E?BC8AFTFT&Tv8zf+m9<&S&%dIaZ)Aoqkak_$r-2{$d~0g2oLETx9Y`eOAf14QXEQw3tJne;fdzl@wV#TFXSLXM2428F-Q}t+n2g%vPRMUzYPvzQ9f# zu(liiJem9P*?0%V@RwA7F53r~|I!Ty)<*AsMX3J{_4&}{6pT%Tpw>)^|DJ)>gpS~1rNEh z0$D?uO8mG?H;2BwM5a*26^7YO$XjUm40XmBsb63MoR;bJh63J;OngS5sSI+o2HA;W zdZV#8pDpC9Oez&L8loZO)MClRz!_!WD&QRtQxnazhT%Vj6Wl4G11nUk8*vSeVab@N#oJ}`KyJv+8Mo@T1-pqZ1t|?cnaVOd;1(h9 z!$DrN=jcGsVYE-0-n?oCJ^4x)F}E;UaD-LZUIzcD?W^ficqJWM%QLy6QikrM1aKZC zi{?;oKwq^Vsr|&`i{jIphA8S6G4)$KGvpULjH%9u(Dq247;R#l&I0{IhcC|oBF*Al zvLo7Xte=C{aIt*otJD}BUq)|_pdR>{zBMT< z(^1RpZv*l*m*OV^8>9&asGBo8h*_4q*)-eCv*|Pq=XNGrZE)^(SF7^{QE_~4VDB(o zVcPA_!G+2CAtLbl+`=Q~9iW`4ZRLku!uB?;tWqVjB0lEOf}2RD7dJ=BExy=<9wkb- z9&7{XFA%n#JsHYN8t5d~=T~5DcW4$B%3M+nNvC2`0!#@sckqlzo5;hhGi(D9=*A4` z5ynobawSPRtWn&CDLEs3Xf`(8^zDP=NdF~F^s&={l7(aw&EG}KWpMjtmz7j_VLO;@ zM2NVLDxZ@GIv7*gzl1 zjq78tv*8#WSY`}Su0&C;2F$Ze(q>F(@Wm^Gw!)(j;dk9Ad{STaxn)IV9FZhm*n+U} zi;4y*3v%A`_c7a__DJ8D1b@dl0Std3F||4Wtvi)fCcBRh!X9$1x!_VzUh>*S5s!oq z;qd{J_r79EL2wIeiGAqFstWtkfIJpjVh%zFo*=55B9Zq~y0=^iqHWfQl@O!Ak;(o*m!pZqe9 z%U2oDOhR)BvW8&F70L;2TpkzIutIvNQaTjjs5V#8mV4!NQ}zN=i`i@WI1z0eN-iCS z;vL-Wxc^Vc_qK<5RPh(}*8dLT{~GzE{w2o$2kMFaEl&q zP{V=>&3kW7tWaK-Exy{~`v4J0U#OZBk{a9{&)&QG18L@6=bsZ1zC_d{{pKZ-Ey>I> z;8H0t4bwyQqgu4hmO`3|4K{R*5>qnQ&gOfdy?z`XD%e5+pTDzUt3`k^u~SaL&XMe= z9*h#kT(*Q9jO#w2Hd|Mr-%DV8i_1{J1MU~XJ3!WUplhXDYBpJH><0OU`**nIvPIof z|N8@I=wA)sf45SAvx||f?Z5uB$kz1qL3Ky_{%RPdP5iN-D2!p5scq}buuC00C@jom zhfGKm3|f?Z0iQ|K$Z~!`8{nmAS1r+fp6r#YDOS8V*;K&Gs7Lc&f^$RC66O|)28oh`NHy&vq zJh+hAw8+ybTB0@VhWN^0iiTnLsCWbS_y`^gs!LX!Lw{yE``!UVzrV24tP8o;I6-65 z1MUiHw^{bB15tmrVT*7-#sj6cs~z`wk52YQJ*TG{SE;KTm#Hf#a~|<(|ImHH17nNM z`Ub{+J3dMD!)mzC8b(2tZtokKW5pAwHa?NFiso~# z1*iaNh4lQ4TS)|@G)H4dZV@l*Vd;Rw;-;odDhW2&lJ%m@jz+Panv7LQm~2Js6rOW3 z0_&2cW^b^MYW3)@o;neZ<{B4c#m48dAl$GCc=$>ErDe|?y@z`$uq3xd(%aAsX)D%l z>y*SQ%My`yDP*zof|3@_w#cjaW_YW4BdA;#Glg1RQcJGY*CJ9`H{@|D+*e~*457kd z73p<%fB^PV!Ybw@)Dr%(ZJbX}xmCStCYv#K3O32ej{$9IzM^I{6FJ8!(=azt7RWf4 z7ib0UOPqN40X!wOnFOoddd8`!_IN~9O)#HRTyjfc#&MCZ zZAMzOVB=;qwt8gV?{Y2?b=iSZG~RF~uyx18K)IDFLl})G1v@$(s{O4@RJ%OTJyF+Cpcx4jmy|F3euCnMK!P2WTDu5j z{{gD$=M*pH!GGzL%P)V2*ROm>!$Y=z|D`!_yY6e7SU$~a5q8?hZGgaYqaiLnkK%?0 zs#oI%;zOxF@g*@(V4p!$7dS1rOr6GVs6uYCTt2h)eB4?(&w8{#o)s#%gN@BBosRUe z)@P@8_Zm89pr~)b>e{tbPC~&_MR--iB{=)y;INU5#)@Gix-YpgP<-c2Ms{9zuCX|3 z!p(?VaXww&(w&uBHzoT%!A2=3HAP>SDxcljrego7rY|%hxy3XlODWffO_%g|l+7Y_ zqV(xbu)s4lV=l7M;f>vJl{`6qBm>#ZeMA}kXb97Z)?R97EkoI?x6Lp0yu1Z>PS?2{ z0QQ(8D)|lc9CO3B~e(pQM&5(1y&y=e>C^X$`)_&XuaI!IgDTVqt31wX#n+@!a_A0ZQkA zCJ2@M_4Gb5MfCrm5UPggeyh)8 zO9?`B0J#rkoCx(R0I!ko_2?iO@|oRf1;3r+i)w-2&j?=;NVIdPFsB)`|IC0zk6r9c zRrkfxWsiJ(#8QndNJj@{@WP2Ackr|r1VxV{7S&rSU(^)-M8gV>@UzOLXu9K<{6e{T zXJ6b92r$!|lwjhmgqkdswY&}c)KW4A)-ac%sU;2^fvq7gfUW4Bw$b!i@duy1CAxSn z(pyh$^Z=&O-q<{bZUP+$U}=*#M9uVc>CQVgDs4swy5&8RAHZ~$)hrTF4W zPsSa~qYv_0mJnF89RnnJTH`3}w4?~epFl=D(35$ zWa07ON$`OMBOHgCmfO(9RFc<)?$x)N}Jd2A(<*Ll7+4jrRt9w zwGxExUXd9VB#I|DwfxvJ;HZ8Q{37^wDhaZ%O!oO(HpcqfLH%#a#!~;Jl7F5>EX_=8 z{()l2NqPz>La3qJR;_v+wlK>GsHl;uRA8%j`A|yH@k5r%55S9{*Cp%uw6t`qc1!*T za2OeqtQj7sAp#Q~=5Fs&aCR9v>5V+s&RdNvo&H~6FJOjvaj--2sYYBvMq;55%z8^o z|BJDA4vzfow#DO#ZQHh;Oq_{r+qP{R9ox2TOgwQiv7Ow!zjN+A@BN;0tA2lUb#+zO z(^b89eV)D7UVE+h{mcNc6&GtpOqDn_?VAQ)Vob$hlFwW%xh>D#wml{t&Ofmm_d_+; zKDxzdr}`n2Rw`DtyIjrG)eD0vut$}dJAZ0AohZ+ZQdWXn_Z@dI_y=7t3q8x#pDI-K z2VVc&EGq445Rq-j0=U=Zx`oBaBjsefY;%)Co>J3v4l8V(T8H?49_@;K6q#r~Wwppc z4XW0(4k}cP=5ex>-Xt3oATZ~bBWKv)aw|I|Lx=9C1s~&b77idz({&q3T(Y(KbWO?+ zmcZ6?WeUsGk6>km*~234YC+2e6Zxdl~<_g2J|IE`GH%n<%PRv-50; zH{tnVts*S5*_RxFT9eM0z-pksIb^drUq4>QSww=u;UFCv2AhOuXE*V4z?MM`|ABOC4P;OfhS(M{1|c%QZ=!%rQTDFx`+}?Kdx$&FU?Y<$x;j7z=(;Lyz+?EE>ov!8vvMtSzG!nMie zsBa9t8as#2nH}n8xzN%W%U$#MHNXmDUVr@GX{?(=yI=4vks|V)!-W5jHsU|h_&+kY zS_8^kd3jlYqOoiI`ZqBVY!(UfnAGny!FowZWY_@YR0z!nG7m{{)4OS$q&YDyw6vC$ zm4!$h>*|!2LbMbxS+VM6&DIrL*X4DeMO!@#EzMVfr)e4Tagn~AQHIU8?e61TuhcKD zr!F4(kEebk(Wdk-?4oXM(rJwanS>Jc%<>R(siF+>+5*CqJLecP_we33iTFTXr6W^G z7M?LPC-qFHK;E!fxCP)`8rkxZyFk{EV;G-|kwf4b$c1k0atD?85+|4V%YATWMG|?K zLyLrws36p%Qz6{}>7b>)$pe>mR+=IWuGrX{3ZPZXF3plvuv5Huax86}KX*lbPVr}L z{C#lDjdDeHr~?l|)Vp_}T|%$qF&q#U;ClHEPVuS+Jg~NjC1RP=17=aQKGOcJ6B3mp z8?4*-fAD~}sX*=E6!}^u8)+m2j<&FSW%pYr_d|p_{28DZ#Cz0@NF=gC-o$MY?8Ca8 zr5Y8DSR^*urS~rhpX^05r30Ik#2>*dIOGxRm0#0YX@YQ%Mg5b6dXlS!4{7O_kdaW8PFSdj1=ryI-=5$fiieGK{LZ+SX(1b=MNL!q#lN zv98?fqqTUH8r8C7v(cx#BQ5P9W>- zmW93;eH6T`vuJ~rqtIBg%A6>q>gnWb3X!r0wh_q;211+Om&?nvYzL1hhtjB zK_7G3!n7PL>d!kj){HQE zE8(%J%dWLh1_k%gVXTZt zEdT09XSKAx27Ncaq|(vzL3gm83q>6CAw<$fTnMU05*xAe&rDfCiu`u^1)CD<>sx0i z*hr^N_TeN89G(nunZoLBf^81#pmM}>JgD@Nn1l*lN#a=B=9pN%tmvYFjFIoKe_(GF z-26x{(KXdfsQL7Uv6UtDuYwV`;8V3w>oT_I<`Ccz3QqK9tYT5ZQzbop{=I=!pMOCb zCU68`n?^DT%^&m>A%+-~#lvF!7`L7a{z<3JqIlk1$<||_J}vW1U9Y&eX<}l8##6i( zZcTT@2`9(Mecptm@{3A_Y(X`w9K0EwtPq~O!16bq{7c0f7#(3wn-^)h zxV&M~iiF!{-6A@>o;$RzQ5A50kxXYj!tcgme=Qjrbje~;5X2xryU;vH|6bE(8z^<7 zQ>BG7_c*JG8~K7Oe68i#0~C$v?-t@~@r3t2inUnLT(c=URpA9kA8uq9PKU(Ps(LVH zqgcqW>Gm?6oV#AldDPKVRcEyQIdTT`Qa1j~vS{<;SwyTdr&3*t?J)y=M7q*CzucZ&B0M=joT zBbj@*SY;o2^_h*>R0e({!QHF0=)0hOj^B^d*m>SnRrwq>MolNSgl^~r8GR#mDWGYEIJA8B<|{{j?-7p zVnV$zancW3&JVDtVpIlI|5djKq0(w$KxEFzEiiL=h5Jw~4Le23@s(mYyXWL9SX6Ot zmb)sZaly_P%BeX_9 zw&{yBef8tFm+%=--m*J|o~+Xg3N+$IH)t)=fqD+|fEk4AAZ&!wcN5=mi~Vvo^i`}> z#_3ahR}Ju)(Px7kev#JGcSwPXJ2id9%Qd2A#Uc@t8~egZ8;iC{e! z%=CGJOD1}j!HW_sgbi_8suYnn4#Ou}%9u)dXd3huFIb!ytlX>Denx@pCS-Nj$`VO&j@(z!kKSP0hE4;YIP#w9ta=3DO$7f*x zc9M4&NK%IrVmZAe=r@skWD`AEWH=g+r|*13Ss$+{c_R!b?>?UaGXlw*8qDmY#xlR= z<0XFbs2t?8i^G~m?b|!Hal^ZjRjt<@a? z%({Gn14b4-a|#uY^=@iiKH+k?~~wTj5K1A&hU z2^9-HTC)7zpoWK|$JXaBL6C z#qSNYtY>65T@Zs&-0cHeu|RX(Pxz6vTITdzJdYippF zC-EB+n4}#lM7`2Ry~SO>FxhKboIAF#Z{1wqxaCb{#yEFhLuX;Rx(Lz%T`Xo1+a2M}7D+@wol2)OJs$TwtRNJ={( zD@#zTUEE}#Fz#&(EoD|SV#bayvr&E0vzmb%H?o~46|FAcx?r4$N z&67W3mdip-T1RIxwSm_&(%U|+WvtGBj*}t69XVd&ebn>KOuL(7Y8cV?THd-(+9>G7*Nt%T zcH;`p={`SOjaf7hNd(=37Lz3-51;58JffzIPgGs_7xIOsB5p2t&@v1mKS$2D$*GQ6 zM(IR*j4{nri7NMK9xlDy-hJW6sW|ZiDRaFiayj%;(%51DN!ZCCCXz+0Vm#};70nOx zJ#yA0P3p^1DED;jGdPbQWo0WATN=&2(QybbVdhd=Vq*liDk`c7iZ?*AKEYC#SY&2g z&Q(Ci)MJ{mEat$ZdSwTjf6h~roanYh2?9j$CF@4hjj_f35kTKuGHvIs9}Re@iKMxS-OI*`0S z6s)fOtz}O$T?PLFVSeOjSO26$@u`e<>k(OSP!&YstH3ANh>)mzmKGNOwOawq-MPXe zy4xbeUAl6tamnx))-`Gi2uV5>9n(73yS)Ukma4*7fI8PaEwa)dWHs6QA6>$}7?(L8 ztN8M}?{Tf!Zu22J5?2@95&rQ|F7=FK-hihT-vDp!5JCcWrVogEnp;CHenAZ)+E+K5 z$Cffk5sNwD_?4+ymgcHR(5xgt20Z8M`2*;MzOM#>yhk{r3x=EyM226wb&!+j`W<%* zSc&|`8!>dn9D@!pYow~(DsY_naSx7(Z4i>cu#hA5=;IuI88}7f%)bRkuY2B;+9Uep zpXcvFWkJ!mQai63BgNXG26$5kyhZ2&*3Q_tk)Ii4M>@p~_~q_cE!|^A;_MHB;7s#9 zKzMzK{lIxotjc};k67^Xsl-gS!^*m*m6kn|sbdun`O?dUkJ{0cmI0-_2y=lTAfn*Y zKg*A-2sJq)CCJgY0LF-VQvl&6HIXZyxo2#!O&6fOhbHXC?%1cMc6y^*dOS{f$=137Ds1m01qs`>iUQ49JijsaQ( zksqV9@&?il$|4Ua%4!O15>Zy&%gBY&wgqB>XA3!EldQ%1CRSM(pp#k~-pkcCg4LAT zXE=puHbgsw)!xtc@P4r~Z}nTF=D2~j(6D%gTBw$(`Fc=OOQ0kiW$_RDd=hcO0t97h zb86S5r=>(@VGy1&#S$Kg_H@7G^;8Ue)X5Y+IWUi`o;mpvoV)`fcVk4FpcT|;EG!;? zHG^zrVVZOm>1KFaHlaogcWj(v!S)O(Aa|Vo?S|P z5|6b{qkH(USa*Z7-y_Uvty_Z1|B{rTS^qmEMLEYUSk03_Fg&!O3BMo{b^*`3SHvl0 zhnLTe^_vVIdcSHe)SQE}r~2dq)VZJ!aSKR?RS<(9lzkYo&dQ?mubnWmgMM37Nudwo z3Vz@R{=m2gENUE3V4NbIzAA$H1z0pagz94-PTJyX{b$yndsdKptmlKQKaaHj@3=ED zc7L?p@%ui|RegVYutK$64q4pe9+5sv34QUpo)u{1ci?)_7gXQd{PL>b0l(LI#rJmN zGuO+%GO`xneFOOr4EU(Wg}_%bhzUf;d@TU+V*2#}!2OLwg~%D;1FAu=Un>OgjPb3S z7l(riiCwgghC=Lm5hWGf5NdGp#01xQ59`HJcLXbUR3&n%P(+W2q$h2Qd z*6+-QXJ*&Kvk9ht0f0*rO_|FMBALen{j7T1l%=Q>gf#kma zQlg#I9+HB+z*5BMxdesMND`_W;q5|FaEURFk|~&{@qY32N$G$2B=&Po{=!)x5b!#n zxLzblkq{yj05#O7(GRuT39(06FJlalyv<#K4m}+vs>9@q-&31@1(QBv82{}Zkns~K ze{eHC_RDX0#^A*JQTwF`a=IkE6Ze@j#-8Q`tTT?k9`^ZhA~3eCZJ-Jr{~7Cx;H4A3 zcZ+Zj{mzFZbVvQ6U~n>$U2ZotGsERZ@}VKrgGh0xM;Jzt29%TX6_&CWzg+YYMozrM z`nutuS)_0dCM8UVaKRj804J4i%z2BA_8A4OJRQ$N(P9Mfn-gF;4#q788C@9XR0O3< zsoS4wIoyt046d+LnSCJOy@B@Uz*#GGd#+Ln1ek5Dv>(ZtD@tgZlPnZZJGBLr^JK+!$$?A_fA3LOrkoDRH&l7 zcMcD$Hsjko3`-{bn)jPL6E9Ds{WskMrivsUu5apD z?grQO@W7i5+%X&E&p|RBaEZ(sGLR@~(y^BI@lDMot^Ll?!`90KT!JXUhYS`ZgX3jnu@Ja^seA*M5R@f`=`ynQV4rc$uT1mvE?@tz)TN<=&H1%Z?5yjxcpO+6y_R z6EPuPKM5uxKpmZfT(WKjRRNHs@ib)F5WAP7QCADvmCSD#hPz$V10wiD&{NXyEwx5S z6NE`3z!IS^$s7m}PCwQutVQ#~w+V z=+~->DI*bR2j0^@dMr9`p>q^Ny~NrAVxrJtX2DUveic5vM%#N*XO|?YAWwNI$Q)_) zvE|L(L1jP@F%gOGtnlXtIv2&1i8q<)Xfz8O3G^Ea~e*HJsQgBxWL(yuLY+jqUK zRE~`-zklrGog(X}$9@ZVUw!8*=l`6mzYLtsg`AvBYz(cxmAhr^j0~(rzXdiOEeu_p zE$sf2(w(BPAvO5DlaN&uQ$4@p-b?fRs}d7&2UQ4Fh?1Hzu*YVjcndqJLw0#q@fR4u zJCJ}>_7-|QbvOfylj+e^_L`5Ep9gqd>XI3-O?Wp z-gt*P29f$Tx(mtS`0d05nHH=gm~Po_^OxxUwV294BDKT>PHVlC5bndncxGR!n(OOm znsNt@Q&N{TLrmsoKFw0&_M9$&+C24`sIXGWgQaz=kY;S{?w`z^Q0JXXBKFLj0w0U6P*+jPKyZHX9F#b0D1$&(- zrm8PJd?+SrVf^JlfTM^qGDK&-p2Kdfg?f>^%>1n8bu&byH(huaocL>l@f%c*QkX2i znl}VZ4R1en4S&Bcqw?$=Zi7ohqB$Jw9x`aM#>pHc0x z0$!q7iFu zZ`tryM70qBI6JWWTF9EjgG@>6SRzsd}3h+4D8d~@CR07P$LJ}MFsYi-*O%XVvD@yT|rJ+Mk zDllJ7$n0V&A!0flbOf)HE6P_afPWZmbhpliqJuw=-h+r;WGk|ntkWN(8tKlYpq5Ow z(@%s>IN8nHRaYb*^d;M(D$zGCv5C|uqmsDjwy4g=Lz>*OhO3z=)VD}C<65;`89Ye} zSCxrv#ILzIpEx1KdLPlM&%Cctf@FqTKvNPXC&`*H9=l=D3r!GLM?UV zOxa(8ZsB`&+76S-_xuj?G#wXBfDY@Z_tMpXJS7^mp z@YX&u0jYw2A+Z+bD#6sgVK5ZgdPSJV3>{K^4~%HV?rn~4D)*2H!67Y>0aOmzup`{D zzDp3c9yEbGCY$U<8biJ_gB*`jluz1ShUd!QUIQJ$*1;MXCMApJ^m*Fiv88RZ zFopLViw}{$Tyhh_{MLGIE2~sZ)t0VvoW%=8qKZ>h=adTe3QM$&$PO2lfqH@brt!9j ziePM8$!CgE9iz6B<6_wyTQj?qYa;eC^{x_0wuwV~W+^fZmFco-o%wsKSnjXFEx02V zF5C2t)T6Gw$Kf^_c;Ei3G~uC8SM-xyycmXyC2hAVi-IfXqhu$$-C=*|X?R0~hu z8`J6TdgflslhrmDZq1f?GXF7*ALeMmOEpRDg(s*H`4>_NAr`2uqF;k;JQ+8>A|_6ZNsNLECC%NNEb1Y1dP zbIEmNpK)#XagtL4R6BC{C5T(+=yA-(Z|Ap}U-AfZM#gwVpus3(gPn}Q$CExObJ5AC z)ff9Yk?wZ}dZ-^)?cbb9Fw#EjqQ8jxF4G3=L?Ra zg_)0QDMV1y^A^>HRI$x?Op@t;oj&H@1xt4SZ9(kifQ zb59B*`M99Td7@aZ3UWvj1rD0sE)d=BsBuW*KwkCds7ay(7*01_+L}b~7)VHI>F_!{ zyxg-&nCO?v#KOUec0{OOKy+sjWA;8rTE|Lv6I9H?CI?H(mUm8VXGwU$49LGpz&{nQp2}dinE1@lZ1iox6{ghN&v^GZv9J${7WaXj)<0S4g_uiJ&JCZ zr8-hsu`U%N;+9N^@&Q0^kVPB3)wY(rr}p7{p0qFHb3NUUHJb672+wRZs`gd1UjKPX z4o6zljKKA+Kkj?H>Ew63o%QjyBk&1!P22;MkD>sM0=z_s-G{mTixJCT9@_|*(p^bz zJ8?ZZ&;pzV+7#6Mn`_U-)k8Pjg?a;|Oe^us^PoPY$Va~yi8|?+&=y$f+lABT<*pZr zP}D{~Pq1Qyni+@|aP;ixO~mbEW9#c0OU#YbDZIaw=_&$K%Ep2f%hO^&P67hApZe`x zv8b`Mz@?M_7-)b!lkQKk)JXXUuT|B8kJlvqRmRpxtQDgvrHMXC1B$M@Y%Me!BSx3P z#2Eawl$HleZhhTS6Txm>lN_+I`>eV$&v9fOg)%zVn3O5mI*lAl>QcHuW6!Kixmq`X zBCZ*Ck6OYtDiK!N47>jxI&O2a9x7M|i^IagRr-fmrmikEQGgw%J7bO|)*$2FW95O4 zeBs>KR)izRG1gRVL;F*sr8A}aRHO0gc$$j&ds8CIO1=Gwq1%_~E)CWNn9pCtBE}+`Jelk4{>S)M)`Ll=!~gnn1yq^EX(+y*ik@3Ou0qU`IgYi3*doM+5&dU!cho$pZ zn%lhKeZkS72P?Cf68<#kll_6OAO26bIbueZx**j6o;I0cS^XiL`y+>{cD}gd%lux} z)3N>MaE24WBZ}s0ApfdM;5J_Ny}rfUyxfkC``Awo2#sgLnGPewK};dORuT?@I6(5~ z?kE)Qh$L&fwJXzK){iYx!l5$Tt|^D~MkGZPA}(o6f7w~O2G6Vvzdo*a;iXzk$B66$ zwF#;wM7A+(;uFG4+UAY(2`*3XXx|V$K8AYu#ECJYSl@S=uZW$ksfC$~qrrbQj4??z-)uz0QL}>k^?fPnJTPw% zGz)~?B4}u0CzOf@l^um}HZzbaIwPmb<)< zi_3@E9lc)Qe2_`*Z^HH;1CXOceL=CHpHS{HySy3T%<^NrWQ}G0i4e1xm_K3(+~oi$ zoHl9wzb?Z4j#90DtURtjtgvi7uw8DzHYmtPb;?%8vb9n@bszT=1qr)V_>R%s!92_` zfnHQPANx z<#hIjIMm#*(v*!OXtF+w8kLu`o?VZ5k7{`vw{Yc^qYclpUGIM_PBN1+c{#Vxv&E*@ zxg=W2W~JuV{IuRYw3>LSI1)a!thID@R=bU+cU@DbR^_SXY`MC7HOsCN z!dO4OKV7(E_Z8T#8MA1H`99?Z!r0)qKW_#|29X3#Jb+5+>qUidbeP1NJ@)(qi2S-X zao|f0_tl(O+$R|Qwd$H{_ig|~I1fbp_$NkI!0E;Y z6JrnU{1Ra6^on{9gUUB0mwzP3S%B#h0fjo>JvV~#+X0P~JV=IG=yHG$O+p5O3NUgG zEQ}z6BTp^Fie)Sg<){Z&I8NwPR(=mO4joTLHkJ>|Tnk23E(Bo`FSbPc05lF2-+)X? z6vV3*m~IBHTy*^E!<0nA(tCOJW2G4DsH7)BxLV8kICn5lu6@U*R`w)o9;Ro$i8=Q^V%uH8n3q=+Yf;SFRZu z!+F&PKcH#8cG?aSK_Tl@K9P#8o+jry@gdexz&d(Q=47<7nw@e@FFfIRNL9^)1i@;A z28+$Z#rjv-wj#heI|<&J_DiJ*s}xd-f!{J8jfqOHE`TiHHZVIA8CjkNQ_u;Ery^^t zl1I75&u^`1_q)crO+JT4rx|z2ToSC>)Or@-D zy3S>jW*sNIZR-EBsfyaJ+Jq4BQE4?SePtD2+jY8*%FsSLZ9MY>+wk?}}}AFAw)vr{ml)8LUG-y9>^t!{~|sgpxYc0Gnkg`&~R z-pilJZjr@y5$>B=VMdZ73svct%##v%wdX~9fz6i3Q-zOKJ9wso+h?VME7}SjL=!NUG{J?M&i!>ma`eoEa@IX`5G>B1(7;%}M*%-# zfhJ(W{y;>MRz!Ic8=S}VaBKqh;~7KdnGEHxcL$kA-6E~=!hrN*zw9N+_=odt<$_H_8dbo;0=42wcAETPCVGUr~v(`Uai zb{=D!Qc!dOEU6v)2eHSZq%5iqK?B(JlCq%T6av$Cb4Rko6onlG&?CqaX7Y_C_cOC3 zYZ;_oI(}=>_07}Oep&Ws7x7-R)cc8zfe!SYxJYP``pi$FDS)4Fvw5HH=FiU6xfVqIM!hJ;Rx8c0cB7~aPtNH(Nmm5Vh{ibAoU#J6 zImRCr?(iyu_4W_6AWo3*vxTPUw@vPwy@E0`(>1Qi=%>5eSIrp^`` zK*Y?fK_6F1W>-7UsB)RPC4>>Ps9)f+^MqM}8AUm@tZ->j%&h1M8s*s!LX5&WxQcAh z8mciQej@RPm?660%>{_D+7er>%zX_{s|$Z+;G7_sfNfBgY(zLB4Ey}J9F>zX#K0f6 z?dVNIeEh?EIShmP6>M+d|0wMM85Sa4diw1hrg|ITJ}JDg@o8y>(rF9mXk5M z2@D|NA)-7>wD&wF;S_$KS=eE84`BGw3g0?6wGxu8ys4rwI?9U=*^VF22t3%mbGeOh z`!O-OpF7#Vceu~F`${bW0nYVU9ecmk31V{tF%iv&5hWofC>I~cqAt@u6|R+|HLMMX zVxuSlMFOK_EQ86#E8&KwxIr8S9tj_goWtLv4f@!&h8;Ov41{J~496vp9vX=(LK#j! zAwi*21RAV-LD>9Cw3bV_9X(X3)Kr0-UaB*7Y>t82EQ%!)(&(XuAYtTsYy-dz+w=$ir)VJpe!_$ z6SGpX^i(af3{o=VlFPC);|J8#(=_8#vdxDe|Cok+ANhYwbE*FO`Su2m1~w+&9<_9~ z-|tTU_ACGN`~CNW5WYYBn^B#SwZ(t4%3aPp z;o)|L6Rk569KGxFLUPx@!6OOa+5OjQLK5w&nAmwxkC5rZ|m&HT8G%GVZxB_@ME z>>{rnXUqyiJrT(8GMj_ap#yN_!9-lO5e8mR3cJiK3NE{_UM&=*vIU`YkiL$1%kf+1 z4=jk@7EEj`u(jy$HnzE33ZVW_J4bj}K;vT?T91YlO(|Y0FU4r+VdbmQ97%(J5 zkK*Bed8+C}FcZ@HIgdCMioV%A<*4pw_n}l*{Cr4}a(lq|injK#O?$tyvyE`S%(1`H z_wwRvk#13ElkZvij2MFGOj`fhy?nC^8`Zyo%yVcUAfEr8x&J#A{|moUBAV_^f$hpaUuyQeY3da^ zS9iRgf87YBwfe}>BO+T&Fl%rfpZh#+AM?Dq-k$Bq`vG6G_b4z%Kbd&v>qFjow*mBl z-OylnqOpLg}or7_VNwRg2za3VBK6FUfFX{|TD z`Wt0Vm2H$vdlRWYQJqDmM?JUbVqL*ZQY|5&sY*?!&%P8qhA~5+Af<{MaGo(dl&C5t zE%t!J0 zh6jqANt4ABdPxSTrVV}fLsRQal*)l&_*rFq(Ez}ClEH6LHv{J#v?+H-BZ2)Wy{K@9 z+ovXHq~DiDvm>O~r$LJo!cOuwL+Oa--6;UFE2q@g3N8Qkw5E>ytz^(&($!O47+i~$ zKM+tkAd-RbmP{s_rh+ugTD;lriL~`Xwkad#;_aM?nQ7L_muEFI}U_4$phjvYgleK~`Fo`;GiC07&Hq1F<%p;9Q;tv5b?*QnR%8DYJH3P>Svmv47Y>*LPZJy8_{9H`g6kQpyZU{oJ`m%&p~D=K#KpfoJ@ zn-3cqmHsdtN!f?~w+(t+I`*7GQA#EQC^lUA9(i6=i1PqSAc|ha91I%X&nXzjYaM{8$s&wEx@aVkQ6M{E2 zfzId#&r(XwUNtPcq4Ngze^+XaJA1EK-%&C9j>^9(secqe{}z>hR5CFNveMsVA)m#S zk)_%SidkY-XmMWlVnQ(mNJ>)ooszQ#vaK;!rPmGKXV7am^_F!Lz>;~{VrIO$;!#30XRhE1QqO_~#+Ux;B_D{Nk=grn z8Y0oR^4RqtcYM)7a%@B(XdbZCOqnX#fD{BQTeLvRHd(irHKq=4*jq34`6@VAQR8WG z^%)@5CXnD_T#f%@-l${>y$tfb>2LPmc{~5A82|16mH)R?&r#KKLs7xpN-D`=&Cm^R zvMA6#Ahr<3X>Q7|-qfTY)}32HkAz$_mibYV!I)u>bmjK`qwBe(>za^0Kt*HnFbSdO z1>+ryKCNxmm^)*$XfiDOF2|{-v3KKB?&!(S_Y=Ht@|ir^hLd978xuI&N{k>?(*f8H z=ClxVJK_%_z1TH0eUwm2J+2To7FK4o+n_na)&#VLn1m;!+CX+~WC+qg1?PA~KdOlC zW)C@pw75_xoe=w7i|r9KGIvQ$+3K?L{7TGHwrQM{dCp=Z*D}3kX7E-@sZnup!BImw z*T#a=+WcTwL78exTgBn|iNE3#EsOorO z*kt)gDzHiPt07fmisA2LWN?AymkdqTgr?=loT7z@d`wnlr6oN}@o|&JX!yPzC*Y8d zu6kWlTzE1)ckyBn+0Y^HMN+GA$wUO_LN6W>mxCo!0?oiQvT`z$jbSEu&{UHRU0E8# z%B^wOc@S!yhMT49Y)ww(Xta^8pmPCe@eI5C*ed96)AX9<>))nKx0(sci8gwob_1}4 z0DIL&vsJ1_s%<@y%U*-eX z5rN&(zef-5G~?@r79oZGW1d!WaTqQn0F6RIOa9tJ=0(kdd{d1{<*tHT#cCvl*i>YY zH+L7jq8xZNcTUBqj(S)ztTU!TM!RQ}In*n&Gn<>(60G7}4%WQL!o>hbJqNDSGwl#H z`4k+twp0cj%PsS+NKaxslAEu9!#U3xT1|_KB6`h=PI0SW`P9GTa7caD1}vKEglV8# zjKZR`pluCW19c2fM&ZG)c3T3Um;ir3y(tSCJ7Agl6|b524dy5El{^EQBG?E61H0XY z`bqg!;zhGhyMFl&(o=JWEJ8n~z)xI}A@C0d2hQGvw7nGv)?POU@(kS1m=%`|+^ika zXl8zjS?xqW$WlO?Ewa;vF~XbybHBor$f<%I&*t$F5fynwZlTGj|IjZtVfGa7l&tK} zW>I<69w(cZLu)QIVG|M2xzW@S+70NinQzk&Y0+3WT*cC)rx~04O-^<{JohU_&HL5XdUKW!uFy|i$FB|EMu0eUyW;gsf`XfIc!Z0V zeK&*hPL}f_cX=@iv>K%S5kL;cl_$v?n(Q9f_cChk8Lq$glT|=e+T*8O4H2n<=NGmn z+2*h+v;kBvF>}&0RDS>)B{1!_*XuE8A$Y=G8w^qGMtfudDBsD5>T5SB;Qo}fSkkiV ze^K^M(UthkwrD!&*tTsu>Dacdj_q`~V%r_twr$(Ct&_dKeeXE?fA&4&yASJWJ*}~- zel=@W)tusynfC_YqH4ll>4Eg`Xjs5F7Tj>tTLz<0N3)X<1px_d2yUY>X~y>>93*$) z5PuNMQLf9Bu?AAGO~a_|J2akO1M*@VYN^VxvP0F$2>;Zb9;d5Yfd8P%oFCCoZE$ z4#N$^J8rxYjUE_6{T%Y>MmWfHgScpuGv59#4u6fpTF%~KB^Ae`t1TD_^Ud#DhL+Dm zbY^VAM#MrAmFj{3-BpVSWph2b_Y6gCnCAombVa|1S@DU)2r9W<> zT5L8BB^er3zxKt1v(y&OYk!^aoQisqU zH(g@_o)D~BufUXcPt!Ydom)e|aW{XiMnes2z&rE?og>7|G+tp7&^;q?Qz5S5^yd$i z8lWr4g5nctBHtigX%0%XzIAB8U|T6&JsC4&^hZBw^*aIcuNO47de?|pGXJ4t}BB`L^d8tD`H`i zqrP8?#J@8T#;{^B!KO6J=@OWKhAerih(phML`(Rg7N1XWf1TN>=Z3Do{l_!d~DND&)O)D>ta20}@Lt77qSnVsA7>)uZAaT9bsB>u&aUQl+7GiY2|dAEg@%Al3i316y;&IhQL^8fw_nwS>f60M_-m+!5)S_6EPM7Y)(Nq^8gL7(3 zOiot`6Wy6%vw~a_H?1hLVzIT^i1;HedHgW9-P#)}Y6vF%C=P70X0Tk^z9Te@kPILI z_(gk!k+0%CG)%!WnBjjw*kAKs_lf#=5HXC00s-}oM-Q1aXYLj)(1d!_a7 z*Gg4Fe6F$*ujVjI|79Z5+Pr`us%zW@ln++2l+0hsngv<{mJ%?OfSo_3HJXOCys{Ug z00*YR-(fv<=&%Q!j%b-_ppA$JsTm^_L4x`$k{VpfLI(FMCap%LFAyq;#ns5bR7V+x zO!o;c5y~DyBPqdVQX)8G^G&jWkBy2|oWTw>)?5u}SAsI$RjT#)lTV&Rf8;>u*qXnb z8F%Xb=7#$m)83z%`E;49)t3fHInhtc#kx4wSLLms!*~Z$V?bTyUGiS&m>1P(952(H zuHdv=;o*{;5#X-uAyon`hP}d#U{uDlV?W?_5UjJvf%11hKwe&(&9_~{W)*y1nR5f_ z!N(R74nNK`y8>B!0Bt_Vr!;nc3W>~RiKtGSBkNlsR#-t^&;$W#)f9tTlZz>n*+Fjz z3zXZ;jf(sTM(oDzJt4FJS*8c&;PLTW(IQDFs_5QPy+7yhi1syPCarvqrHFcf&yTy)^O<1EBx;Ir`5W{TIM>{8w&PB>ro4;YD<5LF^TjTb0!zAP|QijA+1Vg>{Afv^% zmrkc4o6rvBI;Q8rj4*=AZacy*n8B{&G3VJc)so4$XUoie0)vr;qzPZVbb<#Fc=j+8CGBWe$n|3K& z_@%?{l|TzKSlUEO{U{{%Fz_pVDxs7i9H#bnbCw7@4DR=}r_qV!Zo~CvD4ZI*+j3kO zW6_=|S`)(*gM0Z;;}nj`73OigF4p6_NPZQ-Od~e$c_);;4-7sR>+2u$6m$Gf%T{aq zle>e3(*Rt(TPD}03n5)!Ca8Pu!V}m6v0o1;5<1h$*|7z|^(3$Y&;KHKTT}hV056wuF0Xo@mK-52~r=6^SI1NC%c~CC?n>yX6wPTgiWYVz!Sx^atLby9YNn1Rk{g?|pJaxD4|9cUf|V1_I*w zzxK)hRh9%zOl=*$?XUjly5z8?jPMy%vEN)f%T*|WO|bp5NWv@B(K3D6LMl!-6dQg0 zXNE&O>Oyf%K@`ngCvbGPR>HRg5!1IV$_}m@3dWB7x3t&KFyOJn9pxRXCAzFr&%37wXG;z^xaO$ekR=LJG ztIHpY8F5xBP{mtQidqNRoz= z@){+N3(VO5bD+VrmS^YjG@+JO{EOIW)9=F4v_$Ed8rZtHvjpiEp{r^c4F6Ic#ChlC zJX^DtSK+v(YdCW)^EFcs=XP7S>Y!4=xgmv>{S$~@h=xW-G4FF9?I@zYN$e5oF9g$# zb!eVU#J+NjLyX;yb)%SY)xJdvGhsnE*JEkuOVo^k5PyS=o#vq!KD46UTW_%R=Y&0G zFj6bV{`Y6)YoKgqnir2&+sl+i6foAn-**Zd1{_;Zb7Ki=u394C5J{l^H@XN`_6XTKY%X1AgQM6KycJ+= zYO=&t#5oSKB^pYhNdzPgH~aEGW2=ec1O#s-KG z71}LOg@4UEFtp3GY1PBemXpNs6UK-ax*)#$J^pC_me;Z$Je(OqLoh|ZrW*mAMBFn< zHttjwC&fkVfMnQeen8`Rvy^$pNRFVaiEN4Pih*Y3@jo!T0nsClN)pdrr9AYLcZxZ| zJ5Wlj+4q~($hbtuY zVQ7hl>4-+@6g1i`1a)rvtp-;b0>^`Dloy(#{z~ytgv=j4q^Kl}wD>K_Y!l~ zp(_&7sh`vfO(1*MO!B%<6E_bx1)&s+Ae`O)a|X=J9y~XDa@UB`m)`tSG4AUhoM=5& znWoHlA-(z@3n0=l{E)R-p8sB9XkV zZ#D8wietfHL?J5X0%&fGg@MH~(rNS2`GHS4xTo7L$>TPme+Is~!|79=^}QbPF>m%J zFMkGzSndiPO|E~hrhCeo@&Ea{M(ieIgRWMf)E}qeTxT8Q#g-!Lu*x$v8W^M^>?-g= zwMJ$dThI|~M06rG$Sv@C@tWR>_YgaG&!BAbkGggVQa#KdtDB)lMLNVLN|51C@F^y8 zCRvMB^{GO@j=cHfmy}_pCGbP%xb{pNN>? z?7tBz$1^zVaP|uaatYaIN+#xEN4jBzwZ|YI_)p(4CUAz1ZEbDk>J~Y|63SZaak~#0 zoYKruYsWHoOlC1(MhTnsdUOwQfz5p6-D0}4;DO$B;7#M{3lSE^jnTT;ns`>!G%i*F?@pR1JO{QTuD0U+~SlZxcc8~>IB{)@8p`P&+nDxNj`*gh|u?yrv$phpQcW)Us)bi`kT%qLj(fi{dWRZ%Es2!=3mI~UxiW0$-v3vUl?#g{p6eF zMEUAqo5-L0Ar(s{VlR9g=j7+lt!gP!UN2ICMokAZ5(Agd>})#gkA2w|5+<%-CuEP# zqgcM}u@3(QIC^Gx<2dbLj?cFSws_f3e%f4jeR?4M^M3cx1f+Qr6ydQ>n)kz1s##2w zk}UyQc+Z5G-d-1}{WzjkLXgS-2P7auWSJ%pSnD|Uivj5u!xk0 z_^-N9r9o;(rFDt~q1PvE#iJZ_f>J3gcP$)SOqhE~pD2|$=GvpL^d!r z6u=sp-CrMoF7;)}Zd7XO4XihC4ji?>V&(t^?@3Q&t9Mx=qex6C9d%{FE6dvU6%d94 zIE;hJ1J)cCqjv?F``7I*6bc#X)JW2b4f$L^>j{*$R`%5VHFi*+Q$2;nyieduE}qdS{L8y8F08yLs?w}{>8>$3236T-VMh@B zq-nujsb_1aUv_7g#)*rf9h%sFj*^mIcImRV*k~Vmw;%;YH(&ylYpy!&UjUVqqtfG` zox3esju?`unJJA_zKXRJP)rA3nXc$m^{S&-p|v|-0x9LHJm;XIww7C#R$?00l&Yyj z=e}gKUOpsImwW?N)+E(awoF@HyP^EhL+GlNB#k?R<2>95hz!h9sF@U20DHSB3~WMa zk90+858r@-+vWwkawJ)8ougd(i#1m3GLN{iSTylYz$brAsP%=&m$mQQrH$g%3-^VR zE%B`Vi&m8f3T~&myTEK28BDWCVzfWir1I?03;pX))|kY5ClO^+bae z*7E?g=3g7EiisYOrE+lA)2?Ln6q2*HLNpZEWMB|O-JI_oaHZB%CvYB(%=tU= zE*OY%QY58fW#RG5=gm0NR#iMB=EuNF@)%oZJ}nmm=tsJ?eGjia{e{yuU0l3{d^D@)kVDt=1PE)&tf_hHC%0MB znL|CRCPC}SeuVTdf>-QV70`0(EHizc21s^sU>y%hW0t!0&y<7}Wi-wGy>m%(-jsDj zP?mF|>p_K>liZ6ZP(w5(|9Ga%>tLgb$|doDDfkdW>Z z`)>V2XC?NJT26mL^@ zf+IKr27TfM!UbZ@?zRddC7#6ss1sw%CXJ4FWC+t3lHZupzM77m^=9 z&(a?-LxIq}*nvv)y?27lZ{j zifdl9hyJudyP2LpU$-kXctshbJDKS{WfulP5Dk~xU4Le4c#h^(YjJit4#R8_khheS z|8(>2ibaHES4+J|DBM7I#QF5u-*EdN{n=Kt@4Zt?@Tv{JZA{`4 zU#kYOv{#A&gGPwT+$Ud}AXlK3K7hYzo$(fBSFjrP{QQ zeaKg--L&jh$9N}`pu{Bs>?eDFPaWY4|9|foN%}i;3%;@4{dc+iw>m}{3rELqH21G! z`8@;w-zsJ1H(N3%|1B@#ioLOjib)j`EiJqPQVSbPSPVHCj6t5J&(NcWzBrzCiDt{4 zdlPAUKldz%6x5II1H_+jv)(xVL+a;P+-1hv_pM>gMRr%04@k;DTokASSKKhU1Qms| zrWh3a!b(J3n0>-tipg{a?UaKsP7?+|@A+1WPDiQIW1Sf@qDU~M_P65_s}7(gjTn0X zucyEm)o;f8UyshMy&>^SC3I|C6jR*R_GFwGranWZe*I>K+0k}pBuET&M~ z;Odo*ZcT?ZpduHyrf8E%IBFtv;JQ!N_m>!sV6ly$_1D{(&nO~w)G~Y`7sD3#hQk%^ zp}ucDF_$!6DAz*PM8yE(&~;%|=+h(Rn-=1Wykas_-@d&z#=S}rDf`4w(rVlcF&lF! z=1)M3YVz7orwk^BXhslJ8jR);sh^knJW(Qmm(QdSgIAIdlN4Te5KJisifjr?eB{FjAX1a0AB>d?qY4Wx>BZ8&}5K0fA+d{l8 z?^s&l8#j7pR&ijD?0b%;lL9l$P_mi2^*_OL+b}4kuLR$GAf85sOo02?Y#90}CCDiS zZ%rbCw>=H~CBO=C_JVV=xgDe%b4FaEFtuS7Q1##y686r%F6I)s-~2(}PWK|Z8M+Gu zl$y~5@#0Ka%$M<&Cv%L`a8X^@tY&T7<0|(6dNT=EsRe0%kp1Qyq!^43VAKYnr*A5~ zsI%lK1ewqO;0TpLrT9v}!@vJK{QoVa_+N4FYT#h?Y8rS1S&-G+m$FNMP?(8N`MZP zels(*?kK{{^g9DOzkuZXJ2;SrOQsp9T$hwRB1(phw1c7`!Q!by?Q#YsSM#I12RhU{$Q+{xj83axHcftEc$mNJ8_T7A-BQc*k(sZ+~NsO~xAA zxnbb%dam_fZlHvW7fKXrB~F&jS<4FD2FqY?VG?ix*r~MDXCE^WQ|W|WM;gsIA4lQP zJ2hAK@CF*3*VqPr2eeg6GzWFlICi8S>nO>5HvWzyZTE)hlkdC_>pBej*>o0EOHR|) z$?};&I4+_?wvL*g#PJ9)!bc#9BJu1(*RdNEn>#Oxta(VWeM40ola<0aOe2kSS~{^P zDJBd}0L-P#O-CzX*%+$#v;(x%<*SPgAje=F{Zh-@ucd2DA(yC|N_|ocs*|-!H%wEw z@Q!>siv2W;C^^j^59OAX03&}&D*W4EjCvfi(ygcL#~t8XGa#|NPO+*M@Y-)ctFA@I z-p7npT1#5zOLo>7q?aZpCZ=iecn3QYklP;gF0bq@>oyBq94f6C=;Csw3PkZ|5q=(c zfs`aw?II0e(h=|7o&T+hq&m$; zBrE09Twxd9BJ2P+QPN}*OdZ-JZV7%av@OM7v!!NL8R;%WFq*?{9T3{ct@2EKgc8h) zMxoM$SaF#p<`65BwIDfmXG6+OiK0e)`I=!A3E`+K@61f}0e z!2a*FOaDrOe>U`q%K!QN`&=&0C~)CaL3R4VY(NDt{Xz(Xpqru5=r#uQN1L$Je1*dkdqQ*=lofQaN%lO!<5z9ZlHgxt|`THd>2 zsWfU$9=p;yLyJyM^t zS2w9w?Bpto`@H^xJpZDKR1@~^30Il6oFGfk5%g6w*C+VM)+%R@gfIwNprOV5{F^M2 zO?n3DEzpT+EoSV-%OdvZvNF+pDd-ZVZ&d8 zKeIyrrfPN=EcFRCPEDCVflX#3-)Ik_HCkL(ejmY8vzcf-MTA{oHk!R2*36`O68$7J zf}zJC+bbQk--9Xm!u#lgLvx8TXx2J258E5^*IZ(FXMpq$2LUUvhWQPs((z1+2{Op% z?J}9k5^N=z;7ja~zi8a_-exIqWUBJwohe#4QJ`|FF*$C{lM18z^#hX6!5B8KAkLUX ziP=oti-gpV(BsLD{0(3*dw}4JxK23Y7M{BeFPucw!sHpY&l%Ws4pSm`+~V7;bZ%Dx zeI)MK=4vC&5#;2MT7fS?^ch9?2;%<8Jlu-IB&N~gg8t;6S-#C@!NU{`p7M8@2iGc& zg|JPg%@gCoCQ&s6JvDU&`X2S<57f(k8nJ1wvBu{8r?;q3_kpZZ${?|( z+^)UvR33sjSd)aT!UPkA;ylO6{aE3MQa{g%Mcf$1KONcjO@&g5zPHWtzM1rYC{_K> zgQNcs<{&X{OA=cEWw5JGqpr0O>x*Tfak2PE9?FuWtz^DDNI}rwAaT0(bdo-<+SJ6A z&}S%boGMWIS0L}=S>|-#kRX;e^sUsotry(MjE|3_9duvfc|nwF#NHuM-w7ZU!5ei8 z6Mkf>2)WunY2eU@C-Uj-A zG(z0Tz2YoBk>zCz_9-)4a>T46$(~kF+Y{#sA9MWH%5z#zNoz)sdXq7ZR_+`RZ%0(q zC7&GyS_|BGHNFl8Xa%@>iWh%Gr?=J5<(!OEjauj5jyrA-QXBjn0OAhJJ9+v=!LK`` z@g(`^*84Q4jcDL`OA&ZV60djgwG`|bcD*i50O}Q{9_noRg|~?dj%VtKOnyRs$Uzqg z191aWoR^rDX#@iSq0n z?9Sg$WSRPqSeI<}&n1T3!6%Wj@5iw5`*`Btni~G=&;J+4`7g#OQTa>u`{4ZZ(c@s$ zK0y;ySOGD-UTjREKbru{QaS>HjN<2)R%Nn-TZiQ(Twe4p@-saNa3~p{?^V9Nixz@a zykPv~<@lu6-Ng9i$Lrk(xi2Tri3q=RW`BJYOPC;S0Yly%77c727Yj-d1vF!Fuk{Xh z)lMbA69y7*5ufET>P*gXQrxsW+ zz)*MbHZv*eJPEXYE<6g6_M7N%#%mR{#awV3i^PafNv(zyI)&bH?F}2s8_rR(6%!V4SOWlup`TKAb@ee>!9JKPM=&8g#BeYRH9FpFybxBXQI2|g}FGJfJ+ zY-*2hB?o{TVL;Wt_ek;AP5PBqfDR4@Z->_182W z{P@Mc27j6jE*9xG{R$>6_;i=y{qf(c`5w9fa*`rEzX6t!KJ(p1H|>J1pC-2zqWENF zmm=Z5B4u{cY2XYl(PfrInB*~WGWik3@1oRhiMOS|D;acnf-Bs(QCm#wR;@Vf!hOPJ zgjhDCfDj$HcyVLJ=AaTbQ{@vIv14LWWF$=i-BDoC11}V;2V8A`S>_x)vIq44-VB-v z*w-d}$G+Ql?En8j!~ZkCpQ$|cA0|+rrY>tiCeWxkRGPoarxlGU2?7%k#F693RHT24 z-?JsiXlT2PTqZqNb&sSc>$d;O4V@|b6VKSWQb~bUaWn1Cf0+K%`Q&Wc<>mQ>*iEGB zbZ;aYOotBZ{vH3y<0A*L0QVM|#rf*LIsGx(O*-7)r@yyBIzJnBFSKBUSl1e|8lxU* zzFL+YDVVkIuzFWeJ8AbgN&w(4-7zbiaMn{5!JQXu)SELk*CNL+Fro|2v|YO)1l15t zs(0^&EB6DPMyaqvY>=KL>)tEpsn;N5Q#yJj<9}ImL((SqErWN3Q=;tBO~ExTCs9hB z2E$7eN#5wX4<3m^5pdjm#5o>s#eS_Q^P)tm$@SawTqF*1dj_i#)3};JslbLKHXl_N z)Fxzf>FN)EK&Rz&*|6&%Hs-^f{V|+_vL1S;-1K-l$5xiC@}%uDuwHYhmsV?YcOUlk zOYkG5v2+`+UWqpn0aaaqrD3lYdh0*!L`3FAsNKu=Q!vJu?Yc8n|CoYyDo_`r0mPoo z8>XCo$W4>l(==h?2~PoRR*kEe)&IH{1sM41mO#-36`02m#nTX{r*r`Q5rZ2-sE|nA zhnn5T#s#v`52T5|?GNS`%HgS2;R(*|^egNPDzzH_z^W)-Q98~$#YAe)cEZ%vge965AS_am#DK#pjPRr-!^za8>`kksCAUj(Xr*1NW5~e zpypt_eJpD&4_bl_y?G%>^L}=>xAaV>KR6;^aBytqpiHe%!j;&MzI_>Sx7O%F%D*8s zSN}cS^<{iiK)=Ji`FpO#^zY!_|D)qeRNAtgmH)m;qC|mq^j(|hL`7uBz+ULUj37gj zksdbnU+LSVo35riSX_4z{UX=%n&}7s0{WuZYoSfwAP`8aKN9P@%e=~1`~1ASL-z%# zw>DO&ixr}c9%4InGc*_y42bdEk)ZdG7-mTu0bD@_vGAr*NcFoMW;@r?@LUhRI zCUJgHb`O?M3!w)|CPu~ej%fddw20lod?Ufp8Dmt0PbnA0J%KE^2~AIcnKP()025V> zG>noSM3$5Btmc$GZoyP^v1@Poz0FD(6YSTH@aD0}BXva?LphAiSz9f&Y(aDAzBnUh z?d2m``~{z;{}kZJ>a^wYI?ry(V9hIoh;|EFc0*-#*`$T0DRQ1;WsqInG;YPS+I4{g zJGpKk%%Sdc5xBa$Q^_I~(F97eqDO7AN3EN0u)PNBAb+n+ zWBTxQx^;O9o0`=g+Zrt_{lP!sgWZHW?8bLYS$;1a@&7w9rD9|Ge;Gb?sEjFoF9-6v z#!2)t{DMHZ2@0W*fCx;62d#;jouz`R5Y(t{BT=$N4yr^^o$ON8d{PQ=!O zX17^CrdM~7D-;ZrC!||<+FEOxI_WI3CA<35va%4v>gc zEX-@h8esj=a4szW7x{0g$hwoWRQG$yK{@3mqd-jYiVofJE!Wok1* znV7Gm&Ssq#hFuvj1sRyHg(6PFA5U*Q8Rx>-blOs=lb`qa{zFy&n4xY;sd$fE+<3EI z##W$P9M{B3c3Si9gw^jlPU-JqD~Cye;wr=XkV7BSv#6}DrsXWFJ3eUNrc%7{=^sP> zrp)BWKA9<}^R9g!0q7yWlh;gr_TEOD|#BmGq<@IV;ueg+D2}cjpp+dPf&Q(36sFU&K8}hA85U61faW&{ zlB`9HUl-WWCG|<1XANN3JVAkRYvr5U4q6;!G*MTdSUt*Mi=z_y3B1A9j-@aK{lNvx zK%p23>M&=KTCgR!Ee8c?DAO2_R?B zkaqr6^BSP!8dHXxj%N1l+V$_%vzHjqvu7p@%Nl6;>y*S}M!B=pz=aqUV#`;h%M0rU zHfcog>kv3UZAEB*g7Er@t6CF8kHDmKTjO@rejA^ULqn!`LwrEwOVmHx^;g|5PHm#B zZ+jjWgjJ!043F+&#_;D*mz%Q60=L9Ove|$gU&~As5^uz@2-BfQ!bW)Khn}G+Wyjw- z19qI#oB(RSNydn0t~;tAmK!P-d{b-@@E5|cdgOS#!>%#Rj6ynkMvaW@37E>@hJP^8 z2zk8VXx|>#R^JCcWdBCy{0nPmYFOxN55#^-rlqobe0#L6)bi?E?SPymF*a5oDDeSd zO0gx?#KMoOd&G(2O@*W)HgX6y_aa6iMCl^~`{@UR`nMQE`>n_{_aY5nA}vqU8mt8H z`oa=g0SyiLd~BxAj2~l$zRSDHxvDs;I4>+M$W`HbJ|g&P+$!U7-PHX4RAcR0szJ*( ze-417=bO2q{492SWrqDK+L3#ChUHtz*@MP)e^%@>_&#Yk^1|tv@j4%3T)diEX zATx4K*hcO`sY$jk#jN5WD<=C3nvuVsRh||qDHnc~;Kf59zr0;c7VkVSUPD%NnnJC_ zl3F^#f_rDu8l}l8qcAz0FFa)EAt32IUy_JLIhU_J^l~FRH&6-ivSpG2PRqzDdMWft>Zc(c)#tb%wgmWN%>IOPm zZi-noqS!^Ftb81pRcQi`X#UhWK70hy4tGW1mz|+vI8c*h@ zfFGJtW3r>qV>1Z0r|L>7I3un^gcep$AAWfZHRvB|E*kktY$qQP_$YG60C@X~tTQjB3%@`uz!qxtxF+LE!+=nrS^07hn` zEgAp!h|r03h7B!$#OZW#ACD+M;-5J!W+{h|6I;5cNnE(Y863%1(oH}_FTW})8zYb$7czP zg~Szk1+_NTm6SJ0MS_|oSz%e(S~P-&SFp;!k?uFayytV$8HPwuyELSXOs^27XvK-D zOx-Dl!P|28DK6iX>p#Yb%3`A&CG0X2S43FjN%IB}q(!hC$fG}yl1y9W&W&I@KTg6@ zK^kpH8=yFuP+vI^+59|3%Zqnb5lTDAykf z9S#X`3N(X^SpdMyWQGOQRjhiwlj!0W-yD<3aEj^&X%=?`6lCy~?`&WSWt z?U~EKFcCG_RJ(Qp7j=$I%H8t)Z@6VjA#>1f@EYiS8MRHZphp zMA_5`znM=pzUpBPO)pXGYpQ6gkine{6u_o!P@Q+NKJ}k!_X7u|qfpAyIJb$_#3@wJ z<1SE2Edkfk9C!0t%}8Yio09^F`YGzpaJHGk*-ffsn85@)%4@`;Fv^8q(-Wk7r=Q8p zT&hD`5(f?M{gfzGbbwh8(}G#|#fDuk7v1W)5H9wkorE0ZZjL0Q1=NRGY>zwgfm81DdoaVwNH;or{{eSyybt)m<=zXoA^RALYG-2t zouH|L*BLvmm9cdMmn+KGopyR@4*=&0&4g|FLoreZOhRmh=)R0bg~ zT2(8V_q7~42-zvb)+y959OAv!V$u(O3)%Es0M@CRFmG{5sovIq4%8Ahjk#*5w{+)+ zMWQoJI_r$HxL5km1#6(e@{lK3Udc~n0@g`g$s?VrnQJ$!oPnb?IHh-1qA`Rz$)Ai< z6w$-MJW-gKNvOhL+XMbE7&mFt`x1KY>k4(!KbbpZ`>`K@1J<(#vVbjx@Z@(6Q}MF# zMnbr-f55(cTa^q4+#)=s+ThMaV~E`B8V=|W_fZWDwiso8tNMTNse)RNBGi=gVwgg% zbOg8>mbRN%7^Um-7oj4=6`$|(K7!+t^90a{$18Z>}<#!bm%ZEFQ{X(yBZMc>lCz0f1I2w9Sq zuGh<9<=AO&g6BZte6hn>Qmvv;Rt)*cJfTr2=~EnGD8P$v3R|&1RCl&7)b+`=QGapi zPbLg_pxm`+HZurtFZ;wZ=`Vk*do~$wB zxoW&=j0OTbQ=Q%S8XJ%~qoa3Ea|au5o}_(P;=!y-AjFrERh%8la!z6Fn@lR?^E~H12D?8#ht=1F;7@o4$Q8GDj;sSC%Jfn01xgL&%F2 zwG1|5ikb^qHv&9hT8w83+yv&BQXOQyMVJSBL(Ky~p)gU3#%|blG?IR9rP^zUbs7rOA0X52Ao=GRt@C&zlyjNLv-} z9?*x{y(`509qhCV*B47f2hLrGl^<@SuRGR!KwHei?!CM10Tq*YDIoBNyRuO*>3FU? zHjipIE#B~y3FSfOsMfj~F9PNr*H?0oHyYB^G(YyNh{SxcE(Y-`x5jFMKb~HO*m+R% zrq|ic4fzJ#USpTm;X7K+E%xsT_3VHKe?*uc4-FsILUH;kL>_okY(w`VU*8+l>o>Jm ziU#?2^`>arnsl#)*R&nf_%>A+qwl%o{l(u)M?DK1^mf260_oteV3#E_>6Y4!_hhVD zM8AI6MM2V*^_M^sQ0dmHu11fy^kOqXqzpr?K$`}BKWG`=Es(9&S@K@)ZjA{lj3ea7_MBP zk(|hBFRjHVMN!sNUkrB;(cTP)T97M$0Dtc&UXSec<+q?y>5=)}S~{Z@ua;1xt@=T5 zI7{`Z=z_X*no8s>mY;>BvEXK%b`a6(DTS6t&b!vf_z#HM{Uoy_5fiB(zpkF{})ruka$iX*~pq1ZxD?q68dIo zIZSVls9kFGsTwvr4{T_LidcWtt$u{kJlW7moRaH6+A5hW&;;2O#$oKyEN8kx`LmG)Wfq4ykh+q{I3|RfVpkR&QH_x;t41Uw z`P+tft^E2B$domKT@|nNW`EHwyj>&}K;eDpe z1bNOh=fvIfk`&B61+S8ND<(KC%>y&?>opCnY*r5M+!UrWKxv0_QvTlJc>X#AaI^xo zaRXL}t5Ej_Z$y*|w*$6D+A?Lw-CO-$itm^{2Ct82-<0IW)0KMNvJHgBrdsIR0v~=H z?n6^}l{D``Me90`^o|q!olsF?UX3YSq^6Vu>Ijm>>PaZI8G@<^NGw{Cx&%|PwYrfw zR!gX_%AR=L3BFsf8LxI|K^J}deh0ZdV?$3r--FEX`#INxsOG6_=!v)DI>0q|BxT)z z-G6kzA01M?rba+G_mwNMQD1mbVbNTWmBi*{s_v_Ft9m2Avg!^78(QFu&n6mbRJ2bA zv!b;%yo{g*9l2)>tsZJOOp}U~8VUH`}$ z8p_}t*XIOehezolNa-a2x0BS})Y9}&*TPgua{Ewn-=wVrmJUeU39EKx+%w%=ixQWK zDLpwaNJs65#6o7Ln7~~X+p_o2BR1g~VCfxLzxA{HlWAI6^H;`juI=&r1jQrUv_q0Z z1Ja-tjdktrrP>GOC*#p?*xfQU5MqjMsBe!9lh(u8)w$e@Z|>aUHI5o;MGw*|Myiz3 z-f0;pHg~Q#%*Kx8MxH%AluVXjG2C$)WL-K63@Q`#y9_k_+}eR(x4~dp7oV-ek0H>I zgy8p#i4GN{>#v=pFYUQT(g&b$OeTy-X_#FDgNF8XyfGY6R!>inYn8IR2RDa&O!(6< znXs{W!bkP|s_YI*Yx%4stI`=ZO45IK6rBs`g7sP40ic}GZ58s?Mc$&i`kq_tfci>N zIHrC0H+Qpam1bNa=(`SRKjixBTtm&e`j9porEci!zdlg1RI0Jw#b(_Tb@RQK1Zxr_ z%7SUeH6=TrXt3J@js`4iDD0=IoHhK~I7^W8^Rcp~Yaf>2wVe|Hh1bUpX9ATD#moByY57-f2Ef1TP^lBi&p5_s7WGG9|0T}dlfxOx zXvScJO1Cnq`c`~{Dp;{;l<-KkCDE+pmexJkd}zCgE{eF=)K``-qC~IT6GcRog_)!X z?fK^F8UDz$(zFUrwuR$qro5>qqn>+Z%<5>;_*3pZ8QM|yv9CAtrAx;($>4l^_$_-L z*&?(77!-=zvnCVW&kUcZMb6;2!83si518Y%R*A3JZ8Is|kUCMu`!vxDgaWjs7^0j( ziTaS4HhQ)ldR=r)_7vYFUr%THE}cPF{0H45FJ5MQW^+W>P+eEX2kLp3zzFe*-pFVA zdDZRybv?H|>`9f$AKVjFWJ=wegO7hOOIYCtd?Vj{EYLT*^gl35|HQ`R=ti+ADm{jyQE7K@kdjuqJhWVSks>b^ zxha88-h3s;%3_5b1TqFCPTxVjvuB5U>v=HyZ$?JSk+&I%)M7KE*wOg<)1-Iy)8-K! z^XpIt|0ibmk9RtMmlUd7#Ap3Q!q9N4atQy)TmrhrFhfx1DAN`^vq@Q_SRl|V z#lU<~n67$mT)NvHh`%als+G-)x1`Y%4Bp*6Un5Ri9h=_Db zA-AdP!f>f0m@~>7X#uBM?diI@)Egjuz@jXKvm zJo+==juc9_<;CqeRaU9_Mz@;3e=E4=6TK+c`|uu#pIqhSyNm`G(X)&)B`8q0RBv#> z`gGlw(Q=1Xmf55VHj%C#^1lpc>LY8kfA@|rlC1EA<1#`iuyNO z(=;irt{_&K=i4)^x%;U(Xv<)+o=dczC5H3W~+e|f~{*ucxj@{Yi-cw^MqYr3fN zF5D+~!wd$#al?UfMnz(@K#wn`_5na@rRr8XqN@&M&FGEC@`+OEv}sI1hw>Up0qAWf zL#e4~&oM;TVfjRE+10B_gFlLEP9?Q-dARr3xi6nQqnw>k-S;~b z;!0s2VS4}W8b&pGuK=7im+t(`nz@FnT#VD|!)eQNp-W6)@>aA+j~K*H{$G`y2|QHY z|Hmy+CR@#jWY4~)lr1qBJB_RfHJFfP<}pK5(#ZZGSqcpyS&}01LnTWk5fzmXMGHkJ zTP6L^B+uj;lmB_W<~4=${+v0>z31M!-_O@o-O9GyW)j_mjx}!0@br_LE-7SIuPP84 z;5=O(U*g_um0tyG|61N@d9lEuOeiRd+#NY^{nd5;-CVlw&Ap7J?qwM^?E29wvS}2d zbzar4Fz&RSR(-|s!Z6+za&Z zY#D<5q_JUktIzvL0)yq_kLWG6DO{ri=?c!y!f(Dk%G{8)k`Gym%j#!OgXVDD3;$&v@qy#ISJfp=Vm>pls@9-mapVQChAHHd-x+OGx)(*Yr zC1qDUTZ6mM(b_hi!TuFF2k#8uI2;kD70AQ&di$L*4P*Y-@p`jdm%_c3f)XhYD^6M8&#Y$ZpzQMcR|6nsH>b=*R_Von!$BTRj7yGCXokoAQ z&ANvx0-Epw`QIEPgI(^cS2f(Y85yV@ygI{ewyv5Frng)e}KCZF7JbR(&W618_dcEh(#+^zZFY;o<815<5sOHQdeax9_!PyM&;{P zkBa5xymca0#)c#tke@3KNEM8a_mT&1gm;p&&JlMGH(cL(b)BckgMQ^9&vRwj!~3@l zY?L5}=Jzr080OGKb|y`ee(+`flQg|!lo6>=H)X4`$Gz~hLmu2a%kYW_Uu8x09Pa0J zKZ`E$BKJ=2GPj_3l*TEcZ*uYRr<*J^#5pILTT;k_cgto1ZL-%slyc16J~OH-(RgDA z%;EjEnoUkZ&acS{Q8`{i6T5^nywgqQI5bDIymoa7CSZG|WWVk>GM9)zy*bNih|QIm z%0+(Nnc*a_xo;$=!HQYaapLms>J1ToyjtFByY`C2H1wT#178#4+|{H0BBqtCdd$L% z_3Hc60j@{t9~MjM@LBalR&6@>B;9?r<7J~F+WXyYu*y3?px*=8MAK@EA+jRX8{CG?GI-< z54?Dc9CAh>QTAvyOEm0^+x;r2BWX|{3$Y7)L5l*qVE*y0`7J>l2wCmW zL1?|a`pJ-l{fb_N;R(Z9UMiSj6pQjOvQ^%DvhIJF!+Th7jO2~1f1N+(-TyCFYQZYw z4)>7caf^Ki_KJ^Zx2JUb z&$3zJy!*+rCV4%jqwyuNY3j1ZEiltS0xTzd+=itTb;IPYpaf?8Y+RSdVdpacB(bVQ zC(JupLfFp8y43%PMj2}T|VS@%LVp>hv4Y!RPMF?pp8U_$xCJ)S zQx!69>bphNTIb9yn*_yfj{N%bY)t{L1cs8<8|!f$;UQ*}IN=2<6lA;x^(`8t?;+ST zh)z4qeYYgZkIy{$4x28O-pugO&gauRh3;lti9)9Pvw+^)0!h~%m&8Q!AKX%urEMnl z?yEz?g#ODn$UM`+Q#$Q!6|zsq_`dLO5YK-6bJM6ya>}H+vnW^h?o$z;V&wvuM$dR& zeEq;uUUh$XR`TWeC$$c&Jjau2it3#%J-y}Qm>nW*s?En?R&6w@sDXMEr#8~$=b(gk zwDC3)NtAP;M2BW_lL^5ShpK$D%@|BnD{=!Tq)o(5@z3i7Z){} zGr}Exom_qDO{kAVkZ*MbLNHE666Kina#D{&>Jy%~w7yX$oj;cYCd^p9zy z8*+wgSEcj$4{WxKmCF(5o7U4jqwEvO&dm1H#7z}%VXAbW&W24v-tS6N3}qrm1OnE)fUkoE8yMMn9S$?IswS88tQWm4#Oid#ckgr6 zRtHm!mfNl-`d>O*1~d7%;~n+{Rph6BBy^95zqI{K((E!iFQ+h*C3EsbxNo_aRm5gj zKYug($r*Q#W9`p%Bf{bi6;IY0v`pB^^qu)gbg9QHQ7 zWBj(a1YSu)~2RK8Pi#C>{DMlrqFb9e_RehEHyI{n?e3vL_}L>kYJC z_ly$$)zFi*SFyNrnOt(B*7E$??s67EO%DgoZL2XNk8iVx~X_)o++4oaK1M|ou73vA0K^503j@uuVmLcHH4ya-kOIDfM%5%(E z+Xpt~#7y2!KB&)PoyCA+$~DXqxPxxALy!g-O?<9+9KTk4Pgq4AIdUkl`1<1#j^cJg zgU3`0hkHj_jxV>`Y~%LAZl^3o0}`Sm@iw7kwff{M%VwtN)|~!p{AsfA6vB5UolF~d zHWS%*uBDt<9y!9v2Xe|au&1j&iR1HXCdyCjxSgG*L{wmTD4(NQ=mFjpa~xooc6kju z`~+d{j7$h-;HAB04H!Zscu^hZffL#9!p$)9>sRI|Yovm)g@F>ZnosF2EgkU3ln0bR zTA}|+E(tt)!SG)-bEJi_0m{l+(cAz^pi}`9=~n?y&;2eG;d9{M6nj>BHGn(KA2n|O zt}$=FPq!j`p&kQ8>cirSzkU0c08%8{^Qyqi-w2LoO8)^E7;;I1;HQ6B$u0nNaX2CY zSmfi)F`m94zL8>#zu;8|{aBui@RzRKBlP1&mfFxEC@%cjl?NBs`cr^nm){>;$g?rhKr$AO&6qV_Wbn^}5tfFBry^e1`%du2~o zs$~dN;S_#%iwwA_QvmMjh%Qo?0?rR~6liyN5Xmej8(*V9ym*T`xAhHih-v$7U}8=dfXi2i*aAB!xM(Xekg*ix@r|ymDw*{*s0?dlVys2e)z62u1 z+k3esbJE=-P5S$&KdFp+2H7_2e=}OKDrf( z9-207?6$@f4m4B+9E*e((Y89!q?zH|mz_vM>kp*HGXldO0Hg#!EtFhRuOm$u8e~a9 z5(roy7m$Kh+zjW6@zw{&20u?1f2uP&boD}$#Zy)4o&T;vyBoqFiF2t;*g=|1=)PxB z8eM3Mp=l_obbc?I^xyLz?4Y1YDWPa+nm;O<$Cn;@ane616`J9OO2r=rZr{I_Kizyc zP#^^WCdIEp*()rRT+*YZK>V@^Zs=ht32x>Kwe zab)@ZEffz;VM4{XA6e421^h~`ji5r%)B{wZu#hD}f3$y@L0JV9f3g{-RK!A?vBUA}${YF(vO4)@`6f1 z-A|}e#LN{)(eXloDnX4Vs7eH|<@{r#LodP@Nz--$Dg_Par%DCpu2>2jUnqy~|J?eZ zBG4FVsz_A+ibdwv>mLp>P!(t}E>$JGaK$R~;fb{O3($y1ssQQo|5M;^JqC?7qe|hg zu0ZOqeFcp?qVn&Qu7FQJ4hcFi&|nR!*j)MF#b}QO^lN%5)4p*D^H+B){n8%VPUzi! zDihoGcP71a6!ab`l^hK&*dYrVYzJ0)#}xVrp!e;lI!+x+bfCN0KXwUAPU9@#l7@0& QuEJmfE|#`Dqx|px0L@K;Y5)KL literal 0 HcmV?d00001 diff --git a/examples/QmlBarcode/android/gradle/wrapper/gradle-wrapper.properties b/examples/QmlBarcode/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..41dfb87 --- /dev/null +++ b/examples/QmlBarcode/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/examples/QmlBarcode/android/gradlew b/examples/QmlBarcode/android/gradlew new file mode 100644 index 0000000..005bcde --- /dev/null +++ b/examples/QmlBarcode/android/gradlew @@ -0,0 +1,234 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='-Dfile.encoding=UTF-8 "-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/examples/QmlBarcode/android/gradlew.bat b/examples/QmlBarcode/android/gradlew.bat new file mode 100644 index 0000000..6a68175 --- /dev/null +++ b/examples/QmlBarcode/android/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS=-Dfile.encoding=UTF-8 "-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/examples/QmlBarcode/android/res/drawable-hdpi/icon.png b/examples/QmlBarcode/android/res/drawable-hdpi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ca8fc2674ac9d70ca0fe0adcb45a31e4e213ebf0 GIT binary patch literal 4750 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%0AB5&NbXS)%P?`#NObc& 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 GGw^?7yQcI2 literal 0 HcmV?d00001 diff --git a/examples/QmlBarcode/android/res/drawable-xxxhdpi/icon.png b/examples/QmlBarcode/android/res/drawable-xxxhdpi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..100474e932c9a024d2aff76f3788eafa5f9f0812 GIT binary patch literal 21651 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 + + + + + + + + + + + + + + + + + + + diff --git a/examples/QmlBarcode/cmake/Locations.cmake b/examples/QmlBarcode/cmake/Locations.cmake new file mode 100644 index 0000000..0c773e7 --- /dev/null +++ b/examples/QmlBarcode/cmake/Locations.cmake @@ -0,0 +1,37 @@ +set(COMPANY "Scythe Studio") +set(COPYRIGHT "Copyright (c) 2022 Scythe Studio. Licensed under the Apache License, Version 2.0.") +set(IDENTIFIER "com.scythestudio.scodes.example") + +# ---CONFIGURATION--- +option(USE_QML "Add QML support" ON) +option(USE_LIBS "Use external libraries" ON) + +# Locations - directories in project structure +set(LIB_DIR ${CMAKE_SOURCE_DIR}/../../src) + +set(SRC_DIR ".") +set(RES_DIR ".") +set(QML_DIR "qml") + +# Check Qt version +find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core) +find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core) + +# ---PACKAGES SECTION--- +list(APPEND REQUIRED_QT_PACKAGES Core Quick Gui Multimedia) + +if(USE_QML) + list(APPEND REQUIRED_QT_PACKAGES Quick) + list(APPEND QML_IMPORT_PATH "${CMAKE_SOURCE_DIR}/${QML_DIR}") + set(QML_IMPORT_PATH ${QML_IMPORT_PATH} + CACHE STRING "Qt Creator Import Path" + FORCE) +endif() + +foreach(QT_PACKAGE ${REQUIRED_QT_PACKAGES}) + list(APPEND REQUIRED_QT_LIBS Qt${QT_VERSION_MAJOR}::${QT_PACKAGE}) +endforeach() + +find_package(QT NAMES Qt${QT_VERSION_MAJOR} COMPONENTS ${REQUIRED_QT_PACKAGES} REQUIRED) +find_package(Qt${QT_VERSION_MAJOR} COMPONENTS ${REQUIRED_QT_PACKAGES} REQUIRED) + diff --git a/examples/QmlBarcode/icons/logo.png b/examples/QmlBarcode/icons/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..178f82421dfbb84d0c63d064de736e470379c247 GIT binary patch literal 2471 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 literal 0 HcmV?d00001 diff --git a/examples/QmlBarcode/main.cpp b/examples/QmlBarcode/main.cpp new file mode 100644 index 0000000..8c7e406 --- /dev/null +++ b/examples/QmlBarcode/main.cpp @@ -0,0 +1,48 @@ +#include +#include + +#include "ColorController.h" +#include "VersionHelper.h" + +#include "SBarcodeGenerator.h" +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) +#include "SBarcodeFilter.h" +#else +#include "SBarcodeScanner.h" +#endif + +int main(int argc, char* argv[]) +{ + QCoreApplication::setAttribute(Qt::AA_UseDesktopOpenGL); + +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); +#endif + QGuiApplication app(argc, argv); + QQmlApplicationEngine engine; + +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + qmlRegisterType("com.somcosoftware.scodes", 1, 0, "SBarcodeScanner"); +#else + qmlRegisterType("com.somcosoftware.scodes", 1, 0, "SBarcodeScanner"); +#endif + qmlRegisterType("com.somcosoftware.scodes", 1, 0, "SBarcodeGenerator"); + + ColorController colorController; + qmlRegisterSingletonInstance("com.somcosoftware.scodes", 1, 0, "ColorController", &colorController); + VersionHelper versionHelper; + qmlRegisterSingletonInstance("com.somcosoftware.scodes", 1, 0, "VersionHelper", &versionHelper); + + qmlRegisterSingletonType(QUrl("qrc:/qml/Theme.qml"), "Theme", 1, 0, "Theme"); + + qmlRegisterUncreatableMetaObject( + SCodes::staticMetaObject, "com.somcosoftware.scodes", 1, 0, "SCodes", "Error, enum type"); + + engine.load(QUrl(QStringLiteral("qrc:/qml/main.qml"))); + + if (engine.rootObjects().isEmpty()) { + return -1; + } + + return app.exec(); +} diff --git a/examples/QmlBarcode/qml/CButton.qml b/examples/QmlBarcode/qml/CButton.qml new file mode 100644 index 0000000..5c687ce --- /dev/null +++ b/examples/QmlBarcode/qml/CButton.qml @@ -0,0 +1,25 @@ +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Layouts 1.12 +import QtQuick.Window 2.12 + + +/*! + Classic push button for configure, generate & save operations. + */ +Button { + id: root + + height: 100 + implicitWidth: appWindow.width / 4 + + checkable: true + + palette.buttonText: Theme.textColor + + background: Rectangle { + radius: 10 + color: root.pressed ? Qt.darker( + Theme.backgroundColor) : Theme.backgroundColor + } +} diff --git a/examples/QmlBarcode/qml/CComboBox.qml b/examples/QmlBarcode/qml/CComboBox.qml new file mode 100644 index 0000000..5811a57 --- /dev/null +++ b/examples/QmlBarcode/qml/CComboBox.qml @@ -0,0 +1,19 @@ +import QtQuick 2.12 +import QtQuick.Controls 2.12 + + +/*! + Drop-down menu for barcode format selection & save file format extension + */ +ComboBox { + id: root + + background: Rectangle { + radius: 2 + + border { + color: Theme.borderColor + width: 1 + } + } +} diff --git a/examples/QmlBarcode/qml/CTabButton.qml b/examples/QmlBarcode/qml/CTabButton.qml new file mode 100644 index 0000000..16480e5 --- /dev/null +++ b/examples/QmlBarcode/qml/CTabButton.qml @@ -0,0 +1,32 @@ +import QtQuick 2.15 +import QtQuick.Controls 2.15 + +TabButton { + id: root + background: Item { + anchors.fill: parent + Rectangle { + visible: root.checked + anchors { + left: parent.left + leftMargin: 36 + right: parent.right + rightMargin: 36 + bottom: parent.bottom + } + implicitHeight: 4 + color: Theme.teal + } + } + + contentItem: Text { + text: root.text + font.weight: root.checked ? 700 : 600 + font.bold: root.checked + font.family: "Inter" + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + + color: Theme.black + } +} diff --git a/examples/QmlBarcode/qml/CTextField.qml b/examples/QmlBarcode/qml/CTextField.qml new file mode 100644 index 0000000..7a9e83b --- /dev/null +++ b/examples/QmlBarcode/qml/CTextField.qml @@ -0,0 +1,25 @@ +import QtQuick 2.12 +import QtQuick.Controls 2.12 + + +/*! + Field for setting width, height, margin & error correction code level parameters. + */ +TextField { + id: root + + property bool inputIsValid: true + + selectByMouse: true + + leftPadding: 5 + + background: Rectangle { + radius: 2 + + border { + color: inputIsValid ? Theme.borderColor : Theme.invalidInputBorderColor + width: 1 + } + } +} diff --git a/examples/QmlBarcode/qml/GeneratorPage.qml b/examples/QmlBarcode/qml/GeneratorPage.qml new file mode 100644 index 0000000..6d19563 --- /dev/null +++ b/examples/QmlBarcode/qml/GeneratorPage.qml @@ -0,0 +1,447 @@ +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtMultimedia 5.12 +import QtQuick.Layouts 1.12 + +import com.somcosoftware.scodes 1.0 + +Item { + SBarcodeGenerator { + id: barcodeGenerator + + onForegroundColorChanged: { + image.source = "" + barcodeGenerator.generate(textField.text) + } + + onBackgroundColorChanged: { + image.source = "" + barcodeGenerator.generate(textField.text) + } + + onGenerationFinished: function (error) { + if (error === "") { + console.log(barcodeGenerator.filePath) + image.source = "file:///" + barcodeGenerator.filePath + } else { + generateLabel.text = error + generatePopup.open() + } + } + } + + Rectangle { + id: dashboard + + anchors.fill: parent + + height: parent.height + width: parent.width + + Rectangle { + id: inputRect + z: 100 + + height: 40 + + anchors { + top: parent.top + left: parent.left + right: parent.right + } + + CTextField { + id: textField + + anchors.fill: parent + + selectByMouse: true + + placeholderText: qsTr("Input") + } + } + + Image { + id: image + + width: parent.width + height: image.width + + anchors { + left: parent.left + right: parent.right + verticalCenter: parent.verticalCenter + } + + cache: false + } + + Rectangle { + id: buttonsRect + + height: 40 + + anchors { + bottom: parent.bottom + left: parent.left + right: parent.right + } + + RowLayout { + id: buttonsLayout + + spacing: 5 + + anchors.fill: parent + + CButton { + id: settingsButton + + Layout.alignment: Qt.AlignHCenter + Layout.bottomMargin: 10 + + text: qsTr("Settings") + + onClicked: { + settingsPopup.open() + } + } + + CButton { + id: generateButton + + Layout.alignment: Qt.AlignHCenter + Layout.bottomMargin: 10 + checkable: false + + text: qsTr("Generate") + + onClicked: { + image.source = "" + if (textField.text === "") { + generateLabel.text = "Input is empty" + generatePopup.open() + } else { + barcodeGenerator.generate(textField.text) + } + } + } + + CButton { + id: saveButton + + Layout.alignment: Qt.AlignHCenter + Layout.bottomMargin: 10 + + text: qsTr("Save") + + onClicked: { + if (barcodeGenerator.saveImage()) { + saveLabel.text = "File successfully saved" + } else { + saveLabel.text = "There was an error while saving file" + } + + imageSavedPopup.open() + } + } + } + } + + Popup { + id: generatePopup + + anchors.centerIn: parent + + dim: true + + modal: true + + Label { + id: generateLabel + + anchors.centerIn: parent + } + + onClosed: { + generateButton.checked = false + } + } + + Popup { + id: imageSavedPopup + + anchors.centerIn: parent + + dim: true + + modal: true + + Label { + id: saveLabel + + anchors.centerIn: parent + } + + onClosed: { + saveButton.checked = false + } + } + + Popup { + id: settingsPopup + + width: parent.width * 0.6 + height: parent.height * 0.6 + + anchors.centerIn: parent + + dim: true + + modal: true + + ColumnLayout { + anchors.fill: parent + + spacing: 5 + + CTextField { + id: widthField + + implicitWidth: parent.width + implicitHeight: parent.height / 10 + + placeholderText: "Current width: " + barcodeGenerator.width + + onEditingFinished: function () { + + var parsedWidth = parseInt(text) + + if (isNaN(parsedWidth) != true && parsedWidth > 0) { + barcodeGenerator.width = parsedWidth + } + } + } + + CTextField { + id: heightField + + implicitWidth: parent.width + implicitHeight: parent.height / 10 + + placeholderText: "Current height: " + barcodeGenerator.height + + onEditingFinished: function () { + + var parsedHeight = parseInt(text) + + if (isNaN(parsedHeight) != true && parsedHeight > 0) { + barcodeGenerator.height = parsedHeight + } + } + } + + CTextField { + id: marginField + + implicitWidth: parent.width + implicitHeight: parent.height / 10 + + placeholderText: "Current margin: " + barcodeGenerator.margin + + onEditingFinished: function () { + + var parsedMargin = parseInt(text) + + if (isNaN(parsedMargin) != true) { + barcodeGenerator.margin = parsedMargin + } + } + } + + CTextField { + id: eccLevelField + + implicitWidth: parent.width + implicitHeight: parent.height / 10 + + placeholderText: "Current ECC Level: " + barcodeGenerator.eccLevel + + onEditingFinished: function () { + barcodeGenerator.eccLevel = text + } + } + + CTextField { + id: foregroundColorField + + implicitWidth: parent.width + implicitHeight: parent.height / 10 + + placeholderText: "Current foreground color: " + barcodeGenerator.foregroundColor + + onTextChanged: function () { + foregroundColorField.inputIsValid = ColorController.checkColor( + foregroundColorField.text) + + if (ColorController.checkColor( + foregroundColorField.text)) { + barcodeGenerator.setForegroundColor( + ColorController.convertStringToColor( + foregroundColorField.text)) + } + } + } + + CTextField { + id: backgroundColorField + + implicitWidth: parent.width + implicitHeight: parent.height / 10 + + placeholderText: "Current background color: " + barcodeGenerator.backgroundColor + + onTextChanged: function () { + backgroundColorField.inputIsValid = ColorController.checkColor( + backgroundColorField.text) + + if (ColorController.checkColor( + backgroundColorField.text)) { + barcodeGenerator.setBackgroundColor( + ColorController.convertStringToColor( + backgroundColorField.text)) + } + } + } + + CComboBox { + id: formatDropDown + + implicitWidth: parent.width + implicitHeight: parent.height / 10 + + model: ListModel { + id: formats + + ListElement { + text: "Aztec" + } + ListElement { + text: "Codabar" + } + ListElement { + text: "Code39" + } + ListElement { + text: "Code93" + } + ListElement { + text: "Code128" + } + ListElement { + text: "DataMatrix" + } + ListElement { + text: "EAN-8" + } + ListElement { + text: "EAN-13" + } + ListElement { + text: "ITF" + } + ListElement { + text: "PDF417" + } + ListElement { + text: "QRCode" + } + ListElement { + text: "UPC-A" + } + ListElement { + text: "UPC-E" + } + } + onCurrentIndexChanged: function () { + var formatAsText = formats.get(currentIndex).text + // a separate method was used because of qml error + // when try to use it as overloaded setter + barcodeGenerator.setFormat(formatAsText) + } + } + + CComboBox { + id: imageFormat + + implicitWidth: parent.width + implicitHeight: parent.height / 10 + + model: ListModel { + id: extensions + + ListElement { + text: "png" + } + + ListElement { + text: "jpg" + } + } + onCurrentIndexChanged: function () { + barcodeGenerator.extension = extensions.get( + currentIndex).text + } + } + + CTextField { + id: fileNameField + + text: qsTr(barcodeGenerator.fileName) + + implicitWidth: parent.width + implicitHeight: parent.height / 10 + + onEditingFinished: { + barcodeGenerator.fileName = text + } + } + + CTextField { + id: imagePathField + + text: qsTr(barcodeGenerator.imagePath) + + implicitWidth: parent.width + implicitHeight: parent.height / 10 + + placeholderText: "Current image path: " + barcodeGenerator.imagePath + + onEditingFinished: { + barcodeGenerator.imagePath = text + } + } + + CTextField { + id: centerImageRatioField + + text: qsTr(barcodeGenerator.centerImageRatio.toString()) + + implicitWidth: parent.width + implicitHeight: parent.height / 10 + + placeholderText: "Current center image ratio: " + + barcodeGenerator.centerImageRatio + + onEditingFinished: { + barcodeGenerator.centerImageRatio = parseInt(text) + } + } + } + + onClosed: { + settingsButton.checked = false + } + } + } +} diff --git a/examples/QmlBarcode/qml/Qt5ScannerOverlay.qml b/examples/QmlBarcode/qml/Qt5ScannerOverlay.qml new file mode 100644 index 0000000..4338634 --- /dev/null +++ b/examples/QmlBarcode/qml/Qt5ScannerOverlay.qml @@ -0,0 +1,30 @@ +import QtQuick 2.12 +import QtGraphicalEffects 1.12 + +Item { + id: root + + property rect captureRect + + Subtrack { + anchors.fill: parent + captureRect: root.captureRect + } + + Text { + id: scanCapsuleText + + anchors { + top: parent.top + topMargin: 19 + left: parent.left + leftMargin: 32 + right: parent.right + rightMargin: 32 + } + text: qsTr("Place the QR code to be scanned inside the frame") + horizontalAlignment: Text.AlignHCenter + color: Theme.white + wrapMode: Text.WordWrap + } +} diff --git a/examples/QmlBarcode/qml/Qt5ScannerPage.qml b/examples/QmlBarcode/qml/Qt5ScannerPage.qml new file mode 100644 index 0000000..aad073f --- /dev/null +++ b/examples/QmlBarcode/qml/Qt5ScannerPage.qml @@ -0,0 +1,98 @@ +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtQuick.Window 2.12 +import QtMultimedia 5.12 + +import com.somcosoftware.scodes 1.0 + +Rectangle { + id: root + + Camera { + id: camera + + focus { + focusMode: CameraFocus.FocusAuto + focusPointMode: CameraFocus.FocusPointAuto + } + } + + VideoOutput { + id: videoOutput + + anchors.fill: parent + source: camera + autoOrientation: true + fillMode: VideoOutput.PreserveAspectCrop + filters: [barcodeScanner] + + Qt5ScannerOverlay { + id: scannerOverlay + anchors.fill: parent + + captureRect: videoOutput.mapRectToItem(barcodeScanner.captureRect) + } + + // used to get camera focus on touched point + MouseArea { + id: focusTouchArea + anchors.fill: parent + enabled: camera.focus.isFocusPointModeSupported(Camera.FocusMacro) + + onClicked: { + camera.focus.customFocusPoint = Qt.point(mouse.x / width, + mouse.y / height) + camera.focus.focusMode = CameraFocus.FocusMacro + camera.focus.focusPointMode = CameraFocus.FocusPointCustom + } + } + } + + SBarcodeScanner { + id: barcodeScanner + + property rect normalizedScanZone: Qt.rect(0.25, 0.25, 0.5, 0.5) + + captureRect: { + if (videoOutput.sourceRect.width < 1 + || videoOutput.contentRect.width < 1) + return Qt.rect(0, 0, 0, 0) + + return videoOutput.mapRectToSource( + videoOutput.mapNormalizedRectToItem(normalizedScanZone)) + } + } + + Rectangle { + id: resultScreen + + anchors.fill: parent + + visible: !barcodeScanner.active + + Column { + anchors.centerIn: parent + spacing: 20 + + Text { + id: scanResultText + + anchors.horizontalCenter: parent.horizontalCenter + + text: barcodeScanner.captured + } + + Button { + id: scanButton + + anchors.horizontalCenter: parent.horizontalCenter + + text: qsTr("Scan again") + + onClicked: { + barcodeScanner.active = true + } + } + } + } +} diff --git a/examples/QmlBarcode/qml/Qt6ScannerOverlay.qml b/examples/QmlBarcode/qml/Qt6ScannerOverlay.qml new file mode 100644 index 0000000..28ca36d --- /dev/null +++ b/examples/QmlBarcode/qml/Qt6ScannerOverlay.qml @@ -0,0 +1,211 @@ +import QtQuick +import Qt5Compat.GraphicalEffects + + +/*! + Area for scanning barcodes + */ +Item { + id: root + + property rect captureRect + + Item { + id: captureZoneCorners + + x: parent.width * root.captureRect.x + y: parent.height * root.captureRect.y + + width: parent.width * root.captureRect.width + height: parent.height * root.captureRect.height + + Rectangle { + id: topLeftCornerH + + anchors { + top: parent.top + left: parent.left + } + + width: 20 + height: 5 + + color: Theme.borderColor + radius: height / 2 + } + + Rectangle { + id: topLeftCornerV + + anchors { + top: parent.top + left: parent.left + } + + width: 5 + height: 20 + + color: Theme.borderColor + radius: width / 2 + } + + // ---------------------- + Rectangle { + id: bottomLeftCornerH + + anchors { + bottom: parent.bottom + left: parent.left + } + + width: 20 + height: 5 + + color: Theme.borderColor + radius: height / 2 + } + + Rectangle { + id: bottomLeftCornerV + + anchors { + bottom: parent.bottom + left: parent.left + } + + width: 5 + height: 20 + + color: Theme.borderColor + radius: width / 2 + } + + // ---------------------- + Rectangle { + id: topRightCornerH + + anchors { + top: parent.top + right: parent.right + } + + width: 20 + height: 5 + + color: Theme.borderColor + radius: height / 2 + } + + Rectangle { + id: topRightCornerV + + anchors { + top: parent.top + right: parent.right + } + + width: 5 + height: 20 + + color: Theme.borderColor + radius: width / 2 + } + + // ---------------------- + Rectangle { + id: bottomRightCornerH + + anchors { + bottom: parent.bottom + right: parent.right + } + + width: 20 + height: 5 + + color: Theme.borderColor + radius: height / 2 + } + + Rectangle { + id: bottomRightCornerV + + anchors { + bottom: parent.bottom + right: parent.right + } + + width: 5 + height: 20 + + color: Theme.borderColor + radius: width / 2 + } + + Rectangle { + id: scanIndicator + + anchors { + horizontalCenter: parent.horizontalCenter + } + + width: parent.width + height: 1 + + color: Theme.borderColor + + SequentialAnimation { + id: scanIndicatorAnimation + + loops: Animation.Infinite + PropertyAnimation { + id: toTopAnimation + + target: scanIndicator + property: "y" + duration: 2000 + to: captureZoneCorners.height + } + + PropertyAnimation { + id: toBottomAnimation + + target: scanIndicator + property: "y" + duration: 2000 + to: 0 + } + } + } + + RectangularGlow { + id: effect + + anchors.centerIn: scanIndicator + + width: scanIndicator.width / 2 + height: scanIndicator.height + + glowRadius: 50 + spread: 0.2 + color: Theme.borderColor + cornerRadius: glowRadius + } + } + + Text { + id: scanCapsuleText + + anchors { + verticalCenter: captureZoneCorners.bottom + horizontalCenter: captureZoneCorners.horizontalCenter + } + + text: qsTr("Scan barcode") + color: Theme.borderColor + } + + onCaptureRectChanged: { + scanIndicatorAnimation.start() + } +} diff --git a/examples/QmlBarcode/qml/Qt6ScannerPage.qml b/examples/QmlBarcode/qml/Qt6ScannerPage.qml new file mode 100644 index 0000000..2d8149f --- /dev/null +++ b/examples/QmlBarcode/qml/Qt6ScannerPage.qml @@ -0,0 +1,94 @@ +import QtQuick +import QtQuick.Controls +import QtMultimedia +import com.scythestudio.scodes 1.0 + + +/*! + Barcode scanner main page. All QML elements managing from here. + */ +ApplicationWindow { + id: root + + width: Qt.platform.os === "android" + || Qt.platform.os === "ios" ? Screen.width : 1280 + height: Qt.platform.os === "android" + || Qt.platform.os === "ios" ? Screen.height : 720 + + visible: true + + SBarcodeScanner { + id: barcodeScanner + + forwardVideoSink: videoOutput.videoSink + scanning: !resultScreen.visible + + captureRect: Qt.rect(1 / 4, 1 / 4, 1 / 2, 1 / 2) + + onCapturedChanged: function (captured) { + scanResultText.text = captured + resultScreen.visible = true + } + } + + VideoOutput { + id: videoOutput + + anchors.fill: parent + + width: root.width + + focus: visible + fillMode: VideoOutput.PreserveAspectCrop + } + + Qt6ScannerOverlay { + id: scannerOverlay + + anchors.fill: parent + + captureRect: barcodeScanner.captureRect + } + + Rectangle { + id: resultScreen + + anchors.fill: parent + + visible: false + + Column { + anchors.centerIn: parent + + spacing: 20 + + Text { + id: scanResultText + + anchors.horizontalCenter: parent.horizontalCenter + + color: Theme.textColor + } + + Button { + id: scanButton + + anchors.horizontalCenter: parent.horizontalCenter + + implicitWidth: 100 + implicitHeight: 50 + + Text { + anchors.centerIn: parent + + text: qsTr("Scan again") + color: Theme.textColor + } + + onClicked: { + resultScreen.visible = false + } + } + } + } +} diff --git a/examples/QmlBarcode/qml/Subtrack.qml b/examples/QmlBarcode/qml/Subtrack.qml new file mode 100644 index 0000000..6b96484 --- /dev/null +++ b/examples/QmlBarcode/qml/Subtrack.qml @@ -0,0 +1,28 @@ +// Subtrack.qml +import QtQuick 2.12 + +ShaderEffect { + id: root + + anchors.fill: parent + + // Properties + property color baseColor: "#535353" + property real outerOpacity: 0.71 + property rect captureRect: Qt.rect(0, 0, 0, 0) + + // Shader uniforms - pass both captureRect and size + property color uColor: baseColor + property real uOpacity: outerOpacity + property vector4d uCaptureRect: Qt.vector4d(captureRect.x, captureRect.y, + captureRect.width, + captureRect.height) + property vector2d uSize: Qt.vector2d(width, height) + + // Update when size changes + onWidthChanged: update() + onHeightChanged: update() + + vertexShader: "qrc:/shaders/subtrack.vert" + fragmentShader: "qrc:/shaders/subtrack.frag" +} diff --git a/examples/QmlBarcode/qml/Theme.qml b/examples/QmlBarcode/qml/Theme.qml new file mode 100644 index 0000000..e409f86 --- /dev/null +++ b/examples/QmlBarcode/qml/Theme.qml @@ -0,0 +1,23 @@ +pragma Singleton + +import QtQuick 2.12 + +QtObject { + id: root + + readonly property color black: "#000000" + readonly property color white: "#FFFFFF" + readonly property color transparent: "transparent" + readonly property color teal: "#1DCA9B" + readonly property color red: "#E64646" + + readonly property QtObject subtrack: QtObject { + readonly property color backgroundColor: "#535353" + readonly property real opacity: 0.71 + } + + readonly property QtObject background: QtObject { + readonly property color color1: root.white + readonly property color color2: "#E8E8E8" + } +} diff --git a/examples/QmlBarcode/qml/main.qml b/examples/QmlBarcode/qml/main.qml new file mode 100644 index 0000000..02e2bac --- /dev/null +++ b/examples/QmlBarcode/qml/main.qml @@ -0,0 +1,91 @@ +import QtQuick 2.15 +import QtQuick.Controls 2.15 +import QtQuick.Layouts 1.15 + +import com.somcosoftware.scodes 1.0 + +ApplicationWindow { + id: appWindow + + visible: true + + width: Qt.platform.os === "android" + || Qt.platform.os === "ios" ? Screen.width : 1280 + height: Qt.platform.os === "android" + || Qt.platform.os === "ios" ? Screen.height : 720 + + background: Rectangle { + gradient: Gradient { + GradientStop { + position: 0.0 + color: Theme.background.color1 + } + GradientStop { + position: 1.0 + color: Theme.background.color2 + } + } + } + + MouseArea { + id: hideKeyboard + anchors.fill: parent + onClicked: { + Qt.inputMethod.hide() + } + } + + ColumnLayout { + anchors.fill: parent + + Image { + Layout.fillWidth: true + Layout.alignment: Qt.AlignCenter + Layout.preferredHeight: 28 + Layout.topMargin: 16 + Layout.bottomMargin: 16 + fillMode: Image.PreserveAspectFit + source: "qrc:/icons/logo.png" + } + + TabBar { + id: tabBar + Layout.fillWidth: true + + background: Item { + anchors.fill: parent + Rectangle { + anchors { + left: parent.left + right: parent.right + bottom: parent.bottom + } + implicitHeight: 1 + color: "#A3C8BF" + } + } + + CTabButton { + text: qsTr("Scan") + } + + CTabButton { + text: qsTr("Generate") + } + } + + StackLayout { + currentIndex: tabBar.currentIndex + Layout.fillWidth: true + Layout.fillHeight: true + + Loader { + source: VersionHelper.isQt6 ? "Qt6ScannerPage.qml" : "Qt5ScannerPage.qml" + } + + Loader { + source: "GeneratorPage.qml" + } + } + } +} diff --git a/examples/QmlBarcode/qrScanner/QrDecoder.cpp b/examples/QmlBarcode/qrScanner/QrDecoder.cpp new file mode 100644 index 0000000..1c8fb39 --- /dev/null +++ b/examples/QmlBarcode/qrScanner/QrDecoder.cpp @@ -0,0 +1,200 @@ +#include "QrDecoder.h" + +#include + +#include +#include +#include +#include +#include + +#include "ReadBarcode.h" + +#define STB_IMAGE_IMPLEMENTATION +#include "stb_image.h" + +namespace ZXing { +namespace Qt { +using ZXing::DecodeHints; +using ZXing::BarcodeFormat; +using ZXing::BarcodeFormats; +using ZXing::Binarizer; + +template +QDebug operator << (QDebug dbg, const T& v) +{ + return dbg.noquote() << QString::fromStdString(ToString(v)); +} + +class Result : private ZXing::Result +{ +public: + explicit Result(ZXing::Result&& r) : ZXing::Result(std::move(r)){ } + + using ZXing::Result::format; + using ZXing::Result::isValid; + using ZXing::Result::status; + + inline QString text() const { return QString::fromWCharArray(ZXing::Result::text().c_str()); } +}; + +Result ReadBarcode(const QImage& img, const DecodeHints& hints = { }) +{ + auto ImgFmtFromQImg = [](const QImage& img){ + switch (img.format()) { + case QImage::Format_ARGB32: + case QImage::Format_RGB32: + #if Q_BYTE_ORDER == Q_LITTLE_ENDIAN + return ImageFormat::BGRX; + + #else + return ImageFormat::XRGB; + + #endif + case QImage::Format_RGB888: return ImageFormat::RGB; + + case QImage::Format_RGBX8888: + case QImage::Format_RGBA8888: return ImageFormat::RGBX; + + case QImage::Format_Grayscale8: return ImageFormat::Lum; + + default: return ImageFormat::None; + } + }; + + auto exec = [&](const QImage& img){ + return Result(ZXing::ReadBarcode({ img.bits(), img.width(), img.height(), ImgFmtFromQImg(img) }, hints)); + }; + + return ImgFmtFromQImg(img) == ImageFormat::None ? exec(img.convertToFormat(QImage::Format_RGBX8888)) : exec(img); +} +} // namespace Qt +} // namespace ZXing + +using namespace ZXing::Qt; + +std::ostream& operator << (std::ostream& os, const std::vector& points) +{ + for (const auto& p : points) { + os << int(p.x() + .5f) << "x" << int(p.y() + .5f) << " "; + } + + return os; +} + +// ! This is linked to the private implementations of Qt. Check, when using a new versino of Qt that it still +// ! works. E.g. by saving the images to disk and visually inspect them +extern QImage qt_imageFromVideoFrame(const QVideoFrame &frame); + +QrDecoder::QrDecoder(QObject *parent) : QObject(parent) +{ } + +QString QrDecoder::captured() const +{ + return _captured; +} + +void QrDecoder::setCaptured(QString captured) +{ + if (_captured == captured) { + return; + } + + _captured = captured; + + emit capturedChanged(_captured); +} + +void QrDecoder::setIsDecoding(bool isDecoding) +{ + if (_isDecoding == isDecoding) { + return; + } + + _isDecoding = isDecoding; + + emit isDecodingChanged(_isDecoding); +} + +void QrDecoder::setVideoFrame(const QVideoFrame &videoFrame) +{ + _videoFrame = videoFrame; +} + +bool QrDecoder::isDecoding() const +{ + return _isDecoding; +} + +void QrDecoder::process(const QImage capturedImage) +{ + setIsDecoding(true); + + const auto hints = DecodeHints() + .setFormats(BarcodeFormat::QR_CODE | BarcodeFormat::DATA_MATRIX) + .setTryHarder(true) + .setBinarizer(Binarizer::FixedThreshold); + + const auto result = ReadBarcode(capturedImage, hints); + + if (result.isValid()) { + setCaptured(result.text()); + } + + setIsDecoding(false); +} + +QVideoFrame QrDecoder::videoFrame() const +{ + return _videoFrame; +} + +QImage QrDecoder::videoFrameToImage(const QVideoFrame &videoFrame) +{ + if (videoFrame.handleType() == QAbstractVideoBuffer::NoHandle) { + const QImage::Format imageFormat = QVideoFrame::imageFormatFromPixelFormat(videoFrame.pixelFormat()); + + QImage image(videoFrame.bits(), + videoFrame.width(), + videoFrame.height(), + videoFrame.bytesPerLine(), + imageFormat); + + // QImage image = qt_imageFromVideoFrame( videoFrame ); + if (image.isNull() ) { + return QImage(); + } + + if (image.format() != QImage::Format_ARGB32) { + image = image.convertToFormat(QImage::Format_ARGB32); + } + + return image; + } + + if (videoFrame.handleType() == QAbstractVideoBuffer::GLTextureHandle) { + QImage image(videoFrame.width(), videoFrame.height(), QImage::Format_ARGB32); + + GLuint textureId = static_cast( videoFrame.handle().toInt() ); + + QOpenGLContext *ctx = QOpenGLContext::currentContext(); + + QOpenGLFunctions *f = ctx->functions(); + + GLuint fbo; + + f->glGenFramebuffers(1, &fbo); + + GLint prevFbo; + + f->glGetIntegerv(GL_FRAMEBUFFER_BINDING, &prevFbo); + f->glBindFramebuffer(GL_FRAMEBUFFER, fbo); + f->glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, textureId, 0); + f->glReadPixels(0, 0, videoFrame.width(), videoFrame.height(), GL_RGBA, GL_UNSIGNED_BYTE, image.bits() ); + f->glBindFramebuffer(GL_FRAMEBUFFER, static_cast( prevFbo ) ); + + return image.rgbSwapped(); + } + + return QImage(); +} // QRDecoder::videoFrameToImage diff --git a/examples/QmlBarcode/qrScanner/QrDecoder.h b/examples/QmlBarcode/qrScanner/QrDecoder.h new file mode 100644 index 0000000..779b893 --- /dev/null +++ b/examples/QmlBarcode/qrScanner/QrDecoder.h @@ -0,0 +1,113 @@ +#ifndef QR_DECODER_H +#define QR_DECODER_H + +#include +#include +#include + +/*! + * \brief Class used to convert video frame into image and scan QR code from it. + */ + +class QrDecoder : public QObject +{ + Q_OBJECT + Q_PROPERTY(QString captured READ captured WRITE setCaptured NOTIFY capturedChanged) + Q_PROPERTY(bool isDecoding READ isDecoding WRITE setIsDecoding NOTIFY isDecodingChanged) + +public: + + /*! + * \fn explicit QrDecoder(QObject *parent = nullptr) + * \brief Constructor. + * \param QObject *parent - a pointer to the parent object. + */ + explicit QrDecoder(QObject *parent = nullptr); + + /*! + * \fn QString captured() const + * \brief Returns the captured barcode string. + */ + QString captured() const; + + /*! + * \fn bool isDecoding() const + * \brief Returns the decoding state. + */ + bool isDecoding() const; + + /*! + * \fn QVideoFrame videoFrame() const + * \brief Returns the video frame of data. + */ + QVideoFrame videoFrame() const; + + /*! + * \fn void setCtx(QOpenGLContext *ctx) + * \brief Sets OpenGLContext. + * \params QOpenGLContext *ctx - a pointer to opengl context. + */ + void setCtx(QOpenGLContext *ctx); + + /*! + * \fn void setVideoFrame(const QVideoFrame &videoFrame) + * \brief Sets video frame of data. + * \params const QVideoFrame &videoFrame - video frame of data. + */ + void setVideoFrame(const QVideoFrame &videoFrame); + + /*! + * \fn static QImage videoFrameToImage(QVideoFrame &videoFrame) + * \brief Returns image from video frame. + * \param QVideoFrame &videoFrame - frame of video data. + */ + static QImage videoFrameToImage(const QVideoFrame &videoFrame); + +public slots: + + /*! + * \fn void process(const QImage capturedImage) + * \brief Processes the image to scan the given barcode format types. + * \param const QImage capturedImage - captured image. + */ + void process(const QImage capturedImage); + +signals: + + /*! + * \brief This signal is emitted to send captured barcode string to QML. + * \param const QString &captured - captured barcode string. + */ + void capturedChanged(const QString &captured); + + /*! + * \brief This signal is emitted to send decoding state to QML. + * \param bool isDecoding - decoding state. + */ + void isDecodingChanged(bool isDecoding); + +private: + QString _captured = ""; + + QOpenGLContext *_ctx; + + bool _isDecoding = false; + + QVideoFrame _videoFrame; + + /*! + * \fn void setCaptured(const QString &captured) + * \brief Sets captured barcode string. + * \param QString captured - captured barcode string. + */ + void setCaptured(QString captured); + + /*! + * \fn void setIsDecoding(bool isDecoding) + * \brief Sets decoding state. + * \param bool isDecoding - decoding state. + */ + void setIsDecoding(bool isDecoding); +}; + +#endif // QR_DECODER_H diff --git a/examples/QmlBarcode/qrScanner/QrScannerFilter.cpp b/examples/QmlBarcode/qrScanner/QrScannerFilter.cpp new file mode 100644 index 0000000..a55b8ec --- /dev/null +++ b/examples/QmlBarcode/qrScanner/QrScannerFilter.cpp @@ -0,0 +1,126 @@ +#include "QrScannerFilter.h" +#include "QrDecoder.h" + +#include +#include +#include +#include +#include +#include +#include + +void processImage(QrDecoder *decoder, const QImage &image) +{ + decoder->process(image); +}; + +/// This is linked to the private implementations of Qt. Check, when using a new versino of Qt that it still +/// works. E.g. by saving the images to disk and visually inspect them +extern QImage qt_imageFromVideoFrame(const QVideoFrame &frame); +class QRRunnable : public QVideoFilterRunnable +{ +public: + + /*! + * \fn QrRunnable(QrScannerFilter *filter) + * \brief Constructor. + * \param QrScannerFilter *filter - a pointer to filter. + */ + QRRunnable(QrScannerFilter *filter) + { + _filter = filter; + } + + /*! + * \fn QVideoFrame run(QVideoFrame *input, const QVideoSurfaceFormat &surfaceFormat, QVideoFilterRunnable::RunFlags flags) override + * \brief Run method in order to asynchronously process the input video frame. + * \param QVideoFrame *input - a pointer to frame of video data. + * \param const QVideoSurfaceFormat &surfaceFormat - the stream format of a video presentation surface. + * \param QVideoFilterRunnable::RunFlags flags - typedef for QFlags. + */ + QVideoFrame run(QVideoFrame * input, + const QVideoSurfaceFormat &surfaceFormat, + QVideoFilterRunnable::RunFlags flags) override + { + Q_UNUSED(surfaceFormat); + Q_UNUSED(flags); + + if (_filter->getDecoder()->isDecoding()) { + return *input; + } + + if (_filter->getFutureThread().isRunning()) { + return *input; + } + + _filter->getDecoder()->setVideoFrame(*input); + + QImage captured = QrDecoder::videoFrameToImage(*input); + _filter->getFutureThread() = QtConcurrent::run(processImage, _filter->getDecoder(), captured); + + return *input; + } + +private: + QrScannerFilter *_filter; +}; + + +QrScannerFilter::QrScannerFilter() +{ + _decoder = new QrDecoder; + + QObject::connect(_decoder, &QrDecoder::capturedChanged, this, &QrScannerFilter::setCaptured); +} + +QVideoFilterRunnable *QrScannerFilter::createFilterRunnable() +{ + return new QRRunnable(this); +} + +QString QrScannerFilter::captured() const +{ + return _captured; +} + +void QrScannerFilter::setCaptured(const QString &newValue) +{ + if (newValue == _captured) { + return; + } + + _captured = newValue; + + emit capturedChanged(); +} + +QString QrScannerFilter::assayName() const +{ + return m_assayName; +} + +QrDecoder *QrScannerFilter::getDecoder() const +{ + return _decoder; +} + +bool QrScannerFilter::isDecoding() const +{ + return _isDecoding; +} + +void QrScannerFilter::setAssayName(QString assayName) +{ + if (m_assayName == assayName) { + return; + } + + m_assayName = assayName; + + emit assayNameChanged(m_assayName); +} + +QFuture QrScannerFilter::getFutureThread() const +{ + return _futureThread; +} diff --git a/examples/QmlBarcode/qrScanner/QrScannerFilter.h b/examples/QmlBarcode/qrScanner/QrScannerFilter.h new file mode 100644 index 0000000..94892d5 --- /dev/null +++ b/examples/QmlBarcode/qrScanner/QrScannerFilter.h @@ -0,0 +1,125 @@ +#ifndef QRSCANNERFILTER_H +#define QRSCANNERFILTER_H + +#include +#include + +#include "QrDecoder.h" + +/*! + * \brief Filter used to capture QR code from camera + */ +class QrScannerFilter : public QAbstractVideoFilter +{ + Q_OBJECT + + Q_PROPERTY(QRectF captureRect MEMBER _captureRect NOTIFY captureRectChanged) + Q_PROPERTY(QString captured READ captured NOTIFY capturedChanged) + Q_PROPERTY(bool isDecoding READ isDecoding NOTIFY isDecodingChanged) + Q_PROPERTY(QString assayName READ assayName WRITE setAssayName NOTIFY assayNameChanged) + +public: + + /*! + * \fn QrScannerFilter() + * \brief Constructor. + */ + QrScannerFilter(); + + /*! + * \fn QString captured() const + * \brief Returns the captured barcode string. + */ + QString captured() const; + + /*! + * \fn QrDecoder *getDecoder() const + * \brief Returns the decoder. + */ + QrDecoder *getDecoder() const; + + /*! + * \fn QFuture getFutureThread() const + * \brief Returns the future thread. + */ + QFuture getFutureThread() const; + + /*! + * \fn bool isDecoding() const + * \brief Returns the decoding state. + */ + bool isDecoding() const; + + /*! + * \fn QVideoFilterRunnable *createFilterRunnable() override + * \brief Returns instance of the SBarcodeFilterRunnable subclass. + */ + QVideoFilterRunnable *createFilterRunnable() override; + + /*! + * \fn QString assayName() const + * \brief Returns the assay name. + */ + QString assayName() const; + +public slots: + + /*! + * \fn void setAssayName(QString assayName); + * \brief Sets the assay name. + * \param QString assayName - assay name. + */ + void setAssayName(QString assayName); + +signals: + + /*! + * \brief This signal is emitted when capture area rectangle changed. + */ + void captureRectChanged(); + + /*! + * \brief This signal is emitted when captured barcode string changed. + */ + void capturedChanged(); + + /*! + * \brief This signal is emitted to send decoding state to QML. + * \param bool isDecoding - decoding state. + */ + void isDecodingChanged(bool isDecoding); + + /*! + * \brief This signal is emitted to send assay name to QML. + * \param QString assayName - assay name. + */ + void assayNameChanged(QString assayName); + +private slots: + + /*! + * \fn void setCaptured(const QString &captured) + * \brief Sets captured barcode string. + * \param const QString &captured - captured barcode string. + */ + void setCaptured(const QString &captured); + +private: + QSharedPointer _mutexP; + + QRectF _captureRect; + + QString _captured; + + // QtEgoo::QtCapsuleQRData _capturedData; + + QrDecoder *_decoder; + + QFuture _futureThread; + + bool _isDecoding; + + QString m_assayName; +}; + +#endif // QRSCANNERFILTER_H diff --git a/examples/QmlBarcode/shaders/subtrack.frag b/examples/QmlBarcode/shaders/subtrack.frag new file mode 100644 index 0000000..8f14613 --- /dev/null +++ b/examples/QmlBarcode/shaders/subtrack.frag @@ -0,0 +1,22 @@ +uniform highp vec4 uColor; +uniform highp float uOpacity; +uniform highp vec4 uCaptureRect; +uniform highp vec2 uSize; +varying highp vec2 vTexCoord; + +void main() { + // Convert normalized coordinates to pixel coordinates + highp vec2 pixelCoord = vTexCoord * uSize; + + // Check if current pixel is inside captureRect + highp bool inRect = (pixelCoord.x >= uCaptureRect.x && + pixelCoord.x <= uCaptureRect.x + uCaptureRect.z && + pixelCoord.y >= uCaptureRect.y && + pixelCoord.y <= uCaptureRect.y + uCaptureRect.w); + + if (inRect) { + gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0); + } else { + gl_FragColor = vec4(uColor.rgb, uOpacity); + } +} diff --git a/examples/QmlBarcode/shaders/subtrack.vert b/examples/QmlBarcode/shaders/subtrack.vert new file mode 100644 index 0000000..3a565c9 --- /dev/null +++ b/examples/QmlBarcode/shaders/subtrack.vert @@ -0,0 +1,9 @@ +uniform highp mat4 qt_Matrix; +attribute highp vec4 qt_Vertex; +attribute highp vec2 qt_MultiTexCoord0; +varying highp vec2 vTexCoord; + +void main() { + vTexCoord = qt_MultiTexCoord0; + gl_Position = qt_Matrix * qt_Vertex; +} From 50c8bba93349c28655c2abe75deda36a6bc5da2e Mon Sep 17 00:00:00 2001 From: Oleksandr Movchan Date: Thu, 5 Feb 2026 18:09:17 +0200 Subject: [PATCH 2/9] Working on design --- examples/QmlBarcode/Qt5qml.qrc | 5 + examples/QmlBarcode/icons/arrow_drop_down.svg | 5 + examples/QmlBarcode/icons/check.svg | 5 + examples/QmlBarcode/icons/close.svg | 5 + examples/QmlBarcode/icons/download.svg | 5 + examples/QmlBarcode/icons/obraz.png | Bin 0 -> 44222 bytes examples/QmlBarcode/qml/CButton.qml | 61 +- examples/QmlBarcode/qml/CComboBox.qml | 147 ++++- examples/QmlBarcode/qml/CTabButton.qml | 8 +- examples/QmlBarcode/qml/CTextField.qml | 33 +- examples/QmlBarcode/qml/GeneratorPage.qml | 559 ++++++------------ examples/QmlBarcode/qml/Qt5ScannerOverlay.qml | 2 + examples/QmlBarcode/qml/Qt5ScannerPage.qml | 70 ++- examples/QmlBarcode/qml/Theme.qml | 34 ++ examples/QmlBarcode/qml/main.qml | 12 +- 15 files changed, 509 insertions(+), 442 deletions(-) create mode 100644 examples/QmlBarcode/icons/arrow_drop_down.svg create mode 100644 examples/QmlBarcode/icons/check.svg create mode 100644 examples/QmlBarcode/icons/close.svg create mode 100644 examples/QmlBarcode/icons/download.svg create mode 100644 examples/QmlBarcode/icons/obraz.png diff --git a/examples/QmlBarcode/Qt5qml.qrc b/examples/QmlBarcode/Qt5qml.qrc index fd2d1b6..d6f37e6 100644 --- a/examples/QmlBarcode/Qt5qml.qrc +++ b/examples/QmlBarcode/Qt5qml.qrc @@ -13,5 +13,10 @@ qml/Subtrack.qml shaders/subtrack.frag shaders/subtrack.vert + icons/close.svg + icons/download.svg + icons/obraz.png + icons/arrow_drop_down.svg + icons/check.svg diff --git a/examples/QmlBarcode/icons/arrow_drop_down.svg b/examples/QmlBarcode/icons/arrow_drop_down.svg new file mode 100644 index 0000000..44c3613 --- /dev/null +++ b/examples/QmlBarcode/icons/arrow_drop_down.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/examples/QmlBarcode/icons/check.svg b/examples/QmlBarcode/icons/check.svg new file mode 100644 index 0000000..a5659dc --- /dev/null +++ b/examples/QmlBarcode/icons/check.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/examples/QmlBarcode/icons/close.svg b/examples/QmlBarcode/icons/close.svg new file mode 100644 index 0000000..fa5fce3 --- /dev/null +++ b/examples/QmlBarcode/icons/close.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/examples/QmlBarcode/icons/download.svg b/examples/QmlBarcode/icons/download.svg new file mode 100644 index 0000000..7602369 --- /dev/null +++ b/examples/QmlBarcode/icons/download.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/examples/QmlBarcode/icons/obraz.png b/examples/QmlBarcode/icons/obraz.png new file mode 100644 index 0000000000000000000000000000000000000000..effa3a6270616091d0a724171eb567b76660a2ee GIT binary patch literal 44222 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≥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 G(f popup.implicitHeight + } + } + + background: Rectangle { + color: Theme.white + radius: 22 + } + } + + delegate: Rectangle { + id: comboBoxDelegate + required property var model + required property int index + + property bool isCurrentItem: ListView.view.currentIndex === index + + height: 36 + width: ListView.view.width - scrollBar.width + color: Theme.white + Rectangle { + anchors { + left: parent.left + right: parent.right + bottom: parent.bottom + } + height: 1 + color: Theme.shadowGreen + opacity: 0.2 + } + + RowLayout { + spacing: 16 + anchors { + fill: parent + leftMargin: root.leftPadding + rightMargin: root.rightPadding + } + + Text { + Layout.fillWidth: true + text: comboBoxDelegate.model[root.textRole] + font.pixelSize: 16 + font.bold: comboBoxDelegate.isCurrentItem + color: Theme.black + } - background: Rectangle { - radius: 2 + Image { + Layout.preferredHeight: 32 + Layout.preferredWidth: 32 + fillMode: Image.PreserveAspectFit + source: "qrc:/icons/check.svg" + visible: comboBoxDelegate.isCurrentItem + } + } - border { - color: Theme.borderColor - width: 1 + MouseArea { + anchors.fill: parent + onClicked: { + root.currentIndex = index + root.popup.close() + } + } } - } } diff --git a/examples/QmlBarcode/qml/CTabButton.qml b/examples/QmlBarcode/qml/CTabButton.qml index 16480e5..465995c 100644 --- a/examples/QmlBarcode/qml/CTabButton.qml +++ b/examples/QmlBarcode/qml/CTabButton.qml @@ -6,7 +6,6 @@ TabButton { background: Item { anchors.fill: parent Rectangle { - visible: root.checked anchors { left: parent.left leftMargin: 36 @@ -15,15 +14,16 @@ TabButton { bottom: parent.bottom } implicitHeight: 4 - color: Theme.teal + visible: root.checked + color: Theme.tabbar.activeBorderColor } } contentItem: Text { text: root.text - font.weight: root.checked ? 700 : 600 font.bold: root.checked - font.family: "Inter" + font.family: Theme.fontFamily + font.pixelSize: 16 horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter diff --git a/examples/QmlBarcode/qml/CTextField.qml b/examples/QmlBarcode/qml/CTextField.qml index 7a9e83b..785c417 100644 --- a/examples/QmlBarcode/qml/CTextField.qml +++ b/examples/QmlBarcode/qml/CTextField.qml @@ -1,25 +1,30 @@ -import QtQuick 2.12 -import QtQuick.Controls 2.12 +import QtQuick 2.15 +import QtQuick.Controls 2.15 /*! Field for setting width, height, margin & error correction code level parameters. */ TextField { - id: root + id: root - property bool inputIsValid: true + background: Item { + anchors.fill: parent - selectByMouse: true - - leftPadding: 5 + Rectangle { + anchors { + left: parent.left + right: parent.right + bottom: parent.bottom + } + height: 2 + color: Theme.textField.borderColor + } + } - background: Rectangle { - radius: 2 + font.pixelSize: 16 + font.family: Theme.fontFamily - border { - color: inputIsValid ? Theme.borderColor : Theme.invalidInputBorderColor - width: 1 - } - } + placeholderTextColor: Theme.textField.placeholderTextColor + color: Theme.textField.textColor } diff --git a/examples/QmlBarcode/qml/GeneratorPage.qml b/examples/QmlBarcode/qml/GeneratorPage.qml index 6d19563..8e2c5cb 100644 --- a/examples/QmlBarcode/qml/GeneratorPage.qml +++ b/examples/QmlBarcode/qml/GeneratorPage.qml @@ -10,438 +10,255 @@ Item { id: barcodeGenerator onForegroundColorChanged: { - image.source = "" barcodeGenerator.generate(textField.text) } onBackgroundColorChanged: { - image.source = "" barcodeGenerator.generate(textField.text) } onGenerationFinished: function (error) { + resultStack.currentIndex = 1 if (error === "") { console.log(barcodeGenerator.filePath) - image.source = "file:///" + barcodeGenerator.filePath + resultImage.source = "file:///" + barcodeGenerator.filePath } else { - generateLabel.text = error - generatePopup.open() + errorLabel.text = error } } } - Rectangle { - id: dashboard - - anchors.fill: parent - - height: parent.height - width: parent.width - - Rectangle { - id: inputRect - z: 100 - - height: 40 - - anchors { - top: parent.top - left: parent.left - right: parent.right - } - - CTextField { - id: textField - - anchors.fill: parent - - selectByMouse: true - - placeholderText: qsTr("Input") - } - } - - Image { - id: image - - width: parent.width - height: image.width - - anchors { - left: parent.left - right: parent.right - verticalCenter: parent.verticalCenter - } - - cache: false + StackLayout { + id: resultStack + anchors { + fill: parent + margins: 16 } - Rectangle { - id: buttonsRect - - height: 40 - - anchors { - bottom: parent.bottom - left: parent.left - right: parent.right - } - - RowLayout { - id: buttonsLayout - - spacing: 5 - + Item { + ColumnLayout { anchors.fill: parent + spacing: 32 + + ColumnLayout { + Layout.fillWidth: true + + spacing: 8 + Text { + Layout.fillWidth: true + text: qsTr("Select format to generate") + color: Theme.textColor + font { + pixelSize: 14 + family: Theme.fontFamily + bold: true + } + } - CButton { - id: settingsButton - - Layout.alignment: Qt.AlignHCenter - Layout.bottomMargin: 10 - - text: qsTr("Settings") + CComboBox { + id: formatDropDown + Layout.fillWidth: true + textRole: "text" + + model: ListModel { + ListElement { + text: "Aztec" + } + ListElement { + text: "Codabar" + } + ListElement { + text: "Code39" + } + ListElement { + text: "Code93" + } + ListElement { + text: "Code128" + } + ListElement { + text: "DataMatrix" + } + ListElement { + text: "EAN-8" + } + ListElement { + text: "EAN-13" + } + ListElement { + text: "ITF" + } + ListElement { + text: "PDF417" + } + ListElement { + text: "QRCode" + } + ListElement { + text: "UPC-A" + } + ListElement { + text: "UPC-E" + } + } - onClicked: { - settingsPopup.open() + onCurrentTextChanged: function () { + barcodeGenerator.setFormat(currentText) + } } } - CButton { - id: generateButton - - Layout.alignment: Qt.AlignHCenter - Layout.bottomMargin: 10 - checkable: false + ColumnLayout { + Layout.fillWidth: true + spacing: 8 + Text { + Layout.fillWidth: true + text: qsTr("Enter text") + color: Theme.textColor + font { + pixelSize: 14 + family: Theme.fontFamily + bold: true + } + } - text: qsTr("Generate") + CTextField { + id: textField + Layout.fillWidth: true + placeholderText: qsTr("Input") + } + } - onClicked: { - image.source = "" - if (textField.text === "") { - generateLabel.text = "Input is empty" - generatePopup.open() - } else { - barcodeGenerator.generate(textField.text) + Item { + Layout.fillWidth: true + Layout.fillHeight: true + Image { + anchors { + fill: parent + margins: 16 } + fillMode: Image.PreserveAspectFit + source: "qrc:/icons/obraz.png" } } CButton { - id: saveButton - - Layout.alignment: Qt.AlignHCenter - Layout.bottomMargin: 10 - - text: qsTr("Save") - + Layout.fillWidth: true + text: qsTr("Generate") + backgroundColor: Theme.teal + textColor: Theme.white + enabled: textField.text !== "" onClicked: { - if (barcodeGenerator.saveImage()) { - saveLabel.text = "File successfully saved" - } else { - saveLabel.text = "There was an error while saving file" - } - - imageSavedPopup.open() + barcodeGenerator.generate(textField.text) } } } } - Popup { - id: generatePopup - - anchors.centerIn: parent - - dim: true - - modal: true - - Label { - id: generateLabel - - anchors.centerIn: parent - } - - onClosed: { - generateButton.checked = false - } - } - - Popup { - id: imageSavedPopup - - anchors.centerIn: parent - - dim: true - - modal: true - - Label { - id: saveLabel - - anchors.centerIn: parent - } - - onClosed: { - saveButton.checked = false - } - } - - Popup { - id: settingsPopup - - width: parent.width * 0.6 - height: parent.height * 0.6 - - anchors.centerIn: parent - - dim: true - - modal: true - + Item { ColumnLayout { anchors.fill: parent - - spacing: 5 - - CTextField { - id: widthField - - implicitWidth: parent.width - implicitHeight: parent.height / 10 - - placeholderText: "Current width: " + barcodeGenerator.width - - onEditingFinished: function () { - - var parsedWidth = parseInt(text) - - if (isNaN(parsedWidth) != true && parsedWidth > 0) { - barcodeGenerator.width = parsedWidth - } - } - } - - CTextField { - id: heightField - - implicitWidth: parent.width - implicitHeight: parent.height / 10 - - placeholderText: "Current height: " + barcodeGenerator.height - - onEditingFinished: function () { - - var parsedHeight = parseInt(text) - - if (isNaN(parsedHeight) != true && parsedHeight > 0) { - barcodeGenerator.height = parsedHeight - } - } + spacing: 32 + + Text { + id: generateLabel + Layout.fillWidth: true + text: qsTr("Your code has been generated!") + font.family: Theme.fontFamily + font.pixelSize: 16 + visible: !errorLabel.visible + horizontalAlignment: Text.AlignHCenter } - CTextField { - id: marginField - - implicitWidth: parent.width - implicitHeight: parent.height / 10 - - placeholderText: "Current margin: " + barcodeGenerator.margin - - onEditingFinished: function () { - - var parsedMargin = parseInt(text) - - if (isNaN(parsedMargin) != true) { - barcodeGenerator.margin = parsedMargin - } - } + Text { + id: errorLabel + Layout.fillWidth: true + color: Theme.red + visible: text !== "" + horizontalAlignment: Text.AlignHCenter } - CTextField { - id: eccLevelField - - implicitWidth: parent.width - implicitHeight: parent.height / 10 - - placeholderText: "Current ECC Level: " + barcodeGenerator.eccLevel - - onEditingFinished: function () { - barcodeGenerator.eccLevel = text - } + Item { + Layout.fillHeight: true } - CTextField { - id: foregroundColorField - - implicitWidth: parent.width - implicitHeight: parent.height / 10 - - placeholderText: "Current foreground color: " + barcodeGenerator.foregroundColor - - onTextChanged: function () { - foregroundColorField.inputIsValid = ColorController.checkColor( - foregroundColorField.text) - - if (ColorController.checkColor( - foregroundColorField.text)) { - barcodeGenerator.setForegroundColor( - ColorController.convertStringToColor( - foregroundColorField.text)) - } + Item { + Layout.fillHeight: true + Layout.fillWidth: true + Layout.leftMargin: 50 + Layout.rightMargin: 50 + Layout.preferredHeight: width + Image { + id: resultImage + anchors.fill: parent + fillMode: Image.PreserveAspectFit } } - CTextField { - id: backgroundColorField - - implicitWidth: parent.width - implicitHeight: parent.height / 10 - - placeholderText: "Current background color: " + barcodeGenerator.backgroundColor - - onTextChanged: function () { - backgroundColorField.inputIsValid = ColorController.checkColor( - backgroundColorField.text) - - if (ColorController.checkColor( - backgroundColorField.text)) { - barcodeGenerator.setBackgroundColor( - ColorController.convertStringToColor( - backgroundColorField.text)) - } - } + Item { + Layout.fillHeight: true } - CComboBox { - id: formatDropDown - - implicitWidth: parent.width - implicitHeight: parent.height / 10 - - model: ListModel { - id: formats - - ListElement { - text: "Aztec" - } - ListElement { - text: "Codabar" - } - ListElement { - text: "Code39" - } - ListElement { - text: "Code93" + ColumnLayout { + Layout.fillWidth: true + CButton { + Layout.fillWidth: true + text: qsTr("Clear") + backgroundColor: Theme.white + textColor: Theme.red + icon.source: "qrc:/icons/close.svg" + onClicked: { + errorLabel.text = "" + resultImage.source = "" + resultStack.currentIndex = 0 } - ListElement { - text: "Code128" - } - ListElement { - text: "DataMatrix" - } - ListElement { - text: "EAN-8" - } - ListElement { - text: "EAN-13" - } - ListElement { - text: "ITF" - } - ListElement { - text: "PDF417" - } - ListElement { - text: "QRCode" - } - ListElement { - text: "UPC-A" - } - ListElement { - text: "UPC-E" - } - } - onCurrentIndexChanged: function () { - var formatAsText = formats.get(currentIndex).text - // a separate method was used because of qml error - // when try to use it as overloaded setter - barcodeGenerator.setFormat(formatAsText) } - } - - CComboBox { - id: imageFormat - - implicitWidth: parent.width - implicitHeight: parent.height / 10 - - model: ListModel { - id: extensions - - ListElement { - text: "png" - } - ListElement { - text: "jpg" + CButton { + Layout.fillWidth: true + enabled: !errorLabel.visible + text: qsTr("Download") + backgroundColor: Theme.teal + textColor: Theme.white + icon.source: "qrc:/icons/download.svg" + onClicked: { + if (barcodeGenerator.saveImage()) { + messagePopup.showMessage( + qsTr("File successfully saved")) + } else { + messagePopup.showMessage( + qsTr("There was an error while saving file")) + } } } - onCurrentIndexChanged: function () { - barcodeGenerator.extension = extensions.get( - currentIndex).text - } - } - - CTextField { - id: fileNameField - - text: qsTr(barcodeGenerator.fileName) - - implicitWidth: parent.width - implicitHeight: parent.height / 10 - - onEditingFinished: { - barcodeGenerator.fileName = text - } - } - - CTextField { - id: imagePathField - - text: qsTr(barcodeGenerator.imagePath) - - implicitWidth: parent.width - implicitHeight: parent.height / 10 - - placeholderText: "Current image path: " + barcodeGenerator.imagePath - - onEditingFinished: { - barcodeGenerator.imagePath = text - } } + } + } + } - CTextField { - id: centerImageRatioField + Popup { + id: messagePopup + anchors.centerIn: parent - text: qsTr(barcodeGenerator.centerImageRatio.toString()) + function showMessage(message) { + messagePopupLabel.text = message + messagePopup.open() + } - implicitWidth: parent.width - implicitHeight: parent.height / 10 + dim: true + modal: true - placeholderText: "Current center image ratio: " - + barcodeGenerator.centerImageRatio + implicitWidth: messagePopupLabel.paintedWidth + 40 + implicitHeight: messagePopupLabel.paintedHeight + 80 - onEditingFinished: { - barcodeGenerator.centerImageRatio = parseInt(text) - } - } - } + background: Rectangle { + color: Theme.white + radius: 20 + } - onClosed: { - settingsButton.checked = false - } + Label { + id: messagePopupLabel + anchors.centerIn: parent } } } diff --git a/examples/QmlBarcode/qml/Qt5ScannerOverlay.qml b/examples/QmlBarcode/qml/Qt5ScannerOverlay.qml index 4338634..5c06313 100644 --- a/examples/QmlBarcode/qml/Qt5ScannerOverlay.qml +++ b/examples/QmlBarcode/qml/Qt5ScannerOverlay.qml @@ -23,6 +23,8 @@ Item { rightMargin: 32 } text: qsTr("Place the QR code to be scanned inside the frame") + font.family: Theme.fontFamily + font.pixelSize: 16 horizontalAlignment: Text.AlignHCenter color: Theme.white wrapMode: Text.WordWrap diff --git a/examples/QmlBarcode/qml/Qt5ScannerPage.qml b/examples/QmlBarcode/qml/Qt5ScannerPage.qml index aad073f..48d8027 100644 --- a/examples/QmlBarcode/qml/Qt5ScannerPage.qml +++ b/examples/QmlBarcode/qml/Qt5ScannerPage.qml @@ -1,13 +1,22 @@ import QtQuick 2.12 import QtQuick.Controls 2.12 -import QtQuick.Window 2.12 +import QtQuick.Layouts 1.15 import QtMultimedia 5.12 import com.somcosoftware.scodes 1.0 -Rectangle { +Item { id: root + property bool enableCamera: false + + onEnableCameraChanged: { + if (enableCamera) + camera.start() + else + camera.stop() + } + Camera { id: camera @@ -26,6 +35,12 @@ Rectangle { fillMode: VideoOutput.PreserveAspectCrop filters: [barcodeScanner] + onSourceRectChanged: { + barcodeScanner.captureRect = videoOutput.mapRectToSource( + videoOutput.mapNormalizedRectToItem(Qt.rect(0.25, 0.25, + 0.5, 0.5))) + } + Qt5ScannerOverlay { id: scannerOverlay anchors.fill: parent @@ -51,43 +66,54 @@ Rectangle { SBarcodeScanner { id: barcodeScanner - property rect normalizedScanZone: Qt.rect(0.25, 0.25, 0.5, 0.5) - - captureRect: { - if (videoOutput.sourceRect.width < 1 - || videoOutput.contentRect.width < 1) - return Qt.rect(0, 0, 0, 0) + captureRect: videoOutput.mapRectToSource( + videoOutput.mapNormalizedRectToItem(Qt.rect(0.25, + 0.25, 0.5, + 0.5))) - return videoOutput.mapRectToSource( - videoOutput.mapNormalizedRectToItem(normalizedScanZone)) + onCapturedChanged: { + active = false + console.log("captured: " + captured) } } Rectangle { id: resultScreen - - anchors.fill: parent + anchors.centerIn: parent visible: !barcodeScanner.active - Column { - anchors.centerIn: parent + x: scannerOverlay.captureRect.x + y: scannerOverlay.captureRect.y + width: scannerOverlay.captureRect.width + height: Math.max(scannerOverlay.captureRect.width, + popupLayout.implicitHeight + 64) + + ColumnLayout { + id: popupLayout + anchors { + fill: parent + margins: 32 + } spacing: 20 Text { - id: scanResultText - - anchors.horizontalCenter: parent.horizontalCenter + Layout.fillWidth: true + Layout.fillHeight: true + wrapMode: Text.WordWrap + font { + family: Theme.fontFamily + pixelSize: 14 + } text: barcodeScanner.captured } - Button { - id: scanButton - - anchors.horizontalCenter: parent.horizontalCenter - + CButton { + Layout.fillWidth: true text: qsTr("Scan again") + backgroundColor: Theme.teal + textColor: Theme.white onClicked: { barcodeScanner.active = true diff --git a/examples/QmlBarcode/qml/Theme.qml b/examples/QmlBarcode/qml/Theme.qml index e409f86..6652521 100644 --- a/examples/QmlBarcode/qml/Theme.qml +++ b/examples/QmlBarcode/qml/Theme.qml @@ -5,12 +5,20 @@ import QtQuick 2.12 QtObject { id: root + readonly property string fontFamily: "Inter" + readonly property color black: "#000000" readonly property color white: "#FFFFFF" readonly property color transparent: "transparent" readonly property color teal: "#1DCA9B" + readonly property color shadowGreen: "#A3C8BF" readonly property color red: "#E64646" + readonly property QtObject tabbar: QtObject { + readonly property color inactiveBorderColor: root.shadowGreen + readonly property color activeBorderColor: root.teal + } + readonly property QtObject subtrack: QtObject { readonly property color backgroundColor: "#535353" readonly property real opacity: 0.71 @@ -20,4 +28,30 @@ QtObject { readonly property color color1: root.white readonly property color color2: "#E8E8E8" } + + readonly property QtObject textField: QtObject { + readonly property color borderColor: "#D9D9D9" + readonly property color placeholderTextColor: "#B8B8B8" + readonly property color textColor: root.black + } + + readonly property color textColor: "#676767" + + function getButtonBackground(baseColor, enabled, pressed) { + if (!enabled) { + if (baseColor === root.white) + return "#E6E6E6" // disabled white + if (baseColor === root.teal) + return "#8FD9C7" // disabled teal + } + + if (pressed) { + if (baseColor === root.white) + return "#F2F2F2" // pressed white + if (baseColor === root.teal) + return "#17A884" // pressed teal + } + + return baseColor + } } diff --git a/examples/QmlBarcode/qml/main.qml b/examples/QmlBarcode/qml/main.qml index 02e2bac..d3d13d6 100644 --- a/examples/QmlBarcode/qml/main.qml +++ b/examples/QmlBarcode/qml/main.qml @@ -10,9 +10,9 @@ ApplicationWindow { visible: true width: Qt.platform.os === "android" - || Qt.platform.os === "ios" ? Screen.width : 1280 + || Qt.platform.os === "ios" ? Screen.width : 800 height: Qt.platform.os === "android" - || Qt.platform.os === "ios" ? Screen.height : 720 + || Qt.platform.os === "ios" ? Screen.height : 800 background: Rectangle { gradient: Gradient { @@ -61,7 +61,7 @@ ApplicationWindow { bottom: parent.bottom } implicitHeight: 1 - color: "#A3C8BF" + color: Theme.tabbar.inactiveBorderColor } } @@ -75,12 +75,18 @@ ApplicationWindow { } StackLayout { + id: stackLayout currentIndex: tabBar.currentIndex Layout.fillWidth: true Layout.fillHeight: true Loader { source: VersionHelper.isQt6 ? "Qt6ScannerPage.qml" : "Qt5ScannerPage.qml" + onLoaded: { + item.enableCamera = Qt.binding(function () { + return stackLayout.currentIndex == 0 + }) + } } Loader { From 81104020cb0a7473eacf98dbadb41ede663c2a87 Mon Sep 17 00:00:00 2001 From: Oleksandr Movchan Date: Fri, 6 Feb 2026 15:54:06 +0200 Subject: [PATCH 3/9] Polishing new example for Qt5 and Qt6 to look the same --- examples/QmlBarcode/Qt5qml.qrc | 4 +- examples/QmlBarcode/Qt6qml.qrc | 12 +- examples/QmlBarcode/main.cpp | 5 +- examples/QmlBarcode/qml/CTabButton.qml | 1 + examples/QmlBarcode/qml/GeneratorPage.qml | 2 + examples/QmlBarcode/qml/Qt5ScannerPage.qml | 34 ++-- examples/QmlBarcode/qml/Qt6ScannerPage.qml | 145 +++++++++--------- ...5ScannerOverlay.qml => ScannerOverlay.qml} | 1 - examples/QmlBarcode/qml/Subtrack.qml | 54 ++++--- examples/QmlBarcode/shaders/subtrack.frag | 22 --- examples/QmlBarcode/shaders/subtrack.vert | 9 -- .../QmlBarcodeReader/qml/Qt6ScannerPage.qml | 138 ++++++++--------- src/SBarcodeFilter.cpp | 8 +- src/SBarcodeFilter.h | 4 +- src/SBarcodeScanner.h | 2 +- 15 files changed, 215 insertions(+), 226 deletions(-) rename examples/QmlBarcode/qml/{Qt5ScannerOverlay.qml => ScannerOverlay.qml} (95%) delete mode 100644 examples/QmlBarcode/shaders/subtrack.frag delete mode 100644 examples/QmlBarcode/shaders/subtrack.vert diff --git a/examples/QmlBarcode/Qt5qml.qrc b/examples/QmlBarcode/Qt5qml.qrc index d6f37e6..c099c30 100644 --- a/examples/QmlBarcode/Qt5qml.qrc +++ b/examples/QmlBarcode/Qt5qml.qrc @@ -1,7 +1,7 @@ qml/Qt5ScannerPage.qml - qml/Qt5ScannerOverlay.qml + qml/ScannerOverlay.qml qml/Theme.qml qml/main.qml qml/GeneratorPage.qml @@ -11,8 +11,6 @@ icons/logo.png qml/CTabButton.qml qml/Subtrack.qml - shaders/subtrack.frag - shaders/subtrack.vert icons/close.svg icons/download.svg icons/obraz.png diff --git a/examples/QmlBarcode/Qt6qml.qrc b/examples/QmlBarcode/Qt6qml.qrc index e8013b7..abfa28c 100644 --- a/examples/QmlBarcode/Qt6qml.qrc +++ b/examples/QmlBarcode/Qt6qml.qrc @@ -1,12 +1,20 @@ qml/Qt6ScannerPage.qml - qml/Qt6ScannerOverlay.qml + qml/ScannerOverlay.qml qml/Theme.qml qml/GeneratorPage.qml qml/CButton.qml qml/CTextField.qml qml/CComboBox.qml - icons/logo.png + icons/logo.png + icons/arrow_drop_down.svg + icons/check.svg + icons/close.svg + icons/download.svg + icons/obraz.png + qml/CTabButton.qml + qml/Subtrack.qml + qml/main.qml diff --git a/examples/QmlBarcode/main.cpp b/examples/QmlBarcode/main.cpp index 8c7e406..c7b0010 100644 --- a/examples/QmlBarcode/main.cpp +++ b/examples/QmlBarcode/main.cpp @@ -17,7 +17,10 @@ int main(int argc, char* argv[]) #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); +#else + qputenv("QT_QUICK_CONTROLS_STYLE", QByteArray("Basic")); #endif + QGuiApplication app(argc, argv); QQmlApplicationEngine engine; @@ -26,8 +29,8 @@ int main(int argc, char* argv[]) #else qmlRegisterType("com.somcosoftware.scodes", 1, 0, "SBarcodeScanner"); #endif - qmlRegisterType("com.somcosoftware.scodes", 1, 0, "SBarcodeGenerator"); + qmlRegisterType("com.somcosoftware.scodes", 1, 0, "SBarcodeGenerator"); ColorController colorController; qmlRegisterSingletonInstance("com.somcosoftware.scodes", 1, 0, "ColorController", &colorController); VersionHelper versionHelper; diff --git a/examples/QmlBarcode/qml/CTabButton.qml b/examples/QmlBarcode/qml/CTabButton.qml index 465995c..335b3b9 100644 --- a/examples/QmlBarcode/qml/CTabButton.qml +++ b/examples/QmlBarcode/qml/CTabButton.qml @@ -3,6 +3,7 @@ import QtQuick.Controls 2.15 TabButton { id: root + implicitHeight: 59 background: Item { anchors.fill: parent Rectangle { diff --git a/examples/QmlBarcode/qml/GeneratorPage.qml b/examples/QmlBarcode/qml/GeneratorPage.qml index 8e2c5cb..401defe 100644 --- a/examples/QmlBarcode/qml/GeneratorPage.qml +++ b/examples/QmlBarcode/qml/GeneratorPage.qml @@ -173,8 +173,10 @@ Item { Text { id: errorLabel Layout.fillWidth: true + Layout.topMargin: 40 color: Theme.red visible: text !== "" + font.pixelSize: 18 horizontalAlignment: Text.AlignHCenter } diff --git a/examples/QmlBarcode/qml/Qt5ScannerPage.qml b/examples/QmlBarcode/qml/Qt5ScannerPage.qml index 48d8027..61359b6 100644 --- a/examples/QmlBarcode/qml/Qt5ScannerPage.qml +++ b/examples/QmlBarcode/qml/Qt5ScannerPage.qml @@ -35,17 +35,11 @@ Item { fillMode: VideoOutput.PreserveAspectCrop filters: [barcodeScanner] - onSourceRectChanged: { - barcodeScanner.captureRect = videoOutput.mapRectToSource( - videoOutput.mapNormalizedRectToItem(Qt.rect(0.25, 0.25, - 0.5, 0.5))) - } - - Qt5ScannerOverlay { + ScannerOverlay { id: scannerOverlay anchors.fill: parent - captureRect: videoOutput.mapRectToItem(barcodeScanner.captureRect) + captureRect: barcodeScanner.captureRect } // used to get camera focus on touched point @@ -66,15 +60,12 @@ Item { SBarcodeScanner { id: barcodeScanner - captureRect: videoOutput.mapRectToSource( - videoOutput.mapNormalizedRectToItem(Qt.rect(0.25, - 0.25, 0.5, - 0.5))) + captureRect: Qt.rect(0.25, 0.25, 0.5, 0.5) - onCapturedChanged: { - active = false - console.log("captured: " + captured) - } + onCapturedChanged: captured => { + active = false + console.log("captured: " + captured) + } } Rectangle { @@ -83,12 +74,14 @@ Item { visible: !barcodeScanner.active - x: scannerOverlay.captureRect.x - y: scannerOverlay.captureRect.y - width: scannerOverlay.captureRect.width - height: Math.max(scannerOverlay.captureRect.width, + x: barcodeScanner.captureRect.x * parent.width + y: barcodeScanner.captureRect.y * parent.height + width: barcodeScanner.captureRect.width * parent.width + height: Math.max(barcodeScanner.captureRect.height * parent.height, popupLayout.implicitHeight + 64) + color: Theme.white + ColumnLayout { id: popupLayout anchors { @@ -98,6 +91,7 @@ Item { spacing: 20 Text { + id: capturedText Layout.fillWidth: true Layout.fillHeight: true wrapMode: Text.WordWrap diff --git a/examples/QmlBarcode/qml/Qt6ScannerPage.qml b/examples/QmlBarcode/qml/Qt6ScannerPage.qml index 2d8149f..6aa1242 100644 --- a/examples/QmlBarcode/qml/Qt6ScannerPage.qml +++ b/examples/QmlBarcode/qml/Qt6ScannerPage.qml @@ -1,94 +1,93 @@ import QtQuick -import QtQuick.Controls +import QtQuick.Layouts import QtMultimedia -import com.scythestudio.scodes 1.0 +import com.somcosoftware.scodes 1.0 -/*! - Barcode scanner main page. All QML elements managing from here. - */ -ApplicationWindow { - id: root +Item { + id: root - width: Qt.platform.os === "android" - || Qt.platform.os === "ios" ? Screen.width : 1280 - height: Qt.platform.os === "android" - || Qt.platform.os === "ios" ? Screen.height : 720 + property bool enableCamera: false - visible: true - - SBarcodeScanner { - id: barcodeScanner - - forwardVideoSink: videoOutput.videoSink - scanning: !resultScreen.visible - - captureRect: Qt.rect(1 / 4, 1 / 4, 1 / 2, 1 / 2) - - onCapturedChanged: function (captured) { - scanResultText.text = captured - resultScreen.visible = true + onEnableCameraChanged: { + barcodeScanner.camera.active = enableCamera } - } - - VideoOutput { - id: videoOutput - - anchors.fill: parent - - width: root.width - - focus: visible - fillMode: VideoOutput.PreserveAspectCrop - } - - Qt6ScannerOverlay { - id: scannerOverlay - - anchors.fill: parent - captureRect: barcodeScanner.captureRect - } + SBarcodeScanner { + id: barcodeScanner - Rectangle { - id: resultScreen + forwardVideoSink: videoOutput.videoSink - anchors.fill: parent + captureRect: Qt.rect(0.25, 0.25, 0.5, 0.5) - visible: false - - Column { - anchors.centerIn: parent - - spacing: 20 - - Text { - id: scanResultText - - anchors.horizontalCenter: parent.horizontalCenter + onCapturedChanged: function (captured) { + scanning = false + capturedText.text = captured + resultScreen.visible = true + } + } - color: Theme.textColor - } + VideoOutput { + id: videoOutput - Button { - id: scanButton + anchors.fill: parent - anchors.horizontalCenter: parent.horizontalCenter + width: root.width - implicitWidth: 100 - implicitHeight: 50 + focus: visible + fillMode: VideoOutput.PreserveAspectCrop + } - Text { - anchors.centerIn: parent + ScannerOverlay { + id: scannerOverlay - text: qsTr("Scan again") - color: Theme.textColor - } + anchors.fill: parent + captureRect: barcodeScanner.captureRect + } - onClicked: { - resultScreen.visible = false + Rectangle { + id: resultScreen + anchors.centerIn: parent + + visible: false + + x: barcodeScanner.captureRect.x * parent.width + y: barcodeScanner.captureRect.y * parent.height + width: barcodeScanner.captureRect.width * parent.width + height: Math.max(barcodeScanner.captureRect.height * parent.height, + popupLayout.implicitHeight + 64) + + ColumnLayout { + id: popupLayout + anchors { + fill: parent + margins: 32 + } + spacing: 20 + + Text { + id: capturedText + Layout.fillWidth: true + Layout.fillHeight: true + wrapMode: Text.WordWrap + font { + family: Theme.fontFamily + pixelSize: 14 + } + } + + CButton { + Layout.fillWidth: true + text: qsTr("Scan again") + backgroundColor: Theme.teal + textColor: Theme.white + + onClicked: { + resultScreen.visible = false + capturedText.text = "" + barcodeScanner.scanning = true + } + } } - } } - } } diff --git a/examples/QmlBarcode/qml/Qt5ScannerOverlay.qml b/examples/QmlBarcode/qml/ScannerOverlay.qml similarity index 95% rename from examples/QmlBarcode/qml/Qt5ScannerOverlay.qml rename to examples/QmlBarcode/qml/ScannerOverlay.qml index 5c06313..9a8c461 100644 --- a/examples/QmlBarcode/qml/Qt5ScannerOverlay.qml +++ b/examples/QmlBarcode/qml/ScannerOverlay.qml @@ -1,5 +1,4 @@ import QtQuick 2.12 -import QtGraphicalEffects 1.12 Item { id: root diff --git a/examples/QmlBarcode/qml/Subtrack.qml b/examples/QmlBarcode/qml/Subtrack.qml index 6b96484..8711350 100644 --- a/examples/QmlBarcode/qml/Subtrack.qml +++ b/examples/QmlBarcode/qml/Subtrack.qml @@ -1,28 +1,38 @@ // Subtrack.qml -import QtQuick 2.12 +import QtQuick 2.15 -ShaderEffect { - id: root +import com.somcosoftware.scodes 1.0 +Canvas { + id: root anchors.fill: parent + antialiasing: true + + property color baseColor: Theme.subtrack.backgroundColor + property real outerOpacity: Theme.subtrack.opacity + property rect captureRect: Qt.rect(0.25, 0.25, 0.5, 0.5) + + onPaint: { + var ctx = getContext("2d") + ctx.reset() + + // Background overlay + ctx.fillStyle = Qt.rgba(root.baseColor.r, root.baseColor.g, + root.baseColor.b, root.outerOpacity) + + ctx.fillRect(0, 0, width, height) + + var rx = root.captureRect.x * width + var ry = root.captureRect.y * height + var rw = root.captureRect.width * width + var rh = root.captureRect.height * height + + ctx.clearRect(rx, ry, rw, rh) + } - // Properties - property color baseColor: "#535353" - property real outerOpacity: 0.71 - property rect captureRect: Qt.rect(0, 0, 0, 0) - - // Shader uniforms - pass both captureRect and size - property color uColor: baseColor - property real uOpacity: outerOpacity - property vector4d uCaptureRect: Qt.vector4d(captureRect.x, captureRect.y, - captureRect.width, - captureRect.height) - property vector2d uSize: Qt.vector2d(width, height) - - // Update when size changes - onWidthChanged: update() - onHeightChanged: update() - - vertexShader: "qrc:/shaders/subtrack.vert" - fragmentShader: "qrc:/shaders/subtrack.frag" + onWidthChanged: requestPaint() + onHeightChanged: requestPaint() + onCaptureRectChanged: requestPaint() + onBaseColorChanged: requestPaint() + onOuterOpacityChanged: requestPaint() } diff --git a/examples/QmlBarcode/shaders/subtrack.frag b/examples/QmlBarcode/shaders/subtrack.frag deleted file mode 100644 index 8f14613..0000000 --- a/examples/QmlBarcode/shaders/subtrack.frag +++ /dev/null @@ -1,22 +0,0 @@ -uniform highp vec4 uColor; -uniform highp float uOpacity; -uniform highp vec4 uCaptureRect; -uniform highp vec2 uSize; -varying highp vec2 vTexCoord; - -void main() { - // Convert normalized coordinates to pixel coordinates - highp vec2 pixelCoord = vTexCoord * uSize; - - // Check if current pixel is inside captureRect - highp bool inRect = (pixelCoord.x >= uCaptureRect.x && - pixelCoord.x <= uCaptureRect.x + uCaptureRect.z && - pixelCoord.y >= uCaptureRect.y && - pixelCoord.y <= uCaptureRect.y + uCaptureRect.w); - - if (inRect) { - gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0); - } else { - gl_FragColor = vec4(uColor.rgb, uOpacity); - } -} diff --git a/examples/QmlBarcode/shaders/subtrack.vert b/examples/QmlBarcode/shaders/subtrack.vert deleted file mode 100644 index 3a565c9..0000000 --- a/examples/QmlBarcode/shaders/subtrack.vert +++ /dev/null @@ -1,9 +0,0 @@ -uniform highp mat4 qt_Matrix; -attribute highp vec4 qt_Vertex; -attribute highp vec2 qt_MultiTexCoord0; -varying highp vec2 vTexCoord; - -void main() { - vTexCoord = qt_MultiTexCoord0; - gl_Position = qt_Matrix * qt_Vertex; -} diff --git a/examples/QmlBarcodeReader/qml/Qt6ScannerPage.qml b/examples/QmlBarcodeReader/qml/Qt6ScannerPage.qml index 2d8149f..2280638 100644 --- a/examples/QmlBarcodeReader/qml/Qt6ScannerPage.qml +++ b/examples/QmlBarcodeReader/qml/Qt6ScannerPage.qml @@ -1,94 +1,94 @@ import QtQuick import QtQuick.Controls +import QtQuick.Layouts import QtMultimedia -import com.scythestudio.scodes 1.0 + +import com.somcosoftware.scodes 1.0 /*! Barcode scanner main page. All QML elements managing from here. */ -ApplicationWindow { - id: root - - width: Qt.platform.os === "android" - || Qt.platform.os === "ios" ? Screen.width : 1280 - height: Qt.platform.os === "android" - || Qt.platform.os === "ios" ? Screen.height : 720 +Item { + id: root - visible: true + property bool enableCamera: false - SBarcodeScanner { - id: barcodeScanner + SBarcodeScanner { + id: barcodeScanner - forwardVideoSink: videoOutput.videoSink - scanning: !resultScreen.visible + forwardVideoSink: videoOutput.videoSink + scanning: !resultScreen.visible - captureRect: Qt.rect(1 / 4, 1 / 4, 1 / 2, 1 / 2) + captureRect: Qt.rect(1 / 4, 1 / 4, 1 / 2, 1 / 2) - onCapturedChanged: function (captured) { - scanResultText.text = captured - resultScreen.visible = true + onCapturedChanged: function (captured) { + scanResultText.text = captured + resultScreen.visible = true + } } - } - - VideoOutput { - id: videoOutput - - anchors.fill: parent - - width: root.width - - focus: visible - fillMode: VideoOutput.PreserveAspectCrop - } - - Qt6ScannerOverlay { - id: scannerOverlay - - anchors.fill: parent - - captureRect: barcodeScanner.captureRect - } - Rectangle { - id: resultScreen + VideoOutput { + id: videoOutput - anchors.fill: parent + anchors.fill: parent - visible: false + width: root.width - Column { - anchors.centerIn: parent - - spacing: 20 - - Text { - id: scanResultText - - anchors.horizontalCenter: parent.horizontalCenter - - color: Theme.textColor - } - - Button { - id: scanButton - - anchors.horizontalCenter: parent.horizontalCenter + focus: visible + fillMode: VideoOutput.PreserveAspectCrop + } - implicitWidth: 100 - implicitHeight: 50 + Qt6ScannerOverlay { + id: scannerOverlay - Text { - anchors.centerIn: parent + anchors.fill: parent - text: qsTr("Scan again") - color: Theme.textColor - } + captureRect: barcodeScanner.captureRect + } - onClicked: { - resultScreen.visible = false + Rectangle { + id: resultScreen + anchors.centerIn: parent + + visible: !barcodeScanner.active + + x: scannerOverlay.captureRect.x + y: scannerOverlay.captureRect.y + width: scannerOverlay.captureRect.width + height: Math.max(scannerOverlay.captureRect.width, + popupLayout.implicitHeight + 64) + + ColumnLayout { + id: popupLayout + anchors { + fill: parent + margins: 32 + } + spacing: 20 + + Text { + Layout.fillWidth: true + Layout.fillHeight: true + wrapMode: Text.WordWrap + font { + family: Theme.fontFamily + pixelSize: 14 + } + + text: barcodeScanner.captured + } + + CButton { + Layout.fillWidth: true + text: qsTr("Scan again") + backgroundColor: Theme.teal + textColor: Theme.white + + onClicked: { + barcodeScanner.active = true + } + } } - } } - } } diff --git a/src/SBarcodeFilter.cpp b/src/SBarcodeFilter.cpp index ed8e3c2..69afd6e 100644 --- a/src/SBarcodeFilter.cpp +++ b/src/SBarcodeFilter.cpp @@ -49,9 +49,15 @@ class SBarcodeFilterRunnable : public QVideoFilterRunnable if (_filter->getImageFuture().isRunning()) { return *input; } + const QSize frameSize = input->size(); + const QRectF normRect = _filter->captureRect(); + const QRectF pixelRect(normRect.x() * frameSize.width(), + normRect.y() * frameSize.height(), + normRect.width() * frameSize.width(), + normRect.height() * frameSize.height()); const QImage croppedCapturedImage = - _filter->getDecoder()->videoFrameToImage(*input, _filter->captureRect().toRect()); + _filter->getDecoder()->videoFrameToImage(*input, pixelRect.toRect()); _filter->getImageFuture() = QtConcurrent::run(processImage, _filter->getDecoder(), croppedCapturedImage, SCodes::toZXingFormat(_filter->format())); diff --git a/src/SBarcodeFilter.h b/src/SBarcodeFilter.h index e74e765..d19cdf3 100644 --- a/src/SBarcodeFilter.h +++ b/src/SBarcodeFilter.h @@ -113,7 +113,7 @@ private slots: void clean(); private: - QString m_captured = ""; + QString m_captured; QRectF m_captureRect; @@ -121,7 +121,7 @@ private slots: QFuture _imageFuture; - SCodes::SBarcodeFormats m_format = SCodes::SBarcodeFormat::Basic; + SCodes::SBarcodeFormats m_format{SCodes::SBarcodeFormat::Any}; }; #endif // QRSCANNERFILTER_H diff --git a/src/SBarcodeScanner.h b/src/SBarcodeScanner.h index 43b9235..0c784f0 100644 --- a/src/SBarcodeScanner.h +++ b/src/SBarcodeScanner.h @@ -79,7 +79,7 @@ public slots: /// Subsection of videoframe to capture, in normalized coordinates QRectF m_captureRect; /// Last captured string from QrCode - QString m_captured = ""; + QString m_captured; /// QMediaCaptureSession instance to actually perform the camera recording QMediaCaptureSession m_capture; /// Separate thread for Qr code processing and detection From d5c465052068d1bd88ad6acf6677a6d48536b140 Mon Sep 17 00:00:00 2001 From: Oleksandr Movchan Date: Fri, 6 Feb 2026 16:04:36 +0200 Subject: [PATCH 4/9] Remove old examples --- .../{QmlBarcode => QmlBarcodeApp}/.gitignore | 0 .../CMakeLists.txt | 0 .../ColorController.cpp | 0 .../ColorController.h | 0 .../QmlBarcodeApp.pro | 0 .../{QmlBarcode => QmlBarcodeApp}/Qt5qml.qrc | 0 .../{QmlBarcode => QmlBarcodeApp}/Qt6qml.qrc | 0 .../VersionHelper.h | 0 .../android/AndroidManifest.xml | 0 .../android/build.gradle | 0 .../android/gradle.properties | 0 .../android/gradle/wrapper/gradle-wrapper.jar | Bin .../gradle/wrapper/gradle-wrapper.properties | 0 .../android/gradlew | 0 .../android/gradlew.bat | 0 .../android/res/drawable-hdpi/icon.png | Bin .../android/res/drawable-ldpi/icon.png | Bin .../android/res/drawable-mdpi/icon.png | Bin .../android/res/drawable-xhdpi/icon.png | Bin .../android/res/drawable-xxhdpi/icon.png | Bin .../android/res/drawable-xxxhdpi/icon.png | Bin .../android/res/values/libs.xml | 0 .../cmake/Locations.cmake | 6 +- .../icons/arrow_drop_down.svg | 0 .../icons/check.svg | 0 .../icons/close.svg | 0 .../icons/download.svg | 0 .../icons/logo.png | Bin .../icons/obraz.png | Bin .../{QmlBarcode => QmlBarcodeApp}/main.cpp | 4 +- .../qml/CButton.qml | 0 .../qml/CComboBox.qml | 0 .../qml/CTabButton.qml | 0 .../qml/CTextField.qml | 0 .../qml/GeneratorPage.qml | 0 .../qml/Qt5ScannerPage.qml | 0 .../qml/Qt6ScannerOverlay.qml | 0 .../qml/Qt6ScannerPage.qml | 0 .../qml/ScannerOverlay.qml | 0 .../qml/Subtrack.qml | 0 .../qml/Theme.qml | 0 .../qml/main.qml | 0 .../qrScanner/QrDecoder.cpp | 0 .../qrScanner/QrDecoder.h | 0 .../qrScanner/QrScannerFilter.cpp | 0 .../qrScanner/QrScannerFilter.h | 0 examples/QmlBarcodeGenerator/.gitignore | 4 - examples/QmlBarcodeGenerator/CMakeLists.txt | 51 -- .../QmlBarcodeGenerator/ColorController.cpp | 15 - .../QmlBarcodeGenerator/ColorController.h | 18 - .../QmlBarcodeGenerator.pro | 37 -- examples/QmlBarcodeGenerator/android.7z | Bin 116676 -> 0 bytes .../android/AndroidManifest.xml | 17 - .../QmlBarcodeGenerator/android/build.gradle | 82 ---- .../android/gradle.properties | 14 - .../android/gradle/wrapper/gradle-wrapper.jar | Bin 59821 -> 0 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 - examples/QmlBarcodeGenerator/android/gradlew | 234 --------- .../QmlBarcodeGenerator/android/gradlew.bat | 89 ---- .../android/res/drawable-hdpi/icon.png | Bin 4750 -> 0 bytes .../android/res/drawable-ldpi/icon.png | Bin 1633 -> 0 bytes .../android/res/drawable-mdpi/icon.png | Bin 2945 -> 0 bytes .../android/res/drawable-xhdpi/icon.png | Bin 8029 -> 0 bytes .../android/res/drawable-xxhdpi/icon.png | Bin 14136 -> 0 bytes .../android/res/drawable-xxxhdpi/icon.png | Bin 21651 -> 0 bytes .../android/res/values/libs.xml | 20 - .../QmlBarcodeGenerator/cmake/Locations.cmake | 37 -- examples/QmlBarcodeGenerator/main.cpp | 30 -- examples/QmlBarcodeGenerator/qml.qrc | 9 - examples/QmlBarcodeGenerator/qml/CButton.qml | 25 - .../QmlBarcodeGenerator/qml/CComboBox.qml | 19 - .../QmlBarcodeGenerator/qml/CTextField.qml | 25 - .../QmlBarcodeGenerator/qml/GeneratorPage.qml | 459 ------------------ examples/QmlBarcodeGenerator/qml/Theme.qml | 16 - examples/QmlBarcodeReader/.gitignore | 4 - examples/QmlBarcodeReader/CMakeLists.txt | 55 --- .../QmlBarcodeReader/QmlBarcodeReader.pro | 38 -- examples/QmlBarcodeReader/Qt5qml.qrc | 7 - examples/QmlBarcodeReader/Qt6qml.qrc | 7 - .../android/AndroidManifest.xml | 68 --- .../QmlBarcodeReader/android/build.gradle | 82 ---- .../android/gradle.properties | 14 - .../android/gradle/wrapper/gradle-wrapper.jar | Bin 59536 -> 0 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 - examples/QmlBarcodeReader/android/gradlew | 234 --------- examples/QmlBarcodeReader/android/gradlew.bat | 89 ---- .../android/res/drawable-hdpi/icon.png | Bin 4750 -> 0 bytes .../android/res/drawable-ldpi/icon.png | Bin 1633 -> 0 bytes .../android/res/drawable-mdpi/icon.png | Bin 2945 -> 0 bytes .../android/res/drawable-xhdpi/icon.png | Bin 8029 -> 0 bytes .../android/res/drawable-xxhdpi/icon.png | Bin 14136 -> 0 bytes .../android/res/drawable-xxxhdpi/icon.png | Bin 21651 -> 0 bytes .../android/res/values/libs.xml | 20 - .../QmlBarcodeReader/cmake/Locations.cmake | 37 -- examples/QmlBarcodeReader/main.cpp | 38 -- .../qml/Qt5ScannerOverlay.qml | 209 -------- .../QmlBarcodeReader/qml/Qt5ScannerPage.qml | 116 ----- .../qml/Qt6ScannerOverlay.qml | 211 -------- .../QmlBarcodeReader/qml/Qt6ScannerPage.qml | 94 ---- examples/QmlBarcodeReader/qml/Theme.qml | 13 - .../QmlBarcodeReader/qrScanner/QrDecoder.cpp | 200 -------- .../QmlBarcodeReader/qrScanner/QrDecoder.h | 113 ----- .../qrScanner/QrScannerFilter.cpp | 126 ----- .../qrScanner/QrScannerFilter.h | 125 ----- src/CMakeLists.txt | 2 +- src/SCodes.pri | 2 +- 106 files changed, 7 insertions(+), 3118 deletions(-) rename examples/{QmlBarcode => QmlBarcodeApp}/.gitignore (100%) rename examples/{QmlBarcode => QmlBarcodeApp}/CMakeLists.txt (100%) rename examples/{QmlBarcode => QmlBarcodeApp}/ColorController.cpp (100%) rename examples/{QmlBarcode => QmlBarcodeApp}/ColorController.h (100%) rename examples/{QmlBarcode => QmlBarcodeApp}/QmlBarcodeApp.pro (100%) rename examples/{QmlBarcode => QmlBarcodeApp}/Qt5qml.qrc (100%) rename examples/{QmlBarcode => QmlBarcodeApp}/Qt6qml.qrc (100%) rename examples/{QmlBarcode => QmlBarcodeApp}/VersionHelper.h (100%) rename examples/{QmlBarcode => QmlBarcodeApp}/android/AndroidManifest.xml (100%) rename examples/{QmlBarcode => QmlBarcodeApp}/android/build.gradle (100%) rename examples/{QmlBarcode => QmlBarcodeApp}/android/gradle.properties (100%) rename examples/{QmlBarcode => QmlBarcodeApp}/android/gradle/wrapper/gradle-wrapper.jar (100%) rename examples/{QmlBarcode => QmlBarcodeApp}/android/gradle/wrapper/gradle-wrapper.properties (100%) rename examples/{QmlBarcode => QmlBarcodeApp}/android/gradlew (100%) rename examples/{QmlBarcode => QmlBarcodeApp}/android/gradlew.bat (100%) rename examples/{QmlBarcode => QmlBarcodeApp}/android/res/drawable-hdpi/icon.png (100%) rename examples/{QmlBarcode => QmlBarcodeApp}/android/res/drawable-ldpi/icon.png (100%) rename examples/{QmlBarcode => QmlBarcodeApp}/android/res/drawable-mdpi/icon.png (100%) rename examples/{QmlBarcode => QmlBarcodeApp}/android/res/drawable-xhdpi/icon.png (100%) rename examples/{QmlBarcode => QmlBarcodeApp}/android/res/drawable-xxhdpi/icon.png (100%) rename examples/{QmlBarcode => QmlBarcodeApp}/android/res/drawable-xxxhdpi/icon.png (100%) rename examples/{QmlBarcode => QmlBarcodeApp}/android/res/values/libs.xml (100%) rename examples/{QmlBarcode => QmlBarcodeApp}/cmake/Locations.cmake (83%) rename examples/{QmlBarcode => QmlBarcodeApp}/icons/arrow_drop_down.svg (100%) rename examples/{QmlBarcode => QmlBarcodeApp}/icons/check.svg (100%) rename examples/{QmlBarcode => QmlBarcodeApp}/icons/close.svg (100%) rename examples/{QmlBarcode => QmlBarcodeApp}/icons/download.svg (100%) rename examples/{QmlBarcode => QmlBarcodeApp}/icons/logo.png (100%) rename examples/{QmlBarcode => QmlBarcodeApp}/icons/obraz.png (100%) rename examples/{QmlBarcode => QmlBarcodeApp}/main.cpp (100%) rename examples/{QmlBarcode => QmlBarcodeApp}/qml/CButton.qml (100%) rename examples/{QmlBarcode => QmlBarcodeApp}/qml/CComboBox.qml (100%) rename examples/{QmlBarcode => QmlBarcodeApp}/qml/CTabButton.qml (100%) rename examples/{QmlBarcode => QmlBarcodeApp}/qml/CTextField.qml (100%) rename examples/{QmlBarcode => QmlBarcodeApp}/qml/GeneratorPage.qml (100%) rename examples/{QmlBarcode => QmlBarcodeApp}/qml/Qt5ScannerPage.qml (100%) rename examples/{QmlBarcode => QmlBarcodeApp}/qml/Qt6ScannerOverlay.qml (100%) rename examples/{QmlBarcode => QmlBarcodeApp}/qml/Qt6ScannerPage.qml (100%) rename examples/{QmlBarcode => QmlBarcodeApp}/qml/ScannerOverlay.qml (100%) rename examples/{QmlBarcode => QmlBarcodeApp}/qml/Subtrack.qml (100%) rename examples/{QmlBarcode => QmlBarcodeApp}/qml/Theme.qml (100%) rename examples/{QmlBarcode => QmlBarcodeApp}/qml/main.qml (100%) rename examples/{QmlBarcode => QmlBarcodeApp}/qrScanner/QrDecoder.cpp (100%) rename examples/{QmlBarcode => QmlBarcodeApp}/qrScanner/QrDecoder.h (100%) rename examples/{QmlBarcode => QmlBarcodeApp}/qrScanner/QrScannerFilter.cpp (100%) rename examples/{QmlBarcode => QmlBarcodeApp}/qrScanner/QrScannerFilter.h (100%) delete mode 100644 examples/QmlBarcodeGenerator/.gitignore delete mode 100644 examples/QmlBarcodeGenerator/CMakeLists.txt delete mode 100644 examples/QmlBarcodeGenerator/ColorController.cpp delete mode 100644 examples/QmlBarcodeGenerator/ColorController.h delete mode 100644 examples/QmlBarcodeGenerator/QmlBarcodeGenerator.pro delete mode 100644 examples/QmlBarcodeGenerator/android.7z delete mode 100644 examples/QmlBarcodeGenerator/android/AndroidManifest.xml delete mode 100644 examples/QmlBarcodeGenerator/android/build.gradle delete mode 100644 examples/QmlBarcodeGenerator/android/gradle.properties delete mode 100644 examples/QmlBarcodeGenerator/android/gradle/wrapper/gradle-wrapper.jar delete mode 100644 examples/QmlBarcodeGenerator/android/gradle/wrapper/gradle-wrapper.properties delete mode 100644 examples/QmlBarcodeGenerator/android/gradlew delete mode 100644 examples/QmlBarcodeGenerator/android/gradlew.bat delete mode 100644 examples/QmlBarcodeGenerator/android/res/drawable-hdpi/icon.png delete mode 100644 examples/QmlBarcodeGenerator/android/res/drawable-ldpi/icon.png delete mode 100644 examples/QmlBarcodeGenerator/android/res/drawable-mdpi/icon.png delete mode 100644 examples/QmlBarcodeGenerator/android/res/drawable-xhdpi/icon.png delete mode 100644 examples/QmlBarcodeGenerator/android/res/drawable-xxhdpi/icon.png delete mode 100644 examples/QmlBarcodeGenerator/android/res/drawable-xxxhdpi/icon.png delete mode 100644 examples/QmlBarcodeGenerator/android/res/values/libs.xml delete mode 100644 examples/QmlBarcodeGenerator/cmake/Locations.cmake delete mode 100644 examples/QmlBarcodeGenerator/main.cpp delete mode 100644 examples/QmlBarcodeGenerator/qml.qrc delete mode 100644 examples/QmlBarcodeGenerator/qml/CButton.qml delete mode 100644 examples/QmlBarcodeGenerator/qml/CComboBox.qml delete mode 100644 examples/QmlBarcodeGenerator/qml/CTextField.qml delete mode 100644 examples/QmlBarcodeGenerator/qml/GeneratorPage.qml delete mode 100644 examples/QmlBarcodeGenerator/qml/Theme.qml delete mode 100644 examples/QmlBarcodeReader/.gitignore delete mode 100644 examples/QmlBarcodeReader/CMakeLists.txt delete mode 100644 examples/QmlBarcodeReader/QmlBarcodeReader.pro delete mode 100644 examples/QmlBarcodeReader/Qt5qml.qrc delete mode 100644 examples/QmlBarcodeReader/Qt6qml.qrc delete mode 100644 examples/QmlBarcodeReader/android/AndroidManifest.xml delete mode 100644 examples/QmlBarcodeReader/android/build.gradle delete mode 100644 examples/QmlBarcodeReader/android/gradle.properties delete mode 100644 examples/QmlBarcodeReader/android/gradle/wrapper/gradle-wrapper.jar delete mode 100644 examples/QmlBarcodeReader/android/gradle/wrapper/gradle-wrapper.properties delete mode 100644 examples/QmlBarcodeReader/android/gradlew delete mode 100644 examples/QmlBarcodeReader/android/gradlew.bat delete mode 100644 examples/QmlBarcodeReader/android/res/drawable-hdpi/icon.png delete mode 100644 examples/QmlBarcodeReader/android/res/drawable-ldpi/icon.png delete mode 100644 examples/QmlBarcodeReader/android/res/drawable-mdpi/icon.png delete mode 100644 examples/QmlBarcodeReader/android/res/drawable-xhdpi/icon.png delete mode 100644 examples/QmlBarcodeReader/android/res/drawable-xxhdpi/icon.png delete mode 100644 examples/QmlBarcodeReader/android/res/drawable-xxxhdpi/icon.png delete mode 100644 examples/QmlBarcodeReader/android/res/values/libs.xml delete mode 100644 examples/QmlBarcodeReader/cmake/Locations.cmake delete mode 100644 examples/QmlBarcodeReader/main.cpp delete mode 100644 examples/QmlBarcodeReader/qml/Qt5ScannerOverlay.qml delete mode 100644 examples/QmlBarcodeReader/qml/Qt5ScannerPage.qml delete mode 100644 examples/QmlBarcodeReader/qml/Qt6ScannerOverlay.qml delete mode 100644 examples/QmlBarcodeReader/qml/Qt6ScannerPage.qml delete mode 100644 examples/QmlBarcodeReader/qml/Theme.qml delete mode 100644 examples/QmlBarcodeReader/qrScanner/QrDecoder.cpp delete mode 100644 examples/QmlBarcodeReader/qrScanner/QrDecoder.h delete mode 100644 examples/QmlBarcodeReader/qrScanner/QrScannerFilter.cpp delete mode 100644 examples/QmlBarcodeReader/qrScanner/QrScannerFilter.h diff --git a/examples/QmlBarcode/.gitignore b/examples/QmlBarcodeApp/.gitignore similarity index 100% rename from examples/QmlBarcode/.gitignore rename to examples/QmlBarcodeApp/.gitignore diff --git a/examples/QmlBarcode/CMakeLists.txt b/examples/QmlBarcodeApp/CMakeLists.txt similarity index 100% rename from examples/QmlBarcode/CMakeLists.txt rename to examples/QmlBarcodeApp/CMakeLists.txt diff --git a/examples/QmlBarcode/ColorController.cpp b/examples/QmlBarcodeApp/ColorController.cpp similarity index 100% rename from examples/QmlBarcode/ColorController.cpp rename to examples/QmlBarcodeApp/ColorController.cpp diff --git a/examples/QmlBarcode/ColorController.h b/examples/QmlBarcodeApp/ColorController.h similarity index 100% rename from examples/QmlBarcode/ColorController.h rename to examples/QmlBarcodeApp/ColorController.h diff --git a/examples/QmlBarcode/QmlBarcodeApp.pro b/examples/QmlBarcodeApp/QmlBarcodeApp.pro similarity index 100% rename from examples/QmlBarcode/QmlBarcodeApp.pro rename to examples/QmlBarcodeApp/QmlBarcodeApp.pro diff --git a/examples/QmlBarcode/Qt5qml.qrc b/examples/QmlBarcodeApp/Qt5qml.qrc similarity index 100% rename from examples/QmlBarcode/Qt5qml.qrc rename to examples/QmlBarcodeApp/Qt5qml.qrc diff --git a/examples/QmlBarcode/Qt6qml.qrc b/examples/QmlBarcodeApp/Qt6qml.qrc similarity index 100% rename from examples/QmlBarcode/Qt6qml.qrc rename to examples/QmlBarcodeApp/Qt6qml.qrc diff --git a/examples/QmlBarcode/VersionHelper.h b/examples/QmlBarcodeApp/VersionHelper.h similarity index 100% rename from examples/QmlBarcode/VersionHelper.h rename to examples/QmlBarcodeApp/VersionHelper.h diff --git a/examples/QmlBarcode/android/AndroidManifest.xml b/examples/QmlBarcodeApp/android/AndroidManifest.xml similarity index 100% rename from examples/QmlBarcode/android/AndroidManifest.xml rename to examples/QmlBarcodeApp/android/AndroidManifest.xml diff --git a/examples/QmlBarcode/android/build.gradle b/examples/QmlBarcodeApp/android/build.gradle similarity index 100% rename from examples/QmlBarcode/android/build.gradle rename to examples/QmlBarcodeApp/android/build.gradle diff --git a/examples/QmlBarcode/android/gradle.properties b/examples/QmlBarcodeApp/android/gradle.properties similarity index 100% rename from examples/QmlBarcode/android/gradle.properties rename to examples/QmlBarcodeApp/android/gradle.properties diff --git a/examples/QmlBarcode/android/gradle/wrapper/gradle-wrapper.jar b/examples/QmlBarcodeApp/android/gradle/wrapper/gradle-wrapper.jar similarity index 100% rename from examples/QmlBarcode/android/gradle/wrapper/gradle-wrapper.jar rename to examples/QmlBarcodeApp/android/gradle/wrapper/gradle-wrapper.jar diff --git a/examples/QmlBarcode/android/gradle/wrapper/gradle-wrapper.properties b/examples/QmlBarcodeApp/android/gradle/wrapper/gradle-wrapper.properties similarity index 100% rename from examples/QmlBarcode/android/gradle/wrapper/gradle-wrapper.properties rename to examples/QmlBarcodeApp/android/gradle/wrapper/gradle-wrapper.properties diff --git a/examples/QmlBarcode/android/gradlew b/examples/QmlBarcodeApp/android/gradlew similarity index 100% rename from examples/QmlBarcode/android/gradlew rename to examples/QmlBarcodeApp/android/gradlew diff --git a/examples/QmlBarcode/android/gradlew.bat b/examples/QmlBarcodeApp/android/gradlew.bat similarity index 100% rename from examples/QmlBarcode/android/gradlew.bat rename to examples/QmlBarcodeApp/android/gradlew.bat diff --git a/examples/QmlBarcode/android/res/drawable-hdpi/icon.png b/examples/QmlBarcodeApp/android/res/drawable-hdpi/icon.png similarity index 100% rename from examples/QmlBarcode/android/res/drawable-hdpi/icon.png rename to examples/QmlBarcodeApp/android/res/drawable-hdpi/icon.png diff --git a/examples/QmlBarcode/android/res/drawable-ldpi/icon.png b/examples/QmlBarcodeApp/android/res/drawable-ldpi/icon.png similarity index 100% rename from examples/QmlBarcode/android/res/drawable-ldpi/icon.png rename to examples/QmlBarcodeApp/android/res/drawable-ldpi/icon.png diff --git a/examples/QmlBarcode/android/res/drawable-mdpi/icon.png b/examples/QmlBarcodeApp/android/res/drawable-mdpi/icon.png similarity index 100% rename from examples/QmlBarcode/android/res/drawable-mdpi/icon.png rename to examples/QmlBarcodeApp/android/res/drawable-mdpi/icon.png diff --git a/examples/QmlBarcode/android/res/drawable-xhdpi/icon.png b/examples/QmlBarcodeApp/android/res/drawable-xhdpi/icon.png similarity index 100% rename from examples/QmlBarcode/android/res/drawable-xhdpi/icon.png rename to examples/QmlBarcodeApp/android/res/drawable-xhdpi/icon.png diff --git a/examples/QmlBarcode/android/res/drawable-xxhdpi/icon.png b/examples/QmlBarcodeApp/android/res/drawable-xxhdpi/icon.png similarity index 100% rename from examples/QmlBarcode/android/res/drawable-xxhdpi/icon.png rename to examples/QmlBarcodeApp/android/res/drawable-xxhdpi/icon.png diff --git a/examples/QmlBarcode/android/res/drawable-xxxhdpi/icon.png b/examples/QmlBarcodeApp/android/res/drawable-xxxhdpi/icon.png similarity index 100% rename from examples/QmlBarcode/android/res/drawable-xxxhdpi/icon.png rename to examples/QmlBarcodeApp/android/res/drawable-xxxhdpi/icon.png diff --git a/examples/QmlBarcode/android/res/values/libs.xml b/examples/QmlBarcodeApp/android/res/values/libs.xml similarity index 100% rename from examples/QmlBarcode/android/res/values/libs.xml rename to examples/QmlBarcodeApp/android/res/values/libs.xml diff --git a/examples/QmlBarcode/cmake/Locations.cmake b/examples/QmlBarcodeApp/cmake/Locations.cmake similarity index 83% rename from examples/QmlBarcode/cmake/Locations.cmake rename to examples/QmlBarcodeApp/cmake/Locations.cmake index 0c773e7..7fead81 100644 --- a/examples/QmlBarcode/cmake/Locations.cmake +++ b/examples/QmlBarcodeApp/cmake/Locations.cmake @@ -1,6 +1,6 @@ -set(COMPANY "Scythe Studio") -set(COPYRIGHT "Copyright (c) 2022 Scythe Studio. Licensed under the Apache License, Version 2.0.") -set(IDENTIFIER "com.scythestudio.scodes.example") +set(COMPANY "Somco Software (prev Scythe Studio)") +set(COPYRIGHT "Copyright (c) 2026 Somco Software. Licensed under the Apache License, Version 2.0.") +set(IDENTIFIER "com.somcosoftware.scodes.example") # ---CONFIGURATION--- option(USE_QML "Add QML support" ON) diff --git a/examples/QmlBarcode/icons/arrow_drop_down.svg b/examples/QmlBarcodeApp/icons/arrow_drop_down.svg similarity index 100% rename from examples/QmlBarcode/icons/arrow_drop_down.svg rename to examples/QmlBarcodeApp/icons/arrow_drop_down.svg diff --git a/examples/QmlBarcode/icons/check.svg b/examples/QmlBarcodeApp/icons/check.svg similarity index 100% rename from examples/QmlBarcode/icons/check.svg rename to examples/QmlBarcodeApp/icons/check.svg diff --git a/examples/QmlBarcode/icons/close.svg b/examples/QmlBarcodeApp/icons/close.svg similarity index 100% rename from examples/QmlBarcode/icons/close.svg rename to examples/QmlBarcodeApp/icons/close.svg diff --git a/examples/QmlBarcode/icons/download.svg b/examples/QmlBarcodeApp/icons/download.svg similarity index 100% rename from examples/QmlBarcode/icons/download.svg rename to examples/QmlBarcodeApp/icons/download.svg diff --git a/examples/QmlBarcode/icons/logo.png b/examples/QmlBarcodeApp/icons/logo.png similarity index 100% rename from examples/QmlBarcode/icons/logo.png rename to examples/QmlBarcodeApp/icons/logo.png diff --git a/examples/QmlBarcode/icons/obraz.png b/examples/QmlBarcodeApp/icons/obraz.png similarity index 100% rename from examples/QmlBarcode/icons/obraz.png rename to examples/QmlBarcodeApp/icons/obraz.png diff --git a/examples/QmlBarcode/main.cpp b/examples/QmlBarcodeApp/main.cpp similarity index 100% rename from examples/QmlBarcode/main.cpp rename to examples/QmlBarcodeApp/main.cpp index c7b0010..f1e866a 100644 --- a/examples/QmlBarcode/main.cpp +++ b/examples/QmlBarcodeApp/main.cpp @@ -36,11 +36,11 @@ int main(int argc, char* argv[]) VersionHelper versionHelper; qmlRegisterSingletonInstance("com.somcosoftware.scodes", 1, 0, "VersionHelper", &versionHelper); - qmlRegisterSingletonType(QUrl("qrc:/qml/Theme.qml"), "Theme", 1, 0, "Theme"); - qmlRegisterUncreatableMetaObject( SCodes::staticMetaObject, "com.somcosoftware.scodes", 1, 0, "SCodes", "Error, enum type"); + qmlRegisterSingletonType(QUrl("qrc:/qml/Theme.qml"), "Theme", 1, 0, "Theme"); + engine.load(QUrl(QStringLiteral("qrc:/qml/main.qml"))); if (engine.rootObjects().isEmpty()) { diff --git a/examples/QmlBarcode/qml/CButton.qml b/examples/QmlBarcodeApp/qml/CButton.qml similarity index 100% rename from examples/QmlBarcode/qml/CButton.qml rename to examples/QmlBarcodeApp/qml/CButton.qml diff --git a/examples/QmlBarcode/qml/CComboBox.qml b/examples/QmlBarcodeApp/qml/CComboBox.qml similarity index 100% rename from examples/QmlBarcode/qml/CComboBox.qml rename to examples/QmlBarcodeApp/qml/CComboBox.qml diff --git a/examples/QmlBarcode/qml/CTabButton.qml b/examples/QmlBarcodeApp/qml/CTabButton.qml similarity index 100% rename from examples/QmlBarcode/qml/CTabButton.qml rename to examples/QmlBarcodeApp/qml/CTabButton.qml diff --git a/examples/QmlBarcode/qml/CTextField.qml b/examples/QmlBarcodeApp/qml/CTextField.qml similarity index 100% rename from examples/QmlBarcode/qml/CTextField.qml rename to examples/QmlBarcodeApp/qml/CTextField.qml diff --git a/examples/QmlBarcode/qml/GeneratorPage.qml b/examples/QmlBarcodeApp/qml/GeneratorPage.qml similarity index 100% rename from examples/QmlBarcode/qml/GeneratorPage.qml rename to examples/QmlBarcodeApp/qml/GeneratorPage.qml diff --git a/examples/QmlBarcode/qml/Qt5ScannerPage.qml b/examples/QmlBarcodeApp/qml/Qt5ScannerPage.qml similarity index 100% rename from examples/QmlBarcode/qml/Qt5ScannerPage.qml rename to examples/QmlBarcodeApp/qml/Qt5ScannerPage.qml diff --git a/examples/QmlBarcode/qml/Qt6ScannerOverlay.qml b/examples/QmlBarcodeApp/qml/Qt6ScannerOverlay.qml similarity index 100% rename from examples/QmlBarcode/qml/Qt6ScannerOverlay.qml rename to examples/QmlBarcodeApp/qml/Qt6ScannerOverlay.qml diff --git a/examples/QmlBarcode/qml/Qt6ScannerPage.qml b/examples/QmlBarcodeApp/qml/Qt6ScannerPage.qml similarity index 100% rename from examples/QmlBarcode/qml/Qt6ScannerPage.qml rename to examples/QmlBarcodeApp/qml/Qt6ScannerPage.qml diff --git a/examples/QmlBarcode/qml/ScannerOverlay.qml b/examples/QmlBarcodeApp/qml/ScannerOverlay.qml similarity index 100% rename from examples/QmlBarcode/qml/ScannerOverlay.qml rename to examples/QmlBarcodeApp/qml/ScannerOverlay.qml diff --git a/examples/QmlBarcode/qml/Subtrack.qml b/examples/QmlBarcodeApp/qml/Subtrack.qml similarity index 100% rename from examples/QmlBarcode/qml/Subtrack.qml rename to examples/QmlBarcodeApp/qml/Subtrack.qml diff --git a/examples/QmlBarcode/qml/Theme.qml b/examples/QmlBarcodeApp/qml/Theme.qml similarity index 100% rename from examples/QmlBarcode/qml/Theme.qml rename to examples/QmlBarcodeApp/qml/Theme.qml diff --git a/examples/QmlBarcode/qml/main.qml b/examples/QmlBarcodeApp/qml/main.qml similarity index 100% rename from examples/QmlBarcode/qml/main.qml rename to examples/QmlBarcodeApp/qml/main.qml diff --git a/examples/QmlBarcode/qrScanner/QrDecoder.cpp b/examples/QmlBarcodeApp/qrScanner/QrDecoder.cpp similarity index 100% rename from examples/QmlBarcode/qrScanner/QrDecoder.cpp rename to examples/QmlBarcodeApp/qrScanner/QrDecoder.cpp diff --git a/examples/QmlBarcode/qrScanner/QrDecoder.h b/examples/QmlBarcodeApp/qrScanner/QrDecoder.h similarity index 100% rename from examples/QmlBarcode/qrScanner/QrDecoder.h rename to examples/QmlBarcodeApp/qrScanner/QrDecoder.h diff --git a/examples/QmlBarcode/qrScanner/QrScannerFilter.cpp b/examples/QmlBarcodeApp/qrScanner/QrScannerFilter.cpp similarity index 100% rename from examples/QmlBarcode/qrScanner/QrScannerFilter.cpp rename to examples/QmlBarcodeApp/qrScanner/QrScannerFilter.cpp diff --git a/examples/QmlBarcode/qrScanner/QrScannerFilter.h b/examples/QmlBarcodeApp/qrScanner/QrScannerFilter.h similarity index 100% rename from examples/QmlBarcode/qrScanner/QrScannerFilter.h rename to examples/QmlBarcodeApp/qrScanner/QrScannerFilter.h diff --git a/examples/QmlBarcodeGenerator/.gitignore b/examples/QmlBarcodeGenerator/.gitignore deleted file mode 100644 index ed2dcca..0000000 --- a/examples/QmlBarcodeGenerator/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -*.pro.user -*.pro.user* -build-* -*DS_Store diff --git a/examples/QmlBarcodeGenerator/CMakeLists.txt b/examples/QmlBarcodeGenerator/CMakeLists.txt deleted file mode 100644 index 13461b9..0000000 --- a/examples/QmlBarcodeGenerator/CMakeLists.txt +++ /dev/null @@ -1,51 +0,0 @@ -cmake_minimum_required(VERSION 3.16) - -project(QmlBarcodeGenerator LANGUAGES CXX) - -set(CMAKE_INCLUDE_CURRENT_DIR ON) - -set(CMAKE_AUTOMOC ON) -set(CMAKE_AUTORCC ON) - -set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_STANDARD_REQUIRED ON) - -#Check this file for any *_DIR variable definitions and other -include("cmake/Locations.cmake") - -qt_add_resources(RSCS qml.qrc) - -add_subdirectory(${LIB_DIR} ${CMAKE_BINARY_DIR}/SCodes) - -if(ANDROID) - if(QT_VERSION_MAJOR EQUAL 5) - set(ANDROID_MIN_SDK_VERSION 21) - set(ANDROID_ABI "armeabi-v7a") - set(QT_ANDROID_PACKAGE_SOURCE_DIR ${PROJECT_SOURCE_DIR}/android) - - set(ANDROID_SOURCES - ${QT_ANDROID_PACKAGE_SOURCE_DIR}/AndroidManifest.xml - ${QT_ANDROID_PACKAGE_SOURCE_DIR}/build.gradle - ${QT_ANDROID_PACKAGE_SOURCE_DIR}/gradle/wrapper/gradle-wrapper.jar - ${QT_ANDROID_PACKAGE_SOURCE_DIR}/gradle/wrapper/gradle-wrapper.properties - ${QT_ANDROID_PACKAGE_SOURCE_DIR}/gradlew - ${QT_ANDROID_PACKAGE_SOURCE_DIR}/res/values/libs.xml - ) - add_library(${PROJECT_NAME} SHARED main.cpp ${RSCS} ${ANDROID_SOURCES}) - else() - qt_add_executable(${PROJECT_NAME} MANUAL_FINALIZATION main.cpp ${RSCS}) - set_target_properties(${PROJECT_NAME} PROPERTIES - QT_ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android" - ) - endif() -else() - add_executable(${PROJECT_NAME} main.cpp ${RSCS} ColorController.h ColorController.cpp) -endif() - -target_link_libraries(${PROJECT_NAME} PRIVATE ${REQUIRED_QT_LIBS} SCodes) - -if(QT_VERSION_MAJOR EQUAL 6) - qt_import_qml_plugins(${PROJECT_NAME}) - qt_finalize_executable(${PROJECT_NAME}) - qt_finalize_project(${PROJECT_NAME}) -endif() diff --git a/examples/QmlBarcodeGenerator/ColorController.cpp b/examples/QmlBarcodeGenerator/ColorController.cpp deleted file mode 100644 index 55b4463..0000000 --- a/examples/QmlBarcodeGenerator/ColorController.cpp +++ /dev/null @@ -1,15 +0,0 @@ -#include "ColorController.h" - -ColorController::ColorController(QObject *parent) - : QObject{parent} -{} - -bool ColorController::checkColor(const QString &color) -{ - return QColor(color).isValid(); -} - -QColor ColorController::convertStringToColor(const QString &color) -{ - return QColor(color); -} diff --git a/examples/QmlBarcodeGenerator/ColorController.h b/examples/QmlBarcodeGenerator/ColorController.h deleted file mode 100644 index d327bdb..0000000 --- a/examples/QmlBarcodeGenerator/ColorController.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef COLORCONTROLLER_H -#define COLORCONTROLLER_H - -#include -#include - -class ColorController : public QObject -{ - Q_OBJECT -public: - explicit ColorController(QObject *parent = nullptr); - Q_INVOKABLE static QColor convertStringToColor(const QString &color); - -public slots: - bool checkColor(const QString &color); -}; - -#endif // COLORCONTROLLER_H diff --git a/examples/QmlBarcodeGenerator/QmlBarcodeGenerator.pro b/examples/QmlBarcodeGenerator/QmlBarcodeGenerator.pro deleted file mode 100644 index e92445c..0000000 --- a/examples/QmlBarcodeGenerator/QmlBarcodeGenerator.pro +++ /dev/null @@ -1,37 +0,0 @@ -include("../../src/SCodes.pri") - -QT += quick -CONFIG += c++17 - -DEFINES += QT_DEPRECATED_WARNINGS - - -HEADERS += \ - ColorController.h - -SOURCES += \ - ColorController.cpp \ - main.cpp - -RESOURCES += qml.qrc - -# Default rules for deployment. -qnx: target.path = /tmp/$${TARGET}/bin -else: unix:!android: target.path = /opt/$${TARGET}/bin -!isEmpty(target.path): INSTALLS += target - -android { - DISTFILES += \ - android/AndroidManifest.xml \ - android/build.gradle \ - android/gradle/wrapper/gradle-wrapper.jar \ - android/gradle/wrapper/gradle-wrapper.properties \ - android/gradlew \ - android/gradlew.bat \ - android/res/values/libs.xml - - ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android - - ANDROID_ABIS = armeabi-v7a -} - diff --git a/examples/QmlBarcodeGenerator/android.7z b/examples/QmlBarcodeGenerator/android.7z deleted file mode 100644 index d5c1bb7f386f7a6236143c60429b8b090c5b024d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 116676 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

6Z+=;smFAs8iVjVu=vk6tQBKZnQXvy}Fe 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 B;qCwc diff --git a/examples/QmlBarcodeGenerator/android/AndroidManifest.xml b/examples/QmlBarcodeGenerator/android/AndroidManifest.xml deleted file mode 100644 index 1deca45..0000000 --- a/examples/QmlBarcodeGenerator/android/AndroidManifest.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/examples/QmlBarcodeGenerator/android/build.gradle b/examples/QmlBarcodeGenerator/android/build.gradle deleted file mode 100644 index 275b825..0000000 --- a/examples/QmlBarcodeGenerator/android/build.gradle +++ /dev/null @@ -1,82 +0,0 @@ -buildscript { - repositories { - google() - mavenCentral() - } - - dependencies { - classpath 'com.android.tools.build:gradle:7.0.2' - } -} - -repositories { - google() - mavenCentral() -} - -apply plugin: 'com.android.application' - -dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar']) -} - -android { - /******************************************************* - * The following variables: - * - androidBuildToolsVersion, - * - androidCompileSdkVersion - * - qtAndroidDir - holds the path to qt android files - * needed to build any Qt application - * on Android. - * - * are defined in gradle.properties file. This file is - * updated by QtCreator and androiddeployqt tools. - * Changing them manually might break the compilation! - *******************************************************/ - - compileSdkVersion androidCompileSdkVersion.toInteger() - buildToolsVersion androidBuildToolsVersion - ndkVersion androidNdkVersion - - sourceSets { - main { - manifest.srcFile 'AndroidManifest.xml' - java.srcDirs = [qtAndroidDir + '/src', 'src', 'java'] - aidl.srcDirs = [qtAndroidDir + '/src', 'src', 'aidl'] - res.srcDirs = [qtAndroidDir + '/res', 'res'] - resources.srcDirs = ['resources'] - renderscript.srcDirs = ['src'] - assets.srcDirs = ['assets'] - jniLibs.srcDirs = ['libs'] - } - } - - tasks.withType(JavaCompile) { - options.incremental = true - } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - - lintOptions { - abortOnError false - } - - // Do not compress Qt binary resources file - aaptOptions { - noCompress 'rcc' - } - - defaultConfig { - resConfig "en" - minSdkVersion qtMinSdkVersion - targetSdkVersion qtTargetSdkVersion - ndk.abiFilters = qtTargetAbiList.split(",") - - ndk { - abiFilters 'armeabi-v7a' - } - } -} diff --git a/examples/QmlBarcodeGenerator/android/gradle.properties b/examples/QmlBarcodeGenerator/android/gradle.properties deleted file mode 100644 index 263d702..0000000 --- a/examples/QmlBarcodeGenerator/android/gradle.properties +++ /dev/null @@ -1,14 +0,0 @@ -# Project-wide Gradle settings. -# For more details on how to configure your build environment visit -# http://www.gradle.org/docs/current/userguide/build_environment.html -# Specifies the JVM arguments used for the daemon process. -# The setting is particularly useful for tweaking memory settings. -org.gradle.jvmargs=-Xmx2500m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 - -# Enable building projects in parallel -org.gradle.parallel=true - -# Gradle caching allows reusing the build artifacts from a previous -# build with the same inputs. However, over time, the cache size will -# grow. Uncomment the following line to enable it. -#org.gradle.caching=true diff --git a/examples/QmlBarcodeGenerator/android/gradle/wrapper/gradle-wrapper.jar b/examples/QmlBarcodeGenerator/android/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 41d9927a4d4fb3f96a785543079b8df6723c946b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59821 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 diff --git a/examples/QmlBarcodeGenerator/android/gradle/wrapper/gradle-wrapper.properties b/examples/QmlBarcodeGenerator/android/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 41dfb87..0000000 --- a/examples/QmlBarcodeGenerator/android/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,5 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists diff --git a/examples/QmlBarcodeGenerator/android/gradlew b/examples/QmlBarcodeGenerator/android/gradlew deleted file mode 100644 index 005bcde..0000000 --- a/examples/QmlBarcodeGenerator/android/gradlew +++ /dev/null @@ -1,234 +0,0 @@ -#!/bin/sh - -# -# Copyright © 2015-2021 the original authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -############################################################################## -# -# Gradle start up script for POSIX generated by Gradle. -# -# Important for running: -# -# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is -# noncompliant, but you have some other compliant shell such as ksh or -# bash, then to run this script, type that shell name before the whole -# command line, like: -# -# ksh Gradle -# -# Busybox and similar reduced shells will NOT work, because this script -# requires all of these POSIX shell features: -# * functions; -# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», -# «${var#prefix}», «${var%suffix}», and «$( cmd )»; -# * compound commands having a testable exit status, especially «case»; -# * various built-in commands including «command», «set», and «ulimit». -# -# Important for patching: -# -# (2) This script targets any POSIX shell, so it avoids extensions provided -# by Bash, Ksh, etc; in particular arrays are avoided. -# -# The "traditional" practice of packing multiple parameters into a -# space-separated string is a well documented source of bugs and security -# problems, so this is (mostly) avoided, by progressively accumulating -# options in "$@", and eventually passing that to Java. -# -# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, -# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; -# see the in-line comments for details. -# -# There are tweaks for specific operating systems such as AIX, CygWin, -# Darwin, MinGW, and NonStop. -# -# (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt -# within the Gradle project. -# -# You can find Gradle at https://github.com/gradle/gradle/. -# -############################################################################## - -# Attempt to set APP_HOME - -# Resolve links: $0 may be a link -app_path=$0 - -# Need this for daisy-chained symlinks. -while - APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path - [ -h "$app_path" ] -do - ls=$( ls -ld "$app_path" ) - link=${ls#*' -> '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -APP_NAME="Gradle" -APP_BASE_NAME=${0##*/} - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='-Dfile.encoding=UTF-8 "-Xmx64m" "-Xms64m"' - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ - "$@" - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/examples/QmlBarcodeGenerator/android/gradlew.bat b/examples/QmlBarcodeGenerator/android/gradlew.bat deleted file mode 100644 index 4cc84e5..0000000 --- a/examples/QmlBarcodeGenerator/android/gradlew.bat +++ /dev/null @@ -1,89 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS=-Dfile.encoding=UTF-8 "-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/examples/QmlBarcodeGenerator/android/res/drawable-hdpi/icon.png b/examples/QmlBarcodeGenerator/android/res/drawable-hdpi/icon.png deleted file mode 100644 index ca8fc2674ac9d70ca0fe0adcb45a31e4e213ebf0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4750 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%0AB5&NbXS)%P?`#NObc& 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 GGw^?7yQcI2 diff --git a/examples/QmlBarcodeGenerator/android/res/drawable-xxxhdpi/icon.png b/examples/QmlBarcodeGenerator/android/res/drawable-xxxhdpi/icon.png deleted file mode 100644 index 100474e932c9a024d2aff76f3788eafa5f9f0812..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21651 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 - - - - - - - - - - - - - - - - - - - diff --git a/examples/QmlBarcodeGenerator/cmake/Locations.cmake b/examples/QmlBarcodeGenerator/cmake/Locations.cmake deleted file mode 100644 index 0c773e7..0000000 --- a/examples/QmlBarcodeGenerator/cmake/Locations.cmake +++ /dev/null @@ -1,37 +0,0 @@ -set(COMPANY "Scythe Studio") -set(COPYRIGHT "Copyright (c) 2022 Scythe Studio. Licensed under the Apache License, Version 2.0.") -set(IDENTIFIER "com.scythestudio.scodes.example") - -# ---CONFIGURATION--- -option(USE_QML "Add QML support" ON) -option(USE_LIBS "Use external libraries" ON) - -# Locations - directories in project structure -set(LIB_DIR ${CMAKE_SOURCE_DIR}/../../src) - -set(SRC_DIR ".") -set(RES_DIR ".") -set(QML_DIR "qml") - -# Check Qt version -find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core) -find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core) - -# ---PACKAGES SECTION--- -list(APPEND REQUIRED_QT_PACKAGES Core Quick Gui Multimedia) - -if(USE_QML) - list(APPEND REQUIRED_QT_PACKAGES Quick) - list(APPEND QML_IMPORT_PATH "${CMAKE_SOURCE_DIR}/${QML_DIR}") - set(QML_IMPORT_PATH ${QML_IMPORT_PATH} - CACHE STRING "Qt Creator Import Path" - FORCE) -endif() - -foreach(QT_PACKAGE ${REQUIRED_QT_PACKAGES}) - list(APPEND REQUIRED_QT_LIBS Qt${QT_VERSION_MAJOR}::${QT_PACKAGE}) -endforeach() - -find_package(QT NAMES Qt${QT_VERSION_MAJOR} COMPONENTS ${REQUIRED_QT_PACKAGES} REQUIRED) -find_package(Qt${QT_VERSION_MAJOR} COMPONENTS ${REQUIRED_QT_PACKAGES} REQUIRED) - diff --git a/examples/QmlBarcodeGenerator/main.cpp b/examples/QmlBarcodeGenerator/main.cpp deleted file mode 100644 index 047d179..0000000 --- a/examples/QmlBarcodeGenerator/main.cpp +++ /dev/null @@ -1,30 +0,0 @@ -#include -#include - -#include "SBarcodeGenerator.h" -#include "ColorController.h" - -int main(int argc, char *argv[]) -{ - -#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) - QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); -#endif - - QGuiApplication app(argc, argv); - - QQmlApplicationEngine engine; - - qmlRegisterSingletonType(QUrl("qrc:/qml/Theme.qml"), "Theme", 1, 0, "Theme"); - - qmlRegisterType("com.scythestudio.scodes", 1, 0, "SBarcodeGenerator"); - qmlRegisterType("com.scythestudio.scodes", 1, 0, "ColorController"); - - engine.load(QUrl(QStringLiteral("qrc:/qml/GeneratorPage.qml"))); - - if (engine.rootObjects().isEmpty()) { - return -1; - } - - return app.exec(); -} diff --git a/examples/QmlBarcodeGenerator/qml.qrc b/examples/QmlBarcodeGenerator/qml.qrc deleted file mode 100644 index 35d6725..0000000 --- a/examples/QmlBarcodeGenerator/qml.qrc +++ /dev/null @@ -1,9 +0,0 @@ - - - qml/GeneratorPage.qml - qml/CButton.qml - qml/CTextField.qml - qml/CComboBox.qml - qml/Theme.qml - - diff --git a/examples/QmlBarcodeGenerator/qml/CButton.qml b/examples/QmlBarcodeGenerator/qml/CButton.qml deleted file mode 100644 index 5c687ce..0000000 --- a/examples/QmlBarcodeGenerator/qml/CButton.qml +++ /dev/null @@ -1,25 +0,0 @@ -import QtQuick 2.12 -import QtQuick.Controls 2.12 -import QtQuick.Layouts 1.12 -import QtQuick.Window 2.12 - - -/*! - Classic push button for configure, generate & save operations. - */ -Button { - id: root - - height: 100 - implicitWidth: appWindow.width / 4 - - checkable: true - - palette.buttonText: Theme.textColor - - background: Rectangle { - radius: 10 - color: root.pressed ? Qt.darker( - Theme.backgroundColor) : Theme.backgroundColor - } -} diff --git a/examples/QmlBarcodeGenerator/qml/CComboBox.qml b/examples/QmlBarcodeGenerator/qml/CComboBox.qml deleted file mode 100644 index 5811a57..0000000 --- a/examples/QmlBarcodeGenerator/qml/CComboBox.qml +++ /dev/null @@ -1,19 +0,0 @@ -import QtQuick 2.12 -import QtQuick.Controls 2.12 - - -/*! - Drop-down menu for barcode format selection & save file format extension - */ -ComboBox { - id: root - - background: Rectangle { - radius: 2 - - border { - color: Theme.borderColor - width: 1 - } - } -} diff --git a/examples/QmlBarcodeGenerator/qml/CTextField.qml b/examples/QmlBarcodeGenerator/qml/CTextField.qml deleted file mode 100644 index 7a9e83b..0000000 --- a/examples/QmlBarcodeGenerator/qml/CTextField.qml +++ /dev/null @@ -1,25 +0,0 @@ -import QtQuick 2.12 -import QtQuick.Controls 2.12 - - -/*! - Field for setting width, height, margin & error correction code level parameters. - */ -TextField { - id: root - - property bool inputIsValid: true - - selectByMouse: true - - leftPadding: 5 - - background: Rectangle { - radius: 2 - - border { - color: inputIsValid ? Theme.borderColor : Theme.invalidInputBorderColor - width: 1 - } - } -} diff --git a/examples/QmlBarcodeGenerator/qml/GeneratorPage.qml b/examples/QmlBarcodeGenerator/qml/GeneratorPage.qml deleted file mode 100644 index 971eb22..0000000 --- a/examples/QmlBarcodeGenerator/qml/GeneratorPage.qml +++ /dev/null @@ -1,459 +0,0 @@ -import QtQuick 2.12 -import QtQuick.Controls 2.12 -import QtMultimedia 5.12 -import QtQuick.Layouts 1.12 -import com.scythestudio.scodes 1.0 - - -/*! - Barcode generator main page. All QML elements managing from here. - */ -ApplicationWindow { - id: appWindow - - visible: true - - width: 400 - height: 800 - - MouseArea { - id: hideKeyboard - anchors.fill: parent - onClicked: { - Qt.inputMethod.hide() - } - } - - ColorController { - id: colorController - } - - SBarcodeGenerator { - id: barcodeGenerator - - onForegroundColorChanged: { - image.source = "" - barcodeGenerator.generate(textField.text) - } - - onBackgroundColorChanged: { - image.source = "" - barcodeGenerator.generate(textField.text) - } - - onGenerationFinished: function (error) { - if (error === "") { - console.log(barcodeGenerator.filePath) - image.source = "file:///" + barcodeGenerator.filePath - } else { - generateLabel.text = error - generatePopup.open() - } - } - } - - Rectangle { - id: dashboard - - anchors.fill: parent - - height: parent.height - width: parent.width - - Rectangle { - id: inputRect - z: 100 - - height: 40 - - anchors { - top: parent.top - left: parent.left - right: parent.right - } - - CTextField { - id: textField - - anchors.fill: parent - - selectByMouse: true - - placeholderText: qsTr("Input") - } - } - - Image { - id: image - - width: parent.width - height: image.width - - anchors { - left: parent.left - right: parent.right - verticalCenter: parent.verticalCenter - } - - cache: false - } - - Rectangle { - id: buttonsRect - - height: 40 - - anchors { - bottom: parent.bottom - left: parent.left - right: parent.right - } - - RowLayout { - id: buttonsLayout - - spacing: 5 - - anchors.fill: parent - - CButton { - id: settingsButton - - Layout.alignment: Qt.AlignHCenter - Layout.bottomMargin: 10 - - text: qsTr("Settings") - - onClicked: { - settingsPopup.open() - } - } - - CButton { - id: generateButton - - Layout.alignment: Qt.AlignHCenter - Layout.bottomMargin: 10 - checkable: false - - text: qsTr("Generate") - - onClicked: { - image.source = "" - if (textField.text === "") { - generateLabel.text = "Input is empty" - generatePopup.open() - } else { - barcodeGenerator.generate(textField.text) - } - } - } - - CButton { - id: saveButton - - Layout.alignment: Qt.AlignHCenter - Layout.bottomMargin: 10 - - text: qsTr("Save") - - onClicked: { - if (barcodeGenerator.saveImage()) { - saveLabel.text = "File successfully saved" - } else { - saveLabel.text = "There was an error while saving file" - } - - imageSavedPopup.open() - } - } - } - } - - Popup { - id: generatePopup - - anchors.centerIn: parent - - dim: true - - modal: true - - Label { - id: generateLabel - - anchors.centerIn: parent - } - - onClosed: { - generateButton.checked = false - } - } - - Popup { - id: imageSavedPopup - - anchors.centerIn: parent - - dim: true - - modal: true - - Label { - id: saveLabel - - anchors.centerIn: parent - } - - onClosed: { - saveButton.checked = false - } - } - - Popup { - id: settingsPopup - - width: parent.width * 0.6 - height: parent.height * 0.6 - - anchors.centerIn: parent - - dim: true - - modal: true - - ColumnLayout { - anchors.fill: parent - - spacing: 5 - - CTextField { - id: widthField - - implicitWidth: parent.width - implicitHeight: parent.height / 10 - - placeholderText: "Current width: " + barcodeGenerator.width - - onEditingFinished: function () { - - var parsedWidth = parseInt(text) - - if (isNaN(parsedWidth) != true && parsedWidth > 0) { - barcodeGenerator.width = parsedWidth - } - } - } - - CTextField { - id: heightField - - implicitWidth: parent.width - implicitHeight: parent.height / 10 - - placeholderText: "Current height: " + barcodeGenerator.height - - onEditingFinished: function () { - - var parsedHeight = parseInt(text) - - if (isNaN(parsedHeight) != true && parsedHeight > 0) { - barcodeGenerator.height = parsedHeight - } - } - } - - CTextField { - id: marginField - - implicitWidth: parent.width - implicitHeight: parent.height / 10 - - placeholderText: "Current margin: " + barcodeGenerator.margin - - onEditingFinished: function () { - - var parsedMargin = parseInt(text) - - if (isNaN(parsedMargin) != true) { - barcodeGenerator.margin = parsedMargin - } - } - } - - CTextField { - id: eccLevelField - - implicitWidth: parent.width - implicitHeight: parent.height / 10 - - placeholderText: "Current ECC Level: " + barcodeGenerator.eccLevel - - onEditingFinished: function () { - barcodeGenerator.eccLevel = text - } - } - - CTextField { - id: foregroundColorField - - implicitWidth: parent.width - implicitHeight: parent.height / 10 - - placeholderText: "Current foreground color: " + barcodeGenerator.foregroundColor - - onTextChanged: function () { - foregroundColorField.inputIsValid = colorController.checkColor(foregroundColorField.text) - - if (colorController.checkColor(foregroundColorField.text)) { - barcodeGenerator.setForegroundColor(colorController.convertStringToColor(foregroundColorField.text)) - } - } - } - - CTextField { - id: backgroundColorField - - implicitWidth: parent.width - implicitHeight: parent.height / 10 - - placeholderText: "Current background color: " + barcodeGenerator.backgroundColor - - onTextChanged: function () { - backgroundColorField.inputIsValid = colorController.checkColor(backgroundColorField.text) - - if (colorController.checkColor(backgroundColorField.text)) { - barcodeGenerator.setBackgroundColor(colorController.convertStringToColor(backgroundColorField.text)) - } - } - } - - CComboBox { - id: formatDropDown - - implicitWidth: parent.width - implicitHeight: parent.height / 10 - - model: ListModel { - id: formats - - ListElement { - text: "Aztec" - } - ListElement { - text: "Codabar" - } - ListElement { - text: "Code39" - } - ListElement { - text: "Code93" - } - ListElement { - text: "Code128" - } - ListElement { - text: "DataMatrix" - } - ListElement { - text: "EAN-8" - } - ListElement { - text: "EAN-13" - } - ListElement { - text: "ITF" - } - ListElement { - text: "PDF417" - } - ListElement { - text: "QRCode" - } - ListElement { - text: "UPC-A" - } - ListElement { - text: "UPC-E" - } - } - onCurrentIndexChanged: function () { - var formatAsText = formats.get(currentIndex).text - // a separate method was used because of qml error - // when try to use it as overloaded setter - barcodeGenerator.setFormat(formatAsText) - } - } - - CComboBox { - id: imageFormat - - implicitWidth: parent.width - implicitHeight: parent.height / 10 - - model: ListModel { - id: extensions - - ListElement { - text: "png" - } - - ListElement { - text: "jpg" - } - } - onCurrentIndexChanged: function () { - barcodeGenerator.extension = extensions.get(currentIndex).text - } - } - - CTextField { - id: fileNameField - - text: qsTr(barcodeGenerator.fileName) - - implicitWidth: parent.width - implicitHeight: parent.height / 10 - - onEditingFinished: { - barcodeGenerator.fileName = text - } - } - - CTextField { - id: imagePathField - - text: qsTr(barcodeGenerator.imagePath) - - implicitWidth: parent.width - implicitHeight: parent.height / 10 - - placeholderText: "Current image path: " + barcodeGenerator.imagePath - - onEditingFinished: { - barcodeGenerator.imagePath = text - } - } - - CTextField { - id: centerImageRatioField - - text: qsTr(barcodeGenerator.centerImageRatio.toString()) - - implicitWidth: parent.width - implicitHeight: parent.height / 10 - - placeholderText: "Current center image ratio: " + barcodeGenerator.centerImageRatio - - onEditingFinished: { - barcodeGenerator.centerImageRatio = parseInt(text) - } - } - } - - onClosed: { - settingsButton.checked = false - } - } - } -} diff --git a/examples/QmlBarcodeGenerator/qml/Theme.qml b/examples/QmlBarcodeGenerator/qml/Theme.qml deleted file mode 100644 index c62b2fd..0000000 --- a/examples/QmlBarcodeGenerator/qml/Theme.qml +++ /dev/null @@ -1,16 +0,0 @@ -pragma Singleton - -import QtQuick 2.12 - - -/** - Contains common used colors - */ -QtObject { - id: root - - readonly property color backgroundColor: "#218165" - readonly property color textColor: "#bdbdbd" - readonly property color borderColor: "#333" - readonly property color invalidInputBorderColor: "#F00" -} diff --git a/examples/QmlBarcodeReader/.gitignore b/examples/QmlBarcodeReader/.gitignore deleted file mode 100644 index ed2dcca..0000000 --- a/examples/QmlBarcodeReader/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -*.pro.user -*.pro.user* -build-* -*DS_Store diff --git a/examples/QmlBarcodeReader/CMakeLists.txt b/examples/QmlBarcodeReader/CMakeLists.txt deleted file mode 100644 index 5567aca..0000000 --- a/examples/QmlBarcodeReader/CMakeLists.txt +++ /dev/null @@ -1,55 +0,0 @@ -cmake_minimum_required(VERSION 3.16) - -project(QmlBarcodeReader LANGUAGES CXX) - -set(CMAKE_INCLUDE_CURRENT_DIR ON) - -set(CMAKE_AUTOMOC ON) -set(CMAKE_AUTORCC ON) - -set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_STANDARD_REQUIRED ON) - -#Check this file for any *_DIR variable definitions and other -include("cmake/Locations.cmake") - -if(QT_VERSION_MAJOR EQUAL 5) - qt5_add_resources(RSCS Qt5qml.qrc) -else() - qt6_add_resources(RSCS Qt6qml.qrc) -endif() - -add_subdirectory(${LIB_DIR} ${CMAKE_BINARY_DIR}/SCodes) - -if(ANDROID) - if(QT_VERSION_MAJOR EQUAL 5) - set(ANDROID_MIN_SDK_VERSION 21) - set(ANDROID_ABI "armeabi-v7a") - set(QT_ANDROID_PACKAGE_SOURCE_DIR ${PROJECT_SOURCE_DIR}/android) - - set(ANDROID_SOURCES - ${QT_ANDROID_PACKAGE_SOURCE_DIR}/AndroidManifest.xml - ${QT_ANDROID_PACKAGE_SOURCE_DIR}/build.gradle - ${QT_ANDROID_PACKAGE_SOURCE_DIR}/gradle/wrapper/gradle-wrapper.jar - ${QT_ANDROID_PACKAGE_SOURCE_DIR}/gradle/wrapper/gradle-wrapper.properties - ${QT_ANDROID_PACKAGE_SOURCE_DIR}/gradlew - ${QT_ANDROID_PACKAGE_SOURCE_DIR}/res/values/libs.xml - ) - add_library(${PROJECT_NAME} SHARED main.cpp ${RSCS} ${ANDROID_SOURCES}) - else() - qt_add_executable(${PROJECT_NAME} MANUAL_FINALIZATION main.cpp ${RSCS}) - set_target_properties(${PROJECT_NAME} PROPERTIES - QT_ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android" - ) - endif() -else() - add_executable(${PROJECT_NAME} main.cpp ${RSCS}) -endif() - -target_link_libraries(${PROJECT_NAME} PRIVATE ${REQUIRED_QT_LIBS} SCodes) - -if(QT_VERSION_MAJOR EQUAL 6) - qt_import_qml_plugins(${PROJECT_NAME}) - qt_finalize_executable(${PROJECT_NAME}) - qt_finalize_project(${PROJECT_NAME}) -endif() diff --git a/examples/QmlBarcodeReader/QmlBarcodeReader.pro b/examples/QmlBarcodeReader/QmlBarcodeReader.pro deleted file mode 100644 index c31ff66..0000000 --- a/examples/QmlBarcodeReader/QmlBarcodeReader.pro +++ /dev/null @@ -1,38 +0,0 @@ -include("../../src/SCodes.pri") - -QT += quick -CONFIG += c++17 - -DEFINES += QT_DEPRECATED_WARNINGS - -SOURCES += \ - main.cpp - -equals(QT_MAJOR_VERSION, 6) { - RESOURCES += Qt6qml.qrc -} - -equals(QT_MAJOR_VERSION, 5) { - RESOURCES += Qt5qml.qrc -} - -# Default rules for deployment. -qnx: target.path = /tmp/$${TARGET}/bin -else: unix:!android: target.path = /opt/$${TARGET}/bin -!isEmpty(target.path): INSTALLS += target - -android { - DISTFILES += \ - android/AndroidManifest.xml \ - android/build.gradle \ - android/gradle/wrapper/gradle-wrapper.jar \ - android/gradle/wrapper/gradle-wrapper.properties \ - android/gradlew \ - android/gradlew.bat \ - android/res/values/libs.xml - - ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android - - ANDROID_ABIS = armeabi-v7a -} - diff --git a/examples/QmlBarcodeReader/Qt5qml.qrc b/examples/QmlBarcodeReader/Qt5qml.qrc deleted file mode 100644 index 556d120..0000000 --- a/examples/QmlBarcodeReader/Qt5qml.qrc +++ /dev/null @@ -1,7 +0,0 @@ - - - qml/Qt5ScannerPage.qml - qml/Qt5ScannerOverlay.qml - qml/Theme.qml - - diff --git a/examples/QmlBarcodeReader/Qt6qml.qrc b/examples/QmlBarcodeReader/Qt6qml.qrc deleted file mode 100644 index a0a4561..0000000 --- a/examples/QmlBarcodeReader/Qt6qml.qrc +++ /dev/null @@ -1,7 +0,0 @@ - - - qml/Qt6ScannerPage.qml - qml/Qt6ScannerOverlay.qml - qml/Theme.qml - - diff --git a/examples/QmlBarcodeReader/android/AndroidManifest.xml b/examples/QmlBarcodeReader/android/AndroidManifest.xml deleted file mode 100644 index 9d38395..0000000 --- a/examples/QmlBarcodeReader/android/AndroidManifest.xml +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/examples/QmlBarcodeReader/android/build.gradle b/examples/QmlBarcodeReader/android/build.gradle deleted file mode 100644 index 5378967..0000000 --- a/examples/QmlBarcodeReader/android/build.gradle +++ /dev/null @@ -1,82 +0,0 @@ -buildscript { - repositories { - google() - mavenCentral() - } - - dependencies { - classpath 'com.android.tools.build:gradle:7.0.2' - } -} - -repositories { - google() - mavenCentral() -} - -apply plugin: 'com.android.application' - -dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar']) -} - -android { - /******************************************************* - * The following variables: - * - androidBuildToolsVersion, - * - androidCompileSdkVersion - * - qtAndroidDir - holds the path to qt android files - * needed to build any Qt application - * on Android. - * - * are defined in gradle.properties file. This file is - * updated by QtCreator and androiddeployqt tools. - * Changing them manually might break the compilation! - *******************************************************/ - - compileSdkVersion androidCompileSdkVersion.toInteger() - buildToolsVersion androidBuildToolsVersion - ndkVersion '22.1.7171670' - - sourceSets { - main { - manifest.srcFile 'AndroidManifest.xml' - java.srcDirs = [qtAndroidDir + '/src', 'src', 'java'] - aidl.srcDirs = [qtAndroidDir + '/src', 'src', 'aidl'] - res.srcDirs = [qtAndroidDir + '/res', 'res'] - resources.srcDirs = ['resources'] - renderscript.srcDirs = ['src'] - assets.srcDirs = ['assets'] - jniLibs.srcDirs = ['libs'] - } - } - - tasks.withType(JavaCompile) { - options.incremental = true - } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - - lintOptions { - abortOnError false - } - - // Do not compress Qt binary resources file - aaptOptions { - noCompress 'rcc' - } - - defaultConfig { - resConfig "en" - minSdkVersion qtMinSdkVersion - targetSdkVersion qtTargetSdkVersion - ndk.abiFilters = qtTargetAbiList.split(",") - - ndk { - abiFilters 'armeabi-v7a' - } - } -} diff --git a/examples/QmlBarcodeReader/android/gradle.properties b/examples/QmlBarcodeReader/android/gradle.properties deleted file mode 100644 index 53321a4..0000000 --- a/examples/QmlBarcodeReader/android/gradle.properties +++ /dev/null @@ -1,14 +0,0 @@ -# Project-wide Gradle settings. -# For more details on how to configure your build environment visit -# http://www.gradle.org/docs/current/userguide/build_environment.html -# Specifies the JVM arguments used for the daemon process. -# The setting is particularly useful for tweaking memory settings. -org.gradle.jvmargs=-Xmx512m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 - -# Enable building projects in parallel -org.gradle.parallel=true - -# Gradle caching allows reusing the build artifacts from a previous -# build with the same inputs. However, over time, the cache size will -# grow. Uncomment the following line to enable it. -#org.gradle.caching=true diff --git a/examples/QmlBarcodeReader/android/gradle/wrapper/gradle-wrapper.jar b/examples/QmlBarcodeReader/android/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 7454180f2ae8848c63b8b4dea2cb829da983f2fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59536 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 QuEJmfE|#`Dqx|px0L@K;Y5)KL diff --git a/examples/QmlBarcodeReader/android/gradle/wrapper/gradle-wrapper.properties b/examples/QmlBarcodeReader/android/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 41dfb87..0000000 --- a/examples/QmlBarcodeReader/android/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,5 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists diff --git a/examples/QmlBarcodeReader/android/gradlew b/examples/QmlBarcodeReader/android/gradlew deleted file mode 100644 index 005bcde..0000000 --- a/examples/QmlBarcodeReader/android/gradlew +++ /dev/null @@ -1,234 +0,0 @@ -#!/bin/sh - -# -# Copyright © 2015-2021 the original authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -############################################################################## -# -# Gradle start up script for POSIX generated by Gradle. -# -# Important for running: -# -# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is -# noncompliant, but you have some other compliant shell such as ksh or -# bash, then to run this script, type that shell name before the whole -# command line, like: -# -# ksh Gradle -# -# Busybox and similar reduced shells will NOT work, because this script -# requires all of these POSIX shell features: -# * functions; -# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», -# «${var#prefix}», «${var%suffix}», and «$( cmd )»; -# * compound commands having a testable exit status, especially «case»; -# * various built-in commands including «command», «set», and «ulimit». -# -# Important for patching: -# -# (2) This script targets any POSIX shell, so it avoids extensions provided -# by Bash, Ksh, etc; in particular arrays are avoided. -# -# The "traditional" practice of packing multiple parameters into a -# space-separated string is a well documented source of bugs and security -# problems, so this is (mostly) avoided, by progressively accumulating -# options in "$@", and eventually passing that to Java. -# -# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, -# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; -# see the in-line comments for details. -# -# There are tweaks for specific operating systems such as AIX, CygWin, -# Darwin, MinGW, and NonStop. -# -# (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt -# within the Gradle project. -# -# You can find Gradle at https://github.com/gradle/gradle/. -# -############################################################################## - -# Attempt to set APP_HOME - -# Resolve links: $0 may be a link -app_path=$0 - -# Need this for daisy-chained symlinks. -while - APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path - [ -h "$app_path" ] -do - ls=$( ls -ld "$app_path" ) - link=${ls#*' -> '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -APP_NAME="Gradle" -APP_BASE_NAME=${0##*/} - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='-Dfile.encoding=UTF-8 "-Xmx64m" "-Xms64m"' - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ - "$@" - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/examples/QmlBarcodeReader/android/gradlew.bat b/examples/QmlBarcodeReader/android/gradlew.bat deleted file mode 100644 index 4cc84e5..0000000 --- a/examples/QmlBarcodeReader/android/gradlew.bat +++ /dev/null @@ -1,89 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS=-Dfile.encoding=UTF-8 "-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/examples/QmlBarcodeReader/android/res/drawable-hdpi/icon.png b/examples/QmlBarcodeReader/android/res/drawable-hdpi/icon.png deleted file mode 100644 index ca8fc2674ac9d70ca0fe0adcb45a31e4e213ebf0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4750 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%0AB5&NbXS)%P?`#NObc& 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 GGw^?7yQcI2 diff --git a/examples/QmlBarcodeReader/android/res/drawable-xxxhdpi/icon.png b/examples/QmlBarcodeReader/android/res/drawable-xxxhdpi/icon.png deleted file mode 100644 index 100474e932c9a024d2aff76f3788eafa5f9f0812..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21651 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 - - - - - - - - - - - - - - - - - - - diff --git a/examples/QmlBarcodeReader/cmake/Locations.cmake b/examples/QmlBarcodeReader/cmake/Locations.cmake deleted file mode 100644 index 0c773e7..0000000 --- a/examples/QmlBarcodeReader/cmake/Locations.cmake +++ /dev/null @@ -1,37 +0,0 @@ -set(COMPANY "Scythe Studio") -set(COPYRIGHT "Copyright (c) 2022 Scythe Studio. Licensed under the Apache License, Version 2.0.") -set(IDENTIFIER "com.scythestudio.scodes.example") - -# ---CONFIGURATION--- -option(USE_QML "Add QML support" ON) -option(USE_LIBS "Use external libraries" ON) - -# Locations - directories in project structure -set(LIB_DIR ${CMAKE_SOURCE_DIR}/../../src) - -set(SRC_DIR ".") -set(RES_DIR ".") -set(QML_DIR "qml") - -# Check Qt version -find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core) -find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core) - -# ---PACKAGES SECTION--- -list(APPEND REQUIRED_QT_PACKAGES Core Quick Gui Multimedia) - -if(USE_QML) - list(APPEND REQUIRED_QT_PACKAGES Quick) - list(APPEND QML_IMPORT_PATH "${CMAKE_SOURCE_DIR}/${QML_DIR}") - set(QML_IMPORT_PATH ${QML_IMPORT_PATH} - CACHE STRING "Qt Creator Import Path" - FORCE) -endif() - -foreach(QT_PACKAGE ${REQUIRED_QT_PACKAGES}) - list(APPEND REQUIRED_QT_LIBS Qt${QT_VERSION_MAJOR}::${QT_PACKAGE}) -endforeach() - -find_package(QT NAMES Qt${QT_VERSION_MAJOR} COMPONENTS ${REQUIRED_QT_PACKAGES} REQUIRED) -find_package(Qt${QT_VERSION_MAJOR} COMPONENTS ${REQUIRED_QT_PACKAGES} REQUIRED) - diff --git a/examples/QmlBarcodeReader/main.cpp b/examples/QmlBarcodeReader/main.cpp deleted file mode 100644 index a52332b..0000000 --- a/examples/QmlBarcodeReader/main.cpp +++ /dev/null @@ -1,38 +0,0 @@ -#include -#include - -#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) -#include "SBarcodeFilter.h" -#else -#include "SBarcodeScanner.h" -#endif - -int main(int argc, char* argv[]) -{ - QCoreApplication::setAttribute(Qt::AA_UseDesktopOpenGL); - -#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) - QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); -#endif - QGuiApplication app(argc, argv); - - QQmlApplicationEngine engine; - - qmlRegisterSingletonType(QUrl("qrc:/qml/Theme.qml"), "Theme", 1, 0, "Theme"); - qmlRegisterUncreatableMetaObject( - SCodes::staticMetaObject, "com.scythestudio.scodes", 1, 0, "SCodes", "Error, enum type"); - -#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) - qmlRegisterType("com.scythestudio.scodes", 1, 0, "SBarcodeScanner"); - engine.load(QUrl(QStringLiteral("qrc:/qml/Qt5ScannerPage.qml"))); -#else - qmlRegisterType("com.scythestudio.scodes", 1, 0, "SBarcodeScanner"); - engine.load(QUrl(QStringLiteral("qrc:/qml/Qt6ScannerPage.qml"))); -#endif - - if (engine.rootObjects().isEmpty()) { - return -1; - } - - return app.exec(); -} diff --git a/examples/QmlBarcodeReader/qml/Qt5ScannerOverlay.qml b/examples/QmlBarcodeReader/qml/Qt5ScannerOverlay.qml deleted file mode 100644 index 5c560a0..0000000 --- a/examples/QmlBarcodeReader/qml/Qt5ScannerOverlay.qml +++ /dev/null @@ -1,209 +0,0 @@ -import QtQuick 2.12 -import QtGraphicalEffects 1.12 - -/*! - Area for scanning barcodes - */ -Item { - id: root - - property rect captureRect - - Item { - id: captureZoneCorners - - x: root.captureRect.x - y: root.captureRect.y - - width: root.captureRect.width - height: root.captureRect.height - - Rectangle { - id: topLeftCornerH - - anchors { - top: parent.top - left: parent.left - } - - width: 20 - height: 5 - - color: Theme.borderColor - radius: height / 2 - } - - Rectangle { - id: topLeftCornerV - anchors { - top: parent.top - left: parent.left - } - - width: 5 - height: 20 - - color: Theme.borderColor - radius: width / 2 - } - - // ---------------------- - Rectangle { - id: bottomLeftCornerH - - anchors { - bottom: parent.bottom - left: parent.left - } - - width: 20 - height: 5 - - color: Theme.borderColor - radius: height / 2 - } - - Rectangle { - id: bottomLeftCornerV - - anchors { - bottom: parent.bottom - left: parent.left - } - - width: 5 - height: 20 - - color: Theme.borderColor - radius: width / 2 - } - - // ---------------------- - Rectangle { - id: topRightCornerH - - anchors { - top: parent.top - right: parent.right - } - - width: 20 - height: 5 - - color: Theme.borderColor - radius: height / 2 - } - - Rectangle { - id: topRightCornerV - - anchors { - top: parent.top - right: parent.right - } - - width: 5 - height: 20 - - color: Theme.borderColor - radius: width / 2 - } - - // ---------------------- - Rectangle { - id: bottomRightCornerH - - anchors { - bottom: parent.bottom - right: parent.right - } - - width: 20 - height: 5 - - color: Theme.borderColor - radius: height / 2 - } - - Rectangle { - id: bottomRightCornerV - - anchors { - bottom: parent.bottom - right: parent.right - } - - width: 5 - height: 20 - - color: Theme.borderColor - radius: width / 2 - } - - Rectangle { - id: scanIndicator - - //y: captureZoneCorners.height/2 - width: parent.width - height: 1 - - anchors { - horizontalCenter: parent.horizontalCenter - } - - color: Theme.borderColor - - SequentialAnimation { - id: scanIndicatorAnimation - - loops: Animation.Infinite - - PropertyAnimation { - id: toTopAnimation - target: scanIndicator - property: "y" - duration: 2000 - } - - PropertyAnimation { - id: toBottomAnimation - target: scanIndicator - property: "y" - duration: 2000 - } - } - } - - RectangularGlow { - id: effect - - width: scanIndicator.width / 2 - height: scanIndicator.height - - anchors.centerIn: scanIndicator - - glowRadius: 50 - spread: 0.2 - color: Theme.borderColor - cornerRadius: glowRadius - } - } - - Text { - id: scanCapsuleText - - anchors { - verticalCenter: captureZoneCorners.bottom - horizontalCenter: captureZoneCorners.horizontalCenter - } - - text: qsTr("Scan barcode") - color: Theme.borderColor - } - - onCaptureRectChanged: { - toTopAnimation.to = 5 - toBottomAnimation.to = captureRect.height - 5 - scanIndicatorAnimation.start() - } -} diff --git a/examples/QmlBarcodeReader/qml/Qt5ScannerPage.qml b/examples/QmlBarcodeReader/qml/Qt5ScannerPage.qml deleted file mode 100644 index 5a59081..0000000 --- a/examples/QmlBarcodeReader/qml/Qt5ScannerPage.qml +++ /dev/null @@ -1,116 +0,0 @@ -import QtQuick 2.12 -import QtQuick.Controls 2.12 -import QtQuick.Window 2.12 -import QtMultimedia 5.12 -import com.scythestudio.scodes 1.0 - - -/*! - Barcode scanner main page. All QML elements managing from here. - */ -ApplicationWindow { - id: root - - visible: true - - width: Qt.platform.os == "android" - || Qt.platform.os == "ios" ? Screen.width : camera.viewfinder.resolution.width - height: Qt.platform.os == "android" - || Qt.platform.os == "ios" ? Screen.height : camera.viewfinder.resolution.height - - Camera { - id: camera - - focus { - focusMode: CameraFocus.FocusContinuous - focusPointMode: CameraFocus.FocusPointAuto - } - } - - VideoOutput { - id: videoOutput - - anchors.fill: parent - - source: camera - - autoOrientation: true - - fillMode: VideoOutput.PreserveAspectCrop - - // add barcodeScanner to videoOutput's filters to enable catching barcodes - filters: [barcodeScanner] - - onSourceRectChanged: { - barcodeScanner.captureRect = videoOutput.mapRectToSource(videoOutput.mapNormalizedRectToItem(Qt.rect(0.25, 0.25, 0.5, 0.5))) - } - - Qt5ScannerOverlay { - id: scannerOverlay - - anchors.fill: parent - - captureRect: videoOutput.mapRectToItem(barcodeScanner.captureRect) - } - - // used to get camera focus on touched point - MouseArea { - id: focusTouchArea - - anchors.fill: parent - - onClicked: { - camera.focus.customFocusPoint = Qt.point(mouse.x / width, - mouse.y / height) - camera.focus.focusMode = CameraFocus.FocusMacro - camera.focus.focusPointMode = CameraFocus.FocusPointCustom - } - } - } - - SBarcodeScanner { - id: barcodeScanner - - // you can adjust capture rect (scan area) ne changing these Qt.rect() parameters - captureRect: videoOutput.mapRectToSource(videoOutput.mapNormalizedRectToItem(Qt.rect(0.25, 0.25, 0.5, 0.5))) - - onCapturedChanged: { - active = false - console.log("captured: " + captured) - } - } - - Rectangle { - id: resultScreen - - anchors.fill: parent - - visible: !barcodeScanner.active - - Column { - anchors.centerIn: parent - - spacing: 20 - - Text { - id: scanResultText - - anchors.horizontalCenter: parent.horizontalCenter - - text: barcodeScanner.captured - } - - Button { - id: scanButton - - anchors.horizontalCenter: parent.horizontalCenter - - text: qsTr("Scan again") - - onClicked: { - barcodeScanner.active = true - } - } - } - } -} diff --git a/examples/QmlBarcodeReader/qml/Qt6ScannerOverlay.qml b/examples/QmlBarcodeReader/qml/Qt6ScannerOverlay.qml deleted file mode 100644 index 28ca36d..0000000 --- a/examples/QmlBarcodeReader/qml/Qt6ScannerOverlay.qml +++ /dev/null @@ -1,211 +0,0 @@ -import QtQuick -import Qt5Compat.GraphicalEffects - - -/*! - Area for scanning barcodes - */ -Item { - id: root - - property rect captureRect - - Item { - id: captureZoneCorners - - x: parent.width * root.captureRect.x - y: parent.height * root.captureRect.y - - width: parent.width * root.captureRect.width - height: parent.height * root.captureRect.height - - Rectangle { - id: topLeftCornerH - - anchors { - top: parent.top - left: parent.left - } - - width: 20 - height: 5 - - color: Theme.borderColor - radius: height / 2 - } - - Rectangle { - id: topLeftCornerV - - anchors { - top: parent.top - left: parent.left - } - - width: 5 - height: 20 - - color: Theme.borderColor - radius: width / 2 - } - - // ---------------------- - Rectangle { - id: bottomLeftCornerH - - anchors { - bottom: parent.bottom - left: parent.left - } - - width: 20 - height: 5 - - color: Theme.borderColor - radius: height / 2 - } - - Rectangle { - id: bottomLeftCornerV - - anchors { - bottom: parent.bottom - left: parent.left - } - - width: 5 - height: 20 - - color: Theme.borderColor - radius: width / 2 - } - - // ---------------------- - Rectangle { - id: topRightCornerH - - anchors { - top: parent.top - right: parent.right - } - - width: 20 - height: 5 - - color: Theme.borderColor - radius: height / 2 - } - - Rectangle { - id: topRightCornerV - - anchors { - top: parent.top - right: parent.right - } - - width: 5 - height: 20 - - color: Theme.borderColor - radius: width / 2 - } - - // ---------------------- - Rectangle { - id: bottomRightCornerH - - anchors { - bottom: parent.bottom - right: parent.right - } - - width: 20 - height: 5 - - color: Theme.borderColor - radius: height / 2 - } - - Rectangle { - id: bottomRightCornerV - - anchors { - bottom: parent.bottom - right: parent.right - } - - width: 5 - height: 20 - - color: Theme.borderColor - radius: width / 2 - } - - Rectangle { - id: scanIndicator - - anchors { - horizontalCenter: parent.horizontalCenter - } - - width: parent.width - height: 1 - - color: Theme.borderColor - - SequentialAnimation { - id: scanIndicatorAnimation - - loops: Animation.Infinite - PropertyAnimation { - id: toTopAnimation - - target: scanIndicator - property: "y" - duration: 2000 - to: captureZoneCorners.height - } - - PropertyAnimation { - id: toBottomAnimation - - target: scanIndicator - property: "y" - duration: 2000 - to: 0 - } - } - } - - RectangularGlow { - id: effect - - anchors.centerIn: scanIndicator - - width: scanIndicator.width / 2 - height: scanIndicator.height - - glowRadius: 50 - spread: 0.2 - color: Theme.borderColor - cornerRadius: glowRadius - } - } - - Text { - id: scanCapsuleText - - anchors { - verticalCenter: captureZoneCorners.bottom - horizontalCenter: captureZoneCorners.horizontalCenter - } - - text: qsTr("Scan barcode") - color: Theme.borderColor - } - - onCaptureRectChanged: { - scanIndicatorAnimation.start() - } -} diff --git a/examples/QmlBarcodeReader/qml/Qt6ScannerPage.qml b/examples/QmlBarcodeReader/qml/Qt6ScannerPage.qml deleted file mode 100644 index 2280638..0000000 --- a/examples/QmlBarcodeReader/qml/Qt6ScannerPage.qml +++ /dev/null @@ -1,94 +0,0 @@ -import QtQuick -import QtQuick.Controls -import QtQuick.Layouts -import QtMultimedia - -import com.somcosoftware.scodes 1.0 - - -/*! - Barcode scanner main page. All QML elements managing from here. - */ -Item { - id: root - - property bool enableCamera: false - - SBarcodeScanner { - id: barcodeScanner - - forwardVideoSink: videoOutput.videoSink - scanning: !resultScreen.visible - - captureRect: Qt.rect(1 / 4, 1 / 4, 1 / 2, 1 / 2) - - onCapturedChanged: function (captured) { - scanResultText.text = captured - resultScreen.visible = true - } - } - - VideoOutput { - id: videoOutput - - anchors.fill: parent - - width: root.width - - focus: visible - fillMode: VideoOutput.PreserveAspectCrop - } - - Qt6ScannerOverlay { - id: scannerOverlay - - anchors.fill: parent - - captureRect: barcodeScanner.captureRect - } - - Rectangle { - id: resultScreen - anchors.centerIn: parent - - visible: !barcodeScanner.active - - x: scannerOverlay.captureRect.x - y: scannerOverlay.captureRect.y - width: scannerOverlay.captureRect.width - height: Math.max(scannerOverlay.captureRect.width, - popupLayout.implicitHeight + 64) - - ColumnLayout { - id: popupLayout - anchors { - fill: parent - margins: 32 - } - spacing: 20 - - Text { - Layout.fillWidth: true - Layout.fillHeight: true - wrapMode: Text.WordWrap - font { - family: Theme.fontFamily - pixelSize: 14 - } - - text: barcodeScanner.captured - } - - CButton { - Layout.fillWidth: true - text: qsTr("Scan again") - backgroundColor: Theme.teal - textColor: Theme.white - - onClicked: { - barcodeScanner.active = true - } - } - } - } -} diff --git a/examples/QmlBarcodeReader/qml/Theme.qml b/examples/QmlBarcodeReader/qml/Theme.qml deleted file mode 100644 index 3c9f7e4..0000000 --- a/examples/QmlBarcodeReader/qml/Theme.qml +++ /dev/null @@ -1,13 +0,0 @@ -pragma Singleton - -import QtQuick 2.12 - -/** - Contains common used colors - */ -QtObject { - id: root - - readonly property color borderColor: "#218165" - readonly property color textColor: "#000000" -} diff --git a/examples/QmlBarcodeReader/qrScanner/QrDecoder.cpp b/examples/QmlBarcodeReader/qrScanner/QrDecoder.cpp deleted file mode 100644 index 1c8fb39..0000000 --- a/examples/QmlBarcodeReader/qrScanner/QrDecoder.cpp +++ /dev/null @@ -1,200 +0,0 @@ -#include "QrDecoder.h" - -#include - -#include -#include -#include -#include -#include - -#include "ReadBarcode.h" - -#define STB_IMAGE_IMPLEMENTATION -#include "stb_image.h" - -namespace ZXing { -namespace Qt { -using ZXing::DecodeHints; -using ZXing::BarcodeFormat; -using ZXing::BarcodeFormats; -using ZXing::Binarizer; - -template -QDebug operator << (QDebug dbg, const T& v) -{ - return dbg.noquote() << QString::fromStdString(ToString(v)); -} - -class Result : private ZXing::Result -{ -public: - explicit Result(ZXing::Result&& r) : ZXing::Result(std::move(r)){ } - - using ZXing::Result::format; - using ZXing::Result::isValid; - using ZXing::Result::status; - - inline QString text() const { return QString::fromWCharArray(ZXing::Result::text().c_str()); } -}; - -Result ReadBarcode(const QImage& img, const DecodeHints& hints = { }) -{ - auto ImgFmtFromQImg = [](const QImage& img){ - switch (img.format()) { - case QImage::Format_ARGB32: - case QImage::Format_RGB32: - #if Q_BYTE_ORDER == Q_LITTLE_ENDIAN - return ImageFormat::BGRX; - - #else - return ImageFormat::XRGB; - - #endif - case QImage::Format_RGB888: return ImageFormat::RGB; - - case QImage::Format_RGBX8888: - case QImage::Format_RGBA8888: return ImageFormat::RGBX; - - case QImage::Format_Grayscale8: return ImageFormat::Lum; - - default: return ImageFormat::None; - } - }; - - auto exec = [&](const QImage& img){ - return Result(ZXing::ReadBarcode({ img.bits(), img.width(), img.height(), ImgFmtFromQImg(img) }, hints)); - }; - - return ImgFmtFromQImg(img) == ImageFormat::None ? exec(img.convertToFormat(QImage::Format_RGBX8888)) : exec(img); -} -} // namespace Qt -} // namespace ZXing - -using namespace ZXing::Qt; - -std::ostream& operator << (std::ostream& os, const std::vector& points) -{ - for (const auto& p : points) { - os << int(p.x() + .5f) << "x" << int(p.y() + .5f) << " "; - } - - return os; -} - -// ! This is linked to the private implementations of Qt. Check, when using a new versino of Qt that it still -// ! works. E.g. by saving the images to disk and visually inspect them -extern QImage qt_imageFromVideoFrame(const QVideoFrame &frame); - -QrDecoder::QrDecoder(QObject *parent) : QObject(parent) -{ } - -QString QrDecoder::captured() const -{ - return _captured; -} - -void QrDecoder::setCaptured(QString captured) -{ - if (_captured == captured) { - return; - } - - _captured = captured; - - emit capturedChanged(_captured); -} - -void QrDecoder::setIsDecoding(bool isDecoding) -{ - if (_isDecoding == isDecoding) { - return; - } - - _isDecoding = isDecoding; - - emit isDecodingChanged(_isDecoding); -} - -void QrDecoder::setVideoFrame(const QVideoFrame &videoFrame) -{ - _videoFrame = videoFrame; -} - -bool QrDecoder::isDecoding() const -{ - return _isDecoding; -} - -void QrDecoder::process(const QImage capturedImage) -{ - setIsDecoding(true); - - const auto hints = DecodeHints() - .setFormats(BarcodeFormat::QR_CODE | BarcodeFormat::DATA_MATRIX) - .setTryHarder(true) - .setBinarizer(Binarizer::FixedThreshold); - - const auto result = ReadBarcode(capturedImage, hints); - - if (result.isValid()) { - setCaptured(result.text()); - } - - setIsDecoding(false); -} - -QVideoFrame QrDecoder::videoFrame() const -{ - return _videoFrame; -} - -QImage QrDecoder::videoFrameToImage(const QVideoFrame &videoFrame) -{ - if (videoFrame.handleType() == QAbstractVideoBuffer::NoHandle) { - const QImage::Format imageFormat = QVideoFrame::imageFormatFromPixelFormat(videoFrame.pixelFormat()); - - QImage image(videoFrame.bits(), - videoFrame.width(), - videoFrame.height(), - videoFrame.bytesPerLine(), - imageFormat); - - // QImage image = qt_imageFromVideoFrame( videoFrame ); - if (image.isNull() ) { - return QImage(); - } - - if (image.format() != QImage::Format_ARGB32) { - image = image.convertToFormat(QImage::Format_ARGB32); - } - - return image; - } - - if (videoFrame.handleType() == QAbstractVideoBuffer::GLTextureHandle) { - QImage image(videoFrame.width(), videoFrame.height(), QImage::Format_ARGB32); - - GLuint textureId = static_cast( videoFrame.handle().toInt() ); - - QOpenGLContext *ctx = QOpenGLContext::currentContext(); - - QOpenGLFunctions *f = ctx->functions(); - - GLuint fbo; - - f->glGenFramebuffers(1, &fbo); - - GLint prevFbo; - - f->glGetIntegerv(GL_FRAMEBUFFER_BINDING, &prevFbo); - f->glBindFramebuffer(GL_FRAMEBUFFER, fbo); - f->glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, textureId, 0); - f->glReadPixels(0, 0, videoFrame.width(), videoFrame.height(), GL_RGBA, GL_UNSIGNED_BYTE, image.bits() ); - f->glBindFramebuffer(GL_FRAMEBUFFER, static_cast( prevFbo ) ); - - return image.rgbSwapped(); - } - - return QImage(); -} // QRDecoder::videoFrameToImage diff --git a/examples/QmlBarcodeReader/qrScanner/QrDecoder.h b/examples/QmlBarcodeReader/qrScanner/QrDecoder.h deleted file mode 100644 index 779b893..0000000 --- a/examples/QmlBarcodeReader/qrScanner/QrDecoder.h +++ /dev/null @@ -1,113 +0,0 @@ -#ifndef QR_DECODER_H -#define QR_DECODER_H - -#include -#include -#include - -/*! - * \brief Class used to convert video frame into image and scan QR code from it. - */ - -class QrDecoder : public QObject -{ - Q_OBJECT - Q_PROPERTY(QString captured READ captured WRITE setCaptured NOTIFY capturedChanged) - Q_PROPERTY(bool isDecoding READ isDecoding WRITE setIsDecoding NOTIFY isDecodingChanged) - -public: - - /*! - * \fn explicit QrDecoder(QObject *parent = nullptr) - * \brief Constructor. - * \param QObject *parent - a pointer to the parent object. - */ - explicit QrDecoder(QObject *parent = nullptr); - - /*! - * \fn QString captured() const - * \brief Returns the captured barcode string. - */ - QString captured() const; - - /*! - * \fn bool isDecoding() const - * \brief Returns the decoding state. - */ - bool isDecoding() const; - - /*! - * \fn QVideoFrame videoFrame() const - * \brief Returns the video frame of data. - */ - QVideoFrame videoFrame() const; - - /*! - * \fn void setCtx(QOpenGLContext *ctx) - * \brief Sets OpenGLContext. - * \params QOpenGLContext *ctx - a pointer to opengl context. - */ - void setCtx(QOpenGLContext *ctx); - - /*! - * \fn void setVideoFrame(const QVideoFrame &videoFrame) - * \brief Sets video frame of data. - * \params const QVideoFrame &videoFrame - video frame of data. - */ - void setVideoFrame(const QVideoFrame &videoFrame); - - /*! - * \fn static QImage videoFrameToImage(QVideoFrame &videoFrame) - * \brief Returns image from video frame. - * \param QVideoFrame &videoFrame - frame of video data. - */ - static QImage videoFrameToImage(const QVideoFrame &videoFrame); - -public slots: - - /*! - * \fn void process(const QImage capturedImage) - * \brief Processes the image to scan the given barcode format types. - * \param const QImage capturedImage - captured image. - */ - void process(const QImage capturedImage); - -signals: - - /*! - * \brief This signal is emitted to send captured barcode string to QML. - * \param const QString &captured - captured barcode string. - */ - void capturedChanged(const QString &captured); - - /*! - * \brief This signal is emitted to send decoding state to QML. - * \param bool isDecoding - decoding state. - */ - void isDecodingChanged(bool isDecoding); - -private: - QString _captured = ""; - - QOpenGLContext *_ctx; - - bool _isDecoding = false; - - QVideoFrame _videoFrame; - - /*! - * \fn void setCaptured(const QString &captured) - * \brief Sets captured barcode string. - * \param QString captured - captured barcode string. - */ - void setCaptured(QString captured); - - /*! - * \fn void setIsDecoding(bool isDecoding) - * \brief Sets decoding state. - * \param bool isDecoding - decoding state. - */ - void setIsDecoding(bool isDecoding); -}; - -#endif // QR_DECODER_H diff --git a/examples/QmlBarcodeReader/qrScanner/QrScannerFilter.cpp b/examples/QmlBarcodeReader/qrScanner/QrScannerFilter.cpp deleted file mode 100644 index a55b8ec..0000000 --- a/examples/QmlBarcodeReader/qrScanner/QrScannerFilter.cpp +++ /dev/null @@ -1,126 +0,0 @@ -#include "QrScannerFilter.h" -#include "QrDecoder.h" - -#include -#include -#include -#include -#include -#include -#include - -void processImage(QrDecoder *decoder, const QImage &image) -{ - decoder->process(image); -}; - -/// This is linked to the private implementations of Qt. Check, when using a new versino of Qt that it still -/// works. E.g. by saving the images to disk and visually inspect them -extern QImage qt_imageFromVideoFrame(const QVideoFrame &frame); -class QRRunnable : public QVideoFilterRunnable -{ -public: - - /*! - * \fn QrRunnable(QrScannerFilter *filter) - * \brief Constructor. - * \param QrScannerFilter *filter - a pointer to filter. - */ - QRRunnable(QrScannerFilter *filter) - { - _filter = filter; - } - - /*! - * \fn QVideoFrame run(QVideoFrame *input, const QVideoSurfaceFormat &surfaceFormat, QVideoFilterRunnable::RunFlags flags) override - * \brief Run method in order to asynchronously process the input video frame. - * \param QVideoFrame *input - a pointer to frame of video data. - * \param const QVideoSurfaceFormat &surfaceFormat - the stream format of a video presentation surface. - * \param QVideoFilterRunnable::RunFlags flags - typedef for QFlags. - */ - QVideoFrame run(QVideoFrame * input, - const QVideoSurfaceFormat &surfaceFormat, - QVideoFilterRunnable::RunFlags flags) override - { - Q_UNUSED(surfaceFormat); - Q_UNUSED(flags); - - if (_filter->getDecoder()->isDecoding()) { - return *input; - } - - if (_filter->getFutureThread().isRunning()) { - return *input; - } - - _filter->getDecoder()->setVideoFrame(*input); - - QImage captured = QrDecoder::videoFrameToImage(*input); - _filter->getFutureThread() = QtConcurrent::run(processImage, _filter->getDecoder(), captured); - - return *input; - } - -private: - QrScannerFilter *_filter; -}; - - -QrScannerFilter::QrScannerFilter() -{ - _decoder = new QrDecoder; - - QObject::connect(_decoder, &QrDecoder::capturedChanged, this, &QrScannerFilter::setCaptured); -} - -QVideoFilterRunnable *QrScannerFilter::createFilterRunnable() -{ - return new QRRunnable(this); -} - -QString QrScannerFilter::captured() const -{ - return _captured; -} - -void QrScannerFilter::setCaptured(const QString &newValue) -{ - if (newValue == _captured) { - return; - } - - _captured = newValue; - - emit capturedChanged(); -} - -QString QrScannerFilter::assayName() const -{ - return m_assayName; -} - -QrDecoder *QrScannerFilter::getDecoder() const -{ - return _decoder; -} - -bool QrScannerFilter::isDecoding() const -{ - return _isDecoding; -} - -void QrScannerFilter::setAssayName(QString assayName) -{ - if (m_assayName == assayName) { - return; - } - - m_assayName = assayName; - - emit assayNameChanged(m_assayName); -} - -QFuture QrScannerFilter::getFutureThread() const -{ - return _futureThread; -} diff --git a/examples/QmlBarcodeReader/qrScanner/QrScannerFilter.h b/examples/QmlBarcodeReader/qrScanner/QrScannerFilter.h deleted file mode 100644 index 94892d5..0000000 --- a/examples/QmlBarcodeReader/qrScanner/QrScannerFilter.h +++ /dev/null @@ -1,125 +0,0 @@ -#ifndef QRSCANNERFILTER_H -#define QRSCANNERFILTER_H - -#include -#include - -#include "QrDecoder.h" - -/*! - * \brief Filter used to capture QR code from camera - */ -class QrScannerFilter : public QAbstractVideoFilter -{ - Q_OBJECT - - Q_PROPERTY(QRectF captureRect MEMBER _captureRect NOTIFY captureRectChanged) - Q_PROPERTY(QString captured READ captured NOTIFY capturedChanged) - Q_PROPERTY(bool isDecoding READ isDecoding NOTIFY isDecodingChanged) - Q_PROPERTY(QString assayName READ assayName WRITE setAssayName NOTIFY assayNameChanged) - -public: - - /*! - * \fn QrScannerFilter() - * \brief Constructor. - */ - QrScannerFilter(); - - /*! - * \fn QString captured() const - * \brief Returns the captured barcode string. - */ - QString captured() const; - - /*! - * \fn QrDecoder *getDecoder() const - * \brief Returns the decoder. - */ - QrDecoder *getDecoder() const; - - /*! - * \fn QFuture getFutureThread() const - * \brief Returns the future thread. - */ - QFuture getFutureThread() const; - - /*! - * \fn bool isDecoding() const - * \brief Returns the decoding state. - */ - bool isDecoding() const; - - /*! - * \fn QVideoFilterRunnable *createFilterRunnable() override - * \brief Returns instance of the SBarcodeFilterRunnable subclass. - */ - QVideoFilterRunnable *createFilterRunnable() override; - - /*! - * \fn QString assayName() const - * \brief Returns the assay name. - */ - QString assayName() const; - -public slots: - - /*! - * \fn void setAssayName(QString assayName); - * \brief Sets the assay name. - * \param QString assayName - assay name. - */ - void setAssayName(QString assayName); - -signals: - - /*! - * \brief This signal is emitted when capture area rectangle changed. - */ - void captureRectChanged(); - - /*! - * \brief This signal is emitted when captured barcode string changed. - */ - void capturedChanged(); - - /*! - * \brief This signal is emitted to send decoding state to QML. - * \param bool isDecoding - decoding state. - */ - void isDecodingChanged(bool isDecoding); - - /*! - * \brief This signal is emitted to send assay name to QML. - * \param QString assayName - assay name. - */ - void assayNameChanged(QString assayName); - -private slots: - - /*! - * \fn void setCaptured(const QString &captured) - * \brief Sets captured barcode string. - * \param const QString &captured - captured barcode string. - */ - void setCaptured(const QString &captured); - -private: - QSharedPointer _mutexP; - - QRectF _captureRect; - - QString _captured; - - // QtEgoo::QtCapsuleQRData _capturedData; - - QrDecoder *_decoder; - - QFuture _futureThread; - - bool _isDecoding; - - QString m_assayName; -}; - -#endif // QRSCANNERFILTER_H diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 31db4b3..bf66f14 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -312,7 +312,7 @@ add_library(${PROJECT_NAME} STATIC ${HEADER_FILES} ${SRC_FILES}) target_sources(${PROJECT_NAME} PRIVATE private/debug.h) set_target_properties(${PROJECT_NAME} PROPERTIES QT_QML_MODULE_VERSION 1.0 - QT_QML_MODULE_URI com.scythestudio.scodes + QT_QML_MODULE_URI com.somcosoftware.scodes ) if(SCODES_DEBUG) diff --git a/src/SCodes.pri b/src/SCodes.pri index 6e7e14a..32061a3 100644 --- a/src/SCodes.pri +++ b/src/SCodes.pri @@ -2,7 +2,7 @@ QT += multimedia concurrent CONFIG += qmltypes -QML_IMPORT_NAME = com.scythestudio.scodes +QML_IMPORT_NAME = com.somcosoftware.scodes QML_IMPORT_MAJOR_VERSION = 1 INCLUDEPATH += \ From 7fe8045e280cce54d6a8b7db5288a44090b7b3cd Mon Sep 17 00:00:00 2001 From: Oleksandr Movchan Date: Thu, 12 Feb 2026 13:30:58 +0200 Subject: [PATCH 5/9] Fix problem with cached image displayed --- examples/QmlBarcodeApp/qml/GeneratorPage.qml | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/QmlBarcodeApp/qml/GeneratorPage.qml b/examples/QmlBarcodeApp/qml/GeneratorPage.qml index 401defe..f9af78f 100644 --- a/examples/QmlBarcodeApp/qml/GeneratorPage.qml +++ b/examples/QmlBarcodeApp/qml/GeneratorPage.qml @@ -194,6 +194,7 @@ Item { id: resultImage anchors.fill: parent fillMode: Image.PreserveAspectFit + cache: false } } From d2a0f26776e591dd4340638a5b15c703137582e5 Mon Sep 17 00:00:00 2001 From: Oleksandr Movchan Date: Thu, 19 Feb 2026 12:04:10 +0200 Subject: [PATCH 6/9] Fix review comments --- examples/QmlBarcodeApp/QmlBarcodeApp.pro | 7 ++++++- examples/QmlBarcodeApp/qml/GeneratorPage.qml | 11 ++--------- examples/QmlBarcodeApp/qml/Qt5ScannerPage.qml | 11 ++--------- examples/QmlBarcodeApp/qml/Qt6ScannerPage.qml | 8 ++------ examples/QmlBarcodeApp/qml/main.qml | 5 ----- 5 files changed, 12 insertions(+), 30 deletions(-) diff --git a/examples/QmlBarcodeApp/QmlBarcodeApp.pro b/examples/QmlBarcodeApp/QmlBarcodeApp.pro index c31ff66..f50c39d 100644 --- a/examples/QmlBarcodeApp/QmlBarcodeApp.pro +++ b/examples/QmlBarcodeApp/QmlBarcodeApp.pro @@ -5,8 +5,13 @@ CONFIG += c++17 DEFINES += QT_DEPRECATED_WARNINGS +HEADERS += \ + ColorController.h \ + VersionHelper.h + SOURCES += \ - main.cpp + main.cpp \ + ColorController.cpp equals(QT_MAJOR_VERSION, 6) { RESOURCES += Qt6qml.qrc diff --git a/examples/QmlBarcodeApp/qml/GeneratorPage.qml b/examples/QmlBarcodeApp/qml/GeneratorPage.qml index f9af78f..bc05c1e 100644 --- a/examples/QmlBarcodeApp/qml/GeneratorPage.qml +++ b/examples/QmlBarcodeApp/qml/GeneratorPage.qml @@ -9,14 +9,6 @@ Item { SBarcodeGenerator { id: barcodeGenerator - onForegroundColorChanged: { - barcodeGenerator.generate(textField.text) - } - - onBackgroundColorChanged: { - barcodeGenerator.generate(textField.text) - } - onGenerationFinished: function (error) { resultStack.currentIndex = 1 if (error === "") { @@ -227,7 +219,8 @@ Item { onClicked: { if (barcodeGenerator.saveImage()) { messagePopup.showMessage( - qsTr("File successfully saved")) + qsTr("File successfully saved: " + + barcodeGenerator.filePath)) } else { messagePopup.showMessage( qsTr("There was an error while saving file")) diff --git a/examples/QmlBarcodeApp/qml/Qt5ScannerPage.qml b/examples/QmlBarcodeApp/qml/Qt5ScannerPage.qml index 61359b6..54ef9c4 100644 --- a/examples/QmlBarcodeApp/qml/Qt5ScannerPage.qml +++ b/examples/QmlBarcodeApp/qml/Qt5ScannerPage.qml @@ -8,15 +8,6 @@ import com.somcosoftware.scodes 1.0 Item { id: root - property bool enableCamera: false - - onEnableCameraChanged: { - if (enableCamera) - camera.start() - else - camera.stop() - } - Camera { id: camera @@ -99,6 +90,8 @@ Item { family: Theme.fontFamily pixelSize: 14 } + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter text: barcodeScanner.captured } diff --git a/examples/QmlBarcodeApp/qml/Qt6ScannerPage.qml b/examples/QmlBarcodeApp/qml/Qt6ScannerPage.qml index 6aa1242..95c8590 100644 --- a/examples/QmlBarcodeApp/qml/Qt6ScannerPage.qml +++ b/examples/QmlBarcodeApp/qml/Qt6ScannerPage.qml @@ -7,12 +7,6 @@ import com.somcosoftware.scodes 1.0 Item { id: root - property bool enableCamera: false - - onEnableCameraChanged: { - barcodeScanner.camera.active = enableCamera - } - SBarcodeScanner { id: barcodeScanner @@ -74,6 +68,8 @@ Item { family: Theme.fontFamily pixelSize: 14 } + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter } CButton { diff --git a/examples/QmlBarcodeApp/qml/main.qml b/examples/QmlBarcodeApp/qml/main.qml index d3d13d6..b6a2cbf 100644 --- a/examples/QmlBarcodeApp/qml/main.qml +++ b/examples/QmlBarcodeApp/qml/main.qml @@ -82,11 +82,6 @@ ApplicationWindow { Loader { source: VersionHelper.isQt6 ? "Qt6ScannerPage.qml" : "Qt5ScannerPage.qml" - onLoaded: { - item.enableCamera = Qt.binding(function () { - return stackLayout.currentIndex == 0 - }) - } } Loader { From f139c59cdb661d029198df58cf41ed5dd9d9eb99 Mon Sep 17 00:00:00 2001 From: Oleksandr Movchan Date: Fri, 27 Feb 2026 11:43:44 +0200 Subject: [PATCH 7/9] Add some fixes to handle both Qt5 and Qt6 versions --- examples/QmlBarcodeApp/CMakeLists.txt | 2 + examples/QmlBarcodeApp/ColorController.h | 5 +- examples/QmlBarcodeApp/cmake/Locations.cmake | 2 +- examples/QmlBarcodeApp/main.cpp | 9 +- examples/QmlBarcodeApp/qml/CButton.qml | 6 +- examples/QmlBarcodeApp/qml/CComboBox.qml | 12 +- examples/QmlBarcodeApp/qml/GeneratorPage.qml | 168 +++++++++++++------ src/SBarcodeFormat.h | 1 + src/SBarcodeGenerator.cpp | 17 +- src/SBarcodeGenerator.h | 17 +- src/SBarcodeScanner.cpp | 11 +- 11 files changed, 161 insertions(+), 89 deletions(-) diff --git a/examples/QmlBarcodeApp/CMakeLists.txt b/examples/QmlBarcodeApp/CMakeLists.txt index f2e98d9..897c5f2 100644 --- a/examples/QmlBarcodeApp/CMakeLists.txt +++ b/examples/QmlBarcodeApp/CMakeLists.txt @@ -17,6 +17,8 @@ set(SOURCES ColorController.h ColorController.cpp VersionHelper.h + FormatHelper.h + FormatHelper.cpp main.cpp ) diff --git a/examples/QmlBarcodeApp/ColorController.h b/examples/QmlBarcodeApp/ColorController.h index d327bdb..3045f39 100644 --- a/examples/QmlBarcodeApp/ColorController.h +++ b/examples/QmlBarcodeApp/ColorController.h @@ -1,5 +1,4 @@ -#ifndef COLORCONTROLLER_H -#define COLORCONTROLLER_H +#pragma once #include #include @@ -14,5 +13,3 @@ class ColorController : public QObject public slots: bool checkColor(const QString &color); }; - -#endif // COLORCONTROLLER_H diff --git a/examples/QmlBarcodeApp/cmake/Locations.cmake b/examples/QmlBarcodeApp/cmake/Locations.cmake index 7fead81..a6d207b 100644 --- a/examples/QmlBarcodeApp/cmake/Locations.cmake +++ b/examples/QmlBarcodeApp/cmake/Locations.cmake @@ -18,7 +18,7 @@ find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core) find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core) # ---PACKAGES SECTION--- -list(APPEND REQUIRED_QT_PACKAGES Core Quick Gui Multimedia) +list(APPEND REQUIRED_QT_PACKAGES Core Quick Gui Widgets Multimedia) if(USE_QML) list(APPEND REQUIRED_QT_PACKAGES Quick) diff --git a/examples/QmlBarcodeApp/main.cpp b/examples/QmlBarcodeApp/main.cpp index f1e866a..10cb329 100644 --- a/examples/QmlBarcodeApp/main.cpp +++ b/examples/QmlBarcodeApp/main.cpp @@ -1,8 +1,9 @@ -#include +#include #include #include "ColorController.h" #include "VersionHelper.h" +#include "FormatHelper.h" #include "SBarcodeGenerator.h" #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) @@ -21,8 +22,9 @@ int main(int argc, char* argv[]) qputenv("QT_QUICK_CONTROLS_STYLE", QByteArray("Basic")); #endif - QGuiApplication app(argc, argv); + QApplication app(argc, argv); QQmlApplicationEngine engine; + engine.addImportPath(QCoreApplication::applicationDirPath()); #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) qmlRegisterType("com.somcosoftware.scodes", 1, 0, "SBarcodeScanner"); @@ -36,6 +38,9 @@ int main(int argc, char* argv[]) VersionHelper versionHelper; qmlRegisterSingletonInstance("com.somcosoftware.scodes", 1, 0, "VersionHelper", &versionHelper); + FormatHelper formatHelper; + qmlRegisterSingletonInstance("com.somcosoftware.scodes", 1, 0, "FormatHelper", &formatHelper); + qmlRegisterUncreatableMetaObject( SCodes::staticMetaObject, "com.somcosoftware.scodes", 1, 0, "SCodes", "Error, enum type"); diff --git a/examples/QmlBarcodeApp/qml/CButton.qml b/examples/QmlBarcodeApp/qml/CButton.qml index c1b5d66..ed847a6 100644 --- a/examples/QmlBarcodeApp/qml/CButton.qml +++ b/examples/QmlBarcodeApp/qml/CButton.qml @@ -10,11 +10,11 @@ Button { implicitHeight: 54 icon.source: "" + font.bold: true background: Rectangle { radius: 72 - color: Theme.getButtonBackground(root.backgroundColor, root.enabled, - root.down) + color: Theme.getButtonBackground(root.backgroundColor, root.enabled, root.down) } font { @@ -39,7 +39,7 @@ Button { font { pixelSize: 16 family: Theme.fontFamily - bold: true + bold: root.font.bold } } diff --git a/examples/QmlBarcodeApp/qml/CComboBox.qml b/examples/QmlBarcodeApp/qml/CComboBox.qml index 08deba6..a5a7e2e 100644 --- a/examples/QmlBarcodeApp/qml/CComboBox.qml +++ b/examples/QmlBarcodeApp/qml/CComboBox.qml @@ -64,7 +64,7 @@ ComboBox { id: listView clip: true implicitHeight: contentHeight - model: root.visible ? root.delegateModel : null + model: root.delegateModel currentIndex: root.highlightedIndex boundsBehavior: Flickable.StopAtBounds highlightMoveDuration: 0 @@ -85,9 +85,11 @@ ComboBox { delegate: Rectangle { id: comboBoxDelegate - required property var model - required property int index + property string text: { + var data = modelData || model + return data ? data[root.textRole] || "" : "" + } property bool isCurrentItem: ListView.view.currentIndex === index height: 36 @@ -114,8 +116,8 @@ ComboBox { Text { Layout.fillWidth: true - text: comboBoxDelegate.model[root.textRole] - font.pixelSize: 16 + text: comboBoxDelegate.text + font.pixelSize: 18 font.bold: comboBoxDelegate.isCurrentItem color: Theme.black } diff --git a/examples/QmlBarcodeApp/qml/GeneratorPage.qml b/examples/QmlBarcodeApp/qml/GeneratorPage.qml index bc05c1e..c172bae 100644 --- a/examples/QmlBarcodeApp/qml/GeneratorPage.qml +++ b/examples/QmlBarcodeApp/qml/GeneratorPage.qml @@ -1,11 +1,13 @@ import QtQuick 2.12 import QtQuick.Controls 2.12 -import QtMultimedia 5.12 import QtQuick.Layouts 1.12 +import Qt.labs.platform 1.0 import com.somcosoftware.scodes 1.0 Item { + id: root + SBarcodeGenerator { id: barcodeGenerator @@ -50,49 +52,10 @@ Item { CComboBox { id: formatDropDown Layout.fillWidth: true - textRole: "text" - model: ListModel { - ListElement { - text: "Aztec" - } - ListElement { - text: "Codabar" - } - ListElement { - text: "Code39" - } - ListElement { - text: "Code93" - } - ListElement { - text: "Code128" - } - ListElement { - text: "DataMatrix" - } - ListElement { - text: "EAN-8" - } - ListElement { - text: "EAN-13" - } - ListElement { - text: "ITF" - } - ListElement { - text: "PDF417" - } - ListElement { - text: "QRCode" - } - ListElement { - text: "UPC-A" - } - ListElement { - text: "UPC-E" - } - } + model: FormatHelper.supportedFormats + textRole: "text" + valueRole: "value" onCurrentTextChanged: function () { barcodeGenerator.setFormat(currentText) @@ -121,6 +84,92 @@ Item { } } + ColumnLayout { + Layout.fillWidth: true + spacing: 8 + Text { + Layout.fillWidth: true + text: qsTr("Change colors") + color: Theme.textColor + font { + pixelSize: 14 + family: Theme.fontFamily + bold: true + } + } + + RowLayout { + Layout.fillWidth: true + spacing: 16 + CButton { + id: selectForeground + Layout.fillWidth: true + text: qsTr("Foreground: " + barcodeGenerator.foregroundColor) + font.bold: false + backgroundColor: Theme.white + textColor: Theme.black + onClicked: foregroundColorDialog.open() + } + + CButton { + id: selectBackground + Layout.fillWidth: true + text: qsTr("Background: " + barcodeGenerator.backgroundColor) + font.bold: false + backgroundColor: Theme.white + textColor: Theme.black + onClicked: backgroundColorDialog.open() + } + } + } + + ColumnLayout { + Layout.fillWidth: true + visible: formatDropDown.currentValue == SCodes.QRCode + + spacing: 8 + Text { + Layout.fillWidth: true + text: qsTr("Select center image (optional)") + color: Theme.textColor + font { + pixelSize: 14 + family: Theme.fontFamily + bold: true + } + } + + RowLayout { + Layout.fillWidth: true + spacing: 16 + CTextField { + Layout.fillWidth: true + readOnly: true + placeholderText: qsTr("Center image path") + text: barcodeGenerator.imagePath + } + + CButton { + Layout.preferredWidth: 200 + text: qsTr("Select....") + visible: barcodeGenerator.imagePath === "" + font.bold: false + backgroundColor: Theme.white + textColor: Theme.black + onClicked: fileDialog.open() + } + CButton { + Layout.preferredWidth: 200 + visible: barcodeGenerator.imagePath !== "" + text: qsTr("Clear") + font.bold: false + backgroundColor: Theme.white + textColor: Theme.red + onClicked: barcodeGenerator.imagePath = "" + } + } + } + Item { Layout.fillWidth: true Layout.fillHeight: true @@ -218,12 +267,9 @@ Item { icon.source: "qrc:/icons/download.svg" onClicked: { if (barcodeGenerator.saveImage()) { - messagePopup.showMessage( - qsTr("File successfully saved: " - + barcodeGenerator.filePath)) + messagePopup.showMessage(qsTr("File successfully saved: " + barcodeGenerator.filePath)) } else { - messagePopup.showMessage( - qsTr("There was an error while saving file")) + messagePopup.showMessage(qsTr("There was an error while saving file")) } } } @@ -257,4 +303,30 @@ Item { anchors.centerIn: parent } } + + FileDialog { + id: fileDialog + fileMode: FileDialog.OpenFile + folder: StandardPaths.standardLocations(StandardPaths.PicturesLocation)[0] + onAccepted: barcodeGenerator.imagePath = file + onRejected: fileDialog.close() + } + + ColorDialog { + id: foregroundColorDialog + + // options: ColorDialog.DontUseNativeDialog + currentColor: barcodeGenerator.foregroundColor + + onAccepted: barcodeGenerator.foregroundColor = color + } + + ColorDialog { + id: backgroundColorDialog + + // options: ColorDialog.DontUseNativeDialog + currentColor: barcodeGenerator.backgroundColor + + onAccepted: barcodeGenerator.backgroundColor = color + } } diff --git a/src/SBarcodeFormat.h b/src/SBarcodeFormat.h index 0a01595..f66e964 100644 --- a/src/SBarcodeFormat.h +++ b/src/SBarcodeFormat.h @@ -40,6 +40,7 @@ enum class SBarcodeFormat : int { Basic = Code39 | Code93 | Code128 | QRCode | DataMatrix, }; +Q_ENUM_NS(SBarcodeFormat) Q_DECLARE_FLAGS(SBarcodeFormats, SBarcodeFormat) Q_DECLARE_OPERATORS_FOR_FLAGS(SBarcodeFormats) Q_FLAG_NS(SBarcodeFormats) diff --git a/src/SBarcodeGenerator.cpp b/src/SBarcodeGenerator.cpp index 525239c..953c858 100644 --- a/src/SBarcodeGenerator.cpp +++ b/src/SBarcodeGenerator.cpp @@ -14,7 +14,10 @@ SBarcodeGenerator::SBarcodeGenerator(QQuickItem *parent) : QQuickItem(parent) -{ } +{ + setWidth(500); + setHeight(500); +} bool SBarcodeGenerator::generate(const QString &inputString) { @@ -35,12 +38,12 @@ bool SBarcodeGenerator::generate(const QString &inputString) .setMargin(m_margin) .setEccLevel(m_eccLevel); - auto qrCodeMatrix = writer.encode(inputString.toStdString(), m_width, m_height); + auto qrCodeMatrix = writer.encode(inputString.toStdString(), width(), height()); - QImage image(m_width, m_height, QImage::Format_ARGB32); + QImage image(width(), height(), QImage::Format_ARGB32); - for (int y = 0; y < m_height; ++y) { - for (int x = 0; x < m_width; ++x) { + for (int y = 0; y < height(); ++y) { + for (int x = 0; x < width(); ++x) { if (qrCodeMatrix.get(x, y)) { image.setPixelColor(x, y, m_foregroundColor); } else { @@ -52,7 +55,7 @@ bool SBarcodeGenerator::generate(const QString &inputString) // Center images works only on QR codes. if (m_format == SCodes::SBarcodeFormat::QRCode) { if (!m_imagePath.isEmpty()) { - QSize centerImageSize(m_width / m_centerImageRatio, m_height / m_centerImageRatio); + QSize centerImageSize(width() / m_centerImageRatio, height() / m_centerImageRatio); drawCenterImage(&image, m_imagePath, centerImageSize, (image.width() - centerImageSize.width()) / 2, (image.height() - centerImageSize.height()) / 2); @@ -122,7 +125,7 @@ bool SBarcodeGenerator::saveImage() void SBarcodeGenerator::drawCenterImage(QImage *parentImage, const QString &imagePath, QSize imageSize, int x, int y) { QImage centerImage(imageSize, QImage::Format_RGB32); - centerImage.load(imagePath); + centerImage.load(QUrl(imagePath).toLocalFile()); if (centerImage.isNull()) { qWarning() << "Center image could not be loaded!"; diff --git a/src/SBarcodeGenerator.h b/src/SBarcodeGenerator.h index 226800d..92cc7c5 100644 --- a/src/SBarcodeGenerator.h +++ b/src/SBarcodeGenerator.h @@ -18,8 +18,7 @@ class SBarcodeGenerator : public QQuickItem { Q_OBJECT - Q_PROPERTY(int width MEMBER m_width NOTIFY widthChanged) - Q_PROPERTY(int height MEMBER m_height NOTIFY heightChanged) + Q_PROPERTY(int margin MEMBER m_margin NOTIFY marginChanged) Q_PROPERTY(int eccLevel MEMBER m_eccLevel NOTIFY eccLevelChanged) Q_PROPERTY(QString fileName MEMBER m_fileName NOTIFY fileNameChanged) @@ -143,18 +142,6 @@ public slots: */ void generationFinished(const QString &error = ""); - /*! - * \brief This signal is emitted to send width to QML. - * \param int width - width. - */ - void widthChanged(int width); - - /*! - * \brief This signal is emitted to send height to QML. - * \param int height - height. - */ - void heightChanged(int height); - /*! * \brief This signal is emitted to send margin to QML. * \param int margin - margin. @@ -202,8 +189,6 @@ public slots: void backgroundColorChanged(); private: - int m_width = 500; - int m_height = 500; int m_margin = 10; int m_eccLevel = -1; diff --git a/src/SBarcodeScanner.cpp b/src/SBarcodeScanner.cpp index 247b6e9..172509f 100644 --- a/src/SBarcodeScanner.cpp +++ b/src/SBarcodeScanner.cpp @@ -26,6 +26,11 @@ SBarcodeScanner::SBarcodeScanner(QObject* parent) SBarcodeScanner::~SBarcodeScanner() { + if(m_camera) + { + m_camera->stop(); + } + workerThread.quit(); workerThread.wait(); } @@ -161,11 +166,11 @@ bool SBarcodeScanner::cameraAvailable() const void SBarcodeScanner::setCamera(QCamera *newCamera) { - if(m_camera == newCamera){ + if (m_camera == newCamera){ return; } // disconnect old camera if not already null - if(m_camera) + if (m_camera) { m_camera->stop(); disconnect(m_camera,nullptr,this,nullptr); @@ -178,7 +183,7 @@ void SBarcodeScanner::setCamera(QCamera *newCamera) } // connect new camera if not null - if(newCamera) + if (newCamera) { auto format = newCamera->cameraFormat(); connect(newCamera,&QCamera::errorOccurred,this,[this](auto err,const auto& string){ From a50ebfe9bc32ffab666de311a2592093c9ea9dcf Mon Sep 17 00:00:00 2001 From: Oleksandr Movchan Date: Fri, 27 Feb 2026 12:03:08 +0200 Subject: [PATCH 8/9] Add missing FormatHelper --- examples/QmlBarcodeApp/FormatHelper.cpp | 39 +++++++++++++++++++++++++ examples/QmlBarcodeApp/FormatHelper.h | 18 ++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 examples/QmlBarcodeApp/FormatHelper.cpp create mode 100644 examples/QmlBarcodeApp/FormatHelper.h diff --git a/examples/QmlBarcodeApp/FormatHelper.cpp b/examples/QmlBarcodeApp/FormatHelper.cpp new file mode 100644 index 0000000..0b1e0bf --- /dev/null +++ b/examples/QmlBarcodeApp/FormatHelper.cpp @@ -0,0 +1,39 @@ +#include "FormatHelper.h" + +#include "SBarcodeFormat.h" + +using namespace SCodes; + +FormatHelper::FormatHelper(QObject *parent) + : QObject(parent) +{ +} + +QVariantList FormatHelper::supportedFormats() const +{ + static const std::vector formats = { + SBarcodeFormat::QRCode, + SBarcodeFormat::Aztec, + SBarcodeFormat::Codabar, + SBarcodeFormat::Code39, + SBarcodeFormat::Code93, + SBarcodeFormat::Code128, + SBarcodeFormat::DataMatrix, + SBarcodeFormat::EAN8, + SBarcodeFormat::EAN13, + SBarcodeFormat::ITF, + SBarcodeFormat::PDF417, + SBarcodeFormat::UPCA, + SBarcodeFormat::UPCE, + // add any new ones here in the future + }; + + QVariantList list; + for (auto fmt : formats) { + QVariantMap item; + item["text"] = SCodes::toString(fmt); + item["value"] = QVariant::fromValue(fmt); + list.append(item); + } + return list; +} diff --git a/examples/QmlBarcodeApp/FormatHelper.h b/examples/QmlBarcodeApp/FormatHelper.h new file mode 100644 index 0000000..edae4e3 --- /dev/null +++ b/examples/QmlBarcodeApp/FormatHelper.h @@ -0,0 +1,18 @@ +#pragma once + +#include +#include + +class FormatHelper : public QObject +{ + Q_OBJECT + QML_ELEMENT + QML_SINGLETON + + Q_PROPERTY(QVariantList supportedFormats READ supportedFormats CONSTANT FINAL) + +public: + explicit FormatHelper(QObject *parent = nullptr); + + QVariantList supportedFormats() const; +}; From 5836bfdd9e23a8632313edcffdd06fe97087d1de Mon Sep 17 00:00:00 2001 From: Oleksandr Movchan Date: Fri, 27 Feb 2026 12:24:37 +0200 Subject: [PATCH 9/9] Change backgroundColor and foregroundColor buttons background color --- examples/QmlBarcodeApp/ColorController.cpp | 11 +++++++++++ examples/QmlBarcodeApp/ColorController.h | 5 +++-- examples/QmlBarcodeApp/qml/GeneratorPage.qml | 8 ++++---- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/examples/QmlBarcodeApp/ColorController.cpp b/examples/QmlBarcodeApp/ColorController.cpp index 55b4463..5840637 100644 --- a/examples/QmlBarcodeApp/ColorController.cpp +++ b/examples/QmlBarcodeApp/ColorController.cpp @@ -9,6 +9,17 @@ bool ColorController::checkColor(const QString &color) return QColor(color).isValid(); } +QColor ColorController::constractColor(const QColor &color) +{ + // Counting the perceptive luminance - human eye favors green color... + double luminance = (0.299 * color.red() + 0.587 * color.green() + 0.114 * color.blue())/255; + + if (luminance > 0.5) + return QColorConstants::Black; // bright colors - black font + else + return QColorConstants::White; // dark colors - white font +} + QColor ColorController::convertStringToColor(const QString &color) { return QColor(color); diff --git a/examples/QmlBarcodeApp/ColorController.h b/examples/QmlBarcodeApp/ColorController.h index 3045f39..a3d48b3 100644 --- a/examples/QmlBarcodeApp/ColorController.h +++ b/examples/QmlBarcodeApp/ColorController.h @@ -10,6 +10,7 @@ class ColorController : public QObject explicit ColorController(QObject *parent = nullptr); Q_INVOKABLE static QColor convertStringToColor(const QString &color); -public slots: - bool checkColor(const QString &color); + Q_INVOKABLE bool checkColor(const QString &color); + + Q_INVOKABLE QColor constractColor(const QColor& color); }; diff --git a/examples/QmlBarcodeApp/qml/GeneratorPage.qml b/examples/QmlBarcodeApp/qml/GeneratorPage.qml index c172bae..c2f3432 100644 --- a/examples/QmlBarcodeApp/qml/GeneratorPage.qml +++ b/examples/QmlBarcodeApp/qml/GeneratorPage.qml @@ -106,8 +106,8 @@ Item { Layout.fillWidth: true text: qsTr("Foreground: " + barcodeGenerator.foregroundColor) font.bold: false - backgroundColor: Theme.white - textColor: Theme.black + backgroundColor: barcodeGenerator.foregroundColor + textColor: ColorController.constractColor(barcodeGenerator.foregroundColor) onClicked: foregroundColorDialog.open() } @@ -116,8 +116,8 @@ Item { Layout.fillWidth: true text: qsTr("Background: " + barcodeGenerator.backgroundColor) font.bold: false - backgroundColor: Theme.white - textColor: Theme.black + backgroundColor: barcodeGenerator.backgroundColor + textColor: ColorController.constractColor(barcodeGenerator.backgroundColor) onClicked: backgroundColorDialog.open() } }