diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml
index 57437ed..1233e7a 100644
--- a/.github/workflows/cmake.yml
+++ b/.github/workflows/cmake.yml
@@ -18,7 +18,7 @@ jobs:
fail-fast: false
matrix:
ubuntu_version: [20.04, 22.04]
- qt_version: [5.12.12, 5.15.2, 6.3.0]
+ qt_version: [5.15.2, 6.4.0]
static: [ON, OFF]
steps:
@@ -35,13 +35,140 @@ jobs:
- name: Configure CMake for Qt5
if: "startsWith(matrix.qt_version, '5.')"
- run: cmake -DCMAKE_BUILD_TYPE="${{env.BUILD_TYPE}}" -DLIMEREPORT_STATIC=${{ matrix.static }} -B "${{github.workspace}}/build"
+ 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 }} -B "${{github.workspace}}/build"
+ 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 78ff6ac..0bafa82 100644
--- a/README.md
+++ b/README.md
@@ -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 @@
+
+
+
+
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 @@
+
+
+
+
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 @@
+
+
+
+
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 @@
+
+
+
+
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 @@
+
+
+
+
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 @@
+
+
+
+
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 @@
+
+
+
+
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 @@
+
+
+
+
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 @@
+
+
+
+
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 @@
+
+
+
+
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 @@
+
+
+
+
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 @@
+
+
+
+
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 @@
+
+
+
+
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 @@
+
+
+
+
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 @@
+
+
+
+
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
+
+ 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/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/limereport.pri b/limereport/limereport.pri
index aca7167..c86b575 100644
--- a/limereport/limereport.pri
+++ b/limereport/limereport.pri
@@ -78,12 +78,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
}
@@ -146,7 +149,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 \
@@ -172,11 +175,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
@@ -199,7 +205,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 1389ae2..90016a1 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..db9285e 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{
-
+#if __cplusplus >= 201703L
+const int inline COLLECTION_TYPE_ID = qMetaTypeId();
+#else
const int COLLECTION_TYPE_ID = qMetaTypeId();
-class ICollectionContainer{
+#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..383ec8d 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,24 @@ 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 +361,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 +376,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 +422,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 +776,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 +969,7 @@ CommandIf::Ptr PageDesignIntf::createChangePosCommand()
newPos.pos = reportItem->pos();
newPoses.append(newPos);
}
- }
+ }
return PosChangedCommand::create(this, m_positionStamp, newPoses);
}
@@ -1825,6 +1851,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 +2690,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..fe3209d 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 bed200e..ae5d5a5 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);
@@ -482,7 +483,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 6af1064..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){
@@ -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 89999d9..dc59710 100644
--- a/limereport/report.qrc
+++ b/limereport/report.qrc
@@ -186,5 +186,6 @@
images/designer.png
images/lock.png
images/unlock.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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ إلغاء الأمر
+
+
+
+ موافق
+
+
ChartItemEditor
@@ -54,6 +97,10 @@
+
+
+
+
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>
-
-
-
-
+
+
+
+
LimeReport::AlignmentPropItem
@@ -457,6 +504,21 @@ p, li { white-space: pre-wrap; }
+
+
+
+
+
+
+ LimeReport::BorderFrameEditor
+
+
+
+
+
+
+
+
LimeReport::ConnectionDesc
@@ -1241,6 +1303,10 @@ p, li { white-space: pre-wrap; }
محاط بإطار
+
+
+
+
LimeReport::MasterDetailProxyModel
@@ -1289,6 +1355,93 @@ p, li { white-space: pre-wrap; }
+
+ LimeReport::PageEditor
+
+
+
+
+
+
+
+
+
+
+ الصيغة
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
LimeReport::PageFooter
@@ -1333,6 +1486,14 @@ p, li { white-space: pre-wrap; }
+
+
+
+
+
+
+ تحرير
+
LimeReport::PreviewReportWidget
@@ -2029,6 +2190,38 @@ p, li { white-space: pre-wrap; }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
LimeReport::RectPropItem
@@ -2933,10 +3126,6 @@ This preview is no longer valid.
-
-
-
-
LimeReport::TranslationEditor
@@ -3274,5 +3463,25 @@ This preview is no longer valid.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cancelar
+
+
+
+ Aceptar
+
+
ChartItemEditor
@@ -54,6 +97,10 @@
Nombre de la Serie
+
+
+
+
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;"><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; }
+
+
+
+
+
+
+
+ LimeReport::BorderFrameEditor
+
+
+
+
+
+
+
+
LimeReport::ConnectionDesc
@@ -1369,6 +1432,10 @@ p, li { white-space: pre-wrap; }
Todos los bordes
+
+
+
+
LimeReport::MasterDetailProxyModel
@@ -1417,6 +1484,93 @@ p, li { white-space: pre-wrap; }
Exportar a PDF
+
+ LimeReport::PageEditor
+
+
+
+
+
+
+
+
+
+
+ Formato
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Retrato
+
+
+
+ Apaisado (Horizontal)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Página completa
+
+
LimeReport::PageFooter
@@ -1461,6 +1615,14 @@ p, li { white-space: pre-wrap; }
Establecer el tamaño de página a la impresora
+
+
+
+
+
+
+ Editar
+
LimeReport::PreviewReportWidget
@@ -2157,6 +2319,38 @@ p, li { white-space: pre-wrap; }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
LimeReport::RectPropItem
@@ -3063,10 +3257,6 @@ Esta vista previa ya no es válida.
Ctrl+Intro
-
-
-
-
LimeReport::TranslationEditor
@@ -3404,5 +3594,25 @@ Esta vista previa ya no es válida.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Annuler
+
+
+
+
+
+
+
ChartItemEditor
@@ -52,12 +107,17 @@
Type
-
+
Valeurs
-
+
+
+
+
+
+
@@ -127,7 +187,7 @@
Obligatoire
-
+
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
-
-
+
+
Verrouiller la géométrie d'un élément
-
+
Copier
-
+
Couper
-
+
Coller
-
+
Placer au premier-plan
-
+
Placer en arrière-plan
-
+
Créer une disposition horizontale
-
+
Créer une disposition verticale
-
+
Aucune bordure
-
+
Toutes les bordures
+
+
+
+
+
+
+
+ LimeReport::BorderFrameEditor
+
+
+
+
+
+
+
+
+
+
LimeReport::ConnectionDesc
-
+
Connexion par défaut
@@ -713,7 +791,7 @@ p, li { white-space: pre-wrap; }
-
+
Source de données
@@ -790,45 +868,45 @@ p, li { white-space: pre-wrap; }
Saisir une variable
-
-
-
-
+
+
+
+
-
+
Voulez-vous vraiment supprimer la connexion %1?
-
+
Variables du rapport
-
+
Variables système
-
+
Variables externe
-
+
Vouz-vous vraiment supprimer la source de donnée "%1"?
-
+
Vouz-vous vraiment supprimer la variable "%1"?
-
+
Erreur
@@ -876,48 +954,51 @@ p, li { white-space: pre-wrap; }
LimeReport::DataSourceManager
-
+
La connexion "%1" n'est pas ouverte
-
-
+
+
+
+
Variable "%1" introuvable!
-
+
+
Paramètre inconnu %1 pour la variable %2 !
-
-
+
+
Source de donnée "%1" introuvable!
-
+
La connexion avec le nom "%1" existe déjà!
-
-
-
-
-
+
+
+
+
+
La source de donnée avec le nom "%1" existe déjà!
-
+
Base de données "%1 introuvable
-
+
Connexion invalide
@@ -925,17 +1006,17 @@ p, li { white-space: pre-wrap; }
LimeReport::DataSourceModel
-
+
Source de données
-
+
-
+
Variables externe
@@ -1327,17 +1408,17 @@ p, li { white-space: pre-wrap; }
LimeReport::FontEditorWidget
-
+
Gras
-
+
Italique
-
+
Souligné
@@ -1399,22 +1480,22 @@ p, li { white-space: pre-wrap; }
LimeReport::GroupFunction
-
+
Champ %1 introuvable
-
+
Variable %1 introuvable
-
+
Syntaxe incorrecte du script "%1"
-
+
Elément "%1" introuvable
@@ -1422,29 +1503,29 @@ p, li { white-space: pre-wrap; }
LimeReport::ImageItem
-
-
+
+
Edition
-
-
+
+
Filigrane
-
+
-
+
Image
-
+
Externe.
@@ -1518,45 +1599,50 @@ p, li { white-space: pre-wrap; }
LimeReport::ItemsBordersEditorWidget
-
+
ligne haute
-
+
Ligne basse
-
+
Ligne gauche
-
+
Ligne droite
-
+
Aucune bordure
-
+
Toutes les bordures
+
+
+
+
+
LimeReport::MasterDetailProxyModel
-
+
Le champ: "%1"est introuvable dans la source de donnée enfant "%2"
-
+
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
-
+
Le modèle a été supprimé
@@ -1572,7 +1658,7 @@ p, li { white-space: pre-wrap; }
LimeReport::ObjectBrowser
-
+
Objets
@@ -1580,17 +1666,17 @@ p, li { white-space: pre-wrap; }
LimeReport::ObjectInspectorWidget
-
+
Effacer
-
+
Filtrer
-
+
Traduire les popriétés
@@ -1603,6 +1689,119 @@ p, li { white-space: pre-wrap; }
Exporter au format PDF
+
+ LimeReport::PageEditor
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Paysage
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Page entière
+
+
LimeReport::PageFooter
@@ -1634,34 +1833,46 @@ p, li { white-space: pre-wrap; }
LimeReport::PageItemDesignIntf
-
+
+
+
+ Edition
+
+
+
Coller
-
-
+
+
Table de contenus
-
-
+
+
Réinitialiser le numéro de page
-
-
+
+
Page entière
-
-
+
+
Adapterr la taille de la page à l'imprimante
+
+
+
+
+
+
LimeReport::PreviewReportWidget
@@ -1671,7 +1882,7 @@ p, li { white-space: pre-wrap; }
Formulaire
-
+
%1 nom de fichier
@@ -1840,37 +2051,37 @@ p, li { white-space: pre-wrap; }
Supprimer
-
+
Impression en cours
-
+
-
+
Police
-
+
Alignement de texte
-
+
de %1
-
+
Attention
-
+
L'impresion est en cours
@@ -1878,7 +2089,7 @@ p, li { white-space: pre-wrap; }
LimeReport::ProxyHolder
-
+
La source de donnée n'a pas été validée
@@ -2414,126 +2625,166 @@ p, li { white-space: pre-wrap; }
+
+
+
+
+
Alignement de la légende
-
+
Séries
-
+
Alignement du titre
-
+
Filigrane
-
+
Garder l'espace inférieur
-
+
Imprimable
-
+
Variable
-
+
Remplacer CR par BR
-
+
Masquer si vide
-
+
Masquer les éléments vides
-
+
Utiliser un dessin externe
-
+
Espacement disposition
-
+
Nom de l'imprimante
-
+
Interlettre
-
+
Masquer le texte
-
+
Option 3
-
+
Unités
-
+
Fixer la géométrie
-
+
Méthode d'impression
-
+
Décaler les éléments
-
+
Afficher la légende
-
+
+
+
+
+
+
+
+
+
+
+
Supprimer l'espace
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Propriété
-
+
Valeur
-
+
Avertissement
@@ -2554,16 +2805,16 @@ p, li { white-space: pre-wrap; }
LimeReport::RectUnitPropItem
-
-
-
+
+
+
Largeur
-
-
-
+
+
+
Hauteur
@@ -2599,370 +2850,370 @@ p, li { white-space: pre-wrap; }
LimeReport::ReportDesignWindow
-
-
+
+
%1 pages préparées
-
+
Annuler la préparation
-
+
Nouveau rapport
-
+
Nouvelle page
-
+
Supprimer une page
-
+
Mode d'édition
-
+
Annuler
-
+
Répéter
-
+
Copier
-
+
Coller
-
+
Couper
-
+
Paramètres
-
+
Utiliser la grille
-
+
Utiliser l'aimant
-
+
Elément de texte
-
+
Enregistrer le rapport
-
+
Enregistrer le rapport sous
-
+
Ouvrir un rapport
-
+
Supprimer élément
-
+
Zoom avant
-
+
Zoom arrière
-
+
Afficher l'aperçu du rapport
-
+
Modifier le mode de mise en forme
-
+
Mise en page horizontale
-
+
Disposition verticale
-
+
A propos
-
+
Masquer le volet gauche
-
+
Masquer le volet droite
-
+
Supprimer la boite du dialogue
-
+
Ajouter une boite de dialogue
-
+
Verrouiller les éléments sélectionnés
-
+
Déverrouiller les éléments sélectionnés
-
+
Sélectionner un niveau d'éléments
-
+
Outils de rapport
-
+
Outils principales
-
+
Police
-
+
Alignement de texte
-
+
Alignement des éléments
-
+
Bordures
-
+
Bandesde rapport
-
+
En-tête du rapport
-
+
Pied de rapport
-
+
En-tête de page
-
+
Pied de page
-
+
Données
-
+
En-tête de données
-
+
Pied de données
-
+
Sous-détails
-
+
En-tête de sous-détails
-
+
Pied de sous-détails
-
+
En-tête de groupe
-
+
Pied de groupe
-
+
Bande détachable
-
+
Fichier
-
+
Edition
-
+
-
+
Fichiers récents
-
-
+
+
Inspecteur d'objets
-
+
Structure du rapport
-
+
Boite de Widget
-
+
Editeur de propriété
-
+
Editeur d'action
-
+
Editeur de ressource
-
+
Editeur de Signaux & Slots
-
+
Boite à outils du Designer
-
+
Navigateur de données
-
+
Navigateur de script
-
+
Le rapport a été modifié! Voulez-vous l'enregistrer?
-
-
+
+
Nom du fichier du rapport
-
+
Attention
-
+
La préparation du rapport est en cours
-
+
Avertissement
-
+
Fichier "%1" introuvable!
@@ -2970,27 +3221,27 @@ p, li { white-space: pre-wrap; }
LimeReport::ReportEnginePrivate
-
+
Aperçu avant impression
-
+
Erreur
-
+
%1 nom de fichier
-
+
Nom du fichier changé
-
+
@@ -2999,12 +3250,12 @@ This preview is no longer valid.
Cet aperçu n'est plus valide.
-
+
Designer introuvable!
-
+
La langue %1 existe déja
@@ -3030,22 +3281,24 @@ Cet aperçu n'est plus valide.
-
+
Erreur
-
+
Indice de la page dépassé
-
+
+
Bande de données "%1 introuvable
-
+
+
Utilisation incorrecte de la fonction "%1"
@@ -3095,7 +3348,7 @@ Cet aperçu n'est plus valide.
-
+
Aperçu
@@ -3127,7 +3380,7 @@ Cet aperçu n'est plus valide.
-
+
@@ -3157,48 +3410,48 @@ Cet aperçu n'est plus valide.
-
+
Erreur
-
+
Nom de source de donnée est vide!
-
+
SQL est vide!
-
+
La source de donnée avec le nom "%1" existe déja!
-
+
Connexion par défaut
-
+
La source de donnée avec le nom "%1" existe déja
-
-
+
+
-
+
La connexion n'est pas spécifiée
-
+
Actualiser
@@ -3263,29 +3516,29 @@ Cet aperçu n'est plus valide.
Nom
-
+
AUCUNE CATEGORIE
-
-
-
+
+
+
Erreur
-
+
Le dialogue avec le nom "%1" existe déja
-
+
Le fichier ui doit contenir un QDialog au lieu de QWidget ou QMainWindow
-
+
Format de fichier incorrect
@@ -3311,13 +3564,13 @@ Cet aperçu n'est plus valide.
LimeReport::ScriptEngineContext
-
+
Le dialogue avec le nom "%1" ne peut pas être crée
-
-
+
+
Erreur
@@ -3330,20 +3583,20 @@ Cet aperçu n'est plus valide.
Fonctions de groupe
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
Valeur
-
+
Nom de la bande
@@ -3354,135 +3607,137 @@ Cet aperçu n'est plus valide.
-
+
Nom du champ
-
+
+
Variable "%1" introuvable
-
+
+
Champ "%1 introuvable dans %2!
-
+
Système
-
-
-
+
+
+
Nombre
-
-
-
-
-
+
+
+
+
+
-
+
Précision
-
-
-
-
+
+
+
+
Local
-
-
-
-
-
-
+
+
+
+
+
+
Date&Heure
-
+
Symbolde de la monnaie
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
General
-
-
-
+
+
+
Nom
-
+
Source de donnée
-
+
Valeur
-
+
Clé
-
+
Valeur de la clé
-
+
-
-
-
+
+
+
Identifiant unique
-
-
+
+
Contenu
-
+
Indenter
-
+
Nom de source de donnée
@@ -3677,18 +3932,18 @@ Cet aperçu n'est plus valide.
Masquer si vide
-
-
+
+
Erreur
-
+
L'élément texte " %1 " a toujours un copain " %2 "
-
+
Elément "%1" introuvable!
@@ -3720,11 +3975,6 @@ Cet aperçu n'est plus valide.
Annuler
-
-
-
- Echap
-
LimeReport::TranslationEditor
@@ -3936,32 +4186,32 @@ Cet aperçu n'est plus valide.
-
+
Connexion invalidé %1
-
+
Source de donnée principale "%1" introuvable!
-
+
Source de donnée principale "%1" introuvable!
-
+
Enfant
-
+
est enfant
-
+
Source de donnée "%1" introuvable!
@@ -4077,29 +4327,27 @@ Cet aperçu n'est plus valide.
-
-
+
-
-
+
Les éléments sélectionnés ont un parent différent
-
+
L'objet avec le nom "%1" existe déja!
-
+
La fonction %1 est introuvable ou contient des paramètres incorrects
-
+
Gestionnaire de source de donnée introuvable
@@ -4113,17 +4361,17 @@ Cet aperçu n'est plus valide.
-
-
-
+
+
+
-
-
-
+
+
+
@@ -4148,23 +4396,23 @@ Cet aperçu n'est plus valide.
Contenu vide
-
+
Elément du graphe
-
+
Prémier
-
+
Second
-
+
Troisième
@@ -4180,30 +4428,30 @@ Cet aperçu n'est plus valide.
Exporter au format PDF
-
+
Sombre
-
+
Clair
-
+
par défaut
-
-
+
+
Millimètres
-
-
+
+
Pouces
@@ -4223,5 +4471,30 @@ Cet aperçu n'est plus valide.
Séries
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Anuluj
+
+
+
+
+ Ok
+
+
ChartItemEditor
@@ -52,12 +107,17 @@
Typ
-
+
Pole etykiet
-
+
+
+
+
+
+
Ok
@@ -127,7 +187,7 @@
Obowiązkowy
-
+
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
-
-
+
+
Zablokuj geometrię pozycji
-
+
Kopiuj
-
+
Wytnij
-
+
Wklej
-
+
Przenieś na górę
-
+
Przenieś na dół
-
+
Utwórz układ poziomy
-
+
Utwórz układ pionowy
-
+
Bez obramowania
-
+
Pełne obramowanie
+
+
+
+
+
+
+
+
+ LimeReport::BorderFrameEditor
+
+
+
+
+
+
+
+
+
+
LimeReport::ConnectionDesc
-
+
Domyślne połączenie
@@ -725,7 +804,7 @@ p, li { white-space: pre-wrap; }
-
+
Źródła danych
@@ -802,45 +881,45 @@ p, li { white-space: pre-wrap; }
Chwyć zmienną
-
-
-
-
+
+
+
+
Uwaga
-
+
Czy chcesz naprawdę skasować "%1" połączenie?
-
+
Raport zmiennych
-
+
Zmienne systemowe
-
+
Zmienne zewnętrzne
-
+
Czy chcesz naprawdę skasować "%1" źródło danych?
-
+
Czy chcesz naprawdę skasować zmienną "%1"?
-
+
Błąd
@@ -888,48 +967,51 @@ p, li { white-space: pre-wrap; }
LimeReport::DataSourceManager
-
+
Połączenie "%1" nie jest otwarte
-
-
+
+
+
+
Zmienna "%1" nie znaleziona!
-
+
+
Nieznany parametr "%1" dla znalezionej zmiennej "%2"!
-
-
+
+
Źródło danych %1" nie znalezione!
-
+
Połączenie o nazwie "%1" już istnieje!
-
-
-
-
-
+
+
+
+
+
Źródło danych o nazwie "%1" już istnieje!
-
+
Baza danych "%1" nie znaleziona
-
+
Nieprawidłowe połączenie
@@ -937,17 +1019,17 @@ p, li { white-space: pre-wrap; }
LimeReport::DataSourceModel
-
+
Źródła danych
-
+
Zmienne
-
+
Zmienne zewnętrzne
@@ -1339,17 +1421,17 @@ p, li { white-space: pre-wrap; }
LimeReport::FontEditorWidget
-
+
Czcionka pogrubiona
-
+
Czcionka pochylona
-
+
Czcionka podkreślona
@@ -1411,22 +1493,22 @@ p, li { white-space: pre-wrap; }
LimeReport::GroupFunction
-
+
Pole "%1" nie znalezione
-
+
Zmienna "%1" nie znaleziona
-
+
Niepoprawna składnia skryptu "%1"
-
+
Pozycja "%1" nie znaleziona
@@ -1434,29 +1516,29 @@ p, li { white-space: pre-wrap; }
LimeReport::ImageItem
-
-
+
+
Edycja
-
-
+
+
Znak wodny
-
+
-
+
Obraz
-
+
Zewn.
@@ -1530,45 +1612,50 @@ p, li { white-space: pre-wrap; }
LimeReport::ItemsBordersEditorWidget
-
+
Górna krawędź
-
+
Dolna krawędź
-
+
Lewa krawędź
-
+
Prawa krawędź
-
+
Bez krawędzi
-
+
Wszystkie krawędzie
+
+
+
+
+
LimeReport::MasterDetailProxyModel
-
+
Pole: "%1" nie znalezione w "%2" źródle danch dziecka
-
+
Pole: "%1" nie znalezione w "%2" głównym źródle danch
@@ -1576,7 +1663,7 @@ p, li { white-space: pre-wrap; }
LimeReport::ModelToDataSource
-
+
Model danych jest zniszczony
@@ -1584,7 +1671,7 @@ p, li { white-space: pre-wrap; }
LimeReport::ObjectBrowser
-
+
Obiekty
@@ -1592,17 +1679,17 @@ p, li { white-space: pre-wrap; }
LimeReport::ObjectInspectorWidget
-
+
Wyczyść
-
+
Filtr
-
+
Przetłumacz właściwości
@@ -1615,6 +1702,119 @@ p, li { white-space: pre-wrap; }
Eksport do PDF
+
+ LimeReport::PageEditor
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Format
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Portret
+
+
+
+
+ Pejzaż
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cała strona
+
+
LimeReport::PageFooter
@@ -1646,34 +1846,46 @@ p, li { white-space: pre-wrap; }
LimeReport::PageItemDesignIntf
-
+
+
+
+ Edycja
+
+
+
Wklej
-
-
+
+
Strona to spis treści
-
-
+
+
Zresetuj numer strony
-
-
+
+
Cała strona
-
-
+
+
Ustaw rozmiar strony na drukarkę
+
+
+
+
+
+
LimeReport::PreviewReportWidget
@@ -1683,7 +1895,7 @@ p, li { white-space: pre-wrap; }
Formatka
-
+
%1 nazwa pliku
@@ -1852,37 +2064,37 @@ p, li { white-space: pre-wrap; }
Usuń
-
+
-
+
Strona:
-
+
Czcionka
-
+
Wyrównanie tekstu
-
+
z %1
-
+
Uwaga
-
+
@@ -1890,7 +2102,7 @@ p, li { white-space: pre-wrap; }
LimeReport::ProxyHolder
-
+
Źródło danych zostało unieważnione
@@ -2426,126 +2638,166 @@ p, li { white-space: pre-wrap; }
+
+
+
+
+
Wyrównanie legendy
-
+
Seria
-
+
Wyrównanie tytułu
-
+
Znak wodny
-
+
Zachowaj górny obszar
-
+
Drukowalny
-
+
Zmienna
-
+
Zamień CR na BR
-
+
Ukryj jeśli pusty
-
+
Ukryj puste elementy
-
+
Użyj zewnętrznego malarza
-
+
Układ odstępów
-
+
Nazwa drukarki
-
+
Odstępy między literami fontu
-
+
Ukryj tekst
-
+
Opcja3
-
+
Jednostki
-
+
Zablokowana geometria
-
+
Zachowanie drukowania
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Nazwa właściwości
-
+
Wartość właściwości
-
+
Uwaga
@@ -2566,16 +2818,16 @@ p, li { white-space: pre-wrap; }
LimeReport::RectUnitPropItem
-
-
-
+
+
+
Szerokość
-
-
-
+
+
+
Wysokość
@@ -2611,370 +2863,370 @@ p, li { white-space: pre-wrap; }
LimeReport::ReportDesignWindow
-
-
+
+
-
+
-
+
Nowy raport
-
+
Nowa strona raportu
-
+
Usuń stronę raportu
-
+
Tryb edycji
-
+
Cofnij
-
+
Ponów
-
+
Kopiuj
-
+
Wklej
-
+
Wytnij
-
+
Ustawienia
-
+
Użyj siatki
-
+
Użyj magnesu
-
+
Element tekstowy
-
+
Zapisz raport
-
+
Zapisz raport jako
-
+
Wczytaj raport
-
+
Usuń pozycję
-
+
Powiększ
-
+
Pomniejsz
-
+
Renderuj raport
-
+
Edytuj tryb układu
-
+
Układ poziomy
-
+
Układ pionowy
-
+
O
-
+
Ukryj lewy panel | Alt+L
-
+
Ukryj prawy panel | Alt+R
-
+
Dialog kasowania
-
+
Dodaj nowy dialog
-
+
Zablokuj zaznaczone elementy
-
+
Odblokuj zaznaczone elementy
-
+
Wybierz elementy na jednym poziomie
-
+
Narzędzia raportu
-
+
Główne narzędzia
-
+
Czcionka
-
+
Wyrównanie tekstu
-
+
Wyrównanie elementów
-
+
Krawędzie
-
+
Pasma raportu
-
+
Nagłówek raportu
-
+
Stopka raportu
-
+
Nagłówek strony
-
+
Stopka strony
-
+
Dane
-
+
Nagłówek danych
-
+
Stopka danych
-
+
Pod szczegóły
-
+
Nagłówek pod szczegółów
-
+
Stopka pod szczegółów
-
+
Nagłówek grupujący
-
+
Stopka grupująca
-
+
Sekcja zrywająca
-
+
Plik
-
+
Edycja
-
+
Informacja
-
+
Ostatnie pliki
-
-
+
+
Inspektor obiektów
-
+
Struktura raportu
-
+
Pudełko widżetów
-
+
Edytor właściowości
-
+
Edytor akcji
-
+
Edytor zasobów
-
+
Edytor sygnałów i slotów
-
+
Narzędzia projektowania dialogów
-
+
Przeglądarka danych
-
+
Przeglądarka skryptów
-
+
Raport został zmodyfikowany! Czy chcesz zapisać raport?
-
-
+
+
Nazwa pliku raportu
-
+
Uwaga
-
+
-
+
Ostrzeżenie
-
+
Plik "%1" nie znaleziony!
@@ -2982,27 +3234,27 @@ p, li { white-space: pre-wrap; }
LimeReport::ReportEnginePrivate
-
+
Podgląd
-
+
Błąd
-
+
%1 nazwa pliku
-
+
Zmiana pliku raportu
-
+
@@ -3011,12 +3263,12 @@ This preview is no longer valid.
Ten podgląd nie jest już prawidłowy.
-
+
Nie znaleziono projektanta!
-
+
Język %1 już istnieje
@@ -3042,22 +3294,24 @@ Ten podgląd nie jest już prawidłowy.
-
+
Błąd
-
+
indeks strony poza zakresem
-
+
+
Sekcja danych "%1" nie znaleziona
-
+
+
Złe użycie funkcji %1
@@ -3107,7 +3361,7 @@ Ten podgląd nie jest już prawidłowy.
-
+
Podgląd
@@ -3139,7 +3393,7 @@ Ten podgląd nie jest już prawidłowy.
-
+
CSV
@@ -3169,48 +3423,48 @@ Ten podgląd nie jest już prawidłowy.
Ok
-
+
Błąd
-
+
Nazwa źródła danych jest pusta!
-
+
SQL jest pusty!
-
+
Źródło danych o nazwie: "%1" już istnieje!
-
+
Domyślne połączenie
-
+
Źródło danych o nazwie %1 już istnieje
-
-
+
+
Uwaga
-
+
Połączenie nie zostało określone
-
+
Odśwież
@@ -3275,29 +3529,29 @@ Ten podgląd nie jest już prawidłowy.
Nazwa
-
+
BEZ KATEGORII
-
-
-
+
+
+
Błąd
-
+
Okno dialogowe z nazwą:%1 już istnieje
-
+
Plik ui musi zawierać QDialog zamiast QWidget lub QMainWindow
-
+
niewłaściwy format pliku
@@ -3323,13 +3577,13 @@ Ten podgląd nie jest już prawidłowy.
LimeReport::ScriptEngineContext
-
+
Okno dialogowe z nazwą:%1 nie można utworzyć
-
-
+
+
Błąd
@@ -3342,20 +3596,20 @@ Ten podgląd nie jest już prawidłowy.
FUNKCJE GRUPUJĄCE
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
Wartość
-
+
Nazwa sekcji
@@ -3366,135 +3620,137 @@ Ten podgląd nie jest już prawidłowy.
-
+
Nazwa pola
-
+
+
Nie znaleziono zmiennej %1
-
+
+
Pole %1 nie znalezione w %2!
-
+
SYSTEM
-
-
-
+
+
+
LICZBA
-
-
-
-
-
+
+
+
+
+
Format
-
+
Precyzja
-
-
-
-
+
+
+
+
Ustawienia lokalne
-
-
-
-
-
-
+
+
+
+
+
+
Data i czas
-
+
Źródło danych
-
+
Pole wartości
-
+
Pole klucza
-
+
Wartość pola klucza
-
+
Indeks wiersza
-
-
-
+
+
+
Unikalny identyfikator
-
-
+
+
Zawartość
-
+
Akapit
-
+
Nazwa źródła danych
-
+
Symbol waluty
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
OGÓLNY
-
-
-
+
+
+
Nazwa
@@ -3689,18 +3945,18 @@ Ten podgląd nie jest już prawidłowy.
Ukryj jeśli pusty
-
-
+
+
Błąd
-
+
Pole tekstowe " %1 " już ma folower " %2 "
-
+
Nie znaleziono pole tekstowego "%1"!
@@ -3732,11 +3988,6 @@ Ten podgląd nie jest już prawidłowy.
Anuluj
-
-
-
- Esc
-
LimeReport::TranslationEditor
@@ -3948,32 +4199,32 @@ Ten podgląd nie jest już prawidłowy.
-
+
Nieprawidłowe połączenie! %1
-
+
Nie znaleziono głównego źródła danych "%1"!
-
+
Nie znaleziono głównego źródła danych "%1"!
-
+
Dziecko
-
+
i dziecko
-
+
nie znaleziono źródła danych "%1"!
@@ -4089,29 +4340,27 @@ Ten podgląd nie jest już prawidłowy.
Ciąg znaków
-
-
+
Uwaga!
-
-
+
Wybrane elementy mają różne pojemniki nadrzędne
-
+
Obiekt o nazwie %1 już istnieje!
-
+
Funkcja %1 nie znaleziona lub ma błędne argumenty
-
+
Nie znaleziono menedżera źródła danych
@@ -4125,17 +4374,17 @@ Ten podgląd nie jest już prawidłowy.
-
-
-
+
+
+
mm
-
-
-
+
+
+
"
@@ -4166,23 +4415,23 @@ Ten podgląd nie jest już prawidłowy.
Eksport do PDF
-
+
Element wykresu
-
+
Pierwszy
-
+
Drugi
-
+
Trzeci
@@ -4192,30 +4441,30 @@ Ten podgląd nie jest już prawidłowy.
Układ pionowy
-
+
Ciemny
-
+
Jasny
-
+
Domyślny
-
-
+
+
Milimetry
-
-
+
+
Cale
@@ -4235,5 +4484,30 @@ Ten podgląd nie jest już prawidłowy.
Serie
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Отмена
+
+
+
+ Ок
+
+
ChartItemEditor
@@ -54,6 +97,10 @@
Название ряда
+
+
+
+
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>
-
-
-
-
+
+
+
+
LimeReport::AlignmentPropItem
@@ -462,6 +509,22 @@ p, li { white-space: pre-wrap; }
Заблокировать геометрию элемента
+
+
+
+
+
+
+
+ LimeReport::BorderFrameEditor
+
+
+
+
+
+
+
+
LimeReport::ConnectionDesc
@@ -1246,6 +1309,10 @@ p, li { white-space: pre-wrap; }
Все границы
+
+
+
+
LimeReport::MasterDetailProxyModel
@@ -1294,6 +1361,93 @@ p, li { white-space: pre-wrap; }
Экспортировать в PDF
+
+ LimeReport::PageEditor
+
+
+
+
+
+
+
+
+
+
+ Формат
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Портретная
+
+
+
+ Альбомная
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ На всю страницу
+
+
LimeReport::PageFooter
@@ -1342,6 +1496,10 @@ p, li { white-space: pre-wrap; }
Смешивать с предыдущей страницей
+
+
+ Правка
+
LimeReport::PreviewReportWidget
@@ -2050,6 +2208,26 @@ p, li { white-space: pre-wrap; }
Смешивать с предыдущей сраницей
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
LimeReport::RectPropItem
@@ -2954,10 +3132,6 @@ This preview is no longer valid.
-
-
-
-
LimeReport::TranslationEditor
@@ -3295,5 +3469,25 @@ This preview is no longer valid.
Элемент SVG избражение
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 取消
+
+
+
+ 确定
+
+
ChartItemEditor
@@ -54,6 +97,10 @@
系列名称
+
+
+
+
ImageItemEditor
@@ -126,34 +173,6 @@
-
-
- <!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>
-
作者
@@ -296,6 +315,34 @@ p, li { white-space: pre-wrap; }
版本 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; 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; }
创建水平布局
+
+
+
+
+
+
+
+ LimeReport::BorderFrameEditor
+
+
+
+
+
+
+
+
LimeReport::ConnectionDesc
@@ -1253,6 +1316,10 @@ p, li { white-space: pre-wrap; }
所有边框
+
+
+
+
LimeReport::MasterDetailProxyModel
@@ -1301,6 +1368,93 @@ p, li { white-space: pre-wrap; }
导出为PDF文件
+
+ LimeReport::PageEditor
+
+
+
+
+
+
+
+
+
+
+ 格式
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 纵向
+
+
+
+ 横向
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 全页
+
+
LimeReport::PageFooter
@@ -1345,6 +1499,14 @@ p, li { white-space: pre-wrap; }
适合打印机纸张大小
+
+
+
+
+
+
+ 编辑
+
LimeReport::PreviewReportWidget
@@ -2041,6 +2203,38 @@ p, li { white-space: pre-wrap; }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
LimeReport::RectPropItem
@@ -2947,10 +3141,6 @@ This preview is no longer valid.
取消
-
-
-
-
LimeReport::TranslationEditor
@@ -3288,5 +3478,25 @@ This preview is no longer valid.
数据系列
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+