diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml new file mode 100644 index 0000000..1233e7a --- /dev/null +++ b/.github/workflows/cmake.yml @@ -0,0 +1,174 @@ +name: CMake + +on: + push: + branches: [ "master" ] + pull_request: + branches: [ "master" ] + +env: + # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) + BUILD_TYPE: Release + +jobs: + build: + runs-on: ubuntu-${{ matrix.ubuntu_version }} + name: Ubuntu-${{ matrix.ubuntu_version }}-Qt-${{ matrix.qt_version }}-static-${{ matrix.static }} + strategy: + fail-fast: false + matrix: + ubuntu_version: [20.04, 22.04] + qt_version: [5.15.2, 6.4.0] + static: [ON, OFF] + + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Install Qt + uses: jurplel/install-qt-action@v3 + with: + version: ${{ matrix.qt_version }} + cache: 'true' + cache-key-prefix: ${{ runner.os }}-Qt-Cache-${{ matrix.qt_version }} + dir: ${{ github.workspace }}/Qt + + - name: Configure CMake for Qt5 + if: "startsWith(matrix.qt_version, '5.')" + run: cmake -DCMAKE_BUILD_TYPE="${{env.BUILD_TYPE}}" -DLIMEREPORT_STATIC=${{ matrix.static }} -DLIMEREPORT_DEMO=ON -B "${{github.workspace}}/build" + + + - name: Configure CMake for Qt6 + if: "startsWith(matrix.qt_version, '6.')" + run: cmake -DUSE_QT6=ON -DCMAKE_BUILD_TYPE="${{env.BUILD_TYPE}}" -DLIMEREPORT_STATIC=${{ matrix.static }} -DLIMEREPORT_DEMO=ON -B "${{github.workspace}}/build" + + - name: Build + run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} + + MSVC: + name: windows-${{ matrix.win_version }}-Qt-${{ matrix.qt_version }}-static-${{ matrix.static }} + runs-on: windows-${{ matrix.win_version }} + strategy: + fail-fast: false + matrix: + win_version: [2019, 2022] + qt_version: [5.15.2, 6.4.0] + static: [ON, OFF] + + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Install Qt + uses: jurplel/install-qt-action@v3 + with: + version: ${{ matrix.qt_version }} + cache: 'true' + cache-key-prefix: ${{ runner.os }}-Qt-Cache-${{ matrix.qt_version }} + dir: ${{ github.workspace }}/Qt + + - name: Configure CMake for Qt5 + if: "startsWith(matrix.qt_version, '5.')" + run: cmake -DCMAKE_BUILD_TYPE="${{env.BUILD_TYPE}}" -DLIMEREPORT_STATIC=${{ matrix.static }} -DLIMEREPORT_DEMO=ON -B "${{github.workspace}}/build" + + + - name: Configure CMake for Qt6 + if: "startsWith(matrix.qt_version, '6.')" + run: cmake -DUSE_QT6=ON -DCMAKE_BUILD_TYPE="${{env.BUILD_TYPE}}" -DLIMEREPORT_STATIC=${{ matrix.static }} -DLIMEREPORT_DEMO=ON -B "${{github.workspace}}/build" + + - name: Build + run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} + + MinGW-w64: + runs-on: windows-2022 + name: msys2-${{ matrix.msystem }}-Qt-${{ matrix.qt_version }}-static-${{ matrix.static }} + strategy: + fail-fast: false + matrix: + qt_version: [5, 6] + msystem: [UCRT64, CLANG64] + static: [ON, OFF] + defaults: + run: + shell: msys2 {0} + + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Install MinGW-w64 packages Qt5 + if: "startsWith(matrix.qt_version, '5')" + uses: msys2/setup-msys2@v2 + with: + msystem: ${{ matrix.msystem }} + release: false + update: true + pacboy: >- + cc:p + cmake:p + ninja:p + qt${{ matrix.qt_version }}-base:p + qt${{ matrix.qt_version }}-svg:p + qt${{ matrix.qt_version }}-tools:p + qt${{ matrix.qt_version }}-quickcontrols:p + + - name: Install MinGW-w64 packages Qt6 + if: "startsWith(matrix.qt_version, '6')" + uses: msys2/setup-msys2@v2 + with: + msystem: ${{ matrix.msystem }} + release: false + update: true + pacboy: >- + cc:p + cmake:p + ninja:p + qt${{ matrix.qt_version }}-base:p + qt${{ matrix.qt_version }}-svg:p + qt${{ matrix.qt_version }}-tools:p + qt${{ matrix.qt_version }}-declarative:p + + - name: Configure CMake for Qt5 + if: "startsWith(matrix.qt_version, '5')" + run: cmake -DCMAKE_BUILD_TYPE="${{env.BUILD_TYPE}}" -DLIMEREPORT_STATIC=${{ matrix.static }} -DLIMEREPORT_DEMO=ON -B "${{github.workspace}}/build" + + + - name: Configure CMake for Qt6 + if: "startsWith(matrix.qt_version, '6')" + run: cmake -DUSE_QT6=ON -DCMAKE_BUILD_TYPE="${{env.BUILD_TYPE}}" -DLIMEREPORT_STATIC=${{ matrix.static }} -DLIMEREPORT_DEMO=ON -B "${{github.workspace}}/build" + + - name: Build + run: cmake --build '${{github.workspace}}/build' --config ${{env.BUILD_TYPE}} + macos: + runs-on: macos-${{ matrix.macos_version }} + name: macos-${{ matrix.macos_version }}-Qt-${{ matrix.qt_version }}-static-${{ matrix.static }} + strategy: + fail-fast: false + matrix: + macos_version: [11, 12] + qt_version: [5.15.2, 6.4.0] + static: [ON, OFF] + + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Install Qt + uses: jurplel/install-qt-action@v3 + with: + version: ${{ matrix.qt_version }} + cache: 'true' + cache-key-prefix: ${{ runner.os }}-Qt-Cache-${{ matrix.qt_version }} + dir: ${{ github.workspace }}/Qt + + - name: Configure CMake for Qt5 + if: "startsWith(matrix.qt_version, '5.')" + run: cmake -DCMAKE_BUILD_TYPE="${{env.BUILD_TYPE}}" -DLIMEREPORT_STATIC=${{ matrix.static }} -DLIMEREPORT_DEMO=ON -B "${{github.workspace}}/build" + + + - name: Configure CMake for Qt6 + if: "startsWith(matrix.qt_version, '6.')" + run: cmake -DUSE_QT6=ON -DCMAKE_BUILD_TYPE="${{env.BUILD_TYPE}}" -DLIMEREPORT_STATIC=${{ matrix.static }} -DLIMEREPORT_DEMO=ON -B "${{github.workspace}}/build" + + - name: Build + run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} \ No newline at end of file diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..8e7bdb0 --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +limereport \ No newline at end of file diff --git a/.idea/LimeReport.iml b/.idea/LimeReport.iml new file mode 100644 index 0000000..f08604b --- /dev/null +++ b/.idea/LimeReport.iml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..79b3c94 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..12d65df --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..15885cc --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/3rdparty/zint-2.10.0-src.tar.gz b/3rdparty/zint-2.10.0-src.tar.gz new file mode 100644 index 0000000..a2eb21a Binary files /dev/null and b/3rdparty/zint-2.10.0-src.tar.gz differ diff --git a/CMakeLists.txt b/CMakeLists.txt index 00f0869..fbab265 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ -project(limereport) cmake_minimum_required(VERSION 3.14) +project(limereport) set(LIMEREPORT_VERSION_MAJOR 1) set(LIMEREPORT_VERSION_MINOR 6) @@ -7,6 +7,7 @@ set(LIMEREPORT_VERSION_RELEASE 8) option(ENABLE_ZINT "Enable libzint build for barcode support" OFF) option(LIMEREPORT_STATIC "Build LimeReport as static library" OFF) +option(LIMEREPORT_DEMO "Build LimeReport demos" OFF) option(USE_QT6 "Use Qt6" OFF) if(USE_QT6) @@ -37,8 +38,11 @@ if (Qt${QT_VERSION_MAJOR}Widgets_FOUND) endif() add_subdirectory(3rdparty) -add_subdirectory(designer EXCLUDE_FROM_ALL) -add_subdirectory(demo_r1 EXCLUDE_FROM_ALL) + +if (LIMEREPORT_DEMO) + add_subdirectory(designer) + add_subdirectory(demo_r1) +endif() set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOUIC ON) @@ -79,6 +83,8 @@ ${PROJECT_NAME}/items/editors/lritemsborderseditorwidget.cpp ${PROJECT_NAME}/items/editors/lrtextalignmenteditorwidget.cpp ${PROJECT_NAME}/items/lrabstractlayout.cpp ${PROJECT_NAME}/items/lralignpropitem.cpp +${PROJECT_NAME}/items/lrborderframeeditor.cpp +${PROJECT_NAME}/items/lrbordereditor.cpp ${PROJECT_NAME}/items/lrchartitem.cpp ${PROJECT_NAME}/items/lrchartaxiseditor.cpp ${PROJECT_NAME}/items/lrchartitemeditor.cpp @@ -86,6 +92,7 @@ ${PROJECT_NAME}/items/lrhorizontallayout.cpp ${PROJECT_NAME}/items/lrimageitem.cpp ${PROJECT_NAME}/items/lrimageitemeditor.cpp ${PROJECT_NAME}/items/lrlayoutmarker.cpp +${PROJECT_NAME}/items/lrpageeditor.cpp ${PROJECT_NAME}/items/lrshapeitem.cpp ${PROJECT_NAME}/items/lrsubitemparentpropitem.cpp ${PROJECT_NAME}/items/lrsvgitem.cpp @@ -191,6 +198,8 @@ ${PROJECT_NAME}/items/editors/lritemsborderseditorwidget.h ${PROJECT_NAME}/items/editors/lrtextalignmenteditorwidget.h ${PROJECT_NAME}/items/lrabstractlayout.h ${PROJECT_NAME}/items/lralignpropitem.h +${PROJECT_NAME}/items/lrborderframeeditor.h +${PROJECT_NAME}/items/lrbordereditor.h ${PROJECT_NAME}/items/lrchartitem.h ${PROJECT_NAME}/items/lrchartaxiseditor.h ${PROJECT_NAME}/items/lrchartitemeditor.h @@ -199,6 +208,7 @@ ${PROJECT_NAME}/items/lrhorizontallayout.h ${PROJECT_NAME}/items/lrimageitem.h ${PROJECT_NAME}/items/lrimageitemeditor.h ${PROJECT_NAME}/items/lrlayoutmarker.h +${PROJECT_NAME}/items/lrpageeditor.h ${PROJECT_NAME}/items/lrshapeitem.h ${PROJECT_NAME}/items/lrsubitemparentpropitem.h ${PROJECT_NAME}/items/lrsvgitem.h @@ -288,9 +298,12 @@ ${PROJECT_NAME}/databrowser/lrdatabrowser.ui ${PROJECT_NAME}/databrowser/lrsqleditdialog.ui ${PROJECT_NAME}/databrowser/lrvariabledialog.ui ${PROJECT_NAME}/dialogdesigner/templates/Dialog.ui +${PROJECT_NAME}/items/lrborderframeeditor.ui +${PROJECT_NAME}/items/lrbordereditor.ui ${PROJECT_NAME}/items/lrchartitemeditor.ui ${PROJECT_NAME}/items/lrchartaxiseditor.ui ${PROJECT_NAME}/items/lrimageitemeditor.ui +${PROJECT_NAME}/items/lrpageeditor.ui ${PROJECT_NAME}/items/lrtextitemeditor.ui ${PROJECT_NAME}/lraboutdialog.ui ${PROJECT_NAME}/lrpreviewreportwidget.ui @@ -348,12 +361,13 @@ set(GLOBAL_HEADERS set(PROJECT_NAME ${PROJECT_NAME}-qt${QT_VERSION_MAJOR}) if (LIMEREPORT_STATIC) - message(STATUS "STATIC LIBRARY") - add_library(${PROJECT_NAME} STATIC ${EXTRA_FILES} ${LIMEREPORT_SOURCES}) + message(STATUS "STATIC LIBRARY") + add_library(${PROJECT_NAME} STATIC ${EXTRA_FILES} ${LIMEREPORT_SOURCES}) target_compile_definitions( ${PROJECT_NAME} PUBLIC -DHAVE_STATIC_BUILD) else() add_library(${PROJECT_NAME} SHARED ${EXTRA_FILES} ${LIMEREPORT_SOURCES}) - target_compile_definitions( ${PROJECT_NAME} PUBLIC -DLIMEREPORT_EXPORTS) + target_compile_definitions( ${PROJECT_NAME} PRIVATE -DLIMEREPORT_EXPORTS) + target_compile_definitions( ${PROJECT_NAME} INTERFACE -DLIMEREPORT_IMPORTS) endif() target_compile_definitions(${PROJECT_NAME} PUBLIC -DCMAKE_CONFIG) @@ -392,16 +406,16 @@ target_include_directories( ${PROJECT_NAME} PRIVATE limereport/serializators limereport/scripteditor ) +target_include_directories( ${PROJECT_NAME} INTERFACE + ${CMAKE_CURRENT_SOURCE_DIR}/include) + +list (APPEND GLOBAL_HEADERS ${EXTRA_FILES}) +set_target_properties(${PROJECT_NAME} PROPERTIES PUBLIC_HEADER "${GLOBAL_HEADERS}") + install(TARGETS ${PROJECT_NAME} ARCHIVE DESTINATION lib LIBRARY DESTINATION lib - RUNTIME DESTINATION bin) + RUNTIME DESTINATION bin + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/limereport) -install(FILES - ${EXTRA_FILES} - DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}") - -install(FILES - ${GLOBAL_HEADERS} - DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}") diff --git a/README.md b/README.md index f03702b..0bafa82 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ -# LimeReport v1.5.87 [![Build Status](https://app.travis-ci.com/fralx/LimeReport.svg?branch=master)](https://app.travis-ci.com/fralx/LimeReport) [![Build status](https://ci.appveyor.com/api/projects/status/wna5429pix7ilcmo/branch/master?svg=true)](https://ci.appveyor.com/project/fralx/limereport/branch/master) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/bc31412ea4814f30825b5ed3723e9a70)](https://app.codacy.com/app/fralx/LimeReport?utm_source=github.com&utm_medium=referral&utm_content=fralx/LimeReport&utm_campaign=Badge_Grade_Dashboard) +# LimeReport v1.5.87 [![Build status](https://ci.appveyor.com/api/projects/status/wna5429pix7ilcmo/branch/master?svg=true)](https://ci.appveyor.com/project/fralx/limereport/branch/master) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/bc31412ea4814f30825b5ed3723e9a70)](https://app.codacy.com/app/fralx/LimeReport?utm_source=github.com&utm_medium=referral&utm_content=fralx/LimeReport&utm_campaign=Badge_Grade_Dashboard) ![Cmake Build Status](https://github.com/fralx/limereport/actions/workflows/cmake.yml/badge.svg) ## Official LimeReport web site [http://limereport.ru](http://limereport.ru) @@ -23,8 +23,37 @@ ### How to use it -1. Build limereport.pro. It will create a limereport shared library -2. In your project connect the limereport library then in source code add: +#### QMake + +- Build limereport.pro. It will create a limereport shared library +- In your project connect the limereport library + +#### CMake + +To use in your application without installation + +There are 2 possible ways: + +- Use cmake subdirectory in your CMakeLists.txt: + +```cmake +add_subdirectory(LimeReport) +target_link_libraries(myapp PRIVATE limereport-qt${QT_VERSION_MAJOR}) +``` +- Use cmake FetchContent in your CMakeLists.txt: + +```cmake +include(FetchContent) +FetchContent_Declare( + LimeReport + GIT_REPOSITORY https://github.com/fralx/LimeReport.git + GIT_TAG sha-of-the-commit +) +FetchContent_MakeAvailable(LimeReport) +target_link_libraries(myapp PRIVATE limereport-qt${QT_VERSION_MAJOR}) +``` + +- Then in source code add: ```cpp #include "lrreportengine.h" to add report engine diff --git a/demo_r1/.idea/.gitignore b/demo_r1/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/demo_r1/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/demo_r1/.idea/demo_r1.iml b/demo_r1/.idea/demo_r1.iml new file mode 100644 index 0000000..f08604b --- /dev/null +++ b/demo_r1/.idea/demo_r1.iml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/demo_r1/.idea/misc.xml b/demo_r1/.idea/misc.xml new file mode 100644 index 0000000..79b3c94 --- /dev/null +++ b/demo_r1/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/demo_r1/.idea/modules.xml b/demo_r1/.idea/modules.xml new file mode 100644 index 0000000..7423bf7 --- /dev/null +++ b/demo_r1/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/demo_r1/.idea/vcs.xml b/demo_r1/.idea/vcs.xml new file mode 100644 index 0000000..6c0b863 --- /dev/null +++ b/demo_r1/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/demo_r1/CMakeLists.txt b/demo_r1/CMakeLists.txt index da749ac..4f68d4a 100644 --- a/demo_r1/CMakeLists.txt +++ b/demo_r1/CMakeLists.txt @@ -1,3 +1,5 @@ +project(demo_r1) + set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTORCC ON) @@ -9,15 +11,14 @@ set(PROJECT_SOURCES mainwindow.ui ) -add_executable(demo_r1 main.cpp ${PROJECT_SOURCES}) +add_executable(${PROJECT_NAME} main.cpp ${PROJECT_SOURCES}) -target_include_directories( demo_r1 PRIVATE ../include/ ) -target_link_libraries(demo_r1 PRIVATE +target_link_libraries(${PROJECT_NAME} PRIVATE Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::PrintSupport Qt${QT_VERSION_MAJOR}::Qml Qt${QT_VERSION_MAJOR}::Sql - ${PROJECT_NAME}-qt${QT_VERSION_MAJOR} + limereport-qt${QT_VERSION_MAJOR} ) diff --git a/demo_r1/demo_reports/1.4/test.zip b/demo_r1/demo_reports/1.4/test.zip new file mode 100644 index 0000000..ffc9c6b Binary files /dev/null and b/demo_r1/demo_reports/1.4/test.zip differ diff --git a/demo_r1/demo_reports/BL détaillé.lrxml b/demo_r1/demo_reports/BL détaillé.lrxml new file mode 100644 index 0000000..e677ec8 --- /dev/null +++ b/demo_r1/demo_reports/BL détaillé.lrxml @@ -0,0 +1,3020 @@ + + + + + + + page1 + + + + + + + + + ReportPage1 + + + + PageHeader2 + + + + HorizontalLayout2 + + + + ImageItem1 + + + + + HorizontalLayout2 + + + + + + + + + + company + logo + + + + +
+ + + + + + + VerticalLayout1 + + + + TextItem1 + + + + + VerticalLayout1 + + + + + + + + <b>$D{company.type} $D{company.nom}</b><br>$D{company.act} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem11 + + + + + VerticalLayout1 + + + + + + + + <table><tr><td><b>Adresse :</b> $D{company.adress}<br> +<b>Télephone :</b> $D{company.tel} <br> <b>Fax :</b> $D{company.fax}<br> +<b>E-mail :</b> $D{company.email} +<br><b> Site web :</b> $D{company.web}</td><td><b>RIB :</b>$D{company.mobile}<br><b>CIB :</b>$D{company.facebook}</td><td > +<b>RC :</b> $D{company.rc}<br> <b>AI :</b> $D{company.art_imp} <br> <b>NIF :</b> $D{company.mf} <br> <b>NIS :</b> $D{company.nis}</td></tr></table> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HorizontalLayout2 + + + + + + + + + + + + + + PageHeader2 + + + + + + + + + + + + + TextItem28 + + + + + PageHeader2 + + + + + + + + Le : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem2 + + + + + PageHeader2 + + + + + + + + Bon de livraison N° $S{fonction.STXT($D{doc.doc},2,500)} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem34 + + + + + PageHeader2 + + + + + + + + <table><tr><td><b>Client :</b></td><td> $D{doc.cl}</td></tr> +<tr><td><b>Adresse :</b></td><td> $D{doc.adr_fac}</td></tr> +<tr><td><b>Téléphone : </b></td><td>$D{doc.tel}</td></tr> +<tr><td><b>Fax : </b></td><td>$D{doc.fax}</td></tr> +<tr><td><b>Email : </b></td><td>$D{doc.email}</td></tr> +<tr><td><b>N° RC :</b></td><td> $D{doc.rc} </td></tr> +<tr><td><b>N° AI :</b></td><td> $D{doc.ai} </td></tr> +<tr><td><b>N° NIS :</b> </td><td>$D{doc.nis}</td></tr> +<tr><td><b>N° NIF :</b> </td><td>$D{doc.mf}</td></tr></table> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem29 + + + + + PageHeader2 + + + + + + + + $D{doc.date} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ReportPage1 + + + + + + + + + + + + + + + + + + + + det + + + + HorizontalLayout1 + + + + TextItem14 + + + + + HorizontalLayout1 + + + + + + + + $D{stock.ref} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem15 + + + + + HorizontalLayout1 + + + + + + + + $D{stock.des} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem17 + + + + + HorizontalLayout1 + + + + + + + + $S{numberFormat($D{stock.qte},"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem19 + + + + + HorizontalLayout1 + + + + + + + + $S{numberFormat($D{stock.pu},"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem16 + + + + + HorizontalLayout1 + + + + + + + + $D{stock.tva} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem20 + + + + + HorizontalLayout1 + + + + + + + + $S{numberFormat($D{stock.pt},"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + det + + + + + + + + + + + + + + + ReportPage1 + + + + + + + + + + + + + + + + stock + + + + + + + + + + + + + PageFooter1 + + + + VerticalLayout38 + + + + HorizontalLayout4 + + + + TextItem4 + + + + + HorizontalLayout4 + + + + + + + + Total HT : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem3 + + + + + HorizontalLayout4 + + + + + + + + $S{numberFormat(SUM($D{stock.pt},"det"),"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout38 + + + + + + + + + + + + + HorizontalLayout5 + + + + TextItem5 + + + + + HorizontalLayout5 + + + + + + + + Remise : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem6 + + + + + HorizontalLayout5 + + + + + + + + $S{numberFormat($D{doc.remise},"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout38 + + + + + + + + + + + + + HorizontalLayout6 + + + + TextItem7 + + + + + HorizontalLayout6 + + + + + + + + Total TVA : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem8 + + + + + HorizontalLayout6 + + + + + + + + $S{numberFormat(SUM($D{stock.tot_tva},"det"),"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout38 + + + + + + + + + + + + + pied_taxes + + + + TextItem33 + + + + + pied_taxes + + + + + + + + $D{taxes.taxe} : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem38 + + + + + pied_taxes + + + + + + + + $S{ +if($D{taxes.taxe} == '') +ReportPage1_pied_taxes.isVisible = 0; +numberFormat($D{taxes.valeur},"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout38 + + + + + + + + + + + + + HorizontalLayout7 + + + + TextItem27 + + + + + HorizontalLayout7 + + + + + + + + Net à payer : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem13 + + + + + HorizontalLayout7 + + + + + + + + $S{numberFormat($D{doc.ttc},"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout38 + + + + + + + + + + + + + + + PageFooter1 + + + + + + + + + + + + TextItem30 + + + + + PageFooter1 + + + + + + + + $D{doc.obs}<br> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + details_taxes + + + + HorizontalLayout41 + + + + TextItem41 + + + + + HorizontalLayout41 + + + + + + + + Taxe +$S{if($D{taxes.taxe} == '') +ReportPage1_details_taxes.isVisible = 0;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem43 + + + + + HorizontalLayout41 + + + + + + + + Unité + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem44 + + + + + HorizontalLayout41 + + + + + + + + Contenance + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem45 + + + + + HorizontalLayout41 + + + + + + + + Montant + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + details_taxes + + + + + + + + + + + + + ligne_taxes + + + + TextItem46 + + + + + ligne_taxes + + + + + + + + $D{taxes.taxe} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem47 + + + + + ligne_taxes + + + + + + + + $D{taxes.unite} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem48 + + + + + ligne_taxes + + + + + + + + $D{taxes.contenance} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem49 + + + + + ligne_taxes + + + + + + + + $S{fonction.Nombre($D{taxes.Valeur})} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + details_taxes + + + + + + + + + + + + + + + PageFooter1 + + + + + + + + + + + + VerticalLayout23 + + + + reglements + + + + HorizontalLayout18 + + + + TextItem9 + + + + + HorizontalLayout18 + + + + + + + + Date +$S{ReportPage1_reglements.isVisible = $V{afficher_reglements}; +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem12 + + + + + HorizontalLayout18 + + + + + + + + N° chèque + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem18 + + + + + HorizontalLayout18 + + + + + + + + Montant + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + reglements + + + + + + + + + + + + + ligne_paiement + + + + TextItem21 + + + + + ligne_paiement + + + + + + + + $D{paiements.date} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem26 + + + + + ligne_paiement + + + + + + + + $D{paiements.N° chèque} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem32 + + + + + ligne_paiement + + + + + + + + $S{fonction.Nombre($D{paiements.Montant})} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + reglements + + + + + + + + + + + + + + + VerticalLayout23 + + + + + + + + + + + + HorizontalLayout23 + + + + TextItem23 + + + + + HorizontalLayout23 + + + + + + + + Reste à payer: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem10 + + + + + HorizontalLayout23 + + + + + + + + $S{fonction.Nombre($D{doc.comp})} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout23 + + + + + + + + + + + + + + + PageFooter1 + + + + + + + + + + + + + + ReportPage1 + + + + + + + + + + + + + + + + + + HorizontalLayout3 + + + + TextItem14 + + + + + HorizontalLayout3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem15 + + + + + HorizontalLayout3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem17 + + + + + HorizontalLayout3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem19 + + + + + HorizontalLayout3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem16 + + + + + HorizontalLayout3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem20 + + + + + HorizontalLayout3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ReportPage1 + + + + + + + + + + + + + DataHeaderBand1 + + + + HorizontalLayout40 + + + + TextItem24 + + + + + HorizontalLayout40 + + + + + + + + Code + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem40 + + + + + HorizontalLayout40 + + + + + + + + Désignations + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem22 + + + + + HorizontalLayout40 + + + + + + + + Qte + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem39 + + + + + HorizontalLayout40 + + + + + + + + P.U HT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem37 + + + + + HorizontalLayout40 + + + + + + + + TVA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem31 + + + + + HorizontalLayout40 + + + + + + + + Montant HT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataHeaderBand1 + + + + + + + + + + + + + + + ReportPage1 + + + + + + + + + det + + + + + + + + + + + + + + PageFooter2 + + + + TextItem25 + + + + + PageFooter2 + + + + + + + + $S{ReportPage1_} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ReportPage1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + datasources + + + + f + QMYSQL + $V{dossier} + $V{utilisateur} + + $V{serveur} + + + $V{port} + + + + + + company + select * from comp limit 1 + f + + + + stock + select stock_out.*,pt*stock_out.tva/100 as tot_tva, prod_ajout.* from stock_out left join prod_ajout on prod_ajout.ref = stock_out.ref where stock_out.doc = $V{doc} + f + + + + paiements + select date Date, descr Libellé, num_cheque 'N° chèque', debit Montant from oper_caisse where ref = $V{doc} and rowid not in (select id from reg_associer) union all select reg_associer.date,'Tranche de paiement associée',oper_caisse.num_cheque,mnt from reg_associer inner join oper_caisse on reg_associer.id = oper_caisse.rowid where reg_associer.ref = $V{doc} + f + + + + taxes + SELECT taxe_article.taxe,stock_out.mnt_taxe,stock_out.contenance,taxes.unite,sum(stock_out.qte * stock_out.qte_emb * stock_out.mnt_taxe * stock_out.contenance) Valeur FROM stock_out INNER JOIN taxe_article ON stock_out.ref = taxe_article.ref INNER JOIN taxes ON taxes.libelle = taxe_article.taxe WHERE doc = $V{doc} GROUP BY taxes.libelle + f + + + + doc + select bl.*, client.* from bl left join client on bl.cl = client.client where doc = $V{doc} + f + + + + + + + + + + + ReportPage1_PageFooter1.beforeRender.connect(BR1) +function BR1() +{ + var tableBuilder = DatasourceFunctions.createTableBuilder(ReportPage1_ligne_paiement); + tableBuilder.buildTable("paiements"); + +var tableTaxes = DatasourceFunctions.createTableBuilder(ReportPage1_ligne_taxes); + tableTaxes.buildTable("taxes"); +var tableTaxes = DatasourceFunctions.createTableBuilder(ReportPage1_details_taxes); + tableTaxes.buildTable("taxes"); +} + + +ReportPage1_DataHeaderBand1.afterRender.connect(AR1) +function AR1(){ + ReportPage1_HorizontalLayout3.geometry.y = ReportPage1_DataHeaderBand1.geometry.y; + ReportPage1_HorizontalLayout3.geometry.height=LimeReport.getPageFreeSpace(ReportPage1); + ReportPage1_HorizontalLayout3.geometry.height -= (ReportPage1_PageFooter2.geometry.height + ReportPage1_PageFooter1.geometry.height + 30) +} + + + + + + + + +
+
diff --git a/demo_r1/demo_reports/BL détaillé_upd.lrxml b/demo_r1/demo_reports/BL détaillé_upd.lrxml new file mode 100644 index 0000000..e677ec8 --- /dev/null +++ b/demo_r1/demo_reports/BL détaillé_upd.lrxml @@ -0,0 +1,3020 @@ + + + + + + + page1 + + + + + + + + + ReportPage1 + + + + PageHeader2 + + + + HorizontalLayout2 + + + + ImageItem1 + + + + + HorizontalLayout2 + + + + + + + + + + company + logo + + + + +
+ + + + + + + VerticalLayout1 + + + + TextItem1 + + + + + VerticalLayout1 + + + + + + + + <b>$D{company.type} $D{company.nom}</b><br>$D{company.act} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem11 + + + + + VerticalLayout1 + + + + + + + + <table><tr><td><b>Adresse :</b> $D{company.adress}<br> +<b>Télephone :</b> $D{company.tel} <br> <b>Fax :</b> $D{company.fax}<br> +<b>E-mail :</b> $D{company.email} +<br><b> Site web :</b> $D{company.web}</td><td><b>RIB :</b>$D{company.mobile}<br><b>CIB :</b>$D{company.facebook}</td><td > +<b>RC :</b> $D{company.rc}<br> <b>AI :</b> $D{company.art_imp} <br> <b>NIF :</b> $D{company.mf} <br> <b>NIS :</b> $D{company.nis}</td></tr></table> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HorizontalLayout2 + + + + + + + + + + + + + + PageHeader2 + + + + + + + + + + + + + TextItem28 + + + + + PageHeader2 + + + + + + + + Le : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem2 + + + + + PageHeader2 + + + + + + + + Bon de livraison N° $S{fonction.STXT($D{doc.doc},2,500)} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem34 + + + + + PageHeader2 + + + + + + + + <table><tr><td><b>Client :</b></td><td> $D{doc.cl}</td></tr> +<tr><td><b>Adresse :</b></td><td> $D{doc.adr_fac}</td></tr> +<tr><td><b>Téléphone : </b></td><td>$D{doc.tel}</td></tr> +<tr><td><b>Fax : </b></td><td>$D{doc.fax}</td></tr> +<tr><td><b>Email : </b></td><td>$D{doc.email}</td></tr> +<tr><td><b>N° RC :</b></td><td> $D{doc.rc} </td></tr> +<tr><td><b>N° AI :</b></td><td> $D{doc.ai} </td></tr> +<tr><td><b>N° NIS :</b> </td><td>$D{doc.nis}</td></tr> +<tr><td><b>N° NIF :</b> </td><td>$D{doc.mf}</td></tr></table> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem29 + + + + + PageHeader2 + + + + + + + + $D{doc.date} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ReportPage1 + + + + + + + + + + + + + + + + + + + + det + + + + HorizontalLayout1 + + + + TextItem14 + + + + + HorizontalLayout1 + + + + + + + + $D{stock.ref} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem15 + + + + + HorizontalLayout1 + + + + + + + + $D{stock.des} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem17 + + + + + HorizontalLayout1 + + + + + + + + $S{numberFormat($D{stock.qte},"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem19 + + + + + HorizontalLayout1 + + + + + + + + $S{numberFormat($D{stock.pu},"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem16 + + + + + HorizontalLayout1 + + + + + + + + $D{stock.tva} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem20 + + + + + HorizontalLayout1 + + + + + + + + $S{numberFormat($D{stock.pt},"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + det + + + + + + + + + + + + + + + ReportPage1 + + + + + + + + + + + + + + + + stock + + + + + + + + + + + + + PageFooter1 + + + + VerticalLayout38 + + + + HorizontalLayout4 + + + + TextItem4 + + + + + HorizontalLayout4 + + + + + + + + Total HT : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem3 + + + + + HorizontalLayout4 + + + + + + + + $S{numberFormat(SUM($D{stock.pt},"det"),"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout38 + + + + + + + + + + + + + HorizontalLayout5 + + + + TextItem5 + + + + + HorizontalLayout5 + + + + + + + + Remise : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem6 + + + + + HorizontalLayout5 + + + + + + + + $S{numberFormat($D{doc.remise},"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout38 + + + + + + + + + + + + + HorizontalLayout6 + + + + TextItem7 + + + + + HorizontalLayout6 + + + + + + + + Total TVA : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem8 + + + + + HorizontalLayout6 + + + + + + + + $S{numberFormat(SUM($D{stock.tot_tva},"det"),"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout38 + + + + + + + + + + + + + pied_taxes + + + + TextItem33 + + + + + pied_taxes + + + + + + + + $D{taxes.taxe} : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem38 + + + + + pied_taxes + + + + + + + + $S{ +if($D{taxes.taxe} == '') +ReportPage1_pied_taxes.isVisible = 0; +numberFormat($D{taxes.valeur},"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout38 + + + + + + + + + + + + + HorizontalLayout7 + + + + TextItem27 + + + + + HorizontalLayout7 + + + + + + + + Net à payer : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem13 + + + + + HorizontalLayout7 + + + + + + + + $S{numberFormat($D{doc.ttc},"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout38 + + + + + + + + + + + + + + + PageFooter1 + + + + + + + + + + + + TextItem30 + + + + + PageFooter1 + + + + + + + + $D{doc.obs}<br> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + details_taxes + + + + HorizontalLayout41 + + + + TextItem41 + + + + + HorizontalLayout41 + + + + + + + + Taxe +$S{if($D{taxes.taxe} == '') +ReportPage1_details_taxes.isVisible = 0;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem43 + + + + + HorizontalLayout41 + + + + + + + + Unité + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem44 + + + + + HorizontalLayout41 + + + + + + + + Contenance + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem45 + + + + + HorizontalLayout41 + + + + + + + + Montant + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + details_taxes + + + + + + + + + + + + + ligne_taxes + + + + TextItem46 + + + + + ligne_taxes + + + + + + + + $D{taxes.taxe} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem47 + + + + + ligne_taxes + + + + + + + + $D{taxes.unite} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem48 + + + + + ligne_taxes + + + + + + + + $D{taxes.contenance} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem49 + + + + + ligne_taxes + + + + + + + + $S{fonction.Nombre($D{taxes.Valeur})} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + details_taxes + + + + + + + + + + + + + + + PageFooter1 + + + + + + + + + + + + VerticalLayout23 + + + + reglements + + + + HorizontalLayout18 + + + + TextItem9 + + + + + HorizontalLayout18 + + + + + + + + Date +$S{ReportPage1_reglements.isVisible = $V{afficher_reglements}; +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem12 + + + + + HorizontalLayout18 + + + + + + + + N° chèque + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem18 + + + + + HorizontalLayout18 + + + + + + + + Montant + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + reglements + + + + + + + + + + + + + ligne_paiement + + + + TextItem21 + + + + + ligne_paiement + + + + + + + + $D{paiements.date} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem26 + + + + + ligne_paiement + + + + + + + + $D{paiements.N° chèque} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem32 + + + + + ligne_paiement + + + + + + + + $S{fonction.Nombre($D{paiements.Montant})} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + reglements + + + + + + + + + + + + + + + VerticalLayout23 + + + + + + + + + + + + HorizontalLayout23 + + + + TextItem23 + + + + + HorizontalLayout23 + + + + + + + + Reste à payer: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem10 + + + + + HorizontalLayout23 + + + + + + + + $S{fonction.Nombre($D{doc.comp})} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout23 + + + + + + + + + + + + + + + PageFooter1 + + + + + + + + + + + + + + ReportPage1 + + + + + + + + + + + + + + + + + + HorizontalLayout3 + + + + TextItem14 + + + + + HorizontalLayout3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem15 + + + + + HorizontalLayout3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem17 + + + + + HorizontalLayout3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem19 + + + + + HorizontalLayout3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem16 + + + + + HorizontalLayout3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem20 + + + + + HorizontalLayout3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ReportPage1 + + + + + + + + + + + + + DataHeaderBand1 + + + + HorizontalLayout40 + + + + TextItem24 + + + + + HorizontalLayout40 + + + + + + + + Code + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem40 + + + + + HorizontalLayout40 + + + + + + + + Désignations + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem22 + + + + + HorizontalLayout40 + + + + + + + + Qte + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem39 + + + + + HorizontalLayout40 + + + + + + + + P.U HT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem37 + + + + + HorizontalLayout40 + + + + + + + + TVA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem31 + + + + + HorizontalLayout40 + + + + + + + + Montant HT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataHeaderBand1 + + + + + + + + + + + + + + + ReportPage1 + + + + + + + + + det + + + + + + + + + + + + + + PageFooter2 + + + + TextItem25 + + + + + PageFooter2 + + + + + + + + $S{ReportPage1_} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ReportPage1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + datasources + + + + f + QMYSQL + $V{dossier} + $V{utilisateur} + + $V{serveur} + + + $V{port} + + + + + + company + select * from comp limit 1 + f + + + + stock + select stock_out.*,pt*stock_out.tva/100 as tot_tva, prod_ajout.* from stock_out left join prod_ajout on prod_ajout.ref = stock_out.ref where stock_out.doc = $V{doc} + f + + + + paiements + select date Date, descr Libellé, num_cheque 'N° chèque', debit Montant from oper_caisse where ref = $V{doc} and rowid not in (select id from reg_associer) union all select reg_associer.date,'Tranche de paiement associée',oper_caisse.num_cheque,mnt from reg_associer inner join oper_caisse on reg_associer.id = oper_caisse.rowid where reg_associer.ref = $V{doc} + f + + + + taxes + SELECT taxe_article.taxe,stock_out.mnt_taxe,stock_out.contenance,taxes.unite,sum(stock_out.qte * stock_out.qte_emb * stock_out.mnt_taxe * stock_out.contenance) Valeur FROM stock_out INNER JOIN taxe_article ON stock_out.ref = taxe_article.ref INNER JOIN taxes ON taxes.libelle = taxe_article.taxe WHERE doc = $V{doc} GROUP BY taxes.libelle + f + + + + doc + select bl.*, client.* from bl left join client on bl.cl = client.client where doc = $V{doc} + f + + + + + + + + + + + ReportPage1_PageFooter1.beforeRender.connect(BR1) +function BR1() +{ + var tableBuilder = DatasourceFunctions.createTableBuilder(ReportPage1_ligne_paiement); + tableBuilder.buildTable("paiements"); + +var tableTaxes = DatasourceFunctions.createTableBuilder(ReportPage1_ligne_taxes); + tableTaxes.buildTable("taxes"); +var tableTaxes = DatasourceFunctions.createTableBuilder(ReportPage1_details_taxes); + tableTaxes.buildTable("taxes"); +} + + +ReportPage1_DataHeaderBand1.afterRender.connect(AR1) +function AR1(){ + ReportPage1_HorizontalLayout3.geometry.y = ReportPage1_DataHeaderBand1.geometry.y; + ReportPage1_HorizontalLayout3.geometry.height=LimeReport.getPageFreeSpace(ReportPage1); + ReportPage1_HorizontalLayout3.geometry.height -= (ReportPage1_PageFooter2.geometry.height + ReportPage1_PageFooter1.geometry.height + 30) +} + + + + + + + + +
+
diff --git a/demo_r1/demo_reports/BL détaillé_upd.zip b/demo_r1/demo_reports/BL détaillé_upd.zip new file mode 100644 index 0000000..82f8f56 Binary files /dev/null and b/demo_r1/demo_reports/BL détaillé_upd.zip differ diff --git a/demo_r1/demo_reports/BL.detaille.zip b/demo_r1/demo_reports/BL.detaille.zip new file mode 100644 index 0000000..da43894 Binary files /dev/null and b/demo_r1/demo_reports/BL.detaille.zip differ diff --git a/demo_r1/demo_reports/DataSource_to_Column.lrxml b/demo_r1/demo_reports/DataSource_to_Column.lrxml new file mode 100644 index 0000000..76a2236 --- /dev/null +++ b/demo_r1/demo_reports/DataSource_to_Column.lrxml @@ -0,0 +1,492 @@ + + + + + + + page1 + + + + + + + + + Reportpage1 + + + + DataBand1 + + + + HorizontalLayout9 + + + + TextItem3 + + + + + HorizontalLayout9 + + + + + + + + $S{if (!datasources.get("d1")) $D{d1.1}; else ""} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem4 + + + + + HorizontalLayout9 + + + + + + + + $S{if (!datasources.get("d2")) $D{d2.1}; else ""} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem5 + + + + + HorizontalLayout9 + + + + + + + + $S{if (!datasources.get("d3")) $D{d3.1}; else ""} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataBand1 + + + + + + + + + + + + + + + Reportpage1 + + + + + + + + + + + + + + + + d3 + + + + + + + + + + + + + DataHeaderBand5 + + + + HorizontalLayout8 + + + + TextItem6 + + + + + HorizontalLayout8 + + + + + + + + Datasource "d1" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem7 + + + + + HorizontalLayout8 + + + + + + + + Datasource "d2" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem8 + + + + + HorizontalLayout8 + + + + + + + + Datasource "d3" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataHeaderBand5 + + + + + + + + + + + + + + + Reportpage1 + + + + + + + + + DataBand1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + datasources + + + + + + + + base_ds + d2 + + + + + + + + d1 + 1;2 +2;4 + ; + + + + + d3 + 4;4 +5;8 +1;9 + ; + + + + + d2 + 3;5 +2;8 +4;1 +6;8 + ; + + + + + + + + Reportpage1_DataBand1.afterRender.connect(AF) +Reportpage1_DataBand1.datasource = getVariable("base_ds") + +var ds_names = ["d1","d2","d3"] +var datasources = new Map() + +for (name of ds_names){ datasources.set(name, false) } + +function AF(){ + for (ds of datasources){ + if (ds[0] !== getVariable("base_ds")){ + DatasourceFunctions.next(ds[0]) + datasources.set(ds[0], DatasourceFunctions.isEOF(ds[0])) + } + } +} + + + + + diff --git a/demo_r1/demo_reports/Facture.lrxml b/demo_r1/demo_reports/Facture.lrxml new file mode 100644 index 0000000..9cf6c0a --- /dev/null +++ b/demo_r1/demo_reports/Facture.lrxml @@ -0,0 +1,2893 @@ + + + + + + + page1 + + + + + + + + + + ReportPage1 + + + + PageHeader2 + + + + HorizontalLayout2 + + + + ImageItem1 + + + + + HorizontalLayout2 + + + + + + + + + + company + logo + + + + +
+ + + + + + + VerticalLayout1 + + + + TextItem1 + + + + + VerticalLayout1 + + + + + + + + <b>$D{company.type} $D{company.nom}</b><br>$D{company.act} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem11 + + + + + VerticalLayout1 + + + + + + + + <table><tr><td><b>Adresse :</b> $D{company.adress}<br> +<b>Télephone :</b> $D{company.tel} <br> <b>Fax :</b> $D{company.fax}<br> +<b>E-mail :</b> $D{company.email} +<br><b> Site web :</b> $D{company.web}</td><td><b>RIB :</b>$D{company.mobile}<br><b>CIB :</b>$D{company.facebook}</td><td > +<b>RC :</b> $D{company.rc}<br> <b>AI :</b> $D{company.art_imp} <br> <b>NIF :</b> $D{company.mf} <br> <b>NIS :</b> $D{company.nis}</td></tr></table> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HorizontalLayout2 + + + + + + + + + + + + + + PageHeader2 + + + + + + + + + + + + + TextItem28 + + + + + PageHeader2 + + + + + + + + Le : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem2 + + + + + PageHeader2 + + + + + + + + Facture N° $S{fonction.STXT($D{doc.doc},2,500)} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem34 + + + + + PageHeader2 + + + + + + + + <table><tr><td><b>Client :</b></td><td> $D{doc.cl}</td></tr> +<tr><td><b>Adresse :</b></td><td> $D{doc.adr_fac}</td></tr> +<tr><td><b>Téléphone : </b></td><td>$D{doc.tel}</td></tr> +<tr><td><b>Fax : </b></td><td>$D{doc.fax}</td></tr> +<tr><td><b>Email : </b></td><td>$D{doc.email}</td></tr> +<tr><td><b>N° RC :</b></td><td> $D{doc.rc} </td></tr> +<tr><td><b>N° AI :</b></td><td> $D{doc.ai} </td></tr> +<tr><td><b>N° NIS :</b> </td><td>$D{doc.nis}</td></tr> +<tr><td><b>N° NIF :</b> </td><td>$D{doc.mf}</td></tr></table> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BarcodeItem2 + + + + + PageHeader2 + + + + + + + + + + doc + doc + 1 + + + + + + + + + + + + + + TextItem29 + + + + + PageHeader2 + + + + + + + + $D{doc.date} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ReportPage1 + + + + + + + + + + + + + + + + + + + + det + + + + HorizontalLayout1 + + + + TextItem14 + + + + + HorizontalLayout1 + + + + + + + + $D{stock.ref} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem15 + + + + + HorizontalLayout1 + + + + + + + + $D{stock.des} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem17 + + + + + HorizontalLayout1 + + + + + + + + $S{numberFormat($D{stock.qte},"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem19 + + + + + HorizontalLayout1 + + + + + + + + $S{numberFormat($D{stock.pu},"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem16 + + + + + HorizontalLayout1 + + + + + + + + $D{stock.tva} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem20 + + + + + HorizontalLayout1 + + + + + + + + $S{numberFormat($D{stock.pt},"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + det + + + + + + + + + + + + + + + ReportPage1 + + + + + + + + + + + + + + + + stock + + + + + + + + + + + + + PageFooter1 + + + + VerticalLayout38 + + + + HorizontalLayout4 + + + + TextItem4 + + + + + HorizontalLayout4 + + + + + + + + Total HT : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem3 + + + + + HorizontalLayout4 + + + + + + + + $S{numberFormat(SUM($D{stock.pt},"det"),"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout38 + + + + + + + + + + + + + HorizontalLayout5 + + + + TextItem5 + + + + + HorizontalLayout5 + + + + + + + + Remise : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem6 + + + + + HorizontalLayout5 + + + + + + + + $S{numberFormat($D{doc.remise},"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout38 + + + + + + + + + + + + + HorizontalLayout6 + + + + TextItem7 + + + + + HorizontalLayout6 + + + + + + + + Total TVA : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem8 + + + + + HorizontalLayout6 + + + + + + + + $S{numberFormat(SUM($D{stock.tot_tva},"det"),"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout38 + + + + + + + + + + + + + pied_taxes + + + + TextItem33 + + + + + pied_taxes + + + + + + + + $D{taxes.taxe} : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem38 + + + + + pied_taxes + + + + + + + + $S{ +if($D{taxes.taxe} == '') +ReportPage1_pied_taxes.isVisible = 0; +numberFormat($D{taxes.valeur},"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout38 + + + + + + + + + + + + + HorizontalLayout7 + + + + TextItem27 + + + + + HorizontalLayout7 + + + + + + + + Net à payer : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem13 + + + + + HorizontalLayout7 + + + + + + + + $S{numberFormat($D{doc.ttc},"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout38 + + + + + + + + + + + + + + + PageFooter1 + + + + + + + + + + + + VerticalLayout2 + + + + TextItem30 + + + + + VerticalLayout2 + + + + + + + + $D{doc.obs}<br> +Arrêter la présente facture à la somme de $S{fonction.nombreEnLettre($D{doc.ttc})} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + details_taxes + + + + HorizontalLayout41 + + + + TextItem41 + + + + + HorizontalLayout41 + + + + + + + + Taxe +$S{if($D{taxes.taxe} == '') +ReportPage1_details_taxes.isVisible = 0;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem43 + + + + + HorizontalLayout41 + + + + + + + + Unité + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem44 + + + + + HorizontalLayout41 + + + + + + + + Contenance + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem45 + + + + + HorizontalLayout41 + + + + + + + + Montant + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + details_taxes + + + + + + + + + + + + + ligne_taxes + + + + TextItem46 + + + + + ligne_taxes + + + + + + + + $D{taxes.taxe} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem47 + + + + + ligne_taxes + + + + + + + + $D{taxes.unite} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem48 + + + + + ligne_taxes + + + + + + + + $D{taxes.contenance} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem49 + + + + + ligne_taxes + + + + + + + + $S{fonction.Nombre($D{taxes.Valeur})} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + details_taxes + + + + + + + + + + + + + + + VerticalLayout2 + + + + + + + + + + + + reglements + + + + HorizontalLayout18 + + + + TextItem9 + + + + + HorizontalLayout18 + + + + + + + + Date +$S{ReportPage1_reglements.isVisible = $V{afficher_reglements}; +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem12 + + + + + HorizontalLayout18 + + + + + + + + N° chèque + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem18 + + + + + HorizontalLayout18 + + + + + + + + Montant + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + reglements + + + + + + + + + + + + + ligne_paiement + + + + TextItem21 + + + + + ligne_paiement + + + + + + + + $D{paiements.date} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem26 + + + + + ligne_paiement + + + + + + + + $D{paiements.N° chèque} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem32 + + + + + ligne_paiement + + + + + + + + $S{fonction.Nombre($D{paiements.Montant})} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + reglements + + + + + + + + + + + + + + + VerticalLayout2 + + + + + + + + + + + + + + PageFooter1 + + + + + + + + + + + + + + ReportPage1 + + + + + + + + + + + + + + + + + + HorizontalLayout3 + + + + TextItem14 + + + + + HorizontalLayout3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem15 + + + + + HorizontalLayout3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem17 + + + + + HorizontalLayout3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem19 + + + + + HorizontalLayout3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem16 + + + + + HorizontalLayout3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem20 + + + + + HorizontalLayout3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ReportPage1 + + + + + + + + + + + + + DataHeaderBand1 + + + + HorizontalLayout40 + + + + TextItem24 + + + + + HorizontalLayout40 + + + + + + + + Code + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem40 + + + + + HorizontalLayout40 + + + + + + + + Désignations + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem22 + + + + + HorizontalLayout40 + + + + + + + + Qte + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem39 + + + + + HorizontalLayout40 + + + + + + + + P.U HT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem37 + + + + + HorizontalLayout40 + + + + + + + + TVA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem31 + + + + + HorizontalLayout40 + + + + + + + + Montant HT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataHeaderBand1 + + + + + + + + + + + + + + + ReportPage1 + + + + + + + + + det + + + + + + + + + + + + + + PageFooter2 + + + + + ReportPage1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + datasources + + + + f + QMYSQL + $V{dossier} + $V{utilisateur} + + $V{serveur} + + + $V{port} + + + + + + company + select * from comp limit 1 + f + + + + stock + select stock_out.*,pt*stock_out.tva/100 as tot_tva, prod_ajout.* from stock_out left join prod_ajout on prod_ajout.ref = stock_out.ref where stock_out.doc = $V{doc} + f + + + + doc + select fv.*, client.* from fv left join client on fv.cl = client.client where doc = $V{doc} + f + + + + paiements + select date Date, descr Libellé, num_cheque 'N° chèque', debit Montant from oper_caisse where ref = $V{doc} and rowid not in (select id from reg_associer) union all select reg_associer.date,'Tranche de paiement associée',oper_caisse.num_cheque,mnt from reg_associer inner join oper_caisse on reg_associer.id = oper_caisse.rowid where reg_associer.ref = $V{doc} + f + + + + taxes + SELECT taxe_article.taxe,stock_out.mnt_taxe,stock_out.contenance,taxes.unite,sum(stock_out.qte * stock_out.qte_emb * stock_out.mnt_taxe * stock_out.contenance) Valeur FROM stock_out INNER JOIN taxe_article ON stock_out.ref = taxe_article.ref INNER JOIN taxes ON taxes.libelle = taxe_article.taxe WHERE doc = $V{doc} GROUP BY taxes.libelle + f + + + + + + + + + + + ReportPage1_PageFooter1.beforeRender.connect(BR1) +function BR1() +{ + var tableBuilder = DatasourceFunctions.createTableBuilder(ReportPage1_ligne_paiement); + tableBuilder.buildTable("paiements"); + +var tableTaxes = DatasourceFunctions.createTableBuilder(ReportPage1_ligne_taxes); + tableTaxes.buildTable("taxes"); +var tableTaxes = DatasourceFunctions.createTableBuilder(ReportPage1_details_taxes); + tableTaxes.buildTable("taxes"); +} + +ReportPage1_HorizontalLayout3.geometry.height+=LimeReport.getPageFreeSpace(ReportPage1); +ReportPage1_HorizontalLayout3.geometry.y = ReportPage1_DataHeaderBand1.geometry.y; + + + + + + + + +
+
diff --git a/demo_r1/demo_reports/db.sqlite3 b/demo_r1/demo_reports/db.sqlite3 new file mode 100644 index 0000000..df18669 Binary files /dev/null and b/demo_r1/demo_reports/db.sqlite3 differ diff --git a/demo_r1/demo_reports/form.lrd b/demo_r1/demo_reports/form.lrd new file mode 100644 index 0000000..5af8712 Binary files /dev/null and b/demo_r1/demo_reports/form.lrd differ diff --git a/demo_r1/demo_reports/ladder.lrxml b/demo_r1/demo_reports/ladder.lrxml new file mode 100644 index 0000000..6bb2692 --- /dev/null +++ b/demo_r1/demo_reports/ladder.lrxml @@ -0,0 +1,1554 @@ + + + + + + + page1 + + + + + + + + + + Reportpage1 + + + + data + + + + TextItem6 + + + + + data + + + + + + + + $D{ds.a} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem7 + + + + + data + + + + + + + + $D{ds.b} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem8 + + + + + data + + + + + + + + $D{ds.c} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem9 + + + + + data + + + + + + + + $D{ds.d} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem10 + + + + + data + + + + + + + + $D{ds.amount} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem1 + + + + + data + + + + + + + + data + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Reportpage1 + + + + + + + + + + + + + + + + ds + + + + + + + + + + + + + a_group + + + + TextItem3 + + + + + a_group + + + + + + + + $D{ds.a} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem23 + + + + + a_group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem24 + + + + + a_group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem26 + + + + + a_group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem31 + + + + + a_group + + + + + + + + $S{SUM($D{ds.amount}, "data")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem2 + + + + + a_group + + + + + + + + a group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Reportpage1 + + + + + + + + + data + + + + + + + a + + + + + + + + + b_group + + + + TextItem4 + + + + + b_group + + + + + + + + $D{ds.a} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem11 + + + + + b_group + + + + + + + + $D{ds.b} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem25 + + + + + b_group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem27 + + + + + b_group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem30 + + + + + b_group + + + + + + + + $S{SUM($D{ds.amount}, "data")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem14 + + + + + b_group + + + + + + + + b group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Reportpage1 + + + + + + + + + a_group + + + + + + + b + + + + + + + + + c_group + + + + TextItem5 + + + + + c_group + + + + + + + + $D{ds.a} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem12 + + + + + c_group + + + + + + + + $D{ds.b} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem13 + + + + + c_group + + + + + + + + $D{ds.c} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem28 + + + + + c_group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem29 + + + + + c_group + + + + + + + + $S{SUM($D{ds.amount}, "data")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem15 + + + + + c_group + + + + + + + + c group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Reportpage1 + + + + + + + + + b_group + + + + + + + c + + + + + + + + + DataHeaderBand18 + + + + TextItem18 + + + + + DataHeaderBand18 + + + + + + + + c + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem19 + + + + + DataHeaderBand18 + + + + + + + + b + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem20 + + + + + DataHeaderBand18 + + + + + + + + d + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem21 + + + + + DataHeaderBand18 + + + + + + + + amount + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem22 + + + + + DataHeaderBand18 + + + + + + + + a + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Reportpage1 + + + + + + + + + data + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + datasources + + + + db + QSQLITE + D:/Work/C++/Projects/LimeReport/demo_r1/demo_reports/db.sqlite3 + + + + + + + + + + + + ds + select a,b,c,d, amount +from ds +order by a,b,c,d + db + + + + + + + + + + + + + + + + diff --git a/demo_r1/demo_reports/lr_git_test.lrxml b/demo_r1/demo_reports/lr_git_test.lrxml new file mode 100644 index 0000000..381e7e4 --- /dev/null +++ b/demo_r1/demo_reports/lr_git_test.lrxml @@ -0,0 +1,2891 @@ + + + + + + + page4 + + + + + + + + Horizontal + + + + ChartItem1 + + + + + Horizontal + + + + + + + + + + + Series0 + x_big + + + + + + + + Series1 + x_big + + + + + + + + Series2 + x_big + + + + + + + + Series3 + x_big + + + + + + + + Series4 + x_big + + + + + + + + Series5 + x_big + + + + + + + + Series6 + x_big + + + + + + + test + + + + + + + + + + + + + + + + + + ChartItem3 + + + + + Horizontal + + + + + + + + + + + Series0 + x_big + + + + + + + + Series1 + x_big + + + + + + + + Series2 + x_big + + + + + + + + Series3 + x_big + + + + + + + + Series4 + x_big + + + + + + + + Series5 + x_big + + + + + + + + Series6 + x_big + + + + + + + test + + + + + + + + + + + + + + + + + + ChartItem2 + + + + + Horizontal + + + + + + + + + + + Series0 + x_big + + + + + + + + Series1 + x_big + + + + + + + + Series2 + x_big + + + + + + + + Series3 + x_big + + + + + + + + Series4 + x_big + + + + + + + + Series5 + x_big + + + + + + + + Series6 + x_big + + + + + + + test + + + + + + + + + + + + + + + + + + ChartItem4 + + + + + Horizontal + + + + + + + + + + + Series0 + x_big + + + + + + + + Series1 + x_big + + + + + + + + Series2 + x_big + + + + + + + + Series3 + x_big + + + + + + + + Series4 + x_big + + + + + + + + Series5 + x_big + + + + + + + + Series6 + x_big + + + + + + + test + + + + + + + + + + + + + + + + + + ChartItem5 + + + + + Horizontal + + + + + + + + + + + Series0 + x_big + + + + + + + + Series1 + x_big + + + + + + + + Series2 + x_big + + + + + + + + Series3 + x_big + + + + + + + + Series4 + x_big + + + + + + + + Series5 + x_big + + + + + + + + Series6 + x_big + + + + + + + test + + + + + + + + + + + + + + + + + + ChartItem6 + + + + + Horizontal + + + + + + + + + + + Series0 + x_big + + + + + + + + Series1 + x_big + + + + + + + + Series2 + x_big + + + + + + + + Series3 + x_big + + + + + + + + Series4 + x_big + + + + + + + + Series5 + x_big + + + + + + + + Series6 + x_big + + + + + + + test + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + page2 + + + + + + + + Grid + + + + ChartItem2 + + + + + Grid + + + + + + + + + + + Series0 + y + + + + + + + + Series1 + y + + + + + + + + Series2 + y + + + + + + + + Series3 + y + + + + + + + + Series4 + y + + + + + + + + Series5 + y + + + + + + + + Series6 + y + + + + + + + + Series7 + y + + + + + + + + Series8 + y + + + + + + + + Series9 + y + + + + + + + test + + + + + + + + + + + + + + x + + + + ChartItem4 + + + + + Grid + + + + + + + + + + + Series0 + y + + + + + + + + Series1 + y + + + + + + + + Series2 + y + + + + + + + + Series3 + y + + + + + + + + Series4 + y + + + + + + + + Series5 + y + + + + + + + + Series6 + y + + + + + + + + Series7 + y + + + + + + + + Series8 + y + + + + + + + + Series9 + y + + + + + + + test + + + + + + + + + + + + + + x + + + + ChartItem7 + + + + + Grid + + + + + + + + + + + Series0 + y + + + + + + + + Series1 + y + + + + + + + + Series2 + y + + + + + + + + Series3 + y + + + + + + + + Series4 + y + + + + + + + + Series5 + y + + + + + + + + Series6 + y + + + + + + + + Series7 + y + + + + + + + + Series8 + y + + + + + + + + Series9 + y + + + + + + + test + + + + + + + + + + + + + + x + + + + ChartItem8 + + + + + Grid + + + + + + + + + + + Series0 + y + + + + + + + + Series1 + y + + + + + + + + Series2 + y + + + + + + + + Series3 + y + + + + + + + + Series4 + y + + + + + + + + Series5 + y + + + + + + + + Series6 + y + + + + + + + + Series7 + y + + + + + + + + Series8 + y + + + + + + + + Series9 + y + + + + + + + test + + + + + + + + + + + + + + x + + + + ChartItem9 + + + + + Grid + + + + + + + + + + + Series0 + y + + + + + + + + Series1 + y + + + + + + + + Series2 + y + + + + + + + + Series3 + y + + + + + + + + Series4 + y + + + + + + + + Series5 + y + + + + + + + + Series6 + y + + + + + + + + Series7 + y + + + + + + + + Series8 + y + + + + + + + + Series9 + y + + + + + + + test + test + + + + + + x + + + + + + + x + + + + ChartItem10 + + + + + Grid + + + + + + + + + + + Series0 + y + + + + + + + + Series1 + y + + + + + + + + Series2 + y + + + + + + + + Series3 + y + + + + + + + + Series4 + y + + + + + + + + Series5 + y + + + + + + + + Series6 + y + + + + + + + + Series7 + y + + + + + + + + Series8 + y + + + + + + + + Series9 + y + + + + + + + test + + + + + + + + + + + + + + x + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + page2 + + + + + + + + Lines + + + + ChartItem5 + + + + + Lines + + + + + + + + + + + Series0 + y + + + + + + + + Series1 + y + + + + + + + + Series2 + y + + + + + + + + Series3 + y + + + + + + + + Series4 + y + + + + + + + + Series5 + y + + + + + + + + Series6 + y + + + + + + + + Series7 + y + + + + + + + + Series8 + y + + + + + + + + Series9 + y + + + + + + + test + + + + + + + + + + + + + + x + + + + ChartItem1 + + + + + Lines + + + + + + + + + + + Series0 + y + + + + + + + + Series1 + y + + + + + + + + Series2 + y + + + + + + + + Series3 + y + + + + + + + + Series4 + y + + + + + + + + Series5 + y + + + + + + + + Series6 + y + + + + + + + + Series7 + y + + + + + + + + Series8 + y + + + + + + + + Series9 + y + + + + + + + test + + + + + + + + + + + + + + x + + + + ChartItem2 + + + + + Lines + + + + + + + + + + + Series0 + y + + + + + + + + Series1 + y + + + + + + + + Series2 + y + + + + + + + + Series3 + y + + + + + + + + Series4 + y + + + + + + + + Series5 + y + + + + + + + + Series6 + y + + + + + + + + Series7 + y + + + + + + + + Series8 + y + + + + + + + + Series9 + y + + + + + + + test + + + + + + + + + + + + + + x + + + + ChartItem3 + + + + + Lines + + + + + + + + + + + Series0 + y + + + + + + + + Series1 + y + + + + + + + + Series2 + y + + + + + + + + Series3 + y + + + + + + + + Series4 + y + + + + + + + + Series5 + y + + + + + + + + Series6 + y + + + + + + + + Series7 + y + + + + + + + + Series8 + y + + + + + + + + Series9 + y + + + + + + + test + + + + + + + + + + + + + + x + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + page3 + + + + + + + + Vertical + + + + ChartItem6 + + + + + Vertical + + + + + + + + + + + Series0 + y + + + + + + + + Series1 + y + + + + + + + + Series2 + y + + + + + + + + Series3 + y + + + + + + + + Series4 + y + + + + + + + + Series5 + y + + + + + + + + Series6 + y + + + + + + + + Series7 + y + + + + + + + + Series8 + y + + + + + + + + Series9 + y + + + + + + + test + + + + + + + + + + + + + + x + + + + ChartItem1 + + + + + Vertical + + + + + + + + + + + Series0 + y + + + + + + + + Series1 + y + + + + + + + + Series2 + y + + + + + + + + Series3 + y + + + + + + + + Series4 + y + + + + + + + + Series5 + y + + + + + + + + Series6 + y + + + + + + + + Series7 + y + + + + + + + + Series8 + y + + + + + + + + Series9 + y + + + + + + + test + + + + + + + + + + + + + + x + + + + ChartItem2 + + + + + Vertical + + + + + + + + + + + Series0 + y + + + + + + + + Series1 + y + + + + + + + + Series2 + y + + + + + + + + Series3 + y + + + + + + + + Series4 + y + + + + + + + + Series5 + y + + + + + + + + Series6 + y + + + + + + + + Series7 + y + + + + + + + + Series8 + y + + + + + + + + Series9 + y + + + + + + + test + + + + + + + + + + + + + + x + + + + ChartItem3 + + + + + Vertical + + + + + + + + + + + Series0 + y + + + + + + + + Series1 + y + + + + + + + + Series2 + y + + + + + + + + Series3 + y + + + + + + + + Series4 + y + + + + + + + + Series5 + y + + + + + + + + Series6 + y + + + + + + + + Series7 + y + + + + + + + + Series8 + y + + + + + + + + Series9 + y + + + + + + + test + + + + + + + + + + + + + + x + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + page5 + + + + + + + + Pie + + + + ChartItem7 + + + + + Pie + + + + + + + + + + + Series0 + y + + + + + + + + Series1 + x + + + + + + + test + + + + + + + + + + + + + + x + + + + ChartItem1 + + + + + Pie + + + + + + + + + + + Series0 + y + + + + + + + + Series1 + x + + + + + + + test + + + + + + + + + + + + + + x + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + page6 + + + + + + + + Corner cases + + + + ChartItem3 + + + + + Corner cases + + + + + + + + + + + Series0 long naammamamamamama + x_big + + + + + + + + Series1 + x_big + + + + + + + + Series2 + x_big + + + + + + + + Series3 + x_big + + + + + + + + Series4 + x_big + + + + + + + + Series5 + x_big + + + + + + + + Series6 + x_big + + + + + + + test + + + + + + + + + + + + + + + + + + ChartItem1 + + + + + Corner cases + + + + + + + + + + + Series0 long naammamamamamama + x_big + + + + + + + + Series1 + x_big + + + + + + + + Series2 + x_big + + + + + + + + Series3 + x_big + + + + + + + + Series4 + x_big + + + + + + + + Series5 + x_big + + + + + + + + Series6 + x_big + + + + + + + test + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + datasources + + + + + + + + + test + y,x,label,x_big +10,3,f,200000 +20,2,s,100000 +30,0,t,10000 + , + + + + + + + + + + + + + diff --git a/demo_r1/demo_reports/multimote/db.sqlite3 b/demo_r1/demo_reports/multimote/db.sqlite3 new file mode 100644 index 0000000..ffb9aa7 Binary files /dev/null and b/demo_r1/demo_reports/multimote/db.sqlite3 differ diff --git a/demo_r1/demo_reports/multimote/test.lrxml b/demo_r1/demo_reports/multimote/test.lrxml new file mode 100644 index 0000000..cb254c3 --- /dev/null +++ b/demo_r1/demo_reports/multimote/test.lrxml @@ -0,0 +1,617 @@ + + + + + + + page1 + + + + + + + + + + Reportpage1 + + + + DataBand1 + + + + TextItem1 + + + + + DataBand1 + + + + + + + + $D{test.first} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem4 + + + + + DataBand1 + + + + + + + + $D{test.summ} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem2 + + + + + DataBand1 + + + + + + + + $D{test.sec} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Reportpage1 + + + + + + + + + + + + + + + + test + + + + + + + + + + + + + GroupBandHeader4 + + + + TextItem5 + + + + + GroupBandHeader4 + + + + + + + + Start first $D{test.first} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Reportpage1 + + + + + + + + + DataBand1 + + + + + + + first + + + + + + + + + GroupBandFooter4 + + + + TextItem62 + + + + + GroupBandFooter4 + + + + + + + + $S{SUM("$D{test.summ}", "DataBand1")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem65 + + + + + GroupBandFooter4 + + + + + + + + End first $D{test.first} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Reportpage1 + + + + + + + + + GroupBandHeader4 + + + + + + + + + DataHeaderBand1 + + + + TextItem3 + + + + + DataHeaderBand1 + + + + + + + + sec + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem6 + + + + + DataHeaderBand1 + + + + + + + + summ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem7 + + + + + DataHeaderBand1 + + + + + + + + first + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Reportpage1 + + + + + + + + + DataBand1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + datasources + + + + db + QSQLITE + ./db.sqlite3 + + + + + + + + + + + + test + SELECT first, sec, SUM(summ) AS summ +FROM test_table +GROUP BY first, sec +ORDER BY first, sec + db + + + + + + + + + + + + + + + + diff --git a/demo_r1/demo_reports/template.lrxml b/demo_r1/demo_reports/template.lrxml new file mode 100644 index 0000000..0491676 --- /dev/null +++ b/demo_r1/demo_reports/template.lrxml @@ -0,0 +1,3524 @@ + + + + + + + page1 + + + + + + + + mainReportPage + + + + reportHeader + + + + TextItem1 + + + + + reportHeader + + + + + + + + $S{ +if ((getField("caption.zc1") + getField("caption.zc0"))>=0) +THIS.setItemWidth((getField("caption.zc1") + getField("caption.zc0") ) * 8 + 47);'с $V{from_date} по $V{to_date}'} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + mainReportPage + + + + + + + + + + + + + + + + + + + + PageFooter + + + + tiPage + + + + + PageFooter + + + + + + + + $V{#PAGE} из $V{#PAGE_COUNT} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + mainReportPage + + + + + + + + + + + + + + + + + + + + + mainDataBand + + + + HorizontalLayout67 + + + + TextItem66 + + + + + HorizontalLayout67 + + + + + + + + $S{ +getField("main.fio");} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem67 + + + + + HorizontalLayout67 + + + + + + + + $S{ +getField("main.total");} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem62 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc1")<1) THIS.isVisible = false; +var da = getField("main.c1"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem41 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc1")<2) THIS.isVisible = false; +var da = getField("main.c2"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem43 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc1")<3) THIS.isVisible = false; +var da = getField("main.c3"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem54 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc1")<4) THIS.isVisible = false; +var da = getField("main.c4"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem40 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc1")<5) THIS.isVisible = false; +var da = getField("main.c5"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem38 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc1")<6) THIS.isVisible = false; +var da = getField("main.c6"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem37 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc1")<7) THIS.isVisible = false; +var da = getField("main.c7"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem58 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc1")<8) THIS.isVisible = false; +var da = getField("main.c8"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem57 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc1")<9) THIS.isVisible = false; +var da = getField("main.c9"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem64 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc1")<10) THIS.isVisible = false; +var da = getField("main.c10"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem3 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc1")<11) THIS.isVisible = false; +var da = getField("main.c11"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem44 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc1")<12) THIS.isVisible = false; +var da = getField("main.c12"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem45 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc1")<13) THIS.isVisible = false; +var da = getField("main.c13"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem51 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc1")<14) THIS.isVisible = false; +var da = getField("main.c14"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem39 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc1")<15) THIS.isVisible = false; +var da = getField("main.c15"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem55 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc1")<16) THIS.isVisible = false; +var da = getField("main.c16"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem60 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc1")<17) THIS.isVisible = false; +var da = getField("main.c17"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem59 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc1")<18) THIS.isVisible = false; +var da = getField("main.c18"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem47 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc1")<19) THIS.isVisible = false; +var da = getField("main.c19"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem48 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc1")<20) THIS.isVisible = false; +var da = getField("main.c20"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem65 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc1")<21) THIS.isVisible = false; +var da = getField("main.c21"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem61 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc1")<22) THIS.isVisible = false; +var da = getField("main.c22"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem52 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc1")<23) THIS.isVisible = false; +var da = getField("main.c23"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem53 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc0")<1) THIS.isVisible = false; +var da = getField("main.c24"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem50 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc0")<2) THIS.isVisible = false; +var da = getField("main.c25"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem46 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc0")<3) THIS.isVisible = false; +var da = getField("main.c26"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem63 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc0")<4) THIS.isVisible = false; +var da = getField("main.c27"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem56 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc0")<5) THIS.isVisible = false; +var da = getField("main.c28"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem42 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc0")<6) THIS.isVisible = false; +var da = getField("main.c29"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem49 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc0")<7) THIS.isVisible = false; +var da = getField("main.c30"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + mainDataBand + + + + + + + + + + + + + + + mainReportPage + + + + + + + + + + + + + + + + main + + + + + + + + + + + + + PageHeader + + + + HorizontalLayout10 + + + + TextItem2 + + + + + HorizontalLayout10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem4 + + + + + HorizontalLayout10 + + + + + + + + всего + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout9 + + + + HorizontalLayout9 + + + + TextItem35 + + + + + HorizontalLayout9 + + + + + + + + $S{ +if (getField("caption.zc1")>=0) +THIS.setItemWidth(getField("caption.zc1") * 8);'Группа А'} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem36 + + + + + HorizontalLayout9 + + + + + + + + $S{ +if (getField("caption.zc0")>=0) +THIS.setItemWidth(getField("caption.zc0") * 8);'Группа Б'} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout9 + + + + + + + + + + + + + HorizontalLayout6 + + + + TextItem5 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc1")<1) THIS.isVisible = false; +var da = getField("caption.c1"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem6 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc1")<2) THIS.isVisible = false; +var da = getField("caption.c2"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem7 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc1")<3) THIS.isVisible = false; +var da = getField("caption.c3"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem8 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc1")<4) THIS.isVisible = false; +var da = getField("caption.c4"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem9 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc1")<5) THIS.isVisible = false; +var da = getField("caption.c5"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem10 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc1")<6) THIS.isVisible = false; +var da = getField("caption.c6"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem11 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc1")<7) THIS.isVisible = false; +var da = getField("caption.c7"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem12 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc1")<8) THIS.isVisible = false; +var da = getField("caption.c8"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem13 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc1")<9) THIS.isVisible = false; +var da = getField("caption.c9"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem14 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc1")<10) THIS.isVisible = false; +var da = getField("caption.c10"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem15 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc1")<11) THIS.isVisible = false; +var da = getField("caption.c11"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem16 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc1")<12) THIS.isVisible = false; +var da = getField("caption.c12"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem17 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc1")<13) THIS.isVisible = false; +var da = getField("caption.c13"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem18 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc1")<14) THIS.isVisible = false; +var da = getField("caption.c14"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem19 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc1")<15) THIS.isVisible = false; +var da = getField("caption.c15"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem20 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc1")<16) THIS.isVisible = false; +var da = getField("caption.c16"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem21 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc1")<17) THIS.isVisible = false; +var da = getField("caption.c17"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem22 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc1")<18) THIS.isVisible = false; +var da = getField("caption.c18"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem23 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc1")<19) THIS.isVisible = false; +var da = getField("caption.c19"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem24 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc1")<20) THIS.isVisible = false; +var da = getField("caption.c20"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem25 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc1")<21) THIS.isVisible = false; +var da = getField("caption.c21"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem26 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc1")<22) THIS.isVisible = false; +var da = getField("caption.c22"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem27 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc1")<23) THIS.isVisible = false; +var da = getField("caption.c23"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem28 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc0")<1) THIS.isVisible = false; +var da = getField("caption.c24"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem29 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc0")<2) THIS.isVisible = false; +var da = getField("caption.c25"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem30 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc0")<3) THIS.isVisible = false; +var da = getField("caption.c26"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem31 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc0")<4) THIS.isVisible = false; +var da = getField("caption.c27"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem32 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc0")<5) THIS.isVisible = false; +var da = getField("caption.c28"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem33 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc0")<6) THIS.isVisible = false; +var da = getField("caption.c29"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem34 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc0")<7) THIS.isVisible = false; +var da = getField("caption.c30"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout9 + + + + + + + + + + + + + + + HorizontalLayout10 + + + + + + + + + + + + + + PageHeader + + + + + + + + + + + + + + + mainReportPage + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + datasources + + + + + + + + + + + + + + + + diff --git a/demo_r1/demo_reports/test.zip b/demo_r1/demo_reports/test.zip new file mode 100644 index 0000000..0ba84e3 Binary files /dev/null and b/demo_r1/demo_reports/test.zip differ diff --git a/demo_r1/demo_reports/test/test.db b/demo_r1/demo_reports/test/test.db new file mode 100644 index 0000000..0bbab6a Binary files /dev/null and b/demo_r1/demo_reports/test/test.db differ diff --git a/demo_r1/demo_reports/test/test.lrxml b/demo_r1/demo_reports/test/test.lrxml new file mode 100644 index 0000000..4ae8ead --- /dev/null +++ b/demo_r1/demo_reports/test/test.lrxml @@ -0,0 +1,432 @@ + + + + + + + page1 + + + + + + + + + + Reportpage1 + + + + PageHeader1 + + + + TextItem4 + + + + + PageHeader1 + + + + + + + + test + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Reportpage1 + + + + + + + + + + + + + + + + + + + + DataBand1 + + + + TextItem1 + + + + + DataBand1 + + + + + + + + $D{test.1} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Reportpage1 + + + + + + + + + + + + + + + + test + + + + + + + + + + + + + PageFooter1 + + + + TextItem5 + + + + + PageFooter1 + + + + + + + + page footer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Reportpage1 + + + + + + + + + + + + + + + + + + + + + DataFooterBand6 + + + + TextItem6 + + + + + DataFooterBand6 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem7 + + + + + DataFooterBand6 + + + + + + + + note: follow up the last row in databand + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Reportpage1 + + + + + + + + + DataBand1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + datasources + + + + + + + + + test + 12 +13 +14 +15 +16 +17 +18 +45 +67 +59 + ; + + + + + + + + Reportpage1_DataBand1.afterRender.connect(rr) +function rr(){ + Reportpage1_DataFooterBand6.setItemHeight(253-Reportpage1_DataBand1.geometry.height/10.0); + Reportpage1_TextItem6.setItemHeight(248-Reportpage1_DataBand1.geometry.height/10.0); +} + + + + + diff --git a/demo_r1/demo_reports/test/test1.lrxml b/demo_r1/demo_reports/test/test1.lrxml new file mode 100644 index 0000000..cab68b0 --- /dev/null +++ b/demo_r1/demo_reports/test/test1.lrxml @@ -0,0 +1,843 @@ + + + + + + + page1 + + + + + + + + + + Reportpage1 + + + + TextItem1 + + + + + Reportpage1 + + + + + + + + test1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + page2 + + + + + + + + + + Reportpage2 + + + + TextItem1 + + + + + Reportpage2 + + + + + + + + test2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + page3 + + + + + + + + + + TOC + + + + TextItem1 + + + + + TOC + + + + + + + + index + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + page4 + + + + + + + + + + Reportpage4 + + + + TextItem1 + + + + + Reportpage4 + + + + + + + + test4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + page5 + + + + + + + + + + Reportpage5 + + + + TextItem1 + + + + + Reportpage5 + + + + + + + + test5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + page6 + + + + + + + + + + Reportpage6 + + + + TextItem1 + + + + + Reportpage6 + + + + + + + + test6 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + page7 + + + + + + + + + + Reportpage7 + + + + TextItem1 + + + + + Reportpage7 + + + + + + + + test7 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + page8 + + + + + + + + + + Reportpage8 + + + + TextItem1 + + + + + Reportpage8 + + + + + + + + test8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + page9 + + + + + + + + + + Reportpage9 + + + + TextItem1 + + + + + Reportpage9 + + + + + + + + test1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + datasources + + + + + + + + + + + + + + + + diff --git a/demo_r1/demo_reports/test/test2.lrxml b/demo_r1/demo_reports/test/test2.lrxml new file mode 100644 index 0000000..6f461e9 --- /dev/null +++ b/demo_r1/demo_reports/test/test2.lrxml @@ -0,0 +1,1908 @@ + + + + + + + page17 + + + + + + + + + + RLBN + + + + PageHeader1 + + + + ShapeItem5 + + + + + PageHeader1 + + + + + + + + + + + + + + + + + + ShapeItem4 + + + + + PageHeader1 + + + + + + + + + + + + + + + + + + ShapeItem7 + + + + + PageHeader1 + + + + + + + + + + + + + + + + + + ShapeItem8 + + + + + PageHeader1 + + + + + + + + + + + + + + + + + + TextItem3 + + + + + PageHeader1 + + + + + + + + Tank Capacity Table + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem33 + + + + + PageHeader1 + + + + + + + + $D{tanklist.TankName} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem37 + + + + + PageHeader1 + + + + + + + + $V{ShipNameC} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem4 + + + + + PageHeader1 + + + + + + + + $V{shipcert} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HorizontalLayout2 + + + + TextItem9 + + + + + HorizontalLayout2 + + + + + + + + * +* +* +* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem10 + + + + + HorizontalLayout2 + + + + + + + + $V{GB1} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem16 + + + + + HorizontalLayout2 + + + + + + + + <br> +Capacity +<br>(m<sup>3</sup>) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem17 + + + + + HorizontalLayout2 + + + + + + + + <br> +Diff<br> +(m<sup>3</sup>/cm) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem18 + + + + + HorizontalLayout2 + + + + + + + + * +* +* +* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem19 + + + + + HorizontalLayout2 + + + + + + + + * +* +* +* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem20 + + + + + HorizontalLayout2 + + + + + + + + $V{GB1} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem21 + + + + + HorizontalLayout2 + + + + + + + + <br> +Capacity +<br>(m<sup>3</sup>) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem22 + + + + + HorizontalLayout2 + + + + + + + + <br> +Diff<br> +(m<sup>3</sup>/cm) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem23 + + + + + HorizontalLayout2 + + + + + + + + * +* +* +* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PageHeader1 + + + + + + + + + + + + + + + RLBN + + + + + + + + + + + + + + + + + + + + DataBand14 + + + + TextItem41 + + + + + DataBand14 + + + + + + + + $D{tanklist.TankNo} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RLBN + + + + + + + + + + + + + + + + tanklist + + + + + + + + + + + + + SubDetailBand15 + + + + TextItem34 + + + + + SubDetailBand15 + + + + + + + + * + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem35 + + + + + SubDetailBand15 + + + + + + + + * + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HorizontalLayout1 + + + + TextItem36 + + + + + HorizontalLayout1 + + + + + + + + * + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem38 + + + + + HorizontalLayout1 + + + + + + + + $V{RLBG1} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem39 + + + + + HorizontalLayout1 + + + + + + + + $S{numberFormat($D{subrlbtable.capacity}/1000.0,'f',3)} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem40 + + + + + HorizontalLayout1 + + + + + + + + $S{numberFormat($D{subrlbtable.diff}/1000.0,'f',3)} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem42 + + + + + HorizontalLayout1 + + + + + + + + * + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SubDetailBand15 + + + + + + + + + + + + + + + RLBN + + + + + + + + + DataBand14 + + + + + + + subrlbtable + + + + + + + + + PageFooter15 + + + + ShapeItem42 + + + + + PageFooter15 + + + + + + + + + + + + + + + + + + ShapeItem43 + + + + + PageFooter15 + + + + + + + + + + + + + + + + + + HorizontalLayout3 + + + + TextItem5 + + + + + HorizontalLayout3 + + + + + + + + $V{ZRQ} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem6 + + + + + HorizontalLayout3 + + + + + + + + -$V{#PAGE}- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem7 + + + + + HorizontalLayout3 + + + + + + + + $V{ZRQEN} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PageFooter15 + + + + + + + + + + + + + + + RLBN + + + + + + + + + + + + + + + + + + + + + SubDetailFooterBand1 + + + + HorizontalLayout24 + + + + TextItem8 + + + + + HorizontalLayout24 + + + + + + + + * + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem11 + + + + + HorizontalLayout24 + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem12 + + + + + HorizontalLayout24 + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem13 + + + + + HorizontalLayout24 + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem14 + + + + + HorizontalLayout24 + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem15 + + + + + HorizontalLayout24 + + + + + + + + * + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SubDetailFooterBand1 + + + + + + + + + + + + + + + RLBN + + + + + + + + + SubDetailBand15 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + datasources + + + + test + QSQLITE + C:/Users/ThinkPad/Desktop/test.db + + + + + + + + + + + + tanklist + select * from TankList + test + + + + + + subrlbtable + select * from RLBTable where TankNo=$D{tanklist.TankNo} + test + tanklist + + + + + + + + + + + +// ******************************************** RLB + +var RLBliness=0; + +RLBN_DataBand14.beforeRender.connect(RLBAA) +RLBN_SubDetailBand15.beforeRender.connect(RLBBB) +function RLBAA(){ + RLBN_TextItem41.isVisible=false; +} +// for each 5rows in subDetailBand15 will print a row " * *" as a gap +// the height of row for data and gap is set 4mm +// subDetailBand height is 216mm (50 rows data +4 rows gap) +function RLBBB(){ + RLBliness=line("SubDetailBand15"); + var gapp=(RLBliness%10==0)&&(RLBliness%50!=0); + RLBN_TextItem35.isVisible=gapp; + RLBN_TextItem34.isVisible=gapp; +} +// end mark for each tank , if the data of last one is just 100 rows(just 1 page) then no need print the data end mark +// if the last data is in the middle will need print the data end mark +function RLBfooter(){ + var footerv=(RLBliness%100!=0); + RLBN_TextItem24.isVisible=footerv; + RLBN_TextItem26.isVisible=footerv; + RLBN_TextItem27.isVisible=footerv; + RLBN_TextItem28.isVisible=footerv; + RLBN_TextItem29.isVisible=footerv; + + } + + + + + + + + + diff --git a/demo_r1/demo_reports/test/test2_changed.lrxml b/demo_r1/demo_reports/test/test2_changed.lrxml new file mode 100644 index 0000000..b120096 --- /dev/null +++ b/demo_r1/demo_reports/test/test2_changed.lrxml @@ -0,0 +1,1907 @@ + + + + + + + page17 + + + + + + + + + RLBN + + + + PageHeader1 + + + + ShapeItem5 + + + + + PageHeader1 + + + + + + + + + + + + + + + + + + ShapeItem4 + + + + + PageHeader1 + + + + + + + + + + + + + + + + + + ShapeItem7 + + + + + PageHeader1 + + + + + + + + + + + + + + + + + + ShapeItem8 + + + + + PageHeader1 + + + + + + + + + + + + + + + + + + TextItem3 + + + + + PageHeader1 + + + + + + + + Tank Capacity Table + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem33 + + + + + PageHeader1 + + + + + + + + $D{tanklist.TankName} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem37 + + + + + PageHeader1 + + + + + + + + $V{ShipNameC} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem4 + + + + + PageHeader1 + + + + + + + + $V{shipcert} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HorizontalLayout2 + + + + TextItem9 + + + + + HorizontalLayout2 + + + + + + + + * +* +* +* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem10 + + + + + HorizontalLayout2 + + + + + + + + $V{GB1} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem16 + + + + + HorizontalLayout2 + + + + + + + + <br> +Capacity +<br>(m<sup>3</sup>) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem17 + + + + + HorizontalLayout2 + + + + + + + + <br> +Diff<br> +(m<sup>3</sup>/cm) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem18 + + + + + HorizontalLayout2 + + + + + + + + * +* +* +* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem19 + + + + + HorizontalLayout2 + + + + + + + + * +* +* +* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem20 + + + + + HorizontalLayout2 + + + + + + + + $V{GB1} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem21 + + + + + HorizontalLayout2 + + + + + + + + <br> +Capacity +<br>(m<sup>3</sup>) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem22 + + + + + HorizontalLayout2 + + + + + + + + <br> +Diff<br> +(m<sup>3</sup>/cm) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem23 + + + + + HorizontalLayout2 + + + + + + + + * +* +* +* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PageHeader1 + + + + + + + + + + + + + + + RLBN + + + + + + + + + + + + + + + + + + + + DataBand14 + + + + TextItem41 + + + + + DataBand14 + + + + + + + + $D{tanklist.TankNo} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RLBN + + + + + + + + + + + + + + + + tanklist + + + + + + + + + + + + + SubDetailBand15 + + + + TextItem34 + + + + + SubDetailBand15 + + + + + + + + * + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem35 + + + + + SubDetailBand15 + + + + + + + + * + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HorizontalLayout1 + + + + TextItem36 + + + + + HorizontalLayout1 + + + + + + + + * + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem38 + + + + + HorizontalLayout1 + + + + + + + + $V{RLBG1} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem39 + + + + + HorizontalLayout1 + + + + + + + + $S{numberFormat($D{subrlbtable.capacity}/1000.0,'f',3)} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem40 + + + + + HorizontalLayout1 + + + + + + + + $S{numberFormat($D{subrlbtable.diff}/1000.0,'f',3)} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem42 + + + + + HorizontalLayout1 + + + + + + + + * + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SubDetailBand15 + + + + + + + + + + + + + + + RLBN + + + + + + + + + DataBand14 + + + + + + + subrlbtable + + + + + + + + + PageFooter15 + + + + ShapeItem42 + + + + + PageFooter15 + + + + + + + + + + + + + + + + + + ShapeItem43 + + + + + PageFooter15 + + + + + + + + + + + + + + + + + + HorizontalLayout3 + + + + TextItem5 + + + + + HorizontalLayout3 + + + + + + + + $V{ZRQ} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem6 + + + + + HorizontalLayout3 + + + + + + + + -$V{#PAGE}- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem7 + + + + + HorizontalLayout3 + + + + + + + + $V{ZRQEN} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PageFooter15 + + + + + + + + + + + + + + + RLBN + + + + + + + + + + + + + + + + + + + + + SubDetailFooterBand1 + + + + HorizontalLayout24 + + + + TextItem8 + + + + + HorizontalLayout24 + + + + + + + + * + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem11 + + + + + HorizontalLayout24 + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem12 + + + + + HorizontalLayout24 + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem13 + + + + + HorizontalLayout24 + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem14 + + + + + HorizontalLayout24 + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem15 + + + + + HorizontalLayout24 + + + + + + + + * + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SubDetailFooterBand1 + + + + + + + + + + + + + + + RLBN + + + + + + + + + SubDetailBand15 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + datasources + + + + test + QSQLITE + D:/Work/C++/Projects/LimeReport/demo_r1/demo_reports/test/test.db + + + + + + + + + + + + tanklist + select * from TankList + test + + + + + + subrlbtable + select * from RLBTable where TankNo=$D{tanklist.TankNo} + test + tanklist + + + + + + + + + + + +// ******************************************** RLB + +var RLBliness=0; + +RLBN_DataBand14.beforeRender.connect(RLBAA) +RLBN_SubDetailBand15.beforeRender.connect(RLBBB) +function RLBAA(){ + RLBN_TextItem41.isVisible=false; +} +// for each 5rows in subDetailBand15 will print a row " * *" as a gap +// the height of row for data and gap is set 4mm +// subDetailBand height is 216mm (50 rows data +4 rows gap) +function RLBBB(){ + RLBliness=line("SubDetailBand15"); + var gapp=(RLBliness%10==0)&&(RLBliness%50!=0); + RLBN_TextItem35.isVisible=gapp; + RLBN_TextItem34.isVisible=gapp; +} +// end mark for each tank , if the data of last one is just 100 rows(just 1 page) then no need print the data end mark +// if the last data is in the middle will need print the data end mark +function RLBfooter(){ + var footerv=(RLBliness%100!=0); + RLBN_TextItem24.isVisible=footerv; + RLBN_TextItem26.isVisible=footerv; + RLBN_TextItem27.isVisible=footerv; + RLBN_TextItem28.isVisible=footerv; + RLBN_TextItem29.isVisible=footerv; + + } + + + + + + + + + diff --git a/demo_r1/demo_reports/test/test2_changed.zip b/demo_r1/demo_reports/test/test2_changed.zip new file mode 100644 index 0000000..a775f15 Binary files /dev/null and b/demo_r1/demo_reports/test/test2_changed.zip differ diff --git a/demo_r1/demo_reports/test/test3_changed.lrxml b/demo_r1/demo_reports/test/test3_changed.lrxml new file mode 100644 index 0000000..b2bef31 --- /dev/null +++ b/demo_r1/demo_reports/test/test3_changed.lrxml @@ -0,0 +1,1907 @@ + + + + + + + page17 + + + + + + + + + RLBN + + + + PageHeader1 + + + + ShapeItem5 + + + + + PageHeader1 + + + + + + + + + + + + + + + + + + ShapeItem4 + + + + + PageHeader1 + + + + + + + + + + + + + + + + + + ShapeItem7 + + + + + PageHeader1 + + + + + + + + + + + + + + + + + + ShapeItem8 + + + + + PageHeader1 + + + + + + + + + + + + + + + + + + TextItem3 + + + + + PageHeader1 + + + + + + + + Tank Capacity Table + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem33 + + + + + PageHeader1 + + + + + + + + $D{tanklist.TankName} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem37 + + + + + PageHeader1 + + + + + + + + $V{ShipNameC} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem4 + + + + + PageHeader1 + + + + + + + + $V{shipcert} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HorizontalLayout2 + + + + TextItem9 + + + + + HorizontalLayout2 + + + + + + + + * +* +* +* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem10 + + + + + HorizontalLayout2 + + + + + + + + $V{GB1} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem16 + + + + + HorizontalLayout2 + + + + + + + + <br> +Capacity +<br>(m<sup>3</sup>) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem17 + + + + + HorizontalLayout2 + + + + + + + + <br> +Diff<br> +(m<sup>3</sup>/cm) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem18 + + + + + HorizontalLayout2 + + + + + + + + * +* +* +* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem19 + + + + + HorizontalLayout2 + + + + + + + + * +* +* +* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem20 + + + + + HorizontalLayout2 + + + + + + + + $V{GB1} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem21 + + + + + HorizontalLayout2 + + + + + + + + <br> +Capacity +<br>(m<sup>3</sup>) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem22 + + + + + HorizontalLayout2 + + + + + + + + <br> +Diff<br> +(m<sup>3</sup>/cm) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem23 + + + + + HorizontalLayout2 + + + + + + + + * +* +* +* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PageHeader1 + + + + + + + + + + + + + + + RLBN + + + + + + + + + + + + + + + + + + + + DataBand14 + + + + TextItem41 + + + + + DataBand14 + + + + + + + + $D{tanklist.TankNo} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RLBN + + + + + + + + + + + + + + + + tanklist + + + + + + + + + + + + + SubDetailBand15 + + + + TextItem34 + + + + + SubDetailBand15 + + + + + + + + * + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem35 + + + + + SubDetailBand15 + + + + + + + + * + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HorizontalLayout1 + + + + TextItem36 + + + + + HorizontalLayout1 + + + + + + + + * + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem38 + + + + + HorizontalLayout1 + + + + + + + + $V{RLBG1} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem39 + + + + + HorizontalLayout1 + + + + + + + + $S{numberFormat($D{subrlbtable.capacity}/1000.0,'f',3)} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem40 + + + + + HorizontalLayout1 + + + + + + + + $S{numberFormat($D{subrlbtable.diff}/1000.0,'f',3)} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem42 + + + + + HorizontalLayout1 + + + + + + + + * + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SubDetailBand15 + + + + + + + + + + + + + + + RLBN + + + + + + + + + DataBand14 + + + + + + + subrlbtable + + + + + + + + + PageFooter15 + + + + ShapeItem42 + + + + + PageFooter15 + + + + + + + + + + + + + + + + + + ShapeItem43 + + + + + PageFooter15 + + + + + + + + + + + + + + + + + + HorizontalLayout3 + + + + TextItem5 + + + + + HorizontalLayout3 + + + + + + + + $V{ZRQ} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem6 + + + + + HorizontalLayout3 + + + + + + + + -$V{#PAGE}- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem7 + + + + + HorizontalLayout3 + + + + + + + + $V{ZRQEN} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PageFooter15 + + + + + + + + + + + + + + + RLBN + + + + + + + + + + + + + + + + + + + + + SubDetailFooterBand1 + + + + HorizontalLayout24 + + + + TextItem8 + + + + + HorizontalLayout24 + + + + + + + + * + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem11 + + + + + HorizontalLayout24 + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem12 + + + + + HorizontalLayout24 + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem13 + + + + + HorizontalLayout24 + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem14 + + + + + HorizontalLayout24 + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem15 + + + + + HorizontalLayout24 + + + + + + + + * + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SubDetailFooterBand1 + + + + + + + + + + + + + + + RLBN + + + + + + + + + SubDetailBand15 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + datasources + + + + test + QSQLITE + D:/Work/C++/Projects/LimeReport/demo_r1/demo_reports/test/test.db + + + + + + + + + + + + tanklist + select * from TankList + test + + + + + + subrlbtable + select * from RLBTable where TankNo=$D{tanklist.TankNo} + test + tanklist + + + + + + + + + + + +// ******************************************** RLB + +var RLBliness=0; + +RLBN_DataBand14.beforeRender.connect(RLBAA) +RLBN_SubDetailBand15.beforeRender.connect(RLBBB) +function RLBAA(){ + RLBN_TextItem41.isVisible=false; +} +// for each 5rows in subDetailBand15 will print a row " * *" as a gap +// the height of row for data and gap is set 4mm +// subDetailBand height is 216mm (50 rows data +4 rows gap) +function RLBBB(){ + RLBliness=line("SubDetailBand15"); + var gapp=(RLBliness%10==0)&&(RLBliness%50!=0); + RLBN_TextItem35.isVisible=gapp; + RLBN_TextItem34.isVisible=gapp; +} +// end mark for each tank , if the data of last one is just 100 rows(just 1 page) then no need print the data end mark +// if the last data is in the middle will need print the data end mark +function RLBfooter(){ + var footerv=(RLBliness%100!=0); + RLBN_TextItem24.isVisible=footerv; + RLBN_TextItem26.isVisible=footerv; + RLBN_TextItem27.isVisible=footerv; + RLBN_TextItem28.isVisible=footerv; + RLBN_TextItem29.isVisible=footerv; + + } + + + + + + + + + diff --git a/demo_r1/demo_reports/test1.zip b/demo_r1/demo_reports/test1.zip new file mode 100644 index 0000000..ffc9c6b Binary files /dev/null and b/demo_r1/demo_reports/test1.zip differ diff --git a/demo_r1/demo_reports/test3.zip b/demo_r1/demo_reports/test3.zip new file mode 100644 index 0000000..baf050a Binary files /dev/null and b/demo_r1/demo_reports/test3.zip differ diff --git a/demo_r1/demo_reports/testqrcode.lrxml b/demo_r1/demo_reports/testqrcode.lrxml new file mode 100644 index 0000000..0754937 --- /dev/null +++ b/demo_r1/demo_reports/testqrcode.lrxml @@ -0,0 +1,1156 @@ + + + + + + + page2 + + + + + + + + + + Reportpage2 + + + + BarcodeItem1 + + + + + Reportpage2 + + + + + + + + $V{billno} + + + + SF 138 222 222 8888 + + + + + + + + + + + + + + ImageItem7 + + + + + Reportpage2 + + + + + + + + 89504e470d0a1a0a0000000d4948445200000046000000460806000000712ee284000000e16943435073524742000018956360603ccd00044c0e0c0cb979254541ee4e0a1191510a0c482031b9b8800137606460f8760d4432305cd60d2c61e5c7a3161be02c025a08a43f00b1483a98cdc802622741d81220767949410990ad036227171481d8401733f01485043903d93e40b6423a123b09899d925a9c0c64e700d9f108bfe5cf6760b0f8c2c0c03c112196348d81617b3b0383c41d8498ca420606fe5606866d9711629ffdc1fe65143b54925a510212f1d3776428482c4a044b338302342d8d81e1d3720606de480606e10b0c0c5cd1107780016b3130a0490c2742000072d83684a31f47b3000000097048597300001d8700001d87018fe5f16500000cad49444154789ced5c6d905c55997e9edbdd3343325da112664027aef4507154cc66d7dbb7279329b0a18c30959e94123aa45c3eb2b28beca20691f2831fd2580b9622684a112c579622bab5a4335884892163245d64c7247dfb2a54448d498694c088994039958c4c7fddd71f3977726732ddd31fb78760f1fc99734e9ff39ee7bc73eef978cf7b0e314f10111a8671a988e800ba487689c8250016910c8a481000489e14919300c6491e159143000e91b44cd37c91a4cc075f3652b8aeeb8b48ae03f03111b902407b9d228f93dc03604844062ccb1aaf9fe5ecf05c31aa675c2d221b49ae159196b32a250b004644e40f005e77f512b87acf1292ef03d02922fe59644c8ac876928f99a6f98cd73dc933c52412096d707070bd88dc0560f98c9fc700ec21f9acdfef7faea5a5e5702a952a5422371a8dfa27272797150a85cb45e44a005700689b91ed20c9fb62b1d8d6442261d7df1a8f14138944aeb26d7bb38874b99227483e49f2f1356bd63ceb15e14422a1edd8b1e34a11b95144ae01b0d0f98de4214dd336a5d3e95df5d6539762babbbb97168bc56f8bc8b52e727f06f0607373f3c3c3c3c327eb25580ebdbdbdc16c36fb1f00ee10910b5d1cb6f97cbecf1f3870e0955a65d7ac987038bc4e447e0460914a1a27794f20107864dfbe7d6fd62ab716f4f4f49c97cfe76f1591bb67f0b93993c90cd422b36ac5f4f5f5358f8d8d3d2022b7b9927fa269da9da669be560b09af6018c645b66d7f0bc0bf3869241f6a6b6bfbc2ce9d3bb3d5c8aa4a31d168f4fc93274f6e077099aaf40d4dd36e4aa7d383d5c869340cc3e81791c74464b14ada1b0c06d7a652a9bf542aa362c5e8bafe2e00bba0661c92fb485e679ae6cb55b19e271886f11e117942447a54d24100575996f5a74aca6b9564d275fd5d248771661a4e8642a1e8b9aa1400304df3e550281405905449cb490eab7ff09c985331d168f47c00bb4424049cfe66fbfbfb372493c95cada4e70bc96432d7dfdfbf81e44300a0dab04bb5a92cca7e4a7d7d7dcdc78f1fff39ce8c290f653299cf78417abe110e87bfe79a30f6b6b7b7af2e372097ed316363630f402905c0d6582cf6398f78ce3b1477e7b3ba4cb5ad244af618b54ed9069c1e6843a150f4edf0f994433c1e6f7ae9a59752ce804cf2da52eb9c5915d3ddddbdb45028fc06a74d026f90fca77379a0ad066ab67a5e4de5e37ebfff43b3ad9067fd948ac5e277a056909aa6ddf4f7a214e0f46c4572a38a2e526d3d0b67f59848247255b1587c46457f6259d6f55e910a87c37d00fe1900486e29a57095ef5322f25b4dd3064dd334bde2e040d7f51f43ad907d3edfd533379ed37a4c2291d06cdbdeaca2e39aa6dde9319f8f8bc8bd22722fc98bcbe45bad36a65fb56d3bec310700806adb3800d8b6bd3991484cd3c5b488b2a7740100c97bdec2bd4fb713f0fbfdc38da8c034cdd748de030022d2353838b8defdfb94624484cac804927f0e04028f545391611817452291cb2291c86586615c542b615dd703003eaca2e37d7d7dbfa955d65c0804028f28330944e42e11991a5aa6146318c6d538b3e47fb006d3c1da62b1f85cb1587c0ec0da3af82e77cca124f77965e09a0daa8d0f3af52a1d0098de6336aae0447373f3c38d225301a24e40441af219b9a1da3aa1eadbe8a4fb81296bfe5a1101c981465bdeca81e4b522e2843f120e87df53a58803994ce6d14a330f0f0f9f0c87c34f8ac80d24d7eababec8b2ac71bf22b0ced57db75449c433f4f4f474e472b9954e5c443e5aad0c920b0054ac1855e67111b941445ad471cfa39a227095ca33b666cd9a67ab25e31572b9dc3a34f8ac6b36a8368f016774e1171186c3e1a8cab3a79183dd5c20b9def5197d56d3b4174ae5b56dfb4e1159abf2dea869da31957ebcda7a138984adebfa1e00eb014445847ec3302e853a2124f996f5964824122e168bbd2a7a2c168b7dbfdc3f291c0edfee844564673a9d3e514ffd249f1591f500da0dc3b8545367c90000bfdfff5c3dc2eb816ddb5f71457f5041cf75d64af94c26f37abdf5bbdb2e22ba06c059e9165a5a5a0ed75b412d58b972e50744e4138a4771c182053faaa0d8452aff6b5e1ccfb6b4b41c5647c700d0a591744e0f8f567a6cea350a85c25d5083ae88f82627272f2e975fd7f5808874a8a827db16d5f6a30040b24b53ae181091b7a4b784c3e1d522326d076fdbf6eda5f22b2c07d0acc2bff38a8ba30311b944c39993bbbabfd36ad1dbdb1b1491ff9ee5a7786f6fefbb4b952369386111d9ef212547078b3492530e3b1e565011b2d9ecb700fc838abe40f29b2a1cc866b3b795280600538a21e999621c1d900c6a8e2793e39f329f1011674c9b00b04144ee07f05795f6e99e9e9ef36629431159ada27f6d6d6d3de8219f93ea6fb0a203b74621180c6e2299d234edb39665fddeb2ac13241f55e496e4f3f94fcd2c1389447aa07a19c95f366ac2d0dcdda7111594432a952a2c5ebc38669ae6ff38697ebfff01d7b4f9355dd72f7097b16dfb3a274cf27fbde4e31e563477f7f1b2924a31343434e18eefdfbfff98883ca1382d26f90de7b7bebebe6692eb0180e49b4d4d4ddbbce4e21e563428bb2780255e56520f0281c0bd00f2002022ff6a18c62a003871e2c4cd22e2ac78b737c03ce2e8605c23e92c6a96795c49cdd8bf7fffef48deafa2b46dfbfbbaae2f10912f3b7948fed0eb7a953324481ed5941f2d005c128d46cff28ef40a3d3d3d1d003a2bcd1f0804fe8be4888aae20b95b441ca3d51ed3347fe1253fd5f64e001091437e008754c43f3939b90c1eae2495e1691dc9f5b95c6e15aab0b5ecdbb7ef4dc3306e13919d8a9fe3e7024dd3bee4154707939393cb5c6eb387349296f363a150b8bc56c122d2e4846ddbee0f87c3ff9fcbe55e06b059447a518301ca34cd67006c75a791dcd688033877db495a9a699a2f02380e00ca8fb66aa8e5fbe75d49b119ca38457200c0816a65939cd98317a923164fe16afb71d3345fd4488a724307802b669ec855824020f086884c9bd548be02e0614dd3fadadbdb2fc86432d7922c69919b0d86616c529e98ee06ac26f9782d3c4b41c9ba42f1de4372ea9b1a02701d80b61d3b765c096077358253a9d4a4aeeb49923a80ed22b23d93c9fcaa1eb28661fca76ddbee03f71700ac000011d9303838f83a004f9c98549b1d6ff321409d2b89c800c94915beb116e19d9d9db76632990f673299846559f52ae5df6ddbfe9e1327f97f9d9d9dbaa669538b3d11b92d1c0e27eaa9c725eb4655cfa4880c004a3196658d8bc87695e99adededeaa57c1c964b2e80549c3306eb16dfb0750e313c92742a1d0f5c964b2689ae697494e59f744e46e5dd7ebf2f252a68f6b94bcedce8d96a9ef94e4632ab850b9a1cf2b56ad5af55e5dd707dd4a01906c6d6dbddeadf45028f469924fba8a6ed675fdfe5ac71cd5d685c0341d9c518c9a1a9d2dfc1db36df91b81783ceed375fd8e6c36fb2280354e3ac9816030f8c999bbe76432596c6b6bfb24803daee43b9f7efae9a7aaede9aa8d77a8e841a50300d37b8c90bc0f0044e4c27c3e7f6b3595d482eeee6e7d6464240de0019cb9459227794f6b6beb865226859d3b7766972c59d24ff22957722c9bcdfe72e5ca9517575abfba7f70210090bccf6d549fd6fd62b1d85692ce4af8ee7adc39e682889c5f28145238e3f20192bff6f97c46269349cc6567191a1a9a88c562d7b8f65410910fe5f3f9b4611846b9b2c069b715672940f2502c169bb6909ce951656b9ab6494517a90b0b0d01c9bf00b857457300bedadada1a49a7d315af751289849dc964be48f2dfa076e300f27ebf7f74aeb2aa6d8e9fe1a699e758be99055e7df5d5a31d1d1dcb017c10c03f2e5dbaf457a3a3a37fa8946c39747474bc5f44ce03f0479fcff7d3850b173e95cfe743246fb22c6bdbb163c76a3a1e1e1d1dfd754747c75e921f05b0369d4e97e5ab2e617c1d98da627c7d669ebf2b77d6783cde34972f725deeac070e1c7885e4cdc0692b9a883c118fc79b66cb7b2e612ea5c4e3f126752365310090bcb9d42db892737f269319705d4ee8191919d9e2e5fe64be914824b49191911fbbbcc21f2a77fbedac31c68d152b56fc626262e22300de0be0d2c3870f5f303a3afa336f29cf0f4e9d3af55d001b55746f7b7bfbf5478e1c29b95a2fab9823478e14bbbaba7e9acbe5d600b81040a4a3a3a3ed965b6e7926954acdcb8df97a914824b453a74e7dd775f3e4603018fcd8eeddbb27ca95abc878e45ce472ee2c01d8dad9d979c3b97ee9221e8f378d8c8c6cc1698720907c49447a2bb9e5f6ced5bf12a87830b52ceb4fc160f072007b81d303b2883c6f18467fd5ac1b0cb54e79dea594bdc160f0f24a9502bc73bdb824deb9905e025e3c61f01d11593725f0dc78c260c0e7f3ddfe963c61e04699472f06486e69d0a31737a87fc8b9f7e8851bef3c933207a4f287758e2a9fb7720feb2c037089bc9d1fd6990dce534cca0d3d0a0f9e62029022b94bde6e4f319582bccd1eeffa1bf4c093b2866fa69e0000000049454e44ae426082 + + + + + + + +
+ + + + + + + TextItem7 + + + + + Reportpage2 + + + + + + + + $V{destroutelabel} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ImageItem3 + + + + + Reportpage2 + + + + + + + + 89504e470d0a1a0a0000000d4948445200000091000000310806000000dac44bcd000000097048597300001f3800001f3801933f27f500000b1a49444154789ced5d4d8edcba11fe18b4806920c0f42adb514ee0be8195553601dc37b07c82d7596615cd0de41344ef046e9fc09a13a4e70491b759a98100b3e805b3607154cd2efee8c7eff9f97501448fa9d2c7225564158b255969adb124adb3ac70aafa97f3f9b8682337faae48cd55a27596e500f6000a006f02ac9f011c5ecee766568337faee68b21291f25400de8fbcf504a07a399feb490d1329a54a003b005b000fecd233801640adb5ee2218058cf24fa146c2574a59990a00b9239b95ef48f7b7b146988c05800dae27aac53b68ad0fa9c207c6ef64f108b38b8269ad4797bbd5aabc5badfabbd54acf28c7bbd52a1fdb3675ba03a0134a1dc1aa1271a4520878fd488c23806d40beb1785d088f308b11e3a701d4003641cc090a54cf541e5efabbd52ad8694181c60e6cf30b2ad1149cdef7e097948d29d014bc634891fe8011b4ceb21ac04f63ee89d03d80769d65db44fe86ee1943efc9c47caf740fd32f899e27621e94521ba1ded74e8cdec0f8bd22ad5251d659b6c3b20a64e91ec0619d65db97f3b9f731910d971cf7cf00f65aeb8efc875ae0ab616c7c0a3dc1f85431ea84ba134c7f2c06c7c9019400de0af7bd514a6db5d6ee2ed68ec7338cfc4756b781f169de0b78f774adb11534911e04de670095f5a7689c6b5c4fd63dccca7d4d89266cb3800f142b5eb3434bf101b20fb071f836904dde95c9806cceaab1269ee1ed0004fd3c7a1892c9b86a1746e96278650a9ea7af57e317c1144d5aaa399334d3d209c0079815610ebd17624c9ca46bb5d6fa62f5a27f3702ef3737695aebe86e466b5dc38c590a5e9380d760bad96bdcf1639812e552655489d659b6817f1b7f0250bc9ccfcdcbf9bcc37c452a03d72425f605315ba1ae1829cbb7a4a583af5e37204292df048f3f05c1dc02485022841f6ced44a3bdce5722bd27a5bd20f275c69034a8f914819626a5540ed92f6a27e26d6076ad2e75917f0340a99492ee2d853aef0291a24445e09aa8b13329d45e2ae5429de4548aed2ba52aa5544ba5524a95bed9398648812407ffab4e083c7af05a5cafd227a19d03aecde83d8096ef5e49a92aa1396f703865775604aeed70b9fa24474c03b415707ccbff16f20c4e0d1948f416972b85fdbb564ad55aeb2a06403b9cdca92e20af404078b5f745d643787bc957544aed01fccbe1bd07f04929f51566dca51df86350c9137666b15d55318237a5b49e5d88b4e3ea90be3bd3026623f1454a30f046b86d225687488439b0b3f2052e771377733ebc7d4cbea0398bec962c55ecefc704fea9d40a750f30cbf116789db12dd20392f90439dec0172f19474f3091e5a59cec2718850c5a03da79fd19693bc423120294a322d61e7abbceb23d00bc9ccf15809f17c094c86793df00f8b7524a03f88270268144279807f01166123cc238915f03f7fce47148c7d05b0047327d4b90c50b6e6e48ee03d226da5b005d7463b38039b365cbee69963667b414d718b714c7cc592c9057483854bc87bb2467cb4a4cd632c1048dc1bb0a5cea21183af6ecd196c22bdf824ad40714e978b75a55f41bc3899dbca7285229d41d637df5b4e73bf4f52abb072787dfb7e911f1b346e269778210bfd48fde2a3129d971ac8c294ad4ce50a4829467c3ea62ab54d491a307db381dee6196e902c6b97607e1304589a8bd461ad48958be638fe06a14c02b3c78fb943e403e0e9278af30c7285135d21cf577ab55708770173e87cb6332250cec4e18806a069ef8e067e0750bcb27ad1e0787475a85c4559f26a124a33811531ceb268187d33d804feb2c3b48d1674afbf03975cf2fe77337b23d894aa1ae9d81b77450b55b184fda91b9324b632eeee4b48931a5600248d89dd1437d8af109f40e40b7ceb2da860ae8b70ddce38d8aa612ed3ede39d5273d2122cca810eaa68c89a57cc6bd124d3d5cce97683c758b3ff54cec1e2602fa659d651a660b1e5a859a89ed00783d47923044e5a4638318660939323c29bea3946a201fc14c3a440de459b9f24971a132002d29a62c63aaddbd5b362d3618228838912d9c3c1b9865b6847ff721ef2ac8cebb78ccaf9272987cbb1f9b34b687b31d66f2b523f02ac2ab3c78bb089e7b8faf2f0d1f1fc26e3cbcd31c6b479152b6e8534a99e840568141f315ef6e6f0296d7218d3cd058b97258312e26e696d6330183f744fa307d8bef28d1e61b28529202d140f86688af3411bc290f488c37cd5022f12c6e069eb86d9f387ebc789fd3a8630fca812eb0ccd1c609c087917e503e82f7516b5d8e1128813e6aad7dc71d537670f6fc6c6a52998427e56a0300683c3e8ec43c01f8a0fdd98ee356226755daddad56ddc4d5a79d120f8259e27d11553b0b1b448e3318de01f177b0ba14cc04d95c198b08de1e69abd16b9075c438e62443e808a4a33e45c772d66bd41407b2394529079f3f03685ecee77672a344c2a160ef9b8113f100a0d3296f805e63e59057cda978deecc529780e768e6b5947e1ce7e17df12bd56bd85dcd97609c5b9d1f7498b29d18d7ebfb4443ed18d7ee77453a21bcda69b12dd6836dd94e846b3e9875622a554ad94eaa9cccd89be91877e5825a217f27e82c91ae8f16d5eb4bc11467c5ae6374876e5790e1c55dc68018a2a11fb06e1510fdfb0a9e832afdbc3ccf6ff01f823cc49729bc0ff5f007ff2f05fd569e70d5492cfe63bf5a0503d8644b29eee6da4282c7b6dd8bef4d868ad0f546f736a6a3dbc41ba813966d8501b47e2cbe9fe4a6b7da44870097a4191cadef260881237f65cca91e5f59aaf5ee8cb86f8eca43968ad6baa2f597f3a92b3a3fb2a8b4bf7771872b0f6d4cfd61dfb574a386729c14eafa9f3afe72b546713e37b0cf9c8967fcbf85d8c8ef11f04fed6a9eb1cd90a5c9ef568f8f36caece965cd9d8df3b5ce619d718f2b63bba5639f83dfbcd21a75efc8df11dd9df563939863d1393ea7db9d1eed95d2bd473acadbecc66e8d9f58e0a3f5f93b303129468c340720c4a65c1ed8cd5a0834ac6bfc175923bc790f8dd87c3316a4736cbdb414eead20824c063488dd8d3bf6d3fac427345e8e877e7e0f734065ce9f6cebd15fdfb1fb6dfeee470f8774c465eef3d64759ecbd6539fb38367de4f8b6fc7c1f6c3cad986c632ea586b93a6603f2bb2c3b02436f45bb0ba9696c827c65fd0df8f02bffd28d433bb66f96dca02c7b06d5ab207ae0f00fea3946a7c5fef504a154a29cd4a85c1a4944aa9168359dc020099529bf6f200e0b3be7e4df9a8b53eeacbe4f60b19b4d61561fdd5e2537bd6643c505f6c0aeb27fa22c916e681dafa2facde25db978373106debb939b7ed160e464bbf96af71ea454add9dd9c129a83c3341f843b67c0dbbf60ec3370739ff893d10cb5fc2e4337f76da7c47fc7c7040f7ff05e6419f603ec6d540a61e46b96de93c7cafd748210b76ad98f08999d857cc9e003c91126e6126cf579871b093d2ad771599934fbe4d8c67721644cc9c0926edd5ace03217e710e0af22fcb9c36f97556e8fedd25a62704c37184c895da2ad1f5021b0043be6ac61729720b3812145b565b2d70ebe35e9dc77e1e6ac65edbdfa7fc4bf014d2a6bba5cec483d1f0b6b8ab9afb38563e6a8cd963f038ee9982fb75d712c9394c8b1a31cbc86f3e03dfcb6530dab2b1d7eeefcb9b69bfb22af1d84fcba7495d271a6bcdcd1e43e0c77ba7338be092e7d22de7e8f61e7e62ad10672e25a05f9addd16d7138c4f14f761bbd89dc3e7ca69c77996128d8913d524a4f51580213b0eb85e6239ff91d5751e7e3b7be1d86e7b2f6fb365388f183ebc70d0c3d6b7757eaf489bcf166fa96deb7fb454b6847d24793aa5d4df611e76eef4b305dbbe6b130ee8e87e2b27a8bec0b0dde6ed6d889fafac4da05e1a0b8edd6318ff82fd370c5691f97f5be17e12c8c56d9ddf0bbae5134d2472ccff0993cb5dfdbad2fcbaf4c31e7bdce897a3db4a3491586e72a767e639ffd6e9ffc594b128a1b882550000000049454e44ae426082 + + + + + + + +
+ + + + + + + ImageItem16 + + + + + Reportpage2 + + + + + + + + + + + + + + + +
+ $V{procode} + + + + + + ShapeItem7 + + + + + Reportpage2 + + + + + + + + + + + + + + + + + + ImageItem1 + + + + + Reportpage2 + + + + + + + + 89504e470d0a1a0a0000000d4948445200000091000000310806000000dac44bcd000000097048597300001f3800001f3801933f27f500000c1649444154789ced5ddd71e33812fee68aa8129fac8dc0bc08cc8dc07404d644604e04a38bc07404a389c07404ab8960a8084e8a60e9084e7ee2031e7c0f68984d087f94a8d9dd2a7d552c8b20088060a3ffd04d7f7a7f7fc739910a9103c800e4acb800d0d2a1d100683b2979d905ff007c9a9a8888680a000b00b74734f10645506b00eb4ecafd6483bbe02c9884885221e6004a004b00d7273738c40f2862aa276ef7828970121111f12ce9b89a6a500ebc02a82ec4f4f7c3d144940a51e1d7108f895700652765f38bfbbdc081d144940a9141e92b37e718d008fce8a45cfcc563b8004032f6864eca361522968836504a72038fe5950a51a0b7e01608eb556f005631e3bde0fc88e644a4ffac3a294b3a5f00a87128ce36547eb46545dcaea4c324a81d800511734ebfabc836b340b53d1dbcdebe9372eb69a70530a7c38683c5438bc685ad6dde62c76f8c551b3c19d4026de958f37aaceec2d2c741dd03bcbfbf471db324a96749f23e4b92152bcb6749b2a5f2669624456c7b23fa2d6749d2521f352b9fb3be83fdce92a4a2babea3992549364b923d2bdbcf9264cefadc1bf764749fafdd7696244b3696d038d6b324c98f19bf316fe658f9511d53d776fc2b40d99a4a73000f74fa3515a20400a2d002c0ef9d94c53994dd4ecaba9332a33e4a76a9462f5227136dc435787b57002afa5d61c8799f229da3d700be913112837b000dcdfb6810d77a4684d133a6ae0bb13a91f99256a910db4e4acd7afdec6e02186c7a0935d11a37a910e548f3ffc952d6d2df1586a2f46b2ac416c05756d7a7976de86f8ee1cb794c85b0dda3c7c2fbd4c4eb321e5e30f4f8839d9796ba4b28915ba05f14a072b36e4dbf0bcbf5434488812cc43a7fe5e1194f3b469c45f4b308888e92d56d6c6d93b837c54461b6e57b368f38738af05992ac8cba73e3fa7c9624996decbebaa788b3ca51de44dc3b39487cec2c97ae49d99faa9f357a8e626213c3f5887b5623bacd46d4f5c154cc1baecc7752ee99186e2d7533475d2bbce28c69ec26bc26b6617d446faa527fa61eb0b758072b28396ea284f261c5f4d598659d9485a5bd3f2db787593c3e74c92ab26e66a9eb226240a91426b12c69ae1a008facfc06c0cf54089bd7bf46afefeaba7fa642eca0ac715ed78e08cbc8c6ca5796ba055915b6fa7b62b199855596749fcf3ad8cf947598b17b5b47ddb9e35982d68de3be7a167e76532494d4dfd628dfbfc75967fa588c193f17711691c68f2d9f27cb333aeb1e23ce5ce261c085c85afb89a1b2cb7105a59472e53807f03f288e720fbf757005b55a38577071c2a9bdd89971eef207713c437102d3211bc5c1a038fd1712a947a1937209e033eca2ff066cfec8eafd0c3be7bb4180bb8788a8b094edb878223dc4265a6ce08412f3327c703d581179ff9de518809ecd0c677938c2f4d6445147d68f1123ffc1e1f80762bf9372dd4999d33593401e2c750b00bf43454e70dc723dc9845327a289b27107f3e5d5963aafe815b639c6edb3ed30540c3358b641c863bdb3b45dc47412e9d37271bb55a01ffd0c2d28362ae0bdff0d8a00f4733ea642843cc5db58bf1cd52b68bbea435aa4421cf8f6a8cf452a448d21a1653854c201f8156bd76afbe894146893d0be132b05ab97414dbc4bdc69fce670f9e750a2e0c1b8d4e09088ae5321e6a706b39163d0b587771bf04b2dc7385e3b29f7e4fbfa8315d770bf032fc817b58e18434baa486ba91b3d7f3e22ca6c858181bdc2628d90f85b844c70d78ba7d551d2eae0683074006ae408b8206cd619d4ea5e12d19bfacb1d94dea75111b79824f2b293729d0ab1412f3e6f52212acfbea0cd3ad316660ee520dda1971c0586a2f995b87906e0d9a89b61b860df7cefdd474485a5cca6a471cc690056367c8aa248f7374651eba81a2422f843772b1c6e6f34a9104fe84de76b2842ab02fd8c4189a1f1e0136b312ac28da75e7942dd01a2f6ce184cca6f8df32b286795b7d3a9e0d1198e56da69650e56217add6845e71a8f3e85732c8863bf18c5f5114d35188e936307e08e2dc8d653f715c0e7d0e2778682a442b438d4099e4cf64a62c1b6aabde1aca44f71f1804eca4f746d0eb5c27328c2ad5c04930a617b00db3833fcba50106b38076ba3e0e79cc33a1cae5bf45cde0ba3adc2b8ec8be9ca317c866827b18f88c6bc9c2ddc7e9e1d5438ab19bf52c04d44350eb941e650ba5b4410fb05e7c358717600a2d61c6e17fd0d80ff8e1471a6157605b7a5d28e68f78233607478ac0d444805114a05bb69fc9c0a814887db1be2e35ba2cc60162dd968964fa6700ea5ebf8ac2cdbfe9daf2fdd26d0ef674d0636ee660cc7d5d9395373691f11d91c795e859508a4f610d32ad22c5e62e805df794ccc5862cb40961589d216ea45687dce67ad6d10ef0907d43cddb2dfa3c0081e9d9415d36d3831df02d81b7a8f93d8b9da910a91b130e7507cf49d67ee01f889c8f6a2a3567d27654dded11586a2e90a6a729c1100ecfe16946e3d51ae59c17e3f62287e5bf63b8322fe37f4ae8a4939490432a831be11d7f9d01d532178bd7b0c1db84e626709160f505b377acfec648c25a2e85545dca6a415c057f90211e1ac44fd8daf8e27e0bd8d182247cd7e975013dda01fa793882256f24fe3c5032a1ea970dd403e292d094a28e2d8b3711450736a6e117989bd93b2249176cfca3e05c61f844fb10e3ab852218a0885b91939a631c81ce5ed116dfda44373ce7b5676d4f6c389a8e96f0ea51adc4371a702f6e79e232e96aa84b25ecbd386d7c3c7895cb2d5dcb47ba6bd2a1777c98e1c5b0c0a5be18909035cccb936a1390e76ffe9be6ff49bc72c6bc46c953400fe4d62a860e59cab8f4e2025095119ca7f085ee36034114189a3c628fbc6f2d03e1467da5434cdf529f58bc25216da9a09a1865aad5c817582444f89e162c9ac9515824e3cbeaf4709029ac36c3a290bda1c7e0429bddae1eb5b3c16a7f006f15f6df1aa314e22a215f08a430b6b017b70d52d1dcf161d80a3f65d8c05ad249b2ba139b1e90ce33f89537aee79c070213d21bcdfc6db6ad9ef9c8821a373bd099b036a4e46b813b66c1c73f489a83fa038548e48c322e46c6c2c65d71e853684ef13fa4c4a47793351fb7f25eed0efa1b5acfc0a8ac0f4e2b9a1732d729d1ca35379815c89de77526a9fd992da788322ac124a1c1754c72b7e4344e452d44a1a5803b5b25c1b781c2f669cd1b160e9c126de4e8d1460882676fd82f481a19e74c7afc538fa685e5b7e4eed7e31aa6a42fb0e158bd5c48e598344a3e67c7a7b4a13e3634c14a7d7634d312e3691f640b12e2d39c3565062aec0501c6ca026a33e51d935b1405cd4e53168e96f50f9258e5c582e65ec77e9e0dc75ec0627f5b544afacff80b2d6f4cbfe0ada3188e0f41fba10e9b18fac7c4f44c5c7b52631e99c8f986d8f1ac3f4138d0a3d47da53bd3aa23dd03d0d80d13e0ae2422eab22d6daf0618c395fc03e371ca661a1d120ce15519072ad2db12f50447a0ff5bc15fa08cf1ae1f167f4778e6152c32d8c0d71c235fa8c602b4e21a2d1eefc3363135885a1f13e519d92ce1fa156fc41003c430bfbc6f31cfd4be7f1e61c3166be6e4b8ffd0bdb0d0080bc9372459c6e8d40a60b59915aaa94e81dabe638b5637341cfd1f8da0d121159692f18aea85704a2ddce058a475ee070d554815bf504bb5ede1a879fcab9875ab90bdb7d7aafd02c37c25ceab11b9ef4b2b5fea889710315135dd0583600e63417b91e3fa9198da5cd0643abef0a2aa6fb098ecfc7d0d6d31c218e1999ffce3fa9b29fb1cf9ecc54fe7819d3ce89f9f74ba38c27f33511f7ebba7cec0d4bd0e389928b59922c8d67f6e6a35b1239a33ecb12b8774b4988bec4ced8e4cd156bb3f1247fda0eeffc8e7938fdd24a56b6600fd852e6a7375bf208e2e1d9998d91b9a98920f88269125ba34cdfafbfcf636686eaef2f7927714a2262f77f8c65d6670aaf68ccaee3203bd77896353b9fd3dcc61068ed1befa86f36f2ec03e63535f186fe1bd4a3ada5b4cfff2fe10ebb5d74526e75ddd85d7e0a8168d9790ec5aeb7a0bc2a47f4e4a8142423c4f51ff981f774f80188c657f7980f7fea8dbe58afaefe6e630b7f76863e62f783c664945e70461c1bd9b8453c11e9ed9029f18611c975179c17a363ac3bf5bd9a25ecf9ddbf02dfa182f6a7f24c5f70224efeb70c648e96989edb9878814a1d6acfdccf052331d93f8861f9f2ae2d8963b00379c2a74a57be607a4cfe5f8680c19e5281b8c02e8d1d94bed5406532b4930fee82c97116223261c9eacca12c35cd5d46a5e45cf0f7c2ff01d81a47995330759a0000000049454e44ae426082 + + + + + + + +
+ + + + + + + TextItem1 + + + + + Reportpage2 + + + + + + + + ZJ 第1次打印 打印日期 $S{dateFormat(now(),"yyyy/MM/dd")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem2 + + + + + Reportpage2 + + + + + + + + 1/1母单号 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem3 + + + + + Reportpage2 + + + + + + + + $V{billno} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem4 + + + + + Reportpage2 + + + + + + + + $V{Sjr} $V{SjAdress} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem5 + + + + + Reportpage2 + + + + + + + + $V{Sjphone} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem6 + + + + + Reportpage2 + + + + + + + + $V{payType} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem8 + + + + + Reportpage2 + + + + + + + + A22 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem9 + + + + + Reportpage2 + + + + + + + + $V{destTeamCode} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BarcodeItem9 + + + + + Reportpage2 + + + + + + + + MMM={'k1':'523','k2':'523ML','k3':'017','k4':'T4','k5':'SF7444437951481','k6':'','k7':'407588b5'} + + + + sdf sdfsfsdfserwer wesf + + + + + + + + + + + + + + ShapeItem9 + + + + + Reportpage2 + + + + + + + + + + + + + + + + + + ImageItem9 + + + + + Reportpage2 + + + + + + + + + + + + + + + +
+ + + + + + + TextItem10 + + + + + Reportpage2 + + + + + + + + 1A + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem11 + + + + + Reportpage2 + + + + + + + + 已验视 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem12 + + + + + Reportpage2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ImageItem12 + + + + + Reportpage2 + + + + + + + + 89504e470d0a1a0a0000000d4948445200000046000000460806000000712ee284000000e16943435073524742000018956360603ccd00044c0e0c0cb979254541ee4e0a1191510a0c482031b9b8800137606460f8760d4432305cd60d2c61e5c7a3161be02c025a08a43f00b1483a98cdc802622741d81220767949410990ad036227171481d8401733f01485043903d93e40b6423a123b09899d925a9c0c64e700d9f108bfe5cf6760b0f8c2c0c03c112196348d81617b3b0383c41d8498ca420606fe5606866d9711629ffdc1fe65143b54925a510212f1d3776428482c4a044b338302342d8d81e1d3720606de480606e10b0c0c5cd1107780016b3130a0490c2742000072d83684a31f47b3000000097048597300001d8700001d87018fe5f16500000b7849444154789ced5c7d6c55e519ff3da7a72d0cae18b145a3ce158675630c9773ce6d6a07bbba0994b664018b64a292b018173fe69cff6cd9b263b2b06c995f53e2dce6c244825aab0b8501827207968e7bcec934c8b403da2c1a3fdae8ecdad20bbdf7fcf6c77d2fbd857edc8fd302865fd2dc73def39ee779dea7efc7739ef7795ec12481a45896358fa401a052442a49ce01304344422443002022bd247b01f488c83192ed00da45c4731ce7b0887032e49589246e18c60c1159096031c91b00941748b24b44f602789564b3e7793d854b393202578cea194b49ae1591e524a79cc1542401a083e4bf017c92d14b90d17b668ac835006693d447a01127b95544363a8eb333e89e1498626cdbd6b66ddbb68ae44f01cc3fed713780bd22f2baaeebfba64c9972241a8d26b2a11b8944f4783c3e3791482c227923801b00949d56ed9088acafafaf7fd1b66dbff0d604a4987038bcc4f7fdc749566614f78bc8cb22f26c5d5dddeb41096cdbb6b67dfbf61b49de4e72058069e96722d2ae69da0f63b1d8ae42f914a498aaaaaa2b93c9e4a3246fce10ee63008f9496963ed5dadada5ba88063a1a6a62674e2c4891f007880e4ac0c195e2a2a2afad1c18307dfcf9776de8a314d7325c96700cc50453d22f2507171f1efdbdada06f2a59b0faaababa70e0e0ede45f217a7c9b3ce75dde67c68e6ac98dadadad2eeeeee8749de9d51bc59d3b4071dc7f9281f218282655997f9beff5b00b7a6cb4464435959d98f77ecd87122175a39292612895cdcdbdbbb15c042c5f4534dd3ee88c562db72a133d1b02cab81e4469297a8a2fda1506879341afd2c5b1a592bc6308ccb01ec825a7144a44d446e711ce7bd9ca49e2458967515c9174856aba2430096789ef76136ef6bd954320ce3721169c5d032dc5451511139579502008ee3bc5751511101d0a48ae68b48abfa078f8b71151389442e06b08b6405901ab30d0d0dab9b9a9a4ee62bf464a1a9a9e9644343c36a11d90000aa0dbb549bc6c49843a9b6b6b6b4abab6b3786e6940daeebde1384d0930dd3349fcc5830f6979797df34d6843c668fe9eeee7e184a29005eacafafbf2f2039271d4af6f4b05aa8da362a46ed31ca4e7909484db415151591f361f88c85c6c6c692cecece687a4216919b47b37346544c5555d5958944e26da45c029f8ac875e7f2449b0bd46af5a65aca7b745dffda4816f2884329994c3e0665416a9a76c7e74529406ab51291b5ea76866aeb1938a3c784c3e125c96472a7baddec79de9a09921100609ae63d48f96bbe22223f775df7f989e497866118cf4159c84545454b4ffff01cd6636cdbd67cdf7f5cddf6689af6e024c8d843b201c09701dc3b09fc0000aa6d3d00e0fbfee3b66d0fd3c5b01be54fa9040011796832be7deaebeb378bc8db0040f27acbb2ae9b689e00e038ce4722f290e25bb96ddbb65599cf4f0d2592629ae65b4859881f17171757e4f2956c59d6f524ebf294b38ae4b7d5f57e11d99f0f1111d9ee38ce816cebabaff24ee5b238e4baee82b427f094cbd0b2aca51832f91fc9d5754032acbc77856221c985e3571b11dd00b2564c5b5bdb80699a8f00f83580f94a073b808ca14472adbaec2f2d2d7d2a4fc1ce3ba8b6f603c37490528cf2e62f070011692ed4f32622df45cae538e17f8a57de686d6ded15919795dccb0dc39801a8a124222bd3de7c11d954082300d0342d1e8bc58ee7f28e6118ef00b81680e7799e99ed7be170389e4c267315711844e45992b7919ca2b67bfeac0100c925aa4e775d5dddeb0571c95f3851bf93b2a19609d5e66e604817ba5a8d22aacedea0bcf900609ae633004ab2acfe45f57b95699ad9f4da93aeebaecb4fb2e1b06ddb370c632f805500222445b72c6b1ed40ea18804da5b48ae06f0851cdf9905201b6bfb3880401403a4da4e72158072cbb2e6e96a2f1900a0ebfabe7c094f9f3efdc9dedede3f00c0b265cbe2b1580c22d24e72ea38026924afc9287a371b7e2232a078ed6e696999a664c8fbeb5fd7f57d838383000092861886b11ec04f4424317dfaf4a9d9ee100681c6c6c6a2cecece8d24d7008088386565650b73f5e807814824a2f7f5f50da8ede05f89699acd24578848bbebbad74e9620e170b822994cfe0e407d66b9880c90dca769da1e007b62b1d85b9335219ba6f92ec94a11795957a118207964a2191b86512c223791fc9eeffbb760c8f23e86d4aa1056436f89effb4b94b0dda669be26227ff57dbfc5f3bc9ccc805ca0745049728e8ea19dbb4f8266148944a61f3f7e7cbeeffbdf8432f5495eac84808824486e08854276341afd2c1c0ecff47d7f31805ab56c96032823b95a4de4fda669b60078beacac6ce7040cb9b40e66e82aec022212d83eb3699af703b8afb7b7f74b18d94bd80de02fc5c5c54fb7b5b51d4d17c662b14f006c01b085a454555519246ff67dff7600970398a614b4baabababc7b2acbb1dc7d91c94dc2a1c052212d2d3914ce9f89420505252f2ca8913277e890ca588c861a4b6617601d8eb79dee0384212800bc08d44223febebeb5b86d4f2bc8ca42e2203baaeef084a6660480724436704e4048103070efcc734cdef93bc5ad334afb4b4d47be38d37fe9b2f3db5526e05b0d5b2accb48de21226fb5b5b57d1a9cd4c3a1abee33534442f912314d730bc9e59965646a21f17d1f030303300c63c4777385effba77e47a22922bb5dd7cdebc332735ad155f799991e52f980642972b470270a2385b6e5f0eea9694587f27b0298992f4111f947ba874c2444c4247995bade33cabcf8cf0258a475d0a3ab90d1052232375f6aaeebfea60061b286fab85c030024eff53c2fabcf876c2122d7a8a1744c5371b400302712894cc8647c3e40b57d3600906cd701b4ab1b3d1e8fcf05f04e50cc0cc3f82380ca712b9e061189bbaebb382839b2413c1e9f9b1136dbae8b88979e1f1289c42204a81800df0090f3724472c2ccfed1a0da0e0010114f771ce7b0699a5d00ca551cedd3413355c1ca7fcfa2aa01e0d2a0f96703d57600e8721ce7b02e22344d732fc95b00dc60dbb616a4174f31edf23c6fe978f50cc3d80960c978f582866ddb5a4b4bcb0d0020227b4584e9ed9357d56fd9f6eddb6f1cf9f5cf2f549bd3d1e6af026afb8464b388c4d5f5ed6747bcb387749bd5906f06943fc4f3bc1ec330b602584572454d4dcddd4146758b48495555d5b893703299bc68320cc54cd4d4d484e2f1f80a0020b9359dd172ca6e11918dca193c4d85a10766b491bc2c9148b841d10b12aaadd380940ed2e5a7b6681dc7d989542c2c003c505d5d3da613fbf300d5c607d4ed21a50300c37b0c4dd35c4f720bc959838383770178b410c6454545f702b828d7f7488eb8b548f2ebe9eb20fcc02aff6096a2b73e93e630ef9aca39fa978a91e9d134eddab3951f609ae6b30084e4ff000c000863288214a15028148d46fbf2a5aff20ede452aceb0bdbebefeab9966ca590f351b0da669ee26f99d919e89c84ed7756b0ba19f53a81900c462b15d22920ef1bcd5b2ac864204c81724db4e2bf245e43d007f9a3a756a4126856ad3ad402ab769a4c4af0be1acb984b31e3c78f07d11590700242f21f942636363b69bf3e72c1a1b1b4b5446ca25002022eb46cb821b3564de75dde68ce484ea8e8e8e4da747369e4fb06d5bebe8e8782e232a7cc358d96f4563115bb060c16bfdfdfddf0270358079478e1cb9f4830f3ef85bb0224f0efafafa9e00b056ddee2f2f2f5f73f4e8d151238ec654ccd1a34793959595af9c3c79b20ec02c00e12baeb8a2ecce3befdc198d46273dc0271fd8b6adf5f5f53d9191797228140a2ddeb3674fff58ef6595e1964ee44ae72c017871f6ecd9b79deb49178d8d8d251d1d1d9b900a0882887492acc926cbed42eadf28c87a32f53cefc35028b408c07e203521937cf36cd9396341258bbe99a194fda1506851b64a012ea4178f8a0b09e9a32088230c1e23b9f214c173e30883e6a2a2a2fbcfca11069918e3d08b6611d93441875edca6fe21e7dea11799b8704cca3860f607eb1c53316f631dac3317c01c9ecf07eb8c84f4514c2a9e2e82008e62021015915d3cdf8e621a0d3ccf0eeffa3f6d264b563a5a99c60000000049454e44ae426082 + + + + + + + +
+ + + + + + + TextItem13 + + + + + Reportpage2 + + + + + + + + $V{Jjr} $V{Jjphone} $V{JjAdress} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem14 + + + + + Reportpage2 + + + + + + + + 托寄物: $V{Goods} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem15 + + + + + Reportpage2 + + + + + + + + 增值服务: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem16 + + + + + Reportpage2 + + + + + + + + 计费重量: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem17 + + + + + Reportpage2 + + + + + + + + $V{Sjcompanyname} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem18 + + + + + Reportpage2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + datasources + + + + + + + + + + + + + + +
+
diff --git a/demo_r1/demo_reports/testqrcode.zip b/demo_r1/demo_reports/testqrcode.zip new file mode 100644 index 0000000..c9c79d9 Binary files /dev/null and b/demo_r1/demo_reports/testqrcode.zip differ diff --git a/demo_r2/demo_reports/Facture.lrxml b/demo_r2/demo_reports/Facture.lrxml new file mode 100644 index 0000000..9cf6c0a --- /dev/null +++ b/demo_r2/demo_reports/Facture.lrxml @@ -0,0 +1,2893 @@ + + + + + + + page1 + + + + + + + + + + ReportPage1 + + + + PageHeader2 + + + + HorizontalLayout2 + + + + ImageItem1 + + + + + HorizontalLayout2 + + + + + + + + + + company + logo + + + + +
+ + + + + + + VerticalLayout1 + + + + TextItem1 + + + + + VerticalLayout1 + + + + + + + + <b>$D{company.type} $D{company.nom}</b><br>$D{company.act} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem11 + + + + + VerticalLayout1 + + + + + + + + <table><tr><td><b>Adresse :</b> $D{company.adress}<br> +<b>Télephone :</b> $D{company.tel} <br> <b>Fax :</b> $D{company.fax}<br> +<b>E-mail :</b> $D{company.email} +<br><b> Site web :</b> $D{company.web}</td><td><b>RIB :</b>$D{company.mobile}<br><b>CIB :</b>$D{company.facebook}</td><td > +<b>RC :</b> $D{company.rc}<br> <b>AI :</b> $D{company.art_imp} <br> <b>NIF :</b> $D{company.mf} <br> <b>NIS :</b> $D{company.nis}</td></tr></table> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HorizontalLayout2 + + + + + + + + + + + + + + PageHeader2 + + + + + + + + + + + + + TextItem28 + + + + + PageHeader2 + + + + + + + + Le : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem2 + + + + + PageHeader2 + + + + + + + + Facture N° $S{fonction.STXT($D{doc.doc},2,500)} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem34 + + + + + PageHeader2 + + + + + + + + <table><tr><td><b>Client :</b></td><td> $D{doc.cl}</td></tr> +<tr><td><b>Adresse :</b></td><td> $D{doc.adr_fac}</td></tr> +<tr><td><b>Téléphone : </b></td><td>$D{doc.tel}</td></tr> +<tr><td><b>Fax : </b></td><td>$D{doc.fax}</td></tr> +<tr><td><b>Email : </b></td><td>$D{doc.email}</td></tr> +<tr><td><b>N° RC :</b></td><td> $D{doc.rc} </td></tr> +<tr><td><b>N° AI :</b></td><td> $D{doc.ai} </td></tr> +<tr><td><b>N° NIS :</b> </td><td>$D{doc.nis}</td></tr> +<tr><td><b>N° NIF :</b> </td><td>$D{doc.mf}</td></tr></table> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BarcodeItem2 + + + + + PageHeader2 + + + + + + + + + + doc + doc + 1 + + + + + + + + + + + + + + TextItem29 + + + + + PageHeader2 + + + + + + + + $D{doc.date} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ReportPage1 + + + + + + + + + + + + + + + + + + + + det + + + + HorizontalLayout1 + + + + TextItem14 + + + + + HorizontalLayout1 + + + + + + + + $D{stock.ref} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem15 + + + + + HorizontalLayout1 + + + + + + + + $D{stock.des} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem17 + + + + + HorizontalLayout1 + + + + + + + + $S{numberFormat($D{stock.qte},"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem19 + + + + + HorizontalLayout1 + + + + + + + + $S{numberFormat($D{stock.pu},"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem16 + + + + + HorizontalLayout1 + + + + + + + + $D{stock.tva} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem20 + + + + + HorizontalLayout1 + + + + + + + + $S{numberFormat($D{stock.pt},"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + det + + + + + + + + + + + + + + + ReportPage1 + + + + + + + + + + + + + + + + stock + + + + + + + + + + + + + PageFooter1 + + + + VerticalLayout38 + + + + HorizontalLayout4 + + + + TextItem4 + + + + + HorizontalLayout4 + + + + + + + + Total HT : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem3 + + + + + HorizontalLayout4 + + + + + + + + $S{numberFormat(SUM($D{stock.pt},"det"),"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout38 + + + + + + + + + + + + + HorizontalLayout5 + + + + TextItem5 + + + + + HorizontalLayout5 + + + + + + + + Remise : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem6 + + + + + HorizontalLayout5 + + + + + + + + $S{numberFormat($D{doc.remise},"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout38 + + + + + + + + + + + + + HorizontalLayout6 + + + + TextItem7 + + + + + HorizontalLayout6 + + + + + + + + Total TVA : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem8 + + + + + HorizontalLayout6 + + + + + + + + $S{numberFormat(SUM($D{stock.tot_tva},"det"),"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout38 + + + + + + + + + + + + + pied_taxes + + + + TextItem33 + + + + + pied_taxes + + + + + + + + $D{taxes.taxe} : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem38 + + + + + pied_taxes + + + + + + + + $S{ +if($D{taxes.taxe} == '') +ReportPage1_pied_taxes.isVisible = 0; +numberFormat($D{taxes.valeur},"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout38 + + + + + + + + + + + + + HorizontalLayout7 + + + + TextItem27 + + + + + HorizontalLayout7 + + + + + + + + Net à payer : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem13 + + + + + HorizontalLayout7 + + + + + + + + $S{numberFormat($D{doc.ttc},"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout38 + + + + + + + + + + + + + + + PageFooter1 + + + + + + + + + + + + VerticalLayout2 + + + + TextItem30 + + + + + VerticalLayout2 + + + + + + + + $D{doc.obs}<br> +Arrêter la présente facture à la somme de $S{fonction.nombreEnLettre($D{doc.ttc})} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + details_taxes + + + + HorizontalLayout41 + + + + TextItem41 + + + + + HorizontalLayout41 + + + + + + + + Taxe +$S{if($D{taxes.taxe} == '') +ReportPage1_details_taxes.isVisible = 0;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem43 + + + + + HorizontalLayout41 + + + + + + + + Unité + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem44 + + + + + HorizontalLayout41 + + + + + + + + Contenance + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem45 + + + + + HorizontalLayout41 + + + + + + + + Montant + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + details_taxes + + + + + + + + + + + + + ligne_taxes + + + + TextItem46 + + + + + ligne_taxes + + + + + + + + $D{taxes.taxe} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem47 + + + + + ligne_taxes + + + + + + + + $D{taxes.unite} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem48 + + + + + ligne_taxes + + + + + + + + $D{taxes.contenance} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem49 + + + + + ligne_taxes + + + + + + + + $S{fonction.Nombre($D{taxes.Valeur})} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + details_taxes + + + + + + + + + + + + + + + VerticalLayout2 + + + + + + + + + + + + reglements + + + + HorizontalLayout18 + + + + TextItem9 + + + + + HorizontalLayout18 + + + + + + + + Date +$S{ReportPage1_reglements.isVisible = $V{afficher_reglements}; +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem12 + + + + + HorizontalLayout18 + + + + + + + + N° chèque + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem18 + + + + + HorizontalLayout18 + + + + + + + + Montant + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + reglements + + + + + + + + + + + + + ligne_paiement + + + + TextItem21 + + + + + ligne_paiement + + + + + + + + $D{paiements.date} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem26 + + + + + ligne_paiement + + + + + + + + $D{paiements.N° chèque} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem32 + + + + + ligne_paiement + + + + + + + + $S{fonction.Nombre($D{paiements.Montant})} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + reglements + + + + + + + + + + + + + + + VerticalLayout2 + + + + + + + + + + + + + + PageFooter1 + + + + + + + + + + + + + + ReportPage1 + + + + + + + + + + + + + + + + + + HorizontalLayout3 + + + + TextItem14 + + + + + HorizontalLayout3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem15 + + + + + HorizontalLayout3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem17 + + + + + HorizontalLayout3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem19 + + + + + HorizontalLayout3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem16 + + + + + HorizontalLayout3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem20 + + + + + HorizontalLayout3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ReportPage1 + + + + + + + + + + + + + DataHeaderBand1 + + + + HorizontalLayout40 + + + + TextItem24 + + + + + HorizontalLayout40 + + + + + + + + Code + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem40 + + + + + HorizontalLayout40 + + + + + + + + Désignations + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem22 + + + + + HorizontalLayout40 + + + + + + + + Qte + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem39 + + + + + HorizontalLayout40 + + + + + + + + P.U HT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem37 + + + + + HorizontalLayout40 + + + + + + + + TVA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem31 + + + + + HorizontalLayout40 + + + + + + + + Montant HT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataHeaderBand1 + + + + + + + + + + + + + + + ReportPage1 + + + + + + + + + det + + + + + + + + + + + + + + PageFooter2 + + + + + ReportPage1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + datasources + + + + f + QMYSQL + $V{dossier} + $V{utilisateur} + + $V{serveur} + + + $V{port} + + + + + + company + select * from comp limit 1 + f + + + + stock + select stock_out.*,pt*stock_out.tva/100 as tot_tva, prod_ajout.* from stock_out left join prod_ajout on prod_ajout.ref = stock_out.ref where stock_out.doc = $V{doc} + f + + + + doc + select fv.*, client.* from fv left join client on fv.cl = client.client where doc = $V{doc} + f + + + + paiements + select date Date, descr Libellé, num_cheque 'N° chèque', debit Montant from oper_caisse where ref = $V{doc} and rowid not in (select id from reg_associer) union all select reg_associer.date,'Tranche de paiement associée',oper_caisse.num_cheque,mnt from reg_associer inner join oper_caisse on reg_associer.id = oper_caisse.rowid where reg_associer.ref = $V{doc} + f + + + + taxes + SELECT taxe_article.taxe,stock_out.mnt_taxe,stock_out.contenance,taxes.unite,sum(stock_out.qte * stock_out.qte_emb * stock_out.mnt_taxe * stock_out.contenance) Valeur FROM stock_out INNER JOIN taxe_article ON stock_out.ref = taxe_article.ref INNER JOIN taxes ON taxes.libelle = taxe_article.taxe WHERE doc = $V{doc} GROUP BY taxes.libelle + f + + + + + + + + + + + ReportPage1_PageFooter1.beforeRender.connect(BR1) +function BR1() +{ + var tableBuilder = DatasourceFunctions.createTableBuilder(ReportPage1_ligne_paiement); + tableBuilder.buildTable("paiements"); + +var tableTaxes = DatasourceFunctions.createTableBuilder(ReportPage1_ligne_taxes); + tableTaxes.buildTable("taxes"); +var tableTaxes = DatasourceFunctions.createTableBuilder(ReportPage1_details_taxes); + tableTaxes.buildTable("taxes"); +} + +ReportPage1_HorizontalLayout3.geometry.height+=LimeReport.getPageFreeSpace(ReportPage1); +ReportPage1_HorizontalLayout3.geometry.y = ReportPage1_DataHeaderBand1.geometry.y; + + + + + + + + +
+
diff --git a/demo_r2/demo_reports/invoice.zip b/demo_r2/demo_reports/invoice.zip new file mode 100644 index 0000000..fc9a75d Binary files /dev/null and b/demo_r2/demo_reports/invoice.zip differ diff --git a/designer/CMakeLists.txt b/designer/CMakeLists.txt index d63ea0b..9ae1a39 100644 --- a/designer/CMakeLists.txt +++ b/designer/CMakeLists.txt @@ -1,3 +1,5 @@ +project(LRDesigner) + set(CMAKE_AUTOMOC ON) set(LRDESIGNER_FILES @@ -7,14 +9,12 @@ set(LRDESIGNER_FILES mainicon.rc ) -add_executable(LRDesigner ${LRDESIGNER_FILES}) +add_executable(${PROJECT_NAME} ${LRDESIGNER_FILES}) -target_include_directories(LRDesigner PUBLIC ${PROJECT_SOURCE_DIR}/include) - -target_link_libraries(LRDesigner PUBLIC +target_link_libraries(${PROJECT_NAME} PUBLIC Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::PrintSupport Qt${QT_VERSION_MAJOR}::Qml - ${PROJECT_NAME}-qt${QT_VERSION_MAJOR} + limereport-qt${QT_VERSION_MAJOR} ) diff --git a/designer/main.cpp b/designer/main.cpp index 57a32c1..e0478c9 100644 --- a/designer/main.cpp +++ b/designer/main.cpp @@ -7,13 +7,14 @@ int main(int argc, char *argv[]) { QApplication a(argc, argv); + DesignerSettingManager manager; QTranslator limeReportTranslator; QTranslator qtBaseTranslator; - QTranslator qtDesignerTranslator; - QTranslator qtLinguistTranslator; - + QTranslator qtDesignerTranslator; + QTranslator qtLinguistTranslator; + QString translationPath = QApplication::applicationDirPath(); translationPath.append("/translations"); Qt::LayoutDirection layoutDirection = QLocale::system().textDirection(); @@ -22,12 +23,12 @@ int main(int argc, char *argv[]) if (limeReportTranslator.load("limereport_"+designerTranslation, translationPath)){ qtBaseTranslator.load("qtbase_" + designerTranslation, translationPath); - qtDesignerTranslator.load("designer_"+designerTranslation,translationPath); - + qtDesignerTranslator.load("designer_"+designerTranslation,translationPath); + a.installTranslator(&qtBaseTranslator); - a.installTranslator(&qtDesignerTranslator); + a.installTranslator(&qtDesignerTranslator); a.installTranslator(&limeReportTranslator); - + Qt::LayoutDirection layoutDirection = QLocale(manager.getCurrentDefaultLanguage()).textDirection(); a.setLayoutDirection(layoutDirection); } diff --git a/include/lrglobal.h b/include/lrglobal.h index b2fe56c..95f9801 100644 --- a/include/lrglobal.h +++ b/include/lrglobal.h @@ -125,12 +125,12 @@ namespace Const{ Q_DECLARE_FLAGS(PreviewHints, PreviewHint) Q_FLAGS(PreviewHints) - class ReportError : public std::runtime_error{ + class LIMEREPORT_EXPORT ReportError : public std::runtime_error{ public: ReportError(const QString& message); }; - class ReportSettings{ + class LIMEREPORT_EXPORT ReportSettings{ public: ReportSettings():m_suppressAbsentFieldsAndVarsWarnings(false){} void setDefaultValues(){m_suppressAbsentFieldsAndVarsWarnings = false;} @@ -140,13 +140,13 @@ namespace Const{ bool m_suppressAbsentFieldsAndVarsWarnings; }; - class IExternalPainter{ + class LIMEREPORT_EXPORT IExternalPainter{ public: virtual void paintByExternalPainter(const QString& objectName, QPainter* painter, const QStyleOptionGraphicsItem* options) = 0; virtual ~IExternalPainter(); }; - class IPainterProxy{ + class LIMEREPORT_EXPORT IPainterProxy{ public: virtual void setExternalPainter(IExternalPainter* externalPainter) = 0; virtual ~IPainterProxy(); @@ -168,7 +168,7 @@ namespace Const{ #endif - class Enums + class LIMEREPORT_EXPORT Enums { public: enum VariableDataType {Undefined, String, Bool, Int, Real, Date, Time, DateTime}; diff --git a/limereport/images/border_settings.png b/limereport/images/border_settings.png new file mode 100644 index 0000000..3bae2c8 Binary files /dev/null and b/limereport/images/border_settings.png differ diff --git a/limereport/items/editors/lritemsborderseditorwidget.cpp b/limereport/items/editors/lritemsborderseditorwidget.cpp index d8ec0f1..a49aef2 100644 --- a/limereport/items/editors/lritemsborderseditorwidget.cpp +++ b/limereport/items/editors/lritemsborderseditorwidget.cpp @@ -29,16 +29,22 @@ ****************************************************************************/ #include "lritemsborderseditorwidget.h" #include - +#include "lrbordereditor.h" namespace LimeReport{ void ItemsBordersEditorWidget::setItemEvent(BaseDesignIntf* item) { + if(QString(item->metaObject()->className()) == "LimeReport::ShapeItem") + { + setDisabled(true); + return; + } QVariant borders=item->property("borders"); if (borders.isValid()){ updateValues((BaseDesignIntf::BorderLines)borders.toInt()); setEnabled(true); } + m_item = item; } void ItemsBordersEditorWidget::properyChangedEvent(const QString& property, const QVariant& oldValue, const QVariant& newValue) @@ -66,9 +72,18 @@ void ItemsBordersEditorWidget::allBordesClicked() updateValues((BaseDesignIntf::BorderLines)borders); } -void ItemsBordersEditorWidget::buttonClicked(bool) -{ +void ItemsBordersEditorWidget::buttonClicked(bool){} +void ItemsBordersEditorWidget::editBorderClicked() +{ + BorderEditor be; + be.loadItem(m_item); + if ( be.exec() == QDialog::Rejected ) return; + updateValues(be.borderSides()); + m_item->setBorderLinesFlags(be.borderSides()); + m_item->setBorderLineSize(be.borderWidth()); + m_item->setBorderStyle((LimeReport::BaseDesignIntf::BorderStyle)be.borderStyle()); + m_item->setBorderColor(be.borderColor()); } void ItemsBordersEditorWidget::initEditor() @@ -109,6 +124,11 @@ void ItemsBordersEditorWidget::initEditor() m_allLines->setIcon(QIcon(":/report/images/allLines")); connect(m_allLines,SIGNAL(triggered()),this,SLOT(allBordesClicked())); addAction(m_allLines); + addSeparator(); + m_BorderEditor = new QAction(tr("Edit border"),this); + m_BorderEditor->setIcon(QIcon(":/report/images/borderEditor")); + connect(m_BorderEditor,SIGNAL(triggered()),this,SLOT(editBorderClicked())); + addAction(m_BorderEditor); setEnabled(false); @@ -117,20 +137,20 @@ void ItemsBordersEditorWidget::initEditor() void ItemsBordersEditorWidget::updateValues(BaseDesignIntf::BorderLines borders) { m_changing = true; - m_topLine->setChecked(borders&BaseDesignIntf::TopLine); - m_bottomLine->setChecked(borders&BaseDesignIntf::BottomLine); - m_leftLine->setChecked(borders&BaseDesignIntf::LeftLine); - m_rightLine->setChecked(borders&BaseDesignIntf::RightLine); + m_topLine->setChecked(borders & BaseDesignIntf::TopLine); + m_bottomLine->setChecked(borders & BaseDesignIntf::BottomLine); + m_leftLine->setChecked(borders & BaseDesignIntf::LeftLine); + m_rightLine->setChecked(borders & BaseDesignIntf::RightLine); m_changing = false; } BaseDesignIntf::BorderLines ItemsBordersEditorWidget::createBorders() { int borders = 0; - borders += (m_topLine->isChecked())?BaseDesignIntf::TopLine:0; - borders += (m_bottomLine->isChecked())?BaseDesignIntf::BottomLine:0; - borders += (m_leftLine->isChecked())?BaseDesignIntf::LeftLine:0; - borders += (m_rightLine->isChecked())?BaseDesignIntf::RightLine:0; + borders += (m_topLine->isChecked()) ? BaseDesignIntf::TopLine:0; + borders += (m_bottomLine->isChecked()) ? BaseDesignIntf::BottomLine:0; + borders += (m_leftLine->isChecked()) ? BaseDesignIntf::LeftLine:0; + borders += (m_rightLine->isChecked()) ? BaseDesignIntf::RightLine:0; return (BaseDesignIntf::BorderLines)borders; } @@ -157,6 +177,21 @@ void ItemsBordersEditorWidgetForDesigner::allBordesClicked() ItemsBordersEditorWidget::allBordesClicked(); m_reportEditor->setBorders(createBorders()); } + +void ItemsBordersEditorWidgetForDesigner::editBorderClicked() +{ + BorderEditor be; + be.loadItem(m_item); + if ( be.exec() == QDialog::Rejected ) return; + + m_reportEditor->setBordersExt( + be.borderSides(), + be.borderWidth(), + (LimeReport::BaseDesignIntf::BorderStyle)be.borderStyle(), + be.borderColor() + ); +} + #endif } //namespace LimeReport diff --git a/limereport/items/editors/lritemsborderseditorwidget.h b/limereport/items/editors/lritemsborderseditorwidget.h index 233e5f5..ef83dbc 100644 --- a/limereport/items/editors/lritemsborderseditorwidget.h +++ b/limereport/items/editors/lritemsborderseditorwidget.h @@ -49,10 +49,12 @@ protected slots: virtual void noBordesClicked(); virtual void allBordesClicked(); virtual void buttonClicked(bool); + virtual void editBorderClicked(); protected: void setItemEvent(BaseDesignIntf *item); void properyChangedEvent(const QString &property, const QVariant &oldValue, const QVariant &newValue); BaseDesignIntf::BorderLines createBorders(); + BaseDesignIntf *m_item; private: void initEditor(); void updateValues(BaseDesignIntf::BorderLines borders); @@ -62,8 +64,10 @@ private: QAction* m_topLine; QAction* m_bottomLine; QAction* m_allLines; + QAction* m_BorderEditor; bool m_changing; int m_borders; + }; #ifdef HAVE_REPORT_DESIGNER @@ -76,8 +80,10 @@ protected slots: void buttonClicked(bool); void noBordesClicked(); void allBordesClicked(); + void editBorderClicked(); private: ReportDesignWidget* m_reportEditor; + }; #endif diff --git a/limereport/items/images/border_settings.png b/limereport/items/images/border_settings.png new file mode 100644 index 0000000..a740874 Binary files /dev/null and b/limereport/items/images/border_settings.png differ diff --git a/limereport/items/lrbordereditor.cpp b/limereport/items/lrbordereditor.cpp new file mode 100644 index 0000000..63d8b88 --- /dev/null +++ b/limereport/items/lrbordereditor.cpp @@ -0,0 +1,156 @@ +#include "lrbordereditor.h" +#include "ui_lrbordereditor.h" +#include +#include "lrbasedesignintf.h" + +namespace LimeReport{ + +BorderEditor::BorderEditor(QWidget *parent) : + QDialog(parent), + ui(new Ui::BorderEditor), + m_borderStyle(1), + m_borderWidth(1) +{ + ui->setupUi(this); + connect( + ui->borderFrame, SIGNAL(borderSideClicked(LimeReport::BaseDesignIntf::BorderSide, bool)), + this, SLOT(checkToolButtons(LimeReport::BaseDesignIntf::BorderSide, bool)) + ); +} + +void BorderEditor::loadItem(LimeReport::BaseDesignIntf *item) +{ + m_item = item; + emit ui->borderFrame->borderSideClicked(LimeReport::BaseDesignIntf::BorderSide::TopLine, + item->borderLines() & LimeReport::BaseDesignIntf::TopLine); + emit ui->borderFrame->borderSideClicked(LimeReport::BaseDesignIntf::BorderSide::LeftLine, + item->borderLines() & LimeReport::BaseDesignIntf::LeftLine); + emit ui->borderFrame->borderSideClicked(LimeReport::BaseDesignIntf::BorderSide::RightLine, + item->borderLines() & LimeReport::BaseDesignIntf::RightLine); + emit ui->borderFrame->borderSideClicked(LimeReport::BaseDesignIntf::BorderSide::BottomLine, + item->borderLines() & LimeReport::BaseDesignIntf::BottomLine); + + QPen pen; + pen.setWidthF(item->borderLineSize()); + pen.setColor(item->borderColor()); + pen.setStyle((Qt::PenStyle)item->borderStyle()); + ui->borderFrame->setPen(pen); + m_borderColor = item->borderColor().name(); + ui->listWidget->setCurrentRow((Qt::PenStyle)item->borderStyle()); + ui->comboBox->setCurrentText(QString::number(item->borderLineSize())); + m_borderWidth = ui->comboBox->currentText().toDouble(); + m_borderStyle =ui->listWidget->currentRow(); + ui->colorIndicator->setStyleSheet(QString("background-color:%1;").arg(m_borderColor)); +} + +LimeReport::BaseDesignIntf::BorderLines BorderEditor::borderSides() +{ + int borders = 0; + borders += (ui->topLine->isChecked()) ? LimeReport::BaseDesignIntf::TopLine : 0; + borders += (ui->bottomLine->isChecked()) ? LimeReport::BaseDesignIntf::BottomLine : 0; + borders += (ui->leftLine->isChecked()) ? LimeReport::BaseDesignIntf::LeftLine : 0; + borders += (ui->rightLine->isChecked()) ? LimeReport::BaseDesignIntf::RightLine : 0; + return (LimeReport::BaseDesignIntf::BorderLines) borders; +} + +LimeReport::BaseDesignIntf::BorderStyle BorderEditor::borderStyle() +{ + return (LimeReport::BaseDesignIntf::BorderStyle) m_borderStyle; +} + +QString BorderEditor::borderColor() +{ + return m_borderColor; +} + +double BorderEditor::borderWidth() +{ + return m_borderWidth; +} + +BorderEditor::~BorderEditor() +{ + delete ui; +} + +void BorderEditor::on_listWidget_currentRowChanged(int currentRow) +{ + QPen pen = ui->borderFrame->pen(); + pen.setStyle((Qt::PenStyle)currentRow); + m_borderStyle = currentRow; + ui->borderFrame->setPen(pen); +} + +void BorderEditor::on_comboBox_currentTextChanged(const QString &arg1) +{ + QPen pen = ui->borderFrame->pen(); + pen.setWidthF(arg1.toDouble()); + ui->borderFrame->setPen(pen); + m_borderWidth = arg1.toDouble(); +} + +void BorderEditor::checkToolButtons(LimeReport::BaseDesignIntf::BorderSide side, bool check) +{ + switch(side) + { + case BaseDesignIntf::BorderSide::TopLine: + ui->topLine->setChecked(check); + break; + case BaseDesignIntf::BorderSide::BottomLine: + ui->bottomLine->setChecked(check); + break; + case BaseDesignIntf::BorderSide::LeftLine: + ui->leftLine->setChecked(check); + break; + case BaseDesignIntf::BorderSide::RightLine: + ui->rightLine->setChecked(check); + break; + } +} + +void BorderEditor::on_topLine_clicked(bool checked){ + emit ui->borderFrame->borderSideClicked(LimeReport::BaseDesignIntf::BorderSide::TopLine, checked); +} + +void BorderEditor::on_bottomLine_clicked(bool checked){ + emit ui->borderFrame->borderSideClicked(BaseDesignIntf::BorderSide::BottomLine, checked); +} + +void BorderEditor::on_leftLine_clicked(bool checked){ + emit ui->borderFrame->borderSideClicked(BaseDesignIntf::BorderSide::LeftLine, checked); +} + +void BorderEditor::on_rightLine_clicked(bool checked){ + emit ui->borderFrame->borderSideClicked(BaseDesignIntf::BorderSide::RightLine, checked); +} + + +void BorderEditor::on_allLines_clicked() +{ + emit ui->borderFrame->borderSideClicked(LimeReport::BaseDesignIntf::BorderSide::TopLine, true); + emit ui->borderFrame->borderSideClicked(LimeReport::BaseDesignIntf::BorderSide::BottomLine, true); + emit ui->borderFrame->borderSideClicked(LimeReport::BaseDesignIntf::BorderSide::LeftLine, true); + emit ui->borderFrame->borderSideClicked(LimeReport::BaseDesignIntf::BorderSide::RightLine, true); +} + +void BorderEditor::on_noLines_clicked() +{ + emit ui->borderFrame->borderSideClicked(LimeReport::BaseDesignIntf::BorderSide::TopLine, false); + emit ui->borderFrame->borderSideClicked(LimeReport::BaseDesignIntf::BorderSide::BottomLine, false); + emit ui->borderFrame->borderSideClicked(LimeReport::BaseDesignIntf::BorderSide::LeftLine, false); + emit ui->borderFrame->borderSideClicked(LimeReport::BaseDesignIntf::BorderSide::RightLine, false); +} + + +void BorderEditor::on_selectColor_clicked() +{ + QColorDialog cd(this); + if(cd.exec() == QDialog::Rejected) return; + QPen pen = ui->borderFrame->pen(); + pen.setColor(cd.selectedColor().name()); + m_borderColor = pen.color().name(); + ui->colorIndicator->setStyleSheet(QString("background-color:%1;").arg(m_borderColor)); + ui->borderFrame->setPen(pen); +} + +} // namespace LimeReport diff --git a/limereport/items/lrbordereditor.h b/limereport/items/lrbordereditor.h new file mode 100644 index 0000000..2baf2f3 --- /dev/null +++ b/limereport/items/lrbordereditor.h @@ -0,0 +1,49 @@ +#ifndef LRBORDEREDITOR_H +#define LRBORDEREDITOR_H + +#include +#include "lrbasedesignintf.h" + +namespace LimeReport{ + +namespace Ui { + class BorderEditor; +} + + +class LIMEREPORT_EXPORT BorderEditor : public QDialog +{ + Q_OBJECT + +public: + explicit BorderEditor(QWidget *parent = nullptr); + void loadItem(LimeReport::BaseDesignIntf *item); + LimeReport::BaseDesignIntf::BorderLines borderSides(); + LimeReport::BaseDesignIntf::BorderStyle borderStyle(); + QString borderColor(); + double borderWidth(); + ~BorderEditor(); + +private slots: + void on_listWidget_currentRowChanged(int currentRow); + void on_comboBox_currentTextChanged(const QString &arg1); + void on_noLines_clicked(); + void on_topLine_clicked(bool checked); + void on_bottomLine_clicked(bool checked); + void on_leftLine_clicked(bool checked); + void on_rightLine_clicked(bool checked); + void on_allLines_clicked(); + void checkToolButtons(LimeReport::BaseDesignIntf::BorderSide side, bool check); + void on_selectColor_clicked(); + +private: + Ui::BorderEditor *ui; + LimeReport::BaseDesignIntf *m_item; + QString m_borderColor; + int m_borderStyle; + double m_borderWidth; +}; + +} // namespace LimeReport + +#endif // LRBORDEREDITOR_H diff --git a/limereport/items/lrbordereditor.ui b/limereport/items/lrbordereditor.ui new file mode 100644 index 0000000..fb975d3 --- /dev/null +++ b/limereport/items/lrbordereditor.ui @@ -0,0 +1,406 @@ + + + LimeReport::BorderEditor + + + + 0 + 0 + 381 + 352 + + + + Edit border + + + + + + + + Presets + + + true + + + + + + No lines + + + + :/report/images/noLines:/report/images/noLines + + + false + + + false + + + Qt::ToolButtonTextUnderIcon + + + + + + + Outline + + + + :/report/images/allLines:/report/images/allLines + + + Qt::ToolButtonTextUnderIcon + + + + + + + + + + Border + + + true + + + + + + + + + + ... + + + + :/report/images/topLine:/report/images/topLine + + + true + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + ... + + + + :/report/images/bottomLine:/report/images/bottomLine + + + true + + + + + + + + + + + + + + ... + + + + :/report/images/leftLine:/report/images/leftLine + + + true + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + ... + + + + :/report/images/rightLine:/report/images/rightLine + + + true + + + + + + + + + + + + + + + + + 0 + 0 + + + + + 120 + 16777215 + + + + Style + + + + + + + 0 + 0 + + + + + 0 + 125 + + + + + 125 + 16777215 + + + + 1 + + + + No style + + + + + Solid + + + + + Dash + + + + + Dot + + + + + Dash dot + + + + + Dash dot dot + + + + + + + + Width: + + + + + + + true + + + 1 + + + 2 + + + + 0.25 + + + + + 0.5 + + + + + 1 + + + + + 1.5 + + + + + 2 + + + + + 3 + + + + + 4 + + + + + 5 + + + + + 6 + + + + + + + + Color: + + + + + + + + + + 20 + 20 + + + + + 10 + 10 + + + + background-color: rgb(0, 0, 0); + + + + + + + Select + + + + + + + + + + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + LimeReport::BorderFrameEditor + QWidget +
lrborderframeeditor.h
+ 1 +
+
+ + + + buttonBox + accepted() + LimeReport::BorderEditor + accept() + + + 119 + 322 + + + 377 + 309 + + + + + buttonBox + rejected() + LimeReport::BorderEditor + reject() + + + 48 + 334 + + + 66 + 348 + + + + +
diff --git a/limereport/items/lrborderframeeditor.cpp b/limereport/items/lrborderframeeditor.cpp new file mode 100644 index 0000000..46fd9b9 --- /dev/null +++ b/limereport/items/lrborderframeeditor.cpp @@ -0,0 +1,181 @@ +#include "lrborderframeeditor.h" +#include "ui_lrborderframeeditor.h" +#include +#include +#include +#include +#include "lrbasedesignintf.h" +#include "lrbordereditor.h" + +namespace LimeReport{ + +BorderFrameEditor::BorderFrameEditor(QWidget *parent) + : QWidget(parent) + , ui(new Ui::BorderFrameEditor) +{ + ui->setupUi(this); + scene = new QGraphicsScene(ui->graphicsView); + + QRect vRect = rect(); + + //Draw corder lines + //topLeft + scene->addLine(10, 5, 10, 10, QPen(Qt::gray)); + scene->addLine(5, 10, 10, 10, QPen(Qt::gray)); + //bottomLeft + scene->addLine(10,vRect.bottom() -5, 10, vRect.bottom()-10, QPen(Qt::gray)); + scene->addLine(5,vRect.bottom()-10, 10, vRect.bottom()-10, QPen(Qt::gray)); + //bottomRight + scene->addLine(vRect.right() - 10, vRect.bottom() - 5, vRect.right()- 10, vRect.bottom() - 10, QPen(Qt::gray)); + scene->addLine(vRect.right() - 5, vRect.bottom() - 10, vRect.right() - 10, vRect.bottom() - 10, QPen(Qt::gray)); + //topRight + scene->addLine(vRect.width() - 10, 5, vRect.width() - 10, 10, QPen(Qt::gray)); + scene->addLine(vRect.width() - 5, 10, vRect.width() - 10, 10, QPen(Qt::gray)); + scene->setSceneRect(vRect); + ui->graphicsView->setScene(scene); + QGraphicsSimpleTextItem * io = new QGraphicsSimpleTextItem(); + io->setAcceptedMouseButtons(Qt::LeftButton); + io->setPos(scene->sceneRect().center()); + io->setText(tr("Text")); + scene->addItem(io); + + QRectF bR = io->sceneBoundingRect(); + io->setPos( scene->sceneRect().center().x() - bR.width()/2, scene->sceneRect().center().y() - bR.height()/2 ); + connect( + this, SIGNAL(borderSideClicked(LimeReport::BaseDesignIntf::BorderSide, bool)), + this, SLOT(slotBorderSideClicked(LimeReport::BaseDesignIntf::BorderSide, bool)) + ); + +} + +BorderFrameEditor::~BorderFrameEditor() +{ + delete ui; +} + +void BorderFrameEditor::setPen(QPen pen) +{ + m_pen = pen; + updateBorders(); +} + +QPen BorderFrameEditor::pen() +{ + return m_pen; +} + +void BorderFrameEditor::setAllLines() +{ + if (!topLine) + topLine = createSideLine(LimeReport::BaseDesignIntf::BorderSide::TopLine); + if (!leftLine) + leftLine = createSideLine(LimeReport::BaseDesignIntf::BorderSide::LeftLine); + if (!bottomLine) + bottomLine = createSideLine(LimeReport::BaseDesignIntf::BorderSide::BottomLine); + if (!rightLine) + rightLine = createSideLine(LimeReport::BaseDesignIntf::BorderSide::RightLine); +} + +void BorderFrameEditor::unSetAllLines() +{ + if (topLine){ + scene->removeItem(topLine); + topLine = NULL; + } + if (leftLine){ + scene->removeItem(leftLine); + leftLine = NULL; + } + if (bottomLine){ + scene->removeItem(bottomLine); + bottomLine = NULL; + } + if (rightLine){ + scene->removeItem(rightLine); + rightLine = NULL; + } + +} + +void BorderFrameEditor::mousePressEvent(QMouseEvent *event) +{ + if (event->x() >= 10 && event->y() <30) + emit borderSideClicked(BaseDesignIntf::BorderSide::TopLine, !topLine); + + if ((event->x() >= 10 && event->x() < 30) && (event->y() > 10)) + emit borderSideClicked(BaseDesignIntf::BorderSide::LeftLine, !leftLine); + + if (event->x() >= 10 && (event->y() >80 && event->y() < rect().bottom())) + emit borderSideClicked(BaseDesignIntf::BorderSide::BottomLine, !bottomLine); + + if ((event->x() >= 130 && event->x() < rect().width()) && event->y() > 10) + emit borderSideClicked(BaseDesignIntf::BorderSide::RightLine, !rightLine); +} + +void BorderFrameEditor::slotBorderSideClicked(BaseDesignIntf::BorderSide side, bool show) +{ + + switch(side){ + + case BaseDesignIntf::BorderSide::TopLine: + if (show){ + if (!topLine) topLine = createSideLine(side); + } else { + if (topLine) scene->removeItem(topLine); + topLine = NULL; + } + break; + + case BaseDesignIntf::LeftLine: + if (show){ + if (!leftLine) leftLine = createSideLine(side); + } else { + if (leftLine) scene->removeItem(leftLine); + leftLine = NULL; + } + break; + + case BaseDesignIntf::BottomLine: + if (show){ + if (!bottomLine) bottomLine = createSideLine(side); + } else { + if (bottomLine) scene->removeItem(bottomLine); + bottomLine = NULL; + } + break; + + case BaseDesignIntf::RightLine: + if (show){ + if (!rightLine) rightLine = createSideLine(side); + } else { + if(rightLine) scene->removeItem(rightLine); + rightLine = NULL; + } + + } + updateBorders(); +} + +QGraphicsLineItem *BorderFrameEditor::createSideLine(LimeReport::BaseDesignIntf::BorderSide side) +{ + switch(side){ + case BaseDesignIntf::BorderSide::TopLine: + return scene->addLine(QLineF(10, 10, rect().width() - 10, 10), m_pen); + case BaseDesignIntf::BorderSide::LeftLine: + return scene->addLine(QLineF(10, 10, 10, rect().height() - 10), m_pen); + case BaseDesignIntf::BorderSide::RightLine: + return scene->addLine(QLineF(rect().width() - 10, 10 ,rect().width() - 10, rect().height() - 10), m_pen); + case BaseDesignIntf::BorderSide::BottomLine: + return scene->addLine(QLineF(10, rect().bottom() - 10, rect().width() - 10, rect().bottom() - 10), m_pen); + } +} + +void BorderFrameEditor::updateBorders() +{ + if (topLine) topLine->setPen(m_pen); + if (leftLine) leftLine->setPen(m_pen); + if (bottomLine) bottomLine->setPen(m_pen); + if (rightLine) rightLine->setPen(m_pen); +} + +} //namespace LimeReport diff --git a/limereport/items/lrborderframeeditor.h b/limereport/items/lrborderframeeditor.h new file mode 100644 index 0000000..9333677 --- /dev/null +++ b/limereport/items/lrborderframeeditor.h @@ -0,0 +1,46 @@ +#ifndef WIDGET +#define WIDGET + +#include +#include +#include +#include "lrbasedesignintf.h" +namespace LimeReport{ + +namespace Ui { class BorderFrameEditor; } + +class BorderFrameEditor : public QWidget +{ + Q_OBJECT + +public: + BorderFrameEditor(QWidget *parent = nullptr); + ~BorderFrameEditor(); + void setPen(QPen pen); + QPen pen(); + void setAllLines(); + void unSetAllLines(); +protected: + void mousePressEvent(QMouseEvent *event); +signals: + void borderSideClicked(LimeReport::BaseDesignIntf::BorderSide side, bool show); +private slots: + void slotBorderSideClicked(LimeReport::BaseDesignIntf::BorderSide side, bool show); + +private: + QGraphicsLineItem *createSideLine(LimeReport::BaseDesignIntf::BorderSide side); + void updateBorders(); +private: + Ui::BorderFrameEditor *ui; + QGraphicsScene *scene; + QGraphicsLineItem *topLine = NULL + ,*bottomLine = NULL + ,*leftLine = NULL + ,*rightLine = NULL; + QPen m_pen; + + + +}; +} // namespace LimeReport +#endif // WIDGET diff --git a/limereport/items/lrborderframeeditor.ui b/limereport/items/lrborderframeeditor.ui new file mode 100644 index 0000000..3f70f12 --- /dev/null +++ b/limereport/items/lrborderframeeditor.ui @@ -0,0 +1,73 @@ + + + LimeReport::BorderFrameEditor + + + + 0 + 0 + 150 + 100 + + + + + 0 + 0 + + + + BorderFrameEditor + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + 150 + 100 + + + + + 150 + 100 + + + + Qt::ScrollBarAlwaysOff + + + Qt::ScrollBarAlwaysOff + + + QAbstractScrollArea::AdjustToContents + + + QGraphicsView::AnchorViewCenter + + + + + + + + diff --git a/limereport/items/lrimageitem.cpp b/limereport/items/lrimageitem.cpp index 0459b67..4958807 100644 --- a/limereport/items/lrimageitem.cpp +++ b/limereport/items/lrimageitem.cpp @@ -111,14 +111,14 @@ void ImageItem::processPopUpAction(QAction *action) ItemDesignIntf::processPopUpAction(action); } -QImage getFileByResourcePath(QString resourcePath){ +QImage getFileByResourcePath(QString resourcePath) { QFileInfo resourceFile(resourcePath); if (resourceFile.exists()) return QImage(resourcePath); return QImage(); } -QImage ImageItem::drawImage() +QImage ImageItem::drawImage() const { if (image().isNull()) return getFileByResourcePath(m_resourcePath); @@ -364,7 +364,7 @@ void ImageItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, } if (shiftHeight > 0){ - point.setY(point.x()+shiftHeight/2); + point.setY(point.y()+shiftHeight/2); } else { cutY = fabs(shiftHeight/2); cutHeigth += shiftHeight; @@ -410,7 +410,7 @@ void ImageItem::setImage(QImage value) } } -QImage ImageItem::image(){ +QImage ImageItem::image() const{ return m_picture; } @@ -439,3 +439,8 @@ void ImageItem::setFormat(Format format) } } + +bool LimeReport::ImageItem::isEmpty() const +{ + return drawImage().isNull(); +} diff --git a/limereport/items/lrimageitem.h b/limereport/items/lrimageitem.h index 5640e8a..7d6127d 100644 --- a/limereport/items/lrimageitem.h +++ b/limereport/items/lrimageitem.h @@ -67,7 +67,7 @@ public: ImageItem(QObject *owner, QGraphicsItem *parent); void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); void setImage(QImage value); - QImage image(); + QImage image() const; void setResourcePath(const QString &value); QString resourcePath() const; QString datasource() const; @@ -108,7 +108,7 @@ protected: void loadPictureFromVariant(QVariant& data); void preparePopUpMenu(QMenu &menu); void processPopUpAction(QAction *action); - QImage drawImage(); + QImage drawImage() const; private: QImage m_picture; bool m_useExternalPainter; @@ -121,8 +121,12 @@ private: bool m_keepAspectRatio; bool m_center; Format m_format; - QString m_variable; + QString m_variable; + + // BaseDesignIntf interface + public: + bool isEmpty() const override; }; } diff --git a/limereport/items/lrpageeditor.cpp b/limereport/items/lrpageeditor.cpp new file mode 100644 index 0000000..3748e7a --- /dev/null +++ b/limereport/items/lrpageeditor.cpp @@ -0,0 +1,110 @@ +#include "lrpageeditor.h" +#include "ui_lrpageeditor.h" +#include "lrpagedesignintf.h" +#include "lrpageitemdesignintf.h" +#include +#include + +namespace LimeReport{ + +PageEditor::PageEditor(QWidget *parent, LimeReport::PageItemDesignIntf *page) : + QDialog(parent), + ui(new Ui::PageEditor) +{ + ui->setupUi(this); + m_page = page; + //Paper + QMetaEnum pageSizes = page->metaObject()->property(page->metaObject()->indexOfProperty("pageSize")).enumerator(); + + for (int i=0;iformat->addItem(pageSizes.key(i)); + } + ui->format->setCurrentIndex(m_page->pageSize()); + ui->width->setValue(m_page->width() / m_page->unitFactor()); + ui->height->setValue(m_page->height() / m_page->unitFactor()); + ui->portrait->setChecked(m_page->pageOrientation() == LimeReport::PageItemDesignIntf::Portrait); + ui->landscape->setChecked(m_page->pageOrientation() == LimeReport::PageItemDesignIntf::Landscape); + //Margins + ui->marginTop->setValue(m_page->topMargin()); + ui->marginRight->setValue(m_page->rightMargin()); + ui->marginLeft->setValue(m_page->leftMargin()); + ui->marginBottom->setValue(m_page->bottomMargin()); + ui->dropPrinterMargins->setChecked(m_page->dropPrinterMargins()); + + //Other + ui->endlessHeight->setChecked(m_page->endlessHeight()); + ui->extendedHeight->setValue(m_page->extendedHeight()); + ui->fullPage->setChecked(m_page->fullPage()); +} + +PageEditor::~PageEditor() +{ + delete ui; +} + +void PageEditor::applyChanges() +{ + m_page->setPageSize(static_cast(ui->format->currentIndex())); + m_page->setWidth(ui->width->value() * LimeReport::Const::mmFACTOR); + m_page->setHeight(ui->height->value() * LimeReport::Const::mmFACTOR); + m_page->setPageOrientation(ui->portrait->isChecked()? LimeReport::PageItemDesignIntf::Portrait : LimeReport::PageItemDesignIntf::Landscape); + m_page->setTopMargin(ui->marginTop->value()); + m_page->setBottomMargin(ui->marginBottom->value()); + m_page->setRightMargin(ui->marginRight->value()); + m_page->setLeftMargin(ui->marginLeft->value()); + m_page->setDropPrinterMargins(ui->dropPrinterMargins->isChecked()); + ui->endlessHeight->setChecked(ui->endlessHeight->isChecked()); + m_page->setExtendedHeight(ui->extendedHeight->value()); + ui->width->setValue(m_page->getItemWidth()); + ui->height->setValue(m_page->getItemHeight()); +} + +QSizeF PageEditor::getRectByPageSize(const LimeReport::PageItemDesignIntf::PageSize& size) +{ + if (size != PageItemDesignIntf::Custom) { + QPrinter printer; + printer.setOutputFormat(QPrinter::PdfFormat); +#if (QT_VERSION < QT_VERSION_CHECK(5, 15, 1)) + printer.setOrientation(ui->portrait->isChecked() ? QPrinter::Portrait : QPrinter::Landscape); + printer.setPaperSize((QPrinter::PageSize)size); + return QSizeF(printer.paperSize(QPrinter::Millimeter).width() * m_page->unitFactor(), + printer.paperSize(QPrinter::Millimeter).height() * m_page->unitFactor()); + +#else + printer.setPageOrientation((QPageLayout::Orientation)m_page->pageOrientation()); + printer.setPageSize(QPageSize((QPageSize::PageSizeId)size)); + return QSizeF(printer.pageLayout().pageSize().size(QPageSize::Millimeter).width() * m_page->unitFactor(), + printer.pageLayout().pageSize().size(QPageSize::Millimeter).height() * m_page->unitFactor()); +#endif + } else { + return QSizeF(m_page->getItemWidth(), m_page->getItemHeight()); + } +} + +void PageEditor::on_format_currentIndexChanged(int index) +{ + QPageSize ps = *new QPageSize(); + if(ui->format->currentText() != "Custom") + { + QSizeF pageSize = getRectByPageSize(static_cast(index)); + ui->width->setValue(pageSize.width() / m_page->unitFactor()); + ui->height->setValue(pageSize.height() / m_page->unitFactor()); + } + +} + + +void PageEditor::on_buttonBox_clicked(QAbstractButton *button) +{ + switch(ui->buttonBox->buttonRole(button)){ + case QDialogButtonBox::ApplyRole: + applyChanges(); + break; + case QDialogButtonBox::AcceptRole: + applyChanges(); + accept(); + } + +} + +} // namespace diff --git a/limereport/items/lrpageeditor.h b/limereport/items/lrpageeditor.h new file mode 100644 index 0000000..f2c07c2 --- /dev/null +++ b/limereport/items/lrpageeditor.h @@ -0,0 +1,36 @@ +#ifndef LRPAGEEDITOR_H +#define LRPAGEEDITOR_H + +#include +#include "lrpageitemdesignintf.h" +#include +namespace LimeReport{ + +namespace Ui { + class PageEditor; +} + +class LIMEREPORT_EXPORT PageEditor : public QDialog +{ + Q_OBJECT + +public: + explicit PageEditor(QWidget *parent = nullptr,LimeReport::PageItemDesignIntf *page = nullptr); + ~PageEditor(); + +private slots: +// void on_buttonBox_accepted(); + void on_format_currentIndexChanged(int index); + void on_buttonBox_clicked(QAbstractButton *button); + +private: + Ui::PageEditor *ui; + LimeReport::PageItemDesignIntf* m_page; + + void applyChanges(); + QSizeF getRectByPageSize(const LimeReport::PageItemDesignIntf::PageSize& size); +}; + +} // namespace LimeReport + +#endif // LRPAGEEDITOR_H diff --git a/limereport/items/lrpageeditor.ui b/limereport/items/lrpageeditor.ui new file mode 100644 index 0000000..e42f06c --- /dev/null +++ b/limereport/items/lrpageeditor.ui @@ -0,0 +1,338 @@ + + + LimeReport::PageEditor + + + + 0 + 0 + 306 + 356 + + + + Page setup + + + + + + 0 + + + + Paper + + + + + + + + Format + + + + + + + + + + + + Dimension + + + + + + Width: + + + + + + + + 100 + 16777215 + + + + true + + + mm + + + 99999999999999991611392.000000000000000 + + + 10.000000000000000 + + + + + + + Height: + + + + + + + + 100 + 16777215 + + + + true + + + mm + + + 99999999999999991611392.000000000000000 + + + 10.000000000000000 + + + + + + + + + + Orientation + + + + + + Portrait + + + true + + + + + + + Landscape + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + Margins + + + + + + Bottom: + + + + + + + Top: + + + + + + + Right: + + + + + + + mm + + + + + + + mm + + + + + + + mm + + + + + + + Left: + + + + + + + mm + + + + + + + Qt::Horizontal + + + + + + + Drop printer margins + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + Other + + + + + + Height options + + + + + + Endless Height + + + + + + + false + + + + + + Extended Height: + + + + + + + 99999999.000000000000000 + + + + + + + + + + + + + Full page + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Apply|QDialogButtonBox::Close|QDialogButtonBox::Ok + + + + + + + + + endlessHeight + clicked(bool) + horizontalFrame + setEnabled(bool) + + + 72 + 81 + + + 131 + 134 + + + + + diff --git a/limereport/items/lrshapeitem.cpp b/limereport/items/lrshapeitem.cpp index 875cb34..6c6b46e 100644 --- a/limereport/items/lrshapeitem.cpp +++ b/limereport/items/lrshapeitem.cpp @@ -89,6 +89,7 @@ void ShapeItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, painter->setBrush(brush); painter->setBackground(QBrush(Qt::NoBrush)); painter->setOpacity(qreal(opacity())/100); + QRectF rectangleRect = rect().adjusted((lineWidth() / 2), (lineWidth() / 2), -(lineWidth() / 2), @@ -114,6 +115,7 @@ void ShapeItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, } break; } + painter->restore(); ItemDesignIntf::paint(painter,option,widget); diff --git a/limereport/items/lrtextitem.cpp b/limereport/items/lrtextitem.cpp index fb14eb6..4677892 100644 --- a/limereport/items/lrtextitem.cpp +++ b/limereport/items/lrtextitem.cpp @@ -389,6 +389,7 @@ void TextItem::setTextFont(TextPtr text, const QFont& value) const { void TextItem::adaptFontSize(TextPtr text) const{ QFont _font = transformToSceneFont(font()); do{ +// qApp->processEvents(); setTextFont(text,_font); if (_font.pixelSize()>2) _font.setPixelSize(_font.pixelSize()-1); diff --git a/limereport/limereport.pri b/limereport/limereport.pri index 960699b..1a2817d 100644 --- a/limereport/limereport.pri +++ b/limereport/limereport.pri @@ -86,12 +86,15 @@ SOURCES += \ $$REPORT_PATH/lrreporttranslation.cpp \ $$REPORT_PATH/exporters/lrpdfexporter.cpp \ $$REPORT_PATH/lraxisdata.cpp \ - $$REPORT_PATH/lrpreparedpages.cpp + $$REPORT_PATH/lrpreparedpages.cpp \ + $$REPORT_PATH/items/lrpageeditor.cpp \ + $$REPORT_PATH/items/lrborderframeeditor.cpp \ + $$REPORT_PATH/items/lrbordereditor.cpp CONFIG(staticlib) { SOURCES += $$REPORT_PATH/lrfactoryinitializer.cpp } - + CONFIG(zint) { SOURCES += $$REPORT_PATH/items/lrbarcodeitem.cpp } @@ -163,7 +166,7 @@ HEADERS += \ $$REPORT_PATH/lrcollection.h \ $$REPORT_PATH/lrpagedesignintf.h \ $$REPORT_PATH/lrreportengine_p.h \ - $$REPORT_PATH/lrdatasourcemanager.h \ + $$REPORT_PATH/lrdatasourcemanager.h \ $$REPORT_PATH/lrreportrender.h \ $$REPORT_PATH/lrpreviewreportwindow.h \ $$REPORT_PATH/lrpreviewreportwidget.h \ @@ -189,11 +192,14 @@ HEADERS += \ $$REPORT_PATH/lrreporttranslation.h \ $$REPORT_PATH/lrreportdesignwindowintrerface.h \ $$REPORT_PATH/lrexporterintf.h \ - $$REPORT_PATH/lrexportersfactory.h \ + $$REPORT_PATH/lrexportersfactory.h \ $$REPORT_PATH/exporters/lrpdfexporter.h \ $$REPORT_PATH/lrpreparedpages.h \ $$REPORT_PATH/lraxisdata.h \ - $$REPORT_PATH/lrpreparedpagesintf.h + $$REPORT_PATH/lrpreparedpagesintf.h \ + $$REPORT_PATH/items/lrpageeditor.h \ + $$REPORT_PATH/items/lrborderframeeditor.h \ + $$REPORT_PATH/items/lrbordereditor.h CONFIG(staticlib) { HEADERS += $$REPORT_PATH/lrfactoryinitializer.h @@ -223,7 +229,10 @@ FORMS += \ $$REPORT_PATH/items/lrchartitemeditor.ui \ $$REPORT_PATH/items/lrchartaxiseditor.ui \ $$REPORT_PATH/items/lrimageitemeditor.ui \ - $$REPORT_PATH/scripteditor/lrscripteditor.ui + $$REPORT_PATH/scripteditor/lrscripteditor.ui \ + $$REPORT_PATH/items/lrpageeditor.ui \ + $$REPORT_PATH/items/lrborderframeeditor.ui \ + $$REPORT_PATH/items/lrbordereditor.ui RESOURCES += \ $$REPORT_PATH/report.qrc \ diff --git a/limereport/limereport.pro b/limereport/limereport.pro index 333b16d..9dd386b 100644 --- a/limereport/limereport.pro +++ b/limereport/limereport.pro @@ -72,16 +72,16 @@ win32 { } QMAKE_POST_LINK += $$QMAKE_COPY_DIR \"$${DEST_INCLUDE_DIR}\" \"$${DESTDIR}\" } else { - EXTRA_FILES ~= s,/,\\,g - BUILD_DIR ~= s,/,\\,g - DEST_DIR = $$DESTDIR/include - DEST_DIR ~= s,/,\\,g - DEST_INCLUDE_DIR ~= s,/,\\,g + EXTRA_FILES ~= s,/,\\,g + BUILD_DIR ~= s,/,\\,g + DEST_DIR = $$DESTDIR/include + DEST_DIR ~= s,/,\\,g + DEST_INCLUDE_DIR ~= s,/,\\,g for(FILE,EXTRA_FILES) { - QMAKE_POST_LINK += $$QMAKE_COPY \"$$FILE\" \"$${DEST_INCLUDE_DIR}\" $$escape_expand(\\n\\t) - } - QMAKE_POST_LINK += $$QMAKE_COPY_DIR \"$${DEST_INCLUDE_DIR}\" \"$${DEST_DIR}\" + QMAKE_POST_LINK += $$QMAKE_COPY \"$$FILE\" \"$${DEST_INCLUDE_DIR}\" $$escape_expand(\\n\\t) + } + QMAKE_POST_LINK += $$QMAKE_COPY_DIR \"$${DEST_INCLUDE_DIR}\" \"$${DEST_DIR}\" } } @@ -139,3 +139,4 @@ CONFIG(build_translations) { } #### EN AUTOMATIC TRANSLATIONS + diff --git a/limereport/lrbanddesignintf.cpp b/limereport/lrbanddesignintf.cpp index cfa9eb0..321b729 100644 --- a/limereport/lrbanddesignintf.cpp +++ b/limereport/lrbanddesignintf.cpp @@ -60,7 +60,6 @@ void BandMarker::paint(QPainter *painter, const QStyleOptionGraphicsItem* /**opt boundingRect().bottomLeft().y()-4, boundingRect().width(),4), Qt::lightGray ); - painter->setRenderHint(QPainter::Antialiasing); qreal size = (boundingRect().width()setColor(Qt::magenta); m_bandMarker->setHeight(height()); - m_bandMarker->setPos(pos().x()-m_bandMarker->width(),pos().y()); + m_bandMarker->setPos(pos().x()-m_bandMarker->width() - (itemMode() == ItemModes::PrintMode?boundingRect().width() : 0),pos().y()); if (scene()) scene()->addItem(m_bandMarker); m_bandNameLabel = new BandNameLabel(this); @@ -818,7 +817,7 @@ BandDesignIntf* BandDesignIntf::findParentBand() void BandDesignIntf::updateBandMarkerGeometry() { if (parentItem() && m_bandMarker){ - m_bandMarker->setPos(pos().x()-m_bandMarker->width(),pos().y()); + m_bandMarker->setPos(pos().x()-m_bandMarker->width() - (itemMode() == ItemModes::PrintMode?boundingRect().width() : 0),pos().y()); m_bandMarker->setHeight(rect().height()); } } @@ -839,7 +838,7 @@ QVariant BandDesignIntf::itemChange(QGraphicsItem::GraphicsItemChange change, co { if ((change==ItemPositionChange)&&((itemMode()&DesignMode)||(itemMode()&EditMode))){ if (m_bandMarker){ - m_bandMarker->setPos((value.toPointF().x()-m_bandMarker->boundingRect().width()), + m_bandMarker->setPos((value.toPointF().x()-m_bandMarker->boundingRect().width() - (itemMode() == ItemModes::PrintMode?boundingRect().width() : 0)), value.toPointF().y()); } } @@ -1142,7 +1141,7 @@ void BandDesignIntf::updateItemSize(DataSourceManager* dataManager, RenderPass p restoreLinks(); snapshotItemsLayout(); - arrangeSubItems(pass, dataManager); + arrangeSubItems(pass, dataManager); if (autoHeight()){ if (!keepTopSpace()) { qreal minTop = findMinTop() + m_shiftItems; diff --git a/limereport/lrbasedesignintf.cpp b/limereport/lrbasedesignintf.cpp index bc1328a..d66efeb 100644 --- a/limereport/lrbasedesignintf.cpp +++ b/limereport/lrbasedesignintf.cpp @@ -37,7 +37,7 @@ #include "lrhorizontallayout.h" #include "serializators/lrstorageintf.h" #include "serializators/lrxmlreader.h" - +#include "lrbordereditor.h" #include #include #include @@ -65,6 +65,7 @@ BaseDesignIntf::BaseDesignIntf(const QString &storageTypeName, QObject *owner, Q m_BGMode(OpaqueMode), m_opacity(100), m_borderLinesFlags(BorderLines()), + m_borderStyle(BorderStyle::Solid), m_storageTypeName(storageTypeName), m_itemMode(DesignMode), m_objectState(ObjectCreated), @@ -86,7 +87,9 @@ BaseDesignIntf::BaseDesignIntf(const QString &storageTypeName, QObject *owner, Q m_unitType(Millimeters), m_itemGeometryLocked(false), m_isChangingPos(false), - m_isMoveable(false) + m_isMoveable(false), + m_shadow(false) + { setGeometry(QRectF(0, 0, m_width, m_height)); @@ -101,7 +104,7 @@ BaseDesignIntf::BaseDesignIntf(const QString &storageTypeName, QObject *owner, Q QRectF BaseDesignIntf::boundingRect() const { qreal halfpw = pen().widthF() / 2; - halfpw += 2; + halfpw += 2; return rect().adjusted(-halfpw, -halfpw, halfpw, halfpw); } @@ -423,16 +426,19 @@ void BaseDesignIntf::paint(QPainter *ppainter, const QStyleOptionGraphicsItem *o { Q_UNUSED(option); Q_UNUSED(widget); + ppainter->save(); setupPainter(ppainter); drawBorder(ppainter, rect()); -// if (m_joinMarkerOn) { drawMarker(ppainter, Const::JOIN_COLOR);} -// if (isSelected() && !m_joinMarkerOn) {drawMarker(ppainter, Const::SELECTION_COLOR);} + if(m_shadow) + drawShadow(ppainter, rect(), 6); + // if (m_joinMarkerOn) { drawMarker(ppainter, Const::JOIN_COLOR);} + // if (isSelected() && !m_joinMarkerOn) {drawMarker(ppainter, Const::SELECTION_COLOR);} drawResizeZone(ppainter); ppainter->restore(); -// if (m_hovered) ppainter->drawImage( -// QRectF(QPointF(rect().topRight().x()-24, rect().bottomLeft().y()-24), -// QSizeF(24, 24)),QImage(":/items/images/settings.png")); + // if (m_hovered) ppainter->drawImage( + // QRectF(QPointF(rect().topRight().x()-24, rect().bottomLeft().y()-24), + // QSizeF(24, 24)),QImage(":/items/images/settings.png")); } QColor calcColor(QColor color){ @@ -442,9 +448,9 @@ QColor calcColor(QColor color){ int B = color.blue(); if (0.222*R + 0.707*G + 0.071*B <= 127) - return Qt::white; + return Qt::white; else - return Qt::black; + return Qt::black; } void BaseDesignIntf::prepareRect(QPainter *painter, const QStyleOptionGraphicsItem * /*option*/, QWidget * /*widget*/) @@ -485,22 +491,22 @@ void BaseDesignIntf::hoverMoveEvent(QGraphicsSceneHoverEvent *event) case ResizeRight: case ResizeLeft: setCursor(Qt::SizeHorCursor); - break; + break; case ResizeBottom: case ResizeTop: setCursor(Qt::SizeVerCursor); - break; + break; case ResizeRight | ResizeBottom: case ResizeLeft | ResizeTop: setCursor(Qt::SizeFDiagCursor); - break; + break; case ResizeLeft | ResizeBottom: case ResizeRight | ResizeTop: setCursor(Qt::SizeBDiagCursor); - break; + break; default: setCursor(Qt::ArrowCursor); - break; + break; } } } @@ -510,7 +516,7 @@ void BaseDesignIntf::hoverMoveEvent(QGraphicsSceneHoverEvent *event) void BaseDesignIntf::invalidateRects(QVector rects) { foreach(QRectF * rect, rects) - scene()->update(mapToScene(*rect).boundingRect()); + scene()->update(mapToScene(*rect).boundingRect()); } void BaseDesignIntf::hoverLeaveEvent(QGraphicsSceneHoverEvent *) @@ -543,8 +549,8 @@ void BaseDesignIntf::mouseMoveEvent(QGraphicsSceneMouseEvent *event) if (m_resizeDirectionFlags & ResizeLeft) { if ((event->scenePos().x()) <= (mapToScene(0, 0).x() + (width() - Const::MINIMUM_ITEM_WIDTH)) && - (width() + (event->lastScenePos().x() - event->scenePos().x()) > Const::MINIMUM_ITEM_WIDTH) - ) { + (width() + (event->lastScenePos().x() - event->scenePos().x()) > Const::MINIMUM_ITEM_WIDTH) + ) { qreal posRightCorner = mapToScene(0, 0).x() + width(); qreal posLeftCorner = div(mapToParent(event->pos()).x(), hStep).quot * hStep; if (posLeftCorner < 0 ) @@ -556,15 +562,15 @@ void BaseDesignIntf::mouseMoveEvent(QGraphicsSceneMouseEvent *event) if (m_resizeDirectionFlags & ResizeRight) { if ((event->scenePos().x() >= (mapToScene(0, 0).x() + Const::MINIMUM_ITEM_WIDTH)) || - (event->scenePos().x() >= (mapToScene(0, 0).x() + width()))) { + (event->scenePos().x() >= (mapToScene(0, 0).x() + width()))) { setWidth(div(event->scenePos().x() - mapToScene(0, 0).x(), hStep).quot * hStep); } } if (m_resizeDirectionFlags & ResizeTop) { if ((event->scenePos().y()) <= (mapToScene(0, 0).y() + (height() - Const::MINIMUM_ITEM_HEIGHT)) && - (height() + (event->lastScenePos().y() - event->scenePos().y()) > Const::MINIMUM_ITEM_HEIGHT) - ) { + (height() + (event->lastScenePos().y() - event->scenePos().y()) > Const::MINIMUM_ITEM_HEIGHT) + ) { qreal posBottomCorner = mapToScene(0, 0).y() + height(); qreal posTopCorner = div(mapToParent(event->pos()).y(), vStep).quot * vStep; if (posTopCorner < 0 ) @@ -576,8 +582,8 @@ void BaseDesignIntf::mouseMoveEvent(QGraphicsSceneMouseEvent *event) if (m_resizeDirectionFlags & ResizeBottom) { if ((event->scenePos().y() > (mapToScene(0, 0).y() + height())) || - (event->scenePos().y() > (mapToScene(0, 0).y() + Const::MINIMUM_ITEM_HEIGHT)) - ) { + (event->scenePos().y() > (mapToScene(0, 0).y() + Const::MINIMUM_ITEM_HEIGHT)) + ) { setHeight(div(event->scenePos().y() - mapToScene(0, 0).y(), vStep).quot * vStep); } } @@ -653,11 +659,11 @@ Qt::CursorShape BaseDesignIntf::getPossibleCursor(int cursorFlags) if ((cursorFlags == Fixed) || (scene()->selectedItems().count() > 1)) return Qt::ArrowCursor; if (((cursorFlags & ResizeRight) && (cursorFlags & ResizeTop)) || - ((cursorFlags & ResizeLeft) && (cursorFlags & ResizeBottom))) { + ((cursorFlags & ResizeLeft) && (cursorFlags & ResizeBottom))) { return Qt::SizeBDiagCursor; } if (((cursorFlags & ResizeLeft) && (cursorFlags & ResizeTop)) || - ((cursorFlags & ResizeRight) && (cursorFlags & ResizeBottom))) { + ((cursorFlags & ResizeRight) && (cursorFlags & ResizeBottom))) { return Qt::SizeFDiagCursor; } if ((cursorFlags & ResizeLeft) || (cursorFlags & ResizeRight)) { return Qt::SizeHorCursor; } @@ -702,7 +708,7 @@ QPointF BaseDesignIntf::modifyPosForAlignedItem(const QPointF& pos){ case ParentWidthItemAlign: result.setX(leftBorder); case DesignedItemAlign: - break; + break; } } return result; @@ -750,7 +756,7 @@ void BaseDesignIntf::updatePossibleDirectionFlags(){ setPossibleResizeDirectionFlags(ResizeBottom|ResizeTop); case CenterItemAlign: case DesignedItemAlign: - break; + break; } } @@ -764,6 +770,26 @@ void BaseDesignIntf::setIsChangingPos(bool isChangingPos) m_isChangingPos = isChangingPos; } +bool BaseDesignIntf::isShapeItem() const +{ + return QString(metaObject()->className()) == "LimeReport::ShapeItem"; +} + +bool BaseDesignIntf::hasShadow() +{ + return m_shadow; +} + +void BaseDesignIntf::setShadow(bool sh) +{ + if (m_shadow != sh){ + bool oldValue = m_shadow; + m_shadow = sh; + notify("shadow",oldValue,m_shadow); + update(); + } +} + bool BaseDesignIntf::isGeometryLocked() const { return m_itemGeometryLocked; @@ -943,14 +969,22 @@ void BaseDesignIntf::emitObjectNamePropertyChanged(const QString &oldName, const emit propertyObjectNameChanged(oldName,newName); } -int BaseDesignIntf::borderLineSize() const +qreal BaseDesignIntf::borderLineSize() const { return m_borderLineSize; } -void BaseDesignIntf::setBorderLineSize(int value) +void BaseDesignIntf::setBorderStyle(BorderStyle b) { - int oldValue = m_borderLineSize; + BorderStyle oldValue = m_borderStyle; + m_borderStyle = b; + update(); + notify("borderStyle",(BorderStyle)oldValue,(BorderStyle)b); +} + +void BaseDesignIntf::setBorderLineSize(qreal value) +{ + qreal oldValue = m_borderLineSize; m_borderLineSize = value; update(); notify("borderLineSize",oldValue,value); @@ -980,7 +1014,7 @@ void BaseDesignIntf::moveUp() void BaseDesignIntf::sizeRight() { if ((m_possibleResizeDirectionFlags & ResizeLeft) || - (m_possibleResizeDirectionFlags & ResizeRight)) { + (m_possibleResizeDirectionFlags & ResizeRight)) { if (page()) setWidth(width() + page()->horizontalGridStep()); } } @@ -988,7 +1022,7 @@ void BaseDesignIntf::sizeRight() void BaseDesignIntf::sizeLeft() { if ((m_possibleResizeDirectionFlags & ResizeLeft) || - (m_possibleResizeDirectionFlags & ResizeRight)) { + (m_possibleResizeDirectionFlags & ResizeRight)) { if(page()) setWidth(width() - page()->horizontalGridStep()); } } @@ -996,7 +1030,7 @@ void BaseDesignIntf::sizeLeft() void BaseDesignIntf::sizeUp() { if ((m_possibleResizeDirectionFlags & ResizeTop) || - (m_possibleResizeDirectionFlags & ResizeBottom)) { + (m_possibleResizeDirectionFlags & ResizeBottom)) { if (page()) setHeight(height() - page()->verticalGridStep()); } } @@ -1004,7 +1038,7 @@ void BaseDesignIntf::sizeUp() void BaseDesignIntf::sizeDown() { if ((m_possibleResizeDirectionFlags & ResizeTop) || - (m_possibleResizeDirectionFlags & ResizeBottom)) { + (m_possibleResizeDirectionFlags & ResizeBottom)) { if (page()) setHeight(height() + page()->verticalGridStep()); } } @@ -1026,32 +1060,65 @@ BaseDesignIntf::BorderLines BaseDesignIntf::borderLines() const return m_borderLinesFlags; } + void BaseDesignIntf::drawTopLine(QPainter *painter, QRectF rect) const { + if(isShapeItem()) + return; painter->setPen(borderPen(TopLine)); painter->drawLine(rect.x(), rect.y(), rect.width(), rect.y()); + if(borderStyle() == BorderStyle::Doubled) + painter->drawLine(rect.x()+3+m_borderLineSize, + rect.y()+3+m_borderLineSize, + rect.width()-3-m_borderLineSize, + rect.y()+3+m_borderLineSize); } void BaseDesignIntf::drawBootomLine(QPainter *painter, QRectF rect) const { + if(isShapeItem()) + return; + painter->setPen(borderPen(BottomLine)); painter->drawLine(rect.x(), rect.height(), rect.width(), rect.height()); + if(borderStyle() == BorderStyle::Doubled) + painter->drawLine(rect.x()+3+m_borderLineSize, + rect.height()-3-m_borderLineSize, + rect.width()-3-m_borderLineSize, + rect.height()-3-m_borderLineSize); } void BaseDesignIntf::drawRightLine(QPainter *painter, QRectF rect) const { + if(isShapeItem()) + return; painter->setPen(borderPen(RightLine)); + painter->drawLine(rect.width(), rect.y(), rect.width(), rect.height()); + if(borderStyle() == BorderStyle::Doubled) + painter->drawLine(rect.width()-3 - m_borderLineSize, + rect.y()+3+m_borderLineSize, + rect.width()-3-m_borderLineSize, + rect.height()-3-m_borderLineSize); } void BaseDesignIntf::drawLeftLine(QPainter *painter, QRectF rect) const { + if(isShapeItem()) + return; painter->setPen(borderPen(LeftLine)); painter->drawLine(rect.x(), rect.y(), rect.x(), rect.height()); + if(borderStyle() == BorderStyle::Doubled) + painter->drawLine(rect.x()+3+m_borderLineSize, + rect.y()+3+m_borderLineSize, + rect.x()+3+m_borderLineSize, + rect.height()-3-m_borderLineSize); } void BaseDesignIntf::drawDesignModeBorder(QPainter *painter, QRectF rect) const { + if(isShapeItem()) + return; drawTopLine(painter, rect); drawBootomLine(painter, rect); drawLeftLine(painter, rect); @@ -1060,7 +1127,8 @@ void BaseDesignIntf::drawDesignModeBorder(QPainter *painter, QRectF rect) const void BaseDesignIntf::drawRenderModeBorder(QPainter *painter, QRectF rect) const { - + if(isShapeItem()) + return; if (m_borderLinesFlags & RightLine) drawRightLine(painter, rect); if (m_borderLinesFlags & LeftLine) drawLeftLine(painter, rect); if (m_borderLinesFlags & TopLine ) drawTopLine(painter, rect); @@ -1077,6 +1145,29 @@ void BaseDesignIntf::drawBorder(QPainter *painter, QRectF rect) const painter->restore(); } +void BaseDesignIntf::drawShadow(QPainter *painter, QRectF rect, qreal shadowSize) const +{ + qreal shWidth = shadowSize; + QRectF rshadow(rect.topRight() + QPointF(0, shWidth), + rect.bottomRight() + QPointF(shWidth, 0)); + QLinearGradient rgrad(rshadow.topLeft(), rshadow.topRight()); + rgrad.setColorAt(0.0, QColor(0,0,0,255)); + rgrad.setColorAt(1.0, QColor(0,0,0,0)); + painter->fillRect(rshadow, QBrush(rgrad)); + QRectF bshadow(rect.bottomLeft() + QPointF(shWidth, 0), + rect.bottomRight() + QPointF(0, shWidth)); + QLinearGradient bgrad(bshadow.topLeft(), bshadow.bottomLeft()); + bgrad.setColorAt(0.0, QColor(0,0,0,255)); + bgrad.setColorAt(1.0, QColor(0,0,0,0)); + painter->fillRect(bshadow, QBrush(bgrad)); + QRectF cshadow(rect.bottomRight(), + rect.bottomRight() + QPointF(shWidth, shWidth)); + QRadialGradient cgrad(cshadow.topLeft(), shWidth, cshadow.topLeft()); + cgrad.setColorAt(0.0, QColor(0,0,0,255)); + cgrad.setColorAt(1.0, QColor(0,0,0,0)); + painter->fillRect(cshadow, QBrush(cgrad)); +} + void BaseDesignIntf::setGeometry(QRectF rect) { if (m_rect == rect) return; @@ -1138,8 +1229,11 @@ QPen BaseDesignIntf::borderPen(BorderSide side/*, bool selected*/) const QPen pen; if (m_borderLinesFlags & side) { pen.setColor(m_borderColor); - pen.setStyle(Qt::SolidLine); - pen.setWidth(m_borderLineSize); + if(borderStyle() != BorderStyle::Doubled) + pen.setStyle(static_cast(m_borderStyle)); + //pen.setCosmetic(true); + pen.setWidthF(m_borderLineSize+1); //To draw with point precision (By default: 2px = 1 pt) + } else { pen.setColor(Qt::darkGray); pen.setStyle(Qt::SolidLine); @@ -1235,13 +1329,13 @@ void BaseDesignIntf::drawMarker(QPainter *painter, QColor color) const painter->drawRect(QRectF(rect().right()-markerSize,rect().top()-markerSize,markerSize*2,markerSize*2)); painter->drawRect(QRectF(rect().left()-markerSize,rect().bottom()-markerSize,markerSize*2,markerSize*2)); painter->drawRect(QRectF(rect().left()-markerSize, - rect().bottom()-rect().height()/2-markerSize,markerSize*2,markerSize*2)); + rect().bottom()-rect().height()/2-markerSize,markerSize*2,markerSize*2)); painter->drawRect(QRectF(rect().right()-markerSize, - rect().bottom()-rect().height()/2-markerSize,markerSize*2,markerSize*2)); + rect().bottom()-rect().height()/2-markerSize,markerSize*2,markerSize*2)); painter->drawRect(QRectF(rect().left()+rect().width()/2-markerSize, - rect().top()-markerSize,markerSize*2,markerSize*2)); + rect().top()-markerSize,markerSize*2,markerSize*2)); painter->drawRect(QRectF(rect().left()+rect().width()/2-markerSize, - rect().bottom()-markerSize,markerSize*2,markerSize*2)); + rect().bottom()-markerSize,markerSize*2,markerSize*2)); pen.setStyle(Qt::DotLine); painter->setPen(pen); @@ -1331,7 +1425,7 @@ void BaseDesignIntf::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) { if (event->button() == Qt::LeftButton && ((itemMode()&EditMode)||(itemMode()&DesignMode)) - ) { + ) { showEditorDialog(); } QGraphicsItem::mouseDoubleClickEvent(event); @@ -1389,6 +1483,7 @@ void BaseDesignIntf::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) menu.addSeparator(); QAction* noBordersAction = menu.addAction(QIcon(":/report/images/noLines"), tr("No borders")); QAction* allBordersAction = menu.addAction(QIcon(":/report/images/allLines"), tr("All borders")); + QAction* editBorderAction = menu.addAction(QIcon(":/report/images/borderEditor"), tr("Edit borders...")); preparePopUpMenu(menu); QAction* a = menu.exec(event->screenPos()); if (a){ @@ -1409,6 +1504,13 @@ void BaseDesignIntf::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) page->setBorders(BaseDesignIntf::NoLine); if (a == allBordersAction) page->setBorders(BaseDesignIntf::AllLines); + if (a == editBorderAction) + { + BorderEditor be; + be.loadItem(this); + if (be.exec() == QDialog::Rejected) return; + page->setBordersExt(be.borderSides(), be.borderWidth(), (LimeReport::BaseDesignIntf::BorderStyle)be.borderStyle(), be.borderColor()); + } if (a == createHLayout) page->addHLayout(); if (a == createVLayout) @@ -1442,14 +1544,14 @@ void BaseDesignIntf::setMarginSize(int value) void BaseDesignIntf::drawResizeZone(QPainter* /*painter*/) { -// if (m_resizeAreas.count() > 0) { -// painter->save(); -// painter->setPen(QPen(Const::RESIZE_ZONE_COLOR)); -// (isSelected()) ? painter->setOpacity(Const::SELECTED_RESIZE_ZONE_OPACITY) : painter->setOpacity(Const::RESIZE_ZONE_OPACITY); -// painter->setBrush(QBrush(Qt::green, Qt::SolidPattern)); -// foreach(QRectF * resizeArea, m_resizeAreas) painter->drawRect(*resizeArea); -// painter->restore(); -// } + // if (m_resizeAreas.count() > 0) { + // painter->save(); + // painter->setPen(QPen(Const::RESIZE_ZONE_COLOR)); + // (isSelected()) ? painter->setOpacity(Const::SELECTED_RESIZE_ZONE_OPACITY) : painter->setOpacity(Const::RESIZE_ZONE_OPACITY); + // painter->setBrush(QBrush(Qt::green, Qt::SolidPattern)); + // foreach(QRectF * resizeArea, m_resizeAreas) painter->drawRect(*resizeArea); + // painter->restore(); + // } } @@ -1680,7 +1782,7 @@ void BaseDesignIntf::notify(const QString &propertyName, const QVariant& oldValu void BaseDesignIntf::notify(const QVector& propertyNames) { if (!isLoading()) - emit propertyesChanged(propertyNames); + emit propertyesChanged(propertyNames); } @@ -1719,17 +1821,18 @@ void Marker::paint(QPainter* painter, const QStyleOptionGraphicsItem*, QWidget*) painter->drawRect(rect()); painter->setBrush(color()); painter->setPen(Qt::transparent); + painter->setOpacity(1); painter->drawRect(QRectF(-markerSize,-markerSize,markerSize*2,markerSize*2)); painter->drawRect(QRectF(rect().right()-markerSize,rect().bottom()-markerSize,markerSize*2,markerSize*2)); painter->drawRect(QRectF(rect().right()-markerSize,rect().top()-markerSize,markerSize*2,markerSize*2)); painter->drawRect(QRectF(rect().left()-markerSize,rect().bottom()-markerSize,markerSize*2,markerSize*2)); painter->drawRect(QRectF(rect().left()-markerSize, - rect().bottom()-rect().height()/2-markerSize,markerSize*2,markerSize*2)); + rect().bottom()-rect().height()/2-markerSize,markerSize*2,markerSize*2)); painter->drawRect(QRectF(rect().right()-markerSize, - rect().bottom()-rect().height()/2-markerSize,markerSize*2,markerSize*2)); + rect().bottom()-rect().height()/2-markerSize,markerSize*2,markerSize*2)); painter->drawRect(QRectF(rect().left()+rect().width()/2-markerSize, - rect().top()-markerSize,markerSize*2,markerSize*2)); + rect().top()-markerSize,markerSize*2,markerSize*2)); painter->drawRect(QRectF(rect().left()+rect().width()/2-markerSize, rect().bottom()-markerSize,markerSize*2,markerSize*2)); } diff --git a/limereport/lrbasedesignintf.h b/limereport/lrbasedesignintf.h index c311f16..4314de9 100644 --- a/limereport/lrbasedesignintf.h +++ b/limereport/lrbasedesignintf.h @@ -49,7 +49,7 @@ class ReportEnginePrivate; class PageDesignIntf; class BaseDesignIntf; -class Marker : public QGraphicsItem{ +class LIMEREPORT_EXPORT Marker : public QGraphicsItem{ public: Marker(QGraphicsItem* parent = 0, BaseDesignIntf* owner = 0): QGraphicsItem(parent), m_owner(owner){} QRectF boundingRect() const; @@ -65,7 +65,7 @@ private: BaseDesignIntf* m_owner; }; -class SelectionMarker : public Marker{ +class LIMEREPORT_EXPORT SelectionMarker : public Marker{ public: SelectionMarker(QGraphicsItem* parent=0, BaseDesignIntf* owner = 0); QColor color() const; @@ -80,7 +80,7 @@ protected: class DataSourceManager; class ReportRender; -class BaseDesignIntf : +class LIMEREPORT_EXPORT BaseDesignIntf : public QObject, public QGraphicsItem, public ICollectionContainer, public ObjectLoadingStateIntf { Q_OBJECT Q_INTERFACES(QGraphicsItem) @@ -90,14 +90,25 @@ class BaseDesignIntf : Q_PROPERTY(qreal zOrder READ zValue WRITE setZValueProperty DESIGNABLE false) Q_PROPERTY(BorderLines borders READ borderLines WRITE setBorderLinesFlags) Q_PROPERTY(QString parentName READ parentReportItemName WRITE setParentReportItem DESIGNABLE false) - Q_PROPERTY(int borderLineSize READ borderLineSize WRITE setBorderLineSize) + Q_PROPERTY(qreal borderLineSize READ borderLineSize WRITE setBorderLineSize) Q_PROPERTY(bool isVisible READ isVisible WRITE setItemVisible DESIGNABLE false) + Q_PROPERTY(bool shadow READ hasShadow WRITE setShadow) Q_PROPERTY(QColor borderColor READ borderColor WRITE setBorderColor) Q_PROPERTY(bool geometryLocked READ isGeometryLocked WRITE setGeometryLocked) + Q_PROPERTY(BorderStyle borderStyle READ borderStyle WRITE setBorderStyle) friend class ReportRender; public: enum BGMode { TransparentMode, OpaqueMode}; + enum BorderStyle { NoStyle = Qt::NoPen, + Solid = Qt::SolidLine, + Dashed = Qt::DashLine, + Dot = Qt::DotLine, + + DashDot = Qt::DashDotLine, + DashDotDot = Qt::DashDotDotLine, + Doubled = 7 + }; enum BrushStyle{ NoBrush, @@ -147,21 +158,25 @@ public: #if QT_VERSION >= 0x050500 Q_ENUM(BGMode) Q_ENUM(BrushStyle) + Q_ENUM(BorderStyle) Q_ENUM(ResizeFlags) Q_ENUM(MoveFlags) Q_ENUM(BorderSide) Q_ENUM(ObjectState) Q_ENUM(ItemAlign) Q_ENUM(UnitType) + #else Q_ENUMS(BGMode) Q_ENUMS(BrushStyle) + Q_ENUM(BorderStyle) Q_ENUMS(ResizeFlags) Q_ENUMS(MoveFlags) Q_ENUMS(BorderSide) Q_ENUMS(ObjectState) Q_ENUMS(ItemAlign) Q_ENUMS(UnitType) + #endif // enum ExpandType {EscapeSymbols, NoEscapeSymbols, ReplaceHTMLSymbols}; Q_DECLARE_FLAGS(BorderLines, BorderSide) @@ -175,6 +190,7 @@ public: QString parentReportItemName() const; BrushStyle backgroundBrushStyle() const {return m_backgroundBrushStyle;} + BorderStyle borderStyle() const {return m_borderStyle;} void setBackgroundBrushStyle(BrushStyle value); QColor backgroundColor() const {return m_backgroundColor;} void setBackgroundColor(QColor value); @@ -240,6 +256,7 @@ public: PageDesignIntf* page(); BorderLines borderLines() const; + QString storageTypeName() const {return m_storageTypeName;} ReportEnginePrivate *reportEditor(); @@ -284,8 +301,9 @@ public: QString itemTypeName() const; void setItemTypeName(const QString &itemTypeName); - int borderLineSize() const; - void setBorderLineSize(int value); + qreal borderLineSize() const; + void setBorderStyle(BorderStyle b); + void setBorderLineSize(qreal value); void showEditorDialog(); ItemAlign itemAlign() const; virtual void setItemAlign(const ItemAlign &itemAlign); @@ -320,7 +338,9 @@ public: void setGeometryLocked(bool itemLocked); bool isChangingPos() const; void setIsChangingPos(bool isChangingPos); - + bool isShapeItem() const; + bool hasShadow(); + void setShadow(bool sh); Q_INVOKABLE QString setItemWidth(qreal width); Q_INVOKABLE QString setItemHeight(qreal height); Q_INVOKABLE qreal getItemWidth(); @@ -367,7 +387,9 @@ protected: void drawRightLine(QPainter *painter, QRectF rect) const; void drawLeftLine(QPainter *painter, QRectF rect) const; + void drawBorder(QPainter* painter, QRectF rect) const; + void drawShadow(QPainter* painter, QRectF rect, qreal shadowSize) const; void drawDesignModeBorder(QPainter* painter, QRectF rect) const; void drawRenderModeBorder(QPainter *painter, QRectF rect) const; void drawResizeZone(QPainter*); @@ -425,7 +447,8 @@ private: QFont m_font; QColor m_fontColor; bool m_fixedPos; - int m_borderLineSize; + qreal m_borderLineSize; + QRectF m_rect; mutable QRectF m_boundingRect; @@ -434,6 +457,7 @@ private: BGMode m_BGMode; int m_opacity; BorderLines m_borderLinesFlags; + BorderStyle m_borderStyle; QRectF m_bottomRect; QRectF m_topRect; @@ -470,6 +494,7 @@ private: bool m_itemGeometryLocked; bool m_isChangingPos; bool m_isMoveable; + bool m_shadow; signals: void geometryChanged(QObject* object, QRectF newGeometry, QRectF oldGeometry); @@ -490,7 +515,7 @@ signals: void afterRender(); }; -class BookmarkContainerDesignIntf: public BaseDesignIntf{ +class LIMEREPORT_EXPORT BookmarkContainerDesignIntf: public BaseDesignIntf{ Q_OBJECT public: BookmarkContainerDesignIntf(const QString& storageTypeName, QObject* owner = 0, QGraphicsItem* parent = 0) diff --git a/limereport/lrcollection.h b/limereport/lrcollection.h index 4e3aded..145443a 100644 --- a/limereport/lrcollection.h +++ b/limereport/lrcollection.h @@ -35,7 +35,7 @@ #include "lrglobal.h" -class ACollectionProperty{ +class LIMEREPORT_EXPORT ACollectionProperty{ public: ACollectionProperty(){} ACollectionProperty(const ACollectionProperty& ){} @@ -44,9 +44,12 @@ public: Q_DECLARE_METATYPE(ACollectionProperty) namespace LimeReport{ - -const int COLLECTION_TYPE_ID = qMetaTypeId(); -class ICollectionContainer{ +#if __cplusplus >= 201703L +const int inline COLLECTION_TYPE_ID = qMetaTypeId(); +#else +const int inline COLLECTION_TYPE_ID = qMetaTypeId(); +#endif +class LIMEREPORT_EXPORT ICollectionContainer{ public: virtual QObject* createElement(const QString& collectionName,const QString& elementType)=0; virtual int elementsCount(const QString& collectionName)=0; diff --git a/limereport/lrglobal.h b/limereport/lrglobal.h index b2fe56c..95f9801 100644 --- a/limereport/lrglobal.h +++ b/limereport/lrglobal.h @@ -125,12 +125,12 @@ namespace Const{ Q_DECLARE_FLAGS(PreviewHints, PreviewHint) Q_FLAGS(PreviewHints) - class ReportError : public std::runtime_error{ + class LIMEREPORT_EXPORT ReportError : public std::runtime_error{ public: ReportError(const QString& message); }; - class ReportSettings{ + class LIMEREPORT_EXPORT ReportSettings{ public: ReportSettings():m_suppressAbsentFieldsAndVarsWarnings(false){} void setDefaultValues(){m_suppressAbsentFieldsAndVarsWarnings = false;} @@ -140,13 +140,13 @@ namespace Const{ bool m_suppressAbsentFieldsAndVarsWarnings; }; - class IExternalPainter{ + class LIMEREPORT_EXPORT IExternalPainter{ public: virtual void paintByExternalPainter(const QString& objectName, QPainter* painter, const QStyleOptionGraphicsItem* options) = 0; virtual ~IExternalPainter(); }; - class IPainterProxy{ + class LIMEREPORT_EXPORT IPainterProxy{ public: virtual void setExternalPainter(IExternalPainter* externalPainter) = 0; virtual ~IPainterProxy(); @@ -168,7 +168,7 @@ namespace Const{ #endif - class Enums + class LIMEREPORT_EXPORT Enums { public: enum VariableDataType {Undefined, String, Bool, Int, Real, Date, Time, DateTime}; diff --git a/limereport/lritemscontainerdesignitf.h b/limereport/lritemscontainerdesignitf.h index 483bf95..5a87532 100644 --- a/limereport/lritemscontainerdesignitf.h +++ b/limereport/lritemscontainerdesignitf.h @@ -5,7 +5,7 @@ namespace LimeReport{ -class Segment{ +class LIMEREPORT_EXPORT Segment{ public: Segment(qreal segmentStart,qreal segmentEnd):m_begin(segmentStart),m_end(segmentEnd){} bool intersect(Segment value); @@ -15,17 +15,17 @@ private: qreal m_end; }; -class VSegment : public Segment{ +class LIMEREPORT_EXPORT VSegment : public Segment{ public: VSegment(QRectF rect):Segment(rect.top(),rect.bottom()){} }; -struct HSegment :public Segment{ +struct LIMEREPORT_EXPORT HSegment :public Segment{ public: HSegment(QRectF rect):Segment(rect.left(),rect.right()){} }; -struct ItemSortContainer { +struct LIMEREPORT_EXPORT ItemSortContainer { QRectF m_rect; BaseDesignIntf * m_item; ItemSortContainer(BaseDesignIntf *item){ @@ -35,9 +35,9 @@ struct ItemSortContainer { }; typedef QSharedPointer< ItemSortContainer > PItemSortContainer; -bool itemSortContainerLessThen(const PItemSortContainer c1, const PItemSortContainer c2); +bool LIMEREPORT_EXPORT itemSortContainerLessThen(const PItemSortContainer c1, const PItemSortContainer c2); -class ItemsContainerDesignInft : public BookmarkContainerDesignIntf{ +class LIMEREPORT_EXPORT ItemsContainerDesignInft : public BookmarkContainerDesignIntf{ Q_OBJECT public: ItemsContainerDesignInft(const QString& xmlTypeName, QObject* owner = 0, QGraphicsItem* parent=0): diff --git a/limereport/lrpagedesignintf.cpp b/limereport/lrpagedesignintf.cpp index 659244d..1243bc7 100644 --- a/limereport/lrpagedesignintf.cpp +++ b/limereport/lrpagedesignintf.cpp @@ -73,6 +73,7 @@ PageDesignIntf::PageDesignIntf(QObject *parent): m_itemInsertRect(0), m_itemMode(DesignMode), m_cutterBorder(0), + m_infoPosRect(0), m_currentCommand(-1), m_changeSizeMode(false), m_changePosMode(false), @@ -93,11 +94,13 @@ PageDesignIntf::PageDesignIntf(QObject *parent): m_magneticMovement(false), m_reportSettings(0), m_currentPage(0) + { m_reportEditor = dynamic_cast(parent); updatePageRect(); connect(this, SIGNAL(selectionChanged()), this, SLOT(slotSelectionChanged())); setBackgroundBrush(QBrush(Qt::white)); + } PageDesignIntf::~PageDesignIntf() @@ -313,6 +316,7 @@ void PageDesignIntf::mousePressEvent(QGraphicsSceneMouseEvent *event) void PageDesignIntf::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { + PageItemDesignIntf* page = pageItem() ? pageItem() : getCurrentPage(); if (event->buttons() & Qt::LeftButton) { if (!m_changePosOrSizeMode) { @@ -320,6 +324,25 @@ void PageDesignIntf::mouseMoveEvent(QGraphicsSceneMouseEvent *event) saveSelectedItemsGeometry(); m_changePosOrSizeMode = true; } + qreal posY = div(page->mapFromScene(event->scenePos()).y(), verticalGridStep()).quot * verticalGridStep(); + qreal posX = div(page->mapFromScene(event->scenePos()).x(), verticalGridStep()).quot * horizontalGridStep(); + if(!m_infoPosRect) + { + + + m_infoPosRect = new QGraphicsTextItem(); + m_infoPosRect->setDefaultTextColor(QColor(100,150,50)); + + QFont font("Arial"); + font.setPointSize(16); + font.setBold(true); + m_infoPosRect->setFont(font); + addItem(m_infoPosRect); + } + m_infoPosRect->setPlainText("(x: "+QString::number(posX/100)+", y: "+QString::number(posY/100)+") cm"); + + m_infoPosRect->setPos(posX,posY+30); + } if (event->buttons() & Qt::LeftButton && m_multiSelectStarted){ @@ -339,7 +362,6 @@ void PageDesignIntf::mouseMoveEvent(QGraphicsSceneMouseEvent *event) m_selectionRect->setRect(selectionRect); } - PageItemDesignIntf* page = pageItem() ? pageItem() : getCurrentPage(); if ((m_insertMode) && (page && page->rect().contains(page->mapFromScene(event->scenePos())))) { if (!m_itemInsertRect->isVisible()) m_itemInsertRect->setVisible(true); qreal posY = div(page->mapFromScene(event->scenePos()).y(), verticalGridStep()).quot * verticalGridStep(); @@ -355,7 +377,7 @@ void PageDesignIntf::mouseMoveEvent(QGraphicsSceneMouseEvent *event) ); } } else { - if (m_insertMode) m_itemInsertRect->setVisible(false); + if (m_insertMode) m_itemInsertRect->setVisible(false); } QGraphicsScene::mouseMoveEvent(event); @@ -401,6 +423,11 @@ void PageDesignIntf::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) m_selectionRect = 0; m_multiSelectStarted = false; } + if(m_infoPosRect) + { + delete m_infoPosRect; + m_infoPosRect = 0; + } QGraphicsScene::mouseReleaseEvent(event); } @@ -750,7 +777,7 @@ void PageDesignIntf::dropEvent(QGraphicsSceneDragDropEvent* event) bool isVar = event->mimeData()->text().indexOf("variable:")==0; BaseDesignIntf* item = addReportItem("TextItem",event->scenePos(),QSize(250, 50)); TextItem* ti = dynamic_cast(item); - QString data = event->mimeData()->text().remove(0,event->mimeData()->text().indexOf(":")+1); + QString data = event->mimeData()->text().remove(0,event->mimeData()->text().indexOf(":")+1); #if (QT_VERSION < QT_VERSION_CHECK(5, 15, 1)) if (isVar) data = data.remove(QRegExp(" \\[.*\\]")); #else @@ -943,7 +970,7 @@ CommandIf::Ptr PageDesignIntf::createChangePosCommand() newPos.pos = reportItem->pos(); newPoses.append(newPos); } - } + } return PosChangedCommand::create(this, m_positionStamp, newPoses); } @@ -1825,6 +1852,20 @@ void PageDesignIntf::setBorders(const BaseDesignIntf::BorderLines& border) changeSelectedGroupProperty("borders", (int)border); } +void PageDesignIntf::setBordersExt( + const BaseDesignIntf::BorderLines& border, + const double borderWidth, + const LimeReport::BaseDesignIntf::BorderStyle style, + const QString color + +) +{ + changeSelectedGroupProperty("borders", (int)border); + changeSelectedGroupProperty("borderLineSize", borderWidth); + changeSelectedGroupProperty("borderStyle", style); + changeSelectedGroupProperty("borderColor", color); +} + void PageDesignIntf::lockSelectedItems() { foreach(QGraphicsItem* graphicItem, selectedItems()){ @@ -2650,7 +2691,7 @@ bool BandMoveFromToCommand::doIt() void BandMoveFromToCommand::undoIt() { if (page() && page()->pageItem()) - page()->pageItem()->moveBandFromTo(reverceFrom, reverceTo); + page()->pageItem()->moveBandFromTo(reverceFrom, reverceTo); } } diff --git a/limereport/lrpagedesignintf.h b/limereport/lrpagedesignintf.h index 0a49b4d..1ef209e 100644 --- a/limereport/lrpagedesignintf.h +++ b/limereport/lrpagedesignintf.h @@ -254,6 +254,11 @@ namespace LimeReport { void setFont(const QFont &font); void setTextAlign(const Qt::Alignment& alignment); void setBorders(const BaseDesignIntf::BorderLines& border); + void setBordersExt(const BaseDesignIntf::BorderLines &border, + const double borderWidth, + const BaseDesignIntf::BorderStyle style, + const QString color + ); void lockSelectedItems(); void unlockSelectedItems(); void selectOneLevelItems(); @@ -295,6 +300,7 @@ namespace LimeReport { BaseDesignIntf::ItemMode m_itemMode; QGraphicsRectItem* m_cutterBorder; QGraphicsRectItem* m_pageRect; + QGraphicsTextItem* m_infoPosRect; QVector m_commandsList; QVector m_positionStamp; QVector m_geometryStamp; diff --git a/limereport/lrpageitemdesignintf.cpp b/limereport/lrpageitemdesignintf.cpp index f191a16..57f05ae 100644 --- a/limereport/lrpageitemdesignintf.cpp +++ b/limereport/lrpageitemdesignintf.cpp @@ -34,7 +34,7 @@ #include #include #include - +#include namespace LimeReport { bool bandSortBandLessThenByIndex(const BandDesignIntf *c1, const BandDesignIntf *c2){ @@ -98,14 +98,7 @@ void PageItemDesignIntf::paint(QPainter *ppainter, const QStyleOptionGraphicsIte paintGrid(ppainter, rect); ppainter->setPen(gridColor()); ppainter->drawRect(boundingRect()); - if (m_isExtendedInDesignMode){ - QPen pen; - pen.setColor(Qt::red); - pen.setStyle(Qt::DashLine); - pen.setWidth(2); - ppainter->setPen(pen); - ppainter->drawLine(pageRect().bottomLeft(),pageRect().bottomRight()); - } + drawShadow(ppainter, boundingRect(), 10); ppainter->restore(); } @@ -123,6 +116,7 @@ void PageItemDesignIntf::paint(QPainter *ppainter, const QStyleOptionGraphicsIte ppainter->restore(); BaseDesignIntf::paint(ppainter,option,widget); } + } BaseDesignIntf *PageItemDesignIntf::createSameTypeItem(QObject *owner, QGraphicsItem *parent) @@ -746,10 +740,15 @@ void PageItemDesignIntf::initPageSize(const QSizeF& size) void PageItemDesignIntf::preparePopUpMenu(QMenu &menu) { + + foreach (QAction* action, menu.actions()) { if (action->text().compare(tr("Paste")) != 0) action->setVisible(false); } + menu.addSeparator(); + menu.addAction(tr("Edit")); + menu.addSeparator(); @@ -797,6 +796,11 @@ void PageItemDesignIntf::processPopUpAction(QAction *action) if (action->text().compare(tr("Mix with prior page")) == 0){ page()->setPropertyToSelectedItems("mixWithPriorPage",action->isChecked()); } + if(action->text() == tr("Edit")) + { + PageEditor pageEdit(NULL,this); + pageEdit.exec(); + } } void PageItemDesignIntf::initPageSize(const PageItemDesignIntf::PageSize &size) diff --git a/limereport/lrpageitemdesignintf.h b/limereport/lrpageitemdesignintf.h index 365c87d..1170a8f 100644 --- a/limereport/lrpageitemdesignintf.h +++ b/limereport/lrpageitemdesignintf.h @@ -39,7 +39,7 @@ namespace LimeReport{ class ReportRender; -class PageItemDesignIntf : public ItemsContainerDesignInft +class LIMEREPORT_EXPORT PageItemDesignIntf : public ItemsContainerDesignInft { Q_OBJECT Q_PROPERTY(int topMargin READ topMargin WRITE setTopMargin) diff --git a/limereport/lrpreviewreportwidget.cpp b/limereport/lrpreviewreportwidget.cpp index dc65f3a..f634f11 100644 --- a/limereport/lrpreviewreportwidget.cpp +++ b/limereport/lrpreviewreportwidget.cpp @@ -21,7 +21,7 @@ namespace LimeReport { bool PreviewReportWidgetPrivate::pageIsVisible(){ QGraphicsView* view = q_ptr->ui->graphicsView; - if ( m_currentPage-1 >= m_reportPages.size() || m_currentPage <= 0 ) + if ( m_currentPage-1 >= m_reportPages.size() || m_currentPage <= 0 ) return false; PageItemDesignIntf::Ptr page = m_reportPages.at(m_currentPage-1); return page->mapToScene(page->rect()).boundingRect().intersects( @@ -103,6 +103,7 @@ PreviewReportWidget::PreviewReportWidget(ReportEngine *report, QWidget *parent) d_ptr->m_zoomer = new GraphicsViewZoomer(ui->graphicsView); connect(d_ptr->m_zoomer, SIGNAL(zoomed(double)), this, SLOT(slotZoomed(double))); connect(&m_resizeTimer, SIGNAL(timeout()), this, SLOT(resizeDone())); + } PreviewReportWidget::~PreviewReportWidget() @@ -236,7 +237,7 @@ void PreviewReportWidget::printPages(QPrinter* printer) } void PreviewReportWidget::print() -{ +{ QPrinterInfo pi; QPrinter lp(QPrinter::HighResolution); @@ -492,7 +493,7 @@ void PreviewReportWidget::reportEngineDestroyed(QObject *object) void PreviewReportWidget::slotZoomed(double ) { -#if (QT_VERSION < QT_VERSION_CHECK(5, 15, 1)) +#if (QT_VERSION < QT_VERSION_CHECK(5, 15, 0)) d_ptr->m_scalePercent = ui->graphicsView->matrix().m11()*100; #else d_ptr->m_scalePercent = ui->graphicsView->transform().m11()*100; diff --git a/limereport/lrreportdesignwidget.cpp b/limereport/lrreportdesignwidget.cpp index 6b7c608..58570bc 100644 --- a/limereport/lrreportdesignwidget.cpp +++ b/limereport/lrreportdesignwidget.cpp @@ -704,6 +704,16 @@ void ReportDesignWidget::setBorders(const BaseDesignIntf::BorderLines& borders) activePage()->setBorders(borders); } +void ReportDesignWidget::setBordersExt( + const BaseDesignIntf::BorderLines& border, + const double borderWidth, + const LimeReport::BaseDesignIntf::BorderStyle style, + const QString color +){ + if (activePage()) + activePage()->setBordersExt(border, borderWidth, style, color); +} + void ReportDesignWidget::prepareReport() { m_report->scriptContext()->setInitScript(m_scriptEditor->toPlainText()); @@ -1119,6 +1129,7 @@ bool PageView::viewportEvent(QEvent *event) m_verticalRuller->setGeometry(0, y+20, 20, (height - y)); m_verticalRuller->update(); m_horizontalRuller->update(); + } break; default: diff --git a/limereport/lrreportdesignwidget.h b/limereport/lrreportdesignwidget.h index 8057f13..9a5a68a 100644 --- a/limereport/lrreportdesignwidget.h +++ b/limereport/lrreportdesignwidget.h @@ -194,6 +194,8 @@ public slots: void setFont(const QFont &font); void setTextAlign(const bool &horizontalAlign, const Qt::AlignmentFlag &alignment); void setBorders(const BaseDesignIntf::BorderLines& borders); + void setBordersExt(const BaseDesignIntf::BorderLines &border, const double borderWidth, + const LimeReport::BaseDesignIntf::BorderStyle style, const QString color); void editSetting(); void setUseGrid(bool value); void previewReport(); diff --git a/limereport/lrreportengine.cpp b/limereport/lrreportengine.cpp index 6f622bc..0fc7d08 100644 --- a/limereport/lrreportengine.cpp +++ b/limereport/lrreportengine.cpp @@ -407,7 +407,7 @@ bool ReportEnginePrivate::printReport(QPrinter* printer) if (printer&&printer->isValid()){ try{ bool designTime = dataManager()->designTime(); - dataManager()->setDesignTime(false); + dataManager()->setDesignTime(false); ReportPages pages = renderToPages(); dataManager()->setDesignTime(designTime); if (pages.count()>0){ @@ -468,7 +468,7 @@ bool ReportEnginePrivate::exportReport(QString exporterName, const QString &file if (fn.isEmpty()){ QString defaultFileName = reportName().split(".")[0]; QString filter = QString("%1 (*.%2)").arg(e->exporterName()).arg(e->exporterFileExt()); - QString fn = QFileDialog::getSaveFileName(0, tr("%1 file name").arg(e->exporterName()), defaultFileName, filter); + fn = QFileDialog::getSaveFileName(0, tr("%1 file name").arg(e->exporterName()), defaultFileName, filter); } if (!fn.isEmpty()){ QFileInfo fi(fn); @@ -536,7 +536,7 @@ bool ReportEnginePrivate::showPreviewWindow(ReportPages pages, PreviewHints hint } void ReportEnginePrivate::previewReport(PreviewHints hints) -{ +{ previewReport(0, hints); } @@ -661,21 +661,21 @@ bool ReportEnginePrivate::slotLoadFromFile(const QString &fileName) { EASY_BLOCK("ReportEnginePrivate::slotLoadFromFile") PreviewReportWindow *currentPreview = qobject_cast(m_activePreview); - + if (!QFile::exists(fileName)) { if ( hasActivePreview() ) - { + { QMessageBox::information( NULL, tr( "Report File Change" ), tr( "The report file \"%1\" has changed names or been deleted.\n\nThis preview is no longer valid." ).arg( fileName ) ); - + clearReport(); - + currentPreview->close(); } - + return false; } @@ -742,8 +742,8 @@ void ReportEnginePrivate::designReport(bool showModal) if (designerWindow){ dataManager()->setDesignTime(true); connect(designerWindow, SIGNAL(destroyed(QObject*)), this, SLOT(slotDesignerWindowDestroyed(QObject*))); -#ifdef Q_OS_WIN - designerWindow->setWindowModality(Qt::ApplicationModal); +#ifdef Q_OS_WIN + designerWindow->setWindowModality(Qt::NonModal); #endif if (!showModal){ designerWindow->show();; @@ -856,7 +856,7 @@ bool ReportEnginePrivate::saveToFile(const QString &fileName) QScopedPointer< ItemsWriterIntf > writer(new XMLWriter()); writer->setPassPhrase(m_passPhrase); writer->putItem(this); - m_fileName=fn; + m_fileName=fn; bool saved = writer->saveToFile(fn); foreach (ConnectionDesc* connection, dataManager()->conections()) { @@ -1419,7 +1419,7 @@ ReportEngine::ReportEngine(QObject *parent) connect(d, SIGNAL(loadFinished()), this, SIGNAL(loadFinished())); connect(d, SIGNAL(cleared()), this, SIGNAL(cleared())); connect(d, SIGNAL(printedToPDF(QString)), this, SIGNAL(printedToPDF(QString))); - + connect(d, SIGNAL(getAvailableDesignerLanguages(QList*)), this, SIGNAL(getAvailableDesignerLanguages(QList*))); connect(d, SIGNAL(currentDefaultDesignerLanguageChanged(QLocale::Language)), diff --git a/limereport/lrscriptenginemanager.cpp b/limereport/lrscriptenginemanager.cpp index 05e8cde..31220d3 100644 --- a/limereport/lrscriptenginemanager.cpp +++ b/limereport/lrscriptenginemanager.cpp @@ -53,8 +53,8 @@ Q_DECLARE_METATYPE(LimeReport::ScriptEngineManager *) #ifdef USE_QTSCRIPTENGINE QScriptValue constructColor(QScriptContext *context, QScriptEngine *engine) { - QColor color(context->argument(0).toString()); - return engine->toScriptValue(color); + QColor color(context->argument(0).toString()); + return engine->toScriptValue(color); } #endif @@ -71,7 +71,7 @@ ScriptEngineNode::~ScriptEngineNode() } ScriptEngineNode*ScriptEngineNode::addChild(const QString& name, const QString& description, - ScriptEngineNode::NodeType type, const QIcon& icon) + ScriptEngineNode::NodeType type, const QIcon& icon) { ScriptEngineNode* res = new ScriptEngineNode(name, description, type,this,icon); m_childs.push_back(res); @@ -218,12 +218,12 @@ ScriptEngineManager::~ScriptEngineManager() bool ScriptEngineManager::isFunctionExists(const QString &functionName) const { return m_functions.contains(functionName); -// foreach (ScriptFunctionDesc desc, m_functions.values()) { -// if (desc.name.compare(functionName,Qt::CaseInsensitive)==0){ -// return true; -// } -// } -// return false; + // foreach (ScriptFunctionDesc desc, m_functions.values()) { + // if (desc.name.compare(functionName,Qt::CaseInsensitive)==0){ + // return true; + // } + // } + // return false; } void ScriptEngineManager::deleteFunction(const QString &functionsName) @@ -244,7 +244,7 @@ bool ScriptEngineManager::addFunction(const JSFunctionDesc &functionDescriber) scriptEngine()->globalObject().setProperty( functionDescriber.managerName(), functionManager - ); + ); } if (functionManager.toQObject() == functionDescriber.manager()){ @@ -275,9 +275,9 @@ bool ScriptEngineManager::addFunction(const JSFunctionDesc &functionDescriber) Q_DECL_DEPRECATED #endif bool ScriptEngineManager::addFunction(const QString& name, - QScriptEngine::FunctionSignature function, - const QString& category, - const QString& description) + QScriptEngine::FunctionSignature function, + const QString& category, + const QString& description) { if (!isFunctionExists(name)){ ScriptFunctionDesc funct; @@ -310,7 +310,7 @@ bool ScriptEngineManager::addFunction(const QString& name, const QString& script funct.description = description; funct.type = ScriptFunctionDesc::Script; m_functions.insert(name, funct); - m_model->updateModel(); + m_model->updateModel(); return true; } else { m_lastError = functionValue.toString(); @@ -321,11 +321,11 @@ bool ScriptEngineManager::addFunction(const QString& name, const QString& script QStringList ScriptEngineManager::functionsNames() { return m_functions.keys(); -// QStringList res; -// foreach(ScriptFunctionDesc func, m_functions){ -// res<groupFunctionNames()){ JSFunctionDesc describer( - func, - tr("GROUP FUNCTIONS"), - func+"(\""+tr("FieldName")+"\",\""+tr("BandName")+"\")", - LimeReport::Const::FUNCTION_MANAGER_NAME, - m_functionManager, - QString("function %1(fieldName, bandName, pageitem){\ - if (typeof pageitem == 'undefined') return %2.calcGroupFunction(\"%1\", fieldName, bandName); \ - else return %2.calcGroupFunction(\"%1\", fieldName, bandName, pageitem);}" - ).arg(func) - .arg(LimeReport::Const::FUNCTION_MANAGER_NAME) - ); - addFunction(describer); + func, + tr("GROUP FUNCTIONS"), + func+"(\""+tr("FieldName")+"\",\""+tr("BandName")+"\")", + LimeReport::Const::FUNCTION_MANAGER_NAME, + m_functionManager, + QString("function %1(fieldName, bandName, pageitem){\ + if (typeof pageitem == 'undefined') return %2.calcGroupFunction(\"%1\", fieldName, bandName); \ + else return %2.calcGroupFunction(\"%1\", fieldName, bandName, pageitem);}" + ).arg(func) + .arg(LimeReport::Const::FUNCTION_MANAGER_NAME) + ); + addFunction(describer); } moveQObjectToScript(new DatasourceFunctions(dataManager), LimeReport::Const::DATAFUNCTIONS_MANAGER_NAME); } @@ -368,13 +368,13 @@ QString ScriptEngineManager::expandUserVariables(QString context, RenderPass /* switch (expandType){ case EscapeSymbols: context.replace(rx.cap(0),escapeSimbols(varValue.toString())); - break; + break; case NoEscapeSymbols: context.replace(rx.cap(0),varValue.toString()); - break; + break; case ReplaceHTMLSymbols: context.replace(rx.cap(0),replaceHTMLSymbols(varValue.toString())); - break; + break; } pos=0; @@ -400,53 +400,53 @@ QString ScriptEngineManager::expandUserVariables(QString context, RenderPass /* #else QRegularExpression rx = getVariableRegEx(); if (context.contains(rx)){ - int pos = 0; - QRegularExpressionMatch match = rx.match(context, pos); - while (match.hasMatch()){ + int pos = 0; + QRegularExpressionMatch match = rx.match(context, pos); + while (match.hasMatch()){ - QString variable=match.captured(1); - pos = match.capturedEnd(); + QString variable=match.captured(1); + pos = match.capturedEnd(); - if (dataManager()->containsVariable(variable) ){ - try { + if (dataManager()->containsVariable(variable) ){ + try { - varValue = dataManager()->variable(variable); - switch (expandType){ - case EscapeSymbols: - context.replace(match.captured(0), escapeSimbols(varValue.toString())); - break; - case NoEscapeSymbols: - context.replace(match.captured(0), varValue.toString()); - break; - case ReplaceHTMLSymbols: - context.replace(match.captured(0), replaceHTMLSymbols(varValue.toString())); - break; - } + varValue = dataManager()->variable(variable); + switch (expandType){ + case EscapeSymbols: + context.replace(match.captured(0), escapeSimbols(varValue.toString())); + break; + case NoEscapeSymbols: + context.replace(match.captured(0), varValue.toString()); + break; + case ReplaceHTMLSymbols: + context.replace(match.captured(0), replaceHTMLSymbols(varValue.toString())); + break; + } - pos = 0; + pos = 0; - } catch (ReportError &e){ - dataManager()->putError(e.what()); - if (!dataManager()->reportSettings() || dataManager()->reportSettings()->suppressAbsentFieldsAndVarsWarnings()) - context.replace(match.captured(0), e.what()); - else - context.replace(match.captured(0), ""); - } - } else { + } catch (ReportError &e){ + dataManager()->putError(e.what()); + if (!dataManager()->reportSettings() || dataManager()->reportSettings()->suppressAbsentFieldsAndVarsWarnings()) + context.replace(match.captured(0), e.what()); + else + context.replace(match.captured(0), ""); + } + } else { - QString error; - error = tr("Variable %1 not found").arg(variable); - dataManager()->putError(error); - if (!dataManager()->reportSettings() || dataManager()->reportSettings()->suppressAbsentFieldsAndVarsWarnings()) - context.replace(match.captured(0), error); - else - context.replace(match.captured(0), ""); - } + QString error; + error = tr("Variable %1 not found").arg(variable); + dataManager()->putError(error); + if (!dataManager()->reportSettings() || dataManager()->reportSettings()->suppressAbsentFieldsAndVarsWarnings()) + context.replace(match.captured(0), error); + else + context.replace(match.captured(0), ""); + } - match = rx.match(context, pos); - } - } - return context; + match = rx.match(context, pos); + } + } + return context; #endif } @@ -707,9 +707,13 @@ int ScriptEngineManager::getPageFreeSpace(PageItemDesignIntf* page){ if (page){ int height = 0; foreach(BandDesignIntf* band, page->bands()){ - height += band->height(); + if(band->type() == BandDesignIntf::Data) + { + height += band->geometry().height() * m_dataManager->dataSource(band->datasourceName())->model()->rowCount(); + } + else height += band->height(); } - return page->height() - height; + return page->height() - height - (page->pageFooter()?page->pageFooter()->height() : 0); } else return -1; } @@ -730,7 +734,7 @@ void ScriptEngineManager::clearTableOfContents(){ } ScriptValueType ScriptEngineManager::moveQObjectToScript(QObject* object, const QString objectName) -{ +{ ScriptValueType obj = scriptEngine()->globalObject().property(objectName); if (!obj.isNull()) delete obj.toQObject(); ScriptValueType result = scriptEngine()->newQObject(object); @@ -775,7 +779,7 @@ bool ScriptEngineManager::createNumberFomatFunction() " if(typeof(precision)==='undefined') precision=2; " " if(typeof(locale)==='undefined') locale=\"\"; " "return %1.numberFormat(value,format,precision,locale);}" - ).arg(LimeReport::Const::FUNCTION_MANAGER_NAME) + ).arg(LimeReport::Const::FUNCTION_MANAGER_NAME) ); return addFunction(fd); } @@ -791,7 +795,7 @@ bool ScriptEngineManager::createDateFormatFunction(){ fd.setScriptWrapper(QString("function dateFormat(value, format, locale){" " if(typeof(format)==='undefined') format = \"dd.MM.yyyy\"; " "return %1.dateFormat(value,format, locale);}" - ).arg(LimeReport::Const::FUNCTION_MANAGER_NAME) + ).arg(LimeReport::Const::FUNCTION_MANAGER_NAME) ); return addFunction(fd); } @@ -807,7 +811,7 @@ bool ScriptEngineManager::createTimeFormatFunction(){ fd.setScriptWrapper(QString("function timeFormat(value, format){" " if(typeof(format)==='undefined') format = \"hh:mm\"; " "return %1.timeFormat(value,format);}" - ).arg(LimeReport::Const::FUNCTION_MANAGER_NAME) + ).arg(LimeReport::Const::FUNCTION_MANAGER_NAME) ); return addFunction(fd); } @@ -823,7 +827,7 @@ bool ScriptEngineManager::createDateTimeFormatFunction(){ fd.setScriptWrapper(QString("function dateTimeFormat(value, format, locale){" " if(typeof(format)==='undefined') format = \"dd.MM.yyyy hh:mm\"; " "return %1.dateTimeFormat(value, format, locale);}" - ).arg(LimeReport::Const::FUNCTION_MANAGER_NAME) + ).arg(LimeReport::Const::FUNCTION_MANAGER_NAME) ); return addFunction(fd); } @@ -840,13 +844,13 @@ bool ScriptEngineManager::createSectotimeFormatFunction() fd.setScriptWrapper(QString("function sectotimeFormat(value, format){" " if(typeof(format)==='undefined') format = \"hh:mm:ss\"; " "return %1.sectotimeFormat(value,format);}" - ).arg(LimeReport::Const::FUNCTION_MANAGER_NAME) + ).arg(LimeReport::Const::FUNCTION_MANAGER_NAME) ); return addFunction(fd); } bool ScriptEngineManager::createDateFunction(){ -// addFunction("date",date,"DATE&TIME","date()"); + // addFunction("date",date,"DATE&TIME","date()"); JSFunctionDesc fd; fd.setManager(m_functionManager); @@ -856,14 +860,14 @@ bool ScriptEngineManager::createDateFunction(){ fd.setDescription("date()"); fd.setScriptWrapper(QString("function date(){" "return %1.date();}" - ).arg(LimeReport::Const::FUNCTION_MANAGER_NAME) + ).arg(LimeReport::Const::FUNCTION_MANAGER_NAME) ); return addFunction(fd); } bool ScriptEngineManager::createNowFunction(){ -// addFunction("now",now,"DATE&TIME","now()"); + // addFunction("now",now,"DATE&TIME","now()"); JSFunctionDesc fd; fd.setManager(m_functionManager); @@ -873,13 +877,13 @@ bool ScriptEngineManager::createNowFunction(){ fd.setDescription("now()"); fd.setScriptWrapper(QString("function now(){" "return %1.now();}" - ).arg(LimeReport::Const::FUNCTION_MANAGER_NAME) + ).arg(LimeReport::Const::FUNCTION_MANAGER_NAME) ); return addFunction(fd); } bool ScriptEngineManager::createCurrencyFormatFunction(){ -// addFunction("currencyFormat",currencyFormat,"NUMBER","currencyFormat(\""+tr("Value")+"\",\""+tr("Locale")+"\")"); + // addFunction("currencyFormat",currencyFormat,"NUMBER","currencyFormat(\""+tr("Value")+"\",\""+tr("Locale")+"\")"); JSFunctionDesc fd; fd.setManager(m_functionManager); @@ -890,13 +894,13 @@ bool ScriptEngineManager::createCurrencyFormatFunction(){ fd.setScriptWrapper(QString("function currencyFormat(value, locale){" " if(typeof(locale)==='undefined') locale = \"\"; " "return %1.currencyFormat(value,locale);}" - ).arg(LimeReport::Const::FUNCTION_MANAGER_NAME) + ).arg(LimeReport::Const::FUNCTION_MANAGER_NAME) ); return addFunction(fd); } bool ScriptEngineManager::createCurrencyUSBasedFormatFunction(){ -// addFunction("currencyUSBasedFormat",currencyUSBasedFormat,"NUMBER","currencyUSBasedFormat(\""+tr("Value")+",\""+tr("CurrencySymbol")+"\")"); + // addFunction("currencyUSBasedFormat",currencyUSBasedFormat,"NUMBER","currencyUSBasedFormat(\""+tr("Value")+",\""+tr("CurrencySymbol")+"\")"); JSFunctionDesc fd; fd.setManager(m_functionManager); @@ -907,13 +911,13 @@ bool ScriptEngineManager::createCurrencyUSBasedFormatFunction(){ fd.setScriptWrapper(QString("function currencyUSBasedFormat(value, currencySymbol){" " if(typeof(currencySymbol)==='undefined') currencySymbol = \"\"; " "return %1.currencyUSBasedFormat(value,currencySymbol);}" - ).arg(LimeReport::Const::FUNCTION_MANAGER_NAME) + ).arg(LimeReport::Const::FUNCTION_MANAGER_NAME) ); return addFunction(fd); } bool ScriptEngineManager::createSetVariableFunction(){ -// addFunction("setVariable", setVariable, "GENERAL", "setVariable(\""+tr("Name")+"\",\""+tr("Value")+"\")"); + // addFunction("setVariable", setVariable, "GENERAL", "setVariable(\""+tr("Name")+"\",\""+tr("Value")+"\")"); JSFunctionDesc fd; fd.setManager(m_functionManager); @@ -923,7 +927,7 @@ bool ScriptEngineManager::createSetVariableFunction(){ fd.setDescription("setVariable(\""+tr("Name")+"\",\""+tr("Value")+"\")"); fd.setScriptWrapper(QString("function setVariable(name, value){" "return %1.setVariable(name,value);}" - ).arg(LimeReport::Const::FUNCTION_MANAGER_NAME) + ).arg(LimeReport::Const::FUNCTION_MANAGER_NAME) ); return addFunction(fd); } @@ -938,7 +942,7 @@ bool ScriptEngineManager::createGetVariableFunction() fd.setDescription("getVariable(\""+tr("Name")+"\")"); fd.setScriptWrapper(QString("function getVariable(name){" "return %1.getVariable(name);}" - ).arg(LimeReport::Const::FUNCTION_MANAGER_NAME) + ).arg(LimeReport::Const::FUNCTION_MANAGER_NAME) ); return addFunction(fd); } @@ -953,7 +957,7 @@ bool ScriptEngineManager::createGetFieldFunction() fd.setDescription("getField(\""+tr("Name")+"\")"); fd.setScriptWrapper(QString("function getField(name){" "return %1.getField(name);}" - ).arg(LimeReport::Const::FUNCTION_MANAGER_NAME) + ).arg(LimeReport::Const::FUNCTION_MANAGER_NAME) ); return addFunction(fd); } @@ -969,10 +973,10 @@ bool ScriptEngineManager::createGetFieldByKeyFunction() tr("ValueField")+"\",\""+ tr("KeyField")+"\", \""+ tr("KeyFieldValue")+"\")" - ); + ); fd.setScriptWrapper(QString("function getFieldByKeyField(datasource, valueFieldName, keyFieldName, keyValue){" "return %1.getFieldByKeyField(datasource, valueFieldName, keyFieldName, keyValue);}" - ).arg(LimeReport::Const::FUNCTION_MANAGER_NAME) + ).arg(LimeReport::Const::FUNCTION_MANAGER_NAME) ); return addFunction(fd); } @@ -986,10 +990,10 @@ bool ScriptEngineManager::createGetFieldByRowIndex() fd.setName("getFieldByRowIndex"); fd.setDescription("getFieldByRowIndex(\""+tr("FieldName")+"\", \""+ tr("RowIndex")+"\")" - ); + ); fd.setScriptWrapper(QString("function getFieldByRowIndex(fieldName, rowIndex){" "return %1.getFieldByRowIndex(fieldName, rowIndex);}" - ).arg(LimeReport::Const::FUNCTION_MANAGER_NAME) + ).arg(LimeReport::Const::FUNCTION_MANAGER_NAME) ); return addFunction(fd); } @@ -1004,7 +1008,7 @@ bool ScriptEngineManager::createAddBookmarkFunction() fd.setDescription("addBookmark(\""+tr("Unique identifier")+" \""+tr("Content")+"\")"); fd.setScriptWrapper(QString("function addBookmark(uniqKey, content){" "return %1.addBookmark(uniqKey, content);}" - ).arg(LimeReport::Const::FUNCTION_MANAGER_NAME) + ).arg(LimeReport::Const::FUNCTION_MANAGER_NAME) ); return addFunction(fd); } @@ -1019,7 +1023,7 @@ bool ScriptEngineManager::createFindPageIndexByBookmark() fd.setDescription("findPageIndexByBookmark(\""+tr("Unique identifier")+"\")"); fd.setScriptWrapper(QString("function findPageIndexByBookmark(uniqKey){" "return %1.findPageIndexByBookmark(uniqKey);}" - ).arg(LimeReport::Const::FUNCTION_MANAGER_NAME) + ).arg(LimeReport::Const::FUNCTION_MANAGER_NAME) ); return addFunction(fd); } @@ -1034,7 +1038,7 @@ bool ScriptEngineManager::createAddTableOfContentsItemFunction() fd.setDescription("addTableOfContentsItem(\""+tr("Unique identifier")+" \""+tr("Content")+"\", \""+tr("Indent")+"\")"); fd.setScriptWrapper(QString("function addTableOfContentsItem(uniqKey, content, indent){" "return %1.addTableOfContentsItem(uniqKey, content, indent);}" - ).arg(LimeReport::Const::FUNCTION_MANAGER_NAME) + ).arg(LimeReport::Const::FUNCTION_MANAGER_NAME) ); return addFunction(fd); } @@ -1049,7 +1053,7 @@ bool ScriptEngineManager::createClearTableOfContentsFunction() fd.setDescription("clearTableOfContents()"); fd.setScriptWrapper(QString("function clearTableOfContents(){" "return %1.clearTableOfContents();}" - ).arg(LimeReport::Const::FUNCTION_MANAGER_NAME) + ).arg(LimeReport::Const::FUNCTION_MANAGER_NAME) ); return addFunction(fd); } @@ -1064,7 +1068,7 @@ bool ScriptEngineManager::createReopenDatasourceFunction() fd.setDescription("reopenDatasource(\""+tr("datasourceName")+"\")"); fd.setScriptWrapper(QString("function reopenDatasource(datasourceName){" "return %1.reopenDatasource(datasourceName);}" - ).arg(LimeReport::Const::FUNCTION_MANAGER_NAME) + ).arg(LimeReport::Const::FUNCTION_MANAGER_NAME) ); return addFunction(fd); } @@ -1077,7 +1081,7 @@ ScriptEngineManager::ScriptEngineManager() m_functionManager->setScriptEngineManager(this); #ifdef USE_QTSCRIPTENGINE m_scriptEngine->setDefaultPrototype(qMetaTypeId(), - m_scriptEngine->newQObject(new ComboBoxPrototype())); + m_scriptEngine->newQObject(new ComboBoxPrototype())); #endif createLineFunction(); createNumberFomatFunction(); @@ -1130,7 +1134,7 @@ bool ScriptExtractor::parse(int &curPos, const State& state, ScriptNode::Ptr scr return true; } else { if (m_context[curPos]=='{') - extractBracket(curPos, scriptNode); + extractBracket(curPos, scriptNode); } case None: if (m_context[curPos]=='$'){ @@ -1439,6 +1443,8 @@ DialogDescriber* ScriptEngineContext::findDialogContainer(const QString& dialogN return 0; } +#endif + TableOfContents* ScriptEngineContext::tableOfContents() const { return m_tableOfContents; @@ -1470,6 +1476,8 @@ void ScriptEngineContext::setCurrentBand(BandDesignIntf* currentBand) m_currentBand = currentBand; } +#ifdef HAVE_UI_LOADER + QDialog* ScriptEngineContext::getDialog(const QString& dialogName) { QDialog* dialog = findDialog(dialogName); @@ -1535,16 +1543,16 @@ void ScriptEngineContext::qobjectToScript(const QString& name, QObject *item) { ScriptEngineType* engine = ScriptEngineManager::instance().scriptEngine(); #ifdef USE_QJSENGINE - ScriptValueType sItem = getJSValue(*engine, item); - engine->globalObject().setProperty(name, sItem); + ScriptValueType sItem = getJSValue(*engine, item); + engine->globalObject().setProperty(name, sItem); #else - ScriptValueType sItem = engine->globalObject().property(name); - if (sItem.isValid()){ - engine->newQObject(sItem, item); - } else { - sItem = engine->newQObject(item); - engine->globalObject().setProperty(name,sItem); - } + ScriptValueType sItem = engine->globalObject().property(name); + if (sItem.isValid()){ + engine->newQObject(sItem, item); + } else { + sItem = engine->newQObject(item); + engine->globalObject().setProperty(name,sItem); + } #endif } @@ -1587,17 +1595,17 @@ bool ScriptEngineContext::runInitScript(){ #ifdef USE_QJSENGINE if (res.isError()){ QMessageBox::critical(0,tr("Error"), - QString("Line %1: %2 ").arg(res.property("lineNumber").toString()) - .arg(res.toString()) - ); + QString("Line %1: %2 ").arg(res.property("lineNumber").toString()) + .arg(res.toString()) + ); return false; } #else if (engine->hasUncaughtException()) { QMessageBox::critical(0,tr("Error"), - QString("Line %1: %2 ").arg(engine->uncaughtExceptionLineNumber()) - .arg(engine->uncaughtException().toString()) - ); + QString("Line %1: %2 ").arg(engine->uncaughtExceptionLineNumber()) + .arg(engine->uncaughtException().toString()) + ); return false; } #endif @@ -1999,28 +2007,28 @@ void TableOfContents::slotOneSlotDS(CallbackInfo info, QVariant& data) columns << "Content" << "Page number" << "Content Key"; switch (info.dataType) { - case LimeReport::CallbackInfo::RowCount: - data = m_tableOfContents.count(); - break; - case LimeReport::CallbackInfo::ColumnCount: - data = columns.size(); - break; - case LimeReport::CallbackInfo::ColumnHeaderData: { - data = columns.at(info.index); - break; + case LimeReport::CallbackInfo::RowCount: + data = m_tableOfContents.count(); + break; + case LimeReport::CallbackInfo::ColumnCount: + data = columns.size(); + break; + case LimeReport::CallbackInfo::ColumnHeaderData: { + data = columns.at(info.index); + break; + } + case LimeReport::CallbackInfo::ColumnData: + if (info.index < m_tableOfContents.count()){ + ContentItem* item = m_tableOfContents.at(info.index); + if (info.columnName.compare("Content",Qt::CaseInsensitive) == 0) + data = item->content.rightJustified(item->indent+item->content.size()); + if (info.columnName.compare("Content Key",Qt::CaseInsensitive) == 0) + data = item->uniqKey; + if (info.columnName.compare("Page number",Qt::CaseInsensitive) == 0) + data = QString::number(item->pageNumber); } - case LimeReport::CallbackInfo::ColumnData: - if (info.index < m_tableOfContents.count()){ - ContentItem* item = m_tableOfContents.at(info.index); - if (info.columnName.compare("Content",Qt::CaseInsensitive) == 0) - data = item->content.rightJustified(item->indent+item->content.size()); - if (info.columnName.compare("Content Key",Qt::CaseInsensitive) == 0) - data = item->uniqKey; - if (info.columnName.compare("Page number",Qt::CaseInsensitive) == 0) - data = QString::number(item->pageNumber); - } - break; - default: break; + break; + default: break; } } @@ -2072,6 +2080,13 @@ bool DatasourceFunctions::isEOF(const QString &datasourceName) return true; } +int DatasourceFunctions::rowCount(const QString &datasourceName) +{ + if (m_dataManager && m_dataManager->dataSource(datasourceName)) + return m_dataManager->dataSource(datasourceName)->model()->rowCount(); + return 0; +} + bool DatasourceFunctions::invalidate(const QString& datasourceName) { if (m_dataManager && m_dataManager->dataSource(datasourceName)){ diff --git a/limereport/lrscriptenginemanager.h b/limereport/lrscriptenginemanager.h index 59979ae..d027a1a 100644 --- a/limereport/lrscriptenginemanager.h +++ b/limereport/lrscriptenginemanager.h @@ -209,7 +209,7 @@ public: bool hasChanges(){ return m_hasChanges;} ReportPages* reportPages() const; void setReportPages(ReportPages* value); -#ifdef HAVE_UI_LOADER +#ifdef HAVE_UI_LOADER signals: void dialogNameChanged(QString dialogName); void dialogDeleted(QString dialogName); @@ -337,6 +337,7 @@ public: Q_INVOKABLE bool next(const QString& datasourceName); Q_INVOKABLE bool prior(const QString& datasourceName); Q_INVOKABLE bool isEOF(const QString& datasourceName); + Q_INVOKABLE int rowCount(const QString& datasourceName); Q_INVOKABLE bool invalidate(const QString& datasourceName); Q_INVOKABLE QObject *createTableBuilder(QObject *horizontalLayout); private: @@ -445,7 +446,7 @@ private: }; class ScriptEngineManager : public QObject, public Singleton, public IScriptEngineManager -{ +{ Q_OBJECT public: friend class Singleton; diff --git a/limereport/report.qrc b/limereport/report.qrc index b3e9f61..cf13f22 100644 --- a/limereport/report.qrc +++ b/limereport/report.qrc @@ -187,5 +187,6 @@ images/lock.png images/unlock.png images/excel_export.png + images/border_settings.png diff --git a/limereport/serializators/lrstorageintf.h b/limereport/serializators/lrstorageintf.h index e0ec406..c178bd2 100644 --- a/limereport/serializators/lrstorageintf.h +++ b/limereport/serializators/lrstorageintf.h @@ -30,6 +30,7 @@ #ifndef LRSTORAGEINTF_H #define LRSTORAGEINTF_H +#include "lrglobal.h" #include class QString; @@ -37,14 +38,14 @@ class QObject; namespace LimeReport{ -class ObjectLoadingStateIntf{ +class LIMEREPORT_EXPORT ObjectLoadingStateIntf{ public: virtual bool isLoading() = 0; virtual void objectLoadStarted() = 0; virtual void objectLoadFinished() = 0; }; -class ItemsWriterIntf +class LIMEREPORT_EXPORT ItemsWriterIntf { public: virtual void putItem(QObject* item) = 0; @@ -55,7 +56,7 @@ public: virtual ~ItemsWriterIntf(){} }; -class ItemsReaderIntf +class LIMEREPORT_EXPORT ItemsReaderIntf { public: typedef QSharedPointer Ptr; diff --git a/translations/limereport_ar.ts b/translations/limereport_ar.ts index dff2574..4f982d3 100644 --- a/translations/limereport_ar.ts +++ b/translations/limereport_ar.ts @@ -8,6 +8,49 @@ + + ChartAxisEditor + + Axis editor + + + + Axis + + + + Reverse direction + + + + Enable scale calculation + + + + Step + + + + Maximum + + + + Minimum + + + + Automatic + + + + Cancel + إلغاء الأمر + + + Ok + موافق + + ChartItemEditor @@ -54,6 +97,10 @@ Series name + + X data field + + ImageItemEditor @@ -156,22 +203,6 @@ p, li { white-space: pre-wrap; } <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/report/images/logo_100.png" height="100" style="float: left;" /><span style=" font-size:12pt; font-weight:600;">Report engine for </span><span style=" font-size:12pt; font-weight:600; color:#7faa18;">Qt</span><span style=" font-size:12pt; font-weight:600;"> framework</span></p> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">LimeReport - multi-platform C++ library written using Qt framework and intended for software developers that would like to add into their application capability to form report or print forms generated using templates.</span></p> -<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><br /></p> -<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><br /></p> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">Official web site : </span><a href="www.limereport.ru"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;">www.limereport.ru</span></a></p> -<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt; text-decoration: underline; color:#0000ff;"><br /></p> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt; font-weight:600;">This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</span></p> -<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:10pt; font-weight:600; color:#000000;"><br /></p> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Copyright 2015 Arin Alexander. All rights reserved.</span></p></body></html> - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">(c) 2015 Arin Alexander arin_a@bk.ru</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="SEC1"></a><span style=" font-family:'sans-serif'; font-weight:600;">G</span><span style=" font-family:'sans-serif'; font-weight:600;">NU LESSER GENERAL PUBLIC LICENSE</span></p> @@ -284,6 +315,22 @@ p, li { white-space: pre-wrap; } <p style=" margin-top:19px; margin-bottom:19px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'sans-serif';">That's all there is to it!</span></p></body></html> + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/report/images/logo_100.png" height="100" style="float: left;" /><span style=" font-size:12pt; font-weight:600;">Report engine for </span><span style=" font-size:12pt; font-weight:600; color:#7faa18;">Qt</span><span style=" font-size:12pt; font-weight:600;"> framework</span></p> +<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">LimeReport - multi-platform C++ library written using Qt framework and intended for software developers that would like to add into their application capability to form report or print forms generated using templates.</span></p> +<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><br /></p> +<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><br /></p> +<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">Official web site : </span><a href="www.limereport.ru"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;">www.limereport.ru</span></a></p> +<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt; text-decoration: underline; color:#0000ff;"><br /></p> +<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt; font-weight:600;">This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</span></p> +<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:10pt; font-weight:600; color:#000000;"><br /></p> +<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Copyright 2021 Arin Alexander. All rights reserved.</span></p></body></html> + + LimeReport::AlignmentPropItem @@ -457,6 +504,21 @@ p, li { white-space: pre-wrap; } Create Vertical Layout + + Edit borders... + + + + + LimeReport::BorderFrameEditor + + BorderFrameEditor + + + + Text + + LimeReport::ConnectionDesc @@ -1241,6 +1303,10 @@ p, li { white-space: pre-wrap; } All borders محاط بإطار + + Edit border + + LimeReport::MasterDetailProxyModel @@ -1289,6 +1355,93 @@ p, li { white-space: pre-wrap; } + + LimeReport::PageEditor + + Page setup + + + + Paper + + + + Format + الصيغة + + + Dimension + + + + Width: + + + + mm + + + + Height: + + + + Orientation + + + + Portrait + + + + Landscape + + + + Margins + + + + Bottom: + + + + Top: + + + + Right: + + + + Left: + + + + Drop printer margins + + + + Other + + + + Height options + + + + Endless Height + + + + Extended Height: + + + + Full page + + + LimeReport::PageFooter @@ -1333,6 +1486,14 @@ p, li { white-space: pre-wrap; } Set page size to printer + + Mix with prior page + + + + Edit + تحرير + LimeReport::PreviewReportWidget @@ -2029,6 +2190,38 @@ p, li { white-space: pre-wrap; } removeGap + + xAxisField + + + + seriesLineWidth + + + + drawPoints + + + + dropPrinterMargins + + + + notPrintIfEmpty + + + + gridChartLines + + + + horizontalAxisOnTop + + + + mixWithPriorPage + + LimeReport::RectPropItem @@ -2933,10 +3126,6 @@ This preview is no longer valid. Ctrl+Return - - Esc - - LimeReport::TranslationEditor @@ -3274,5 +3463,25 @@ This preview is no longer valid. Series + + X Axis + + + + Y Axis + + + + X axis + + + + Y axis + + + + Axis + + diff --git a/translations/limereport_es.ts b/translations/limereport_es.ts index f8baa0b..33c5919 100644 --- a/translations/limereport_es.ts +++ b/translations/limereport_es.ts @@ -8,6 +8,49 @@ + + ChartAxisEditor + + Axis editor + + + + Axis + + + + Reverse direction + + + + Enable scale calculation + + + + Step + + + + Maximum + + + + Minimum + + + + Automatic + + + + Cancel + Cancelar + + + Ok + Aceptar + + ChartItemEditor @@ -54,6 +97,10 @@ Series name Nombre de la Serie + + X data field + + ImageItemEditor @@ -156,34 +203,6 @@ p, li { white-space: pre-wrap; } <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/report/images/logo_100.png" height="100" style="float: left;" /><span style=" font-size:12pt; font-weight:600;">Report engine for </span><span style=" font-size:12pt; font-weight:600; color:#7faa18;">Qt</span><span style=" font-size:12pt; font-weight:600;"> framework</span></p> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">LimeReport - multi-platform C++ library written using Qt framework and intended for software developers that would like to add into their application capability to form report or print forms generated using templates.</span></p> -<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><br /></p> -<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><br /></p> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">Official web site : </span><a href="www.limereport.ru"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;">www.limereport.ru</span></a></p> -<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt; text-decoration: underline; color:#0000ff;"><br /></p> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt; font-weight:600;">This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</span></p> -<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:10pt; font-weight:600; color:#000000;"><br /></p> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Copyright 2015 Arin Alexander. All rights reserved.</span></p></body></html> - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/report/images/logo_100.png" height="100" style="float: left;" /><span style=" font-size:12pt; font-weight:600;">Motor de informes para el entorno de trabajo de </span> <span style = "font-size: 12pt; font-weight: 600; color: # 7faa18;"> Qt </span> <span style = "font-size: 12pt; font-weight : 600; "></span> </p> -<p align = "justify" style = "margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-block-indent: 0; text-indent: 0px;" > <span style = "font-size: 11pt;"> LimeReport es una biblioteca de C ++ multiplataforma escrita para el entorno de trabajo de Qt y diseñada para desarrolladores de software que deseen agregar en su aplicación la capacidad para crear informes o imprimir formularios generados mediante plantillas. < / span> </p> -<p align = "justify" style = "- qt -agraph-type: empty; margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-block-indent: 0; text-indent: 0px; font-size: 11pt; "> <br /> </p> -<p align = "justify" style = "- qt -agraph-type: empty; margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-block-indent: 0; text-indent: 0px; font-size: 11pt; "> <br /> </p> -<p align = "justify" style = "margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-block-indent: 0; text-indent: 0px;" > <span style = "font-size: 11pt;"> Sitio web oficial: </span> <a href="www.limereport.ru"> <span style = "font-size: 11pt; text-decoration: underline ; color: # 0000ff; "> www.limereport.ru </span> </a> </p> -<p align = "justify" style = "- qt -agraph-type: empty; margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-block-indent: 0; texto-sangría: 0px; fuente-tamaño: 11 puntos; texto-decoración: subrayado; color: # 0000ff; "> <br /> </p> -<p align = "justify" style = "margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-block-indent: 0; text-indent: 0px;" > <span style = "font-size: 10pt; font-weight: 600;"> Esta biblioteca se distribuye con la esperanza de que sea útil, pero SIN NINGUNA GARANTÍA; sin ni siquiera la garantía implícita de COMERCIABILIDAD o APTITUD PARA UN PROPÓSITO PARTICULAR. </span> </p> -<p align = "justify" style = "- qt -agraph-type: empty; margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-block-indent: 0; text-indent: 0px; font-size: 10pt; font-weight: 600; color: # 000000; "> <br /> </p> -<p align = "justify" style = "margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-block-indent: 0; text-indent: 0px;" > <span style = "font-size: 10pt;">Derechos reservados 2015 Arin Alexander. Todos los derechos reservados. - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">(c) 2015 Arin Alexander arin_a@bk.ru</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="SEC1"></a><span style=" font-family:'sans-serif'; font-weight:600;">G</span><span style=" font-family:'sans-serif'; font-weight:600;">NU LESSER GENERAL PUBLIC LICENSE</span></p> @@ -412,6 +431,34 @@ p, li { white-space: pre-wrap; } <p style = "margin-top: 0px; margin-bottom: 15px; margin-left: 0px; margin-right: 0px; -qt-block-indent: 0; text-indent: 0px;"> <span style = "font-family: 'monospace';"> Ty Coon, Presidente de Vice </span> </p> <p style = "margin-top: 19px; margin-bottom: 19px; margin-left: 0px; margin-right: 0px; -qt-block-indent: 0; text-indent: 0px;"> <span style = "font-family: 'sans-serif';"> ¡Eso es todo!</span></p></body></html> + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/report/images/logo_100.png" height="100" style="float: left;" /><span style=" font-size:12pt; font-weight:600;">Report engine for </span><span style=" font-size:12pt; font-weight:600; color:#7faa18;">Qt</span><span style=" font-size:12pt; font-weight:600;"> framework</span></p> +<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">LimeReport - multi-platform C++ library written using Qt framework and intended for software developers that would like to add into their application capability to form report or print forms generated using templates.</span></p> +<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><br /></p> +<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><br /></p> +<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">Official web site : </span><a href="www.limereport.ru"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;">www.limereport.ru</span></a></p> +<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt; text-decoration: underline; color:#0000ff;"><br /></p> +<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt; font-weight:600;">This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</span></p> +<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:10pt; font-weight:600; color:#000000;"><br /></p> +<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Copyright 2021 Arin Alexander. All rights reserved.</span></p></body></html> + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/report/images/logo_100.png" height="100" style="float: left;" /><span style=" font-size:12pt; font-weight:600;">Motor de informes para el entorno de trabajo de </span> <span style = "font-size: 12pt; font-weight: 600; color: # 7faa18;"> Qt </span> <span style = "font-size: 12pt; font-weight : 600; "></span> </p> +<p align = "justify" style = "margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-block-indent: 0; text-indent: 0px;" > <span style = "font-size: 11pt;"> LimeReport es una biblioteca de C ++ multiplataforma escrita para el entorno de trabajo de Qt y diseñada para desarrolladores de software que deseen agregar en su aplicación la capacidad para crear informes o imprimir formularios generados mediante plantillas. < / span> </p> +<p align = "justify" style = "- qt -agraph-type: empty; margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-block-indent: 0; text-indent: 0px; font-size: 11pt; "> <br /> </p> +<p align = "justify" style = "- qt -agraph-type: empty; margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-block-indent: 0; text-indent: 0px; font-size: 11pt; "> <br /> </p> +<p align = "justify" style = "margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-block-indent: 0; text-indent: 0px;" > <span style = "font-size: 11pt;"> Sitio web oficial: </span> <a href="www.limereport.ru"> <span style = "font-size: 11pt; text-decoration: underline ; color: # 0000ff; "> www.limereport.ru </span> </a> </p> +<p align = "justify" style = "- qt -agraph-type: empty; margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-block-indent: 0; texto-sangría: 0px; fuente-tamaño: 11 puntos; texto-decoración: subrayado; color: # 0000ff; "> <br /> </p> +<p align = "justify" style = "margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-block-indent: 0; text-indent: 0px;" > <span style = "font-size: 10pt; font-weight: 600;"> Esta biblioteca se distribuye con la esperanza de que sea útil, pero SIN NINGUNA GARANTÍA; sin ni siquiera la garantía implícita de COMERCIABILIDAD o APTITUD PARA UN PROPÓSITO PARTICULAR. </span> </p> +<p align = "justify" style = "- qt -agraph-type: empty; margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-block-indent: 0; text-indent: 0px; font-size: 10pt; font-weight: 600; color: # 000000; "> <br /> </p> +<p align = "justify" style = "margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-block-indent: 0; text-indent: 0px;" > <span style = "font-size: 10pt;">Derechos reservados 2015 Arin Alexander. Todos los derechos reservados. {3C?} {4.0/?} {3.?} {40/?} {1"?} {9p?} {400;?} {0p?} {0p?} {0p?} {0p?} {0;?} {0p?} {100.?} {100"?} {12p?} {600;?} {12p?} {600;?} {7f?} {18;?} {12p?} {600;?} {0p?} {0p?} {0p?} {0p?} {0;?} {0p?} {11p?} {0p?} {0p?} {0p?} {0p?} {0;?} {0p?} {11p?} {0p?} {0p?} {0p?} {0p?} {0;?} {0p?} {11p?} {0p?} {0p?} {0p?} {0p?} {0;?} {0p?} {11p?} {11p?} {0000f?} {0p?} {0p?} {0p?} {0p?} {0;?} {0p?} {11p?} {0000f?} {0p?} {0p?} {0p?} {0p?} {0;?} {0p?} {10p?} {600;?} {0p?} {0p?} {0p?} {0p?} {0;?} {0p?} {10p?} {600;?} {000000;?} {0p?} {0p?} {0p?} {0p?} {0;?} {0p?} {10p?} {2021 ?} + LimeReport::AlignmentPropItem @@ -585,6 +632,22 @@ p, li { white-space: pre-wrap; } Lock item geometry + + Edit borders... + + + + + + LimeReport::BorderFrameEditor + + BorderFrameEditor + + + + Text + + LimeReport::ConnectionDesc @@ -1369,6 +1432,10 @@ p, li { white-space: pre-wrap; } All borders Todos los bordes + + Edit border + + LimeReport::MasterDetailProxyModel @@ -1417,6 +1484,93 @@ p, li { white-space: pre-wrap; } Exportar a PDF + + LimeReport::PageEditor + + Page setup + + + + Paper + + + + Format + Formato + + + Dimension + + + + Width: + + + + mm + + + + Height: + + + + Orientation + + + + Portrait + Retrato + + + Landscape + Apaisado (Horizontal) + + + Margins + + + + Bottom: + + + + Top: + + + + Right: + + + + Left: + + + + Drop printer margins + + + + Other + + + + Height options + + + + Endless Height + + + + Extended Height: + + + + Full page + Página completa + + LimeReport::PageFooter @@ -1461,6 +1615,14 @@ p, li { white-space: pre-wrap; } Set page size to printer Establecer el tamaño de página a la impresora + + Mix with prior page + + + + Edit + Editar + LimeReport::PreviewReportWidget @@ -2157,6 +2319,38 @@ p, li { white-space: pre-wrap; } removeGap + + xAxisField + + + + seriesLineWidth + + + + drawPoints + + + + dropPrinterMargins + + + + notPrintIfEmpty + + + + gridChartLines + + + + horizontalAxisOnTop + + + + mixWithPriorPage + + LimeReport::RectPropItem @@ -3063,10 +3257,6 @@ Esta vista previa ya no es válida. Ctrl+Return Ctrl+Intro - - Esc - - LimeReport::TranslationEditor @@ -3404,5 +3594,25 @@ Esta vista previa ya no es válida. Series + + X Axis + + + + Y Axis + + + + X axis + + + + Y axis + + + + Axis + + diff --git a/translations/limereport_fr.ts b/translations/limereport_fr.ts index cec566c..e126f36 100644 --- a/translations/limereport_fr.ts +++ b/translations/limereport_fr.ts @@ -9,6 +9,61 @@ + + ChartAxisEditor + + + Axis editor + + + + + Axis + + + + + Reverse direction + + + + + Enable scale calculation + + + + + Step + + + + + Maximum + + + + + Minimum + + + + + + + Automatic + + + + + Cancel + Annuler + + + + Ok + + + ChartItemEditor @@ -52,12 +107,17 @@ Type - + Labels field Valeurs - + + X data field + + + + Ok @@ -127,7 +187,7 @@ Obligatoire - + Attention Erreur @@ -171,8 +231,8 @@ p, li { white-space: pre-wrap; } <p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt; text-decoration: underline; color:#0000ff;"><br /></p> <p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt; font-weight:600;">This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</span></p> <p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:10pt; font-weight:600; color:#000000;"><br /></p> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Copyright 2015 Arin Alexander. All rights reserved.</span></p></body></html> - +<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Copyright 2021 Arin Alexander. All rights reserved.</span></p></body></html> + @@ -494,62 +554,80 @@ p, li { white-space: pre-wrap; } LimeReport::BaseDesignIntf - - + + Lock item geometry Verrouiller la géométrie d'un élément - + Copy Copier - + Cut Couper - + Paste Coller - + Bring to top Placer au premier-plan - + Send to back Placer en arrière-plan - + Create Horizontal Layout Créer une disposition horizontale - + Create Vertical Layout Créer une disposition verticale - + No borders Aucune bordure - + All borders Toutes les bordures + + + Edit borders... + + + + + LimeReport::BorderFrameEditor + + + BorderFrameEditor + + + + + Text + + LimeReport::ConnectionDesc - + defaultConnection Connexion par défaut @@ -713,7 +791,7 @@ p, li { white-space: pre-wrap; } - + Datasources Source de données @@ -790,45 +868,45 @@ p, li { white-space: pre-wrap; } Saisir une variable - - - - + + + + Attention - + Do you really want to delete "%1" connection? Voulez-vous vraiment supprimer la connexion %1? - + Report variables Variables du rapport - + System variables Variables système - + External variables Variables externe - + Do you really want to delete "%1" datasource? Vouz-vous vraiment supprimer la source de donnée "%1"? - + Do you really want to delete variable "%1"? Vouz-vous vraiment supprimer la variable "%1"? - + Error Erreur @@ -876,48 +954,51 @@ p, li { white-space: pre-wrap; } LimeReport::DataSourceManager - + Connection "%1" is not open La connexion "%1" n'est pas ouverte - - + + + + Variable "%1" not found! Variable "%1" introuvable! - + + Unknown parameter "%1" for variable "%2" found! Paramètre inconnu %1 pour la variable %2 ! - - + + Datasource "%1" not found! Source de donnée "%1" introuvable! - + Connection with name "%1" already exists! La connexion avec le nom "%1" existe déjà! - - - - - + + + + + Datasource with name "%1" already exists! La source de donnée avec le nom "%1" existe déjà! - + Database "%1" not found Base de données "%1 introuvable - + invalid connection Connexion invalide @@ -925,17 +1006,17 @@ p, li { white-space: pre-wrap; } LimeReport::DataSourceModel - + Datasources Source de données - + Variables - + External variables Variables externe @@ -1327,17 +1408,17 @@ p, li { white-space: pre-wrap; } LimeReport::FontEditorWidget - + Font bold Gras - + Font Italic Italique - + Font Underline Souligné @@ -1399,22 +1480,22 @@ p, li { white-space: pre-wrap; } LimeReport::GroupFunction - + Field "%1" not found Champ %1 introuvable - + Variable "%1" not found Variable %1 introuvable - + Wrong script syntax "%1" Syntaxe incorrecte du script "%1" - + Item "%1" not found Elément "%1" introuvable @@ -1422,29 +1503,29 @@ p, li { white-space: pre-wrap; } LimeReport::ImageItem - - + + Edit Edition - - + + Watermark Filigrane - + Images (*.gif *.icns *.ico *.jpeg *.tga *.tiff *.wbmp *.webp *.png *.jpg *.bmp);;All(*.*) - + Image Image - + Ext. Externe. @@ -1518,45 +1599,50 @@ p, li { white-space: pre-wrap; } LimeReport::ItemsBordersEditorWidget - + Top line ligne haute - + Bottom line Ligne basse - + Left line Ligne gauche - + Right line Ligne droite - + No borders Aucune bordure - + All borders Toutes les bordures + + + Edit border + + LimeReport::MasterDetailProxyModel - + Field: "%1" not found in "%2" child datasource Le champ: "%1"est introuvable dans la source de donnée enfant "%2" - + Field: "%1" not found in "%2" master datasource Le champ: "%1"est introuvable dans la source de donnée principale "%2" @@ -1564,7 +1650,7 @@ p, li { white-space: pre-wrap; } LimeReport::ModelToDataSource - + model is destroyed Le modèle a été supprimé @@ -1572,7 +1658,7 @@ p, li { white-space: pre-wrap; } LimeReport::ObjectBrowser - + Objects Objets @@ -1580,17 +1666,17 @@ p, li { white-space: pre-wrap; } LimeReport::ObjectInspectorWidget - + Clear Effacer - + Filter Filtrer - + Translate properties Traduire les popriétés @@ -1603,6 +1689,119 @@ p, li { white-space: pre-wrap; } Exporter au format PDF + + LimeReport::PageEditor + + + Page setup + + + + + Paper + + + + + Format + + + + + Dimension + + + + + Width: + + + + + + + + + + mm + + + + + Height: + + + + + Orientation + + + + + Portrait + + + + + Landscape + Paysage + + + + Margins + + + + + Bottom: + + + + + Top: + + + + + Right: + + + + + Left: + + + + + Drop printer margins + + + + + Other + + + + + Height options + + + + + Endless Height + + + + + Extended Height: + + + + + Full page + Page entière + + LimeReport::PageFooter @@ -1634,34 +1833,46 @@ p, li { white-space: pre-wrap; } LimeReport::PageItemDesignIntf - + + + Edit + Edition + + + Paste Coller - - + + Page is TOC Table de contenus - - + + Reset page number Réinitialiser le numéro de page - - + + Full page Page entière - - + + Set page size to printer Adapterr la taille de la page à l'imprimante + + + + Mix with prior page + + LimeReport::PreviewReportWidget @@ -1671,7 +1882,7 @@ p, li { white-space: pre-wrap; } Formulaire - + %1 file name %1 nom de fichier @@ -1840,37 +2051,37 @@ p, li { white-space: pre-wrap; } Supprimer - + Printing Impression en cours - + Page: - + Font Police - + Text align Alignement de texte - + of %1 de %1 - + Attention Attention - + The printing is in process L'impresion est en cours @@ -1878,7 +2089,7 @@ p, li { white-space: pre-wrap; } LimeReport::ProxyHolder - + Datasource has been invalidated La source de donnée n'a pas été validée @@ -2414,126 +2625,166 @@ p, li { white-space: pre-wrap; } + xAxisField + + + + legendAlign Alignement de la légende - + series Séries - + titleAlign Alignement du titre - + watermark Filigrane - + keepTopSpace Garder l'espace inférieur - + printable Imprimable - + variable Variable - + replaceCRwithBR Remplacer CR par BR - + hideIfEmpty Masquer si vide - + hideEmptyItems Masquer les éléments vides - + useExternalPainter Utiliser un dessin externe - + layoutSpacing Espacement disposition - + printerName Nom de l'imprimante - + fontLetterSpacing Interlettre - + hideText Masquer le texte - + option3 Option 3 - + units Unités - + geometryLocked Fixer la géométrie - + printBehavior Méthode d'impression - + shiftItems Décaler les éléments - + showLegend Afficher la légende - + + seriesLineWidth + + + + + drawPoints + + + + removeGap Supprimer l'espace - + + dropPrinterMargins + + + + + notPrintIfEmpty + + + + + gridChartLines + + + + + horizontalAxisOnTop + + + + + mixWithPriorPage + + + + Property Name Propriété - + Property value Valeur - + Warning Avertissement @@ -2554,16 +2805,16 @@ p, li { white-space: pre-wrap; } LimeReport::RectUnitPropItem - - - + + + width Largeur - - - + + + height Hauteur @@ -2599,370 +2850,370 @@ p, li { white-space: pre-wrap; } LimeReport::ReportDesignWindow - - + + Rendered %1 pages %1 pages préparées - + Cancel report rendering Annuler la préparation - + New Report Nouveau rapport - + New Report Page Nouvelle page - + Delete Report Page Supprimer une page - + Edit Mode Mode d'édition - + Undo Annuler - + Redo Répéter - + Copy Copier - + Paste Coller - + Cut Couper - + Settings Paramètres - + Use grid Utiliser la grille - + Use magnet Utiliser l'aimant - + Text Item Elément de texte - + Save Report Enregistrer le rapport - + Save Report As Enregistrer le rapport sous - + Load Report Ouvrir un rapport - + Delete item Supprimer élément - + Zoom In Zoom avant - + Zoom Out Zoom arrière - + Render Report Afficher l'aperçu du rapport - + Edit layouts mode Modifier le mode de mise en forme - + Horizontal layout Mise en page horizontale - + Vertical layout Disposition verticale - + About A propos - + Hide left panel | Alt+L Masquer le volet gauche - + Hide right panel | Alt+R Masquer le volet droite - + Delete dialog Supprimer la boite du dialogue - + Add new dialog Ajouter une boite de dialogue - + Lock selected items Verrouiller les éléments sélectionnés - + Unlock selected items Déverrouiller les éléments sélectionnés - + Select one level items Sélectionner un niveau d'éléments - + Report Tools Outils de rapport - + Main Tools Outils principales - + Font Police - + Text alignment Alignement de texte - + Items alignment Alignement des éléments - + Borders Bordures - + Report bands Bandesde rapport - + Report Header En-tête du rapport - + Report Footer Pied de rapport - + Page Header En-tête de page - + Page Footer Pied de page - + Data Données - + Data Header En-tête de données - + Data Footer Pied de données - + SubDetail Sous-détails - + SubDetailHeader En-tête de sous-détails - + SubDetailFooter Pied de sous-détails - + GroupHeader En-tête de groupe - + GroupFooter Pied de groupe - + Tear-off Band Bande détachable - + File Fichier - + Edit Edition - + Info - + Recent Files Fichiers récents - - + + Object Inspector Inspecteur d'objets - + Report structure Structure du rapport - + Widget Box Boite de Widget - + Property Editor Editeur de propriété - + Action Editor Editeur d'action - + Resource Editor Editeur de ressource - + SignalSlot Editor Editeur de Signaux & Slots - + Dialog Designer Tools Boite à outils du Designer - + Data Browser Navigateur de données - + Script Browser Navigateur de script - + Report has been modified! Do you want save the report? Le rapport a été modifié! Voulez-vous l'enregistrer? - - + + Report file name Nom du fichier du rapport - + Attention Attention - + The rendering is in process La préparation du rapport est en cours - + Warning Avertissement - + File "%1" not found! Fichier "%1" introuvable! @@ -2970,27 +3221,27 @@ p, li { white-space: pre-wrap; } LimeReport::ReportEnginePrivate - + Preview Aperçu avant impression - + Error Erreur - + %1 file name %1 nom de fichier - + Report File Change Nom du fichier changé - + The report file "%1" has changed names or been deleted. This preview is no longer valid. @@ -2999,12 +3250,12 @@ This preview is no longer valid. Cet aperçu n'est plus valide. - + Designer not found! Designer introuvable! - + Language %1 already exists La langue %1 existe déja @@ -3030,22 +3281,24 @@ Cet aperçu n'est plus valide. - + Error Erreur - + page index out of range Indice de la page dépassé - + + Databand "%1" not found Bande de données "%1 introuvable - + + Wrong using function %1 Utilisation incorrecte de la fonction "%1" @@ -3095,7 +3348,7 @@ Cet aperçu n'est plus valide. - + Preview Aperçu @@ -3127,7 +3380,7 @@ Cet aperçu n'est plus valide. - + CSV @@ -3157,48 +3410,48 @@ Cet aperçu n'est plus valide. - + Error Erreur - + Datasource Name is empty! Nom de source de donnée est vide! - + SQL is empty! SQL est vide! - + Datasource with name: "%1" already exists! La source de donnée avec le nom "%1" existe déja! - + defaultConnection Connexion par défaut - + Datasource with name %1 already exist La source de donnée avec le nom "%1" existe déja - - + + Attention - + Connection is not specified La connexion n'est pas spécifiée - + Refresh Actualiser @@ -3263,29 +3516,29 @@ Cet aperçu n'est plus valide. Nom - + NO CATEGORY AUCUNE CATEGORIE - - - + + + Error Erreur - + Dialog with name: %1 already exists Le dialogue avec le nom "%1" existe déja - + ui file must cointain QDialog instead QWidget or QMainWindow Le fichier ui doit contenir un QDialog au lieu de QWidget ou QMainWindow - + wrong file format Format de fichier incorrect @@ -3311,13 +3564,13 @@ Cet aperçu n'est plus valide. LimeReport::ScriptEngineContext - + Dialog with name: %1 can`t be created Le dialogue avec le nom "%1" ne peut pas être crée - - + + Error Erreur @@ -3330,20 +3583,20 @@ Cet aperçu n'est plus valide. Fonctions de groupe - - - - - - - - + + + + + + + + Value Valeur - + BandName Nom de la bande @@ -3354,135 +3607,137 @@ Cet aperçu n'est plus valide. - + FieldName Nom du champ - + + Variable %1 not found Variable "%1" introuvable - + + Field %1 not found in %2! Champ "%1 introuvable dans %2! - + SYSTEM Système - - - + + + NUMBER Nombre - - - - - + + + + + Format - + Precision Précision - - - - + + + + Locale Local - - - - - - + + + + + + DATE&TIME Date&Heure - + CurrencySymbol Symbolde de la monnaie - - - - - - - - - - + + + + + + + + + + GENERAL General - - - + + + Name Nom - + Datasource Source de donnée - + ValueField Valeur - + KeyField Clé - + KeyFieldValue Valeur de la clé - + RowIndex - - - + + + Unique identifier Identifiant unique - - + + Content Contenu - + Indent Indenter - + datasourceName Nom de source de donnée @@ -3677,18 +3932,18 @@ Cet aperçu n'est plus valide. Masquer si vide - - + + Error Erreur - + TextItem " %1 " already has folower " %2 " L'élément texte " %1 " a toujours un copain " %2 " - + TextItem " %1 " not found! Elément "%1" introuvable! @@ -3720,11 +3975,6 @@ Cet aperçu n'est plus valide. Cancel Annuler - - - Esc - Echap - LimeReport::TranslationEditor @@ -3936,32 +4186,32 @@ Cet aperçu n'est plus valide. - + Invalid connection! %1 Connexion invalidé %1 - + Master datasource "%1" not found! Source de donnée principale "%1" introuvable! - + Master datasouce "%1" not found! Source de donnée principale "%1" introuvable! - + Child Enfant - + and child est enfant - + datasouce "%1" not found! Source de donnée "%1" introuvable! @@ -4077,29 +4327,27 @@ Cet aperçu n'est plus valide. - - + Attention! - - + Selected elements have different parent containers Les éléments sélectionnés ont un parent différent - + Object with name %1 already exists! L'objet avec le nom "%1" existe déja! - + Function %1 not found or have wrong arguments La fonction %1 est introuvable ou contient des paramètres incorrects - + Datasource manager not found Gestionnaire de source de donnée introuvable @@ -4113,17 +4361,17 @@ Cet aperçu n'est plus valide. - - - + + + mm - - - + + + '' @@ -4148,23 +4396,23 @@ Cet aperçu n'est plus valide. Contenu vide - + Chart Item Elément du graphe - + First Prémier - + Second Second - + Thrid Troisième @@ -4180,30 +4428,30 @@ Cet aperçu n'est plus valide. Exporter au format PDF - + Dark Sombre - + Light Clair - + Default par défaut - - + + Millimeters Millimètres - - + + Inches Pouces @@ -4223,5 +4471,30 @@ Cet aperçu n'est plus valide. Series Séries + + + X Axis + + + + + Y Axis + + + + + X axis + + + + + Y axis + + + + + Axis + + diff --git a/translations/limereport_pl.ts b/translations/limereport_pl.ts index af65f1f..40c3860 100644 --- a/translations/limereport_pl.ts +++ b/translations/limereport_pl.ts @@ -9,6 +9,61 @@ + + ChartAxisEditor + + + Axis editor + + + + + Axis + + + + + Reverse direction + + + + + Enable scale calculation + + + + + Step + + + + + Maximum + + + + + Minimum + + + + + + + Automatic + + + + + Cancel + Anuluj + + + + Ok + Ok + + ChartItemEditor @@ -52,12 +107,17 @@ Typ - + Labels field Pole etykiet - + + X data field + + + + Ok Ok @@ -127,7 +187,7 @@ Obowiązkowy - + Attention Uwaga @@ -171,7 +231,7 @@ p, li { white-space: pre-wrap; } <p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt; text-decoration: underline; color:#0000ff;"><br /></p> <p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt; font-weight:600;">This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</span></p> <p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:10pt; font-weight:600; color:#000000;"><br /></p> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Copyright 2015 Arin Alexander. All rights reserved.</span></p></body></html> +<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Copyright 2021 Arin Alexander. All rights reserved.</span></p></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } @@ -184,7 +244,7 @@ p, li { white-space: pre-wrap; } <p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt; text-decoration: underline; color:#0000ff;"><br /></p> <p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt; font-weight:600;">Ta biblioteka jest rozpowszechniana z nadzieją, że będzie przydatna, ale BEZ JAKIEJKOLWIEK GWARANCJI; nawet domyślnej gwarancji PRZYDATNOŚCI HANDLOWEJ lub PRZYDATNOŚCI DO OKREŚLONYCH CELÓW.</span></p> <p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:10pt; font-weight:600; color:#000000;"><br /></p> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Copyright 2015 Arin Alexander. All rights reserved.</span></p></body></html> +<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Copyright 2015 Arin Alexander. All rights reserved.</span></p></body></html> {3C?} {4.0/?} {3.?} {40/?} {1"?} {9p?} {400;?} {0p?} {0p?} {0p?} {0p?} {0;?} {0p?} {100.?} {100"?} {12p?} {600;?} {12p?} {600;?} {7f?} {18;?} {12p?} {600;?} {0p?} {0p?} {0p?} {0p?} {0;?} {0p?} {11p?} {0p?} {0p?} {0p?} {0p?} {0;?} {0p?} {11p?} {0p?} {0p?} {0p?} {0p?} {0;?} {0p?} {11p?} {0p?} {0p?} {0p?} {0p?} {0;?} {0p?} {11p?} {11p?} {0000f?} {0p?} {0p?} {0p?} {0p?} {0;?} {0p?} {11p?} {0000f?} {0p?} {0p?} {0p?} {0p?} {0;?} {0p?} {10p?} {600;?} {0p?} {0p?} {0p?} {0p?} {0;?} {0p?} {10p?} {600;?} {000000;?} {0p?} {0p?} {0p?} {0p?} {0;?} {0p?} {10p?} {2021 ?} @@ -506,62 +566,81 @@ p, li { white-space: pre-wrap; } LimeReport::BaseDesignIntf - - + + Lock item geometry Zablokuj geometrię pozycji - + Copy Kopiuj - + Cut Wytnij - + Paste Wklej - + Bring to top Przenieś na górę - + Send to back Przenieś na dół - + Create Horizontal Layout Utwórz układ poziomy - + Create Vertical Layout Utwórz układ pionowy - + No borders Bez obramowania - + All borders Pełne obramowanie + + + Edit borders... + + + + + + LimeReport::BorderFrameEditor + + + BorderFrameEditor + + + + + Text + + LimeReport::ConnectionDesc - + defaultConnection Domyślne połączenie @@ -725,7 +804,7 @@ p, li { white-space: pre-wrap; } - + Datasources Źródła danych @@ -802,45 +881,45 @@ p, li { white-space: pre-wrap; } Chwyć zmienną - - - - + + + + Attention Uwaga - + Do you really want to delete "%1" connection? Czy chcesz naprawdę skasować "%1" połączenie? - + Report variables Raport zmiennych - + System variables Zmienne systemowe - + External variables Zmienne zewnętrzne - + Do you really want to delete "%1" datasource? Czy chcesz naprawdę skasować "%1" źródło danych? - + Do you really want to delete variable "%1"? Czy chcesz naprawdę skasować zmienną "%1"? - + Error Błąd @@ -888,48 +967,51 @@ p, li { white-space: pre-wrap; } LimeReport::DataSourceManager - + Connection "%1" is not open Połączenie "%1" nie jest otwarte - - + + + + Variable "%1" not found! Zmienna "%1" nie znaleziona! - + + Unknown parameter "%1" for variable "%2" found! Nieznany parametr "%1" dla znalezionej zmiennej "%2"! - - + + Datasource "%1" not found! Źródło danych %1" nie znalezione! - + Connection with name "%1" already exists! Połączenie o nazwie "%1" już istnieje! - - - - - + + + + + Datasource with name "%1" already exists! Źródło danych o nazwie "%1" już istnieje! - + Database "%1" not found Baza danych "%1" nie znaleziona - + invalid connection Nieprawidłowe połączenie @@ -937,17 +1019,17 @@ p, li { white-space: pre-wrap; } LimeReport::DataSourceModel - + Datasources Źródła danych - + Variables Zmienne - + External variables Zmienne zewnętrzne @@ -1339,17 +1421,17 @@ p, li { white-space: pre-wrap; } LimeReport::FontEditorWidget - + Font bold Czcionka pogrubiona - + Font Italic Czcionka pochylona - + Font Underline Czcionka podkreślona @@ -1411,22 +1493,22 @@ p, li { white-space: pre-wrap; } LimeReport::GroupFunction - + Field "%1" not found Pole "%1" nie znalezione - + Variable "%1" not found Zmienna "%1" nie znaleziona - + Wrong script syntax "%1" Niepoprawna składnia skryptu "%1" - + Item "%1" not found Pozycja "%1" nie znaleziona @@ -1434,29 +1516,29 @@ p, li { white-space: pre-wrap; } LimeReport::ImageItem - - + + Edit Edycja - - + + Watermark Znak wodny - + Images (*.gif *.icns *.ico *.jpeg *.tga *.tiff *.wbmp *.webp *.png *.jpg *.bmp);;All(*.*) - + Image Obraz - + Ext. Zewn. @@ -1530,45 +1612,50 @@ p, li { white-space: pre-wrap; } LimeReport::ItemsBordersEditorWidget - + Top line Górna krawędź - + Bottom line Dolna krawędź - + Left line Lewa krawędź - + Right line Prawa krawędź - + No borders Bez krawędzi - + All borders Wszystkie krawędzie + + + Edit border + + LimeReport::MasterDetailProxyModel - + Field: "%1" not found in "%2" child datasource Pole: "%1" nie znalezione w "%2" źródle danch dziecka - + Field: "%1" not found in "%2" master datasource Pole: "%1" nie znalezione w "%2" głównym źródle danch @@ -1576,7 +1663,7 @@ p, li { white-space: pre-wrap; } LimeReport::ModelToDataSource - + model is destroyed Model danych jest zniszczony @@ -1584,7 +1671,7 @@ p, li { white-space: pre-wrap; } LimeReport::ObjectBrowser - + Objects Obiekty @@ -1592,17 +1679,17 @@ p, li { white-space: pre-wrap; } LimeReport::ObjectInspectorWidget - + Clear Wyczyść - + Filter Filtr - + Translate properties Przetłumacz właściwości @@ -1615,6 +1702,119 @@ p, li { white-space: pre-wrap; } Eksport do PDF + + LimeReport::PageEditor + + + Page setup + + + + + Paper + + + + + Format + Format + + + + Dimension + + + + + Width: + + + + + + + + + + mm + + + + + Height: + + + + + Orientation + + + + + Portrait + Portret + + + + Landscape + Pejzaż + + + + Margins + + + + + Bottom: + + + + + Top: + + + + + Right: + + + + + Left: + + + + + Drop printer margins + + + + + Other + + + + + Height options + + + + + Endless Height + + + + + Extended Height: + + + + + Full page + Cała strona + + LimeReport::PageFooter @@ -1646,34 +1846,46 @@ p, li { white-space: pre-wrap; } LimeReport::PageItemDesignIntf - + + + Edit + Edycja + + + Paste Wklej - - + + Page is TOC Strona to spis treści - - + + Reset page number Zresetuj numer strony - - + + Full page Cała strona - - + + Set page size to printer Ustaw rozmiar strony na drukarkę + + + + Mix with prior page + + LimeReport::PreviewReportWidget @@ -1683,7 +1895,7 @@ p, li { white-space: pre-wrap; } Formatka - + %1 file name %1 nazwa pliku @@ -1852,37 +2064,37 @@ p, li { white-space: pre-wrap; } Usuń - + Printing - + Page: Strona: - + Font Czcionka - + Text align Wyrównanie tekstu - + of %1 z %1 - + Attention Uwaga - + The printing is in process @@ -1890,7 +2102,7 @@ p, li { white-space: pre-wrap; } LimeReport::ProxyHolder - + Datasource has been invalidated Źródło danych zostało unieważnione @@ -2426,126 +2638,166 @@ p, li { white-space: pre-wrap; } + xAxisField + + + + legendAlign Wyrównanie legendy - + series Seria - + titleAlign Wyrównanie tytułu - + watermark Znak wodny - + keepTopSpace Zachowaj górny obszar - + printable Drukowalny - + variable Zmienna - + replaceCRwithBR Zamień CR na BR - + hideIfEmpty Ukryj jeśli pusty - + hideEmptyItems Ukryj puste elementy - + useExternalPainter Użyj zewnętrznego malarza - + layoutSpacing Układ odstępów - + printerName Nazwa drukarki - + fontLetterSpacing Odstępy między literami fontu - + hideText Ukryj tekst - + option3 Opcja3 - + units Jednostki - + geometryLocked Zablokowana geometria - + printBehavior Zachowanie drukowania - + shiftItems - + showLegend - + + seriesLineWidth + + + + + drawPoints + + + + removeGap - + + dropPrinterMargins + + + + + notPrintIfEmpty + + + + + gridChartLines + + + + + horizontalAxisOnTop + + + + + mixWithPriorPage + + + + Property Name Nazwa właściwości - + Property value Wartość właściwości - + Warning Uwaga @@ -2566,16 +2818,16 @@ p, li { white-space: pre-wrap; } LimeReport::RectUnitPropItem - - - + + + width Szerokość - - - + + + height Wysokość @@ -2611,370 +2863,370 @@ p, li { white-space: pre-wrap; } LimeReport::ReportDesignWindow - - + + Rendered %1 pages - + Cancel report rendering - + New Report Nowy raport - + New Report Page Nowa strona raportu - + Delete Report Page Usuń stronę raportu - + Edit Mode Tryb edycji - + Undo Cofnij - + Redo Ponów - + Copy Kopiuj - + Paste Wklej - + Cut Wytnij - + Settings Ustawienia - + Use grid Użyj siatki - + Use magnet Użyj magnesu - + Text Item Element tekstowy - + Save Report Zapisz raport - + Save Report As Zapisz raport jako - + Load Report Wczytaj raport - + Delete item Usuń pozycję - + Zoom In Powiększ - + Zoom Out Pomniejsz - + Render Report Renderuj raport - + Edit layouts mode Edytuj tryb układu - + Horizontal layout Układ poziomy - + Vertical layout Układ pionowy - + About O - + Hide left panel | Alt+L Ukryj lewy panel | Alt+L - + Hide right panel | Alt+R Ukryj prawy panel | Alt+R - + Delete dialog Dialog kasowania - + Add new dialog Dodaj nowy dialog - + Lock selected items Zablokuj zaznaczone elementy - + Unlock selected items Odblokuj zaznaczone elementy - + Select one level items Wybierz elementy na jednym poziomie - + Report Tools Narzędzia raportu - + Main Tools Główne narzędzia - + Font Czcionka - + Text alignment Wyrównanie tekstu - + Items alignment Wyrównanie elementów - + Borders Krawędzie - + Report bands Pasma raportu - + Report Header Nagłówek raportu - + Report Footer Stopka raportu - + Page Header Nagłówek strony - + Page Footer Stopka strony - + Data Dane - + Data Header Nagłówek danych - + Data Footer Stopka danych - + SubDetail Pod szczegóły - + SubDetailHeader Nagłówek pod szczegółów - + SubDetailFooter Stopka pod szczegółów - + GroupHeader Nagłówek grupujący - + GroupFooter Stopka grupująca - + Tear-off Band Sekcja zrywająca - + File Plik - + Edit Edycja - + Info Informacja - + Recent Files Ostatnie pliki - - + + Object Inspector Inspektor obiektów - + Report structure Struktura raportu - + Widget Box Pudełko widżetów - + Property Editor Edytor właściowości - + Action Editor Edytor akcji - + Resource Editor Edytor zasobów - + SignalSlot Editor Edytor sygnałów i slotów - + Dialog Designer Tools Narzędzia projektowania dialogów - + Data Browser Przeglądarka danych - + Script Browser Przeglądarka skryptów - + Report has been modified! Do you want save the report? Raport został zmodyfikowany! Czy chcesz zapisać raport? - - + + Report file name Nazwa pliku raportu - + Attention Uwaga - + The rendering is in process - + Warning Ostrzeżenie - + File "%1" not found! Plik "%1" nie znaleziony! @@ -2982,27 +3234,27 @@ p, li { white-space: pre-wrap; } LimeReport::ReportEnginePrivate - + Preview Podgląd - + Error Błąd - + %1 file name %1 nazwa pliku - + Report File Change Zmiana pliku raportu - + The report file "%1" has changed names or been deleted. This preview is no longer valid. @@ -3011,12 +3263,12 @@ This preview is no longer valid. Ten podgląd nie jest już prawidłowy. - + Designer not found! Nie znaleziono projektanta! - + Language %1 already exists Język %1 już istnieje @@ -3042,22 +3294,24 @@ Ten podgląd nie jest już prawidłowy. - + Error Błąd - + page index out of range indeks strony poza zakresem - + + Databand "%1" not found Sekcja danych "%1" nie znaleziona - + + Wrong using function %1 Złe użycie funkcji %1 @@ -3107,7 +3361,7 @@ Ten podgląd nie jest już prawidłowy. - + Preview Podgląd @@ -3139,7 +3393,7 @@ Ten podgląd nie jest już prawidłowy. - + CSV CSV @@ -3169,48 +3423,48 @@ Ten podgląd nie jest już prawidłowy. Ok - + Error Błąd - + Datasource Name is empty! Nazwa źródła danych jest pusta! - + SQL is empty! SQL jest pusty! - + Datasource with name: "%1" already exists! Źródło danych o nazwie: "%1" już istnieje! - + defaultConnection Domyślne połączenie - + Datasource with name %1 already exist Źródło danych o nazwie %1 już istnieje - - + + Attention Uwaga - + Connection is not specified Połączenie nie zostało określone - + Refresh Odśwież @@ -3275,29 +3529,29 @@ Ten podgląd nie jest już prawidłowy. Nazwa - + NO CATEGORY BEZ KATEGORII - - - + + + Error Błąd - + Dialog with name: %1 already exists Okno dialogowe z nazwą:%1 już istnieje - + ui file must cointain QDialog instead QWidget or QMainWindow Plik ui musi zawierać QDialog zamiast QWidget lub QMainWindow - + wrong file format niewłaściwy format pliku @@ -3323,13 +3577,13 @@ Ten podgląd nie jest już prawidłowy. LimeReport::ScriptEngineContext - + Dialog with name: %1 can`t be created Okno dialogowe z nazwą:%1 nie można utworzyć - - + + Error Błąd @@ -3342,20 +3596,20 @@ Ten podgląd nie jest już prawidłowy. FUNKCJE GRUPUJĄCE - - - - - - - - + + + + + + + + Value Wartość - + BandName Nazwa sekcji @@ -3366,135 +3620,137 @@ Ten podgląd nie jest już prawidłowy. - + FieldName Nazwa pola - + + Variable %1 not found Nie znaleziono zmiennej %1 - + + Field %1 not found in %2! Pole %1 nie znalezione w %2! - + SYSTEM SYSTEM - - - + + + NUMBER LICZBA - - - - - + + + + + Format Format - + Precision Precyzja - - - - + + + + Locale Ustawienia lokalne - - - - - - + + + + + + DATE&TIME Data i czas - + Datasource Źródło danych - + ValueField Pole wartości - + KeyField Pole klucza - + KeyFieldValue Wartość pola klucza - + RowIndex Indeks wiersza - - - + + + Unique identifier Unikalny identyfikator - - + + Content Zawartość - + Indent Akapit - + datasourceName Nazwa źródła danych - + CurrencySymbol Symbol waluty - - - - - - - - - - + + + + + + + + + + GENERAL OGÓLNY - - - + + + Name Nazwa @@ -3689,18 +3945,18 @@ Ten podgląd nie jest już prawidłowy. Ukryj jeśli pusty - - + + Error Błąd - + TextItem " %1 " already has folower " %2 " Pole tekstowe " %1 " już ma folower " %2 " - + TextItem " %1 " not found! Nie znaleziono pole tekstowego "%1"! @@ -3732,11 +3988,6 @@ Ten podgląd nie jest już prawidłowy. Cancel Anuluj - - - Esc - Esc - LimeReport::TranslationEditor @@ -3948,32 +4199,32 @@ Ten podgląd nie jest już prawidłowy. - + Invalid connection! %1 Nieprawidłowe połączenie! %1 - + Master datasource "%1" not found! Nie znaleziono głównego źródła danych "%1"! - + Master datasouce "%1" not found! Nie znaleziono głównego źródła danych "%1"! - + Child Dziecko - + and child i dziecko - + datasouce "%1" not found! nie znaleziono źródła danych "%1"! @@ -4089,29 +4340,27 @@ Ten podgląd nie jest już prawidłowy. Ciąg znaków - - + Attention! Uwaga! - - + Selected elements have different parent containers Wybrane elementy mają różne pojemniki nadrzędne - + Object with name %1 already exists! Obiekt o nazwie %1 już istnieje! - + Function %1 not found or have wrong arguments Funkcja %1 nie znaleziona lub ma błędne argumenty - + Datasource manager not found Nie znaleziono menedżera źródła danych @@ -4125,17 +4374,17 @@ Ten podgląd nie jest już prawidłowy. - - - + + + mm mm - - - + + + '' " @@ -4166,23 +4415,23 @@ Ten podgląd nie jest już prawidłowy. Eksport do PDF - + Chart Item Element wykresu - + First Pierwszy - + Second Drugi - + Thrid Trzeci @@ -4192,30 +4441,30 @@ Ten podgląd nie jest już prawidłowy. Układ pionowy - + Dark Ciemny - + Light Jasny - + Default Domyślny - - + + Millimeters Milimetry - - + + Inches Cale @@ -4235,5 +4484,30 @@ Ten podgląd nie jest już prawidłowy. Series Serie + + + X Axis + + + + + Y Axis + + + + + X axis + + + + + Y axis + + + + + Axis + + diff --git a/translations/limereport_ru.qm b/translations/limereport_ru.qm index 11bf6f1..c90174a 100644 Binary files a/translations/limereport_ru.qm and b/translations/limereport_ru.qm differ diff --git a/translations/limereport_ru.ts b/translations/limereport_ru.ts index 1f3a1f8..989efb9 100644 --- a/translations/limereport_ru.ts +++ b/translations/limereport_ru.ts @@ -8,6 +8,49 @@ $ClassName$ + + ChartAxisEditor + + Axis editor + + + + Axis + + + + Reverse direction + + + + Enable scale calculation + + + + Step + + + + Maximum + + + + Minimum + + + + Automatic + + + + Cancel + Отмена + + + Ok + Ок + + ChartItemEditor @@ -54,6 +97,10 @@ Series name Название ряда + + X data field + + ImageItemEditor @@ -161,22 +208,6 @@ p, li { white-space: pre-wrap; } <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/report/images/logo_100.png" height="100" style="float: left;" /><span style=" font-size:12pt; font-weight:600;">Report engine for </span><span style=" font-size:12pt; font-weight:600; color:#7faa18;">Qt</span><span style=" font-size:12pt; font-weight:600;"> framework</span></p> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">LimeReport - multi-platform C++ library written using Qt framework and intended for software developers that would like to add into their application capability to form report or print forms generated using templates.</span></p> -<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><br /></p> -<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><br /></p> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">Official web site : </span><a href="www.limereport.ru"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;">www.limereport.ru</span></a></p> -<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt; text-decoration: underline; color:#0000ff;"><br /></p> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt; font-weight:600;">This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</span></p> -<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:10pt; font-weight:600; color:#000000;"><br /></p> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Copyright 2015 Arin Alexander. All rights reserved.</span></p></body></html> - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">(c) 2015 Arin Alexander arin_a@bk.ru</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="SEC1"></a><span style=" font-family:'sans-serif'; font-weight:600;">G</span><span style=" font-family:'sans-serif'; font-weight:600;">NU LESSER GENERAL PUBLIC LICENSE</span></p> @@ -289,6 +320,22 @@ p, li { white-space: pre-wrap; } <p style=" margin-top:19px; margin-bottom:19px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'sans-serif';">That's all there is to it!</span></p></body></html> + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/report/images/logo_100.png" height="100" style="float: left;" /><span style=" font-size:12pt; font-weight:600;">Report engine for </span><span style=" font-size:12pt; font-weight:600; color:#7faa18;">Qt</span><span style=" font-size:12pt; font-weight:600;"> framework</span></p> +<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">LimeReport - multi-platform C++ library written using Qt framework and intended for software developers that would like to add into their application capability to form report or print forms generated using templates.</span></p> +<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><br /></p> +<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><br /></p> +<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">Official web site : </span><a href="www.limereport.ru"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;">www.limereport.ru</span></a></p> +<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt; text-decoration: underline; color:#0000ff;"><br /></p> +<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt; font-weight:600;">This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</span></p> +<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:10pt; font-weight:600; color:#000000;"><br /></p> +<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Copyright 2021 Arin Alexander. All rights reserved.</span></p></body></html> + + LimeReport::AlignmentPropItem @@ -462,6 +509,22 @@ p, li { white-space: pre-wrap; } Lock item geometry Заблокировать геометрию элемента + + Edit borders... + + + + + + LimeReport::BorderFrameEditor + + BorderFrameEditor + + + + Text + + LimeReport::ConnectionDesc @@ -1246,6 +1309,10 @@ p, li { white-space: pre-wrap; } All borders Все границы + + Edit border + + LimeReport::MasterDetailProxyModel @@ -1294,6 +1361,93 @@ p, li { white-space: pre-wrap; } Экспортировать в PDF + + LimeReport::PageEditor + + Page setup + + + + Paper + + + + Format + Формат + + + Dimension + + + + Width: + + + + mm + + + + Height: + + + + Orientation + + + + Portrait + Портретная + + + Landscape + Альбомная + + + Margins + + + + Bottom: + + + + Top: + + + + Right: + + + + Left: + + + + Drop printer margins + + + + Other + + + + Height options + + + + Endless Height + + + + Extended Height: + + + + Full page + На всю страницу + + LimeReport::PageFooter @@ -1342,6 +1496,10 @@ p, li { white-space: pre-wrap; } Mix with prior page Смешивать с предыдущей страницей + + Edit + Правка + LimeReport::PreviewReportWidget @@ -2050,6 +2208,26 @@ p, li { white-space: pre-wrap; } mixWithPriorPage Смешивать с предыдущей сраницей + + xAxisField + + + + seriesLineWidth + + + + drawPoints + + + + gridChartLines + + + + horizontalAxisOnTop + + LimeReport::RectPropItem @@ -2954,10 +3132,6 @@ This preview is no longer valid. Ctrl+Return - - Esc - - LimeReport::TranslationEditor @@ -3295,5 +3469,25 @@ This preview is no longer valid. SVG Item Элемент SVG избражение + + X Axis + + + + Y Axis + + + + X axis + + + + Y axis + + + + Axis + + diff --git a/translations/limereport_zh.ts b/translations/limereport_zh.ts index 6944a50..d96250c 100644 --- a/translations/limereport_zh.ts +++ b/translations/limereport_zh.ts @@ -8,6 +8,49 @@ $ClassName$ + + ChartAxisEditor + + Axis editor + + + + Axis + + + + Reverse direction + + + + Enable scale calculation + + + + Step + + + + Maximum + + + + Minimum + + + + Automatic + + + + Cancel + 取消 + + + Ok + 确定 + + ChartItemEditor @@ -54,6 +97,10 @@ Series name 系列名称 + + X data field + + ImageItemEditor @@ -126,34 +173,6 @@ Lime Report - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/report/images/logo_100.png" height="100" style="float: left;" /><span style=" font-size:12pt; font-weight:600;">Report engine for </span><span style=" font-size:12pt; font-weight:600; color:#7faa18;">Qt</span><span style=" font-size:12pt; font-weight:600;"> framework</span></p> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">LimeReport - multi-platform C++ library written using Qt framework and intended for software developers that would like to add into their application capability to form report or print forms generated using templates.</span></p> -<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><br /></p> -<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><br /></p> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">Official web site : </span><a href="www.limereport.ru"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;">www.limereport.ru</span></a></p> -<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt; text-decoration: underline; color:#0000ff;"><br /></p> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt; font-weight:600;">This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</span></p> -<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:10pt; font-weight:600; color:#000000;"><br /></p> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Copyright 2015 Arin Alexander. All rights reserved.</span></p></body></html> - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/report/images/logo_100.png" height="100" style="float: left;" /><span style=" font-size:12pt; font-weight:600; color:#7faa18;">Qt</span><span style=" font-size:12pt; font-weight:600;">报表引擎</span></p> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">LimeReport - QT框架多平台C++库,帮助开发者给应用增加基于模板生成报表及打印报表功能。</span></p> -<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><br /></p> -<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><br /></p> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">官方网站: </span><a href="www.limereport.ru"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;">www.limereport.ru</span></a></p> -<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt; text-decoration: underline; color:#0000ff;"><br /></p> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt; font-weight:600;">该库基于提供帮助目的发布,但不提供任何担保,不以任何形式提供其适销性或适用于某一特定用途的默示保证。</span></p> -<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:10pt; font-weight:600; color:#000000;"><br /></p> -<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">版权 2015 Arin Alexander.所有权利保留.</span></p></body></html> - Author 作者 @@ -296,6 +315,34 @@ p, li { white-space: pre-wrap; } Version 1.1.1 版本 1.1.1 + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/report/images/logo_100.png" height="100" style="float: left;" /><span style=" font-size:12pt; font-weight:600;">Report engine for </span><span style=" font-size:12pt; font-weight:600; color:#7faa18;">Qt</span><span style=" font-size:12pt; font-weight:600;"> framework</span></p> +<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">LimeReport - multi-platform C++ library written using Qt framework and intended for software developers that would like to add into their application capability to form report or print forms generated using templates.</span></p> +<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><br /></p> +<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><br /></p> +<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">Official web site : </span><a href="www.limereport.ru"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;">www.limereport.ru</span></a></p> +<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt; text-decoration: underline; color:#0000ff;"><br /></p> +<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt; font-weight:600;">This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</span></p> +<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:10pt; font-weight:600; color:#000000;"><br /></p> +<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Copyright 2021 Arin Alexander. All rights reserved.</span></p></body></html> + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/report/images/logo_100.png" height="100" style="float: left;" /><span style=" font-size:12pt; font-weight:600; color:#7faa18;">Qt</span><span style=" font-size:12pt; font-weight:600;">报表引擎</span></p> +<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">LimeReport - QT框架多平台C++库,帮助开发者给应用增加基于模板生成报表及打印报表功能。</span></p> +<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><br /></p> +<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><br /></p> +<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">官方网站: </span><a href="www.limereport.ru"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;">www.limereport.ru</span></a></p> +<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt; text-decoration: underline; color:#0000ff;"><br /></p> +<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt; font-weight:600;">该库基于提供帮助目的发布,但不提供任何担保,不以任何形式提供其适销性或适用于某一特定用途的默示保证。</span></p> +<p align="justify" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:10pt; font-weight:600; color:#000000;"><br /></p> +<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">版权 2015 Arin Alexander.所有权利保留.</span></p></body></html> {3C?} {4.0/?} {3.?} {40/?} {1"?} {9p?} {400;?} {0p?} {0p?} {0p?} {0p?} {0;?} {0p?} {100.?} {100"?} {12p?} {600;?} {12p?} {600;?} {7f?} {18;?} {12p?} {600;?} {0p?} {0p?} {0p?} {0p?} {0;?} {0p?} {11p?} {0p?} {0p?} {0p?} {0p?} {0;?} {0p?} {11p?} {0p?} {0p?} {0p?} {0p?} {0;?} {0p?} {11p?} {0p?} {0p?} {0p?} {0p?} {0;?} {0p?} {11p?} {11p?} {0000f?} {0p?} {0p?} {0p?} {0p?} {0;?} {0p?} {11p?} {0000f?} {0p?} {0p?} {0p?} {0p?} {0;?} {0p?} {10p?} {600;?} {0p?} {0p?} {0p?} {0p?} {0;?} {0p?} {10p?} {600;?} {000000;?} {0p?} {0p?} {0p?} {0p?} {0;?} {0p?} {10p?} {2021 ?} + LimeReport::AlignmentPropItem @@ -469,6 +516,22 @@ p, li { white-space: pre-wrap; } Create Vertical Layout 创建水平布局 + + Edit borders... + + + + + + LimeReport::BorderFrameEditor + + BorderFrameEditor + + + + Text + + LimeReport::ConnectionDesc @@ -1253,6 +1316,10 @@ p, li { white-space: pre-wrap; } All borders 所有边框 + + Edit border + + LimeReport::MasterDetailProxyModel @@ -1301,6 +1368,93 @@ p, li { white-space: pre-wrap; } 导出为PDF文件 + + LimeReport::PageEditor + + Page setup + + + + Paper + + + + Format + 格式 + + + Dimension + + + + Width: + + + + mm + + + + Height: + + + + Orientation + + + + Portrait + 纵向 + + + Landscape + 横向 + + + Margins + + + + Bottom: + + + + Top: + + + + Right: + + + + Left: + + + + Drop printer margins + + + + Other + + + + Height options + + + + Endless Height + + + + Extended Height: + + + + Full page + 全页 + + LimeReport::PageFooter @@ -1345,6 +1499,14 @@ p, li { white-space: pre-wrap; } Set page size to printer 适合打印机纸张大小 + + Mix with prior page + + + + Edit + 编辑 + LimeReport::PreviewReportWidget @@ -2041,6 +2203,38 @@ p, li { white-space: pre-wrap; } removeGap + + xAxisField + + + + seriesLineWidth + + + + drawPoints + + + + dropPrinterMargins + + + + notPrintIfEmpty + + + + gridChartLines + + + + horizontalAxisOnTop + + + + mixWithPriorPage + + LimeReport::RectPropItem @@ -2947,10 +3141,6 @@ This preview is no longer valid. Cancel 取消 - - Esc - - LimeReport::TranslationEditor @@ -3288,5 +3478,25 @@ This preview is no longer valid. Series 数据系列 + + X Axis + + + + Y Axis + + + + X axis + + + + Y axis + + + + Axis + +