134 Commits

Author SHA1 Message Date
d3d9441cb4 Freeze project 2025-08-27 11:48:38 +03:00
66ffe47fb8 fixed confused amounts and prices, fixed decimal separators "," and "." 2025-06-28 16:03:58 +03:00
dd06dfa30a cleanup 2025-06-21 22:28:55 +03:00
b06e2f8ef2 restrict files you can input 2025-06-21 22:28:38 +03:00
37a77d7228 downsize images l.t. 500 pixels 2025-06-14 19:57:08 +03:00
373c51f0b8 fixed regex usage 2025-06-14 13:02:02 +03:00
91ca01b255 cleanup, fixed erasing of b tag 2025-06-14 12:32:51 +03:00
a3ecaeef55 improved code, handling situations where names of goods are not known 2025-06-13 18:55:36 +03:00
94acf816ea improvements on emailparser 2025-06-13 13:41:57 +03:00
4c262de8a4 use pipe as a csv separator 2025-06-11 01:44:49 +03:00
55d75f413c notify user if email parsing failed 2025-06-11 01:39:40 +03:00
0a7018d13a cleanup 2025-06-11 01:34:03 +03:00
07c7e49a21 further improvements 2025-06-11 01:31:07 +03:00
5afaf6a94f divide into functions 2025-06-10 23:01:31 +03:00
c9f447009b more advanced parsing 2025-06-10 22:43:44 +03:00
9da589839c basic email parsing 2025-06-07 20:55:16 +03:00
259b8543a4 deployment and fixed punycode crashing program 2025-05-31 01:40:35 +03:00
896b81c999 fixed broken by me drag'n'drop :) 2025-05-24 16:11:37 +03:00
1507faef6e fixed only handling two fields of a check 2025-05-24 16:04:44 +03:00
20b08f493d sorting, cleanup 2025-05-23 23:45:11 +03:00
ac355b7d9e remove zbar dependency 2025-05-23 22:58:14 +03:00
84261d20e5 full-featured moving and deleting from the queue completed 2025-05-23 21:58:47 +03:00
c21166fc5b shitty table WIP 2025-05-22 01:32:39 +03:00
ca52ddf33c cleanup 2025-05-19 01:06:28 +03:00
a8549c838c check queue WIP 2025-05-19 01:05:56 +03:00
d10dfc07b6 update settings to use new model 2025-05-17 16:02:10 +03:00
b67d575645 saving output settings 2025-05-17 15:43:05 +03:00
33ea7ff459 load output order from settings 2025-05-17 15:06:47 +03:00
f32da712e8 full rework of the output order 2025-05-17 14:08:30 +03:00
463edd3df9 multi-check system 2025-05-11 00:25:05 +03:00
86a11faf70 huge wip 2025-05-08 21:02:56 +03:00
6706cbec45 plans and sketches 2025-04-15 22:02:33 +03:00
5f4a86cee8 versioning 2025-04-01 20:55:12 +03:00
a73bf1fc53 translations and cleanup 2025-04-01 18:10:49 +03:00
7275892b04 remove obsolete settings 2025-04-01 18:03:30 +03:00
e749c21a61 remove unneeded code. 2025-04-01 17:50:02 +03:00
f483c97935 wrap with tr 2025-03-30 21:26:41 +03:00
dda40e11b8 do not accept rich text in email scene 2025-03-30 21:05:07 +03:00
7822984ff0 cleanup 2025-03-30 20:51:52 +03:00
c17af59358 add autodetect in ocr scene 2025-03-30 20:50:11 +03:00
6b815dbe0a added store autodetect in email scene 2025-03-30 20:48:53 +03:00
5600e03ce1 fixed wrong versions 2025-03-30 12:25:56 +03:00
7d71cb016a translations 2025-03-26 20:14:14 +03:00
7a52905cff download modules 2025-03-26 20:08:54 +03:00
3b26dbc29d replace commas to periods as separators for decimal numbers 2025-03-26 00:20:43 +03:00
754700edfb fixed source 2025-03-25 21:16:33 +03:00
9094d3c997 settings icon and CMakeLists.txt fixes 2025-03-25 21:13:27 +03:00
1b32774e55 bugfixes 2025-03-24 02:02:10 +03:00
d17695a7fa settings and bugfixes 2025-03-23 20:55:34 +03:00
e58d6068e0 checks-parser-git done, checks-parser-bin WIP 2025-03-23 18:48:17 +03:00
80e9397e01 automated .deb packaging 2025-03-22 14:50:51 +03:00
ba8fc1079a based deployment structure 2025-03-22 14:07:10 +03:00
e49a078c80 stable appimage deployment done 2025-03-22 12:52:48 +03:00
64f081b522 cleanup 2025-03-22 01:38:28 +03:00
b19c92079d support old cmake versions with finding boost 2025-03-22 01:38:14 +03:00
a342d78df7 deployment 2025-03-22 01:19:53 +03:00
59315f9445 net weights implementation WIP 2025-03-22 01:02:37 +03:00
d83f106a91 migrate to boost::regex 2025-03-21 22:43:44 +03:00
1fa69c3a69 tolerate old version of hlohmann::json 2025-03-21 21:50:08 +03:00
89afe836be todo 2025-03-21 00:46:17 +03:00
51d8600be0 Deployment 2025-03-21 00:23:38 +03:00
229a6bcc9e right dependency division 2025-03-20 22:01:53 +03:00
17fd9da3e6 removed cpp-httplib dependency 2025-03-20 22:00:19 +03:00
33f819a09d cleanup 2025-03-18 00:02:10 +03:00
a87869ca7f fixed wrong name 2025-03-17 23:41:46 +03:00
b57a542161 rewrite utils with moduled approach, butfixes 2025-03-17 23:39:08 +03:00
b966d7fcf5 implemented modular build for email text and ocr 2025-03-17 23:18:35 +03:00
cb8041c928 divide ways of input in CMakeLists 2025-03-17 22:55:36 +03:00
5209b7bf22 fixed bug with server not listening messages on first export and added a button to stop the server 2025-03-17 22:08:38 +03:00
b86514b030 update debian-based installation of dependencies 2025-03-17 20:18:12 +03:00
31f4ca26fb cleanup 2025-03-17 20:16:34 +03:00
993cf4d69c httplib version bump and automated (docker) appimage deployment 2025-03-17 20:13:44 +03:00
487707ba3e deployment 2025-03-17 00:06:19 +03:00
3dbc85f929 generate and show qr code 2025-03-15 15:12:53 +03:00
2b2127e3b5 restructure, change onDataDecode signal and succesfully parsing http request 2025-03-15 00:48:46 +03:00
f507ec8d67 starting http server with error handling 2025-03-14 18:24:42 +03:00
453f907bfa Merge pull request 'UI rework' (#3) from ui_rework into master 2025-03-14 01:27:59 +03:00
39c4bfb2fd fixed translations 2025-03-14 01:12:55 +03:00
33b54fb475 added ofd scene, working http server 2025-03-14 00:44:14 +03:00
b305fba2fd russian grammar 2025-03-12 12:53:43 +03:00
1ae724f925 added functionality to email text and ocr scenes 2025-03-11 23:31:08 +03:00
4c7a25c53e added ui for ofd 2025-03-11 19:37:58 +03:00
cb3d6c2a3f rework ui, add text from email scene 2025-03-09 21:23:36 +03:00
4f75e88b69 staging 2025-03-09 17:11:34 +03:00
29b9b58759 rework of mainwindow in progress 2025-03-09 16:05:37 +03:00
df522f07f7 merge 2025-03-08 17:35:05 +03:00
d41accd111 cleanup 2025-03-08 17:33:24 +03:00
957ccc9946 dirty minimal working version 2025-03-08 12:42:43 +03:00
7d42cbd111 unneeded dependencies 2025-03-07 16:36:12 +03:00
05563a5f82 removed unneeded dependency from readme 2025-03-03 23:26:14 +03:00
5ca16a4f76 translations 2025-03-03 22:52:09 +03:00
e60aafd653 separated translations as a new make target 2024-12-12 00:58:36 +03:00
a10271e595 added debian package 2024-12-09 19:30:48 +03:00
3a2901b49c added PKGBUILD 2024-12-09 19:06:49 +03:00
22922aecaa added handler on internal server error 2024-12-09 17:34:36 +03:00
baa8ae6e65 added russian readme 2024-12-09 17:06:35 +03:00
2ebcf68838 fix UI and translations 2024-12-09 16:27:30 +03:00
b135f8a94d readme changes 2024-12-07 02:18:03 +03:00
7290769750 readme update 2024-12-05 16:04:55 +03:00
64da9e9327 fixed language settings 2024-12-05 14:53:20 +03:00
b7b7c054d3 fixed loading system locale from wrong place 2024-12-05 13:58:23 +03:00
c478dcf8d4 embeding translations into qrc 2024-12-05 03:48:20 +03:00
7959bc5492 added language combo box in preferences 2024-12-04 18:44:40 +03:00
031c1d5792 translations 2024-12-04 04:35:51 +03:00
cca20abbfd pretty-printing settings.json 2024-12-04 04:05:02 +03:00
988dc0e133 upload icons 2024-12-04 01:08:08 +03:00
888f658a9c added icon 2024-12-04 01:07:48 +03:00
17a03606c5 fixed wrong setting 2024-12-03 15:24:21 +03:00
83351698d6 readme & todo updated 2024-12-03 15:02:54 +03:00
2c99f422d3 appimage deployment 2024-12-03 03:45:58 +03:00
41463c7f87 packing ocr data and handling escape on chose files 2024-12-02 14:12:03 +03:00
c941264346 remove unneeded, update gitignore 2024-12-02 13:10:36 +03:00
c471cb3f62 fixed captcha not showing up in appimage 2024-12-02 13:09:48 +03:00
7c021c90ee TOOD update 2024-12-02 12:45:20 +03:00
e6cc4b9117 using linuxdeployqt for appimage deployment 2024-12-02 03:21:24 +03:00
c8e4f5ac54 gitignore update 2024-12-02 01:14:42 +03:00
daa7d43c1b removed unneeded 2024-12-02 00:14:44 +03:00
b9a7808960 appimage deployment 2024-12-02 00:14:12 +03:00
1a0f756efc fixes building 2024-12-01 20:04:51 +03:00
362c70e695 ensured building on latest archlinux system 2024-12-01 19:37:17 +03:00
88d849bee9 ensured building on ubuntu 18.04 2024-12-01 18:53:16 +03:00
b59b42a40c translations 2024-12-01 15:01:55 +03:00
fdfeb57049 added translation 2024-11-29 17:01:39 +03:00
22c6bed407 readme changes 2024-11-28 02:07:45 +03:00
d4b5b8d068 fixed too much precision 2024-11-28 02:06:46 +03:00
54020c0925 cleanup 2024-11-28 00:29:49 +03:00
4d658a817b handling incorrect captcha and check not found cases 2024-11-28 00:28:37 +03:00
47dfc19395 requests to ofd 2024-11-27 01:46:36 +03:00
1843479e6b cleanup 2024-11-26 01:09:21 +03:00
8f511789d9 readme changes 2024-11-25 04:31:08 +03:00
a39a34852c implemented contrast slider 2024-11-25 04:07:56 +03:00
3106479fcc completed requests to ofd.ru 2024-11-24 19:07:28 +03:00
48885daed5 rm unneeded 2024-11-22 23:30:04 +03:00
be1e131fa7 update gitignore 2024-11-22 23:29:49 +03:00
106 changed files with 6646 additions and 4510 deletions

3
.env Normal file
View File

@@ -0,0 +1,3 @@
name=checks-parser
version=alpha_0.0.4
revision=1

12
.gitignore vendored
View File

@@ -35,6 +35,8 @@ Thumbs.db
/.qmake.cache
/.qmake.stash
*.qrc.depends
# qtcreator generated files
*.pro.user*
CMakeLists.txt.user*
@@ -99,7 +101,6 @@ cmake_install.cmake
*.moc
*.moc.cpp
*.qrc.cpp
*.ui
# CMake-specific files
CMakeCache.txt
@@ -116,3 +117,12 @@ install_manifest.txt
*.pro.user
*.suo
*.sdf
checks-parser_autogen
checks-parser
deploy/appimage/AppDir/usr/share/doc/
deploy/appimage/AppDir/usr/share/
*.deb
binaries

View File

@@ -1,76 +1,185 @@
cmake_minimum_required(VERSION 3.16)
cmake_minimum_required(VERSION 3.10)
project(checks-parser VERSION 0.1 LANGUAGES CXX)
project(checks-parser VERSION 0.0.4 LANGUAGES CXX)
option(BUILD_TRANSLATIONS "Build translations?" ON)
option(BUILD_EMAIL_MODE "Build email mode?" ON)
option(BUILD_OFD_LOCAL_QR_SCAN "Build OFDs' local qr scanner?" ON)
option(BUILD_OFD_BINARYEYE_SCAN "Build OFDs' binaryeye scanner?" ON)
if (NOT (BUILD_EMAIL_MODE OR BUILD_OFD_LOCAL_QR_SCAN OR BUILD_OFD_BINARYEYE_SCAN))
message(FATAL_ERROR "You must specify at least one of the modes of data input!")
return()
endif()
if (BUILD_TRANSLATIONS)
if(CMAKE_VERSION VERSION_LESS 3.12)
add_definitions(-DBUILD_TRANSLATIONS)
else()
add_compile_definitions(BUILD_TRANSLATIONS)
endif()
endif()
if (BUILD_OFD_LOCAL_QR_SCAN OR BUILD_OFD_BINARYEYE_SCAN)
if(CMAKE_VERSION VERSION_LESS 3.12)
add_definitions(-DBUILD_OFD_MODE)
else()
add_compile_definitions(BUILD_OFD_MODE)
endif()
endif()
if (BUILD_EMAIL_MODE)
if(CMAKE_VERSION VERSION_LESS 3.12)
add_definitions(-DBUILD_EMAIL_MODE)
else()
add_compile_definitions(BUILD_EMAIL_MODE)
endif()
endif()
if (BUILD_OFD_LOCAL_QR_SCAN)
if(CMAKE_VERSION VERSION_LESS 3.12)
add_definitions(-DBUILD_OFD_LOCAL_QR_SCAN)
else()
add_compile_definitions(BUILD_OFD_LOCAL_QR_SCAN)
endif()
endif()
if (BUILD_OFD_BINARYEYE_SCAN)
if(CMAKE_VERSION VERSION_LESS 3.12)
add_definitions(-DBUILD_OFD_BINARYEYE_SCAN)
else()
add_compile_definitions(BUILD_OFD_BINARYEYE_SCAN)
endif()
endif()
SET(CMAKE_BUILD_TYPE Debug)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTORCC OFF)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOUIC_SEARCH_PATHS scenes)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)
find_package(Qt6Core REQUIRED)
if (BUILD_TRANSLATIONS)
find_package(Qt6 REQUIRED COMPONENTS LinguistTools)
endif()
find_package(Qt6Gui REQUIRED)
find_package(Qt6Widgets REQUIRED)
set(PROJECT_SOURCES
main.cpp
mainwindow.cpp
mainwindow.h
mainwindow.ui
set(TRANSLATION_SOURCES
main.cpp
mainwindow.cpp mainwindow.h scenes/mainwindow.ui
outputdialog.h outputdialog.cpp scenes/outputdialog.ui
settingsdialog.h settingsdialog.cpp scenes/settingsdialog.ui
)
if (BUILD_OFD_LOCAL_QR_SCAN)
list(APPEND TRANSLATION_SOURCES adjustpicturedialog.h adjustpicturedialog.cpp scenes/adjustpicturedialog.ui)
endif()
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
qt_add_executable(checks-parser
MANUAL_FINALIZATION
${PROJECT_SOURCES}
if (BUILD_OFD_LOCAL_QR_SCAN OR BUILD_OFD_BINARYEYE_SCAN)
list(APPEND TRANSLATION_SOURCES solvecaptchadialog.h solvecaptchadialog.cpp scenes/solvecaptchadialog.ui)
endif()
set(PROJECT_SOURCES
goods/goods.h goods/goods.cpp
check/check.h check/check.cpp
output/output_options.h output/output_options.cpp
utils/utils.h utils/utils.cpp
net/net.h net/net.cpp
settings/settings.h settings/settings.cpp
widgets/outputcolumn.h widgets/outputcolumn.cpp
widgets/outputcolumnmodel.h widgets/outputcolumnmodel.cpp
${TRANSLATION_SOURCES}
)
if (BUILD_OFD_LOCAL_QR_SCAN)
list(APPEND PROJECT_SOURCES image_redactor/imageredactor.h image_redactor/imageredactor.cpp)
endif()
if (BUILD_OFD_BINARYEYE_SCAN OR BUILD_OFD_LOCAL_QR_SCAN)
list(APPEND PROJECT_SOURCES exceptions/ofdrequestexception.h exceptions/ofdrequestexception.cpp)
endif()
if (BUILD_OFD_BINARYEYE_SCAN)
list(APPEND PROJECT_SOURCES http_server/http_server.h http_server/http_server.cpp)
endif()
if (BUILD_EMAIL_MODE)
list(APPEND PROJECT_SOURCES email_parser/emailparser.h email_parser/emailparser.cpp)
list(APPEND PROJECT_SOURCES utils/base64.h utils/base64.cpp)
endif()
if (BUILD_TRANSLATIONS)
set(TS_FILES
translations/en_US.ts
translations/ru_RU.ts
)
qt_create_translation(QM_FILES "${TRANSLATION_SOURCES}" ${TS_FILES})
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/translations.qrc ${CMAKE_CURRENT_BINARY_DIR}/translations.qrc COPYONLY)
qt_add_resources(TRANSLATIONQRC ${CMAKE_CURRENT_BINARY_DIR}/translations.qrc)
add_custom_target(translations ALL DEPENDS ${QM_FILES})
add_custom_target(resources ALL DEPENDS ${TRANSLATIONQRC})
add_dependencies(resources translations)
endif()
# Media QRC
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/media.qrc ${CMAKE_CURRENT_BINARY_DIR}/media.qrc COPYONLY)
file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/assets DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
qt_add_resources(MEDIAQRC ${CMAKE_CURRENT_BINARY_DIR}/media.qrc)
add_custom_target(mediaresource ALL DEPENDS ${MEDIAQRC})
#Scenes QRC
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scenes.qrc ${CMAKE_CURRENT_BINARY_DIR}/scenes.qrc COPYONLY)
file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/scenes DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
qt_add_resources(SCENESQRC ${CMAKE_CURRENT_BINARY_DIR}/scenes.qrc)
add_custom_target(scenessource ALL DEPENDS ${SCENESQRC})
set(SOURCES "")
list(APPEND SOURCES ${MEDIAQRC})
list(APPEND SOURCES ${SCENESQRC})
if (BUILD_TRANSLATIONS)
list(APPEND SOURCES ${TRANSLATIONQRC})
endif()
if(ANDROID)
add_library(checks-parser SHARED
${PROJECT_SOURCES}
${SOURCES}
)
# Define target properties for Android with Qt 6 as:
# set_property(TARGET checks-parser APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
# ${CMAKE_CURRENT_SOURCE_DIR}/android)
# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation
else()
if(ANDROID)
add_library(checks-parser SHARED
${PROJECT_SOURCES}
)
# Define properties for Android with Qt 5 after find_package() calls as:
# set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
else()
add_executable(checks-parser
${PROJECT_SOURCES}
goods/goods.h goods/goods.cpp
check/check.h check/check.cpp
parser/parser.h parser/parser.cpp
parser/module.h parser/module.cpp
outputdialog.h outputdialog.cpp outputdialog.ui
output/output_options.h output/output_options.cpp
ofd/ofd.h ofd/ofd.cpp
utils/utils.h utils/utils.cpp
image/checkimage.h image/checkimage.cpp
net/net.h net/net.cpp
settings/settings.h settings/settings.cpp
settingsdialog.h settingsdialog.cpp settingsdialog.ui
adjustpicturedialog.h adjustpicturedialog.cpp adjustpicturedialog.ui
imageview/imageview.h imageview/imageview.cpp
image_redactor/imageredactor.h image_redactor/imageredactor.cpp
)
find_package(Qt5 REQUIRED COMPONENTS LinguistTools)
qt_create_translation(QM_FILES checks_parser_en_US.ts)
endif()
add_executable(checks-parser
${PROJECT_SOURCES}
${SOURCES}
widgets/checkqueuetablemodel.h widgets/checkqueuetablemodel.cpp
# widgets/checkqueuetableview.h widgets/checkqueuetableview.cpp
)
endif()
target_link_libraries(checks-parser PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
# Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1.
# If you are developing for iOS or macOS you should consider setting an
# explicit, fixed bundle identifier manually though.
if(${QT_VERSION} VERSION_LESS 6.1.0)
set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER com.example.checks-parser)
target_link_libraries(checks-parser PRIVATE Qt6::Widgets)
target_include_directories(checks-parser PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/widgets)
if (BUILD_OFD_LOCAL_QR_SCAN)
target_include_directories(checks-parser PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/image_redactor)
endif()
set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER org.foxarmy.checks-parser)
set_target_properties(checks-parser PROPERTIES
${BUNDLE_ID_OPTION}
MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
@@ -86,22 +195,44 @@ install(TARGETS checks-parser
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
if(QT_VERSION_MAJOR EQUAL 6)
qt_finalize_executable(checks-parser)
if(WIN32)
#????
set(OpenCV_DIR /usr/local/lib/cmake/opencv4)
endif()
find_package(PkgConfig REQUIRED)
find_package(OpenCV REQUIRED)
if (BUILD_OFD_BINARYEYE_SCAN)
find_package(PkgConfig)
pkg_check_modules(QRENCODE REQUIRED libqrencode)
include_directories(${QRENCODE_INCLUDE_DIRS})
link_directories(${QRENCODE_LIBRARY_DIRS})
target_link_libraries(checks-parser PRIVATE ${QRENCODE_LIBRARIES})
endif()
# if (BUILD_OFD_LOCAL_QR_SCAN)
# target_link_libraries(checks-parser PRIVATE -lzbar)
# endif()
# include_directories("/usr/include/opencv4")
include_directories( ${OpenCV_INCLUDE_DIRS})
target_link_libraries(checks-parser PRIVATE -lzbar)
target_link_libraries(checks-parser PRIVATE -ltesseract)
target_link_libraries(checks-parser PRIVATE -lcurl)
# pkg_search_module(opencv REQUIRED IMPORTED_TARGET opencv)
# target_link_libraries(checks-parser PRIVATE -lopencv4)
target_link_libraries( checks-parser PRIVATE ${OpenCV_LIBS} )
# target_link_libraries(checks-parser PRIVATE PkgConfig::opencv)
# target_link_libraries(checks-parser PRIVATE ${OpenCV_LIBS})
# target_link_libraries(checks-parser PRIVATE -lopencv)
if (CMAKE_VERSION VERSION_LESS 3.30)
find_package(Boost 1.45.0 REQUIRED COMPONENTS regex)
else()
find_package(Boost 1.45.0 CONFIG REQUIRED COMPONENTS regex)
endif()
include_directories(${Boost_INCLUDE_DIRS})
target_link_libraries(checks-parser PUBLIC ${Boost_LIBRARIES})
if (BUILD_OFD_LOCAL_QR_SCAN OR BUILD_OFD_BINARYEYE_SCAN)
find_package(OpenCV REQUIRED COMPONENTS core imgproc imgcodecs opencv_objdetect videoio)
target_link_libraries(checks-parser PRIVATE ${OpenCV_LIBS})
target_include_directories(checks-parser PUBLIC ${OpenCV_INCLUDE_DIRS})
include_directories( ${OpenCV_INCLUDE_DIRS} )
endif()
# if (BUILD_EMAIL_MODE)
# find_package(vmime REQUIRED)
# target_link_libraries(checks-parser PRIVATE vmime)
# endif()
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9)
target_link_libraries(checks-parser PRIVATE -lstdc++fs)
endif()

129
README.md
View File

@@ -1,52 +1,133 @@
# Checks parser
checks parser is a program that help parsing different formats of checks to csv.
# Usage
### Input
# /!\ The project is frozen! /!\
It is completed at about 80-90%, but I don't have time nor desire to complete it.
Perhaps, I could resume it sometime.
-->[Русская версия](https://git.foxarmy.org/leca/checks-parser/src/branch/master/README.ru.md)<--
checks parser is a program that help parsing different checks to csv.
!!!CURRENTLY SUPPORTED ONLY RUSSIAN CHECKS!!!
To know why, see [this section](https://git.foxarmy.org/leca/checks-parser#checks-from-different-countries)
## Usage
For more detailed description, please, refer to [the wiki](https://git.foxarmy.org/leca/checks-parser/wiki/Description-%5BEN%5D)
## Input
Ways you can input a check to this programm:
* Via image (it uses OCR(Optical Character Recognition) to parse check content. The picture of a check must be contrast and well-lined (text must be perpendicular to right and left borders of an image) enough in order to be parsed well.)
* Via image (it uses OCR(Optical Character Recognition) to parse check content. The picture of a check must be contrast and well-lined (text must be perpendicular to right and left borders of an image) enough in order to be parsed well.) OCR is not a magic wand :(
* Via plaintext, copied from an E-Mail. Just copy&paste text from your email, pick a correct store type (autodetect is in my plans!) and parse.
* Via E-Mail file (.eml) **[!NOT IMPLEMENTED YET!]**
* Via QrCode on check (OFD (ОФД, Оператор Фискальных Данных in Russian)). **[!NOT IMPLEMENTED YET!]**
* Via QRCode on check (this method queries check content from OFD (ОФД, Оператор Фискальных Данных in Russian) (My program makes requests to ofd.ru)).
### Output
At the start of writing this program, I considered 3 or more output formats: csv, xlsx and ods. But throught the development I understood that most of modern table processor (i.e. electronic tables) can import csv much better than I'd be writing a shitty export module, adding more dependencies and shitty code to the codebase. So I decided that there's no need to use anything other than csv format.
To export, you need to specify an output file path and, if you wish, you can change order and/or rename columns, choose to print or not to print header (column names) and total.
# Installing
## Building
In general, you need to install following dependencies in order to build that app(I suppose you have install all the build necessaries such as cmake, make, gcc, git, etc...):
## Installing
### Building
In general, you need to install following dependencies in order to build that app(I suppose you have installed all the build necessaries such as cmake, make, gcc, git, etc...):
* boost
* tesseract (you also have to install appropriate for your needs language data)
* opencv
* zbar
* curl
* nlohmann-json
* qt5
* vtk
* qrencode
Please, do not hesitate to open an issue if you cannot build that. I will help and if you are building on a distro that is not listed there, we can append that list as soon as we will solve your problem!
### Linux
##### Arch Linux
I recommend using aur helper (I use yay) to install dependencies. Or, if you're masochist, you can build all by yourself /shrug
#### Linux
##### Arch Linux-based
I recommend using aur helper (I use yay) to install dependencies. Or, if you're masochist, you can build all by yourself ¯\\\_()\_
```
#Install dependencies
yay -S sudo cmake git coreutils base-devel eigen qt5-base mbedtls gtkglext opencv opencv2 nlohmann-json tesseract tesseract-data-rus vtk
yay -S base-devel qt5-base opencv zbar nlohmann-json tesseract qrencode boost
#Install a language package for OCR. Replace ``LANG` to your language. For example, ``tesseract-data-rus`` for russian language
yay -S tesseract-data-LANG
#Clone and compile an app
git clone https://git.foxarmy.org/leca/checks-parser
cd checks-parser
mkdir build
cd build
cmake ..
cmake .
make -j{nproc}
#If you wish to install that program system-wide, run
sudo make install
```
##### Debian
TODO
### Windows
Maybe
### Mac OS
##### Debian-based
In debian-based distributions most, but not every, package names are the same.
Installation of dependencies for different debian-based distros:
###### Ubuntu 18.04
```apt install -y qtbase5-dev openssl libmbedtls-dev tesseract-ocr tesseract-ocr-rus libopencv-dev libzbar-dev qttools5-dev nlohmann-json-dev libcurl4-openssl-dev libtesseract-dev libqrencode-dev libboost-regex-dev```
###### Ubuntu 20.04, LMDE (tested only 6), Debian (tested only 12)
```apt install -y qt6-base-dev openssl libmbedtls-dev tesseract-ocr tesseract-ocr-rus libopencv-dev qt6-tools-dev nlohmann-json3-dev libcurl4-openssl-dev libqrencode-dev libboost-regex-dev```
Next steps are identical for every debian-based distro
```sh
#Clone and compile an app
git clone https://git.foxarmy.org/leca/checks-parser
cd checks-parser
cmake .
make -j{nproc}
#If you wish to install that program system-wide, run
sudo make install
```
#### Windows
See [Precompiled binaries](https://git.foxarmy.org/leca/checks-parser#precompiled-binaries)
#### Mac OS
Probably not, I do not have nor desire or time. But if you can maintain that program on Mac, I'd be grateful! Please, contact me, if you can!
## Precompiled
I plan to make precompiled binaries for Linux and Windows. Maybe I will put it on AUR. I also think that I will be making an AppImage
### Precompiled binaries
Currently I have published the program to the [AUR](https://aur.archlinux.org/packages/checks-parser-git).
Every new release will certainly contain AppImage and tarball. I am working towards binaries for Windows and deb packets. Expect them to appear in next releases!
## Special thanks
HyperFlint (@hyperflint:foxarmy.org) - for the great idea to use OFD and a huge help in release preparations!
[ofd.ru](https://check.ofd.ru) - for providing a way to request data from FNS.
## Contribution
If you want to contribute to the project, you can do it by some of the following:
### Checks from different countries
I live in Russia and only know how Russian state checks system works. If you live in another country and want to help me with adding support to checks from your country - feel free to contact me!
### Issues and PRs
If you have found a bug, or want to suggest a feature - don't hesitate to open an issue / a PR!
### Tell friends
You can help me by distributing that program. If you know people that are in search of such program, please let them know about its existance!
### Donate
```XMR 45ZjyH5YWdRfKxLoKEBYaiHUTcP5Z8Gv64QQxmabbooPAa7KPBxZLmqft5ohKXn5VpHiVj1x9JKCcAcAjdu9jA8b5N8XqR7```

105
README.ru.md Normal file
View File

@@ -0,0 +1,105 @@
-->[English version](https://git.foxarmy.org/leca/checks-parser/src/branch/master/README.md)<--
# Чек парсер
Чек парсер - это приложение, позволяющее доставать содержимое чека и переводить его в .csv файлы.
!!!НА ДАННЫЙ МОМЕНТ ПОДДЕРЖИВАЮТСЯ ТОЛЬКО РУССКИЕ ЧЕКИ!!!
Чтобы узнать почему [смотрите здесь](https://git.foxarmy.org/leca/checks-parser/src/branch/master/README.ru.md#checks-from-different-countries)
# Пользование
Для более детального описания, пожалуйста, обратитесь к [вики](https://git.foxarmy.org/leca/checks-parser/wiki/Description-%5BRU%5D)
### Ввод данных
Доступны следующие способы ввода данных:
* Через изображениие (используется OCR(Optical Character Recognition, Оптическое распознавание символов), чтобы прочитать содержимое чека. Изображение чека должно быть контрастным и выровненным (текст обязан быть перпендикулярным к границам изображения) хорошо, чтобы нормально прочитаться. OCR - не волшебная палочка :(
* Через простой текст, скопированный из эл. письма. Скопируйте и вставьте текст с вашего письма, выберите подходящий магазин (автодетект в планах!) и парсите.
* Через QRCode на чеке (этот метод запрашивает данные у ОФД (Оператор Фискальных Данных), в данном конкретном случае, к ofd.ru).
### Вывод данных
На начальном этапе разработки программы, Я задумывался о 3-х или более форматов вывода: csv, xlsx и ods. Но, по мере разработки, я понял, что большинство современных табличных процессоров (электронных таблиц) способны импортировать в себя csv гораздо лучше, чем смог бы написать я сам. Так что я решил не делать вывод во все остальные форматы, кроме csv.
Чтобы экспортировать вам нужно: указать путь до файла, если вы желаете, вы можете изменить порядок и/или переименовать (алиасы) столбцы, выбрать печатать или не печатать заголовок (алиасы столбцов) и "итого".
# Установка
## Сборка из исходников
В целом, вам нужно установить следующие зависимости, чтобы собрать приложение (я предполагаю, что вы уже имеете на системе базовые пакеты вроде cmake, make, gcc, git и так далее):
* boost
* tesseract (также вам нужно будет установить языковой пакет для него, например tesseract-data-rus на Arch Linux или tesseract-ocr-rus на Debian Linux.)
* opencv
* zbar
* curl
* nlohmann-json
* qt5
* qrencode
Пожалуйста, не стесняйтесь и открывайте issue, если вы не можете собрать приложение. Я помогу вам, и если вы собираете приложение на дистрибутиве, который здесь не перечислен, как только мы решим вашу проблему, я добавлю новый дистрибутив в этот список!
### Linux
##### Arch Linux и ответвления
Я рекомендую использовать помощник для АУРа (я использую yay) чтобы установить зависимости. Или, если вы мазохист, можете собрать все зависимости ручками ¯\\\_()\_
```
#Установка зависимостей
yay -S base-devel qt5-base opencv zbar nlohmann-json tesseract qrencode boost
#Установка языкового пакета для OCR. Замените ``LANG` на желаемый язык. Например, ``tesseract-data-rus`` для русского языка
yay -S tesseract-data-LANG
#Загрузка исходгого кода и сборка приложения
git clone https://git.foxarmy.org/leca/checks-parser
cd checks-parser
cmake .
make -j{nproc}
#Если вы хотите скопировать запускной файл в свою систему, исполните:
sudo make install
```
##### Debian и ответвления
В debian и ответвлениях большинство, но не все, имена пакетов одинаковы.
Установка зависимостей для различных debian дистрибутивов:
###### Ubuntu 18.04
```apt install -y qtbase5-dev openssl libmbedtls-dev tesseract-ocr tesseract-ocr-rus libopencv-dev libzbar-dev qttools5-dev nlohmann-json-dev libcurl4-openssl-dev libtesseract-dev libqrencode-dev libboost-regex-dev```
###### Ubuntu 20.04, LMDE (проверил только 6), Debian (проверил только 12)
```apt install -y qtbase5-dev openssl libmbedtls-dev tesseract-ocr tesseract-ocr-rus libopencv-dev libzbar-dev qttools5-dev nlohmann-json3-dev libcurl4-openssl-dev libtesseract-dev libqrencode-dev libboost-regex-dev```
Следующие шаги идеинтичны для всех дистрибутивов, основанных на debian:
```
#Загрузка исходного кода и сборка приложения
git clone https://git.foxarmy.org/leca/checks-parser
cd checks-parser
cmake .
make -j{nproc}
#Если вы хотите скопировать запускной файл в свою систему, исполните:
sudo make install
```
### Windows
Смотрите [бинарники](https://git.foxarmy.org/leca/checks-parser/src/branch/master/README.ru.md#бинарники)
### Mac OS
Скорее всего нет, у меня нет ни времени, ни желания, ни устройства. Но если вы можете собирать программу на Mac OS, я буду рад, если вы поможете. Пожалуйста, свяжитесь со мной, если можете!
## Бинарники
На текущий момент я опубликовал программу в [АУР](https://aur.archlinux.org/packages/checks-parser-git).
Каждый релиз будет содержать AppImage и арчёвский tarball. Я работаю над бинарниками для Windows и .deb пакетами. Ожидайте их в следующих релизах!
# Особое спасибо
HyperFlint (@hyperflint:foxarmy.org) - за гениальную идею использовать ОФД и огромную помощь в подготовке проекта к релизу!
https://check.ofd.ru - за способ вытаскивать данные о чеках из ФНС.
# Помощь
Если вы хотите помочь проекту, вы можете сделать это следующими способами:
## Чеки из других стран
Я живу в России и знаком только с местной системой чеков. Если вы живёте в другой стране и хотите помочь мне с поддержкой чеков из Вашей страны - свяжитесь со мной!
## Issues и PRs
Если вы нашли баг или хотите предложить что-то в программу - не стесняйтесь и открывайте issue или PR!
## Рассказать друзьями
Вы можете помочь проекту, распространяя программу. Если вы знаете людей, которые ищут подобную программу, пожалуйста, дайте им знать о существовании таковой!
## Пожертвования
```XMR 45ZjyH5YWdRfKxLoKEBYaiHUTcP5Z8Gv64QQxmabbooPAa7KPBxZLmqft5ohKXn5VpHiVj1x9JKCcAcAjdu9jA8b5N8XqR7```

19
TODO
View File

@@ -1,19 +0,0 @@
Complete module "export":
make UI; [done]
make export to .csv [done]
Complete module "image-to-text":
make UI; [done]
make use of tesseract/opencv (https://learnopencv.com/deep-learning-based-text-recognition-ocr-using-tesseract-and-opencv/); [done]
Add features:
autodetect store type
auto download of stores modules [done]
auto download of ofd modules [done]
settings, a window for editing settings. [done]
add ability to control contrast and rotation of a check image before passing it to OCR
Refactor:
Get rid of CPR, use libcurl instead [done]
Build:
Write script for AppImage deployment
Find out dependencies packet names on different distros
Ensure success of building on most popular distros
Try to compile it on Windows

View File

@@ -1,26 +1,29 @@
#include "adjustpicturedialog.h"
#include "ui_adjustpicturedialog.h"
#include "utils/utils.h"
#include <utils/utils.h>
#include <opencv2/objdetect.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <string>
#include <iostream>
#include <opencv2/core/mat.hpp>
#include <QFileDialog>
#include <QMessageBox>
#include <zbar.h>
using cv::QRCodeDetector, cv::Mat;
AdjustPictureDialog::AdjustPictureDialog(QWidget *parent, std::string imagePath)
: QDialog(parent)
, ui(new Ui::AdjustPictureDialog){
, ui(new Ui::AdjustPictureDialog)
, pixmap(QString::fromStdString(imagePath))
, img(pixmap.toImage()){
ui->setupUi(this);
computeContrastLookupTable();
scene = new QGraphicsScene(this);
ui->graphicsView->setScene(scene);
QGraphicsPixmapItem p;
QString path = QString::fromStdString(imagePath);
QPixmap pixmap = QPixmap(path);
scene->addPixmap(pixmap);
}
@@ -36,37 +39,75 @@ void AdjustPictureDialog::accept() {
if (result == "") {
QMessageBox infoDialog;
infoDialog.setText("QR code was not detected on that image. Please edit it again or enter data manually");
infoDialog.setText(tr("QR code was not detected on that image. Please edit it again or enter data manually"));
infoDialog.setIcon(QMessageBox::Warning);
infoDialog.setWindowTitle("No QR code");
infoDialog.setWindowTitle(tr("No QR code"));
infoDialog.exec();
} else {
emit decodedData(result);
std::map<std::string, std::string> paramsMap;
std::vector<std::string> dataSplit = split(result, "&");
for (std::string &pair : dataSplit) {
std::vector<std::string> values = split(pair, "=");
paramsMap.insert(std::pair<std::string, std::string>(values[0], values[1]));
}
emit decodedData(paramsMap);
QDialog::accept();
}
}
std::string AdjustPictureDialog::decode() {
cv::Mat im = cv::imread(get_path_relative_to_home(".local/share/checks_parser/temp.png"));
Mat im = cv::imread(get_path_relative_to_home(".local/share/checks_parser/temp.png"));
QRCodeDetector qrDecoder = QRCodeDetector();
return qrDecoder.detectAndDecode(im);
zbar::ImageScanner scanner;
scanner.set_config(zbar::ZBAR_QRCODE, zbar::ZBAR_CFG_ENABLE, 1);
scanner.set_config(zbar::ZBAR_QRCODE, zbar::ZBAR_CFG_TEST_INVERTED, 1);
// zbar::ImageScanner scanner;
// scanner.set_config(zbar::ZBAR_QRCODE, zbar::ZBAR_CFG_ENABLE, 1);
cv::Mat imGray;
cv::cvtColor(im, imGray, cv::COLOR_BGR2GRAY);
// cv::Mat imGray;
// cv::cvtColor(im, imGray, cv::COLOR_BGR2GRAY);
zbar::Image image(im.cols, im.rows, "Y800", (uchar *) imGray.data, im.cols * im.rows);
int n = scanner.scan(image);
// zbar::Image image(im.cols, im.rows, "Y800", (uchar *) imGray.data, im.cols * im.rows);
// scanner.scan(image);
std::string result = "";
// std::string result = "";
for (zbar::Image::SymbolIterator symbol = image.symbol_begin(); symbol != image.symbol_end(); ++symbol) {
result = symbol->get_data();
// for (zbar::Image::SymbolIterator symbol = image.symbol_begin(); symbol != image.symbol_end(); ++symbol) {
// result = symbol->get_data();
// }
// return result;
}
void AdjustPictureDialog::computeContrastLookupTable() {
for (int contrastValue = 0; contrastValue < 100; ++contrastValue) {
double contrast = contrastValue / 50.0;
for (int i = 0; i < 256; ++i) {
unsigned short correctedValue = std::clamp(static_cast<int>(128 + contrast * (i - 128)), 0, 255);
contrastLUT[contrastValue].push_back(correctedValue);
}
}
}
void AdjustPictureDialog::on_contrastSlider_sliderMoved(int position) {
QImage image = img.copy();
uint32_t* pixels = reinterpret_cast<uint32_t*>(image.bits());
int width = image.width();
int height = image.height();
for (int y = 0; y < height; ++y) {
for (int x = 0; x < width; ++x) {
QRgb rgb = pixels[y * width + x];
pixels[y * width + x] = qRgba(
contrastLUT[position][qRed(rgb)],
contrastLUT[position][qGreen(rgb)],
contrastLUT[position][qBlue(rgb)],
qAlpha(rgb));
}
}
return result;
scene->clear();
scene->addPixmap(QPixmap::fromImage(image));
}

View File

@@ -16,15 +16,21 @@ public:
explicit AdjustPictureDialog(QWidget *parent = nullptr, std::string imagePath = "");
~AdjustPictureDialog();
std::string decode();
QPixmap pixmap;
QImage img;
void computeContrastLookupTable();
std::vector<unsigned short> contrastLUT[100];
signals:
void decodedData(std::string data);
void decodedData(std::map<std::string, std::string> data);
private slots:
// void on_buttonBox_accepted();
void accept() override;
void on_contrastSlider_sliderMoved(int position);
private:
Ui::AdjustPictureDialog *ui;
QGraphicsScene *scene;

131
assets/icons/OCR.svg Normal file
View File

@@ -0,0 +1,131 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="159.62572mm"
height="146.77805mm"
viewBox="0 0 159.62572 146.77805"
version="1.1"
id="svg1"
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
sodipodi:docname="OCR.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="true"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
inkscape:zoom="0.50000001"
inkscape:cx="187"
inkscape:cy="261.99999"
inkscape:window-width="1920"
inkscape:window-height="1029"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:current-layer="layer4" />
<defs
id="defs1">
<linearGradient
id="swatch50"
inkscape:swatch="solid">
<stop
style="stop-color:#00b2c3;stop-opacity:0;"
offset="0"
id="stop50" />
</linearGradient>
<linearGradient
id="linearGradient5"
inkscape:collect="always">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop5" />
<stop
style="stop-color:#000000;stop-opacity:0;"
offset="1"
id="stop6" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5"
id="radialGradient6"
cx="178.3111"
cy="60.733166"
fx="178.3111"
fy="60.733166"
r="14.328103"
gradientTransform="matrix(1,0,0,0.566866,0,26.305599)"
gradientUnits="userSpaceOnUse" />
</defs>
<g
inkscape:groupmode="layer"
id="layer4"
inkscape:label="eye"
transform="translate(-20.738154,-52.70636)">
<ellipse
style="display:none;fill:#ffffff;fill-opacity:1;stroke:url(#radialGradient6);stroke-width:0.418956;stroke-opacity:1"
id="ellipse5"
ry="7.9126363"
rx="16.896055"
cy="60.733166"
cx="178.3111"
inkscape:label="inner" />
<path
id="path48"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.499999;stroke-dasharray:none;stroke-opacity:1"
d="m 163.03445,62.853096 c -5.5416,0.04533 -10.97868,2.888123 -16.31735,8.383468 -0.12314,0.157876 0.0243,0.318843 0.0243,0.318843 11.50919,11.568278 22.55969,11.493788 33.23673,0 0.18303,-0.169745 0.18055,-0.163774 -0.005,-0.331246 -5.75329,-5.664436 -11.39834,-8.416392 -16.93902,-8.371065 z"
inkscape:label="outer"
sodipodi:nodetypes="sccccss" />
<ellipse
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.0723045"
id="ellipse4"
inkscape:label="pupil"
ry="1.7112623"
rx="1.9444314"
cy="72.71582"
cx="160.92181" />
</g>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-20.738154,-52.70636)">
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.499999"
id="rect1"
width="101.46883"
height="146.27805"
x="21.108479"
y="52.95636"
ry="0"
inkscape:label="receipt" />
<path
style="fill:#ee0000;fill-opacity:0.51545;stroke:none;stroke-width:0.499999"
d="M 20.738154,121.46633 160.93664,72.756923 122.6633,120.9805 Z"
id="path1"
sodipodi:nodetypes="cccc"
inkscape:label="scan_ray" />
<text
xml:space="preserve"
style="font-size:13.7201px;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:2.16063"
x="47.53178"
y="66.945511"
id="text2"
inkscape:label="receipt text"><tspan
sodipodi:role="line"
style="fill:#000000;fill-opacity:1;stroke-width:2.16064"
x="47.53178"
y="66.945511"
id="tspan3">Receipt</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.2 KiB

181
assets/icons/OFD.svg Normal file
View File

@@ -0,0 +1,181 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="180.75754mm"
height="172.34297mm"
viewBox="0 0 180.75754 172.34297"
version="1.1"
id="svg1"
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
sodipodi:docname="OFD.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
inkscape:zoom="1.0104048"
inkscape:cx="241.98222"
inkscape:cy="365.20017"
inkscape:window-width="1920"
inkscape:window-height="1029"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs1">
<marker
style="overflow:visible"
id="marker13"
refX="0"
refY="0"
orient="auto-start-reverse"
inkscape:stockid="Wide arrow"
markerWidth="1"
markerHeight="1"
viewBox="0 0 1 1"
inkscape:isstock="true"
inkscape:collect="always"
preserveAspectRatio="xMidYMid">
<path
style="fill:none;stroke:context-stroke;stroke-width:1;stroke-linecap:butt"
d="M 3,-3 0,0 3,3"
transform="rotate(180,0.125,0)"
sodipodi:nodetypes="ccc"
id="path13" />
</marker>
<marker
style="overflow:visible"
id="ArrowWide"
refX="0"
refY="0"
orient="auto-start-reverse"
inkscape:stockid="Wide arrow"
markerWidth="1"
markerHeight="1"
viewBox="0 0 1 1"
inkscape:isstock="true"
inkscape:collect="always"
preserveAspectRatio="xMidYMid">
<path
style="fill:none;stroke:context-stroke;stroke-width:1;stroke-linecap:butt"
d="M 3,-3 0,0 3,3"
transform="rotate(180,0.125,0)"
sodipodi:nodetypes="ccc"
id="path1" />
</marker>
</defs>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-12.622354,-8.2059073)">
<g
id="g3"
inkscape:label="laptop"
transform="translate(3.1423049,5.2371749)">
<rect
style="fill:#ffffff;stroke:#000000;stroke-width:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1"
id="rect1"
width="83.00206"
height="51.927536"
x="12.220698"
y="109.98628"
ry="2.8804462" />
<rect
style="fill:#ffffff;stroke:#000000;stroke-width:4;stroke-dasharray:none"
id="rect2"
width="85.730049"
height="4.8142142"
x="11.480049"
y="168.4975"
ry="2.4071071" />
<rect
style="fill:#ffffff;stroke:#000000;stroke-width:0;stroke-dasharray:none"
id="rect3"
width="8.389514"
height="1.2071242"
x="49.959942"
y="161.32069"
ry="0.60356212" />
</g>
<path
id="rect5"
style="fill:#ffffff;stroke:#000000;stroke-width:1.77913;stroke-dasharray:none"
d="m 135.00181,57.565658 c -1.57959,0 -2.85099,1.271404 -2.85099,2.850988 v 8.277531 c 0,1.579585 1.2714,2.851506 2.85099,2.851506 h 26.56478 v 3.891752 h -26.56478 c -1.57959,0 -2.85099,1.271404 -2.85099,2.850989 v 8.277531 c 0,1.579586 1.2714,2.851506 2.85099,2.851506 h 26.56478 v 3.575495 h -26.56478 c -1.57959,0 -2.85099,1.27141 -2.85099,2.85099 v 8.277534 c 0,1.57959 1.2714,2.85151 2.85099,2.85151 h 26.56478 v 7.61504 a 4.0588107,4.0588107 0 0 0 -1.20923,0.30489 4.0588107,4.0588107 0 0 0 -2.42569,3.32434 h -23.53344 c -1.66831,0 -3.01119,0.24778 -3.01119,0.55552 0,0.30774 1.34288,0.55552 3.01119,0.55552 h 23.57478 a 4.0588107,4.0588107 0 0 0 0.25477,0.88936 l 0.0114,0.0269 a 4.0588107,4.0588107 0 0 0 5.33611,2.10065 4.0588107,4.0588107 0 0 0 2.38073,-3.01688 h 23.52311 c 1.6683,0 3.01119,-0.24778 3.01119,-0.55552 0,-0.30774 -1.34289,-0.55552 -3.01119,-0.55552 h -23.48177 a 4.0588107,4.0588107 0 0 0 -0.31161,-1.20406 4.0588107,4.0588107 0 0 0 -3.20239,-2.40864 v -7.63157 h 26.2816 c 1.57959,0 2.85099,-1.27192 2.85099,-2.85151 v -8.277534 c 0,-1.57958 -1.2714,-2.85099 -2.85099,-2.85099 h -26.2816 v -3.575495 h 26.2816 c 1.57959,0 2.85099,-1.27192 2.85099,-2.851506 v -8.277531 c 0,-1.579585 -1.2714,-2.850989 -2.85099,-2.850989 h -26.2816 v -3.891752 h 26.2816 c 1.57959,0 2.85099,-1.271921 2.85099,-2.851506 v -8.277561 c 0,-1.579584 -1.2714,-2.850988 -2.85099,-2.850988 z"
inkscape:label="OFD" />
<path
id="path9"
style="fill:#ffffff;stroke:#000000;stroke-width:1.77913;stroke-dasharray:none"
d="m 34.83473,9.0954723 c -1.57959,0 -2.85099,1.2714037 -2.85099,2.8509877 v 8.277531 c 0,1.579585 1.2714,2.851506 2.85099,2.851506 h 26.56478 v 3.891752 H 34.83473 c -1.57959,0 -2.85099,1.271404 -2.85099,2.850989 v 8.277531 c 0,1.579586 1.2714,2.851506 2.85099,2.851506 H 61.39951 V 44.52277 H 34.83473 c -1.57959,0 -2.85099,1.27141 -2.85099,2.85099 v 8.27753 c 0,1.57959 1.2714,2.85151 2.85099,2.85151 h 26.56478 v 7.61504 a 4.0588107,4.0588107 0 0 0 -1.20923,0.30489 4.0588107,4.0588107 0 0 0 -2.42569,3.32434 H 34.23115 c -1.66831,0 -3.01119,0.24778 -3.01119,0.55552 0,0.30774 1.34288,0.55552 3.01119,0.55552 h 23.57478 a 4.0588107,4.0588107 0 0 0 0.25477,0.88936 l 0.0114,0.0269 a 4.0588107,4.0588107 0 0 0 5.33611,2.10065 4.0588107,4.0588107 0 0 0 2.38073,-3.01688 h 23.523106 c 1.6683,0 3.01119,-0.24778 3.01119,-0.55552 0,-0.30774 -1.34289,-0.55552 -3.01119,-0.55552 H 65.83028 A 4.0588107,4.0588107 0 0 0 65.51867,68.54304 4.0588107,4.0588107 0 0 0 62.31628,66.1344 v -7.63157 h 26.281596 c 1.57959,0 2.85099,-1.27192 2.85099,-2.85151 v -8.27753 c 0,-1.57958 -1.2714,-2.85099 -2.85099,-2.85099 H 62.31628 v -3.575495 h 26.281596 c 1.57959,0 2.85099,-1.27192 2.85099,-2.851506 v -8.277531 c 0,-1.579585 -1.2714,-2.850989 -2.85099,-2.850989 H 62.31628 v -3.891752 h 26.281596 c 1.57959,0 2.85099,-1.271921 2.85099,-2.851506 V 11.94646 c 0,-1.579584 -1.2714,-2.8509877 -2.85099,-2.8509877 z"
inkscape:label="FNS" />
<g
id="g13"
inkscape:label="two arrows">
<path
style="fill:#ffffff;stroke:#000000;stroke-width:1.5;stroke-dasharray:none;marker-start:url(#ArrowWide)"
d="m 100.17269,112.57855 25.9227,-13.146507 z"
id="path10" />
<path
style="fill:#ffffff;stroke:#000000;stroke-width:1.5;stroke-dasharray:none;marker-end:url(#marker13)"
d="m 128.92299,105.88982 -25.9227,13.14651 z"
id="path10-5" />
</g>
<text
xml:space="preserve"
style="font-size:13.7103px;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:#000000;stroke:none;stroke-width:1;stroke-dasharray:none;fill-opacity:1"
x="144.47009"
y="86.974228"
id="text10"><tspan
sodipodi:role="line"
id="tspan10"
style="stroke-width:1;stroke-dasharray:none;stroke:none;fill:#000000;fill-opacity:1"
x="144.47009"
y="86.974228">ofd.ru</tspan></text>
<text
xml:space="preserve"
style="font-size:13.3232px;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:#000000;stroke:none;stroke-width:1;stroke-dasharray:none;fill-opacity:1"
x="46.742268"
y="38.150463"
id="text11"><tspan
sodipodi:role="line"
id="tspan11"
style="stroke-width:1;stroke-dasharray:none;stroke:none;fill:#000000;fill-opacity:1"
x="46.742268"
y="38.150463">ФНС</tspan></text>
<g
id="g15"
inkscape:label="two arrows"
transform="rotate(45.923414,168.3245,81.037241)">
<path
style="fill:#ffffff;stroke:#000000;stroke-width:1.5;stroke-dasharray:none;marker-start:url(#ArrowWide)"
d="m 100.17269,112.57855 25.9227,-13.146507 z"
id="path14" />
<path
style="fill:#ffffff;stroke:#000000;stroke-width:1.5;stroke-dasharray:none;marker-end:url(#marker13)"
d="m 128.92299,105.88982 -25.9227,13.14651 z"
id="path15" />
</g>
<text
xml:space="preserve"
style="font-size:11.8523px;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:#000000;stroke:none;stroke-width:1;stroke-dasharray:none;fill-opacity:1"
x="18.578594"
y="144.58119"
id="text15"><tspan
sodipodi:role="line"
id="tspan15"
style="stroke-width:1;stroke-dasharray:none;fill:#000000;fill-opacity:1;stroke:none"
x="18.578594"
y="144.58119">Checks parser</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 8.7 KiB

285
assets/icons/email-text.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 27 KiB

BIN
assets/icons/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 KiB

116
assets/icons/icon.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 649 KiB

78
assets/icons/settings.svg Normal file
View File

@@ -0,0 +1,78 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="115.83108mm"
height="115.8316mm"
viewBox="0 0 115.83108 115.8316"
version="1.1"
id="svg1"
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
sodipodi:docname="settings.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="true"
inkscape:zoom="0.67565763"
inkscape:cx="-76.962055"
inkscape:cy="230.88617"
inkscape:window-width="1920"
inkscape:window-height="1029"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:current-layer="layer1">
<inkscape:grid
id="grid4"
units="mm"
originx="-47.084513"
originy="-90.584188"
spacingx="0.99999998"
spacingy="1"
empcolor="#0099e5"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="5"
enabled="true"
visible="true" />
</sodipodi:namedview>
<defs
id="defs1" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-47.084512,-90.584183)">
<rect
style="display:none;fill:#37f500;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-opacity:0.075573"
id="rect11"
width="169.95171"
height="169.95171"
x="20.362879"
y="61.871819"
ry="8.590621" />
<path
id="path10"
style="display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-opacity:0.075573"
inkscape:label="gear"
d="m 75.96901,0.80545601 c -11.155773,5e-7 -3.381873,12.02630099 -10.5755,17.65980599 2.26264,2.865218 2.781879,6.635337 1.536071,9.912568 l 0.842199,0.8422 a 23.648779,23.648779 0 0 1 8.720476,-1.56428 23.648779,23.648779 0 0 1 21.188309,14.268711 23.648779,23.648779 0 0 1 0.433613,17.637966 l 8.483422,8.483422 c 0.001,-1.137526 0.23505,-2.370832 0.79807,-3.730066 4.67012,-11.27469 19.06665,-0.813378 19.06665,-13.017015 0,-12.203637 -14.39653,-1.742323 -19.06665,-13.017014 -4.67013,-11.27469 12.9067,-14.057796 4.27742,-22.68707 -8.62927,-8.6292737 -11.41192,8.948014 -22.686611,4.277884 C 77.711789,15.202439 88.172646,0.80545546 75.96901,0.80545601 Z M 106.5976,68.045849 c -0.009,8.298119 12.66446,11.368041 5.07549,18.957003 -7.59196,7.591964 -10.66109,-5.094535 -18.966554,-5.075493 l 16.355784,16.355783 c 2.70707,2.707048 7.06538,2.707048 9.77243,0 l 4.11408,-4.114084 c 2.70705,-2.707068 2.70705,-7.065327 0,-9.77243 z M 92.706536,81.927359 84.164419,73.385241 A 23.648779,23.648779 0 0 1 54.292034,60.751335 l -0.0678,-0.156519 A 23.648779,23.648779 0 0 1 53.850687,43.071964 l -0.808075,-0.808075 c -3.276856,1.245655 -7.046115,0.726779 -9.911204,-1.53516 -5.635193,7.18452 -17.655256,-0.582996 -17.655256,10.570039 1e-6,12.203638 14.396527,1.742324 19.066657,13.017015 4.67013,11.274689 -12.907157,14.057795 -4.277883,22.687069 8.629275,8.629275 11.412378,-8.948013 22.687069,-4.277883 11.27469,4.670129 0.813378,19.067111 13.017015,19.067111 12.203637,0 1.742778,-14.396981 13.017469,-19.067111 1.355311,-0.561389 2.58526,-0.795009 3.720057,-0.79761 z M 43.131408,40.728729 c 0.530828,-0.676772 1.009354,-1.476346 1.411401,-2.446975 1.382806,-3.338388 0.796238,-5.922366 -0.464097,-8.143995 -5.610754,-0.603322 -9.948354,-8.65044 -17.091514,-10.361651 -0.190642,2.831294 0.790952,5.725383 2.964307,7.898752 l 12.263539,12.263539 c 0.290197,0.290195 0.602358,0.542427 0.916364,0.79033 z m 0.947304,-10.59097 c 2.166221,0.232933 4.522048,-0.640922 7.302705,-3.421578 2.784135,-2.78414 3.656675,-5.142371 3.420669,-7.310895 -5.277946,-2.997957 -8.46522,-9.8825424 -14.53716,-3.810602 -6.074184,6.074185 0.81761,9.261629 3.813786,14.543075 z M 54.802086,19.405286 c 2.222924,1.262656 4.808593,1.851301 8.149909,0.467282 0.968102,-0.401001 1.765816,-0.878149 2.441515,-1.407306 -0.247687,-0.313651 -0.499528,-0.625564 -0.78942,-0.915455 L 52.340551,5.2862683 C 50.34246,3.2881697 47.734568,2.2888648 45.127026,2.2887468 v 4.55e-4 c -0.228937,-1.05e-5 -0.457614,0.017002 -0.686136,0.032305 1.710334,7.1397402 9.75097,11.4767772 10.361196,17.0837792 z M 53.850687,43.071964 84.164419,73.385241 A 23.648779,23.648779 0 0 0 85.382901,72.993034 23.648779,23.648779 0 0 0 98.114178,59.562427 L 67.77178,29.22003 a 23.648779,23.648779 0 0 0 -1.137947,0.350348 23.648779,23.648779 0 0 0 -12.783146,13.501586 z"
transform="matrix(1.1357528,0,0,1.1357528,18.717777,90.23726)" />
<path
id="path11"
style="display:none;fill:#f50000;fill-opacity:1;stroke:#000000;stroke-width:1.51285;stroke-opacity:0.075573"
d="m 63.089959,81.902523 c -0.311091,-1.7e-5 -0.621755,0.02326 -0.932283,0.04412 3.222959,13.454148 22.996087,19.583657 9.430752,33.149007 -13.565319,13.56532 -19.694039,-6.20771 -33.148136,-9.43075 -0.259055,3.84733 1.074576,7.78001 4.02786,10.73331 l 16.664641,16.66466 c 3.992393,3.99236 9.772658,5.03826 14.71346,3.16006 l 76.122907,76.12203 c 3.67851,3.67851 9.60071,3.67851 13.27922,0 l 5.59023,-5.59023 c 3.6785,-3.67853 3.6785,-9.60066 0,-13.27923 L 92.71658,117.35349 c 1.878195,-4.9408 0.832348,-10.72105 -3.16008,-14.71346 L 72.891859,85.975392 c -2.715126,-2.715126 -6.258615,-4.072783 -9.8019,-4.072937 z"
inkscape:label="wrench" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.7 KiB

View File

@@ -0,0 +1,219 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="182.87955mm"
height="144.54501mm"
viewBox="0 0 182.87955 144.54501"
version="1.1"
id="svg1"
xml:space="preserve"
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
sodipodi:docname="using_binary_eye.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
inkscape:zoom="0.5052024"
inkscape:cx="555.22302"
inkscape:cy="211.7963"
inkscape:window-width="1920"
inkscape:window-height="1029"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:current-layer="g3" /><defs
id="defs1"><marker
style="overflow:visible"
id="ArrowWide"
refX="0"
refY="0"
orient="auto-start-reverse"
inkscape:stockid="Wide arrow"
markerWidth="1"
markerHeight="1"
viewBox="0 0 1 1"
inkscape:isstock="true"
inkscape:collect="always"
preserveAspectRatio="xMidYMid"><path
style="fill:none;stroke:context-stroke;stroke-width:1;stroke-linecap:butt"
d="M 3,-3 0,0 3,3"
transform="rotate(180,0.125,0)"
sodipodi:nodetypes="ccc"
id="path1" /></marker><marker
style="overflow:visible"
id="marker13"
refX="0"
refY="0"
orient="auto-start-reverse"
inkscape:stockid="Wide arrow"
markerWidth="1"
markerHeight="1"
viewBox="0 0 1 1"
inkscape:isstock="true"
inkscape:collect="always"
preserveAspectRatio="xMidYMid"><path
style="fill:none;stroke:context-stroke;stroke-width:1;stroke-linecap:butt"
d="M 3,-3 0,0 3,3"
transform="rotate(180,0.125,0)"
sodipodi:nodetypes="ccc"
id="path13" /></marker></defs><g
inkscape:label="Phone"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-25.853363,-48.893891)"><rect
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-opacity:1"
id="rect1"
width="57.029922"
height="97.02494"
x="26.353363"
y="95.913963"
rx="7.7330093"
ry="7.3138995"
inkscape:label="border" /><g
id="g1837"
inkscape:label="binary eye logo"
transform="translate(-69.392567,-90.079408)"><circle
r="23.283333"
cy="234.73807"
cx="123.78944"
id="circle-1"
style="fill:#a6c45f;fill-opacity:1;stroke:none;stroke-width:1.05833;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><circle
style="fill:#b6d46f;fill-opacity:1;stroke:none;stroke-width:1.05833;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle-2"
cx="123.78944"
cy="234.20889"
r="23.283333" /><path
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:0.12549;fill-rule:nonzero;stroke:none;stroke-width:2.27733;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="m 124.32389,217.397 c -4.43071,0 -8.86142,1.68857 -12.2391,5.06624 -6.7556,6.75587 -6.7556,17.72311 0,24.47872 l 10.48915,10.48941 c 0.40454,0.0307 0.80989,0.0511 1.21549,0.0609 12.85901,0 23.28333,-10.42432 23.28333,-23.28333 -0.003,-0.42731 -0.0185,-0.85461 -0.0455,-1.28112 l -10.46453,-10.46453 c -3.37767,-3.37767 -7.80838,-5.06624 -12.23883,-5.06624 z"
id="path-1" /><circle
r="17.155054"
cy="234.55074"
cx="124.12916"
id="circle-3"
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.05833;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><path
d="m 136.31216,234.55073 c 0,2.98132 -1.07077,5.71262 -2.84903,7.83008 v -15.66016 c 1.77826,2.11746 2.84903,4.84875 2.84903,7.83008 z m -12.183,12.183 c -0.34925,0 -0.69506,-0.0148 -1.0369,-0.0434 v -24.27922 c 0.34184,-0.0286 0.68765,-0.0434 1.0369,-0.0434 0.34925,0 0.69506,0.0148 1.0369,0.0434 v 24.27922 c -0.34184,0.0286 -0.68765,0.0434 -1.0369,0.0434 z m -12.18301,-12.183 c 0,-2.98133 1.07077,-5.71262 2.84904,-7.83008 v 15.66016 c -1.77827,-2.11746 -2.84904,-4.84876 -2.84904,-7.83008 z m 17.36858,11.02757 c -0.6612,0.31141 -1.35494,0.56515 -2.0746,0.75459 v -23.56432 c 0.71966,0.18944 1.4134,0.44317 2.0746,0.75459 z m -8.29707,0.75459 c -1.51898,-0.40005 -2.92206,-1.08612 -4.14788,-1.99708 v -19.57017 c 1.22582,-0.91096 2.6289,-1.59702 4.14788,-1.99707 z"
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.05833;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle-6" /></g></g><g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="QR code"
transform="translate(-30.254583,-85.236427)"><rect
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-opacity:1"
id="rect1837"
width="14.072319"
height="14.072319"
x="42.246078"
y="85.736427"
rx="0"
ry="0" /><rect
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.484034;stroke-opacity:1"
id="rect1838"
width="6.8114772"
height="6.8114772"
x="45.876503"
y="89.366852"
rx="0"
ry="0" /><rect
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-opacity:1"
id="rect1839"
width="14.072319"
height="14.072319"
x="62.243584"
y="85.736427"
rx="0"
ry="0" /><rect
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.484034;stroke-opacity:1"
id="rect1840"
width="6.8114772"
height="6.8114772"
x="65.874008"
y="89.366852"
rx="0"
ry="0" /><rect
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-opacity:1"
id="rect1841"
width="14.072319"
height="14.072319"
x="42.246078"
y="105.54877"
rx="0"
ry="0" /><rect
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.484034;stroke-opacity:1"
id="rect1842"
width="6.8114772"
height="6.8114772"
x="45.876503"
y="109.17919"
rx="0"
ry="0" /><rect
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.484034;stroke-opacity:1"
id="rect1844"
width="6.8114772"
height="6.8114772"
x="61.846733"
y="105.52224"
rx="0"
ry="0" /><rect
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.484034;stroke-opacity:1"
id="rect1845"
width="6.8114772"
height="6.8114772"
x="69.130707"
y="112.81159"
rx="0"
ry="0" /><g
id="g3"
inkscape:label="laptop"
transform="translate(82.762838,125.57409)"><rect
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:4;stroke-dasharray:none;stroke-opacity:1"
id="rect1-6"
width="83.00206"
height="51.927536"
x="43.381889"
y="35.094681"
ry="2.8804462" /><rect
style="fill:#ffffff;stroke:#000000;stroke-width:4;stroke-dasharray:none"
id="rect2"
width="85.730049"
height="4.8142142"
x="42.641239"
y="93.605896"
ry="2.4071071" /><rect
style="fill:#ffffff;stroke:#000000;stroke-width:0;stroke-dasharray:none"
id="rect3"
width="8.389514"
height="1.2071242"
x="81.12114"
y="86.429092"
ry="0.60356212" /><g
id="g1"
transform="translate(27.69601,-81.170421)"><text
xml:space="preserve"
style="font-size:11.8523px;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-dasharray:none"
x="18.578594"
y="144.58119"
id="text15"><tspan
sodipodi:role="line"
id="tspan15"
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-dasharray:none"
x="18.578594"
y="144.58119">Checks parser</tspan></text></g><g
id="g13"
inkscape:label="two arrows"
transform="rotate(30,151.73824,-82.354999)"><path
style="fill:#ffffff;stroke:#000000;stroke-width:1.5;stroke-dasharray:none;marker-start:url(#ArrowWide)"
d="m 100.17269,112.57855 25.9227,-13.146507 z"
id="path10" /><path
style="fill:#ffffff;stroke:#000000;stroke-width:1.5;stroke-dasharray:none;marker-end:url(#marker13)"
d="m 128.92299,105.88982 -25.9227,13.14651 z"
id="path10-5" /></g></g></g></svg>

After

Width:  |  Height:  |  Size: 9.9 KiB

View File

@@ -1,20 +1,75 @@
#include "check.h"
#include "../goods/goods.h"
#include <QObject>
Check::Check() {}
void Check::add_goods(Goods goods) { this->goods.push_back(goods); }
Check::Check(std::string date, double total, OperationType type, std::string fn, std::string fd, std::string fi, std::vector<Goods> goods) {
set_date(date);
set_total(total);
set_operation_type(type);
set_fn(fn);
set_fd(fd);
set_fi(fi);
set_goods(goods);
}
void Check::add_goods(Goods goods) {
this->goods.push_back(goods);
this->total = this->calculae_total_price();
}
void Check::add_goods(std::vector<Goods> &goods) {
for (auto &g : goods) {
this->goods.push_back(g);
}
this->total = this->calculae_total_price();
}
double Check::calculae_total_price() {
double total = 0.0;
for (Goods g : this->goods) {
for (Goods &g : goods) {
total += g.calculate_total_price();
}
return total;
}
std::vector<Goods>& Check::get_goods() {
return goods;
std::vector<Goods>& Check::get_goods() { return goods; }
void Check::set_fn(std::string fn) { this->fn = fn; }
void Check::set_fd(std::string fd) { this->fd = fd; }
void Check::set_fi(std::string fi) { this->fi = fi; }
std::string Check::get_date() { return date; }
OperationType Check::get_operationType() { return operation_type; }
void Check::set_date(std::string date) { this->date = date; }
void Check::set_operation_type(OperationType t) { this->operation_type = t; }
void Check::set_total(double total) { this->total = total; }
void Check::set_goods(std::vector<Goods> goods) { this->goods = goods; }
std::string Check::get_fn() { return fn; }
std::string Check::get_fd() { return fd; }
std::string Check::get_fi() { return fi; }
double Check::get_total() { return total; }
bool Check::operator==(Check &c) {
return
this->date == c.date &&
this->fd == c.fd &&
this->fi == c.fi &&
this->fn == c.fn &&
this->operation_type == c.operation_type &&
this->total == c.total;
}
bool Check::operator==(const Check &c) {
return
this->date == c.date &&
this->fd == c.fd &&
this->fi == c.fi &&
this->fn == c.fn &&
this->operation_type == c.operation_type &&
this->total == c.total;
}
Q_DECLARE_METATYPE(Check)

View File

@@ -1,18 +1,56 @@
#ifndef CHECK_H
#define CHECK_H
#include "../goods/goods.h"
#include <vector>
typedef enum OperationTypes {
funds_income, // Приход средств
funds_return, // Возврат прихода
funds_spend, // Расход средств
spends_return // Возврат расхода
} OperationType;
class Check {
std::string fn; // Fiscal Number = Фискальный номер
std::string fd; // Fiscal Document = Фискальный документ
std::string fi; // Fiscal Identifier = Фискальный признак
std::string date;
OperationType operation_type;
double total;
std::vector<Goods> goods;
public:
Check();
Check(std::string date, double total, OperationType type, std::string fn, std::string fd, std::string fi, std::vector<Goods> goods);
void add_goods(Goods);
void add_goods(std::vector<Goods> &goods);
double calculae_total_price();
std::vector<Goods> &get_goods();
void set_fn(std::string);
void set_fd(std::string);
void set_fi(std::string);
void set_date(std::string);
void set_operation_type(OperationType);
void set_total(double);
void set_goods(std::vector<Goods>);
std::string get_fn();
std::string get_fd();
std::string get_fi();
std::string get_date();
OperationType get_operationType();
double get_total();
bool operator==(Check &);
bool operator==(const Check &);
};
#endif // CHECK_H

View File

@@ -1,335 +0,0 @@
/home/leca/projects/qt/checks-parser/checks-parser_autogen/EWIEGA46WW/moc_adjustpicturedialog.cpp: /home/leca/projects/qt/checks-parser/adjustpicturedialog.h \
/home/leca/projects/qt/checks-parser/checks-parser_autogen/moc_predefs.h \
/usr/include/asm-generic/errno-base.h \
/usr/include/asm-generic/errno.h \
/usr/include/asm/errno.h \
/usr/include/asm/unistd.h \
/usr/include/asm/unistd_64.h \
/usr/include/assert.h \
/usr/include/bits/atomic_wide_counter.h \
/usr/include/bits/confname.h \
/usr/include/bits/cpu-set.h \
/usr/include/bits/endian.h \
/usr/include/bits/endianness.h \
/usr/include/bits/environments.h \
/usr/include/bits/errno.h \
/usr/include/bits/floatn-common.h \
/usr/include/bits/floatn.h \
/usr/include/bits/getopt_core.h \
/usr/include/bits/getopt_posix.h \
/usr/include/bits/libc-header-start.h \
/usr/include/bits/locale.h \
/usr/include/bits/long-double.h \
/usr/include/bits/posix_opt.h \
/usr/include/bits/pthread_stack_min-dynamic.h \
/usr/include/bits/pthreadtypes-arch.h \
/usr/include/bits/pthreadtypes.h \
/usr/include/bits/sched.h \
/usr/include/bits/setjmp.h \
/usr/include/bits/struct_mutex.h \
/usr/include/bits/struct_rwlock.h \
/usr/include/bits/syscall.h \
/usr/include/bits/thread-shared-types.h \
/usr/include/bits/time.h \
/usr/include/bits/time64.h \
/usr/include/bits/timesize.h \
/usr/include/bits/timex.h \
/usr/include/bits/types.h \
/usr/include/bits/types/FILE.h \
/usr/include/bits/types/__FILE.h \
/usr/include/bits/types/__locale_t.h \
/usr/include/bits/types/__mbstate_t.h \
/usr/include/bits/types/__sigset_t.h \
/usr/include/bits/types/clock_t.h \
/usr/include/bits/types/clockid_t.h \
/usr/include/bits/types/error_t.h \
/usr/include/bits/types/locale_t.h \
/usr/include/bits/types/mbstate_t.h \
/usr/include/bits/types/struct___jmp_buf_tag.h \
/usr/include/bits/types/struct_itimerspec.h \
/usr/include/bits/types/struct_sched_param.h \
/usr/include/bits/types/struct_timespec.h \
/usr/include/bits/types/struct_timeval.h \
/usr/include/bits/types/struct_tm.h \
/usr/include/bits/types/time_t.h \
/usr/include/bits/types/timer_t.h \
/usr/include/bits/types/wint_t.h \
/usr/include/bits/typesizes.h \
/usr/include/bits/unistd_ext.h \
/usr/include/bits/wchar.h \
/usr/include/bits/wctype-wchar.h \
/usr/include/bits/wordsize.h \
/usr/include/c++/14.2.1/algorithm \
/usr/include/c++/14.2.1/array \
/usr/include/c++/14.2.1/atomic \
/usr/include/c++/14.2.1/backward/auto_ptr.h \
/usr/include/c++/14.2.1/backward/binders.h \
/usr/include/c++/14.2.1/bit \
/usr/include/c++/14.2.1/bits/algorithmfwd.h \
/usr/include/c++/14.2.1/bits/align.h \
/usr/include/c++/14.2.1/bits/alloc_traits.h \
/usr/include/c++/14.2.1/bits/allocated_ptr.h \
/usr/include/c++/14.2.1/bits/allocator.h \
/usr/include/c++/14.2.1/bits/atomic_base.h \
/usr/include/c++/14.2.1/bits/atomic_lockfree_defines.h \
/usr/include/c++/14.2.1/bits/atomic_wait.h \
/usr/include/c++/14.2.1/bits/basic_ios.h \
/usr/include/c++/14.2.1/bits/basic_ios.tcc \
/usr/include/c++/14.2.1/bits/basic_string.h \
/usr/include/c++/14.2.1/bits/basic_string.tcc \
/usr/include/c++/14.2.1/bits/c++0x_warning.h \
/usr/include/c++/14.2.1/bits/char_traits.h \
/usr/include/c++/14.2.1/bits/charconv.h \
/usr/include/c++/14.2.1/bits/concept_check.h \
/usr/include/c++/14.2.1/bits/cpp_type_traits.h \
/usr/include/c++/14.2.1/bits/cxxabi_forced.h \
/usr/include/c++/14.2.1/bits/cxxabi_init_exception.h \
/usr/include/c++/14.2.1/bits/erase_if.h \
/usr/include/c++/14.2.1/bits/exception.h \
/usr/include/c++/14.2.1/bits/exception_defines.h \
/usr/include/c++/14.2.1/bits/exception_ptr.h \
/usr/include/c++/14.2.1/bits/functexcept.h \
/usr/include/c++/14.2.1/bits/functional_hash.h \
/usr/include/c++/14.2.1/bits/hash_bytes.h \
/usr/include/c++/14.2.1/bits/invoke.h \
/usr/include/c++/14.2.1/bits/ios_base.h \
/usr/include/c++/14.2.1/bits/iterator_concepts.h \
/usr/include/c++/14.2.1/bits/list.tcc \
/usr/include/c++/14.2.1/bits/locale_classes.h \
/usr/include/c++/14.2.1/bits/locale_classes.tcc \
/usr/include/c++/14.2.1/bits/locale_facets.h \
/usr/include/c++/14.2.1/bits/locale_facets.tcc \
/usr/include/c++/14.2.1/bits/localefwd.h \
/usr/include/c++/14.2.1/bits/max_size_type.h \
/usr/include/c++/14.2.1/bits/memory_resource.h \
/usr/include/c++/14.2.1/bits/memoryfwd.h \
/usr/include/c++/14.2.1/bits/mofunc_impl.h \
/usr/include/c++/14.2.1/bits/move.h \
/usr/include/c++/14.2.1/bits/move_only_function.h \
/usr/include/c++/14.2.1/bits/nested_exception.h \
/usr/include/c++/14.2.1/bits/new_allocator.h \
/usr/include/c++/14.2.1/bits/node_handle.h \
/usr/include/c++/14.2.1/bits/ostream.tcc \
/usr/include/c++/14.2.1/bits/ostream_insert.h \
/usr/include/c++/14.2.1/bits/out_ptr.h \
/usr/include/c++/14.2.1/bits/postypes.h \
/usr/include/c++/14.2.1/bits/predefined_ops.h \
/usr/include/c++/14.2.1/bits/ptr_traits.h \
/usr/include/c++/14.2.1/bits/range_access.h \
/usr/include/c++/14.2.1/bits/ranges_algo.h \
/usr/include/c++/14.2.1/bits/ranges_algobase.h \
/usr/include/c++/14.2.1/bits/ranges_base.h \
/usr/include/c++/14.2.1/bits/ranges_cmp.h \
/usr/include/c++/14.2.1/bits/ranges_uninitialized.h \
/usr/include/c++/14.2.1/bits/ranges_util.h \
/usr/include/c++/14.2.1/bits/refwrap.h \
/usr/include/c++/14.2.1/bits/requires_hosted.h \
/usr/include/c++/14.2.1/bits/sat_arith.h \
/usr/include/c++/14.2.1/bits/shared_ptr.h \
/usr/include/c++/14.2.1/bits/shared_ptr_atomic.h \
/usr/include/c++/14.2.1/bits/shared_ptr_base.h \
/usr/include/c++/14.2.1/bits/std_abs.h \
/usr/include/c++/14.2.1/bits/std_function.h \
/usr/include/c++/14.2.1/bits/std_mutex.h \
/usr/include/c++/14.2.1/bits/stl_algo.h \
/usr/include/c++/14.2.1/bits/stl_algobase.h \
/usr/include/c++/14.2.1/bits/stl_bvector.h \
/usr/include/c++/14.2.1/bits/stl_construct.h \
/usr/include/c++/14.2.1/bits/stl_function.h \
/usr/include/c++/14.2.1/bits/stl_heap.h \
/usr/include/c++/14.2.1/bits/stl_iterator.h \
/usr/include/c++/14.2.1/bits/stl_iterator_base_funcs.h \
/usr/include/c++/14.2.1/bits/stl_iterator_base_types.h \
/usr/include/c++/14.2.1/bits/stl_list.h \
/usr/include/c++/14.2.1/bits/stl_map.h \
/usr/include/c++/14.2.1/bits/stl_multimap.h \
/usr/include/c++/14.2.1/bits/stl_numeric.h \
/usr/include/c++/14.2.1/bits/stl_pair.h \
/usr/include/c++/14.2.1/bits/stl_raw_storage_iter.h \
/usr/include/c++/14.2.1/bits/stl_relops.h \
/usr/include/c++/14.2.1/bits/stl_tempbuf.h \
/usr/include/c++/14.2.1/bits/stl_tree.h \
/usr/include/c++/14.2.1/bits/stl_uninitialized.h \
/usr/include/c++/14.2.1/bits/stl_vector.h \
/usr/include/c++/14.2.1/bits/stream_iterator.h \
/usr/include/c++/14.2.1/bits/streambuf.tcc \
/usr/include/c++/14.2.1/bits/streambuf_iterator.h \
/usr/include/c++/14.2.1/bits/string_view.tcc \
/usr/include/c++/14.2.1/bits/stringfwd.h \
/usr/include/c++/14.2.1/bits/uniform_int_dist.h \
/usr/include/c++/14.2.1/bits/unique_ptr.h \
/usr/include/c++/14.2.1/bits/uses_allocator.h \
/usr/include/c++/14.2.1/bits/uses_allocator_args.h \
/usr/include/c++/14.2.1/bits/utility.h \
/usr/include/c++/14.2.1/bits/vector.tcc \
/usr/include/c++/14.2.1/bits/version.h \
/usr/include/c++/14.2.1/cctype \
/usr/include/c++/14.2.1/cerrno \
/usr/include/c++/14.2.1/charconv \
/usr/include/c++/14.2.1/climits \
/usr/include/c++/14.2.1/clocale \
/usr/include/c++/14.2.1/compare \
/usr/include/c++/14.2.1/concepts \
/usr/include/c++/14.2.1/cstddef \
/usr/include/c++/14.2.1/cstdint \
/usr/include/c++/14.2.1/cstdlib \
/usr/include/c++/14.2.1/cwchar \
/usr/include/c++/14.2.1/cwctype \
/usr/include/c++/14.2.1/debug/assertions.h \
/usr/include/c++/14.2.1/debug/debug.h \
/usr/include/c++/14.2.1/exception \
/usr/include/c++/14.2.1/ext/aligned_buffer.h \
/usr/include/c++/14.2.1/ext/alloc_traits.h \
/usr/include/c++/14.2.1/ext/atomicity.h \
/usr/include/c++/14.2.1/ext/concurrence.h \
/usr/include/c++/14.2.1/ext/numeric_traits.h \
/usr/include/c++/14.2.1/ext/string_conversions.h \
/usr/include/c++/14.2.1/ext/type_traits.h \
/usr/include/c++/14.2.1/format \
/usr/include/c++/14.2.1/functional \
/usr/include/c++/14.2.1/initializer_list \
/usr/include/c++/14.2.1/ios \
/usr/include/c++/14.2.1/iosfwd \
/usr/include/c++/14.2.1/iterator \
/usr/include/c++/14.2.1/limits \
/usr/include/c++/14.2.1/list \
/usr/include/c++/14.2.1/map \
/usr/include/c++/14.2.1/memory \
/usr/include/c++/14.2.1/new \
/usr/include/c++/14.2.1/numbers \
/usr/include/c++/14.2.1/numeric \
/usr/include/c++/14.2.1/optional \
/usr/include/c++/14.2.1/ostream \
/usr/include/c++/14.2.1/pstl/execution_defs.h \
/usr/include/c++/14.2.1/pstl/glue_numeric_defs.h \
/usr/include/c++/14.2.1/stdexcept \
/usr/include/c++/14.2.1/stdlib.h \
/usr/include/c++/14.2.1/streambuf \
/usr/include/c++/14.2.1/string \
/usr/include/c++/14.2.1/string_view \
/usr/include/c++/14.2.1/text_encoding \
/usr/include/c++/14.2.1/tuple \
/usr/include/c++/14.2.1/type_traits \
/usr/include/c++/14.2.1/typeinfo \
/usr/include/c++/14.2.1/unordered_map \
/usr/include/c++/14.2.1/utility \
/usr/include/c++/14.2.1/vector \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/atomic_word.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/c++allocator.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/c++config.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/c++locale.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/cpu_defines.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/ctype_base.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/ctype_inline.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/error_constants.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/gthr-default.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/gthr.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/os_defines.h \
/usr/include/ctype.h \
/usr/include/errno.h \
/usr/include/features-time64.h \
/usr/include/features.h \
/usr/include/gnu/stubs-64.h \
/usr/include/gnu/stubs.h \
/usr/include/linux/errno.h \
/usr/include/locale.h \
/usr/include/pthread.h \
/usr/include/qt/QtCore/qalgorithms.h \
/usr/include/qt/QtCore/qarraydata.h \
/usr/include/qt/QtCore/qatomic.h \
/usr/include/qt/QtCore/qatomic_cxx11.h \
/usr/include/qt/QtCore/qbasicatomic.h \
/usr/include/qt/QtCore/qbytearray.h \
/usr/include/qt/QtCore/qbytearraylist.h \
/usr/include/qt/QtCore/qchar.h \
/usr/include/qt/QtCore/qcompilerdetection.h \
/usr/include/qt/QtCore/qconfig.h \
/usr/include/qt/QtCore/qcontainerfwd.h \
/usr/include/qt/QtCore/qcontainertools_impl.h \
/usr/include/qt/QtCore/qdatastream.h \
/usr/include/qt/QtCore/qflags.h \
/usr/include/qt/QtCore/qgenericatomic.h \
/usr/include/qt/QtCore/qglobal.h \
/usr/include/qt/QtCore/qglobalstatic.h \
/usr/include/qt/QtCore/qhash.h \
/usr/include/qt/QtCore/qhashfunctions.h \
/usr/include/qt/QtCore/qiodevice.h \
/usr/include/qt/QtCore/qiterator.h \
/usr/include/qt/QtCore/qline.h \
/usr/include/qt/QtCore/qlist.h \
/usr/include/qt/QtCore/qlogging.h \
/usr/include/qt/QtCore/qmargins.h \
/usr/include/qt/QtCore/qmetatype.h \
/usr/include/qt/QtCore/qnamespace.h \
/usr/include/qt/QtCore/qnumeric.h \
/usr/include/qt/QtCore/qobject.h \
/usr/include/qt/QtCore/qobject_impl.h \
/usr/include/qt/QtCore/qobjectdefs.h \
/usr/include/qt/QtCore/qobjectdefs_impl.h \
/usr/include/qt/QtCore/qpair.h \
/usr/include/qt/QtCore/qpoint.h \
/usr/include/qt/QtCore/qprocessordetection.h \
/usr/include/qt/QtCore/qrect.h \
/usr/include/qt/QtCore/qrefcount.h \
/usr/include/qt/QtCore/qregexp.h \
/usr/include/qt/QtCore/qscopedpointer.h \
/usr/include/qt/QtCore/qshareddata.h \
/usr/include/qt/QtCore/qsharedpointer.h \
/usr/include/qt/QtCore/qsharedpointer_impl.h \
/usr/include/qt/QtCore/qsize.h \
/usr/include/qt/QtCore/qstring.h \
/usr/include/qt/QtCore/qstringalgorithms.h \
/usr/include/qt/QtCore/qstringlist.h \
/usr/include/qt/QtCore/qstringliteral.h \
/usr/include/qt/QtCore/qstringmatcher.h \
/usr/include/qt/QtCore/qstringview.h \
/usr/include/qt/QtCore/qsysinfo.h \
/usr/include/qt/QtCore/qsystemdetection.h \
/usr/include/qt/QtCore/qtcore-config.h \
/usr/include/qt/QtCore/qtypeinfo.h \
/usr/include/qt/QtCore/qvarlengtharray.h \
/usr/include/qt/QtCore/qvector.h \
/usr/include/qt/QtCore/qversiontagging.h \
/usr/include/qt/QtGui/qbrush.h \
/usr/include/qt/QtGui/qcolor.h \
/usr/include/qt/QtGui/qcursor.h \
/usr/include/qt/QtGui/qfont.h \
/usr/include/qt/QtGui/qfontinfo.h \
/usr/include/qt/QtGui/qfontmetrics.h \
/usr/include/qt/QtGui/qimage.h \
/usr/include/qt/QtGui/qkeysequence.h \
/usr/include/qt/QtGui/qmatrix.h \
/usr/include/qt/QtGui/qpaintdevice.h \
/usr/include/qt/QtGui/qpalette.h \
/usr/include/qt/QtGui/qpixelformat.h \
/usr/include/qt/QtGui/qpixmap.h \
/usr/include/qt/QtGui/qpolygon.h \
/usr/include/qt/QtGui/qregion.h \
/usr/include/qt/QtGui/qrgb.h \
/usr/include/qt/QtGui/qrgba64.h \
/usr/include/qt/QtGui/qtgui-config.h \
/usr/include/qt/QtGui/qtguiglobal.h \
/usr/include/qt/QtGui/qtransform.h \
/usr/include/qt/QtGui/qwindowdefs.h \
/usr/include/qt/QtWidgets/QDialog \
/usr/include/qt/QtWidgets/qdialog.h \
/usr/include/qt/QtWidgets/qsizepolicy.h \
/usr/include/qt/QtWidgets/qtwidgets-config.h \
/usr/include/qt/QtWidgets/qtwidgetsglobal.h \
/usr/include/qt/QtWidgets/qwidget.h \
/usr/include/sched.h \
/usr/include/stdc-predef.h \
/usr/include/string.h \
/usr/include/strings.h \
/usr/include/sys/cdefs.h \
/usr/include/sys/syscall.h \
/usr/include/syscall.h \
/usr/include/time.h \
/usr/include/unistd.h \
/usr/include/wchar.h \
/usr/include/wctype.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/include/limits.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/include/stdarg.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/include/stddef.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/include/stdint.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/include/syslimits.h

View File

@@ -1,341 +0,0 @@
/home/leca/projects/qt/checks-parser/checks-parser_autogen/EWIEGA46WW/moc_mainwindow.cpp: /home/leca/projects/qt/checks-parser/mainwindow.h \
/home/leca/projects/qt/checks-parser/checks-parser_autogen/moc_predefs.h \
/home/leca/projects/qt/checks-parser/check/check.h \
/home/leca/projects/qt/checks-parser/goods/goods.h \
/home/leca/projects/qt/checks-parser/parser/module.h \
/home/leca/projects/qt/checks-parser/parser/parser.h \
/usr/include/asm-generic/errno-base.h \
/usr/include/asm-generic/errno.h \
/usr/include/asm/errno.h \
/usr/include/asm/unistd.h \
/usr/include/asm/unistd_64.h \
/usr/include/assert.h \
/usr/include/bits/atomic_wide_counter.h \
/usr/include/bits/confname.h \
/usr/include/bits/cpu-set.h \
/usr/include/bits/endian.h \
/usr/include/bits/endianness.h \
/usr/include/bits/environments.h \
/usr/include/bits/errno.h \
/usr/include/bits/floatn-common.h \
/usr/include/bits/floatn.h \
/usr/include/bits/getopt_core.h \
/usr/include/bits/getopt_posix.h \
/usr/include/bits/libc-header-start.h \
/usr/include/bits/locale.h \
/usr/include/bits/long-double.h \
/usr/include/bits/posix_opt.h \
/usr/include/bits/pthread_stack_min-dynamic.h \
/usr/include/bits/pthreadtypes-arch.h \
/usr/include/bits/pthreadtypes.h \
/usr/include/bits/sched.h \
/usr/include/bits/setjmp.h \
/usr/include/bits/struct_mutex.h \
/usr/include/bits/struct_rwlock.h \
/usr/include/bits/syscall.h \
/usr/include/bits/thread-shared-types.h \
/usr/include/bits/time.h \
/usr/include/bits/time64.h \
/usr/include/bits/timesize.h \
/usr/include/bits/timex.h \
/usr/include/bits/types.h \
/usr/include/bits/types/FILE.h \
/usr/include/bits/types/__FILE.h \
/usr/include/bits/types/__locale_t.h \
/usr/include/bits/types/__mbstate_t.h \
/usr/include/bits/types/__sigset_t.h \
/usr/include/bits/types/clock_t.h \
/usr/include/bits/types/clockid_t.h \
/usr/include/bits/types/error_t.h \
/usr/include/bits/types/locale_t.h \
/usr/include/bits/types/mbstate_t.h \
/usr/include/bits/types/struct___jmp_buf_tag.h \
/usr/include/bits/types/struct_itimerspec.h \
/usr/include/bits/types/struct_sched_param.h \
/usr/include/bits/types/struct_timespec.h \
/usr/include/bits/types/struct_timeval.h \
/usr/include/bits/types/struct_tm.h \
/usr/include/bits/types/time_t.h \
/usr/include/bits/types/timer_t.h \
/usr/include/bits/types/wint_t.h \
/usr/include/bits/typesizes.h \
/usr/include/bits/unistd_ext.h \
/usr/include/bits/wchar.h \
/usr/include/bits/wctype-wchar.h \
/usr/include/bits/wordsize.h \
/usr/include/c++/14.2.1/algorithm \
/usr/include/c++/14.2.1/array \
/usr/include/c++/14.2.1/atomic \
/usr/include/c++/14.2.1/backward/auto_ptr.h \
/usr/include/c++/14.2.1/backward/binders.h \
/usr/include/c++/14.2.1/bit \
/usr/include/c++/14.2.1/bits/algorithmfwd.h \
/usr/include/c++/14.2.1/bits/align.h \
/usr/include/c++/14.2.1/bits/alloc_traits.h \
/usr/include/c++/14.2.1/bits/allocated_ptr.h \
/usr/include/c++/14.2.1/bits/allocator.h \
/usr/include/c++/14.2.1/bits/atomic_base.h \
/usr/include/c++/14.2.1/bits/atomic_lockfree_defines.h \
/usr/include/c++/14.2.1/bits/atomic_wait.h \
/usr/include/c++/14.2.1/bits/basic_ios.h \
/usr/include/c++/14.2.1/bits/basic_ios.tcc \
/usr/include/c++/14.2.1/bits/basic_string.h \
/usr/include/c++/14.2.1/bits/basic_string.tcc \
/usr/include/c++/14.2.1/bits/c++0x_warning.h \
/usr/include/c++/14.2.1/bits/char_traits.h \
/usr/include/c++/14.2.1/bits/charconv.h \
/usr/include/c++/14.2.1/bits/concept_check.h \
/usr/include/c++/14.2.1/bits/cpp_type_traits.h \
/usr/include/c++/14.2.1/bits/cxxabi_forced.h \
/usr/include/c++/14.2.1/bits/cxxabi_init_exception.h \
/usr/include/c++/14.2.1/bits/erase_if.h \
/usr/include/c++/14.2.1/bits/exception.h \
/usr/include/c++/14.2.1/bits/exception_defines.h \
/usr/include/c++/14.2.1/bits/exception_ptr.h \
/usr/include/c++/14.2.1/bits/functexcept.h \
/usr/include/c++/14.2.1/bits/functional_hash.h \
/usr/include/c++/14.2.1/bits/hash_bytes.h \
/usr/include/c++/14.2.1/bits/invoke.h \
/usr/include/c++/14.2.1/bits/ios_base.h \
/usr/include/c++/14.2.1/bits/iterator_concepts.h \
/usr/include/c++/14.2.1/bits/list.tcc \
/usr/include/c++/14.2.1/bits/locale_classes.h \
/usr/include/c++/14.2.1/bits/locale_classes.tcc \
/usr/include/c++/14.2.1/bits/locale_facets.h \
/usr/include/c++/14.2.1/bits/locale_facets.tcc \
/usr/include/c++/14.2.1/bits/localefwd.h \
/usr/include/c++/14.2.1/bits/max_size_type.h \
/usr/include/c++/14.2.1/bits/memory_resource.h \
/usr/include/c++/14.2.1/bits/memoryfwd.h \
/usr/include/c++/14.2.1/bits/mofunc_impl.h \
/usr/include/c++/14.2.1/bits/move.h \
/usr/include/c++/14.2.1/bits/move_only_function.h \
/usr/include/c++/14.2.1/bits/nested_exception.h \
/usr/include/c++/14.2.1/bits/new_allocator.h \
/usr/include/c++/14.2.1/bits/node_handle.h \
/usr/include/c++/14.2.1/bits/ostream.tcc \
/usr/include/c++/14.2.1/bits/ostream_insert.h \
/usr/include/c++/14.2.1/bits/out_ptr.h \
/usr/include/c++/14.2.1/bits/postypes.h \
/usr/include/c++/14.2.1/bits/predefined_ops.h \
/usr/include/c++/14.2.1/bits/ptr_traits.h \
/usr/include/c++/14.2.1/bits/range_access.h \
/usr/include/c++/14.2.1/bits/ranges_algo.h \
/usr/include/c++/14.2.1/bits/ranges_algobase.h \
/usr/include/c++/14.2.1/bits/ranges_base.h \
/usr/include/c++/14.2.1/bits/ranges_cmp.h \
/usr/include/c++/14.2.1/bits/ranges_uninitialized.h \
/usr/include/c++/14.2.1/bits/ranges_util.h \
/usr/include/c++/14.2.1/bits/refwrap.h \
/usr/include/c++/14.2.1/bits/requires_hosted.h \
/usr/include/c++/14.2.1/bits/sat_arith.h \
/usr/include/c++/14.2.1/bits/shared_ptr.h \
/usr/include/c++/14.2.1/bits/shared_ptr_atomic.h \
/usr/include/c++/14.2.1/bits/shared_ptr_base.h \
/usr/include/c++/14.2.1/bits/std_abs.h \
/usr/include/c++/14.2.1/bits/std_function.h \
/usr/include/c++/14.2.1/bits/std_mutex.h \
/usr/include/c++/14.2.1/bits/stl_algo.h \
/usr/include/c++/14.2.1/bits/stl_algobase.h \
/usr/include/c++/14.2.1/bits/stl_bvector.h \
/usr/include/c++/14.2.1/bits/stl_construct.h \
/usr/include/c++/14.2.1/bits/stl_function.h \
/usr/include/c++/14.2.1/bits/stl_heap.h \
/usr/include/c++/14.2.1/bits/stl_iterator.h \
/usr/include/c++/14.2.1/bits/stl_iterator_base_funcs.h \
/usr/include/c++/14.2.1/bits/stl_iterator_base_types.h \
/usr/include/c++/14.2.1/bits/stl_list.h \
/usr/include/c++/14.2.1/bits/stl_map.h \
/usr/include/c++/14.2.1/bits/stl_multimap.h \
/usr/include/c++/14.2.1/bits/stl_numeric.h \
/usr/include/c++/14.2.1/bits/stl_pair.h \
/usr/include/c++/14.2.1/bits/stl_raw_storage_iter.h \
/usr/include/c++/14.2.1/bits/stl_relops.h \
/usr/include/c++/14.2.1/bits/stl_tempbuf.h \
/usr/include/c++/14.2.1/bits/stl_tree.h \
/usr/include/c++/14.2.1/bits/stl_uninitialized.h \
/usr/include/c++/14.2.1/bits/stl_vector.h \
/usr/include/c++/14.2.1/bits/stream_iterator.h \
/usr/include/c++/14.2.1/bits/streambuf.tcc \
/usr/include/c++/14.2.1/bits/streambuf_iterator.h \
/usr/include/c++/14.2.1/bits/string_view.tcc \
/usr/include/c++/14.2.1/bits/stringfwd.h \
/usr/include/c++/14.2.1/bits/uniform_int_dist.h \
/usr/include/c++/14.2.1/bits/unique_ptr.h \
/usr/include/c++/14.2.1/bits/uses_allocator.h \
/usr/include/c++/14.2.1/bits/uses_allocator_args.h \
/usr/include/c++/14.2.1/bits/utility.h \
/usr/include/c++/14.2.1/bits/vector.tcc \
/usr/include/c++/14.2.1/bits/version.h \
/usr/include/c++/14.2.1/cctype \
/usr/include/c++/14.2.1/cerrno \
/usr/include/c++/14.2.1/charconv \
/usr/include/c++/14.2.1/climits \
/usr/include/c++/14.2.1/clocale \
/usr/include/c++/14.2.1/compare \
/usr/include/c++/14.2.1/concepts \
/usr/include/c++/14.2.1/cstddef \
/usr/include/c++/14.2.1/cstdint \
/usr/include/c++/14.2.1/cstdlib \
/usr/include/c++/14.2.1/cwchar \
/usr/include/c++/14.2.1/cwctype \
/usr/include/c++/14.2.1/debug/assertions.h \
/usr/include/c++/14.2.1/debug/debug.h \
/usr/include/c++/14.2.1/exception \
/usr/include/c++/14.2.1/ext/aligned_buffer.h \
/usr/include/c++/14.2.1/ext/alloc_traits.h \
/usr/include/c++/14.2.1/ext/atomicity.h \
/usr/include/c++/14.2.1/ext/concurrence.h \
/usr/include/c++/14.2.1/ext/numeric_traits.h \
/usr/include/c++/14.2.1/ext/string_conversions.h \
/usr/include/c++/14.2.1/ext/type_traits.h \
/usr/include/c++/14.2.1/format \
/usr/include/c++/14.2.1/functional \
/usr/include/c++/14.2.1/initializer_list \
/usr/include/c++/14.2.1/ios \
/usr/include/c++/14.2.1/iosfwd \
/usr/include/c++/14.2.1/iterator \
/usr/include/c++/14.2.1/limits \
/usr/include/c++/14.2.1/list \
/usr/include/c++/14.2.1/map \
/usr/include/c++/14.2.1/memory \
/usr/include/c++/14.2.1/new \
/usr/include/c++/14.2.1/numbers \
/usr/include/c++/14.2.1/numeric \
/usr/include/c++/14.2.1/optional \
/usr/include/c++/14.2.1/ostream \
/usr/include/c++/14.2.1/pstl/execution_defs.h \
/usr/include/c++/14.2.1/pstl/glue_numeric_defs.h \
/usr/include/c++/14.2.1/stdexcept \
/usr/include/c++/14.2.1/stdlib.h \
/usr/include/c++/14.2.1/streambuf \
/usr/include/c++/14.2.1/string \
/usr/include/c++/14.2.1/string_view \
/usr/include/c++/14.2.1/text_encoding \
/usr/include/c++/14.2.1/tuple \
/usr/include/c++/14.2.1/type_traits \
/usr/include/c++/14.2.1/typeinfo \
/usr/include/c++/14.2.1/unordered_map \
/usr/include/c++/14.2.1/utility \
/usr/include/c++/14.2.1/vector \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/atomic_word.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/c++allocator.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/c++config.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/c++locale.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/cpu_defines.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/ctype_base.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/ctype_inline.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/error_constants.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/gthr-default.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/gthr.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/os_defines.h \
/usr/include/ctype.h \
/usr/include/errno.h \
/usr/include/features-time64.h \
/usr/include/features.h \
/usr/include/gnu/stubs-64.h \
/usr/include/gnu/stubs.h \
/usr/include/linux/errno.h \
/usr/include/locale.h \
/usr/include/pthread.h \
/usr/include/qt/QtCore/qalgorithms.h \
/usr/include/qt/QtCore/qarraydata.h \
/usr/include/qt/QtCore/qatomic.h \
/usr/include/qt/QtCore/qatomic_cxx11.h \
/usr/include/qt/QtCore/qbasicatomic.h \
/usr/include/qt/QtCore/qbytearray.h \
/usr/include/qt/QtCore/qbytearraylist.h \
/usr/include/qt/QtCore/qchar.h \
/usr/include/qt/QtCore/qcompilerdetection.h \
/usr/include/qt/QtCore/qconfig.h \
/usr/include/qt/QtCore/qcontainerfwd.h \
/usr/include/qt/QtCore/qcontainertools_impl.h \
/usr/include/qt/QtCore/qdatastream.h \
/usr/include/qt/QtCore/qflags.h \
/usr/include/qt/QtCore/qgenericatomic.h \
/usr/include/qt/QtCore/qglobal.h \
/usr/include/qt/QtCore/qglobalstatic.h \
/usr/include/qt/QtCore/qhash.h \
/usr/include/qt/QtCore/qhashfunctions.h \
/usr/include/qt/QtCore/qiodevice.h \
/usr/include/qt/QtCore/qiterator.h \
/usr/include/qt/QtCore/qline.h \
/usr/include/qt/QtCore/qlist.h \
/usr/include/qt/QtCore/qlogging.h \
/usr/include/qt/QtCore/qmargins.h \
/usr/include/qt/QtCore/qmetatype.h \
/usr/include/qt/QtCore/qnamespace.h \
/usr/include/qt/QtCore/qnumeric.h \
/usr/include/qt/QtCore/qobject.h \
/usr/include/qt/QtCore/qobject_impl.h \
/usr/include/qt/QtCore/qobjectdefs.h \
/usr/include/qt/QtCore/qobjectdefs_impl.h \
/usr/include/qt/QtCore/qpair.h \
/usr/include/qt/QtCore/qpoint.h \
/usr/include/qt/QtCore/qprocessordetection.h \
/usr/include/qt/QtCore/qrect.h \
/usr/include/qt/QtCore/qrefcount.h \
/usr/include/qt/QtCore/qregexp.h \
/usr/include/qt/QtCore/qscopedpointer.h \
/usr/include/qt/QtCore/qshareddata.h \
/usr/include/qt/QtCore/qsharedpointer.h \
/usr/include/qt/QtCore/qsharedpointer_impl.h \
/usr/include/qt/QtCore/qsize.h \
/usr/include/qt/QtCore/qstring.h \
/usr/include/qt/QtCore/qstringalgorithms.h \
/usr/include/qt/QtCore/qstringlist.h \
/usr/include/qt/QtCore/qstringliteral.h \
/usr/include/qt/QtCore/qstringmatcher.h \
/usr/include/qt/QtCore/qstringview.h \
/usr/include/qt/QtCore/qsysinfo.h \
/usr/include/qt/QtCore/qsystemdetection.h \
/usr/include/qt/QtCore/qtcore-config.h \
/usr/include/qt/QtCore/qtypeinfo.h \
/usr/include/qt/QtCore/qvarlengtharray.h \
/usr/include/qt/QtCore/qvector.h \
/usr/include/qt/QtCore/qversiontagging.h \
/usr/include/qt/QtGui/qbrush.h \
/usr/include/qt/QtGui/qcolor.h \
/usr/include/qt/QtGui/qcursor.h \
/usr/include/qt/QtGui/qfont.h \
/usr/include/qt/QtGui/qfontinfo.h \
/usr/include/qt/QtGui/qfontmetrics.h \
/usr/include/qt/QtGui/qicon.h \
/usr/include/qt/QtGui/qimage.h \
/usr/include/qt/QtGui/qkeysequence.h \
/usr/include/qt/QtGui/qmatrix.h \
/usr/include/qt/QtGui/qpaintdevice.h \
/usr/include/qt/QtGui/qpalette.h \
/usr/include/qt/QtGui/qpixelformat.h \
/usr/include/qt/QtGui/qpixmap.h \
/usr/include/qt/QtGui/qpolygon.h \
/usr/include/qt/QtGui/qregion.h \
/usr/include/qt/QtGui/qrgb.h \
/usr/include/qt/QtGui/qrgba64.h \
/usr/include/qt/QtGui/qtgui-config.h \
/usr/include/qt/QtGui/qtguiglobal.h \
/usr/include/qt/QtGui/qtransform.h \
/usr/include/qt/QtGui/qwindowdefs.h \
/usr/include/qt/QtWidgets/QMainWindow \
/usr/include/qt/QtWidgets/qmainwindow.h \
/usr/include/qt/QtWidgets/qsizepolicy.h \
/usr/include/qt/QtWidgets/qtabwidget.h \
/usr/include/qt/QtWidgets/qtwidgets-config.h \
/usr/include/qt/QtWidgets/qtwidgetsglobal.h \
/usr/include/qt/QtWidgets/qwidget.h \
/usr/include/sched.h \
/usr/include/stdc-predef.h \
/usr/include/string.h \
/usr/include/strings.h \
/usr/include/sys/cdefs.h \
/usr/include/sys/syscall.h \
/usr/include/syscall.h \
/usr/include/time.h \
/usr/include/unistd.h \
/usr/include/wchar.h \
/usr/include/wctype.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/include/limits.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/include/stdarg.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/include/stddef.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/include/stdint.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/include/syslimits.h

View File

@@ -1,459 +0,0 @@
/home/leca/projects/qt/checks-parser/checks-parser_autogen/EWIEGA46WW/moc_outputdialog.cpp: /home/leca/projects/qt/checks-parser/outputdialog.h \
/home/leca/projects/qt/checks-parser/checks-parser_autogen/moc_predefs.h \
/home/leca/projects/qt/checks-parser/check/check.h \
/home/leca/projects/qt/checks-parser/goods/goods.h \
/home/leca/projects/qt/checks-parser/net/net.h \
/home/leca/projects/qt/checks-parser/output/output_options.h \
/home/leca/projects/qt/checks-parser/settings/settings.h \
/usr/include/asm-generic/errno-base.h \
/usr/include/asm-generic/errno.h \
/usr/include/asm/errno.h \
/usr/include/asm/unistd.h \
/usr/include/asm/unistd_64.h \
/usr/include/assert.h \
/usr/include/bits/atomic_wide_counter.h \
/usr/include/bits/confname.h \
/usr/include/bits/cpu-set.h \
/usr/include/bits/endian.h \
/usr/include/bits/endianness.h \
/usr/include/bits/environments.h \
/usr/include/bits/errno.h \
/usr/include/bits/floatn-common.h \
/usr/include/bits/floatn.h \
/usr/include/bits/getopt_core.h \
/usr/include/bits/getopt_posix.h \
/usr/include/bits/libc-header-start.h \
/usr/include/bits/locale.h \
/usr/include/bits/long-double.h \
/usr/include/bits/posix_opt.h \
/usr/include/bits/pthread_stack_min-dynamic.h \
/usr/include/bits/pthreadtypes-arch.h \
/usr/include/bits/pthreadtypes.h \
/usr/include/bits/sched.h \
/usr/include/bits/setjmp.h \
/usr/include/bits/stdio_lim.h \
/usr/include/bits/struct_mutex.h \
/usr/include/bits/struct_rwlock.h \
/usr/include/bits/syscall.h \
/usr/include/bits/thread-shared-types.h \
/usr/include/bits/time.h \
/usr/include/bits/time64.h \
/usr/include/bits/timesize.h \
/usr/include/bits/timex.h \
/usr/include/bits/types.h \
/usr/include/bits/types/FILE.h \
/usr/include/bits/types/__FILE.h \
/usr/include/bits/types/__fpos64_t.h \
/usr/include/bits/types/__fpos_t.h \
/usr/include/bits/types/__locale_t.h \
/usr/include/bits/types/__mbstate_t.h \
/usr/include/bits/types/__sigset_t.h \
/usr/include/bits/types/clock_t.h \
/usr/include/bits/types/clockid_t.h \
/usr/include/bits/types/cookie_io_functions_t.h \
/usr/include/bits/types/error_t.h \
/usr/include/bits/types/locale_t.h \
/usr/include/bits/types/mbstate_t.h \
/usr/include/bits/types/struct_FILE.h \
/usr/include/bits/types/struct___jmp_buf_tag.h \
/usr/include/bits/types/struct_itimerspec.h \
/usr/include/bits/types/struct_sched_param.h \
/usr/include/bits/types/struct_timespec.h \
/usr/include/bits/types/struct_timeval.h \
/usr/include/bits/types/struct_tm.h \
/usr/include/bits/types/time_t.h \
/usr/include/bits/types/timer_t.h \
/usr/include/bits/types/wint_t.h \
/usr/include/bits/typesizes.h \
/usr/include/bits/unistd_ext.h \
/usr/include/bits/wchar.h \
/usr/include/bits/wctype-wchar.h \
/usr/include/bits/wordsize.h \
/usr/include/c++/14.2.1/algorithm \
/usr/include/c++/14.2.1/any \
/usr/include/c++/14.2.1/array \
/usr/include/c++/14.2.1/atomic \
/usr/include/c++/14.2.1/backward/auto_ptr.h \
/usr/include/c++/14.2.1/backward/binders.h \
/usr/include/c++/14.2.1/bit \
/usr/include/c++/14.2.1/bits/algorithmfwd.h \
/usr/include/c++/14.2.1/bits/align.h \
/usr/include/c++/14.2.1/bits/alloc_traits.h \
/usr/include/c++/14.2.1/bits/allocated_ptr.h \
/usr/include/c++/14.2.1/bits/allocator.h \
/usr/include/c++/14.2.1/bits/atomic_base.h \
/usr/include/c++/14.2.1/bits/atomic_lockfree_defines.h \
/usr/include/c++/14.2.1/bits/atomic_wait.h \
/usr/include/c++/14.2.1/bits/basic_ios.h \
/usr/include/c++/14.2.1/bits/basic_ios.tcc \
/usr/include/c++/14.2.1/bits/basic_string.h \
/usr/include/c++/14.2.1/bits/basic_string.tcc \
/usr/include/c++/14.2.1/bits/c++0x_warning.h \
/usr/include/c++/14.2.1/bits/char_traits.h \
/usr/include/c++/14.2.1/bits/charconv.h \
/usr/include/c++/14.2.1/bits/codecvt.h \
/usr/include/c++/14.2.1/bits/concept_check.h \
/usr/include/c++/14.2.1/bits/cpp_type_traits.h \
/usr/include/c++/14.2.1/bits/cxxabi_forced.h \
/usr/include/c++/14.2.1/bits/cxxabi_init_exception.h \
/usr/include/c++/14.2.1/bits/erase_if.h \
/usr/include/c++/14.2.1/bits/exception.h \
/usr/include/c++/14.2.1/bits/exception_defines.h \
/usr/include/c++/14.2.1/bits/exception_ptr.h \
/usr/include/c++/14.2.1/bits/functexcept.h \
/usr/include/c++/14.2.1/bits/functional_hash.h \
/usr/include/c++/14.2.1/bits/gslice.h \
/usr/include/c++/14.2.1/bits/gslice_array.h \
/usr/include/c++/14.2.1/bits/hash_bytes.h \
/usr/include/c++/14.2.1/bits/indirect_array.h \
/usr/include/c++/14.2.1/bits/invoke.h \
/usr/include/c++/14.2.1/bits/ios_base.h \
/usr/include/c++/14.2.1/bits/istream.tcc \
/usr/include/c++/14.2.1/bits/iterator_concepts.h \
/usr/include/c++/14.2.1/bits/list.tcc \
/usr/include/c++/14.2.1/bits/locale_classes.h \
/usr/include/c++/14.2.1/bits/locale_classes.tcc \
/usr/include/c++/14.2.1/bits/locale_conv.h \
/usr/include/c++/14.2.1/bits/locale_facets.h \
/usr/include/c++/14.2.1/bits/locale_facets.tcc \
/usr/include/c++/14.2.1/bits/locale_facets_nonio.h \
/usr/include/c++/14.2.1/bits/locale_facets_nonio.tcc \
/usr/include/c++/14.2.1/bits/localefwd.h \
/usr/include/c++/14.2.1/bits/mask_array.h \
/usr/include/c++/14.2.1/bits/max_size_type.h \
/usr/include/c++/14.2.1/bits/memory_resource.h \
/usr/include/c++/14.2.1/bits/memoryfwd.h \
/usr/include/c++/14.2.1/bits/mofunc_impl.h \
/usr/include/c++/14.2.1/bits/move.h \
/usr/include/c++/14.2.1/bits/move_only_function.h \
/usr/include/c++/14.2.1/bits/nested_exception.h \
/usr/include/c++/14.2.1/bits/new_allocator.h \
/usr/include/c++/14.2.1/bits/node_handle.h \
/usr/include/c++/14.2.1/bits/ostream.tcc \
/usr/include/c++/14.2.1/bits/ostream_insert.h \
/usr/include/c++/14.2.1/bits/out_ptr.h \
/usr/include/c++/14.2.1/bits/postypes.h \
/usr/include/c++/14.2.1/bits/predefined_ops.h \
/usr/include/c++/14.2.1/bits/ptr_traits.h \
/usr/include/c++/14.2.1/bits/quoted_string.h \
/usr/include/c++/14.2.1/bits/range_access.h \
/usr/include/c++/14.2.1/bits/ranges_algo.h \
/usr/include/c++/14.2.1/bits/ranges_algobase.h \
/usr/include/c++/14.2.1/bits/ranges_base.h \
/usr/include/c++/14.2.1/bits/ranges_cmp.h \
/usr/include/c++/14.2.1/bits/ranges_uninitialized.h \
/usr/include/c++/14.2.1/bits/ranges_util.h \
/usr/include/c++/14.2.1/bits/refwrap.h \
/usr/include/c++/14.2.1/bits/requires_hosted.h \
/usr/include/c++/14.2.1/bits/sat_arith.h \
/usr/include/c++/14.2.1/bits/shared_ptr.h \
/usr/include/c++/14.2.1/bits/shared_ptr_atomic.h \
/usr/include/c++/14.2.1/bits/shared_ptr_base.h \
/usr/include/c++/14.2.1/bits/slice_array.h \
/usr/include/c++/14.2.1/bits/specfun.h \
/usr/include/c++/14.2.1/bits/std_abs.h \
/usr/include/c++/14.2.1/bits/std_function.h \
/usr/include/c++/14.2.1/bits/std_mutex.h \
/usr/include/c++/14.2.1/bits/stl_algo.h \
/usr/include/c++/14.2.1/bits/stl_algobase.h \
/usr/include/c++/14.2.1/bits/stl_bvector.h \
/usr/include/c++/14.2.1/bits/stl_construct.h \
/usr/include/c++/14.2.1/bits/stl_function.h \
/usr/include/c++/14.2.1/bits/stl_heap.h \
/usr/include/c++/14.2.1/bits/stl_iterator.h \
/usr/include/c++/14.2.1/bits/stl_iterator_base_funcs.h \
/usr/include/c++/14.2.1/bits/stl_iterator_base_types.h \
/usr/include/c++/14.2.1/bits/stl_list.h \
/usr/include/c++/14.2.1/bits/stl_map.h \
/usr/include/c++/14.2.1/bits/stl_multimap.h \
/usr/include/c++/14.2.1/bits/stl_numeric.h \
/usr/include/c++/14.2.1/bits/stl_pair.h \
/usr/include/c++/14.2.1/bits/stl_raw_storage_iter.h \
/usr/include/c++/14.2.1/bits/stl_relops.h \
/usr/include/c++/14.2.1/bits/stl_tempbuf.h \
/usr/include/c++/14.2.1/bits/stl_tree.h \
/usr/include/c++/14.2.1/bits/stl_uninitialized.h \
/usr/include/c++/14.2.1/bits/stl_vector.h \
/usr/include/c++/14.2.1/bits/stream_iterator.h \
/usr/include/c++/14.2.1/bits/streambuf.tcc \
/usr/include/c++/14.2.1/bits/streambuf_iterator.h \
/usr/include/c++/14.2.1/bits/string_view.tcc \
/usr/include/c++/14.2.1/bits/stringfwd.h \
/usr/include/c++/14.2.1/bits/uniform_int_dist.h \
/usr/include/c++/14.2.1/bits/unique_ptr.h \
/usr/include/c++/14.2.1/bits/uses_allocator.h \
/usr/include/c++/14.2.1/bits/uses_allocator_args.h \
/usr/include/c++/14.2.1/bits/utility.h \
/usr/include/c++/14.2.1/bits/valarray_after.h \
/usr/include/c++/14.2.1/bits/valarray_array.h \
/usr/include/c++/14.2.1/bits/valarray_array.tcc \
/usr/include/c++/14.2.1/bits/valarray_before.h \
/usr/include/c++/14.2.1/bits/vector.tcc \
/usr/include/c++/14.2.1/bits/version.h \
/usr/include/c++/14.2.1/cassert \
/usr/include/c++/14.2.1/cctype \
/usr/include/c++/14.2.1/cerrno \
/usr/include/c++/14.2.1/charconv \
/usr/include/c++/14.2.1/climits \
/usr/include/c++/14.2.1/clocale \
/usr/include/c++/14.2.1/cmath \
/usr/include/c++/14.2.1/compare \
/usr/include/c++/14.2.1/concepts \
/usr/include/c++/14.2.1/cstddef \
/usr/include/c++/14.2.1/cstdint \
/usr/include/c++/14.2.1/cstdio \
/usr/include/c++/14.2.1/cstdlib \
/usr/include/c++/14.2.1/cstring \
/usr/include/c++/14.2.1/ctime \
/usr/include/c++/14.2.1/cwchar \
/usr/include/c++/14.2.1/cwctype \
/usr/include/c++/14.2.1/debug/assertions.h \
/usr/include/c++/14.2.1/debug/debug.h \
/usr/include/c++/14.2.1/exception \
/usr/include/c++/14.2.1/experimental/bits/fs_dir.h \
/usr/include/c++/14.2.1/experimental/bits/fs_fwd.h \
/usr/include/c++/14.2.1/experimental/bits/fs_ops.h \
/usr/include/c++/14.2.1/experimental/bits/fs_path.h \
/usr/include/c++/14.2.1/experimental/filesystem \
/usr/include/c++/14.2.1/ext/aligned_buffer.h \
/usr/include/c++/14.2.1/ext/alloc_traits.h \
/usr/include/c++/14.2.1/ext/atomicity.h \
/usr/include/c++/14.2.1/ext/concurrence.h \
/usr/include/c++/14.2.1/ext/numeric_traits.h \
/usr/include/c++/14.2.1/ext/string_conversions.h \
/usr/include/c++/14.2.1/ext/type_traits.h \
/usr/include/c++/14.2.1/filesystem \
/usr/include/c++/14.2.1/format \
/usr/include/c++/14.2.1/forward_list \
/usr/include/c++/14.2.1/functional \
/usr/include/c++/14.2.1/initializer_list \
/usr/include/c++/14.2.1/iomanip \
/usr/include/c++/14.2.1/ios \
/usr/include/c++/14.2.1/iosfwd \
/usr/include/c++/14.2.1/iostream \
/usr/include/c++/14.2.1/istream \
/usr/include/c++/14.2.1/iterator \
/usr/include/c++/14.2.1/limits \
/usr/include/c++/14.2.1/list \
/usr/include/c++/14.2.1/locale \
/usr/include/c++/14.2.1/map \
/usr/include/c++/14.2.1/memory \
/usr/include/c++/14.2.1/new \
/usr/include/c++/14.2.1/numbers \
/usr/include/c++/14.2.1/numeric \
/usr/include/c++/14.2.1/optional \
/usr/include/c++/14.2.1/ostream \
/usr/include/c++/14.2.1/pstl/execution_defs.h \
/usr/include/c++/14.2.1/pstl/glue_numeric_defs.h \
/usr/include/c++/14.2.1/stdexcept \
/usr/include/c++/14.2.1/stdlib.h \
/usr/include/c++/14.2.1/streambuf \
/usr/include/c++/14.2.1/string \
/usr/include/c++/14.2.1/string_view \
/usr/include/c++/14.2.1/text_encoding \
/usr/include/c++/14.2.1/tr1/bessel_function.tcc \
/usr/include/c++/14.2.1/tr1/beta_function.tcc \
/usr/include/c++/14.2.1/tr1/ell_integral.tcc \
/usr/include/c++/14.2.1/tr1/exp_integral.tcc \
/usr/include/c++/14.2.1/tr1/gamma.tcc \
/usr/include/c++/14.2.1/tr1/hypergeometric.tcc \
/usr/include/c++/14.2.1/tr1/legendre_function.tcc \
/usr/include/c++/14.2.1/tr1/modified_bessel_func.tcc \
/usr/include/c++/14.2.1/tr1/poly_hermite.tcc \
/usr/include/c++/14.2.1/tr1/poly_laguerre.tcc \
/usr/include/c++/14.2.1/tr1/riemann_zeta.tcc \
/usr/include/c++/14.2.1/tr1/special_function_util.h \
/usr/include/c++/14.2.1/tuple \
/usr/include/c++/14.2.1/type_traits \
/usr/include/c++/14.2.1/typeinfo \
/usr/include/c++/14.2.1/unordered_map \
/usr/include/c++/14.2.1/utility \
/usr/include/c++/14.2.1/valarray \
/usr/include/c++/14.2.1/vector \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/atomic_word.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/c++allocator.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/c++config.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/c++locale.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/cpu_defines.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/ctype_base.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/ctype_inline.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/error_constants.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/gthr-default.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/gthr.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/messages_members.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/os_defines.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/time_members.h \
/usr/include/ctype.h \
/usr/include/errno.h \
/usr/include/features-time64.h \
/usr/include/features.h \
/usr/include/gnu/stubs-64.h \
/usr/include/gnu/stubs.h \
/usr/include/libintl.h \
/usr/include/linux/errno.h \
/usr/include/locale.h \
/usr/include/nlohmann/adl_serializer.hpp \
/usr/include/nlohmann/byte_container_with_subtype.hpp \
/usr/include/nlohmann/detail/abi_macros.hpp \
/usr/include/nlohmann/detail/conversions/from_json.hpp \
/usr/include/nlohmann/detail/conversions/to_chars.hpp \
/usr/include/nlohmann/detail/conversions/to_json.hpp \
/usr/include/nlohmann/detail/exceptions.hpp \
/usr/include/nlohmann/detail/hash.hpp \
/usr/include/nlohmann/detail/input/binary_reader.hpp \
/usr/include/nlohmann/detail/input/input_adapters.hpp \
/usr/include/nlohmann/detail/input/json_sax.hpp \
/usr/include/nlohmann/detail/input/lexer.hpp \
/usr/include/nlohmann/detail/input/parser.hpp \
/usr/include/nlohmann/detail/input/position_t.hpp \
/usr/include/nlohmann/detail/iterators/internal_iterator.hpp \
/usr/include/nlohmann/detail/iterators/iter_impl.hpp \
/usr/include/nlohmann/detail/iterators/iteration_proxy.hpp \
/usr/include/nlohmann/detail/iterators/iterator_traits.hpp \
/usr/include/nlohmann/detail/iterators/json_reverse_iterator.hpp \
/usr/include/nlohmann/detail/iterators/primitive_iterator.hpp \
/usr/include/nlohmann/detail/json_custom_base_class.hpp \
/usr/include/nlohmann/detail/json_pointer.hpp \
/usr/include/nlohmann/detail/json_ref.hpp \
/usr/include/nlohmann/detail/macro_scope.hpp \
/usr/include/nlohmann/detail/macro_unscope.hpp \
/usr/include/nlohmann/detail/meta/call_std/begin.hpp \
/usr/include/nlohmann/detail/meta/call_std/end.hpp \
/usr/include/nlohmann/detail/meta/cpp_future.hpp \
/usr/include/nlohmann/detail/meta/detected.hpp \
/usr/include/nlohmann/detail/meta/identity_tag.hpp \
/usr/include/nlohmann/detail/meta/is_sax.hpp \
/usr/include/nlohmann/detail/meta/std_fs.hpp \
/usr/include/nlohmann/detail/meta/type_traits.hpp \
/usr/include/nlohmann/detail/meta/void_t.hpp \
/usr/include/nlohmann/detail/output/binary_writer.hpp \
/usr/include/nlohmann/detail/output/output_adapters.hpp \
/usr/include/nlohmann/detail/output/serializer.hpp \
/usr/include/nlohmann/detail/string_concat.hpp \
/usr/include/nlohmann/detail/string_escape.hpp \
/usr/include/nlohmann/detail/value_t.hpp \
/usr/include/nlohmann/json.hpp \
/usr/include/nlohmann/json_fwd.hpp \
/usr/include/nlohmann/ordered_map.hpp \
/usr/include/nlohmann/thirdparty/hedley/hedley.hpp \
/usr/include/nlohmann/thirdparty/hedley/hedley_undef.hpp \
/usr/include/pthread.h \
/usr/include/qt/QtCore/qabstractitemmodel.h \
/usr/include/qt/QtCore/qalgorithms.h \
/usr/include/qt/QtCore/qarraydata.h \
/usr/include/qt/QtCore/qatomic.h \
/usr/include/qt/QtCore/qatomic_cxx11.h \
/usr/include/qt/QtCore/qbasicatomic.h \
/usr/include/qt/QtCore/qbytearray.h \
/usr/include/qt/QtCore/qbytearraylist.h \
/usr/include/qt/QtCore/qchar.h \
/usr/include/qt/QtCore/qcompilerdetection.h \
/usr/include/qt/QtCore/qconfig.h \
/usr/include/qt/QtCore/qcontainerfwd.h \
/usr/include/qt/QtCore/qcontainertools_impl.h \
/usr/include/qt/QtCore/qdatastream.h \
/usr/include/qt/QtCore/qflags.h \
/usr/include/qt/QtCore/qgenericatomic.h \
/usr/include/qt/QtCore/qglobal.h \
/usr/include/qt/QtCore/qglobalstatic.h \
/usr/include/qt/QtCore/qhash.h \
/usr/include/qt/QtCore/qhashfunctions.h \
/usr/include/qt/QtCore/qiodevice.h \
/usr/include/qt/QtCore/qiterator.h \
/usr/include/qt/QtCore/qline.h \
/usr/include/qt/QtCore/qlist.h \
/usr/include/qt/QtCore/qlocale.h \
/usr/include/qt/QtCore/qlogging.h \
/usr/include/qt/QtCore/qmap.h \
/usr/include/qt/QtCore/qmargins.h \
/usr/include/qt/QtCore/qmetatype.h \
/usr/include/qt/QtCore/qnamespace.h \
/usr/include/qt/QtCore/qnumeric.h \
/usr/include/qt/QtCore/qobject.h \
/usr/include/qt/QtCore/qobject_impl.h \
/usr/include/qt/QtCore/qobjectdefs.h \
/usr/include/qt/QtCore/qobjectdefs_impl.h \
/usr/include/qt/QtCore/qpair.h \
/usr/include/qt/QtCore/qpoint.h \
/usr/include/qt/QtCore/qprocessordetection.h \
/usr/include/qt/QtCore/qrect.h \
/usr/include/qt/QtCore/qrefcount.h \
/usr/include/qt/QtCore/qregexp.h \
/usr/include/qt/QtCore/qregularexpression.h \
/usr/include/qt/QtCore/qscopedpointer.h \
/usr/include/qt/QtCore/qshareddata.h \
/usr/include/qt/QtCore/qsharedpointer.h \
/usr/include/qt/QtCore/qsharedpointer_impl.h \
/usr/include/qt/QtCore/qsize.h \
/usr/include/qt/QtCore/qstring.h \
/usr/include/qt/QtCore/qstringalgorithms.h \
/usr/include/qt/QtCore/qstringlist.h \
/usr/include/qt/QtCore/qstringliteral.h \
/usr/include/qt/QtCore/qstringmatcher.h \
/usr/include/qt/QtCore/qstringview.h \
/usr/include/qt/QtCore/qsysinfo.h \
/usr/include/qt/QtCore/qsystemdetection.h \
/usr/include/qt/QtCore/qtcore-config.h \
/usr/include/qt/QtCore/qtypeinfo.h \
/usr/include/qt/QtCore/qvariant.h \
/usr/include/qt/QtCore/qvarlengtharray.h \
/usr/include/qt/QtCore/qvector.h \
/usr/include/qt/QtCore/qversiontagging.h \
/usr/include/qt/QtGui/qbrush.h \
/usr/include/qt/QtGui/qcolor.h \
/usr/include/qt/QtGui/qcursor.h \
/usr/include/qt/QtGui/qfont.h \
/usr/include/qt/QtGui/qfontinfo.h \
/usr/include/qt/QtGui/qfontmetrics.h \
/usr/include/qt/QtGui/qicon.h \
/usr/include/qt/QtGui/qimage.h \
/usr/include/qt/QtGui/qkeysequence.h \
/usr/include/qt/QtGui/qmatrix.h \
/usr/include/qt/QtGui/qpaintdevice.h \
/usr/include/qt/QtGui/qpalette.h \
/usr/include/qt/QtGui/qpixelformat.h \
/usr/include/qt/QtGui/qpixmap.h \
/usr/include/qt/QtGui/qpolygon.h \
/usr/include/qt/QtGui/qregion.h \
/usr/include/qt/QtGui/qrgb.h \
/usr/include/qt/QtGui/qrgba64.h \
/usr/include/qt/QtGui/qtgui-config.h \
/usr/include/qt/QtGui/qtguiglobal.h \
/usr/include/qt/QtGui/qtransform.h \
/usr/include/qt/QtGui/qvalidator.h \
/usr/include/qt/QtGui/qwindowdefs.h \
/usr/include/qt/QtWidgets/QComboBox \
/usr/include/qt/QtWidgets/QDialog \
/usr/include/qt/QtWidgets/qabstractitemdelegate.h \
/usr/include/qt/QtWidgets/qabstractslider.h \
/usr/include/qt/QtWidgets/qabstractspinbox.h \
/usr/include/qt/QtWidgets/qcombobox.h \
/usr/include/qt/QtWidgets/qdialog.h \
/usr/include/qt/QtWidgets/qframe.h \
/usr/include/qt/QtWidgets/qrubberband.h \
/usr/include/qt/QtWidgets/qsizepolicy.h \
/usr/include/qt/QtWidgets/qslider.h \
/usr/include/qt/QtWidgets/qstyle.h \
/usr/include/qt/QtWidgets/qstyleoption.h \
/usr/include/qt/QtWidgets/qtabbar.h \
/usr/include/qt/QtWidgets/qtabwidget.h \
/usr/include/qt/QtWidgets/qtwidgets-config.h \
/usr/include/qt/QtWidgets/qtwidgetsglobal.h \
/usr/include/qt/QtWidgets/qwidget.h \
/usr/include/sched.h \
/usr/include/stdc-predef.h \
/usr/include/stdio.h \
/usr/include/string.h \
/usr/include/strings.h \
/usr/include/sys/cdefs.h \
/usr/include/sys/syscall.h \
/usr/include/syscall.h \
/usr/include/time.h \
/usr/include/unistd.h \
/usr/include/wchar.h \
/usr/include/wctype.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/include/limits.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/include/stdarg.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/include/stddef.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/include/stdint.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/include/syslimits.h

View File

@@ -1,429 +0,0 @@
/home/leca/projects/qt/checks-parser/checks-parser_autogen/EWIEGA46WW/moc_settingsdialog.cpp: /home/leca/projects/qt/checks-parser/settingsdialog.h \
/home/leca/projects/qt/checks-parser/checks-parser_autogen/moc_predefs.h \
/home/leca/projects/qt/checks-parser/settings/settings.h \
/usr/include/asm-generic/errno-base.h \
/usr/include/asm-generic/errno.h \
/usr/include/asm/errno.h \
/usr/include/asm/unistd.h \
/usr/include/asm/unistd_64.h \
/usr/include/assert.h \
/usr/include/bits/atomic_wide_counter.h \
/usr/include/bits/confname.h \
/usr/include/bits/cpu-set.h \
/usr/include/bits/endian.h \
/usr/include/bits/endianness.h \
/usr/include/bits/environments.h \
/usr/include/bits/errno.h \
/usr/include/bits/floatn-common.h \
/usr/include/bits/floatn.h \
/usr/include/bits/getopt_core.h \
/usr/include/bits/getopt_posix.h \
/usr/include/bits/libc-header-start.h \
/usr/include/bits/locale.h \
/usr/include/bits/long-double.h \
/usr/include/bits/posix_opt.h \
/usr/include/bits/pthread_stack_min-dynamic.h \
/usr/include/bits/pthreadtypes-arch.h \
/usr/include/bits/pthreadtypes.h \
/usr/include/bits/sched.h \
/usr/include/bits/setjmp.h \
/usr/include/bits/stdio_lim.h \
/usr/include/bits/struct_mutex.h \
/usr/include/bits/struct_rwlock.h \
/usr/include/bits/syscall.h \
/usr/include/bits/thread-shared-types.h \
/usr/include/bits/time.h \
/usr/include/bits/time64.h \
/usr/include/bits/timesize.h \
/usr/include/bits/timex.h \
/usr/include/bits/types.h \
/usr/include/bits/types/FILE.h \
/usr/include/bits/types/__FILE.h \
/usr/include/bits/types/__fpos64_t.h \
/usr/include/bits/types/__fpos_t.h \
/usr/include/bits/types/__locale_t.h \
/usr/include/bits/types/__mbstate_t.h \
/usr/include/bits/types/__sigset_t.h \
/usr/include/bits/types/clock_t.h \
/usr/include/bits/types/clockid_t.h \
/usr/include/bits/types/cookie_io_functions_t.h \
/usr/include/bits/types/error_t.h \
/usr/include/bits/types/locale_t.h \
/usr/include/bits/types/mbstate_t.h \
/usr/include/bits/types/struct_FILE.h \
/usr/include/bits/types/struct___jmp_buf_tag.h \
/usr/include/bits/types/struct_itimerspec.h \
/usr/include/bits/types/struct_sched_param.h \
/usr/include/bits/types/struct_timespec.h \
/usr/include/bits/types/struct_timeval.h \
/usr/include/bits/types/struct_tm.h \
/usr/include/bits/types/time_t.h \
/usr/include/bits/types/timer_t.h \
/usr/include/bits/types/wint_t.h \
/usr/include/bits/typesizes.h \
/usr/include/bits/unistd_ext.h \
/usr/include/bits/wchar.h \
/usr/include/bits/wctype-wchar.h \
/usr/include/bits/wordsize.h \
/usr/include/c++/14.2.1/algorithm \
/usr/include/c++/14.2.1/any \
/usr/include/c++/14.2.1/array \
/usr/include/c++/14.2.1/atomic \
/usr/include/c++/14.2.1/backward/auto_ptr.h \
/usr/include/c++/14.2.1/backward/binders.h \
/usr/include/c++/14.2.1/bit \
/usr/include/c++/14.2.1/bits/algorithmfwd.h \
/usr/include/c++/14.2.1/bits/align.h \
/usr/include/c++/14.2.1/bits/alloc_traits.h \
/usr/include/c++/14.2.1/bits/allocated_ptr.h \
/usr/include/c++/14.2.1/bits/allocator.h \
/usr/include/c++/14.2.1/bits/atomic_base.h \
/usr/include/c++/14.2.1/bits/atomic_lockfree_defines.h \
/usr/include/c++/14.2.1/bits/atomic_wait.h \
/usr/include/c++/14.2.1/bits/basic_ios.h \
/usr/include/c++/14.2.1/bits/basic_ios.tcc \
/usr/include/c++/14.2.1/bits/basic_string.h \
/usr/include/c++/14.2.1/bits/basic_string.tcc \
/usr/include/c++/14.2.1/bits/c++0x_warning.h \
/usr/include/c++/14.2.1/bits/char_traits.h \
/usr/include/c++/14.2.1/bits/charconv.h \
/usr/include/c++/14.2.1/bits/codecvt.h \
/usr/include/c++/14.2.1/bits/concept_check.h \
/usr/include/c++/14.2.1/bits/cpp_type_traits.h \
/usr/include/c++/14.2.1/bits/cxxabi_forced.h \
/usr/include/c++/14.2.1/bits/cxxabi_init_exception.h \
/usr/include/c++/14.2.1/bits/erase_if.h \
/usr/include/c++/14.2.1/bits/exception.h \
/usr/include/c++/14.2.1/bits/exception_defines.h \
/usr/include/c++/14.2.1/bits/exception_ptr.h \
/usr/include/c++/14.2.1/bits/functexcept.h \
/usr/include/c++/14.2.1/bits/functional_hash.h \
/usr/include/c++/14.2.1/bits/gslice.h \
/usr/include/c++/14.2.1/bits/gslice_array.h \
/usr/include/c++/14.2.1/bits/hash_bytes.h \
/usr/include/c++/14.2.1/bits/indirect_array.h \
/usr/include/c++/14.2.1/bits/invoke.h \
/usr/include/c++/14.2.1/bits/ios_base.h \
/usr/include/c++/14.2.1/bits/istream.tcc \
/usr/include/c++/14.2.1/bits/iterator_concepts.h \
/usr/include/c++/14.2.1/bits/list.tcc \
/usr/include/c++/14.2.1/bits/locale_classes.h \
/usr/include/c++/14.2.1/bits/locale_classes.tcc \
/usr/include/c++/14.2.1/bits/locale_conv.h \
/usr/include/c++/14.2.1/bits/locale_facets.h \
/usr/include/c++/14.2.1/bits/locale_facets.tcc \
/usr/include/c++/14.2.1/bits/locale_facets_nonio.h \
/usr/include/c++/14.2.1/bits/locale_facets_nonio.tcc \
/usr/include/c++/14.2.1/bits/localefwd.h \
/usr/include/c++/14.2.1/bits/mask_array.h \
/usr/include/c++/14.2.1/bits/max_size_type.h \
/usr/include/c++/14.2.1/bits/memory_resource.h \
/usr/include/c++/14.2.1/bits/memoryfwd.h \
/usr/include/c++/14.2.1/bits/mofunc_impl.h \
/usr/include/c++/14.2.1/bits/move.h \
/usr/include/c++/14.2.1/bits/move_only_function.h \
/usr/include/c++/14.2.1/bits/nested_exception.h \
/usr/include/c++/14.2.1/bits/new_allocator.h \
/usr/include/c++/14.2.1/bits/node_handle.h \
/usr/include/c++/14.2.1/bits/ostream.tcc \
/usr/include/c++/14.2.1/bits/ostream_insert.h \
/usr/include/c++/14.2.1/bits/out_ptr.h \
/usr/include/c++/14.2.1/bits/postypes.h \
/usr/include/c++/14.2.1/bits/predefined_ops.h \
/usr/include/c++/14.2.1/bits/ptr_traits.h \
/usr/include/c++/14.2.1/bits/quoted_string.h \
/usr/include/c++/14.2.1/bits/range_access.h \
/usr/include/c++/14.2.1/bits/ranges_algo.h \
/usr/include/c++/14.2.1/bits/ranges_algobase.h \
/usr/include/c++/14.2.1/bits/ranges_base.h \
/usr/include/c++/14.2.1/bits/ranges_cmp.h \
/usr/include/c++/14.2.1/bits/ranges_uninitialized.h \
/usr/include/c++/14.2.1/bits/ranges_util.h \
/usr/include/c++/14.2.1/bits/refwrap.h \
/usr/include/c++/14.2.1/bits/requires_hosted.h \
/usr/include/c++/14.2.1/bits/sat_arith.h \
/usr/include/c++/14.2.1/bits/shared_ptr.h \
/usr/include/c++/14.2.1/bits/shared_ptr_atomic.h \
/usr/include/c++/14.2.1/bits/shared_ptr_base.h \
/usr/include/c++/14.2.1/bits/slice_array.h \
/usr/include/c++/14.2.1/bits/specfun.h \
/usr/include/c++/14.2.1/bits/std_abs.h \
/usr/include/c++/14.2.1/bits/std_function.h \
/usr/include/c++/14.2.1/bits/std_mutex.h \
/usr/include/c++/14.2.1/bits/stl_algo.h \
/usr/include/c++/14.2.1/bits/stl_algobase.h \
/usr/include/c++/14.2.1/bits/stl_bvector.h \
/usr/include/c++/14.2.1/bits/stl_construct.h \
/usr/include/c++/14.2.1/bits/stl_function.h \
/usr/include/c++/14.2.1/bits/stl_heap.h \
/usr/include/c++/14.2.1/bits/stl_iterator.h \
/usr/include/c++/14.2.1/bits/stl_iterator_base_funcs.h \
/usr/include/c++/14.2.1/bits/stl_iterator_base_types.h \
/usr/include/c++/14.2.1/bits/stl_list.h \
/usr/include/c++/14.2.1/bits/stl_map.h \
/usr/include/c++/14.2.1/bits/stl_multimap.h \
/usr/include/c++/14.2.1/bits/stl_numeric.h \
/usr/include/c++/14.2.1/bits/stl_pair.h \
/usr/include/c++/14.2.1/bits/stl_raw_storage_iter.h \
/usr/include/c++/14.2.1/bits/stl_relops.h \
/usr/include/c++/14.2.1/bits/stl_tempbuf.h \
/usr/include/c++/14.2.1/bits/stl_tree.h \
/usr/include/c++/14.2.1/bits/stl_uninitialized.h \
/usr/include/c++/14.2.1/bits/stl_vector.h \
/usr/include/c++/14.2.1/bits/stream_iterator.h \
/usr/include/c++/14.2.1/bits/streambuf.tcc \
/usr/include/c++/14.2.1/bits/streambuf_iterator.h \
/usr/include/c++/14.2.1/bits/string_view.tcc \
/usr/include/c++/14.2.1/bits/stringfwd.h \
/usr/include/c++/14.2.1/bits/uniform_int_dist.h \
/usr/include/c++/14.2.1/bits/unique_ptr.h \
/usr/include/c++/14.2.1/bits/uses_allocator.h \
/usr/include/c++/14.2.1/bits/uses_allocator_args.h \
/usr/include/c++/14.2.1/bits/utility.h \
/usr/include/c++/14.2.1/bits/valarray_after.h \
/usr/include/c++/14.2.1/bits/valarray_array.h \
/usr/include/c++/14.2.1/bits/valarray_array.tcc \
/usr/include/c++/14.2.1/bits/valarray_before.h \
/usr/include/c++/14.2.1/bits/vector.tcc \
/usr/include/c++/14.2.1/bits/version.h \
/usr/include/c++/14.2.1/cassert \
/usr/include/c++/14.2.1/cctype \
/usr/include/c++/14.2.1/cerrno \
/usr/include/c++/14.2.1/charconv \
/usr/include/c++/14.2.1/climits \
/usr/include/c++/14.2.1/clocale \
/usr/include/c++/14.2.1/cmath \
/usr/include/c++/14.2.1/compare \
/usr/include/c++/14.2.1/concepts \
/usr/include/c++/14.2.1/cstddef \
/usr/include/c++/14.2.1/cstdint \
/usr/include/c++/14.2.1/cstdio \
/usr/include/c++/14.2.1/cstdlib \
/usr/include/c++/14.2.1/cstring \
/usr/include/c++/14.2.1/ctime \
/usr/include/c++/14.2.1/cwchar \
/usr/include/c++/14.2.1/cwctype \
/usr/include/c++/14.2.1/debug/assertions.h \
/usr/include/c++/14.2.1/debug/debug.h \
/usr/include/c++/14.2.1/exception \
/usr/include/c++/14.2.1/ext/aligned_buffer.h \
/usr/include/c++/14.2.1/ext/alloc_traits.h \
/usr/include/c++/14.2.1/ext/atomicity.h \
/usr/include/c++/14.2.1/ext/concurrence.h \
/usr/include/c++/14.2.1/ext/numeric_traits.h \
/usr/include/c++/14.2.1/ext/string_conversions.h \
/usr/include/c++/14.2.1/ext/type_traits.h \
/usr/include/c++/14.2.1/format \
/usr/include/c++/14.2.1/forward_list \
/usr/include/c++/14.2.1/functional \
/usr/include/c++/14.2.1/initializer_list \
/usr/include/c++/14.2.1/iomanip \
/usr/include/c++/14.2.1/ios \
/usr/include/c++/14.2.1/iosfwd \
/usr/include/c++/14.2.1/istream \
/usr/include/c++/14.2.1/iterator \
/usr/include/c++/14.2.1/limits \
/usr/include/c++/14.2.1/list \
/usr/include/c++/14.2.1/locale \
/usr/include/c++/14.2.1/map \
/usr/include/c++/14.2.1/memory \
/usr/include/c++/14.2.1/new \
/usr/include/c++/14.2.1/numbers \
/usr/include/c++/14.2.1/numeric \
/usr/include/c++/14.2.1/optional \
/usr/include/c++/14.2.1/ostream \
/usr/include/c++/14.2.1/pstl/execution_defs.h \
/usr/include/c++/14.2.1/pstl/glue_numeric_defs.h \
/usr/include/c++/14.2.1/stdexcept \
/usr/include/c++/14.2.1/stdlib.h \
/usr/include/c++/14.2.1/streambuf \
/usr/include/c++/14.2.1/string \
/usr/include/c++/14.2.1/string_view \
/usr/include/c++/14.2.1/text_encoding \
/usr/include/c++/14.2.1/tr1/bessel_function.tcc \
/usr/include/c++/14.2.1/tr1/beta_function.tcc \
/usr/include/c++/14.2.1/tr1/ell_integral.tcc \
/usr/include/c++/14.2.1/tr1/exp_integral.tcc \
/usr/include/c++/14.2.1/tr1/gamma.tcc \
/usr/include/c++/14.2.1/tr1/hypergeometric.tcc \
/usr/include/c++/14.2.1/tr1/legendre_function.tcc \
/usr/include/c++/14.2.1/tr1/modified_bessel_func.tcc \
/usr/include/c++/14.2.1/tr1/poly_hermite.tcc \
/usr/include/c++/14.2.1/tr1/poly_laguerre.tcc \
/usr/include/c++/14.2.1/tr1/riemann_zeta.tcc \
/usr/include/c++/14.2.1/tr1/special_function_util.h \
/usr/include/c++/14.2.1/tuple \
/usr/include/c++/14.2.1/type_traits \
/usr/include/c++/14.2.1/typeinfo \
/usr/include/c++/14.2.1/unordered_map \
/usr/include/c++/14.2.1/utility \
/usr/include/c++/14.2.1/valarray \
/usr/include/c++/14.2.1/vector \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/atomic_word.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/c++allocator.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/c++config.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/c++locale.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/cpu_defines.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/ctype_base.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/ctype_inline.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/error_constants.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/gthr-default.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/gthr.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/messages_members.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/os_defines.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/time_members.h \
/usr/include/ctype.h \
/usr/include/errno.h \
/usr/include/features-time64.h \
/usr/include/features.h \
/usr/include/gnu/stubs-64.h \
/usr/include/gnu/stubs.h \
/usr/include/libintl.h \
/usr/include/linux/errno.h \
/usr/include/locale.h \
/usr/include/nlohmann/adl_serializer.hpp \
/usr/include/nlohmann/byte_container_with_subtype.hpp \
/usr/include/nlohmann/detail/abi_macros.hpp \
/usr/include/nlohmann/detail/conversions/from_json.hpp \
/usr/include/nlohmann/detail/conversions/to_chars.hpp \
/usr/include/nlohmann/detail/conversions/to_json.hpp \
/usr/include/nlohmann/detail/exceptions.hpp \
/usr/include/nlohmann/detail/hash.hpp \
/usr/include/nlohmann/detail/input/binary_reader.hpp \
/usr/include/nlohmann/detail/input/input_adapters.hpp \
/usr/include/nlohmann/detail/input/json_sax.hpp \
/usr/include/nlohmann/detail/input/lexer.hpp \
/usr/include/nlohmann/detail/input/parser.hpp \
/usr/include/nlohmann/detail/input/position_t.hpp \
/usr/include/nlohmann/detail/iterators/internal_iterator.hpp \
/usr/include/nlohmann/detail/iterators/iter_impl.hpp \
/usr/include/nlohmann/detail/iterators/iteration_proxy.hpp \
/usr/include/nlohmann/detail/iterators/iterator_traits.hpp \
/usr/include/nlohmann/detail/iterators/json_reverse_iterator.hpp \
/usr/include/nlohmann/detail/iterators/primitive_iterator.hpp \
/usr/include/nlohmann/detail/json_custom_base_class.hpp \
/usr/include/nlohmann/detail/json_pointer.hpp \
/usr/include/nlohmann/detail/json_ref.hpp \
/usr/include/nlohmann/detail/macro_scope.hpp \
/usr/include/nlohmann/detail/macro_unscope.hpp \
/usr/include/nlohmann/detail/meta/call_std/begin.hpp \
/usr/include/nlohmann/detail/meta/call_std/end.hpp \
/usr/include/nlohmann/detail/meta/cpp_future.hpp \
/usr/include/nlohmann/detail/meta/detected.hpp \
/usr/include/nlohmann/detail/meta/identity_tag.hpp \
/usr/include/nlohmann/detail/meta/is_sax.hpp \
/usr/include/nlohmann/detail/meta/std_fs.hpp \
/usr/include/nlohmann/detail/meta/type_traits.hpp \
/usr/include/nlohmann/detail/meta/void_t.hpp \
/usr/include/nlohmann/detail/output/binary_writer.hpp \
/usr/include/nlohmann/detail/output/output_adapters.hpp \
/usr/include/nlohmann/detail/output/serializer.hpp \
/usr/include/nlohmann/detail/string_concat.hpp \
/usr/include/nlohmann/detail/string_escape.hpp \
/usr/include/nlohmann/detail/value_t.hpp \
/usr/include/nlohmann/json.hpp \
/usr/include/nlohmann/json_fwd.hpp \
/usr/include/nlohmann/ordered_map.hpp \
/usr/include/nlohmann/thirdparty/hedley/hedley.hpp \
/usr/include/nlohmann/thirdparty/hedley/hedley_undef.hpp \
/usr/include/pthread.h \
/usr/include/qt/QtCore/qalgorithms.h \
/usr/include/qt/QtCore/qarraydata.h \
/usr/include/qt/QtCore/qatomic.h \
/usr/include/qt/QtCore/qatomic_cxx11.h \
/usr/include/qt/QtCore/qbasicatomic.h \
/usr/include/qt/QtCore/qbytearray.h \
/usr/include/qt/QtCore/qbytearraylist.h \
/usr/include/qt/QtCore/qchar.h \
/usr/include/qt/QtCore/qcompilerdetection.h \
/usr/include/qt/QtCore/qconfig.h \
/usr/include/qt/QtCore/qcontainerfwd.h \
/usr/include/qt/QtCore/qcontainertools_impl.h \
/usr/include/qt/QtCore/qdatastream.h \
/usr/include/qt/QtCore/qflags.h \
/usr/include/qt/QtCore/qgenericatomic.h \
/usr/include/qt/QtCore/qglobal.h \
/usr/include/qt/QtCore/qglobalstatic.h \
/usr/include/qt/QtCore/qhash.h \
/usr/include/qt/QtCore/qhashfunctions.h \
/usr/include/qt/QtCore/qiodevice.h \
/usr/include/qt/QtCore/qiterator.h \
/usr/include/qt/QtCore/qline.h \
/usr/include/qt/QtCore/qlist.h \
/usr/include/qt/QtCore/qlogging.h \
/usr/include/qt/QtCore/qmargins.h \
/usr/include/qt/QtCore/qmetatype.h \
/usr/include/qt/QtCore/qnamespace.h \
/usr/include/qt/QtCore/qnumeric.h \
/usr/include/qt/QtCore/qobject.h \
/usr/include/qt/QtCore/qobject_impl.h \
/usr/include/qt/QtCore/qobjectdefs.h \
/usr/include/qt/QtCore/qobjectdefs_impl.h \
/usr/include/qt/QtCore/qpair.h \
/usr/include/qt/QtCore/qpoint.h \
/usr/include/qt/QtCore/qprocessordetection.h \
/usr/include/qt/QtCore/qrect.h \
/usr/include/qt/QtCore/qrefcount.h \
/usr/include/qt/QtCore/qregexp.h \
/usr/include/qt/QtCore/qscopedpointer.h \
/usr/include/qt/QtCore/qshareddata.h \
/usr/include/qt/QtCore/qsharedpointer.h \
/usr/include/qt/QtCore/qsharedpointer_impl.h \
/usr/include/qt/QtCore/qsize.h \
/usr/include/qt/QtCore/qstring.h \
/usr/include/qt/QtCore/qstringalgorithms.h \
/usr/include/qt/QtCore/qstringlist.h \
/usr/include/qt/QtCore/qstringliteral.h \
/usr/include/qt/QtCore/qstringmatcher.h \
/usr/include/qt/QtCore/qstringview.h \
/usr/include/qt/QtCore/qsysinfo.h \
/usr/include/qt/QtCore/qsystemdetection.h \
/usr/include/qt/QtCore/qtcore-config.h \
/usr/include/qt/QtCore/qtypeinfo.h \
/usr/include/qt/QtCore/qvarlengtharray.h \
/usr/include/qt/QtCore/qvector.h \
/usr/include/qt/QtCore/qversiontagging.h \
/usr/include/qt/QtGui/qbrush.h \
/usr/include/qt/QtGui/qcolor.h \
/usr/include/qt/QtGui/qcursor.h \
/usr/include/qt/QtGui/qfont.h \
/usr/include/qt/QtGui/qfontinfo.h \
/usr/include/qt/QtGui/qfontmetrics.h \
/usr/include/qt/QtGui/qimage.h \
/usr/include/qt/QtGui/qkeysequence.h \
/usr/include/qt/QtGui/qmatrix.h \
/usr/include/qt/QtGui/qpaintdevice.h \
/usr/include/qt/QtGui/qpalette.h \
/usr/include/qt/QtGui/qpixelformat.h \
/usr/include/qt/QtGui/qpixmap.h \
/usr/include/qt/QtGui/qpolygon.h \
/usr/include/qt/QtGui/qregion.h \
/usr/include/qt/QtGui/qrgb.h \
/usr/include/qt/QtGui/qrgba64.h \
/usr/include/qt/QtGui/qtgui-config.h \
/usr/include/qt/QtGui/qtguiglobal.h \
/usr/include/qt/QtGui/qtransform.h \
/usr/include/qt/QtGui/qwindowdefs.h \
/usr/include/qt/QtWidgets/QDialog \
/usr/include/qt/QtWidgets/qdialog.h \
/usr/include/qt/QtWidgets/qsizepolicy.h \
/usr/include/qt/QtWidgets/qtwidgets-config.h \
/usr/include/qt/QtWidgets/qtwidgetsglobal.h \
/usr/include/qt/QtWidgets/qwidget.h \
/usr/include/sched.h \
/usr/include/stdc-predef.h \
/usr/include/stdio.h \
/usr/include/string.h \
/usr/include/strings.h \
/usr/include/sys/cdefs.h \
/usr/include/sys/syscall.h \
/usr/include/syscall.h \
/usr/include/time.h \
/usr/include/unistd.h \
/usr/include/wchar.h \
/usr/include/wctype.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/include/limits.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/include/stdarg.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/include/stddef.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/include/stdint.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/include/syslimits.h

View File

@@ -1,364 +0,0 @@
/home/leca/projects/qt/checks-parser/checks-parser_autogen/T6NPIT3GCD/moc_imageredactor.cpp: /home/leca/projects/qt/checks-parser/image_redactor/imageredactor.h \
/home/leca/projects/qt/checks-parser/checks-parser_autogen/moc_predefs.h \
/usr/include/asm-generic/errno-base.h \
/usr/include/asm-generic/errno.h \
/usr/include/asm/errno.h \
/usr/include/asm/unistd.h \
/usr/include/asm/unistd_64.h \
/usr/include/assert.h \
/usr/include/bits/atomic_wide_counter.h \
/usr/include/bits/confname.h \
/usr/include/bits/cpu-set.h \
/usr/include/bits/endian.h \
/usr/include/bits/endianness.h \
/usr/include/bits/environments.h \
/usr/include/bits/errno.h \
/usr/include/bits/floatn-common.h \
/usr/include/bits/floatn.h \
/usr/include/bits/getopt_core.h \
/usr/include/bits/getopt_posix.h \
/usr/include/bits/libc-header-start.h \
/usr/include/bits/locale.h \
/usr/include/bits/long-double.h \
/usr/include/bits/posix_opt.h \
/usr/include/bits/pthread_stack_min-dynamic.h \
/usr/include/bits/pthreadtypes-arch.h \
/usr/include/bits/pthreadtypes.h \
/usr/include/bits/sched.h \
/usr/include/bits/setjmp.h \
/usr/include/bits/stdio_lim.h \
/usr/include/bits/struct_mutex.h \
/usr/include/bits/struct_rwlock.h \
/usr/include/bits/syscall.h \
/usr/include/bits/thread-shared-types.h \
/usr/include/bits/time.h \
/usr/include/bits/time64.h \
/usr/include/bits/timesize.h \
/usr/include/bits/timex.h \
/usr/include/bits/types.h \
/usr/include/bits/types/FILE.h \
/usr/include/bits/types/__FILE.h \
/usr/include/bits/types/__fpos64_t.h \
/usr/include/bits/types/__fpos_t.h \
/usr/include/bits/types/__locale_t.h \
/usr/include/bits/types/__mbstate_t.h \
/usr/include/bits/types/__sigset_t.h \
/usr/include/bits/types/clock_t.h \
/usr/include/bits/types/clockid_t.h \
/usr/include/bits/types/cookie_io_functions_t.h \
/usr/include/bits/types/error_t.h \
/usr/include/bits/types/locale_t.h \
/usr/include/bits/types/mbstate_t.h \
/usr/include/bits/types/struct_FILE.h \
/usr/include/bits/types/struct___jmp_buf_tag.h \
/usr/include/bits/types/struct_itimerspec.h \
/usr/include/bits/types/struct_sched_param.h \
/usr/include/bits/types/struct_timespec.h \
/usr/include/bits/types/struct_timeval.h \
/usr/include/bits/types/struct_tm.h \
/usr/include/bits/types/time_t.h \
/usr/include/bits/types/timer_t.h \
/usr/include/bits/types/wint_t.h \
/usr/include/bits/typesizes.h \
/usr/include/bits/unistd_ext.h \
/usr/include/bits/wchar.h \
/usr/include/bits/wctype-wchar.h \
/usr/include/bits/wordsize.h \
/usr/include/c++/14.2.1/algorithm \
/usr/include/c++/14.2.1/array \
/usr/include/c++/14.2.1/atomic \
/usr/include/c++/14.2.1/backward/auto_ptr.h \
/usr/include/c++/14.2.1/backward/binders.h \
/usr/include/c++/14.2.1/bit \
/usr/include/c++/14.2.1/bits/algorithmfwd.h \
/usr/include/c++/14.2.1/bits/align.h \
/usr/include/c++/14.2.1/bits/alloc_traits.h \
/usr/include/c++/14.2.1/bits/allocated_ptr.h \
/usr/include/c++/14.2.1/bits/allocator.h \
/usr/include/c++/14.2.1/bits/atomic_base.h \
/usr/include/c++/14.2.1/bits/atomic_lockfree_defines.h \
/usr/include/c++/14.2.1/bits/atomic_wait.h \
/usr/include/c++/14.2.1/bits/basic_ios.h \
/usr/include/c++/14.2.1/bits/basic_ios.tcc \
/usr/include/c++/14.2.1/bits/basic_string.h \
/usr/include/c++/14.2.1/bits/basic_string.tcc \
/usr/include/c++/14.2.1/bits/c++0x_warning.h \
/usr/include/c++/14.2.1/bits/char_traits.h \
/usr/include/c++/14.2.1/bits/charconv.h \
/usr/include/c++/14.2.1/bits/concept_check.h \
/usr/include/c++/14.2.1/bits/cpp_type_traits.h \
/usr/include/c++/14.2.1/bits/cxxabi_forced.h \
/usr/include/c++/14.2.1/bits/cxxabi_init_exception.h \
/usr/include/c++/14.2.1/bits/erase_if.h \
/usr/include/c++/14.2.1/bits/exception.h \
/usr/include/c++/14.2.1/bits/exception_defines.h \
/usr/include/c++/14.2.1/bits/exception_ptr.h \
/usr/include/c++/14.2.1/bits/functexcept.h \
/usr/include/c++/14.2.1/bits/functional_hash.h \
/usr/include/c++/14.2.1/bits/hash_bytes.h \
/usr/include/c++/14.2.1/bits/invoke.h \
/usr/include/c++/14.2.1/bits/ios_base.h \
/usr/include/c++/14.2.1/bits/iterator_concepts.h \
/usr/include/c++/14.2.1/bits/list.tcc \
/usr/include/c++/14.2.1/bits/locale_classes.h \
/usr/include/c++/14.2.1/bits/locale_classes.tcc \
/usr/include/c++/14.2.1/bits/locale_facets.h \
/usr/include/c++/14.2.1/bits/locale_facets.tcc \
/usr/include/c++/14.2.1/bits/localefwd.h \
/usr/include/c++/14.2.1/bits/max_size_type.h \
/usr/include/c++/14.2.1/bits/memory_resource.h \
/usr/include/c++/14.2.1/bits/memoryfwd.h \
/usr/include/c++/14.2.1/bits/mofunc_impl.h \
/usr/include/c++/14.2.1/bits/move.h \
/usr/include/c++/14.2.1/bits/move_only_function.h \
/usr/include/c++/14.2.1/bits/nested_exception.h \
/usr/include/c++/14.2.1/bits/new_allocator.h \
/usr/include/c++/14.2.1/bits/node_handle.h \
/usr/include/c++/14.2.1/bits/ostream.tcc \
/usr/include/c++/14.2.1/bits/ostream_insert.h \
/usr/include/c++/14.2.1/bits/out_ptr.h \
/usr/include/c++/14.2.1/bits/postypes.h \
/usr/include/c++/14.2.1/bits/predefined_ops.h \
/usr/include/c++/14.2.1/bits/ptr_traits.h \
/usr/include/c++/14.2.1/bits/range_access.h \
/usr/include/c++/14.2.1/bits/ranges_algo.h \
/usr/include/c++/14.2.1/bits/ranges_algobase.h \
/usr/include/c++/14.2.1/bits/ranges_base.h \
/usr/include/c++/14.2.1/bits/ranges_cmp.h \
/usr/include/c++/14.2.1/bits/ranges_uninitialized.h \
/usr/include/c++/14.2.1/bits/ranges_util.h \
/usr/include/c++/14.2.1/bits/refwrap.h \
/usr/include/c++/14.2.1/bits/requires_hosted.h \
/usr/include/c++/14.2.1/bits/sat_arith.h \
/usr/include/c++/14.2.1/bits/shared_ptr.h \
/usr/include/c++/14.2.1/bits/shared_ptr_atomic.h \
/usr/include/c++/14.2.1/bits/shared_ptr_base.h \
/usr/include/c++/14.2.1/bits/std_abs.h \
/usr/include/c++/14.2.1/bits/std_function.h \
/usr/include/c++/14.2.1/bits/std_mutex.h \
/usr/include/c++/14.2.1/bits/stl_algo.h \
/usr/include/c++/14.2.1/bits/stl_algobase.h \
/usr/include/c++/14.2.1/bits/stl_bvector.h \
/usr/include/c++/14.2.1/bits/stl_construct.h \
/usr/include/c++/14.2.1/bits/stl_function.h \
/usr/include/c++/14.2.1/bits/stl_heap.h \
/usr/include/c++/14.2.1/bits/stl_iterator.h \
/usr/include/c++/14.2.1/bits/stl_iterator_base_funcs.h \
/usr/include/c++/14.2.1/bits/stl_iterator_base_types.h \
/usr/include/c++/14.2.1/bits/stl_list.h \
/usr/include/c++/14.2.1/bits/stl_map.h \
/usr/include/c++/14.2.1/bits/stl_multimap.h \
/usr/include/c++/14.2.1/bits/stl_numeric.h \
/usr/include/c++/14.2.1/bits/stl_pair.h \
/usr/include/c++/14.2.1/bits/stl_raw_storage_iter.h \
/usr/include/c++/14.2.1/bits/stl_relops.h \
/usr/include/c++/14.2.1/bits/stl_tempbuf.h \
/usr/include/c++/14.2.1/bits/stl_tree.h \
/usr/include/c++/14.2.1/bits/stl_uninitialized.h \
/usr/include/c++/14.2.1/bits/stl_vector.h \
/usr/include/c++/14.2.1/bits/stream_iterator.h \
/usr/include/c++/14.2.1/bits/streambuf.tcc \
/usr/include/c++/14.2.1/bits/streambuf_iterator.h \
/usr/include/c++/14.2.1/bits/string_view.tcc \
/usr/include/c++/14.2.1/bits/stringfwd.h \
/usr/include/c++/14.2.1/bits/uniform_int_dist.h \
/usr/include/c++/14.2.1/bits/unique_ptr.h \
/usr/include/c++/14.2.1/bits/uses_allocator.h \
/usr/include/c++/14.2.1/bits/uses_allocator_args.h \
/usr/include/c++/14.2.1/bits/utility.h \
/usr/include/c++/14.2.1/bits/vector.tcc \
/usr/include/c++/14.2.1/bits/version.h \
/usr/include/c++/14.2.1/cctype \
/usr/include/c++/14.2.1/cerrno \
/usr/include/c++/14.2.1/charconv \
/usr/include/c++/14.2.1/climits \
/usr/include/c++/14.2.1/clocale \
/usr/include/c++/14.2.1/compare \
/usr/include/c++/14.2.1/concepts \
/usr/include/c++/14.2.1/cstddef \
/usr/include/c++/14.2.1/cstdint \
/usr/include/c++/14.2.1/cstdlib \
/usr/include/c++/14.2.1/cwchar \
/usr/include/c++/14.2.1/cwctype \
/usr/include/c++/14.2.1/debug/assertions.h \
/usr/include/c++/14.2.1/debug/debug.h \
/usr/include/c++/14.2.1/exception \
/usr/include/c++/14.2.1/ext/aligned_buffer.h \
/usr/include/c++/14.2.1/ext/alloc_traits.h \
/usr/include/c++/14.2.1/ext/atomicity.h \
/usr/include/c++/14.2.1/ext/concurrence.h \
/usr/include/c++/14.2.1/ext/numeric_traits.h \
/usr/include/c++/14.2.1/ext/string_conversions.h \
/usr/include/c++/14.2.1/ext/type_traits.h \
/usr/include/c++/14.2.1/format \
/usr/include/c++/14.2.1/functional \
/usr/include/c++/14.2.1/initializer_list \
/usr/include/c++/14.2.1/ios \
/usr/include/c++/14.2.1/iosfwd \
/usr/include/c++/14.2.1/iterator \
/usr/include/c++/14.2.1/limits \
/usr/include/c++/14.2.1/list \
/usr/include/c++/14.2.1/map \
/usr/include/c++/14.2.1/memory \
/usr/include/c++/14.2.1/new \
/usr/include/c++/14.2.1/numbers \
/usr/include/c++/14.2.1/numeric \
/usr/include/c++/14.2.1/optional \
/usr/include/c++/14.2.1/ostream \
/usr/include/c++/14.2.1/pstl/execution_defs.h \
/usr/include/c++/14.2.1/pstl/glue_numeric_defs.h \
/usr/include/c++/14.2.1/stdexcept \
/usr/include/c++/14.2.1/stdlib.h \
/usr/include/c++/14.2.1/streambuf \
/usr/include/c++/14.2.1/string \
/usr/include/c++/14.2.1/string_view \
/usr/include/c++/14.2.1/text_encoding \
/usr/include/c++/14.2.1/tuple \
/usr/include/c++/14.2.1/type_traits \
/usr/include/c++/14.2.1/typeinfo \
/usr/include/c++/14.2.1/unordered_map \
/usr/include/c++/14.2.1/utility \
/usr/include/c++/14.2.1/vector \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/atomic_word.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/c++allocator.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/c++config.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/c++locale.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/cpu_defines.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/ctype_base.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/ctype_inline.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/error_constants.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/gthr-default.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/gthr.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/os_defines.h \
/usr/include/ctype.h \
/usr/include/errno.h \
/usr/include/features-time64.h \
/usr/include/features.h \
/usr/include/gnu/stubs-64.h \
/usr/include/gnu/stubs.h \
/usr/include/linux/errno.h \
/usr/include/locale.h \
/usr/include/pthread.h \
/usr/include/qt/QtCore/qalgorithms.h \
/usr/include/qt/QtCore/qarraydata.h \
/usr/include/qt/QtCore/qatomic.h \
/usr/include/qt/QtCore/qatomic_cxx11.h \
/usr/include/qt/QtCore/qbasicatomic.h \
/usr/include/qt/QtCore/qbytearray.h \
/usr/include/qt/QtCore/qbytearraylist.h \
/usr/include/qt/QtCore/qchar.h \
/usr/include/qt/QtCore/qcompilerdetection.h \
/usr/include/qt/QtCore/qconfig.h \
/usr/include/qt/QtCore/qcontainerfwd.h \
/usr/include/qt/QtCore/qcontainertools_impl.h \
/usr/include/qt/QtCore/qcoreevent.h \
/usr/include/qt/QtCore/qdatastream.h \
/usr/include/qt/QtCore/qfile.h \
/usr/include/qt/QtCore/qfiledevice.h \
/usr/include/qt/QtCore/qflags.h \
/usr/include/qt/QtCore/qgenericatomic.h \
/usr/include/qt/QtCore/qglobal.h \
/usr/include/qt/QtCore/qglobalstatic.h \
/usr/include/qt/QtCore/qhash.h \
/usr/include/qt/QtCore/qhashfunctions.h \
/usr/include/qt/QtCore/qiodevice.h \
/usr/include/qt/QtCore/qiterator.h \
/usr/include/qt/QtCore/qline.h \
/usr/include/qt/QtCore/qlist.h \
/usr/include/qt/QtCore/qlogging.h \
/usr/include/qt/QtCore/qmap.h \
/usr/include/qt/QtCore/qmargins.h \
/usr/include/qt/QtCore/qmetatype.h \
/usr/include/qt/QtCore/qnamespace.h \
/usr/include/qt/QtCore/qnumeric.h \
/usr/include/qt/QtCore/qobject.h \
/usr/include/qt/QtCore/qobject_impl.h \
/usr/include/qt/QtCore/qobjectdefs.h \
/usr/include/qt/QtCore/qobjectdefs_impl.h \
/usr/include/qt/QtCore/qpair.h \
/usr/include/qt/QtCore/qpoint.h \
/usr/include/qt/QtCore/qprocessordetection.h \
/usr/include/qt/QtCore/qrect.h \
/usr/include/qt/QtCore/qrefcount.h \
/usr/include/qt/QtCore/qregexp.h \
/usr/include/qt/QtCore/qscopedpointer.h \
/usr/include/qt/QtCore/qset.h \
/usr/include/qt/QtCore/qshareddata.h \
/usr/include/qt/QtCore/qsharedpointer.h \
/usr/include/qt/QtCore/qsharedpointer_impl.h \
/usr/include/qt/QtCore/qsize.h \
/usr/include/qt/QtCore/qstring.h \
/usr/include/qt/QtCore/qstringalgorithms.h \
/usr/include/qt/QtCore/qstringlist.h \
/usr/include/qt/QtCore/qstringliteral.h \
/usr/include/qt/QtCore/qstringmatcher.h \
/usr/include/qt/QtCore/qstringview.h \
/usr/include/qt/QtCore/qsysinfo.h \
/usr/include/qt/QtCore/qsystemdetection.h \
/usr/include/qt/QtCore/qtcore-config.h \
/usr/include/qt/QtCore/qtypeinfo.h \
/usr/include/qt/QtCore/qurl.h \
/usr/include/qt/QtCore/qvariant.h \
/usr/include/qt/QtCore/qvarlengtharray.h \
/usr/include/qt/QtCore/qvector.h \
/usr/include/qt/QtCore/qversiontagging.h \
/usr/include/qt/QtGui/QMouseEvent \
/usr/include/qt/QtGui/QWheelEvent \
/usr/include/qt/QtGui/qbrush.h \
/usr/include/qt/QtGui/qcolor.h \
/usr/include/qt/QtGui/qcursor.h \
/usr/include/qt/QtGui/qevent.h \
/usr/include/qt/QtGui/qfont.h \
/usr/include/qt/QtGui/qfontinfo.h \
/usr/include/qt/QtGui/qfontmetrics.h \
/usr/include/qt/QtGui/qimage.h \
/usr/include/qt/QtGui/qkeysequence.h \
/usr/include/qt/QtGui/qmatrix.h \
/usr/include/qt/QtGui/qpaintdevice.h \
/usr/include/qt/QtGui/qpainter.h \
/usr/include/qt/QtGui/qpainterpath.h \
/usr/include/qt/QtGui/qpalette.h \
/usr/include/qt/QtGui/qpen.h \
/usr/include/qt/QtGui/qpixelformat.h \
/usr/include/qt/QtGui/qpixmap.h \
/usr/include/qt/QtGui/qpolygon.h \
/usr/include/qt/QtGui/qregion.h \
/usr/include/qt/QtGui/qrgb.h \
/usr/include/qt/QtGui/qrgba64.h \
/usr/include/qt/QtGui/qtextoption.h \
/usr/include/qt/QtGui/qtgui-config.h \
/usr/include/qt/QtGui/qtguiglobal.h \
/usr/include/qt/QtGui/qtouchdevice.h \
/usr/include/qt/QtGui/qtransform.h \
/usr/include/qt/QtGui/qvector2d.h \
/usr/include/qt/QtGui/qwindowdefs.h \
/usr/include/qt/QtWidgets/QGraphicsPixmapItem \
/usr/include/qt/QtWidgets/QGraphicsScene \
/usr/include/qt/QtWidgets/QGraphicsView \
/usr/include/qt/QtWidgets/qabstractscrollarea.h \
/usr/include/qt/QtWidgets/qframe.h \
/usr/include/qt/QtWidgets/qgraphicsitem.h \
/usr/include/qt/QtWidgets/qgraphicsscene.h \
/usr/include/qt/QtWidgets/qgraphicsview.h \
/usr/include/qt/QtWidgets/qscrollarea.h \
/usr/include/qt/QtWidgets/qsizepolicy.h \
/usr/include/qt/QtWidgets/qtwidgets-config.h \
/usr/include/qt/QtWidgets/qtwidgetsglobal.h \
/usr/include/qt/QtWidgets/qwidget.h \
/usr/include/sched.h \
/usr/include/stdc-predef.h \
/usr/include/stdio.h \
/usr/include/string.h \
/usr/include/strings.h \
/usr/include/sys/cdefs.h \
/usr/include/sys/syscall.h \
/usr/include/syscall.h \
/usr/include/time.h \
/usr/include/unistd.h \
/usr/include/wchar.h \
/usr/include/wctype.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/include/limits.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/include/stdarg.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/include/stddef.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/include/stdint.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/include/syslimits.h

View File

@@ -1,338 +0,0 @@
/home/leca/projects/qt/checks-parser/checks-parser_autogen/WWEXDOY447/moc_imageview.cpp: /home/leca/projects/qt/checks-parser/imageview/imageview.h \
/home/leca/projects/qt/checks-parser/checks-parser_autogen/moc_predefs.h \
/usr/include/asm-generic/errno-base.h \
/usr/include/asm-generic/errno.h \
/usr/include/asm/errno.h \
/usr/include/asm/unistd.h \
/usr/include/asm/unistd_64.h \
/usr/include/assert.h \
/usr/include/bits/atomic_wide_counter.h \
/usr/include/bits/confname.h \
/usr/include/bits/cpu-set.h \
/usr/include/bits/endian.h \
/usr/include/bits/endianness.h \
/usr/include/bits/environments.h \
/usr/include/bits/errno.h \
/usr/include/bits/floatn-common.h \
/usr/include/bits/floatn.h \
/usr/include/bits/getopt_core.h \
/usr/include/bits/getopt_posix.h \
/usr/include/bits/libc-header-start.h \
/usr/include/bits/locale.h \
/usr/include/bits/long-double.h \
/usr/include/bits/posix_opt.h \
/usr/include/bits/pthread_stack_min-dynamic.h \
/usr/include/bits/pthreadtypes-arch.h \
/usr/include/bits/pthreadtypes.h \
/usr/include/bits/sched.h \
/usr/include/bits/setjmp.h \
/usr/include/bits/struct_mutex.h \
/usr/include/bits/struct_rwlock.h \
/usr/include/bits/syscall.h \
/usr/include/bits/thread-shared-types.h \
/usr/include/bits/time.h \
/usr/include/bits/time64.h \
/usr/include/bits/timesize.h \
/usr/include/bits/timex.h \
/usr/include/bits/types.h \
/usr/include/bits/types/FILE.h \
/usr/include/bits/types/__FILE.h \
/usr/include/bits/types/__locale_t.h \
/usr/include/bits/types/__mbstate_t.h \
/usr/include/bits/types/__sigset_t.h \
/usr/include/bits/types/clock_t.h \
/usr/include/bits/types/clockid_t.h \
/usr/include/bits/types/error_t.h \
/usr/include/bits/types/locale_t.h \
/usr/include/bits/types/mbstate_t.h \
/usr/include/bits/types/struct___jmp_buf_tag.h \
/usr/include/bits/types/struct_itimerspec.h \
/usr/include/bits/types/struct_sched_param.h \
/usr/include/bits/types/struct_timespec.h \
/usr/include/bits/types/struct_timeval.h \
/usr/include/bits/types/struct_tm.h \
/usr/include/bits/types/time_t.h \
/usr/include/bits/types/timer_t.h \
/usr/include/bits/types/wint_t.h \
/usr/include/bits/typesizes.h \
/usr/include/bits/unistd_ext.h \
/usr/include/bits/wchar.h \
/usr/include/bits/wctype-wchar.h \
/usr/include/bits/wordsize.h \
/usr/include/c++/14.2.1/algorithm \
/usr/include/c++/14.2.1/array \
/usr/include/c++/14.2.1/atomic \
/usr/include/c++/14.2.1/backward/auto_ptr.h \
/usr/include/c++/14.2.1/backward/binders.h \
/usr/include/c++/14.2.1/bit \
/usr/include/c++/14.2.1/bits/algorithmfwd.h \
/usr/include/c++/14.2.1/bits/align.h \
/usr/include/c++/14.2.1/bits/alloc_traits.h \
/usr/include/c++/14.2.1/bits/allocated_ptr.h \
/usr/include/c++/14.2.1/bits/allocator.h \
/usr/include/c++/14.2.1/bits/atomic_base.h \
/usr/include/c++/14.2.1/bits/atomic_lockfree_defines.h \
/usr/include/c++/14.2.1/bits/atomic_wait.h \
/usr/include/c++/14.2.1/bits/basic_ios.h \
/usr/include/c++/14.2.1/bits/basic_ios.tcc \
/usr/include/c++/14.2.1/bits/basic_string.h \
/usr/include/c++/14.2.1/bits/basic_string.tcc \
/usr/include/c++/14.2.1/bits/c++0x_warning.h \
/usr/include/c++/14.2.1/bits/char_traits.h \
/usr/include/c++/14.2.1/bits/charconv.h \
/usr/include/c++/14.2.1/bits/concept_check.h \
/usr/include/c++/14.2.1/bits/cpp_type_traits.h \
/usr/include/c++/14.2.1/bits/cxxabi_forced.h \
/usr/include/c++/14.2.1/bits/cxxabi_init_exception.h \
/usr/include/c++/14.2.1/bits/erase_if.h \
/usr/include/c++/14.2.1/bits/exception.h \
/usr/include/c++/14.2.1/bits/exception_defines.h \
/usr/include/c++/14.2.1/bits/exception_ptr.h \
/usr/include/c++/14.2.1/bits/functexcept.h \
/usr/include/c++/14.2.1/bits/functional_hash.h \
/usr/include/c++/14.2.1/bits/hash_bytes.h \
/usr/include/c++/14.2.1/bits/invoke.h \
/usr/include/c++/14.2.1/bits/ios_base.h \
/usr/include/c++/14.2.1/bits/iterator_concepts.h \
/usr/include/c++/14.2.1/bits/list.tcc \
/usr/include/c++/14.2.1/bits/locale_classes.h \
/usr/include/c++/14.2.1/bits/locale_classes.tcc \
/usr/include/c++/14.2.1/bits/locale_facets.h \
/usr/include/c++/14.2.1/bits/locale_facets.tcc \
/usr/include/c++/14.2.1/bits/localefwd.h \
/usr/include/c++/14.2.1/bits/max_size_type.h \
/usr/include/c++/14.2.1/bits/memory_resource.h \
/usr/include/c++/14.2.1/bits/memoryfwd.h \
/usr/include/c++/14.2.1/bits/mofunc_impl.h \
/usr/include/c++/14.2.1/bits/move.h \
/usr/include/c++/14.2.1/bits/move_only_function.h \
/usr/include/c++/14.2.1/bits/nested_exception.h \
/usr/include/c++/14.2.1/bits/new_allocator.h \
/usr/include/c++/14.2.1/bits/node_handle.h \
/usr/include/c++/14.2.1/bits/ostream.tcc \
/usr/include/c++/14.2.1/bits/ostream_insert.h \
/usr/include/c++/14.2.1/bits/out_ptr.h \
/usr/include/c++/14.2.1/bits/postypes.h \
/usr/include/c++/14.2.1/bits/predefined_ops.h \
/usr/include/c++/14.2.1/bits/ptr_traits.h \
/usr/include/c++/14.2.1/bits/range_access.h \
/usr/include/c++/14.2.1/bits/ranges_algo.h \
/usr/include/c++/14.2.1/bits/ranges_algobase.h \
/usr/include/c++/14.2.1/bits/ranges_base.h \
/usr/include/c++/14.2.1/bits/ranges_cmp.h \
/usr/include/c++/14.2.1/bits/ranges_uninitialized.h \
/usr/include/c++/14.2.1/bits/ranges_util.h \
/usr/include/c++/14.2.1/bits/refwrap.h \
/usr/include/c++/14.2.1/bits/requires_hosted.h \
/usr/include/c++/14.2.1/bits/sat_arith.h \
/usr/include/c++/14.2.1/bits/shared_ptr.h \
/usr/include/c++/14.2.1/bits/shared_ptr_atomic.h \
/usr/include/c++/14.2.1/bits/shared_ptr_base.h \
/usr/include/c++/14.2.1/bits/std_abs.h \
/usr/include/c++/14.2.1/bits/std_function.h \
/usr/include/c++/14.2.1/bits/std_mutex.h \
/usr/include/c++/14.2.1/bits/stl_algo.h \
/usr/include/c++/14.2.1/bits/stl_algobase.h \
/usr/include/c++/14.2.1/bits/stl_bvector.h \
/usr/include/c++/14.2.1/bits/stl_construct.h \
/usr/include/c++/14.2.1/bits/stl_function.h \
/usr/include/c++/14.2.1/bits/stl_heap.h \
/usr/include/c++/14.2.1/bits/stl_iterator.h \
/usr/include/c++/14.2.1/bits/stl_iterator_base_funcs.h \
/usr/include/c++/14.2.1/bits/stl_iterator_base_types.h \
/usr/include/c++/14.2.1/bits/stl_list.h \
/usr/include/c++/14.2.1/bits/stl_map.h \
/usr/include/c++/14.2.1/bits/stl_multimap.h \
/usr/include/c++/14.2.1/bits/stl_numeric.h \
/usr/include/c++/14.2.1/bits/stl_pair.h \
/usr/include/c++/14.2.1/bits/stl_raw_storage_iter.h \
/usr/include/c++/14.2.1/bits/stl_relops.h \
/usr/include/c++/14.2.1/bits/stl_tempbuf.h \
/usr/include/c++/14.2.1/bits/stl_tree.h \
/usr/include/c++/14.2.1/bits/stl_uninitialized.h \
/usr/include/c++/14.2.1/bits/stl_vector.h \
/usr/include/c++/14.2.1/bits/stream_iterator.h \
/usr/include/c++/14.2.1/bits/streambuf.tcc \
/usr/include/c++/14.2.1/bits/streambuf_iterator.h \
/usr/include/c++/14.2.1/bits/string_view.tcc \
/usr/include/c++/14.2.1/bits/stringfwd.h \
/usr/include/c++/14.2.1/bits/uniform_int_dist.h \
/usr/include/c++/14.2.1/bits/unique_ptr.h \
/usr/include/c++/14.2.1/bits/uses_allocator.h \
/usr/include/c++/14.2.1/bits/uses_allocator_args.h \
/usr/include/c++/14.2.1/bits/utility.h \
/usr/include/c++/14.2.1/bits/vector.tcc \
/usr/include/c++/14.2.1/bits/version.h \
/usr/include/c++/14.2.1/cctype \
/usr/include/c++/14.2.1/cerrno \
/usr/include/c++/14.2.1/charconv \
/usr/include/c++/14.2.1/climits \
/usr/include/c++/14.2.1/clocale \
/usr/include/c++/14.2.1/compare \
/usr/include/c++/14.2.1/concepts \
/usr/include/c++/14.2.1/cstddef \
/usr/include/c++/14.2.1/cstdint \
/usr/include/c++/14.2.1/cstdlib \
/usr/include/c++/14.2.1/cwchar \
/usr/include/c++/14.2.1/cwctype \
/usr/include/c++/14.2.1/debug/assertions.h \
/usr/include/c++/14.2.1/debug/debug.h \
/usr/include/c++/14.2.1/exception \
/usr/include/c++/14.2.1/ext/aligned_buffer.h \
/usr/include/c++/14.2.1/ext/alloc_traits.h \
/usr/include/c++/14.2.1/ext/atomicity.h \
/usr/include/c++/14.2.1/ext/concurrence.h \
/usr/include/c++/14.2.1/ext/numeric_traits.h \
/usr/include/c++/14.2.1/ext/string_conversions.h \
/usr/include/c++/14.2.1/ext/type_traits.h \
/usr/include/c++/14.2.1/format \
/usr/include/c++/14.2.1/functional \
/usr/include/c++/14.2.1/initializer_list \
/usr/include/c++/14.2.1/ios \
/usr/include/c++/14.2.1/iosfwd \
/usr/include/c++/14.2.1/iterator \
/usr/include/c++/14.2.1/limits \
/usr/include/c++/14.2.1/list \
/usr/include/c++/14.2.1/map \
/usr/include/c++/14.2.1/memory \
/usr/include/c++/14.2.1/new \
/usr/include/c++/14.2.1/numbers \
/usr/include/c++/14.2.1/numeric \
/usr/include/c++/14.2.1/optional \
/usr/include/c++/14.2.1/ostream \
/usr/include/c++/14.2.1/pstl/execution_defs.h \
/usr/include/c++/14.2.1/pstl/glue_numeric_defs.h \
/usr/include/c++/14.2.1/stdexcept \
/usr/include/c++/14.2.1/stdlib.h \
/usr/include/c++/14.2.1/streambuf \
/usr/include/c++/14.2.1/string \
/usr/include/c++/14.2.1/string_view \
/usr/include/c++/14.2.1/text_encoding \
/usr/include/c++/14.2.1/tuple \
/usr/include/c++/14.2.1/type_traits \
/usr/include/c++/14.2.1/typeinfo \
/usr/include/c++/14.2.1/unordered_map \
/usr/include/c++/14.2.1/utility \
/usr/include/c++/14.2.1/vector \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/atomic_word.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/c++allocator.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/c++config.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/c++locale.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/cpu_defines.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/ctype_base.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/ctype_inline.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/error_constants.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/gthr-default.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/gthr.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/os_defines.h \
/usr/include/ctype.h \
/usr/include/errno.h \
/usr/include/features-time64.h \
/usr/include/features.h \
/usr/include/gnu/stubs-64.h \
/usr/include/gnu/stubs.h \
/usr/include/linux/errno.h \
/usr/include/locale.h \
/usr/include/pthread.h \
/usr/include/qt/QtCore/QObject \
/usr/include/qt/QtCore/qalgorithms.h \
/usr/include/qt/QtCore/qarraydata.h \
/usr/include/qt/QtCore/qatomic.h \
/usr/include/qt/QtCore/qatomic_cxx11.h \
/usr/include/qt/QtCore/qbasicatomic.h \
/usr/include/qt/QtCore/qbytearray.h \
/usr/include/qt/QtCore/qbytearraylist.h \
/usr/include/qt/QtCore/qchar.h \
/usr/include/qt/QtCore/qcompilerdetection.h \
/usr/include/qt/QtCore/qconfig.h \
/usr/include/qt/QtCore/qcontainerfwd.h \
/usr/include/qt/QtCore/qcontainertools_impl.h \
/usr/include/qt/QtCore/qdatastream.h \
/usr/include/qt/QtCore/qflags.h \
/usr/include/qt/QtCore/qgenericatomic.h \
/usr/include/qt/QtCore/qglobal.h \
/usr/include/qt/QtCore/qglobalstatic.h \
/usr/include/qt/QtCore/qhash.h \
/usr/include/qt/QtCore/qhashfunctions.h \
/usr/include/qt/QtCore/qiodevice.h \
/usr/include/qt/QtCore/qiterator.h \
/usr/include/qt/QtCore/qline.h \
/usr/include/qt/QtCore/qlist.h \
/usr/include/qt/QtCore/qlogging.h \
/usr/include/qt/QtCore/qmargins.h \
/usr/include/qt/QtCore/qmetatype.h \
/usr/include/qt/QtCore/qnamespace.h \
/usr/include/qt/QtCore/qnumeric.h \
/usr/include/qt/QtCore/qobject.h \
/usr/include/qt/QtCore/qobject_impl.h \
/usr/include/qt/QtCore/qobjectdefs.h \
/usr/include/qt/QtCore/qobjectdefs_impl.h \
/usr/include/qt/QtCore/qpair.h \
/usr/include/qt/QtCore/qpoint.h \
/usr/include/qt/QtCore/qprocessordetection.h \
/usr/include/qt/QtCore/qrect.h \
/usr/include/qt/QtCore/qrefcount.h \
/usr/include/qt/QtCore/qregexp.h \
/usr/include/qt/QtCore/qscopedpointer.h \
/usr/include/qt/QtCore/qshareddata.h \
/usr/include/qt/QtCore/qsharedpointer.h \
/usr/include/qt/QtCore/qsharedpointer_impl.h \
/usr/include/qt/QtCore/qsize.h \
/usr/include/qt/QtCore/qstring.h \
/usr/include/qt/QtCore/qstringalgorithms.h \
/usr/include/qt/QtCore/qstringlist.h \
/usr/include/qt/QtCore/qstringliteral.h \
/usr/include/qt/QtCore/qstringmatcher.h \
/usr/include/qt/QtCore/qstringview.h \
/usr/include/qt/QtCore/qsysinfo.h \
/usr/include/qt/QtCore/qsystemdetection.h \
/usr/include/qt/QtCore/qtcore-config.h \
/usr/include/qt/QtCore/qtypeinfo.h \
/usr/include/qt/QtCore/qvarlengtharray.h \
/usr/include/qt/QtCore/qvector.h \
/usr/include/qt/QtCore/qversiontagging.h \
/usr/include/qt/QtGui/qbrush.h \
/usr/include/qt/QtGui/qcolor.h \
/usr/include/qt/QtGui/qcursor.h \
/usr/include/qt/QtGui/qfont.h \
/usr/include/qt/QtGui/qfontinfo.h \
/usr/include/qt/QtGui/qfontmetrics.h \
/usr/include/qt/QtGui/qimage.h \
/usr/include/qt/QtGui/qkeysequence.h \
/usr/include/qt/QtGui/qmatrix.h \
/usr/include/qt/QtGui/qpaintdevice.h \
/usr/include/qt/QtGui/qpalette.h \
/usr/include/qt/QtGui/qpixelformat.h \
/usr/include/qt/QtGui/qpixmap.h \
/usr/include/qt/QtGui/qpolygon.h \
/usr/include/qt/QtGui/qregion.h \
/usr/include/qt/QtGui/qrgb.h \
/usr/include/qt/QtGui/qrgba64.h \
/usr/include/qt/QtGui/qtgui-config.h \
/usr/include/qt/QtGui/qtguiglobal.h \
/usr/include/qt/QtGui/qtransform.h \
/usr/include/qt/QtGui/qwindowdefs.h \
/usr/include/qt/QtWidgets/QLabel \
/usr/include/qt/QtWidgets/QWidget \
/usr/include/qt/QtWidgets/qframe.h \
/usr/include/qt/QtWidgets/qlabel.h \
/usr/include/qt/QtWidgets/qsizepolicy.h \
/usr/include/qt/QtWidgets/qtwidgets-config.h \
/usr/include/qt/QtWidgets/qtwidgetsglobal.h \
/usr/include/qt/QtWidgets/qwidget.h \
/usr/include/sched.h \
/usr/include/stdc-predef.h \
/usr/include/string.h \
/usr/include/strings.h \
/usr/include/sys/cdefs.h \
/usr/include/sys/syscall.h \
/usr/include/syscall.h \
/usr/include/time.h \
/usr/include/unistd.h \
/usr/include/wchar.h \
/usr/include/wctype.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/include/limits.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/include/stdarg.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/include/stddef.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/include/stdint.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/include/syslimits.h

View File

@@ -1,605 +0,0 @@
checks-parser_autogen/timestamp: \
/home/leca/projects/qt/checks-parser/CMakeFiles/3.30.5/CMakeCXXCompiler.cmake \
/home/leca/projects/qt/checks-parser/CMakeFiles/3.30.5/CMakeSystem.cmake \
/home/leca/projects/qt/checks-parser/CMakeLists.txt \
/home/leca/projects/qt/checks-parser/adjustpicturedialog.cpp \
/home/leca/projects/qt/checks-parser/adjustpicturedialog.h \
/home/leca/projects/qt/checks-parser/check/check.cpp \
/home/leca/projects/qt/checks-parser/check/check.h \
/home/leca/projects/qt/checks-parser/checks-parser_autogen/moc_predefs.h \
/home/leca/projects/qt/checks-parser/goods/goods.cpp \
/home/leca/projects/qt/checks-parser/goods/goods.h \
/home/leca/projects/qt/checks-parser/image/checkimage.cpp \
/home/leca/projects/qt/checks-parser/image/checkimage.h \
/home/leca/projects/qt/checks-parser/image_redactor/imageredactor.cpp \
/home/leca/projects/qt/checks-parser/image_redactor/imageredactor.h \
/home/leca/projects/qt/checks-parser/imageview/imageview.cpp \
/home/leca/projects/qt/checks-parser/imageview/imageview.h \
/home/leca/projects/qt/checks-parser/main.cpp \
/home/leca/projects/qt/checks-parser/mainwindow.cpp \
/home/leca/projects/qt/checks-parser/mainwindow.h \
/home/leca/projects/qt/checks-parser/net/net.cpp \
/home/leca/projects/qt/checks-parser/net/net.h \
/home/leca/projects/qt/checks-parser/ofd/ofd.cpp \
/home/leca/projects/qt/checks-parser/ofd/ofd.h \
/home/leca/projects/qt/checks-parser/output/output_options.cpp \
/home/leca/projects/qt/checks-parser/output/output_options.h \
/home/leca/projects/qt/checks-parser/outputdialog.cpp \
/home/leca/projects/qt/checks-parser/outputdialog.h \
/home/leca/projects/qt/checks-parser/parser/module.cpp \
/home/leca/projects/qt/checks-parser/parser/module.h \
/home/leca/projects/qt/checks-parser/parser/parser.cpp \
/home/leca/projects/qt/checks-parser/parser/parser.h \
/home/leca/projects/qt/checks-parser/settings/settings.cpp \
/home/leca/projects/qt/checks-parser/settings/settings.h \
/home/leca/projects/qt/checks-parser/settingsdialog.cpp \
/home/leca/projects/qt/checks-parser/settingsdialog.h \
/home/leca/projects/qt/checks-parser/utils/utils.cpp \
/home/leca/projects/qt/checks-parser/utils/utils.h \
/usr/include/asm-generic/errno-base.h \
/usr/include/asm-generic/errno.h \
/usr/include/asm/errno.h \
/usr/include/asm/unistd.h \
/usr/include/asm/unistd_64.h \
/usr/include/assert.h \
/usr/include/bits/atomic_wide_counter.h \
/usr/include/bits/confname.h \
/usr/include/bits/cpu-set.h \
/usr/include/bits/endian.h \
/usr/include/bits/endianness.h \
/usr/include/bits/environments.h \
/usr/include/bits/errno.h \
/usr/include/bits/floatn-common.h \
/usr/include/bits/floatn.h \
/usr/include/bits/getopt_core.h \
/usr/include/bits/getopt_posix.h \
/usr/include/bits/libc-header-start.h \
/usr/include/bits/locale.h \
/usr/include/bits/long-double.h \
/usr/include/bits/posix_opt.h \
/usr/include/bits/pthread_stack_min-dynamic.h \
/usr/include/bits/pthreadtypes-arch.h \
/usr/include/bits/pthreadtypes.h \
/usr/include/bits/sched.h \
/usr/include/bits/setjmp.h \
/usr/include/bits/stdio_lim.h \
/usr/include/bits/struct_mutex.h \
/usr/include/bits/struct_rwlock.h \
/usr/include/bits/syscall.h \
/usr/include/bits/thread-shared-types.h \
/usr/include/bits/time.h \
/usr/include/bits/time64.h \
/usr/include/bits/timesize.h \
/usr/include/bits/timex.h \
/usr/include/bits/types.h \
/usr/include/bits/types/FILE.h \
/usr/include/bits/types/__FILE.h \
/usr/include/bits/types/__fpos64_t.h \
/usr/include/bits/types/__fpos_t.h \
/usr/include/bits/types/__locale_t.h \
/usr/include/bits/types/__mbstate_t.h \
/usr/include/bits/types/__sigset_t.h \
/usr/include/bits/types/clock_t.h \
/usr/include/bits/types/clockid_t.h \
/usr/include/bits/types/cookie_io_functions_t.h \
/usr/include/bits/types/error_t.h \
/usr/include/bits/types/locale_t.h \
/usr/include/bits/types/mbstate_t.h \
/usr/include/bits/types/struct_FILE.h \
/usr/include/bits/types/struct___jmp_buf_tag.h \
/usr/include/bits/types/struct_itimerspec.h \
/usr/include/bits/types/struct_sched_param.h \
/usr/include/bits/types/struct_timespec.h \
/usr/include/bits/types/struct_timeval.h \
/usr/include/bits/types/struct_tm.h \
/usr/include/bits/types/time_t.h \
/usr/include/bits/types/timer_t.h \
/usr/include/bits/types/wint_t.h \
/usr/include/bits/typesizes.h \
/usr/include/bits/unistd_ext.h \
/usr/include/bits/wchar.h \
/usr/include/bits/wctype-wchar.h \
/usr/include/bits/wordsize.h \
/usr/include/c++/14.2.1/algorithm \
/usr/include/c++/14.2.1/any \
/usr/include/c++/14.2.1/array \
/usr/include/c++/14.2.1/atomic \
/usr/include/c++/14.2.1/backward/auto_ptr.h \
/usr/include/c++/14.2.1/backward/binders.h \
/usr/include/c++/14.2.1/bit \
/usr/include/c++/14.2.1/bits/algorithmfwd.h \
/usr/include/c++/14.2.1/bits/align.h \
/usr/include/c++/14.2.1/bits/alloc_traits.h \
/usr/include/c++/14.2.1/bits/allocated_ptr.h \
/usr/include/c++/14.2.1/bits/allocator.h \
/usr/include/c++/14.2.1/bits/atomic_base.h \
/usr/include/c++/14.2.1/bits/atomic_lockfree_defines.h \
/usr/include/c++/14.2.1/bits/atomic_wait.h \
/usr/include/c++/14.2.1/bits/basic_ios.h \
/usr/include/c++/14.2.1/bits/basic_ios.tcc \
/usr/include/c++/14.2.1/bits/basic_string.h \
/usr/include/c++/14.2.1/bits/basic_string.tcc \
/usr/include/c++/14.2.1/bits/c++0x_warning.h \
/usr/include/c++/14.2.1/bits/char_traits.h \
/usr/include/c++/14.2.1/bits/charconv.h \
/usr/include/c++/14.2.1/bits/codecvt.h \
/usr/include/c++/14.2.1/bits/concept_check.h \
/usr/include/c++/14.2.1/bits/cpp_type_traits.h \
/usr/include/c++/14.2.1/bits/cxxabi_forced.h \
/usr/include/c++/14.2.1/bits/cxxabi_init_exception.h \
/usr/include/c++/14.2.1/bits/erase_if.h \
/usr/include/c++/14.2.1/bits/exception.h \
/usr/include/c++/14.2.1/bits/exception_defines.h \
/usr/include/c++/14.2.1/bits/exception_ptr.h \
/usr/include/c++/14.2.1/bits/functexcept.h \
/usr/include/c++/14.2.1/bits/functional_hash.h \
/usr/include/c++/14.2.1/bits/gslice.h \
/usr/include/c++/14.2.1/bits/gslice_array.h \
/usr/include/c++/14.2.1/bits/hash_bytes.h \
/usr/include/c++/14.2.1/bits/indirect_array.h \
/usr/include/c++/14.2.1/bits/invoke.h \
/usr/include/c++/14.2.1/bits/ios_base.h \
/usr/include/c++/14.2.1/bits/istream.tcc \
/usr/include/c++/14.2.1/bits/iterator_concepts.h \
/usr/include/c++/14.2.1/bits/list.tcc \
/usr/include/c++/14.2.1/bits/locale_classes.h \
/usr/include/c++/14.2.1/bits/locale_classes.tcc \
/usr/include/c++/14.2.1/bits/locale_conv.h \
/usr/include/c++/14.2.1/bits/locale_facets.h \
/usr/include/c++/14.2.1/bits/locale_facets.tcc \
/usr/include/c++/14.2.1/bits/locale_facets_nonio.h \
/usr/include/c++/14.2.1/bits/locale_facets_nonio.tcc \
/usr/include/c++/14.2.1/bits/localefwd.h \
/usr/include/c++/14.2.1/bits/mask_array.h \
/usr/include/c++/14.2.1/bits/max_size_type.h \
/usr/include/c++/14.2.1/bits/memory_resource.h \
/usr/include/c++/14.2.1/bits/memoryfwd.h \
/usr/include/c++/14.2.1/bits/mofunc_impl.h \
/usr/include/c++/14.2.1/bits/move.h \
/usr/include/c++/14.2.1/bits/move_only_function.h \
/usr/include/c++/14.2.1/bits/nested_exception.h \
/usr/include/c++/14.2.1/bits/new_allocator.h \
/usr/include/c++/14.2.1/bits/node_handle.h \
/usr/include/c++/14.2.1/bits/ostream.tcc \
/usr/include/c++/14.2.1/bits/ostream_insert.h \
/usr/include/c++/14.2.1/bits/out_ptr.h \
/usr/include/c++/14.2.1/bits/postypes.h \
/usr/include/c++/14.2.1/bits/predefined_ops.h \
/usr/include/c++/14.2.1/bits/ptr_traits.h \
/usr/include/c++/14.2.1/bits/quoted_string.h \
/usr/include/c++/14.2.1/bits/range_access.h \
/usr/include/c++/14.2.1/bits/ranges_algo.h \
/usr/include/c++/14.2.1/bits/ranges_algobase.h \
/usr/include/c++/14.2.1/bits/ranges_base.h \
/usr/include/c++/14.2.1/bits/ranges_cmp.h \
/usr/include/c++/14.2.1/bits/ranges_uninitialized.h \
/usr/include/c++/14.2.1/bits/ranges_util.h \
/usr/include/c++/14.2.1/bits/refwrap.h \
/usr/include/c++/14.2.1/bits/requires_hosted.h \
/usr/include/c++/14.2.1/bits/sat_arith.h \
/usr/include/c++/14.2.1/bits/shared_ptr.h \
/usr/include/c++/14.2.1/bits/shared_ptr_atomic.h \
/usr/include/c++/14.2.1/bits/shared_ptr_base.h \
/usr/include/c++/14.2.1/bits/slice_array.h \
/usr/include/c++/14.2.1/bits/specfun.h \
/usr/include/c++/14.2.1/bits/std_abs.h \
/usr/include/c++/14.2.1/bits/std_function.h \
/usr/include/c++/14.2.1/bits/std_mutex.h \
/usr/include/c++/14.2.1/bits/stl_algo.h \
/usr/include/c++/14.2.1/bits/stl_algobase.h \
/usr/include/c++/14.2.1/bits/stl_bvector.h \
/usr/include/c++/14.2.1/bits/stl_construct.h \
/usr/include/c++/14.2.1/bits/stl_function.h \
/usr/include/c++/14.2.1/bits/stl_heap.h \
/usr/include/c++/14.2.1/bits/stl_iterator.h \
/usr/include/c++/14.2.1/bits/stl_iterator_base_funcs.h \
/usr/include/c++/14.2.1/bits/stl_iterator_base_types.h \
/usr/include/c++/14.2.1/bits/stl_list.h \
/usr/include/c++/14.2.1/bits/stl_map.h \
/usr/include/c++/14.2.1/bits/stl_multimap.h \
/usr/include/c++/14.2.1/bits/stl_numeric.h \
/usr/include/c++/14.2.1/bits/stl_pair.h \
/usr/include/c++/14.2.1/bits/stl_raw_storage_iter.h \
/usr/include/c++/14.2.1/bits/stl_relops.h \
/usr/include/c++/14.2.1/bits/stl_tempbuf.h \
/usr/include/c++/14.2.1/bits/stl_tree.h \
/usr/include/c++/14.2.1/bits/stl_uninitialized.h \
/usr/include/c++/14.2.1/bits/stl_vector.h \
/usr/include/c++/14.2.1/bits/stream_iterator.h \
/usr/include/c++/14.2.1/bits/streambuf.tcc \
/usr/include/c++/14.2.1/bits/streambuf_iterator.h \
/usr/include/c++/14.2.1/bits/string_view.tcc \
/usr/include/c++/14.2.1/bits/stringfwd.h \
/usr/include/c++/14.2.1/bits/uniform_int_dist.h \
/usr/include/c++/14.2.1/bits/unique_ptr.h \
/usr/include/c++/14.2.1/bits/uses_allocator.h \
/usr/include/c++/14.2.1/bits/uses_allocator_args.h \
/usr/include/c++/14.2.1/bits/utility.h \
/usr/include/c++/14.2.1/bits/valarray_after.h \
/usr/include/c++/14.2.1/bits/valarray_array.h \
/usr/include/c++/14.2.1/bits/valarray_array.tcc \
/usr/include/c++/14.2.1/bits/valarray_before.h \
/usr/include/c++/14.2.1/bits/vector.tcc \
/usr/include/c++/14.2.1/bits/version.h \
/usr/include/c++/14.2.1/cassert \
/usr/include/c++/14.2.1/cctype \
/usr/include/c++/14.2.1/cerrno \
/usr/include/c++/14.2.1/charconv \
/usr/include/c++/14.2.1/climits \
/usr/include/c++/14.2.1/clocale \
/usr/include/c++/14.2.1/cmath \
/usr/include/c++/14.2.1/compare \
/usr/include/c++/14.2.1/concepts \
/usr/include/c++/14.2.1/cstddef \
/usr/include/c++/14.2.1/cstdint \
/usr/include/c++/14.2.1/cstdio \
/usr/include/c++/14.2.1/cstdlib \
/usr/include/c++/14.2.1/cstring \
/usr/include/c++/14.2.1/ctime \
/usr/include/c++/14.2.1/cwchar \
/usr/include/c++/14.2.1/cwctype \
/usr/include/c++/14.2.1/debug/assertions.h \
/usr/include/c++/14.2.1/debug/debug.h \
/usr/include/c++/14.2.1/exception \
/usr/include/c++/14.2.1/experimental/bits/fs_dir.h \
/usr/include/c++/14.2.1/experimental/bits/fs_fwd.h \
/usr/include/c++/14.2.1/experimental/bits/fs_ops.h \
/usr/include/c++/14.2.1/experimental/bits/fs_path.h \
/usr/include/c++/14.2.1/experimental/filesystem \
/usr/include/c++/14.2.1/ext/aligned_buffer.h \
/usr/include/c++/14.2.1/ext/alloc_traits.h \
/usr/include/c++/14.2.1/ext/atomicity.h \
/usr/include/c++/14.2.1/ext/concurrence.h \
/usr/include/c++/14.2.1/ext/numeric_traits.h \
/usr/include/c++/14.2.1/ext/string_conversions.h \
/usr/include/c++/14.2.1/ext/type_traits.h \
/usr/include/c++/14.2.1/filesystem \
/usr/include/c++/14.2.1/format \
/usr/include/c++/14.2.1/forward_list \
/usr/include/c++/14.2.1/functional \
/usr/include/c++/14.2.1/initializer_list \
/usr/include/c++/14.2.1/iomanip \
/usr/include/c++/14.2.1/ios \
/usr/include/c++/14.2.1/iosfwd \
/usr/include/c++/14.2.1/iostream \
/usr/include/c++/14.2.1/istream \
/usr/include/c++/14.2.1/iterator \
/usr/include/c++/14.2.1/limits \
/usr/include/c++/14.2.1/list \
/usr/include/c++/14.2.1/locale \
/usr/include/c++/14.2.1/map \
/usr/include/c++/14.2.1/memory \
/usr/include/c++/14.2.1/new \
/usr/include/c++/14.2.1/numbers \
/usr/include/c++/14.2.1/numeric \
/usr/include/c++/14.2.1/optional \
/usr/include/c++/14.2.1/ostream \
/usr/include/c++/14.2.1/pstl/execution_defs.h \
/usr/include/c++/14.2.1/pstl/glue_numeric_defs.h \
/usr/include/c++/14.2.1/stdexcept \
/usr/include/c++/14.2.1/stdlib.h \
/usr/include/c++/14.2.1/streambuf \
/usr/include/c++/14.2.1/string \
/usr/include/c++/14.2.1/string_view \
/usr/include/c++/14.2.1/text_encoding \
/usr/include/c++/14.2.1/tr1/bessel_function.tcc \
/usr/include/c++/14.2.1/tr1/beta_function.tcc \
/usr/include/c++/14.2.1/tr1/ell_integral.tcc \
/usr/include/c++/14.2.1/tr1/exp_integral.tcc \
/usr/include/c++/14.2.1/tr1/gamma.tcc \
/usr/include/c++/14.2.1/tr1/hypergeometric.tcc \
/usr/include/c++/14.2.1/tr1/legendre_function.tcc \
/usr/include/c++/14.2.1/tr1/modified_bessel_func.tcc \
/usr/include/c++/14.2.1/tr1/poly_hermite.tcc \
/usr/include/c++/14.2.1/tr1/poly_laguerre.tcc \
/usr/include/c++/14.2.1/tr1/riemann_zeta.tcc \
/usr/include/c++/14.2.1/tr1/special_function_util.h \
/usr/include/c++/14.2.1/tuple \
/usr/include/c++/14.2.1/type_traits \
/usr/include/c++/14.2.1/typeinfo \
/usr/include/c++/14.2.1/unordered_map \
/usr/include/c++/14.2.1/utility \
/usr/include/c++/14.2.1/valarray \
/usr/include/c++/14.2.1/vector \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/atomic_word.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/c++allocator.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/c++config.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/c++locale.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/cpu_defines.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/ctype_base.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/ctype_inline.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/error_constants.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/gthr-default.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/gthr.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/messages_members.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/os_defines.h \
/usr/include/c++/14.2.1/x86_64-pc-linux-gnu/bits/time_members.h \
/usr/include/ctype.h \
/usr/include/errno.h \
/usr/include/features-time64.h \
/usr/include/features.h \
/usr/include/gnu/stubs-64.h \
/usr/include/gnu/stubs.h \
/usr/include/libintl.h \
/usr/include/linux/errno.h \
/usr/include/locale.h \
/usr/include/nlohmann/adl_serializer.hpp \
/usr/include/nlohmann/byte_container_with_subtype.hpp \
/usr/include/nlohmann/detail/abi_macros.hpp \
/usr/include/nlohmann/detail/conversions/from_json.hpp \
/usr/include/nlohmann/detail/conversions/to_chars.hpp \
/usr/include/nlohmann/detail/conversions/to_json.hpp \
/usr/include/nlohmann/detail/exceptions.hpp \
/usr/include/nlohmann/detail/hash.hpp \
/usr/include/nlohmann/detail/input/binary_reader.hpp \
/usr/include/nlohmann/detail/input/input_adapters.hpp \
/usr/include/nlohmann/detail/input/json_sax.hpp \
/usr/include/nlohmann/detail/input/lexer.hpp \
/usr/include/nlohmann/detail/input/parser.hpp \
/usr/include/nlohmann/detail/input/position_t.hpp \
/usr/include/nlohmann/detail/iterators/internal_iterator.hpp \
/usr/include/nlohmann/detail/iterators/iter_impl.hpp \
/usr/include/nlohmann/detail/iterators/iteration_proxy.hpp \
/usr/include/nlohmann/detail/iterators/iterator_traits.hpp \
/usr/include/nlohmann/detail/iterators/json_reverse_iterator.hpp \
/usr/include/nlohmann/detail/iterators/primitive_iterator.hpp \
/usr/include/nlohmann/detail/json_custom_base_class.hpp \
/usr/include/nlohmann/detail/json_pointer.hpp \
/usr/include/nlohmann/detail/json_ref.hpp \
/usr/include/nlohmann/detail/macro_scope.hpp \
/usr/include/nlohmann/detail/macro_unscope.hpp \
/usr/include/nlohmann/detail/meta/call_std/begin.hpp \
/usr/include/nlohmann/detail/meta/call_std/end.hpp \
/usr/include/nlohmann/detail/meta/cpp_future.hpp \
/usr/include/nlohmann/detail/meta/detected.hpp \
/usr/include/nlohmann/detail/meta/identity_tag.hpp \
/usr/include/nlohmann/detail/meta/is_sax.hpp \
/usr/include/nlohmann/detail/meta/std_fs.hpp \
/usr/include/nlohmann/detail/meta/type_traits.hpp \
/usr/include/nlohmann/detail/meta/void_t.hpp \
/usr/include/nlohmann/detail/output/binary_writer.hpp \
/usr/include/nlohmann/detail/output/output_adapters.hpp \
/usr/include/nlohmann/detail/output/serializer.hpp \
/usr/include/nlohmann/detail/string_concat.hpp \
/usr/include/nlohmann/detail/string_escape.hpp \
/usr/include/nlohmann/detail/value_t.hpp \
/usr/include/nlohmann/json.hpp \
/usr/include/nlohmann/json_fwd.hpp \
/usr/include/nlohmann/ordered_map.hpp \
/usr/include/nlohmann/thirdparty/hedley/hedley.hpp \
/usr/include/nlohmann/thirdparty/hedley/hedley_undef.hpp \
/usr/include/pthread.h \
/usr/include/qt/QtCore/QObject \
/usr/include/qt/QtCore/qabstractitemmodel.h \
/usr/include/qt/QtCore/qalgorithms.h \
/usr/include/qt/QtCore/qarraydata.h \
/usr/include/qt/QtCore/qatomic.h \
/usr/include/qt/QtCore/qatomic_cxx11.h \
/usr/include/qt/QtCore/qbasicatomic.h \
/usr/include/qt/QtCore/qbytearray.h \
/usr/include/qt/QtCore/qbytearraylist.h \
/usr/include/qt/QtCore/qchar.h \
/usr/include/qt/QtCore/qcompilerdetection.h \
/usr/include/qt/QtCore/qconfig.h \
/usr/include/qt/QtCore/qcontainerfwd.h \
/usr/include/qt/QtCore/qcontainertools_impl.h \
/usr/include/qt/QtCore/qcoreevent.h \
/usr/include/qt/QtCore/qdatastream.h \
/usr/include/qt/QtCore/qfile.h \
/usr/include/qt/QtCore/qfiledevice.h \
/usr/include/qt/QtCore/qflags.h \
/usr/include/qt/QtCore/qgenericatomic.h \
/usr/include/qt/QtCore/qglobal.h \
/usr/include/qt/QtCore/qglobalstatic.h \
/usr/include/qt/QtCore/qhash.h \
/usr/include/qt/QtCore/qhashfunctions.h \
/usr/include/qt/QtCore/qiodevice.h \
/usr/include/qt/QtCore/qiterator.h \
/usr/include/qt/QtCore/qline.h \
/usr/include/qt/QtCore/qlist.h \
/usr/include/qt/QtCore/qlocale.h \
/usr/include/qt/QtCore/qlogging.h \
/usr/include/qt/QtCore/qmap.h \
/usr/include/qt/QtCore/qmargins.h \
/usr/include/qt/QtCore/qmetatype.h \
/usr/include/qt/QtCore/qnamespace.h \
/usr/include/qt/QtCore/qnumeric.h \
/usr/include/qt/QtCore/qobject.h \
/usr/include/qt/QtCore/qobject_impl.h \
/usr/include/qt/QtCore/qobjectdefs.h \
/usr/include/qt/QtCore/qobjectdefs_impl.h \
/usr/include/qt/QtCore/qpair.h \
/usr/include/qt/QtCore/qpoint.h \
/usr/include/qt/QtCore/qprocessordetection.h \
/usr/include/qt/QtCore/qrect.h \
/usr/include/qt/QtCore/qrefcount.h \
/usr/include/qt/QtCore/qregexp.h \
/usr/include/qt/QtCore/qregularexpression.h \
/usr/include/qt/QtCore/qscopedpointer.h \
/usr/include/qt/QtCore/qset.h \
/usr/include/qt/QtCore/qshareddata.h \
/usr/include/qt/QtCore/qsharedpointer.h \
/usr/include/qt/QtCore/qsharedpointer_impl.h \
/usr/include/qt/QtCore/qsize.h \
/usr/include/qt/QtCore/qstring.h \
/usr/include/qt/QtCore/qstringalgorithms.h \
/usr/include/qt/QtCore/qstringlist.h \
/usr/include/qt/QtCore/qstringliteral.h \
/usr/include/qt/QtCore/qstringmatcher.h \
/usr/include/qt/QtCore/qstringview.h \
/usr/include/qt/QtCore/qsysinfo.h \
/usr/include/qt/QtCore/qsystemdetection.h \
/usr/include/qt/QtCore/qtcore-config.h \
/usr/include/qt/QtCore/qtypeinfo.h \
/usr/include/qt/QtCore/qurl.h \
/usr/include/qt/QtCore/qvariant.h \
/usr/include/qt/QtCore/qvarlengtharray.h \
/usr/include/qt/QtCore/qvector.h \
/usr/include/qt/QtCore/qversiontagging.h \
/usr/include/qt/QtGui/QMouseEvent \
/usr/include/qt/QtGui/QWheelEvent \
/usr/include/qt/QtGui/qbrush.h \
/usr/include/qt/QtGui/qcolor.h \
/usr/include/qt/QtGui/qcursor.h \
/usr/include/qt/QtGui/qevent.h \
/usr/include/qt/QtGui/qfont.h \
/usr/include/qt/QtGui/qfontinfo.h \
/usr/include/qt/QtGui/qfontmetrics.h \
/usr/include/qt/QtGui/qicon.h \
/usr/include/qt/QtGui/qimage.h \
/usr/include/qt/QtGui/qkeysequence.h \
/usr/include/qt/QtGui/qmatrix.h \
/usr/include/qt/QtGui/qpaintdevice.h \
/usr/include/qt/QtGui/qpainter.h \
/usr/include/qt/QtGui/qpainterpath.h \
/usr/include/qt/QtGui/qpalette.h \
/usr/include/qt/QtGui/qpen.h \
/usr/include/qt/QtGui/qpixelformat.h \
/usr/include/qt/QtGui/qpixmap.h \
/usr/include/qt/QtGui/qpolygon.h \
/usr/include/qt/QtGui/qregion.h \
/usr/include/qt/QtGui/qrgb.h \
/usr/include/qt/QtGui/qrgba64.h \
/usr/include/qt/QtGui/qtextoption.h \
/usr/include/qt/QtGui/qtgui-config.h \
/usr/include/qt/QtGui/qtguiglobal.h \
/usr/include/qt/QtGui/qtouchdevice.h \
/usr/include/qt/QtGui/qtransform.h \
/usr/include/qt/QtGui/qvalidator.h \
/usr/include/qt/QtGui/qvector2d.h \
/usr/include/qt/QtGui/qwindowdefs.h \
/usr/include/qt/QtWidgets/QComboBox \
/usr/include/qt/QtWidgets/QDialog \
/usr/include/qt/QtWidgets/QGraphicsPixmapItem \
/usr/include/qt/QtWidgets/QGraphicsScene \
/usr/include/qt/QtWidgets/QGraphicsView \
/usr/include/qt/QtWidgets/QLabel \
/usr/include/qt/QtWidgets/QMainWindow \
/usr/include/qt/QtWidgets/QWidget \
/usr/include/qt/QtWidgets/qabstractitemdelegate.h \
/usr/include/qt/QtWidgets/qabstractscrollarea.h \
/usr/include/qt/QtWidgets/qabstractslider.h \
/usr/include/qt/QtWidgets/qabstractspinbox.h \
/usr/include/qt/QtWidgets/qcombobox.h \
/usr/include/qt/QtWidgets/qdialog.h \
/usr/include/qt/QtWidgets/qframe.h \
/usr/include/qt/QtWidgets/qgraphicsitem.h \
/usr/include/qt/QtWidgets/qgraphicsscene.h \
/usr/include/qt/QtWidgets/qgraphicsview.h \
/usr/include/qt/QtWidgets/qlabel.h \
/usr/include/qt/QtWidgets/qmainwindow.h \
/usr/include/qt/QtWidgets/qrubberband.h \
/usr/include/qt/QtWidgets/qscrollarea.h \
/usr/include/qt/QtWidgets/qsizepolicy.h \
/usr/include/qt/QtWidgets/qslider.h \
/usr/include/qt/QtWidgets/qstyle.h \
/usr/include/qt/QtWidgets/qstyleoption.h \
/usr/include/qt/QtWidgets/qtabbar.h \
/usr/include/qt/QtWidgets/qtabwidget.h \
/usr/include/qt/QtWidgets/qtwidgets-config.h \
/usr/include/qt/QtWidgets/qtwidgetsglobal.h \
/usr/include/qt/QtWidgets/qwidget.h \
/usr/include/sched.h \
/usr/include/stdc-predef.h \
/usr/include/stdio.h \
/usr/include/string.h \
/usr/include/strings.h \
/usr/include/sys/cdefs.h \
/usr/include/sys/syscall.h \
/usr/include/syscall.h \
/usr/include/time.h \
/usr/include/unistd.h \
/usr/include/wchar.h \
/usr/include/wctype.h \
/usr/lib/cmake/Qt5/Qt5Config.cmake \
/usr/lib/cmake/Qt5/Qt5ConfigVersion.cmake \
/usr/lib/cmake/Qt5/Qt5ModuleLocation.cmake \
/usr/lib/cmake/Qt5Core/Qt5CoreConfig.cmake \
/usr/lib/cmake/Qt5Core/Qt5CoreConfigExtras.cmake \
/usr/lib/cmake/Qt5Core/Qt5CoreConfigExtrasMkspecDir.cmake \
/usr/lib/cmake/Qt5Core/Qt5CoreConfigVersion.cmake \
/usr/lib/cmake/Qt5Core/Qt5CoreMacros.cmake \
/usr/lib/cmake/Qt5Gui/Qt5GuiConfig.cmake \
/usr/lib/cmake/Qt5Gui/Qt5GuiConfigExtras.cmake \
/usr/lib/cmake/Qt5Gui/Qt5GuiConfigVersion.cmake \
/usr/lib/cmake/Qt5Gui/Qt5Gui_QComposePlatformInputContextPlugin.cmake \
/usr/lib/cmake/Qt5Gui/Qt5Gui_QEglFSEmulatorIntegrationPlugin.cmake \
/usr/lib/cmake/Qt5Gui/Qt5Gui_QEglFSIntegrationPlugin.cmake \
/usr/lib/cmake/Qt5Gui/Qt5Gui_QEglFSKmsEglDeviceIntegrationPlugin.cmake \
/usr/lib/cmake/Qt5Gui/Qt5Gui_QEglFSKmsGbmIntegrationPlugin.cmake \
/usr/lib/cmake/Qt5Gui/Qt5Gui_QEglFSX11IntegrationPlugin.cmake \
/usr/lib/cmake/Qt5Gui/Qt5Gui_QEvdevKeyboardPlugin.cmake \
/usr/lib/cmake/Qt5Gui/Qt5Gui_QEvdevMousePlugin.cmake \
/usr/lib/cmake/Qt5Gui/Qt5Gui_QEvdevTabletPlugin.cmake \
/usr/lib/cmake/Qt5Gui/Qt5Gui_QEvdevTouchScreenPlugin.cmake \
/usr/lib/cmake/Qt5Gui/Qt5Gui_QGifPlugin.cmake \
/usr/lib/cmake/Qt5Gui/Qt5Gui_QGtk3ThemePlugin.cmake \
/usr/lib/cmake/Qt5Gui/Qt5Gui_QICNSPlugin.cmake \
/usr/lib/cmake/Qt5Gui/Qt5Gui_QICOPlugin.cmake \
/usr/lib/cmake/Qt5Gui/Qt5Gui_QIbusPlatformInputContextPlugin.cmake \
/usr/lib/cmake/Qt5Gui/Qt5Gui_QJp2Plugin.cmake \
/usr/lib/cmake/Qt5Gui/Qt5Gui_QJpegPlugin.cmake \
/usr/lib/cmake/Qt5Gui/Qt5Gui_QLibInputPlugin.cmake \
/usr/lib/cmake/Qt5Gui/Qt5Gui_QLinuxFbIntegrationPlugin.cmake \
/usr/lib/cmake/Qt5Gui/Qt5Gui_QMinimalEglIntegrationPlugin.cmake \
/usr/lib/cmake/Qt5Gui/Qt5Gui_QMinimalIntegrationPlugin.cmake \
/usr/lib/cmake/Qt5Gui/Qt5Gui_QMngPlugin.cmake \
/usr/lib/cmake/Qt5Gui/Qt5Gui_QOffscreenIntegrationPlugin.cmake \
/usr/lib/cmake/Qt5Gui/Qt5Gui_QPdfPlugin.cmake \
/usr/lib/cmake/Qt5Gui/Qt5Gui_QSvgIconPlugin.cmake \
/usr/lib/cmake/Qt5Gui/Qt5Gui_QSvgPlugin.cmake \
/usr/lib/cmake/Qt5Gui/Qt5Gui_QTgaPlugin.cmake \
/usr/lib/cmake/Qt5Gui/Qt5Gui_QTiffPlugin.cmake \
/usr/lib/cmake/Qt5Gui/Qt5Gui_QTsLibPlugin.cmake \
/usr/lib/cmake/Qt5Gui/Qt5Gui_QTuioTouchPlugin.cmake \
/usr/lib/cmake/Qt5Gui/Qt5Gui_QVirtualKeyboardPlugin.cmake \
/usr/lib/cmake/Qt5Gui/Qt5Gui_QVncIntegrationPlugin.cmake \
/usr/lib/cmake/Qt5Gui/Qt5Gui_QWaylandEglPlatformIntegrationPlugin.cmake \
/usr/lib/cmake/Qt5Gui/Qt5Gui_QWaylandIntegrationPlugin.cmake \
/usr/lib/cmake/Qt5Gui/Qt5Gui_QWaylandXCompositeEglPlatformIntegrationPlugin.cmake \
/usr/lib/cmake/Qt5Gui/Qt5Gui_QWaylandXCompositeGlxPlatformIntegrationPlugin.cmake \
/usr/lib/cmake/Qt5Gui/Qt5Gui_QWbmpPlugin.cmake \
/usr/lib/cmake/Qt5Gui/Qt5Gui_QWebGLIntegrationPlugin.cmake \
/usr/lib/cmake/Qt5Gui/Qt5Gui_QWebpPlugin.cmake \
/usr/lib/cmake/Qt5Gui/Qt5Gui_QXcbEglIntegrationPlugin.cmake \
/usr/lib/cmake/Qt5Gui/Qt5Gui_QXcbGlxIntegrationPlugin.cmake \
/usr/lib/cmake/Qt5Gui/Qt5Gui_QXcbIntegrationPlugin.cmake \
/usr/lib/cmake/Qt5Gui/Qt5Gui_QXdgDesktopPortalThemePlugin.cmake \
/usr/lib/cmake/Qt5Widgets/Qt5WidgetsConfig.cmake \
/usr/lib/cmake/Qt5Widgets/Qt5WidgetsConfigExtras.cmake \
/usr/lib/cmake/Qt5Widgets/Qt5WidgetsConfigVersion.cmake \
/usr/lib/cmake/Qt5Widgets/Qt5WidgetsMacros.cmake \
/usr/lib/cmake/opencv4/OpenCVConfig-version.cmake \
/usr/lib/cmake/opencv4/OpenCVConfig.cmake \
/usr/lib/cmake/opencv4/OpenCVModules-release.cmake \
/usr/lib/cmake/opencv4/OpenCVModules.cmake \
/usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/include/limits.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/include/stdarg.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/include/stddef.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/include/stdint.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/include/syslimits.h \
/usr/share/cmake/Modules/CMakeCXXInformation.cmake \
/usr/share/cmake/Modules/CMakeCommonLanguageInclude.cmake \
/usr/share/cmake/Modules/CMakeGenericSystem.cmake \
/usr/share/cmake/Modules/CMakeInitializeConfigs.cmake \
/usr/share/cmake/Modules/CMakeLanguageInformation.cmake \
/usr/share/cmake/Modules/CMakeParseArguments.cmake \
/usr/share/cmake/Modules/CMakeSystemSpecificInformation.cmake \
/usr/share/cmake/Modules/CMakeSystemSpecificInitialize.cmake \
/usr/share/cmake/Modules/Compiler/CMakeCommonCompilerMacros.cmake \
/usr/share/cmake/Modules/Compiler/GNU-CXX.cmake \
/usr/share/cmake/Modules/Compiler/GNU.cmake \
/usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake \
/usr/share/cmake/Modules/FindPackageMessage.cmake \
/usr/share/cmake/Modules/FindPkgConfig.cmake \
/usr/share/cmake/Modules/GNUInstallDirs.cmake \
/usr/share/cmake/Modules/Platform/Linux-GNU-CXX.cmake \
/usr/share/cmake/Modules/Platform/Linux-GNU.cmake \
/usr/share/cmake/Modules/Platform/Linux-Initialize.cmake \
/usr/share/cmake/Modules/Platform/Linux.cmake \
/usr/share/cmake/Modules/Platform/UnixPaths.cmake \
/home/leca/projects/qt/checks-parser/adjustpicturedialog.ui \
/home/leca/projects/qt/checks-parser/mainwindow.ui \
/home/leca/projects/qt/checks-parser/outputdialog.ui \
/home/leca/projects/qt/checks-parser/settingsdialog.ui \
/usr/bin/cmake

View File

@@ -1,468 +0,0 @@
#define __DBL_MIN_EXP__ (-1021)
#define __cpp_nontype_template_parameter_auto 201606L
#define __UINT_LEAST16_MAX__ 0xffff
#define __FLT16_HAS_QUIET_NAN__ 1
#define __ATOMIC_ACQUIRE 2
#define __FLT128_MAX_10_EXP__ 4932
#define __FLT_MIN__ 1.17549435082228750796873653722224568e-38F
#define __GCC_IEC_559_COMPLEX 2
#define __cpp_aggregate_nsdmi 201304L
#define __UINT_LEAST8_TYPE__ unsigned char
#define __SIZEOF_FLOAT80__ 16
#define __BFLT16_DENORM_MIN__ 9.18354961579912115600575419704879436e-41BF16
#define __INTMAX_C(c) c ## L
#define __CHAR_BIT__ 8
#define __UINT8_MAX__ 0xff
#define __SCHAR_WIDTH__ 8
#define __WINT_MAX__ 0xffffffffU
#define __FLT32_MIN_EXP__ (-125)
#define __cpp_static_assert 201411L
#define __BFLT16_MIN_10_EXP__ (-37)
#define QT_GUI_LIB 1
#define __ORDER_LITTLE_ENDIAN__ 1234
#define __WCHAR_MAX__ 0x7fffffff
#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1
#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1
#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1
#define __GCC_ATOMIC_CHAR_LOCK_FREE 2
#define __GCC_IEC_559 2
#define __FLT32X_DECIMAL_DIG__ 17
#define __FLT_EVAL_METHOD__ 0
#define __cpp_binary_literals 201304L
#define __FLT64_DECIMAL_DIG__ 17
#define __cpp_noexcept_function_type 201510L
#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2
#define __cpp_variadic_templates 200704L
#define __UINT_FAST64_MAX__ 0xffffffffffffffffUL
#define __SIG_ATOMIC_TYPE__ int
#define __DBL_MIN_10_EXP__ (-307)
#define __FINITE_MATH_ONLY__ 0
#define __cpp_variable_templates 201304L
#define __FLT32X_MAX_EXP__ 1024
#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1
#define __FLT32_HAS_DENORM__ 1
#define __UINT_FAST8_MAX__ 0xff
#define __cpp_rvalue_reference 200610L
#define __cpp_nested_namespace_definitions 201411L
#define __DEC64_MAX_EXP__ 385
#define __INT8_C(c) c
#define __LDBL_HAS_INFINITY__ 1
#define __INT_LEAST8_WIDTH__ 8
#define __cpp_variadic_using 201611L
#define __UINT_LEAST64_MAX__ 0xffffffffffffffffUL
#define __INT_LEAST8_MAX__ 0x7f
#define __cpp_attributes 200809L
#define __cpp_capture_star_this 201603L
#define __SHRT_MAX__ 0x7fff
#define __LDBL_MAX__ 1.18973149535723176502126385303097021e+4932L
#define __FLT64X_MAX_10_EXP__ 4932
#define __cpp_if_constexpr 201606L
#define __BFLT16_MAX_10_EXP__ 38
#define __BFLT16_MAX_EXP__ 128
#define __LDBL_IS_IEC_60559__ 1
#define QT_NO_DEBUG 1
#define __FLT64X_HAS_QUIET_NAN__ 1
#define __UINT_LEAST8_MAX__ 0xff
#define __GCC_ATOMIC_BOOL_LOCK_FREE 2
#define __FLT128_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966F128
#define __UINTMAX_TYPE__ long unsigned int
#define __cpp_nsdmi 200809L
#define __BFLT16_DECIMAL_DIG__ 4
#define __linux 1
#define __DEC32_EPSILON__ 1E-6DF
#define __FLT_EVAL_METHOD_TS_18661_3__ 0
#define __UINT32_MAX__ 0xffffffffU
#define __GXX_EXPERIMENTAL_CXX0X__ 1
#define __DBL_DENORM_MIN__ double(4.94065645841246544176568792868221372e-324L)
#define __FLT128_MIN_EXP__ (-16381)
#define __WINT_MIN__ 0U
#define __FLT128_MIN_10_EXP__ (-4931)
#define __FLT32X_IS_IEC_60559__ 1
#define __INT_LEAST16_WIDTH__ 16
#define __SCHAR_MAX__ 0x7f
#define __FLT128_MANT_DIG__ 113
#define __WCHAR_MIN__ (-__WCHAR_MAX__ - 1)
#define __INT64_C(c) c ## L
#define __SSP_STRONG__ 3
#define __GCC_ATOMIC_POINTER_LOCK_FREE 2
#define __ATOMIC_SEQ_CST 5
#define __unix 1
#define __INT_LEAST64_MAX__ 0x7fffffffffffffffL
#define __FLT32X_MANT_DIG__ 53
#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2
#define __cpp_aligned_new 201606L
#define __FLT32_MAX_10_EXP__ 38
#define __FLT64X_EPSILON__ 1.08420217248550443400745280086994171e-19F64x
#define __STDC_HOSTED__ 1
#define __DEC64_MIN_EXP__ (-382)
#define __cpp_decltype_auto 201304L
#define __DBL_DIG__ 15
#define __FLT_EPSILON__ 1.19209289550781250000000000000000000e-7F
#define __GXX_WEAK__ 1
#define __SHRT_WIDTH__ 16
#define __FLT32_IS_IEC_60559__ 1
#define __LDBL_MIN__ 3.36210314311209350626267781732175260e-4932L
#define __DBL_IS_IEC_60559__ 1
#define __DEC32_MAX__ 9.999999E96DF
#define __cpp_threadsafe_static_init 200806L
#define __cpp_enumerator_attributes 201411L
#define __FLT64X_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951F64x
#define __FLT32X_HAS_INFINITY__ 1
#define __unix__ 1
#define __INT_WIDTH__ 32
#define __STDC_IEC_559__ 1
#define __STDC_ISO_10646__ 201706L
#define __DECIMAL_DIG__ 21
#define __STDC_IEC_559_COMPLEX__ 1
#define __FLT64_EPSILON__ 2.22044604925031308084726333618164062e-16F64
#define __gnu_linux__ 1
#define __INT16_MAX__ 0x7fff
#define __FLT64_MIN_EXP__ (-1021)
#define __FLT64X_MIN_10_EXP__ (-4931)
#define __LDBL_HAS_QUIET_NAN__ 1
#define __cpp_return_type_deduction 201304L
#define __FLT16_MIN_EXP__ (-13)
#define __FLT64_MANT_DIG__ 53
#define __FLT64X_MANT_DIG__ 64
#define __BFLT16_DIG__ 2
#define __GNUC__ 14
#define __GXX_RTTI 1
#define __pie__ 2
#define __MMX__ 1
#define __FLT_HAS_DENORM__ 1
#define __SIZEOF_LONG_DOUBLE__ 16
#define __BIGGEST_ALIGNMENT__ 16
#define __STDC_UTF_16__ 1
#define __FLT64_MAX_10_EXP__ 308
#define __BFLT16_IS_IEC_60559__ 0
#define __FLT16_MAX_10_EXP__ 4
#define __cpp_delegating_constructors 200604L
#define __DBL_MAX__ double(1.79769313486231570814527423731704357e+308L)
#define __cpp_raw_strings 200710L
#define __INT_FAST32_MAX__ 0x7fffffffffffffffL
#define __DBL_HAS_INFINITY__ 1
#define __INT64_MAX__ 0x7fffffffffffffffL
#define __SIZEOF_FLOAT__ 4
#define __HAVE_SPECULATION_SAFE_VALUE 1
#define __cpp_fold_expressions 201603L
#define __DEC32_MIN_EXP__ (-94)
#define __INTPTR_WIDTH__ 64
#define __UINT_LEAST32_MAX__ 0xffffffffU
#define __FLT32X_HAS_DENORM__ 1
#define __INT_FAST16_TYPE__ long int
#define __MMX_WITH_SSE__ 1
#define __LDBL_HAS_DENORM__ 1
#define QT_WIDGETS_LIB 1
#define __SEG_GS 1
#define __BFLT16_EPSILON__ 7.81250000000000000000000000000000000e-3BF16
#define __cplusplus 201703L
#define __cpp_ref_qualifiers 200710L
#define __DEC32_MIN__ 1E-95DF
#define __DEPRECATED 1
#define __cpp_rvalue_references 200610L
#define __DBL_MAX_EXP__ 1024
#define __WCHAR_WIDTH__ 32
#define __FLT32_MAX__ 3.40282346638528859811704183484516925e+38F32
#define __DEC128_EPSILON__ 1E-33DL
#define __FLT16_DECIMAL_DIG__ 5
#define __SSE2_MATH__ 1
#define __ATOMIC_HLE_RELEASE 131072
#define __PTRDIFF_MAX__ 0x7fffffffffffffffL
#define __amd64 1
#define __ATOMIC_HLE_ACQUIRE 65536
#define __GNUG__ 14
#define __LONG_LONG_MAX__ 0x7fffffffffffffffLL
#define __SIZEOF_SIZE_T__ 8
#define __BFLT16_HAS_INFINITY__ 1
#define __FLT64X_MIN_EXP__ (-16381)
#define __SIZEOF_WINT_T__ 4
#define __FLT32X_DIG__ 15
#define __LONG_LONG_WIDTH__ 64
#define __cpp_initializer_lists 200806L
#define __FLT32_MAX_EXP__ 128
#define ABI_ID "ELF"
#define __cpp_hex_float 201603L
#define __GXX_ABI_VERSION 1019
#define __FLT_MIN_EXP__ (-125)
#define __GCC_HAVE_DWARF2_CFI_ASM 1
#define __x86_64 1
#define __cpp_lambdas 200907L
#define __INT_FAST64_TYPE__ long int
#define __BFLT16_MAX__ 3.38953138925153547590470800371487867e+38BF16
#define __FLT64_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F64
#define __cpp_template_auto 201606L
#define __FLT16_DENORM_MIN__ 5.96046447753906250000000000000000000e-8F16
#define __FLT128_EPSILON__ 1.92592994438723585305597794258492732e-34F128
#define __FLT64X_NORM_MAX__ 1.18973149535723176502126385303097021e+4932F64x
#define __SIZEOF_POINTER__ 8
#define __SIZE_TYPE__ long unsigned int
#define __LP64__ 1
#define __DBL_HAS_QUIET_NAN__ 1
#define __FLT32X_EPSILON__ 2.22044604925031308084726333618164062e-16F32x
#define __LDBL_MAX_EXP__ 16384
#define __DECIMAL_BID_FORMAT__ 1
#define __FLT64_MIN_10_EXP__ (-307)
#define __FLT16_MIN_10_EXP__ (-4)
#define __FLT64X_DECIMAL_DIG__ 21
#define __DEC128_MIN__ 1E-6143DL
#define __REGISTER_PREFIX__
#define __UINT16_MAX__ 0xffff
#define __FLT128_HAS_INFINITY__ 1
#define __FLT32_MIN__ 1.17549435082228750796873653722224568e-38F32
#define __UINT8_TYPE__ unsigned char
#define __FLT_DIG__ 6
#define __NO_INLINE__ 1
#define __DEC_EVAL_METHOD__ 2
#define __FLT_MANT_DIG__ 24
#define __LDBL_DECIMAL_DIG__ 21
#define __VERSION__ "14.2.1 20240910"
#define __UINT64_C(c) c ## UL
#define __cpp_unicode_characters 201411L
#define _STDC_PREDEF_H 1
#define __INT_LEAST32_MAX__ 0x7fffffff
#define __GCC_ATOMIC_INT_LOCK_FREE 2
#define __FLT128_MAX_EXP__ 16384
#define __FLT32_MANT_DIG__ 24
#define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__
#define SIZEOF_DPTR (sizeof(void*))
#define __FLT32X_MIN_EXP__ (-1021)
#define __STDC_IEC_60559_COMPLEX__ 201404L
#define __cpp_aggregate_bases 201603L
#define __BFLT16_MIN__ 1.17549435082228750796873653722224568e-38BF16
#define __FLT128_HAS_DENORM__ 1
#define __FLT32_DECIMAL_DIG__ 9
#define __FLT128_DIG__ 33
#define __INT32_C(c) c
#define __DEC64_EPSILON__ 1E-15DD
#define __ORDER_PDP_ENDIAN__ 3412
#define __DEC128_MIN_EXP__ (-6142)
#define __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL
#define __INT_FAST32_TYPE__ long int
#define __UINT_LEAST16_TYPE__ short unsigned int
#define __DEC128_MAX_EXP__ 6145
#define unix 1
#define __DBL_HAS_DENORM__ 1
#define __cpp_rtti 199711L
#define __UINT64_MAX__ 0xffffffffffffffffUL
#define __FLT_IS_IEC_60559__ 1
#define __GNUC_WIDE_EXECUTION_CHARSET_NAME "UTF-32LE"
#define __FLT64X_DIG__ 18
#define __INT8_TYPE__ signed char
#define __cpp_digit_separators 201309L
#define __ELF__ 1
#define __GCC_ASM_FLAG_OUTPUTS__ 1
#define __UINT32_TYPE__ unsigned int
#define __BFLT16_HAS_QUIET_NAN__ 1
#define __FLT_RADIX__ 2
#define __INT_LEAST16_TYPE__ short int
#define __LDBL_EPSILON__ 1.08420217248550443400745280086994171e-19L
#define __UINTMAX_C(c) c ## UL
#define __FLT16_DIG__ 3
#define __k8 1
#define __FLT32X_MIN__ 2.22507385850720138309023271733240406e-308F32x
#define __SIG_ATOMIC_MAX__ 0x7fffffff
#define __cpp_constexpr 201603L
#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2
#define __USER_LABEL_PREFIX__
#define __STDC_IEC_60559_BFP__ 201404L
#define __SIZEOF_PTRDIFF_T__ 8
#define __FLT64X_HAS_INFINITY__ 1
#define __SIZEOF_LONG__ 8
#define __LDBL_DIG__ 18
#define __FLT64_IS_IEC_60559__ 1
#define __x86_64__ 1
#define __FLT16_IS_IEC_60559__ 1
#define __FLT16_MAX_EXP__ 16
#define __DEC32_SUBNORMAL_MIN__ 0.000001E-95DF
#define __INT_FAST16_MAX__ 0x7fffffffffffffffL
#define __GCC_CONSTRUCTIVE_SIZE 64
#define __FLT64_DIG__ 15
#define __UINT_FAST32_MAX__ 0xffffffffffffffffUL
#define __UINT_LEAST64_TYPE__ long unsigned int
#define __FLT16_EPSILON__ 9.76562500000000000000000000000000000e-4F16
#define __FLT_HAS_QUIET_NAN__ 1
#define __FLT_MAX_10_EXP__ 38
#define __FLT64X_HAS_DENORM__ 1
#define __DEC128_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143DL
#define __FLT_HAS_INFINITY__ 1
#define __GNUC_EXECUTION_CHARSET_NAME "UTF-8"
#define __cpp_unicode_literals 200710L
#define __UINT_FAST16_TYPE__ long unsigned int
#define __DEC64_MAX__ 9.999999999999999E384DD
#define __INT_FAST32_WIDTH__ 64
#define __CHAR16_TYPE__ short unsigned int
#define __PRAGMA_REDEFINE_EXTNAME 1
#define __SIZE_WIDTH__ 64
#define __SEG_FS 1
#define __INT_LEAST16_MAX__ 0x7fff
#define __FLT16_NORM_MAX__ 6.55040000000000000000000000000000000e+4F16
#define __DEC64_MANT_DIG__ 16
#define __FLT32_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F32
#define __SIG_ATOMIC_WIDTH__ 32
#define __GCC_DESTRUCTIVE_SIZE 64
#define __INT_LEAST64_TYPE__ long int
#define __INT16_TYPE__ short int
#define __INT_LEAST8_TYPE__ signed char
#define __FLT16_MAX__ 6.55040000000000000000000000000000000e+4F16
#define __FLT128_MIN__ 3.36210314311209350626267781732175260e-4932F128
#define __cpp_structured_bindings 201606L
#define __SIZEOF_INT__ 4
#define __DEC32_MAX_EXP__ 97
#define __INT_FAST8_MAX__ 0x7f
#define __FLT128_MAX__ 1.18973149535723176508575932662800702e+4932F128
#define __INTPTR_MAX__ 0x7fffffffffffffffL
#define __cpp_sized_deallocation 201309L
#define __cpp_guaranteed_copy_elision 201606L
#define linux 1
#define __FLT64_HAS_QUIET_NAN__ 1
#define __FLT32_MIN_10_EXP__ (-37)
#define __EXCEPTIONS 1
#define __UINT16_C(c) c
#define __PTRDIFF_WIDTH__ 64
#define __LDBL_MANT_DIG__ 64
#define __cpp_range_based_for 201603L
#define __INT_FAST16_WIDTH__ 64
#define __FLT64_HAS_INFINITY__ 1
#define __FLT64X_MAX__ 1.18973149535723176502126385303097021e+4932F64x
#define __FLT16_HAS_INFINITY__ 1
#define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 16
#define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1)
#define __code_model_small__ 1
#define __GCC_ATOMIC_LONG_LOCK_FREE 2
#define __cpp_nontype_template_args 201411L
#define __DEC32_MANT_DIG__ 7
#define __k8__ 1
#define __INTPTR_TYPE__ long int
#define __UINT16_TYPE__ short unsigned int
#define __WCHAR_TYPE__ int
#define __pic__ 2
#define __UINTPTR_MAX__ 0xffffffffffffffffUL
#define __INT_FAST64_WIDTH__ 64
#define __cpp_decltype 200707L
#define __INT_FAST64_MAX__ 0x7fffffffffffffffL
#define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1
#define __FLT_NORM_MAX__ 3.40282346638528859811704183484516925e+38F
#define __FLT32_HAS_INFINITY__ 1
#define __FLT64X_MAX_EXP__ 16384
#define __UINT_FAST64_TYPE__ long unsigned int
#define __cpp_inline_variables 201606L
#define __BFLT16_MIN_EXP__ (-125)
#define __INT_MAX__ 0x7fffffff
#define __linux__ 1
#define __INT64_TYPE__ long int
#define __FLT_MAX_EXP__ 128
#define __ORDER_BIG_ENDIAN__ 4321
#define __DBL_MANT_DIG__ 53
#define __cpp_inheriting_constructors 201511L
#define QT_CORE_LIB 1
#define __SIZEOF_FLOAT128__ 16
#define __BFLT16_MANT_DIG__ 8
#define __DEC64_MIN__ 1E-383DD
#define __WINT_TYPE__ unsigned int
#define __UINT_LEAST32_TYPE__ unsigned int
#define __SIZEOF_SHORT__ 2
#define __FLT32_NORM_MAX__ 3.40282346638528859811704183484516925e+38F32
#define __SSE__ 1
#define __LDBL_MIN_EXP__ (-16381)
#define __FLT64_MAX__ 1.79769313486231570814527423731704357e+308F64
#define __amd64__ 1
#define __WINT_WIDTH__ 32
#define __INT_LEAST64_WIDTH__ 64
#define __FLT32X_MAX_10_EXP__ 308
#define __cpp_namespace_attributes 201411L
#define __SIZEOF_INT128__ 16
#define __FLT16_MIN__ 6.10351562500000000000000000000000000e-5F16
#define __FLT64X_IS_IEC_60559__ 1
#define __LDBL_MAX_10_EXP__ 4932
#define __ATOMIC_RELAXED 0
#define __DBL_EPSILON__ double(2.22044604925031308084726333618164062e-16L)
#define __INT_LEAST32_TYPE__ int
#define _LP64 1
#define __UINT8_C(c) c
#define __FLT64_MAX_EXP__ 1024
#define __SIZEOF_WCHAR_T__ 4
#define __GNUC_PATCHLEVEL__ 1
#define __FLT128_NORM_MAX__ 1.18973149535723176508575932662800702e+4932F128
#define __FLT64_NORM_MAX__ 1.79769313486231570814527423731704357e+308F64
#define __FLT128_HAS_QUIET_NAN__ 1
#define __INTMAX_MAX__ 0x7fffffffffffffffL
#define __INT_FAST8_TYPE__ signed char
#define __FLT64X_MIN__ 3.36210314311209350626267781732175260e-4932F64x
#define __STDCPP_THREADS__ 1
#define __BFLT16_HAS_DENORM__ 1
#define __GNUC_STDC_INLINE__ 1
#define __FLT64_HAS_DENORM__ 1
#define __FLT32_EPSILON__ 1.19209289550781250000000000000000000e-7F32
#define __FLT16_HAS_DENORM__ 1
#define __DBL_DECIMAL_DIG__ 17
#define __STDC_UTF_32__ 1
#define __INT_FAST8_WIDTH__ 8
#define __FXSR__ 1
#define __FLT32X_MAX__ 1.79769313486231570814527423731704357e+308F32x
#define __DBL_NORM_MAX__ double(1.79769313486231570814527423731704357e+308L)
#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__
#define __INTMAX_WIDTH__ 64
#define __cpp_runtime_arrays 198712L
#define __FLT32_DIG__ 6
#define __UINT64_TYPE__ long unsigned int
#define __UINT32_C(c) c ## U
#define __cpp_alias_templates 200704L
#define __FLT_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F
#define __FLT128_IS_IEC_60559__ 1
#define __INT8_MAX__ 0x7f
#define __LONG_WIDTH__ 64
#define __DBL_MIN__ double(2.22507385850720138309023271733240406e-308L)
#define __PIC__ 2
#define __INT32_MAX__ 0x7fffffff
#define __UINT_FAST32_TYPE__ long unsigned int
#define __FLT16_MANT_DIG__ 11
#define __FLT32X_NORM_MAX__ 1.79769313486231570814527423731704357e+308F32x
#define __CHAR32_TYPE__ unsigned int
#define __FLT_MAX__ 3.40282346638528859811704183484516925e+38F
#define __SSE2__ 1
#define __cpp_deduction_guides 201703L
#define __BFLT16_NORM_MAX__ 3.38953138925153547590470800371487867e+38BF16
#define __INT32_TYPE__ int
#define __SIZEOF_DOUBLE__ 8
#define __cpp_exceptions 199711L
#define __FLT_MIN_10_EXP__ (-37)
#define __FLT64_MIN__ 2.22507385850720138309023271733240406e-308F64
#define __INT_LEAST32_WIDTH__ 32
#define __INTMAX_TYPE__ long int
#define __GLIBCXX_BITSIZE_INT_N_0 128
#define __FLT32X_HAS_QUIET_NAN__ 1
#define __ATOMIC_CONSUME 1
#define __GNUC_MINOR__ 2
#define __GLIBCXX_TYPE_INT_N_0 __int128
#define __UINTMAX_MAX__ 0xffffffffffffffffUL
#define __PIE__ 2
#define __FLT32X_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F32x
#define __cpp_template_template_args 201611L
#define __DBL_MAX_10_EXP__ 308
#define __LDBL_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951L
#define __INT16_C(c) c
#define __STDC__ 1
#define __PTRDIFF_TYPE__ long int
#define __LONG_MAX__ 0x7fffffffffffffffL
#define __FLT32X_MIN_10_EXP__ (-307)
#define __UINTPTR_TYPE__ long unsigned int
#define __DEC64_SUBNORMAL_MIN__ 0.000000000000001E-383DD
#define __DEC128_MANT_DIG__ 34
#define __LDBL_MIN_10_EXP__ (-4931)
#define __cpp_generic_lambdas 201304L
#define __SSE_MATH__ 1
#define __SIZEOF_LONG_LONG__ 8
#define __cpp_user_defined_literals 200809L
#define __FLT128_DECIMAL_DIG__ 36
#define __GCC_ATOMIC_LLONG_LOCK_FREE 2
#define __FLT32_HAS_QUIET_NAN__ 1
#define __FLT_DECIMAL_DIG__ 9
#define __UINT_FAST16_MAX__ 0xffffffffffffffffUL
#define __LDBL_NORM_MAX__ 1.18973149535723176502126385303097021e+4932L
#define __GCC_ATOMIC_SHORT_LOCK_FREE 2
#define __SIZE_MAX__ 0xffffffffffffffffUL
#define __UINT_FAST8_TYPE__ unsigned char
#define _GNU_SOURCE 1
#define __cpp_init_captures 201304L
#define __ATOMIC_ACQ_REL 4
#define __ATOMIC_RELEASE 3

View File

@@ -1,7 +0,0 @@
// This file is autogenerated. Changes will be overwritten.
#include "EWIEGA46WW/moc_adjustpicturedialog.cpp"
#include "T6NPIT3GCD/moc_imageredactor.cpp"
#include "WWEXDOY447/moc_imageview.cpp"
#include "EWIEGA46WW/moc_mainwindow.cpp"
#include "EWIEGA46WW/moc_outputdialog.cpp"
#include "EWIEGA46WW/moc_settingsdialog.cpp"

View File

@@ -1,39 +0,0 @@
FROM archlinux
#Update
RUN pacman --noconfirm -Sy
#Build dependencies
RUN pacman --noconfirm -S sudo cmake git coreutils base-devel eigen
#Dependencies from repos
RUN pacman --noconfirm -S qt5-base mbedtls
RUN echo "MAKEFLAGS=\"-j${nproc}\"" >> /etc/makepkg.conf
RUN useradd -ms /bin/bash checks-parser
RUN usermod -a -G wheel checks-parser
RUN echo "checks-parser ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
USER checks-parser
WORKDIR /home/checks-parser
#Dependencies from sources
RUN git clone https://aur.archlinux.org/yay.git && \
cd yay && \
makepkg -si --noconfirm && \
cd .. && sudo rm -rf yay
RUN yay -Sy --noconfirm gtkglext
RUN yay -S --noconfirm cpr opencv opencv2 nlohmann-json tesseract tesseract-data-rus
#building
WORKDIR /home/checks-parser
RUN git clone https://git.foxarmy.org/leca/checks-parser && \
cd checks-parser && \
mkdir build && cd build && \
cmake .. && \
make -j ${nproc} && \
sudo make install
ENTRYPOINT ["checks-parser"]

View File

@@ -1,34 +0,0 @@
FROM debian:bullseye
#Update
RUN apt update -y && apt upgrade -y
#Build dependencies
RUN apt install -y git build-essential cmake
#Dependencies from repos (qt5, openssl, tesseract and lang package)
RUN apt install -y qtbase5-dev openssl libmbedtls-dev tesseract-ocr tesseract-ocr-rus libopencv-dev
#Dependencies from sources
#cpr
WORKDIR /root
RUN git clone https://github.com/whoshuu/cpr.git && \
cd cpr && \
mkdir build && cd build && \
cmake .. && \
make -j ${nproc} && \
make install && \
cd /root && rm -rf cpr
#building
WORKDIR /root
RUN git clone https://git.foxarmy.org/leca/checks-parser && \
cd checks-parser && \
mkdir build && cd build &&\
cmake .. && \
make -j ${nproc} && \
make install && \
ENTRYPOINT ["checks-parser"]

View File

@@ -1 +0,0 @@
checks-parser.png

View File

@@ -1 +0,0 @@
usr/bin/checks-parser

Binary file not shown.

Before

Width:  |  Height:  |  Size: 627 KiB

5
deploy/appimage/AppRun Normal file
View File

@@ -0,0 +1,5 @@
#!/bin/bash
export TESSDATA_PREFIX=$APPDIR/usr/share/tesseract-ocr/4.00/tessdata
export LD_LIBRARY_PATH=$APPDIR/usr/lib
$APPDIR/usr/bin/checks-parser

View File

@@ -0,0 +1,31 @@
FROM checks_parser_base_ubuntu
RUN DEBIAN_FRONTEND=noninteractive apt update
RUN DEBIAN_FRONTEND=noninteractive apt install -y wget git cmake make gcc g++ fuse libboost-regex-dev
ARG pkgname=$name
ARG pkgver=$version
ARG revision
WORKDIR /
# Download linuxdeployqt
RUN wget https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage -O /usr/bin/linuxdeployqt && \
chmod +x /usr/bin/linuxdeployqt
# Prepare AppDir and its files
WORKDIR /app
RUN mkdir -p AppDir/usr/bin
COPY deploy/appimage/checks-parser.desktop AppDir
COPY assets/icons/icon.png AppDir/checks-parser.png
COPY deploy/appimage/AppRun AppDir
RUN chmod +x AppDir/AppRun
RUN cp build/checks-parser /app/AppDir/usr/bin
RUN PATH=/usr/lib/qt5/bin/:$PATH linuxdeployqt --appimage-extract-and-run AppDir/usr/bin/checks-parser -no-copy-copyright-files -appimage
RUN mkdir -p /output
RUN echo "cp Checks_parser-x86_64.AppImage /output/Checks_parser-x86_64_${pkgver}-${revision}.AppImage" > /deploy.sh
RUN chmod +x /deploy.sh
ENTRYPOINT ["bash", "/deploy.sh"]

View File

@@ -1,8 +1,6 @@
[Desktop Entry]
Name=Checks parser
Type=Application
Terminal=false
NoDisplay=false
Exec=checks-parser
Categories=Utility;
Exec=usr/bin/checks-parser
Icon=checks-parser
Type=Application
Categories=Utility;

View File

@@ -0,0 +1,28 @@
FROM archlinux:latest
ARG pkgname=$name
ARG pkgver=$version
ARG revision
RUN mkdir -p /output
RUN pacman --noconfirm -Syu base base-devel sudo
RUN echo "sudo cp ${pkgname}-bin-${pkgver}-$revision-x86_64.pkg.tar.zst /output" > /deploy.sh
RUN chmod +x /deploy.sh
RUN useradd -m builder
RUN usermod -a -G wheel builder
RUN chown -R builder:builder /output
RUN echo "%wheel ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers
USER builder
WORKDIR /home/builder/checks-parser
COPY deploy/archlinux/bin/PKGBUILD PKGBUILD
RUN sed -i "s|\$pkgname|${pkgname}-bin|g" PKGBUILD
RUN sed -i "s|\$pkgver|${pkgver}|g" PKGBUILD
RUN sed -i "s|\$pkgrel|$revision|g" PKGBUILD
RUN makepkg -s --noconfirm
#ENTRYPOINT ["bash"]
ENTRYPOINT ["bash", "/deploy.sh"]

View File

@@ -0,0 +1,40 @@
# Maintainer: Leca <leca@foxarmy.org>
pkgname=$pkgname
pkgver=$pkgver
pkgrel=$pkgrel
epoch=
pkgdesc="Utility for parsing checks(receipts) to csv"
arch=('x86_64')
url="https://git.foxarmy.org/leca/checks-parser"
license=('GPL-3.0-or-later')
groups=()
depends=('qt6-base' 'opencv' 'nlohmann-json' 'qrencode' 'boost')
makedepends=('cmake' 'make' 'gcc' 'git' 'qt6-tools')
checkdepends=()
optdepends=()
provides=()
conflicts=("checks-parser-git")
replaces=()
backup=()
options=()
install=
changelog=
_releasesurl=https://git.foxarmy.org/leca/checks-parser/releases/download/$pkgver
source=("checks-parser-bin::https+$releaseurl/checks-parser-git-${pkgver}_nightly-$pkgrel-x86_64.pkg.tar.zst")
noextract=()
sha256sums=('SKIP')
build() {
cd "$pkgname"
mkdir build && cd build
cmake -DBUILD_TRANSLATIONS=on ..
make -j ${nproc}
}
package() {
cd "$pkgname"
cd build
install -Dm644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
##install -Dm755
make DESTDIR="$pkgdir/" PREFIX="/usr" install
}

View File

@@ -0,0 +1,28 @@
FROM archlinux:latest
ARG pkgname=$name
ARG pkgver=$version
ARG revision
RUN mkdir -p /output
RUN pacman --noconfirm -Syu base base-devel sudo
RUN echo "sudo cp ${pkgname}-git-${pkgver}_nightly-$revision-x86_64.pkg.tar.zst /output" > /deploy.sh
RUN chmod +x /deploy.sh
RUN useradd -m builder
RUN usermod -a -G wheel builder
RUN chown -R builder:builder /output
RUN echo "%wheel ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers
USER builder
WORKDIR /home/builder/checks-parser
COPY deploy/archlinux/git/PKGBUILD PKGBUILD
RUN sed -i "s|\$pkgname|${pkgname}-git|g" PKGBUILD
RUN sed -i "s|\$pkgver|${pkgver}_nightly|g" PKGBUILD
RUN sed -i "s|\$pkgrel|$revision|g" PKGBUILD
RUN makepkg -s --noconfirm
#ENTRYPOINT ["bash"]
ENTRYPOINT ["bash", "/deploy.sh"]

View File

@@ -0,0 +1,39 @@
# Maintainer: Leca <leca@foxarmy.org>
pkgname=$pkgname
pkgver=$pkgver
pkgrel=$pkgrel
epoch=
pkgdesc="Utility for parsing checks(receipts) to csv"
arch=('x86_64')
url="https://git.foxarmy.org/leca/checks-parser"
license=('GPL-3.0-or-later')
groups=()
depends=('qt6-base' 'opencv' 'nlohmann-json' 'qrencode' 'boost')
makedepends=('cmake' 'make' 'gcc' 'git' 'qt6-tools')
checkdepends=()
optdepends=()
provides=()
conflicts=("checks-parser-bin")
replaces=()
backup=()
options=()
install=
changelog=
source=("checks-parser-git::git+$url")
noextract=()
sha256sums=('SKIP')
build() {
cd "$pkgname"
mkdir build && cd build
cmake -DBUILD_TRANSLATIONS=on ..
make -j ${nproc}
}
package() {
cd "$pkgname"
cd build
install -Dm644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
##install -Dm755
make DESTDIR="$pkgdir/" PREFIX="/usr" install
}

View File

@@ -0,0 +1,30 @@
FROM archlinux:latest
ARG pkgname=$name
ARG pkgver=$version
ARG revision
RUN mkdir -p /output
RUN pacman --noconfirm -Syu base base-devel sudo
RUN chmod +x /deploy.sh
# RUN useradd -m builder
# RUN usermod -a -G wheel builder
# RUN chown -R builder:builder /output
# RUN echo "%wheel ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers
# USER builder
# WORKDIR /home/builder/checks-parser
COPY deploy/archlinux/bin/PKGBUILD PKGBUILD
RUN sed -i "s|\$pkgname|${pkgname}-bin|g" PKGBUILD
RUN sed -i "s|\$pkgver|${pkgver}|g" PKGBUILD
RUN sed -i "s|\$pkgrel|$revision|g" PKGBUILD
RUN makepkg -s --noconfirm
RUN echo "sudo cp ${pkgname}-bin-${pkgver}-$revision-x86_64.pkg.tar.zst /output" > /deploy.sh
ENTRYPOINT ["bash", "/deploy.sh"]

View File

@@ -0,0 +1,33 @@
FROM ubuntu:24.04
# Installing dependencies
RUN apt update
RUN DEBIAN_FRONTEND=noninteractive apt install -y qt6-base-dev qt6-tools-dev openssl libmbedtls-dev libopencv-dev nlohmann-json3-dev libcurl4-openssl-dev libqrencode-dev
RUN DEBIAN_FRONTEND=noninteractive apt install -y wget git cmake make gcc g++ fuse libboost-regex-dev
WORKDIR /app
#Copy only necessities
COPY assets ./assets
COPY check ./check
COPY exceptions ./exceptions
COPY goods ./goods
COPY image_redactor ./image_redactor
COPY output ./output
COPY settings ./settings
COPY scenes ./scenes
COPY net ./net
COPY translations ./translations
COPY http_server ./http_server
COPY utils ./utils
COPY widgets ./widgets
COPY email_parser ./email_parser
COPY ./*.h ./*cpp ./*.ui ./*.qrc CMakeLists.txt .
WORKDIR /app/build
RUN cmake -DBUILD_TRANSLATIONS=on .. && make -j 8
ENTRYPOINT ["bash"]

29
deploy/debian/Dockerfile Normal file
View File

@@ -0,0 +1,29 @@
FROM checks_parser_base_ubuntu
#for envsubst
RUN DEBIAN_FRONTEND=noninteractive apt install -y gettext
ARG pkgname=$name
ARG pkgver=$version
ARG revision
ARG pkg=${pkgname}_$pkgver-$revision
WORKDIR /app
RUN mkdir -p $pkg/DEBIAN
RUN mkdir -p $pkg/usr/bin
RUN mkdir -p /output
COPY deploy/debian/control $pkg/DEBIAN/control
COPY deploy/debian/copy.sh .
RUN envsubst < $pkg/DEBIAN/control | tee $pkg/DEBIAN/control.output && mv $pkg/DEBIAN/control.output $pkg/DEBIAN/control
RUN envsubst < copy.sh | tee copy.sh.output && mv copy.sh.output copy.sh
RUN chmod +x copy.sh
RUN cp /app/build/checks-parser $pkg/usr/bin
RUN dpkg-deb --build $pkg
ENTRYPOINT ["./copy.sh"]

10
deploy/debian/control Normal file
View File

@@ -0,0 +1,10 @@
Package: checks-parser
Version: 3.0-1
Section: utils
Priority: optional
Architecture: amd64
Homepage: https://git.foxarmy.org/checks-parser
Depends: libc, qtbase5-dev, openssl, libmbedtls-dev, tesseract-ocr, tesseract-ocr-rus, libopencv-dev, libzbar-dev, qttools5-dev, nlohmann-json3-dev, libcurl4-openssl-dev, libtesseract-dev, libqrencode-dev
Maintainer: Leca <leca@foxarmy.org>
Description: Utility for parsing checks(receipts) to csv
Utility for extraction of content of a check(receipt) using plaintext, OCR or request to FTS (Federal Taxation Service)

2
deploy/debian/copy.sh Normal file
View File

@@ -0,0 +1,2 @@
#!/usr/bin/env bash
cp $pkg.deb /output

View File

@@ -0,0 +1,9 @@
FROM checks_parser_base_ubuntu
RUN DEBIAN_FRONTEND=noninteractive apt install -y autoconf automake autopoint bash bison bzip2 flex g++ g++-multilib gettext git gperf intltool libc6-dev-i386 libgdk-pixbuf2.0-dev libltdl-dev libgl-dev libpcre3-dev libssl-dev libtool-bin libxml-parser-perl lzip make openssl p7zip-full patch perl python3 python3-distutils python3-mako python3-packaging python3-pkg-resources python3-setuptools python-is-python3 ruby sed sqlite3 unzip wget xz-utils
WORKDIR /
RUN git clone https://github.com/mxe/mxe.git
RUN cd mxe && make qt

46
docker-compose.yml Normal file
View File

@@ -0,0 +1,46 @@
services:
base_ubuntu:
image: checks_parser_base_ubuntu:latest
build:
context: .
dockerfile: deploy/base-docker/ubuntu/Dockerfile
appimage:
image: checks_parser_appimage:latest
env_file: .env
build:
dockerfile: deploy/appimage/Dockerfile
context: .
args:
- pkgname=$name
- pkgver=$version
- revision=$revision
volumes:
- ./binaries:/output
depends_on:
- base_ubuntu
debian:
image: checks_parser_debian:latest
env_file: .env
build:
dockerfile: deploy/debian/Dockerfile
context: .
args:
- pkgname=$name
- pkgver=$version
- revision=$revision
volumes:
- ./binaries:/output
depends_on:
- base_ubuntu
archlinux:
image: checks_parser_base_arch:latest
env_file: .env
build:
dockerfile: deploy/archlinux/git/Dockerfile
context: .
args:
- pkgname=$name
- pkgver=$version
- revision=$revision
volumes:
- ./binaries:/output

View File

@@ -0,0 +1,211 @@
#include <email_parser/emailparser.h>
#include <opencv2/opencv.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/objdetect.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/videoio.hpp>
#include <utils/utils.h>
#include <utils/base64.h>
#include <check/check.h>
#include <boost/regex.hpp>
#include <boost/algorithm/string/regex.hpp>
#include <boost/algorithm/string.hpp>
#include <iostream>
#include <fstream>
#if __GNUC__ < 8 && __clang_major__ < 17
# include <experimental/filesystem>
using namespace std::experimental::filesystem;
#else
# include <filesystem>
using namespace std::filesystem;
#endif
EmailParser::EmailParser() {
headings_regex = boost::regex("([\\w-]+:\\s*.{2,64}\\r\\n)+");
end_marker_regex = boost::regex("--[^\\n\\r<>]{5,57}");
part_end_regex = boost::regex("--[^\\n\\r<> ]{5,57}");
}
std::map<std::string, std::string> EmailParser::parse(std::string &email_content) {
std::string parameters;
parameters = search_in_images(email_content);
if (parameters != "") {
return get_params_from_string(parameters);
}
parameters = search_in_text(email_content);
if (parameters != "") {
return get_params_from_string(parameters);
}
std::cout << "Failed to parse" << std::endl;
/* If the code has reached this part and found nothing, it's most likely that there are no QR codes at all. */
return std::map<std::string, std::string>();
}
std::map<std::string, std::string> EmailParser::parse_file(std::string path) {
std::cout << "Parsing file " << path << std::endl;
std::string content = read_file(path);
return parse(content);
return std::map<std::string, std::string>();
}
std::vector<std::pair<int, int>> EmailParser::find_parts(const boost::regex &start_regex, const boost::regex &end_regex, const std::string &content) {
std::vector<std::pair<int, int>> parts = {};
for (boost::sregex_iterator it{content.begin(), content.end(), start_regex}, end{}; it != end; it ++) {
unsigned int start_position = it->position(), end_position = content.length();
for (boost::sregex_iterator it2{content.begin() + start_position, content.end(), end_regex}, end2{}; it2 != end2; it2++) {
end_position = it2->position();
break;
}
parts.push_back(std::pair<int, int>(start_position, end_position));
}
return parts;
}
std::string EmailParser::find_check_parameters(std::string &part) {
boost::regex params_regex ("t(=|(%|=)3d)\\d+T\\d+(&(amp;)?|%26)s\\1\\d+\\.\\d+\\3fn\\1\\d{16}\\3i\\1\\d{3,6}\\3fp\\1\\d{9,10}\\3n\\1\\d", boost::regex::icase);
boost::smatch matched;
if (boost::regex_search(part, matched, params_regex))
return matched[0].str();
return "";
}
std::string EmailParser::extract_qr_url_from_img(std::string &part) {
boost::regex img_url_regex("(?<=<img src=\")https:\\/\\/[^\\n\\r\"]*\\/qr(code)?[^\\n\\r\"]*", boost::regex::icase);
boost::smatch matched;
if (boost::regex_search(part, matched, img_url_regex))
return matched[0].str();
return "";
}
std::string EmailParser::extract_content_transfer_encoding(std::string &part) {
boost::regex content_transfer_encoding_regex("(?<=content-transfer-encoding: ).{0,20}(?=\\r\\n)", boost::regex::icase);
boost::smatch matched;
std::string transfer_encoding = "";
if (boost::regex_search(part, matched, content_transfer_encoding_regex))
transfer_encoding = matched[0].str();
if (transfer_encoding == "") return "";
std::transform(transfer_encoding.begin(), transfer_encoding.end(), transfer_encoding.begin(), ::tolower);
boost::trim(transfer_encoding);
return transfer_encoding;
}
std::vector<std::string> EmailParser::extract_qr_embeddings_from_part(std::string &part) {
std::vector<std::string> embeddings = {};
boost::regex img_base64_regex("(?<=<img src=\"data:image\\/(png|jpg);base64,)[^\n\r\"]*", boost::regex::icase);
boost::smatch matched;
if (boost::regex_search(part, matched, img_base64_regex)) {
for (unsigned int i = 0; i < matched.size(); i ++) {
embeddings.push_back(matched[i].str());
}
}
return embeddings;
}
std::string EmailParser::search_in_images(std::string &content) {
boost::regex images_content_type_regex("Content-Type: image/(gif|png|jpg)", boost::regex::icase);
std::vector<std::pair<int, int>> images_content_parts = find_parts(images_content_type_regex, part_end_regex, content);
/* iterate through found image content-types and try searching qr codes, decode them and see if it's the needed data */
for (unsigned int i = 0; i < images_content_parts.size(); i ++) {
std::string part = content.substr(images_content_parts[i].first, images_content_parts[i].second);
boost::erase_regex(part, headings_regex);
boost::erase_regex(part, end_marker_regex);
boost::erase_all_regex(part, boost::regex("\\r\\n"));
std::string decoded = base64_decode(part);
return handle_image(decoded);
}
return "";
}
std::string EmailParser::search_in_text(std::string &content) {
boost::regex text_content_types_regex("Content-Type: text\\/(html|plain)", boost::regex::icase);
/* If the E-Mail has no QR code in it as a separate part, there's posibilly a QR code inserted using html's tag <img> with base64-encoded image. Try searching it */
std::vector<std::pair<int, int>> texts_content_parts = find_parts(text_content_types_regex, part_end_regex, content);
for (unsigned int i = 0; i < texts_content_parts.size(); i ++) {
std::string part = content.substr(texts_content_parts[i].first, texts_content_parts[i].second);
std::string transfer_encoding = extract_content_transfer_encoding(part);
boost::erase_regex(part, headings_regex);
boost::erase_regex(part, end_marker_regex);
if (transfer_encoding == "quoted-printable") {
boost::erase_all_regex(part, boost::regex("=\\r\\n"));
} else if (transfer_encoding == "base64") {
boost::erase_all_regex(part, boost::regex("\\r\\n"));
part = base64_decode(part);
}
// Try searching parameters just in plain html. Will help if there's a link to a QR code with it's parameters passed in request.
std::string parameters = find_check_parameters(part);
if (parameters != "") return parameters;
// If there's no, try search anything that looks like a link to a qr code.
std::string url = extract_qr_url_from_img(part);
if (url != "") {
Net n;
std::string path = get_path_relative_to_home(".local/share/checks_parser/tmp");
n.get_file(url, path);
std::string qr_code_contents = read_file(path);
parameters = handle_image(qr_code_contents);
}
if (parameters != "") return parameters;
// if there's no any link that looks like a link to QR code, maybe the qr code is encoded as base64 inside an img tag.
std::vector<std::string> embeddings = extract_qr_embeddings_from_part(part);
for (std::string &embedding : embeddings) {
std::string decoded = base64_decode(embedding);
parameters = handle_image(decoded);
if (parameters != "") return parameters;
}
}
return "";
}
std::string EmailParser::handle_image(std::string &content) {
cv::Mat image;
if (content.substr(1, 3) == "PNG" || content.substr(1, 3) == "JPG" || content.substr(6, 4) == "JFIF") {
std::vector<uchar> data(content.begin(), content.end());
image = cv::imdecode(cv::Mat(data), 1);
} else if (content.substr(0, 3) == "GIF") {
std::string gif_file_path = get_application_home_path() + "/temp.gif";
std::ofstream gif_output(gif_file_path, std::ios::binary);
gif_output << content;
gif_output.close();
cv::VideoCapture gif(gif_file_path, cv::CAP_FFMPEG);
gif.read(image);
}
if (image.empty()) return "";
if (image.rows >= 500 || image.cols >= 500) {
cv::Mat copy(image);
cv::resize(copy, image, cv::Size(150, 150), cv::INTER_LINEAR);
cv::imwrite(get_path_relative_to_home(".local/share/checks_parser/tmp.jpg"), image);
}
cv::QRCodeDetector qrDecoder = cv::QRCodeDetector();
std::string decoded_qr = qrDecoder.detectAndDecode(image);
return find_check_parameters(decoded_qr);
}

View File

@@ -0,0 +1,26 @@
#ifndef CHECKS_PARSER_EMAIL_PARSER
#define CHECKS_PARSER_EMAIL_PARSER
#include <check/check.h>
#include <map>
#include <boost/regex.hpp>
class EmailParser {
boost::regex headings_regex, end_marker_regex, part_end_regex;
public:
EmailParser();
std::map<std::string, std::string> parse(std::string &email_content);
std::map<std::string, std::string> parse_file(std::string path);
std::vector<std::pair<int, int>> find_parts(const boost::regex &start_regex, const boost::regex &end_regex, const std::string &content);
std::string find_check_parameters(std::string &part);
std::string extract_qr_url_from_img(std::string &part);
std::string extract_content_transfer_encoding(std::string &part);
std::vector<std::string> extract_qr_embeddings_from_part(std::string &part);
std::string search_in_images(std::string &content);
std::string search_in_text(std::string &content);
std::string handle_image(std::string &content);
};
#endif // CHECKS_PARSER_EMAIL_PARSER

View File

@@ -0,0 +1,6 @@
#include "ofdrequestexception.h"
OfdRequestException::OfdRequestException(const char* msg) : message(msg) {}
const char* OfdRequestException::what() throw() {
return message.c_str();
}

View File

@@ -0,0 +1,16 @@
#ifndef OFDREQUESTEXCEPTION_H
#define OFDREQUESTEXCEPTION_H
#include <exception>
#include <string>
class OfdRequestException : public std::exception
{
private:
std::string message;
public:
OfdRequestException(const char* msg);
const char* what() throw();
};
#endif // OFDREQUESTEXCEPTION_H

View File

@@ -1,11 +1,13 @@
#include "goods.h"
#include <string>
#include <QString>
#include <QObject>
Goods::Goods(std::string name, double price_per_unit, double quantity) {
this->name = name;
this->price_per_unit = price_per_unit;
this->quantity = quantity;
}
Goods::Goods() { }
Goods::Goods(std::string name, double price_per_unit, std::string net_weight, double quantity) :
name(name), price_per_unit(price_per_unit),
net_weight(net_weight), quantity(quantity) {}
double Goods::calculate_total_price() {
return this->price_per_unit * this->quantity;
@@ -15,12 +17,59 @@ std::string Goods::get_name() { return this->name; }
double Goods::get_quantity() { return this->quantity; }
std::string Goods::get_net_weight() { return this->net_weight; }
double Goods::get_price_per_unit() { return this->price_per_unit; }
void Goods::set_name(std::string name) { this->name = name; }
void Goods::set_name(QString name) { this->name = name.toStdString(); }
void Goods::set_quantity(double quantity) { this->quantity = quantity; }
void Goods::set_net_weight(std::string net_weight) { this->net_weight = net_weight; }
void Goods::set_net_weight(QString net_weight) { this->net_weight = net_weight.toStdString(); }
void Goods::set_price_per_unit(double price_per_unit) {
this->price_per_unit = price_per_unit;
}
Q_DECLARE_METATYPE(Goods)
QDataStream &operator<<(QDataStream &in, Goods &goods) {
in << QString::fromStdString(goods.get_name()) << goods.get_quantity() << QString::fromStdString(goods.get_net_weight()) << goods.get_price_per_unit();
return in;
}
QDataStream &operator>>(QDataStream &out, Goods &goods) {
QString name, net_weight;
double quantity, price_per_unit;
out >> name >> quantity >> net_weight >> price_per_unit;
goods.set_name(name);
goods.set_quantity(quantity);
goods.set_net_weight(net_weight);
goods.set_price_per_unit(price_per_unit);
return out;
}
QDataStream &operator<<(QDataStream &stream, std::vector<Goods> &goods) {
stream << (unsigned int )goods.size();
for (Goods &g : goods) {
stream << g;
}
return stream;
}
QDataStream &operator>>(QDataStream &stream, std::vector<Goods> &goods) {
unsigned int size;
stream >> size;
for (unsigned int i = 0 ; i < size; i ++) {
Goods g = Goods();
stream >> g;
goods.push_back(g);
}
return stream;
}

View File

@@ -1,24 +1,38 @@
#ifndef GOODS_H
#define GOODS_H
#include <QDataStream>
#include <string>
#include <vector>
class Goods {
std::string name;
double quantity; // by weight or by the piece
std::string net_weight; // will contain values like "5мл" or "10г"
double price_per_unit;
class Goods
{
std::string name;
double quantity; // by weight or by the piece
double price_per_unit;
public:
Goods(std::string, double, double);
double calculate_total_price();
Goods();
Goods(std::string name, double quantity, std::string net_weight,
double price_per_unit);
double calculate_total_price();
std::string get_name();
double get_quantity();
double get_price_per_unit();
std::string get_name();
double get_quantity();
std::string get_net_weight();
double get_price_per_unit();
void set_name(std::string);
void set_quantity(double);
void set_price_per_unit(double);
void set_name(std::string);
void set_name(QString);
void set_quantity(double);
void set_net_weight(std::string);
void set_net_weight(QString);
void set_price_per_unit(double);
};
QDataStream &operator<<(QDataStream &, Goods &);
QDataStream &operator>>(QDataStream &, Goods &);
QDataStream &operator<<(QDataStream &, std::vector<Goods> &);
QDataStream &operator>>(QDataStream &, std::vector<Goods> &);
#endif // GOODS_H

113
http_server/http_server.cpp Normal file
View File

@@ -0,0 +1,113 @@
#include "http_server.h"
#include <qobjectdefs.h>
#include <unistd.h>
#include <utils/utils.h>
#include <iostream>
#include <mainwindow.h>
#include <thread>
void HttpServer::generateRandomPort() {
port = rand() % (65535 - 1024) + 1024;
}
HttpServer::HttpServer(QWidget *caller) : caller(caller) {
started = false;
port = 8080;
}
HttpServer::~HttpServer() {
started = false;
shutdown(serverSocket, SHUT_RDWR);
close(serverSocket);
for (auto &thread : clientHandlersThreads) {
thread.join();
}
listenClientsThread.join();
}
int HttpServer::start() {
unsigned short number_of_retries = 0;
while (number_of_retries < 10) {
serverSocket = socket(AF_INET, SOCK_STREAM, 0);
if (serverSocket < 0) {
std::cerr << QObject::tr("Could not obtain socket.").toStdString() << std::endl;
number_of_retries ++;
continue;
}
serverAddress.sin_family = AF_INET;
serverAddress.sin_port = htons(port);
serverAddress.sin_addr.s_addr = INADDR_ANY;
if (bind(serverSocket, (sockaddr *)&serverAddress, sizeof(serverAddress)) < 0) {
std::cerr << QObject::tr("Port ").toStdString() << port << QObject::tr(" seems to be occupied. Trying to generate another one").toStdString() << std::endl;
number_of_retries ++;
generateRandomPort();
continue;
}
if (listen(serverSocket, 1) < 0) {
std::cerr << QObject::tr("Could not listen port.").toStdString() << std::endl;
number_of_retries ++;
generateRandomPort();
continue;
}
started = true;
std::cout << QObject::tr("Listening on port: ").toStdString() << port << std::endl;
listenClientsThread = std::thread(&HttpServer::acceptClients, this);
return 0;
}
return -1;
}
void HttpServer::handleClient(int clientSocket) {
std::string localIp;
try {
localIp = get_local_ip_address();
} catch(std::exception e) {
std::cerr << e.what() << std::endl;
close(clientSocket);
return;
}
char buffer[256] = {0};
recv(clientSocket, buffer, 256, 0);
std::string response = "HTTP/1.1 301 Moved Permanently\r\n"
"Content-Length: 0\r\n"
"Keep-Alive: timeout=5, max=100\r\n"
"Location: binaryeye://scan/?ret=http://" + get_local_ip_address() + ":" + std::to_string(port) + "/?result={RESULT}\r\n"
"\r\n";
if (send(clientSocket, response.c_str(), response.length(), 0) < 0) {
std::cerr << response.c_str() << std::endl;
std::cerr << response.length() << std::endl;
std::cerr << QObject::tr("Could not send message").toStdString() << std::endl;
}
emit ((MainWindow *)caller)->httpNewMessage(QString::fromStdString(std::string(buffer)));
}
void HttpServer::acceptClients() {
while (true) {
if (!started) return;
int clientSocket = accept(serverSocket, nullptr, nullptr);
if (!started) return;
clientHandlersThreads.push_back (
std::thread(&HttpServer::handleClient, this, clientSocket)
);
}
}
unsigned short HttpServer::getPort() {
return port;
}
bool HttpServer::isStarted() {
return started;
}

37
http_server/http_server.h Normal file
View File

@@ -0,0 +1,37 @@
#ifndef CHECKS_PARSER_HTTP_SERVER
#define CHECKS_PARSER_HTTP_SERVER
#include <netinet/in.h>
#include <QWidget>
#include <thread>
#include <vector>
class HttpServer {
private:
unsigned short port;
int serverSocket;
sockaddr_in serverAddress;
QWidget* caller;
std::thread listenClientsThread;
std::vector<std::thread> clientHandlersThreads;
bool started;
void generateRandomPort();
public:
HttpServer(QWidget *caller);
~HttpServer();
int start();
void stop();
void handleClient(int clientSocket);
void acceptClients();
unsigned short getPort();
bool isStarted();
};
#endif //CHECKS_PARSER_HTTP_SERVER

View File

@@ -1,23 +0,0 @@
#include <string>
#include <tesseract/baseapi.h>
#include <leptonica/allheaders.h>
#include <opencv2/opencv.hpp>
#include "checkimage.h"
CheckImage::CheckImage(std::string path) {
this->path = path;
}
std::string CheckImage::parse_text() {
std::string result;
tesseract::TessBaseAPI *ocr = new tesseract::TessBaseAPI();
ocr->Init(NULL, "rus", tesseract::OEM_LSTM_ONLY);
ocr->SetPageSegMode(tesseract::PSM_AUTO);
cv::Mat im = cv::imread(this->path, cv::IMREAD_COLOR);
ocr->SetImage(im.data, im.cols, im.rows, 3, im.step);
result = std::string(ocr->GetUTF8Text());
return result;
}

View File

@@ -1,15 +0,0 @@
#ifndef CHECKIMAGE_H
#define CHECKIMAGE_H
#include <string>
class CheckImage {
std::string path;
public:
CheckImage(std::string path);
std::string parse_text();
};
#endif // CHECKIMAGE_H

View File

@@ -32,8 +32,7 @@ void ImageRedactor::wheelEvent(QWheelEvent *event) {
void ImageRedactor::mousePressEvent(QMouseEvent *event)
{
// Pan the image
if (event->button() == Qt::LeftButton)
{
if (event->button() == Qt::LeftButton) {
setDragMode(QGraphicsView::ScrollHandDrag);
}
}
@@ -41,8 +40,7 @@ void ImageRedactor::mousePressEvent(QMouseEvent *event)
void ImageRedactor::mouseReleaseEvent(QMouseEvent *event)
{
// Reset the drag mode
if (event->button() == Qt::LeftButton)
{
if (event->button() == Qt::LeftButton) {
setDragMode(QGraphicsView::NoDrag);
}
}

View File

@@ -12,6 +12,7 @@ class ImageRedactor : public QGraphicsView
Q_OBJECT
public:
ImageRedactor(QWidget *parent = nullptr);
QGraphicsScene *scene;
protected:
void wheelEvent(QWheelEvent *event);
@@ -20,7 +21,6 @@ protected:
void mouseReleaseEvent(QMouseEvent *event);
private:
QGraphicsScene *scene;
QGraphicsPixmapItem *item;
};

View File

@@ -1,51 +0,0 @@
#include <QWheelEvent>
#include "imageview.h"
#include <iostream>
ImageView::ImageView(QWidget *parent) :
QLabel(parent) {
// std::cout << this->geometry().height() << " " << this->geometry().width() << std::endl;
}
// ImageView::ImageView(QWidget *parent, std::string path):
// QLabel(parent) {
// this->setPixmap(QPixmap(QString::fromStdString(path)));
// }
void ImageView::wheelEvent(QWheelEvent *event) {
QPointF shift = event->position();
QRegion r = QRegion();
// this->pixmap(Qt::ReturnByValueConstant::ReturnByValue).scroll(10, 10, this->rect(), &r);
this->scroll(shift.x(), shift.y(), this->rect());
// this->setPixmap(QPixmap());
// pm.scroll(shift.x(), shift.y(), this->rect());
// pm.scroll();
// this->setPixmap(pm);
//this->pixmap(Qt::ReturnByValueConstant::ReturnByValue).scroll(shift.x(), shift.y(), this->pixmap()->rect());
QPoint numDegrees = event->angleDelta() / 8;
std::cout << numDegrees.x() << std::endl;
event->accept();
}
void ImageView::setImage(std::string image){
//Commented is a way of scaling that is, as I understand, is lossless. If there'll be problems with current method's losses, I'll return to commented method
maxHeight = this->height();
maxWidth = this->width();
QPixmap pixmap = QPixmap(QString::fromStdString(image));
// double scaleFactor = pixmap.height() > pixmap.width()? static_cast<double>(maxHeight) / pixmap.height() : static_cast<double>(maxWidth) / pixmap.width();
pixmap = pixmap.scaled(maxWidth, maxHeight, Qt::AspectRatioMode::KeepAspectRatio);
this->setPixmap(pixmap);
// this->setGeometry(this->geometry().x(), this->geometry().y(), pixmap.width() * scaleFactor, pixmap.height() * scaleFactor);
// this->setScaledContents(true);
}

View File

@@ -1,19 +0,0 @@
#ifndef IMAGEVIEW_H
#define IMAGEVIEW_H
#include <QLabel>
#include <QObject>
#include <QWidget>
class ImageView : public QLabel
{
Q_OBJECT
double maxHeight, maxWidth;
public:
ImageView(QWidget *parent=nullptr);
// ImageView(QWidget *parent=nullptr, std::string path="");
void wheelEvent(QWheelEvent*);
void setImage(std::string);
};
#endif // IMAGEVIEW_H

View File

@@ -1,55 +1,72 @@
#include "mainwindow.h"
#include "net/net.h"
#include "ofd/ofd.h"
#include "settings/settings.h"
#include "utils/utils.h"
#include <mainwindow.h>
#include <net/net.h>
#include <settings/settings.h>
#include <utils/utils.h>
#include <QApplication>
#include <curl/curl.h>
#ifdef BUILD_OFD_MODE
# include <curl/curl.h>
#endif
#include <iostream>
#include <filesystem>
#if __GNUC__ < 8 && __clang_major__ < 17
# include <experimental/filesystem>
using namespace std::experimental::filesystem;
#else
# include <filesystem>
using namespace std::filesystem;
#endif
#ifdef BUILD_TRANSLATIONS
# include <QTranslator>
#endif
#ifdef BUILD_EMAIL_MODE
# include <email_parser/emailparser.h>
#endif
#include <opencv2/dnn.hpp>
int main(int argc, char *argv[]) {
// cv::dnn::readNetFromTensorflow("/home/leca/model.keras");
// return 0;
curl_global_init(CURL_GLOBAL_ALL);
qRegisterMetaType<Check>("Check");
std::string program_data_path = get_path_relative_to_home(".local/share/checks_parser");
std::filesystem::create_directories(program_data_path);
create_directories(program_data_path);
srand(time(0));
QApplication app(argc, argv);
std::string settings_file_path =
get_path_relative_to_home(".local/share/checks_parser/settings.json");
Settings s(settings_file_path);
OFD ofd;
Net n;
// std::vector<std::string> ofd_updates = ofd.check_updates();
// for (const std::string &update : ofd_updates) {
// std::cout << "Downloading "
// << s.get_setting("ofds_modules_url") + update << " to "
// << get_path_relative_to_home(s.get_setting("ofds_modules_dir") +
// "/" + update)
// << std::endl;
// n.get_file(s.get_setting("ofds_modules_url") + "/" + update,
// get_path_relative_to_home(s.get_setting("ofds_modules_dir") +
// "/" + update));
// }
#ifdef BUILD_TRANSLATIONS
QTranslator translator;
QString lang = "en_US";
Parser p;
std::vector<std::string> stores_updates = p.check_updates();\
for (const std::string &update : stores_updates) {
std::cout << "Downloading "
<< s.get_setting("stores_modules_url") + update << " to "
<< get_path_relative_to_home(s.get_setting("stores_modules_dir") +
"/" + update)
<< std::endl;
bool languageSettingPresent = false;
languageSettingPresent = s.get_all_settings().find("language") != s.get_all_settings().end();
n.get_file(s.get_setting("stores_modules_url") + "/" + update,
get_path_relative_to_home(s.get_setting("stores_modules_dir") +
"/" + update));
if (languageSettingPresent) {
lang = QString::fromStdString(s.get_all_settings()["language"]);
} else if (translator.load(":/translation/"+QLocale::system().name()+".qm")) {
lang = QLocale::system().name();
} else {
lang = QString::fromStdString("en_US");
}
QApplication a(argc, argv);
std::cout << QObject::tr("Using locale: ").toStdString() << lang.toStdString() << std::endl;
if (!translator.load(":/translation/" + lang + ".qm")) {
std::cerr << "Could not load translation!!" << std::endl;
}
app.installTranslator(&translator);
#endif
MainWindow w;
w.show();
return a.exec();
return app.exec();
}

View File

@@ -1,137 +1,317 @@
#include "mainwindow.h"
#include "./ui_mainwindow.h"
#include "check/check.h"
#include "goods/goods.h"
#include "outputdialog.h"
#include "adjustpicturedialog.h"
#include "settingsdialog.h"
#include <iostream>
#include <mainwindow.h>
#include "ui_mainwindow.h"
#include <QFileDialog>
#include <QMessageBox>
#include "image/checkimage.h"
#include "utils/utils.h"
#include <opencv2/objdetect.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <zbar.h>
#include <QPixmap>
#include <settingsdialog.h>
#include <string>
#include <boost/regex.hpp>
#ifdef BUILD_OFD_LOCAL_QR_SCAN
# include <adjustpicturedialog.h>
# include <checkqueuetablemodel.h>
#endif
#include <outputdialog.h>
#include <solvecaptchadialog.h>
#include <net/net.h>
#include <utils/utils.h>
#include <exceptions/ofdrequestexception.h>
#ifdef BUILD_OFD_BINARYEYE_SCAN
# include <qrencode.h>
# include <stdlib.h>
# include <unistd.h>
# include <sys/types.h>
# include <sys/socket.h>
# include <netinet/in.h>
#include <email_parser/emailparser.h>
#endif
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), ui(new Ui::MainWindow) {
: QWidget(parent)
, ui(new Ui::MainWindow) {
ui->setupUi(this);
this->setupStoresList();
}
ui->stop_server_button->hide();
MainWindow::~MainWindow() { delete ui; }
ui->checks_to_parse_label->hide();
ui->checkQueueTable->hide();
ui->deleteSelectedButton->hide();
ui->parse_button->hide();
void MainWindow::setupStoresList() {
parser = *(new Parser());
model = new CheckQueueTableModel(&checks, this);
ui->checkQueueTable->setModel(model);
ui->checkQueueTable->viewport()->setAcceptDrops(true);
ui->checkQueueTable->setDragDropMode(QAbstractItemView::DragDrop);
std::vector<std::string> modules_names = parser.search_modules();
ui->checkQueueTable->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
for (std::string name : modules_names) {
StoreModule m(name);
std::wstring module_name = m.get_name();
QString s = QString::fromStdWString(module_name);
ui->storeType->addItem(s);
}
#ifdef DEBUG
for (auto module : parser.search_modules()) {
std::cout << "Module: " << module << std::endl;
}
#ifdef BUILD_OFD_BINARYEYE_SCAN
QObject::connect(this, &MainWindow::httpErrorOccured, this, &MainWindow::notifyHttpServerFailure);
connect(this, SIGNAL(httpNewMessage(QString)), this, SLOT(httpNewMessageHandler(QString)));
#else
ui->or_label_2->hide();
ui->binary_eye_button->hide();
#endif
#ifndef BUILD_EMAIL_MODE
ui->parse_email_button->hide();
ui->or_label_2->hide();
#endif
#ifndef BUILD_OFD_LOCAL_QR_SCAN
ui->or_label_1->hide();
ui->choose_image_button->hide();
#endif
QObject::connect(ui->settings_button, &QPushButton::clicked, [&]() {
SettingsDialog d;
d.show();
d.exec();
});
}
void MainWindow::on_parseButton_clicked() {
QString s;
switch (ui->checkType->currentIndex()) {
case 0:
s = ui->checkContent->toPlainText();
break;
case 1:
s = ui->checkContentFromImage->toPlainText();
break;
#ifdef BUILD_OFD_BINARYEYE_SCAN
void MainWindow::startHttpServer() {
server = new HttpServer(this);
if (server->start() < 0) {
emit httpErrorOccured();
}
}
std::wstring check_plaintext = s.toStdWString();
parser.set_module(parser.search_modules()[0]);
void MainWindow::on_binary_eye_button_clicked() {
httpServerThread = new std::thread(&MainWindow::startHttpServer, this);
ui->binary_eye_button->setEnabled(false);
ui->stop_server_button->show();
std::vector<Goods> c = parser.parse(check_plaintext);
while (!server->isStarted()) {}
if (c.size() == 0) {
std::cerr << "An error has occured. Check was matched incorrectly. Vector sizes are different" << std::endl;
std::string localIp;
try {
localIp = get_local_ip_address();
} catch(std::exception e) {
std::cerr << e.what() << std::endl;
return;
}
Check check;
std::string connectionString = "binaryeye://scan?ret=http://" + localIp + ":" + std::to_string(server->getPort()) + "/?result={RESULT}";
for (auto& g : c) {
check.add_goods(g);
generate_qr_code(connectionString);
QMessageBox infoDialog = QMessageBox();
infoDialog.setText(QString::fromStdString(connectionString));
infoDialog.setIconPixmap(QPixmap(QString::fromStdString(get_path_relative_to_home(".local/share/checks_parser/binaryeye_connection.png"))).scaled(400, 400, Qt::KeepAspectRatio));
infoDialog.setWindowTitle(tr("QR code for binaryeye to connect"));
infoDialog.addButton(tr("I've scanned"), QMessageBox::ButtonRole::AcceptRole);
infoDialog.exec();
}
void MainWindow::notifyHttpServerFailure() {
QMessageBox infoDialog = QMessageBox();
infoDialog.setText(tr("Could not start http server. 10 times in a row random port was occupied. Either you should run for a lottery ticket, or the problem is in the program. If the lottery ticket wasn't lucky, please, contact the developer."));
infoDialog.setIcon(QMessageBox::Warning);
infoDialog.setWindowTitle(tr("Could not start http server."));
infoDialog.exec();
}
void MainWindow::on_stop_server_button_clicked() {
delete server;
ui->stop_server_button->hide();
ui->binary_eye_button->setEnabled(true);
}
void MainWindow::httpNewMessageHandler(QString message) {
std::string parametersString = split(message.toStdString(), " ")[1];
//erase /?result= from the string
parametersString.erase(0, parametersString.find("=") + 1);
std::map<std::string, std::string> paramsMap = get_params_from_string(parametersString);
emit onDataDecode(paramsMap);
}
#endif //ifdef BUILD_OFD_BINARYEYE_SCAN
#ifdef BUILD_OFD_LOCAL_QR_SCAN
void MainWindow::on_choose_image_button_clicked() {
QString filename = QFileDialog::getOpenFileName(this, QString(), QString(), tr("Images (*.jpg *.jpeg *.png)"));
if (filename == "") {
return;
}
OutputDialog d = OutputDialog(this, check);
d.show();
ui->info_label->setText(tr("Selected image: ") + filename);
AdjustPictureDialog dialog = AdjustPictureDialog(this, filename.toStdString());
connect(&dialog, &AdjustPictureDialog::decodedData, this, &MainWindow::onDataDecode);
dialog.exec();
}
#endif //ifdef BUILD_OFD_LOCAL_QR_SCAN
void MainWindow::onDataDecode(std::map<std::string, std::string> data) {
set_check_params(data);
}
#ifdef BUILD_EMAIL_MODE
void MainWindow::on_parse_email_button_clicked() {
QString filename = QFileDialog::getOpenFileName(this, QString(), QString(), tr("E-Mail files (*.eml)"));
if (filename == "") {
return;
}
EmailParser email_parser;
std::map<std::string, std::string> paramsMap = email_parser.parse_file(filename.toStdString());
if (paramsMap.empty()) {
QMessageBox infoDialog;
infoDialog.setText(tr("QR code in this E-Mail was not found. If you are sure that the e-mail you supplied has qr code, please, contact the developer and send him the .eml file."));
infoDialog.setIcon(QMessageBox::Critical);
infoDialog.setWindowTitle(tr("QR code was not found in E-Mail"));
infoDialog.exec();
return;
}
set_check_params(paramsMap);
}
#endif // ifdef BUILD_EMAIL_MODE
void MainWindow::on_parse_button_clicked() {
if (checks.empty()) {
QMessageBox infoDialog;
infoDialog.setText(tr("Please, add check(s) to parse"));
infoDialog.setIcon(QMessageBox::Warning);
infoDialog.setWindowTitle(tr("No checks to parse"));
infoDialog.exec();
return;
}
OutputDialog d = OutputDialog(this, &checks);
d.exec();
}
void MainWindow::on_storeType_currentIndexChanged(int index) {
std::string module = parser.search_modules()[index];
parser.set_module(module);
void MainWindow::on_add_new_check_button_clicked() {
Check *new_check = parse_new_check();
if (new_check == nullptr) {
return;
}
unsigned int newRowIndex = checks.size();
model->insertRows(newRowIndex, 1);
checks.at(newRowIndex) = *new_check;
emit model->dataChanged(model->index(newRowIndex, 0), model->index(newRowIndex, 1));
delete new_check;
if (checks.size() > 0) {
ui->checkQueueTable->show();
ui->checks_to_parse_label->show();
ui->deleteSelectedButton->show();
ui->parse_button->show();
}
}
Check *MainWindow::parse_new_check() {
Net net;
std::string solved_captcha = "";
void MainWindow::on_preferencesButton_clicked() {
SettingsDialog s = SettingsDialog();
s.show();
s.exec();
for (unsigned short i = 0; i < 5; i ++) {
// Will be repaced with neural network to solve captchas as soon as I train it.
net.get_captcha_from_ofdru();
SolveCaptchaDialog dialog = SolveCaptchaDialog(this, &solved_captcha);
dialog.exec();
Check* check = new Check();
try {
std::string check_content = net.fetch_check_data_from_ofdru(
ui->fn_line_edit->text().toStdString(),
ui->fd_line_edit->text().toStdString(),
ui->fi_line_edit->text().toStdString(),
ui->purchase_datetime_edit->dateTime().toString(Qt::ISODate).toStdString(),
ui->operation_type_combo_box->currentIndex() + 1,
// In the request to ofd.ru, total is in a format with 2 last digits represent decimal part of a number.
ui->total_spin_box->text().toDouble() * 100,
solved_captcha
);
(*check) = parseOfdRuAnswer(check_content);
check->set_date(ui->purchase_datetime_edit->dateTime().toString(Qt::ISODate).toStdString());
check->set_fn(ui->fn_line_edit->text().toStdString());
check->set_fd(ui->fd_line_edit->text().toStdString());
check->set_fi(ui->fi_line_edit->text().toStdString());
check->set_operation_type(OperationType(ui->operation_type_combo_box->currentIndex() + 1));
return check;
} catch(OfdRequestException e) {
QMessageBox infoDialog;
if (!strcmp(e.what(), "Incorrect captcha")) {
infoDialog.setText(tr("Captcha was not solved correctly!"));
infoDialog.setIcon(QMessageBox::Critical);
infoDialog.setWindowTitle(tr("Captcha is incorrect"));
infoDialog.exec();
continue;
} else if (!strcmp(e.what(), "Internal server error")) {
infoDialog.setText(tr("Internal server error. Please, try again later."));
infoDialog.setIcon(QMessageBox::Critical);
infoDialog.setWindowTitle(tr("Internal server error"));
infoDialog.exec();
return nullptr;
} else if (!strcmp(e.what(), "Does not exist")) {
infoDialog.setText(tr("Check not found. Please, ensure correctness of entered data."));
infoDialog.setIcon(QMessageBox::Critical);
infoDialog.setWindowTitle(tr("Check was not found"));
infoDialog.exec();
return nullptr;
}
}
}
return nullptr;
}
void MainWindow::on_chooseImageButton_ofd_clicked() {
QString filename = QFileDialog::getOpenFileName();
std::string new_text = "Selected: " + filename.toStdString();
ui->pathLabel_ofd->setText(QString::fromStdString(new_text));
AdjustPictureDialog dialog = AdjustPictureDialog(this, filename.toStdString());
connect(&dialog, &AdjustPictureDialog::decodedData, this, &MainWindow::onDecodedData);
dialog.exec();
ui->picture_ofd->setPixmap(QPixmap(filename));
ui->picture_ofd->setScaledContents(true);
MainWindow::~MainWindow() {
delete ui;
}
void MainWindow::onDecodedData(std::string data) {
std::string delimiter = "&";
std::vector<std::string> dataSplit = split(data, delimiter);
void MainWindow::on_deleteSelectedButton_clicked() {
QItemSelectionModel *select = ui->checkQueueTable->selectionModel();
std::vector<unsigned int> to_delete_positions = {};
for (auto &row : select->selectedIndexes()) {
if (row.column() != 0) continue;
to_delete_positions.push_back(row.row());
}
std::sort(to_delete_positions.begin(), to_delete_positions.end(), std::greater<unsigned int>());
for (unsigned int position : to_delete_positions) {
model->removeRows(position, 1);
}
emit model->dataChanged(model->index(checks.size(), 0), model->index(checks.size() + to_delete_positions.size(), 1));
ui->checkQueueTable->clearSelection();
}
std::cout << data << std::endl;
void MainWindow::set_check_params(std::map<std::string, std::string> paramsMap) {
ui->fn_line_edit->setText(QString::fromStdString(paramsMap["fn"]));
ui->fd_line_edit->setText(QString::fromStdString(paramsMap["i"]));
ui->fi_line_edit->setText(QString::fromStdString(paramsMap["fp"]));
ui->fn_edit->setText(QString::fromStdString(dataSplit[2]));
ui->fd_edit->setText(QString::fromStdString(dataSplit[3]));
ui->fi_edit->setText(QString::fromStdString(dataSplit[4]));
QString extractedDateTime = QString::fromStdString(split(dataSplit[0], "=")[1]);
QString extractedDateTime = QString::fromStdString(paramsMap["t"]);
//TODO: some QRs contain datetime in format yyyyMMddThhmmss. Perhaps there is more different formats, should write function to detect them.
QDateTime datetime = QDateTime::fromString(extractedDateTime, "yyyyMMddThhmm");
ui->dateTimeEdit->setDateTime(datetime);
if (datetime == QDateTime::fromString(extractedDateTime, "20000101T1200")) {
datetime = QDateTime::fromString(extractedDateTime, "yyyyMMddThhmmss");
}
ui->purchase_datetime_edit->setDateTime(datetime);
}
void MainWindow::on_chooseImageButton_ocr_clicked()
{
QString filename = QFileDialog::getOpenFileName();
std::string new_text = "Selected: " + filename.toStdString();
ui->pathLabel_ocr->setText(QString::fromStdString(new_text));
CheckImage i(filename.toStdString());
std::string parsed = i.parse_text();
ui->picture_ocr->setPixmap(QPixmap(filename));
ui->picture_ocr->setScaledContents(true);
ui->checkContentFromImage->setPlainText(QString::fromStdString(parsed));
int type = std::stoi(paramsMap["n"]);
ui->operation_type_combo_box->setCurrentIndex(type - 1);
std::string total = paramsMap["s"];
ui->total_spin_box->setValue(std::stod(total));
}

View File

@@ -1,45 +1,70 @@
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QWidget>
#include <QEvent>
#include <thread>
#include <checkqueuetablemodel.h>
#include "check/check.h"
#include "parser/parser.h"
#include <http_server/http_server.h>
#include <check/check.h>
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE
class MainWindow : public QMainWindow {
class MainWindow : public QWidget
{
Q_OBJECT
Check check;
Parser parser;
public:
MainWindow(QWidget *parent = nullptr);
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
void setupStoresList();
Check get_check();
void onDecodedData(std::string);
Check *parse_new_check();
CheckQueueTableModel *model;
#ifdef BUILD_OFD_BINARYEYE_SCAN
void startHttpServer();
#endif
signals:
void httpNewMessage(QString message);
void httpErrorOccured();
void deleteCheckFromList(Check&);
private slots:
void on_parseButton_clicked();
#ifdef BUILD_OFD_LOCAL_QR_SCAN
void on_choose_image_button_clicked();
#endif
void on_storeType_currentIndexChanged(int index);
void onDataDecode(std::map<std::string, std::string>);
void on_parse_button_clicked();
// void on_chooseImageButton_clicked();
#ifdef BUILD_OFD_BINARYEYE_SCAN
void on_preferencesButton_clicked();
void on_binary_eye_button_clicked();
void notifyHttpServerFailure();
void on_stop_server_button_clicked();
void on_chooseImageButton_ofd_clicked();
void on_chooseImageButton_ocr_clicked();
void httpNewMessageHandler(QString message);
// void deleteCheckFromListHandler(Check&);
#endif
#ifdef BUILD_EMAIL_MODE
void on_parse_email_button_clicked();
#endif
void on_add_new_check_button_clicked();
void on_deleteSelectedButton_clicked();
void set_check_params(std::map<std::string, std::string>);
private:
Ui::MainWindow *ui;
std::vector<Check> checks;
#ifdef BUILD_OFD_BINARYEYE_SCAN
std::thread *httpServerThread;
HttpServer *server = NULL;
#endif
};
#endif // MAINWINDOW_H

10
media.qrc Normal file
View File

@@ -0,0 +1,10 @@
<RCC>
<qresource prefix="/icons">
<file>assets/icons/email-text.svg</file>
<file>assets/icons/OCR.svg</file>
<file>assets/icons/OFD.svg</file>
<file>assets/icons/icon.png</file>
<file>assets/icons/icon.svg</file>
<file>assets/icons/settings.svg</file>
</qresource>
</RCC>

View File

@@ -1,8 +0,0 @@
{
"name":"Магнит",
"goods_name_regex": "([\\(\\)\\%\\*a-zA-Z0-9\u0401\u0451\u0410-\u044f \\.\\-\/]{17,100})",
"goods_price_regex": "[0-9]{0,4}[^%]\\.[0-9]{2} ",
"goods_quantity_regex": "([0-9]{0,4}[^%]\\.[0-9]{3} )|(\t\\d )",
"check_start_regex": "",
"check_end_regex":""
}

View File

@@ -1,8 +0,0 @@
{
"name":"Пятёрочка",
"goods_name_regex": "([\\(\\)\\%\\*a-zA-Z0-9\u0401\u0451\u0410-\u044f \\.\\-\/]{17,100})",
"goods_price_regex": "[0-9]{0,4}[^%]\\.[0-9]{2} ",
"goods_quantity_regex": "([0-9]{0,4}[^%]\\.[0-9]{3} )|(\t\\d )",
"check_start_regex": "КАССОВЫЙ ЧЕК\nприход",
"check_end_regex": "Итог\\:.{0,3}[0-9]{0,6}\\.[0-9]{2}"
}

View File

@@ -1,63 +1,88 @@
#include "net.h"
#include <net/net.h>
#include <curl/curl.h>
#include <utils/utils.h>
#include <iostream>
#include <vector>
#include <regex>
struct data {};
size_t write_data(void *buffer, size_t size, size_t nmemb, void *filename) {
FILE *f = fopen(((std::string *)filename)->c_str(), "w");
size_t written = fwrite(buffer, size, nmemb, f);
fclose(f);
return written;
}
Net::Net() {}
void write_modules(void *buffer, size_t size, size_t nmemb, void *modules) {
std::vector<std::string> *modules_vector =
(std::vector<std::string> *)modules;
std::string to_parse = std::string((char*)buffer);
std::regex r("(?!\\\")\\w+\\.json(?!\\\")", std::regex::collate);
std::smatch res;
std::string::const_iterator search(to_parse.cbegin());
while (std::regex_search(search, to_parse.cend(), res, r)) {
modules_vector->push_back(res[0]);
search = res.suffix().first;
}
size_t writeCallback(void* contents, size_t size, size_t nmemb, void* userp) {
size_t totalSize = size * nmemb;
((std::string*)userp)->append(std::string((char *)contents));
return totalSize;
}
std::vector<std::string> Net::get_all_modules(std::string url) {
CURL *handle = curl_easy_init();
curl_easy_setopt(handle, CURLOPT_URL, url.c_str());
curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, write_modules);
std::vector<std::string> modules {};
curl_easy_setopt(handle, CURLOPT_WRITEDATA, &modules);
curl_easy_perform(handle);
return modules;
}
std::string Net::get_file(std::string url, std::string filename) {
// size_t write_data_to_file(void *buffer, size_t size, size_t nmemb, void *filename) {
// FILE *f = fopen(((std::string *)filename)->c_str(), "wb");
// size_t written = fwrite(buffer, size, nmemb, f);
// fclose(f);
// return written;
// }
size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) {
size_t written;
written = fwrite(ptr, size, nmemb, stream);
return written;
}
// size_t write_data(void *buffer, size_t size, size_t nmemb, void *string_buffer) {
// *(std::string *)string_buffer = std::string((char *)buffer);
// std::cout << (char*)buffer << std::endl;
// return size;
// }
void Net::get_file(std::string url, std::string filename) {
CURL *handle = curl_easy_init();
curl_easy_setopt(handle, CURLOPT_URL, url.c_str());
FILE *f = fopen(filename.c_str(), "wb");
curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_setopt(handle, CURLOPT_WRITEDATA, &filename);
curl_easy_setopt(handle, CURLOPT_WRITEDATA, f);
auto success = curl_easy_perform(handle);
fclose(f);
curl_easy_cleanup(handle);
}
std::string Net::fetch_check_data_from_ofdru(std::string fn, std::string fd, std::string fi, std::string datetime, int operation, int total, std::string captcha) {
CURL *handle = curl_easy_init();
if (handle == nullptr) {
std::cerr << "cannot initialize curl" << std::endl;
return "";
}
struct curl_slist *headers = NULL;
std::string readBuffer = "";
curl_easy_setopt(handle, CURLOPT_URL, "https://check.ofd.ru/Document/FetchReceiptFromFns");
headers = curl_slist_append(headers, "Content-Type: application/json;charset=UTF-8");
curl_easy_setopt(handle, CURLOPT_HTTPHEADER, headers);
std::string dataJSON =
"{"
"\"TotalSum\":" + std::to_string(total) + ","
"\"FnNumber\":\"" + fn + "\","
"\"ReceiptOperationType\":\"" + std::to_string(operation) + "\","
"\"DocNumber\":\"" + fd + "\","
"\"DocFiscalSign\":\"" + fi + "\","
"\"Captcha\":\"" + captcha + "\","
"\"DocDateTime\":\"" + datetime + ".000Z\""
"}";
curl_easy_setopt(handle, CURLOPT_POSTFIELDS, dataJSON.c_str());
curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, writeCallback);
curl_easy_setopt(handle, CURLOPT_WRITEDATA, &readBuffer);
auto answer = curl_easy_perform(handle);
delete headers;
curl_easy_cleanup(handle);
return "";
return readBuffer;
}
void Net::get_captcha_from_ofdru() {
get_file("https://check.ofd.ru/api/captcha/common/img", get_path_relative_to_home(".local/share/checks_parser/captcha.jpg"));
}

View File

@@ -4,14 +4,17 @@
#include <string>
#include <vector>
size_t write_data(void *buffer, size_t size, size_t nmemb, void *userp);
size_t write_data_to_file(void *buffer, size_t size, size_t nmemb, void *userp);
size_t writeCallback(void* contents, size_t size, size_t nmemb, void* userp);
class Net
{
public:
Net();
std::vector<std::string> get_all_modules(std::string url);
std::string get_file(std::string url, std::string filename);
void get_file(std::string url, std::string filename);
std::string fetch_check_data_from_ofdru(std::string fn, std::string fd, std::string fi, std::string datetime, int operation, int total, std::string captcha);
void get_captcha_from_ofdru();
std::string get_data(std::string url);
};
#endif // NET_H

View File

@@ -1,2 +0,0 @@
1. curl -X GET https://check.ofd.ru/api/captcha/common/img
2. curl 'https://check.ofd.ru/Document/FetchReceiptFromFns' -H 'content-type: application/json;charset=UTF-8' --data-raw '{"TotalSum":52344,"FnNumber":"7281440701327430","ReceiptOperationType":"1","DocNumber":"25955","DocFiscalSign":"2518183888","Captcha":"INSERT SOLVED CAPTCHA","DocDateTime":"2024-08-16T19:36:00.000Z"}'

View File

@@ -1,24 +0,0 @@
#include "module.h"
#include <nlohmann/json.hpp>
#include <fstream>
#include "../utils/utils.h"
OFDModule::OFDModule() {}
OFDModule::OFDModule(std::string path) {
this->path = path;
std::ifstream settings_file(path);
nlohmann::json settings = nlohmann::json::parse(settings_file);
this->name = from_utf8(settings["name"]);
this->url = from_utf8(settings["url"]);
}
std::wstring OFDModule::get_name() {
return this->name;
}
std::wstring OFDModule::get_url() {
return this->url;
}

View File

@@ -1,3 +0,0 @@
#include "ofd.h"
OFD::OFD() {}

View File

@@ -1,13 +0,0 @@
#ifndef OFD_H
#define OFD_H
#include <string>
class OFD {
public:
OFD();
void ask_captcha();
std::string request_and_parse_check(long fiscal_number, long fiscal_document, long fiscal_sign, std::string datetime, double total, std::string captcha);
};
#endif // OFD_H

View File

@@ -2,58 +2,12 @@
OutputOptions::OutputOptions() {}
void OutputOptions::add_or_update_column(Column &column) {
if (column_exist(column.type)) {
update_column(column, find_column(column.type));
} else {
this->order.push_back(column);
}
}
void OutputOptions::update_column(Column &column, unsigned short index) {
this->order[index] = column;
}
void OutputOptions::remove_column(unsigned short index) {
this->order.erase(this->order.begin() + index);
}
void OutputOptions::remove_column(ColumnType t) {
this->order.erase(this->order.begin() + find_column(t));
}
unsigned short OutputOptions::find_column(ColumnType t) {
for (unsigned short i = 0; i < this->order.size(); i++) {
if (this->order[i].type == t)
return i;
}
return -1;
}
bool OutputOptions::column_exist(ColumnType t) {
for (unsigned short i = 0; i < this->order.size(); i++) {
if (this->order[i].type == t)
return true;
}
return false;
}
Column &OutputOptions::get_column(ColumnType t) {
return this->order[find_column(t)];
}
std::vector<Column> &OutputOptions::get_columns() { return this->order; }
void OutputOptions::set_print_header(bool value) { this->print_header = value; }
bool OutputOptions::get_print_header() { return this->print_header; }
void OutputOptions::set_print_total(bool value) { this->print_total = value; }
bool OutputOptions::get_print_total() { return this->print_total; }
OutputFormat OutputOptions::get_output_format() { return this->format; }
void OutputOptions::set_output_format(OutputFormat format) {
this->format = format;
}
void OutputOptions::set_path(std::string path) { this->path = path; }
std::string &OutputOptions::get_path() { return this->path; }

View File

@@ -3,14 +3,19 @@
#include <string>
#include <vector>
#include <filesystem>
#if __GNUC__ <= 8 && __clang_major__ < 17
# include <experimental/filesystem>
#else
# include <filesystem>
#endif
#include <iostream>
#include <string>
#include <vector>
#include "../net/net.h"
#include "../settings/settings.h"
enum class ColumnType {
enum ColumnType {
date,
goods_name,
goods_price_per_unit,
goods_quantity,
@@ -18,45 +23,36 @@ enum class ColumnType {
goods_total
};
struct Column { // Example:
ColumnType type; // goods_name
std::string name; // "Товар"
unsigned int position; // "0" <-- 0 = "A", 1 = "B", etc.. column letter in
// table processor (i.e. excel or libreoffice)
} typedef Column;
enum class OutputFormat { csv, ods, xlsx, plaintext } typedef OutputFormat;
// Q_DECLARE_METATYPE(ColumnType);
// struct Column { // Example:
// ColumnType type; // goods_name
// std::string name; // "Товар"
// unsigned int position; // "0" <-- 0 = "A", 1 = "B", etc.. column letter in
// // table processor (i.e. excel or libreoffice)
// } typedef Column;
class OutputOptions {
std::vector<Column> order;
bool print_header;
bool print_total;
OutputFormat format;
std::string path;
public:
OutputOptions();
void add_or_update_column(Column &);
void update_column(Column&, unsigned short);
void remove_column(unsigned short);
void remove_column(ColumnType);
unsigned short find_column(ColumnType);
bool column_exist(ColumnType);
Column& get_column(ColumnType);
std::vector<Column>& get_columns();
void set_print_header(bool);
bool get_print_header();
void set_print_total(bool);
bool get_print_total();
void set_output_format(OutputFormat);
OutputFormat get_output_format();
void set_path(std::string);
std::string &get_path();
};
#endif // OUTPUT_OPTIONS_H

View File

@@ -3,127 +3,104 @@
#include "output/output_options.h"
#include "ui_outputdialog.h"
#include <QFileDialog>
#include <QLineEdit>
#include <QMainWindow>
#include <QStandardItemModel>
#include <fstream>
#include <iostream>
#include <outputcolumn.h>
#include <outputcolumnmodel.h>
#include "settings/settings.h"
#include "utils/utils.h"
#include <map>
OutputDialog::OutputDialog(QWidget *parent, Check &check)
: QDialog(parent), ui(new Ui::OutputDialog), check(check),
OutputDialog::OutputDialog(QWidget *parent, std::vector<Check> *checks)
: QDialog(parent), ui(new Ui::OutputDialog), checks(checks),
options(OutputOptions()) {
Settings settings(get_path_relative_to_home(".local/share/checks_parser/settings.json"));
settings = new Settings(get_path_relative_to_home(".local/share/checks_parser/settings.json"));
ui->setupUi(this);
ui->tableWidget->item(0, 1)->setText(QString::fromStdString(settings.get_all_settings()["output_order"]["goods_name"]["name"]));
ui->tableWidget->item(0, 0)->setText(QString::number((int)settings.get_all_settings()["output_order"]["goods_name"]["position"]));
for (Check &c : *checks) {
std::cout << "Check: " << c.get_date() << " " << c.get_total() << std::endl;
for (Goods &g : c.get_goods()) {
std::cout << g.get_name() << " " << g.get_net_weight() << " " << g.get_price_per_unit() << " " << g.get_quantity() << std::endl;
}
}
ui->tableWidget->item(1, 1)->setText(QString::fromStdString(settings.get_all_settings()["output_order"]["goods_price_per_unit"]["name"]));
ui->tableWidget->item(1, 0)->setText(QString::number((int)settings.get_all_settings()["output_order"]["goods_price_per_unit"]["position"]));
columns = new std::vector<OutputColumn>;
ui->tableWidget->item(2, 1)->setText(QString::fromStdString(settings.get_all_settings()["output_order"]["goods_quantity"]["name"]));
ui->tableWidget->item(2, 0)->setText(QString::number((int)settings.get_all_settings()["output_order"]["goods_quantity"]["position"]));
OutputColumnModel *model = new OutputColumnModel(columns, this);
ui->tableWidget->item(3, 1)->setText(QString::fromStdString(settings.get_all_settings()["output_order"]["goods_net_weight"]["name"]));
ui->tableWidget->item(3, 0)->setText(QString::number((int)settings.get_all_settings()["output_order"]["goods_net_weight"]["position"]));
ui->listView->setModel(model);
ui->tableWidget->item(4, 1)->setText(QString::fromStdString(settings.get_all_settings()["output_order"]["goods_total"]["name"]));
ui->tableWidget->item(4, 0)->setText(QString::number((int)settings.get_all_settings()["output_order"]["goods_total"]["position"]));
for (unsigned short i = 0; i < 6; i ++)
columns->push_back(OutputColumn(tr("Кто здесь?"), ColumnType::date));
for (auto &column : column_names) {
std::string name = settings->get_all_settings()["output_order"][column.first]["name"];
unsigned short position = settings->get_all_settings()["output_order"][column.first]["position"];
ColumnType type = column.second;
columns->at(position - 1) = (OutputColumn(QString::fromStdString(name), type));
ui->printHeaderCheckBox->setChecked(settings.get_all_settings()["print_header"]);
ui->printTotalCheckBox->setChecked(settings.get_all_settings()["print_total"]);
}
for (unsigned short i = 0; i < 6; i ++)
emit model->dataChanged(model->index(i, 0), model->index(i, 0));
ui->printHeaderCheckBox->setChecked(settings->get_all_settings()["print_header"]);
ui->printTotalCheckBox->setChecked(settings->get_all_settings()["print_total"]);
}
OutputDialog::~OutputDialog() { delete ui; }
bool compare_position(Column &c1, Column &c2) {
return c1.position < c2.position;
OutputDialog::~OutputDialog() {
delete settings;
delete ui;
}
void OutputDialog::on_buttonBox_accepted() {
std::ofstream output_file(this->options.get_path());
for (int i = 0; i < ui->tableWidget->rowCount(); i++) {
int position = ui->tableWidget->item(i, 0)->text().toInt();
std::string name = ui->tableWidget->item(i, 1)->text().toStdString();
print_header(&output_file);
std::cout << position << " " << name << std::endl;
for (Check &check : *checks) {
int row_number = 0;
for (auto it = check.get_goods().begin(); it != check.get_goods().end(); it++, row_number++) {
for (int i = 0; i < columns->size(); i ++) {
OutputColumn &column = columns->at(i);
switch (column.get_column_type()) {
case ColumnType::date:
if (row_number == 0) output_file << check.get_date();
break;
case ColumnType::goods_name:
output_file << it->get_name();
break;
case ColumnType::goods_price_per_unit:
output_file << std::fixed << std::setprecision(2) << it->get_price_per_unit();
break;
case ColumnType::goods_quantity:
output_file << std::fixed << std::setprecision(2) << it->get_quantity();
break;
case ColumnType::goods_net_weight:
output_file << it->get_net_weight();
break;
case ColumnType::goods_total:
output_file << std::fixed << std::setprecision(2) << it->calculate_total_price();
break;
}
Column c;
c.type = static_cast<ColumnType>(i);
c.position = position;
c.name = name;
this->options.add_or_update_column(c);
}
std::sort(this->options.get_columns().begin(),
this->options.get_columns().end(), compare_position);
if (options.get_print_header()) {
for (auto &column : this->options.get_columns()) {
output_file << column.name
<< (column.position == this->options.get_columns().size()
? ""
: ",");
if (i < columns->size() - 1) {
output_file << "|";
} else {
output_file << "\n";
}
}
}
output_file << std::endl;
}
for (auto goods : this->check.get_goods()) {
for (auto &column : this->options.get_columns()) {
std::string output_str;
switch (column.type) {
case ColumnType::goods_name:
output_str = goods.get_name();
break;
case ColumnType::goods_price_per_unit:
output_str = std::to_string(goods.get_price_per_unit());
break;
case ColumnType::goods_quantity:
output_str = std::to_string(goods.get_quantity());
break;
case ColumnType::goods_net_weight:
output_str = "TODO";
// TODO
break;
case ColumnType::goods_total:
output_str = std::to_string(goods.calculate_total_price());
break;
}
if (column.position != this->options.get_columns().size()) {
output_str += ",";
} else {
output_str += "\n";
}
output_file << output_str;
if (this->options.get_print_total()) {
output_file << "Total: " << std::fixed << std::setprecision(2) << check.calculae_total_price() << std::endl;
}
}
if (this->options.get_print_total()) {
output_file << "Total: " << std::to_string(check.calculae_total_price());
}
output_file.close();
}
void update_settings(OutputOptions &options, ColumnType t, std::string name,
int value) {
Column column;
column.type = t;
column.name = name;
column.position = value;
if (value) {
options.add_or_update_column(column);
} else {
options.remove_column(t);
}
save_settings();
}
void OutputDialog::on_chooseFileButton_clicked() {
@@ -139,3 +116,26 @@ void OutputDialog::on_printHeaderCheckBox_stateChanged(int value) {
void OutputDialog::on_printTotalCheckBox_stateChanged(int value) {
this->options.set_print_total(value);
}
void OutputDialog::print_header(std::ofstream *output_file) {
if (options.get_print_header()) {
for (unsigned int i = 0; i < columns->size(); i ++) {
OutputColumn column = columns->at(i);
(*output_file) << column.get_text().toStdString()
<< (i == columns->size() - 1
? ""
: "|");
}
*output_file << std::endl;
}
}
void OutputDialog::save_settings() {
for (int i = 0; i < columns->size(); i ++) {
OutputColumn &column = columns->at(i);
std::string key = find_key_by_value(column_names, column.get_column_type());
settings->get_all_settings()["output_order"][key]["name"] = column.get_text().toStdString();
settings->get_all_settings()["output_order"][key]["position"] = i + 1;
}
settings->flush();
}

View File

@@ -5,6 +5,7 @@
#include "output/output_options.h"
#include <QComboBox>
#include <QDialog>
#include <outputcolumn.h>
namespace Ui {
class OutputDialog;
@@ -14,10 +15,12 @@ class OutputDialog : public QDialog {
Q_OBJECT
OutputOptions options;
Check &check;
std::vector<Check> *checks;
std::vector<OutputColumn> *columns;
Settings *settings;
public:
explicit OutputDialog(QWidget *parent = nullptr, Check & = *(new Check()));
explicit OutputDialog(QWidget *parent = nullptr, std::vector<Check> *checks = nullptr);
~OutputDialog();
private slots:
@@ -31,6 +34,10 @@ private slots:
private:
Ui::OutputDialog *ui;
void print_header(std::ofstream *output_file);
void save_settings();
};
#endif // OUTPUTDIALOG_H

View File

@@ -1,93 +0,0 @@
#include "module.h"
#include <fstream>
#include <nlohmann/json.hpp>
#include <regex>
#include <string>
#include "../utils/utils.h"
StoreModule::StoreModule() {}
StoreModule::StoreModule(std::string path) {
std::ifstream settings_file(path);
nlohmann::json settings = nlohmann::json::parse(settings_file);
this->name = from_utf8(settings["name"]);
this->goods_name_regex = from_utf8(settings["goods_name_regex"]);
this->goods_price_regex = from_utf8(settings["goods_price_regex"]);
this->goods_quantity_regex = from_utf8(settings["goods_quantity_regex"]);
this->check_start_regex = from_utf8(settings["check_start_regex"]);
this->check_end_regex = from_utf8(settings["check_end_regex"]);
#ifdef DEBUG
std::wcout << "Name: " << this->name << std::endl;
std::wcout << "Goods name regex: " << this->goods_name_regex << std::endl;
std::wcout << "Goods price regex: " << this->goods_price_regex << std::endl;
std::wcout << "Goods quantity regex: " << this->goods_quantity_regex
<< std::endl;
std::wcout << "Check start regex: " << this->check_start_regex << std::endl;
std::wcout << "Check end regex: " << this->check_end_regex << std::endl;
#endif
}
std::vector<std::string> StoreModule::parse_name(std::wstring str) {
std::vector<std::string> result;
std::wregex r(this->goods_name_regex, std::regex::collate);
for (std::wsregex_iterator it{str.begin(), str.end(), r}, end{}; it != end;
it++) {
result.push_back(to_utf8(it->str()));
}
return result;
}
std::vector<std::string> StoreModule::parse_price(std::wstring str) {
std::vector<std::string> result;
std::wregex r(this->goods_price_regex, std::regex::collate);
for (std::wsregex_iterator it{str.begin(), str.end(), r}, end{}; it != end;
it++) {
result.push_back(to_utf8(it->str()));
}
return result;
}
std::vector<std::string> StoreModule::parse_quantity(std::wstring str) {
std::vector<std::string> result;
std::wregex r(this->goods_quantity_regex, std::regex::collate);
for (std::wsregex_iterator it{str.begin(), str.end(), r}, end{}; it != end;
it++) {
result.push_back(to_utf8(it->str()));
}
return result;
}
std::wstring StoreModule::trim_check(std::wstring& check) {
unsigned int start_pos;
unsigned int end_pos;
std::wregex start_regex(this->check_start_regex, std::regex::collate);
std::wregex end_regex(this->check_end_regex, std::regex::collate);
for (std::wsregex_iterator it{check.begin(), check.end(), start_regex}, end{};
it != end; it++) {
start_pos = it->position() + it->str().size();
break;
}
check = check.substr(start_pos, check.size());
for (std::wsregex_iterator it{check.begin(), check.end(), end_regex}, end{};
it != end; it++) {
end_pos = it->position() - 1;
break;
}
check = check.substr(0, end_pos);
return check;
}
std::wstring StoreModule::get_name() { return this->name; }

View File

@@ -1,28 +0,0 @@
#ifndef STORE_MODULE_H
#define STORE_MODULE_H
#include <string>
#include <vector>
class StoreModule {
std::string path;
std::wstring name;
std::wstring goods_name_regex;
std::wstring goods_price_regex;
std::wstring goods_quantity_regex;
std::wstring check_start_regex;
std::wstring check_end_regex;
public:
StoreModule(std::string);
StoreModule();
std::vector<std::string> parse_name(std::wstring);
std::vector<std::string> parse_price(std::wstring);
std::vector<std::string> parse_quantity(std::wstring);
std::wstring trim_check(std::wstring&);
std::wstring get_name();
};
#endif // STORE_MODULE_H

View File

@@ -1,95 +0,0 @@
#include "parser.h"
#include "../goods/goods.h"
#include "../net/net.h"
#include "../settings/settings.h"
#include "../utils/utils.h"
#include <filesystem>
#include <iostream>
Parser::Parser() {}
std::vector<std::string> Parser::search_modules() {
Settings s(get_path_relative_to_home(".local/share/checks_parser/settings.json"));
std::string path = get_path_relative_to_home(s.get_setting("stores_modules_dir"));//std::string(std::getenv("HOME")) + "/" + STORES_MODULES_DIR;
std::filesystem::directory_entry modules_dir(path);
if (!modules_dir.exists()) {
std::filesystem::create_directories(path);
std::cout << "No modules directory found. Created one at " << path
<< std::endl;
std::cout << "Please, download modules to that directory from my git."
<< std::endl;
}
std::vector<std::string> modules_files;
for (auto file : std::filesystem::directory_iterator(path)) {
modules_files.push_back(file.path());
}
return modules_files;
}
void Parser::set_module(std::string path) { module = StoreModule(path); }
std::vector<Goods> Parser::parse(std::wstring check_plaintext) {
std::vector<Goods> result;
module.trim_check(check_plaintext);
std::vector<std::string> goods_names = module.parse_name(check_plaintext);
std::vector<std::string> goods_prices = module.parse_price(check_plaintext);
std::vector<std::string> goods_quantities =
module.parse_quantity(check_plaintext);
if (goods_names.size() != goods_prices.size() ||
goods_names.size() != goods_quantities.size() ||
goods_prices.size() != goods_quantities.size()) {
//Error. Amount of names, prices or quantities are not equal. That means, that some regex(es) has mismatched.
return {};
}
short goods_amount = goods_names.size();
for (short i = 0; i < goods_amount; i++) {
Goods goods(goods_names[i], std::stof(goods_prices[i]), std::stof(goods_quantities[i]));
result.push_back(goods);
}
return result;
}
std::vector<std::string> Parser::check_updates() {
std::cout << "Checking updates for stores modules" << std::endl;
Settings s(get_path_relative_to_home(".local/share/checks_parser/settings.json"));
std::string path = get_path_relative_to_home(s.get_setting("stores_modules_dir"));
std::vector<std::string> to_download;
std::vector<std::string> stored_modules;
std::filesystem::directory_entry modules_dir(path);
if (!modules_dir.exists()) {
std::filesystem::create_directories(path);
}
for (const auto& file : std::filesystem::directory_iterator(path)) {
if (!file.is_regular_file()) continue;
stored_modules.push_back(file.path().filename());
std::cout << file.path().filename() << " detected store module" << std::endl;
}
Net n;
std::cerr << "Downloading modules list from: " << s.get_setting("stores_modules_url");
std::vector<std::string> remote_modules = n.get_all_modules(s.get_setting("stores_modules_url"));
if (stored_modules.empty()) {
std::cout << "I need to download everything" << std::endl;
to_download = remote_modules;
} else {
for (const std::string& module : remote_modules) {
if (!vector_contains_element(stored_modules, module)) {
std::cout << "I need to download store module " << module << std::endl;
to_download.push_back(module);
}
}
}
return to_download;
}

View File

@@ -1,25 +0,0 @@
#ifndef PARSER_H
#define PARSER_H
#include "../goods/goods.h"
#include "module.h"
#include <string>
#include <vector>
class Parser {
StoreModule module;
public:
Parser();
std::vector<std::string> search_modules();
std::vector<std::string> check_updates();
void set_module(std::string);
std::vector<Goods> parse(std::wstring);
};
#endif // PARSER_H

8
scenes.qrc Normal file
View File

@@ -0,0 +1,8 @@
<RCC>
<qresource prefix="/scenes">
<file>scenes/outputdialog.ui</file>
<file>scenes/mainwindow.ui</file>
<file>scenes/settingsdialog.ui</file>
<file>scenes/solvecaptchadialog.ui</file>
</qresource>
</RCC>

View File

@@ -0,0 +1,95 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>AdjustPictureDialog</class>
<widget class="QDialog" name="AdjustPictureDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>825</width>
<height>497</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="1" column="0" colspan="2">
<widget class="ImageRedactor" name="graphicsView"/>
</item>
<item row="2" column="0">
<widget class="QSlider" name="contrastSlider">
<property name="value">
<number>50</number>
</property>
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
</widget>
</item>
<item row="0" column="0" colspan="2">
<widget class="QLabel" name="label">
<property name="text">
<string>Please, zoom to qr code and adjust contrast so that qr code looks sharp</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Ok</set>
</property>
</widget>
</item>
</layout>
<zorder>label</zorder>
<zorder>contrastSlider</zorder>
<zorder>graphicsView</zorder>
<zorder>buttonBox</zorder>
</widget>
<customwidgets>
<customwidget>
<class>ImageRedactor</class>
<extends>QGraphicsView</extends>
<header location="global">imageredactor.h</header>
</customwidget>
</customwidgets>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>AdjustPictureDialog</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>AdjustPictureDialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>

353
scenes/mainwindow.ui Normal file
View File

@@ -0,0 +1,353 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QWidget" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>987</width>
<height>426</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>971</width>
<height>0</height>
</size>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="8" column="2" colspan="4">
<widget class="QDoubleSpinBox" name="total_spin_box">
<property name="maximum">
<double>4294967296.000000000000000</double>
</property>
</widget>
</item>
<item row="10" column="2" colspan="4">
<widget class="QPushButton" name="add_new_check_button">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Add to queue</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="fd_label">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>FD (Fiscal Document)</string>
</property>
</widget>
</item>
<item row="7" column="2" colspan="4">
<widget class="QComboBox" name="operation_type_combo_box">
<item>
<property name="text">
<string>Funds income</string>
</property>
</item>
<item>
<property name="text">
<string>Funds return</string>
</property>
</item>
<item>
<property name="text">
<string>Funds spend</string>
</property>
</item>
<item>
<property name="text">
<string>Spends return</string>
</property>
</item>
</widget>
</item>
<item row="0" column="5">
<widget class="QPushButton" name="stop_server_button">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Stop server</string>
</property>
</widget>
</item>
<item row="5" column="2" colspan="4">
<widget class="QLineEdit" name="fi_line_edit"/>
</item>
<item row="6" column="0">
<widget class="QLabel" name="datetime_label">
<property name="text">
<string>Date and time of purchase</string>
</property>
</widget>
</item>
<item row="1" column="1" colspan="2">
<widget class="QLabel" name="or_label_1">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>or</string>
</property>
<property name="alignment">
<set>Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter</set>
</property>
</widget>
</item>
<item row="4" column="2" colspan="4">
<widget class="QLineEdit" name="fd_line_edit"/>
</item>
<item row="2" column="0" colspan="6">
<widget class="QLabel" name="info_label">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="0" column="7">
<widget class="QLabel" name="checks_to_parse_label">
<property name="text">
<string>Checks to parse</string>
</property>
<property name="alignment">
<set>Qt::AlignmentFlag::AlignCenter</set>
</property>
</widget>
</item>
<item row="10" column="7" colspan="2">
<widget class="QPushButton" name="parse_button">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Parse queue</string>
</property>
</widget>
</item>
<item row="1" column="4">
<widget class="QLabel" name="or_label_2">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>or</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QPushButton" name="choose_image_button">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>QR image</string>
</property>
</widget>
</item>
<item row="3" column="2" colspan="4">
<widget class="QLineEdit" name="fn_line_edit">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="1" column="5">
<widget class="QPushButton" name="binary_eye_button">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Scan QR using phone</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QPushButton" name="settings_button">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Settings</string>
</property>
</widget>
</item>
<item row="10" column="0">
<widget class="QPushButton" name="clear_button">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Clear data</string>
</property>
</widget>
</item>
<item row="1" column="7" rowspan="8" colspan="2">
<widget class="QTableView" name="checkQueueTable">
<property name="editTriggers">
<set>QAbstractItemView::EditTrigger::DoubleClicked|QAbstractItemView::EditTrigger::EditKeyPressed</set>
</property>
<property name="tabKeyNavigation">
<bool>false</bool>
</property>
<property name="dragEnabled">
<bool>true</bool>
</property>
<property name="dragDropOverwriteMode">
<bool>false</bool>
</property>
<property name="dragDropMode">
<enum>QAbstractItemView::DragDropMode::InternalMove</enum>
</property>
<property name="defaultDropAction">
<enum>Qt::DropAction::MoveAction</enum>
</property>
<property name="alternatingRowColors">
<bool>true</bool>
</property>
<property name="selectionMode">
<enum>QAbstractItemView::SelectionMode::MultiSelection</enum>
</property>
<property name="selectionBehavior">
<enum>QAbstractItemView::SelectionBehavior::SelectRows</enum>
</property>
<property name="sortingEnabled">
<bool>true</bool>
</property>
</widget>
</item>
<item row="6" column="2" colspan="4">
<widget class="QDateTimeEdit" name="purchase_datetime_edit"/>
</item>
<item row="1" column="3">
<widget class="QPushButton" name="parse_email_button">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Parse an E-Mail</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="fi_label">
<property name="text">
<string>FI (Fiscal Identifier)</string>
</property>
</widget>
</item>
<item row="8" column="0">
<widget class="QLabel" name="total_label">
<property name="text">
<string>Total</string>
</property>
</widget>
</item>
<item row="7" column="0">
<widget class="QLabel" name="operation_type_label">
<property name="text">
<string>Operation type</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="fn_label">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>FN (Fiscal Number)</string>
</property>
</widget>
</item>
<item row="0" column="8">
<widget class="QPushButton" name="deleteSelectedButton">
<property name="text">
<string>Delete selected</string>
</property>
</widget>
</item>
<item row="1" column="6">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Policy::MinimumExpanding</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

117
scenes/outputdialog.ui Normal file
View File

@@ -0,0 +1,117 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>OutputDialog</class>
<widget class="QDialog" name="OutputDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>892</width>
<height>537</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QLabel" name="pathLabel">
<property name="text">
<string>Path to export: </string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QCheckBox" name="printTotalCheckBox">
<property name="text">
<string>Print total</string>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QPushButton" name="chooseFileButton">
<property name="text">
<string>Choose</string>
</property>
</widget>
</item>
<item row="3" column="0" colspan="3">
<widget class="QListView" name="listView">
<property name="editTriggers">
<set>QAbstractItemView::EditTrigger::DoubleClicked|QAbstractItemView::EditTrigger::EditKeyPressed</set>
</property>
<property name="dragEnabled">
<bool>true</bool>
</property>
<property name="dragDropOverwriteMode">
<bool>false</bool>
</property>
<property name="dragDropMode">
<enum>QAbstractItemView::DragDropMode::InternalMove</enum>
</property>
<property name="defaultDropAction">
<enum>Qt::DropAction::TargetMoveAction</enum>
</property>
<property name="alternatingRowColors">
<bool>true</bool>
</property>
<property name="selectionBehavior">
<enum>QAbstractItemView::SelectionBehavior::SelectRows</enum>
</property>
</widget>
</item>
<item row="4" column="2" colspan="2">
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Ok</set>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QCheckBox" name="printHeaderCheckBox">
<property name="text">
<string>Print header</string>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>OutputDialog</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>OutputDialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>

167
scenes/settingsdialog.ui Normal file
View File

@@ -0,0 +1,167 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>settingsdialog</class>
<widget class="QDialog" name="settingsdialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>693</width>
<height>616</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<layout class="QGridLayout" name="gridLayout_3">
<item row="0" column="0">
<widget class="QScrollArea" name="scrollArea">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="scrollAreaWidgetContents">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>673</width>
<height>554</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<layout class="QGridLayout" name="gridLayout">
<item row="1" column="1">
<widget class="QCheckBox" name="printHeaderCheckBox">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="print_total_label">
<property name="text">
<string>Print total</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QComboBox" name="languageComboBox">
<item>
<property name="text">
<string>en_US</string>
</property>
</item>
<item>
<property name="text">
<string>ru_RU</string>
</property>
</item>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="print_header_label">
<property name="text">
<string>Print header</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QCheckBox" name="printTotalCheckBox">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="language_label">
<property name="text">
<string>Language</string>
</property>
</widget>
</item>
<item row="0" column="0" colspan="2">
<widget class="QListView" name="outputOptionsListView">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="dragEnabled">
<bool>true</bool>
</property>
<property name="dragDropMode">
<enum>QAbstractItemView::DragDropMode::InternalMove</enum>
</property>
<property name="defaultDropAction">
<enum>Qt::DropAction::TargetMoveAction</enum>
</property>
<property name="alternatingRowColors">
<bool>true</bool>
</property>
<property name="selectionBehavior">
<enum>QAbstractItemView::SelectionBehavior::SelectRows</enum>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</widget>
</item>
<item row="1" column="0">
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Save</set>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>settingsdialog</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>settingsdialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View File

@@ -0,0 +1,91 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>SolveCaptchaDialog</class>
<widget class="QDialog" name="SolveCaptchaDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>503</width>
<height>350</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="geometry">
<rect>
<x>130</x>
<y>310</y>
<width>341</width>
<height>32</height>
</rect>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
<widget class="QLabel" name="captcha_picture">
<property name="geometry">
<rect>
<x>20</x>
<y>20</y>
<width>451</width>
<height>221</height>
</rect>
</property>
<property name="text">
<string/>
</property>
</widget>
<widget class="QLineEdit" name="captcha_edit">
<property name="geometry">
<rect>
<x>80</x>
<y>260</y>
<width>321</width>
<height>26</height>
</rect>
</property>
</widget>
</widget>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>SolveCaptchaDialog</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>SolveCaptchaDialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View File

@@ -1,48 +1,55 @@
#include "settings.h"
#include <filesystem>
#include <fstream>
#include <nlohmann/json.hpp>
#include <string>
#include "../utils/utils.h"
#if __GNUC__ <= 8 && __clang_major__ < 17
# include <experimental/filesystem>
using namespace std::experimental;
using namespace std::experimental::filesystem;
#else
# include <filesystem>
using namespace std::filesystem;
#endif
Settings::Settings(std::string path) {
this->settings_file_path = path;
if (!std::filesystem::exists(path)) {
if (!exists(path)) {
std::ofstream output(path);
nlohmann::json settings = R"({
"ofds_modules_dir":".local/share/checks_parser/modules/ofd",
"stores_modules_dir":".local/share/checks_parser/modules/stores",
"ofds_modules_url":"https://foxarmy.org/checks-parser/modules/ofd/",
"stores_modules_url":"https://foxarmy.org/checks-parser/modules/modules/",
"print_header": true,
"print_total": true,
"output_order": {
"goods_name": {
"date" : {
"position":1,
"name": "Date"
},
"goods_name": {
"position":2,
"name":"Goods name"
},
"goods_price_per_unit": {
"position":2,
"position":3,
"name":"Goods price per unit"
},
"goods_quantity": {
"position":3,
"position":4,
"name":"Goods quantity"
},
"goods_net_weight": {
"position":4,
"position":5,
"name":"Goods net weight"
},
"goods_total": {
"position":5,
"position":6,
"name":"Goods total"
}
}
})"_json;
output << settings;
output << settings.dump(4);
output.flush();
output.close();
this->settings = settings;
@@ -52,9 +59,6 @@ Settings::Settings(std::string path) {
nlohmann::json settings = nlohmann::json::parse(input);
this->settings = settings;
}
std::filesystem::create_directories(get_path_relative_to_home(this->settings["ofds_modules_dir"]));
std::filesystem::create_directories(get_path_relative_to_home(this->settings["stores_modules_dir"]));
}
void Settings::write_setting(std::string setting, std::string value) {
@@ -62,7 +66,7 @@ void Settings::write_setting(std::string setting, std::string value) {
this->settings[setting] = value;
output << this->settings;
output << this->settings.dump(4);
}
std::string Settings::get_setting(std::string setting) {
return this->settings[setting];
@@ -85,5 +89,5 @@ void Settings::alter_setting(std::string setting, std::string value) {
void Settings::flush() {
std::ofstream output(this->settings_file_path, std::fstream::trunc);
output << this->settings;
output << this->settings.dump(4);
}

View File

@@ -1,8 +1,11 @@
#include "settingsdialog.h"
#include "settings/settings.h"
#include "ui_settingsdialog.h"
#include "utils/utils.h"
#include <iostream>
#include <settings/settings.h>
#include <utils/utils.h>
#include <QMessageBox>
#include <outputcolumnmodel.h>
SettingsDialog::SettingsDialog(QWidget *parent)
: QDialog(parent), ui(new Ui::settingsdialog),
@@ -11,103 +14,41 @@ SettingsDialog::SettingsDialog(QWidget *parent)
ui->setupUi(this);
ui->OFDModulesDirEdit->setText(QString::fromStdString(settings.get_all_settings()["ofds_modules_dir"]));
ui->OFDModulesURLEdit->setText(QString::fromStdString(settings.get_all_settings()["ofds_modules_url"]));
ui->storesModulesDirEdit->setText(QString::fromStdString(settings.get_all_settings()["stores_modules_dir"]));
ui->storesModulesURLEdit->setText(QString::fromStdString(settings.get_all_settings()["stores_modules_url"]));
columns = new std::vector<OutputColumn>;
ui->goodsNamePositionSpin->setValue(this->settings.get_all_settings()["output_order"]["goods_name"]["position"]);
ui->goodsNameAliasEdit->setText(QString::fromStdString(this->settings.get_all_settings()["output_order"]["goods_name"]["name"]));
OutputColumnModel *model = new OutputColumnModel(columns, this);
ui->goodsPricePerUnitPositionSpin->setValue(this->settings.get_all_settings()["output_order"]["goods_price_per_unit"]["position"]);
ui->goodsPricePerUnitAliasEdit->setText(QString::fromStdString(this->settings.get_all_settings()["output_order"]["goods_price_per_unit"]["name"]));
ui->outputOptionsListView->setModel(model);
ui->goodsQuantityPositionSpin->setValue(this->settings.get_all_settings()["output_order"]["goods_quantity"]["position"]);
ui->goodsQuantityAliasEdit->setText(QString::fromStdString(this->settings.get_all_settings()["output_order"]["goods_quantity"]["name"]));
for (unsigned short i = 0; i < 6; i ++)
columns->push_back(OutputColumn(tr("Кто здесь?"), ColumnType::date));
ui->goodsNetWeightPositionSpin->setValue(this->settings.get_all_settings()["output_order"]["goods_net_weight"]["position"]);
ui->goodsNetWeightAliasEdit->setText(QString::fromStdString(this->settings.get_all_settings()["output_order"]["goods_net_weight"]["name"]));
for (auto &column : column_names) {
std::string name = settings.get_all_settings()["output_order"][column.first]["name"];
unsigned short position = settings.get_all_settings()["output_order"][column.first]["position"];
ColumnType type = column.second;
columns->at(position - 1) = (OutputColumn(QString::fromStdString(name), type));
}
ui->goodsTotalPositionSpin->setValue(this->settings.get_all_settings()["output_order"]["goods_total"]["position"]);
ui->goodsTotalAliasEdit->setText(QString::fromStdString(this->settings.get_all_settings()["output_order"]["goods_total"]["name"]));
ui->printHeaderCheckBox->setChecked(settings.get_all_settings()["print_header"]);
ui->printTotalCheckBox->setChecked(settings.get_all_settings()["print_total"]);
ui->printHeaderCheckBox->setChecked(this->settings.get_all_settings()["print_header"]);
ui->printTotalCheckBox->setChecked(this->settings.get_all_settings()["print_total"]);
}
int currentLanguageIndex = 0;
bool languageSettingPresent = false;
SettingsDialog::~SettingsDialog() { delete ui; }
languageSettingPresent = settings.get_all_settings().find("language") != settings.get_all_settings().end();
void SettingsDialog::on_OFDModulesDirEdit_editingFinished() {
this->settings.alter_setting("ofds_modules_dir",
ui->OFDModulesDirEdit->text().toStdString());
}
if (languageSettingPresent) {
currentLanguageIndex = ui->languageComboBox->findText(QString::fromStdString(this->settings.get_all_settings()["language"]));
void SettingsDialog::on_storesModulesDirEdit_editingFinished() {
this->settings.alter_setting("stores_modules_dir",
ui->storesModulesDirEdit->text().toStdString());
}
} else {
currentLanguageIndex = ui->languageComboBox->findText(QLocale::system().name());
if (currentLanguageIndex < 0) {
currentLanguageIndex = ui->languageComboBox->findText("en_US");
}
}
ui->languageComboBox->setCurrentIndex(currentLanguageIndex);
void SettingsDialog::on_OFDModulesURLEdit_editingFinished() {
this->settings.alter_setting("ofds_modules_url",
ui->OFDModulesURLEdit->text().toStdString());
}
void SettingsDialog::on_storesModulesURLEdit_editingFinished() {
this->settings.alter_setting("stores_modules_url",
ui->storesModulesURLEdit->text().toStdString());
}
void SettingsDialog::on_goodsNamePositionSpin_valueChanged(int value) {
this->settings.get_all_settings()["output_order"]["goods_name"]["position"] =
value;
}
void SettingsDialog::on_goodsNameAliasEdit_editingFinished() {
this->settings.get_all_settings()["output_order"]["goods_name"]["name"] =
ui->goodsNameAliasEdit->text().toStdString();
}
void SettingsDialog::on_goodsPricePerUnitPositionSpin_valueChanged(int value) {
this->settings
.get_all_settings()["output_order"]["goods_price_per_unit"]["position"] =
value;
}
void SettingsDialog::on_goodsPricePerUnitAliasEdit_editingFinished() {
this->settings.get_all_settings()["output_order"]["goods_price_per_unit"]["name"] =
ui->goodsPricePerUnitAliasEdit->text().toStdString();
}
void SettingsDialog::on_goodsQuantityPositionSpin_valueChanged(int value) {
this->settings
.get_all_settings()["output_order"]["goods_quantity"]["position"] = value;
}
void SettingsDialog::on_goodsQuantityAliasEdit_editingFinished() {
this->settings.get_all_settings()["output_order"]["goods_quantity"]["name"] =
ui->goodsQuantityAliasEdit->text().toStdString();
}
void SettingsDialog::on_goodsNetWeightPositionSpin_valueChanged(int value) {
this->settings
.get_all_settings()["output_order"]["goods_net_weight"]["position"] =
value;
}
void SettingsDialog::on_goodsNetWeightAliasEdit_editingFinished() {
this->settings.get_all_settings()["output_order"]["goods_net_weight"]["name"] =
ui->goodsNetWeightAliasEdit->text().toStdString();
}
void SettingsDialog::on_goodsTotalPositionSpin_valueChanged(int value) {
this->settings
.get_all_settings()["output_order"]["goods_total"]["position"] =
value;
}
void SettingsDialog::on_goodsTotalAliasEdit_editingFinished() {
this->settings.get_all_settings()["output_order"]["goods_total"]["name"] =
ui->goodsTotalAliasEdit->text().toStdString();
}
void SettingsDialog::on_printHeaderCheckBox_stateChanged(int value) {
@@ -118,8 +59,39 @@ void SettingsDialog::on_printTotalCheckBox_stateChanged(int value) {
this->settings.get_all_settings()["print_total"] = (value? true : false);
}
void SettingsDialog::on_buttonBox_accepted() { this->settings.flush(); }
void SettingsDialog::on_buttonBox_accepted() {
for (int i = 0; i < columns->size(); i ++) {
OutputColumn &column = columns->at(i);
std::string key = find_key_by_value(column_names, column.get_column_type());
settings.get_all_settings()["output_order"][key]["name"] = column.get_text().toStdString();
settings.get_all_settings()["output_order"][key]["position"] = i + 1;
}
this->settings.flush();
}
void SettingsDialog::on_buttonBox_rejected() { this->close(); }
void SettingsDialog::on_languageComboBox_currentTextChanged(const QString &changed) {
bool languageSettingPresent = false;
languageSettingPresent = settings.get_all_settings().find("language") != settings.get_all_settings().end();
if (languageSettingPresent) {
if (changed == QString::fromStdString(this->settings.get_all_settings()["language"])) return;
} else {
if (changed == QLocale::system().name()) return;
}
this->settings.get_all_settings()["language"] = changed.toStdString();
QMessageBox infoDialog;
infoDialog.setText(tr("You need to restart program to apply language changes"));
infoDialog.setIcon(QMessageBox::Information);
infoDialog.setWindowTitle(tr("Restart required"));
infoDialog.exec();
}
SettingsDialog::~SettingsDialog() { delete ui; }

View File

@@ -2,7 +2,8 @@
#define SETTINGSDIALOG_H
#include <QDialog>
#include "settings/settings.h"
#include <outputcolumn.h>
#include <settings/settings.h>
namespace Ui {
class settingsdialog;
@@ -11,49 +12,25 @@ class settingsdialog;
class SettingsDialog : public QDialog {
Q_OBJECT
Settings settings;
std::vector<OutputColumn> *columns;
public:
explicit SettingsDialog(QWidget *parent = nullptr);
~SettingsDialog();
private slots:
void on_OFDModulesDirEdit_editingFinished();
void on_buttonBox_accepted();
void on_storesModulesDirEdit_editingFinished();
void on_OFDModulesURLEdit_editingFinished();
void on_storesModulesURLEdit_editingFinished();
void on_goodsNamePositionSpin_valueChanged(int arg1);
void on_goodsNameAliasEdit_editingFinished();
void on_goodsPricePerUnitPositionSpin_valueChanged(int arg1);
void on_goodsPricePerUnitAliasEdit_editingFinished();
void on_goodsQuantityPositionSpin_valueChanged(int arg1);
void on_goodsQuantityAliasEdit_editingFinished();
void on_goodsNetWeightPositionSpin_valueChanged(int arg1);
void on_goodsNetWeightAliasEdit_editingFinished();
void on_goodsTotalPositionSpin_valueChanged(int arg1);
void on_goodsTotalAliasEdit_editingFinished();
void on_printTotalCheckBox_stateChanged(int arg1);
void on_printHeaderCheckBox_stateChanged(int arg1);
void on_printTotalCheckBox_stateChanged(int arg1);
void on_buttonBox_accepted();
void on_buttonBox_rejected();
void on_languageComboBox_currentTextChanged(const QString &arg1);
private:
Ui::settingsdialog *ui;
public:
bool settingsExist();
};
#endif // SETTINGSDIALOG_H

35
solvecaptchadialog.cpp Normal file
View File

@@ -0,0 +1,35 @@
#include "solvecaptchadialog.h"
#include "ui_solvecaptchadialog.h"
#include "utils/utils.h"
#include <iostream>
#include <QMessageBox>
SolveCaptchaDialog::SolveCaptchaDialog(QWidget *parent, std::string* solved_captcha) :
QDialog(parent),
ui(new Ui::SolveCaptchaDialog),
solved_captcha(solved_captcha) {
ui->setupUi(this);
QString captcha_path = QString::fromStdString(get_path_relative_to_home(".local/share/checks_parser/captcha.jpg"));
ui->captcha_picture->setPixmap(captcha_path);
ui->captcha_picture->setScaledContents(true);
}
void SolveCaptchaDialog::accept() {
std::string userInput = ui->captcha_edit->text().toStdString();
if (userInput.length() < 6) {
QMessageBox infoDialog;
infoDialog.setText(tr("Please, enter a valid captcha"));
infoDialog.setIcon(QMessageBox::Warning);
infoDialog.setWindowTitle(tr("No captcha"));
infoDialog.exec();
} else {
solved_captcha->erase();
solved_captcha->append(userInput);
QDialog::accept();
}
}
SolveCaptchaDialog::~SolveCaptchaDialog() {
delete ui;
}

26
solvecaptchadialog.h Normal file
View File

@@ -0,0 +1,26 @@
#ifndef SOLVECAPTCHADIALOG_H
#define SOLVECAPTCHADIALOG_H
#include <QDialog>
namespace Ui {
class SolveCaptchaDialog;
}
class SolveCaptchaDialog : public QDialog
{
Q_OBJECT
public:
explicit SolveCaptchaDialog(QWidget *parent = nullptr, std::string* = nullptr) ;
~SolveCaptchaDialog();
private:
Ui::SolveCaptchaDialog *ui;
std::string* solved_captcha;
private slots:
void accept() override;
};
#endif // SOLVECAPTCHADIALOG_H

6
translations.qrc Normal file
View File

@@ -0,0 +1,6 @@
<RCC>
<qresource prefix="/translation">
<file>en_US.qm</file>
<file>ru_RU.qm</file>
</qresource>
</RCC>

818
translations/en_US.ts Normal file
View File

@@ -0,0 +1,818 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="en_US">
<context>
<name>AdjustPictureDialog</name>
<message>
<location filename="../scenes/adjustpicturedialog.ui" line="14"/>
<source>Dialog</source>
<translation>Dialog</translation>
</message>
<message>
<location filename="../scenes/adjustpicturedialog.ui" line="33"/>
<source>Please, zoom to qr code and adjust contrast so that qr code looks sharp</source>
<translation>Please, zoom to qr code and adjust contrast so that qr code looks sharp</translation>
</message>
<message>
<location filename="../adjustpicturedialog.cpp" line="42"/>
<source>QR code was not detected on that image. Please edit it again or enter data manually</source>
<translation>QR code was not detected on that image. Please edit it again or enter data manually</translation>
</message>
<message>
<location filename="../adjustpicturedialog.cpp" line="44"/>
<source>No QR code</source>
<translation>No QR code</translation>
</message>
</context>
<context>
<name>EmailTextScene</name>
<message>
<source>Form</source>
<translation type="vanished">Form</translation>
</message>
<message>
<source>Store type</source>
<translation type="obsolete">Store type</translation>
</message>
<message>
<source>Check content</source>
<translation type="vanished">Check content</translation>
</message>
<message>
<source>Parse</source>
<translation type="vanished">Parse</translation>
</message>
<message>
<source>Store:</source>
<translation type="vanished">Store:</translation>
</message>
<message>
<source>Back</source>
<translation type="vanished">Back</translation>
</message>
<message>
<source>An error has occured. Check was matched incorrectly. Vector sizes are different. Please, contact the developer.</source>
<translation type="vanished">An error has occured. Check was matched incorrectly. Vector sizes are different. Please, contact the developer.</translation>
</message>
<message>
<source>Error in parsing</source>
<translation type="vanished">Error in parsing</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<source>MainWindow</source>
<translation type="vanished">Главное окно</translation>
</message>
<message>
<source>Store type</source>
<translation type="vanished">Store type</translation>
</message>
<message>
<source>Parse</source>
<translation type="vanished">Parse</translation>
</message>
<message>
<source>Preferences</source>
<translation type="vanished">Preferences</translation>
</message>
<message>
<source>Text</source>
<translation type="vanished">Text</translation>
</message>
<message>
<source>Check content</source>
<translation type="vanished">Check content</translation>
</message>
<message>
<source>OCR</source>
<translatorcomment>OCR = Optical Character Recognition</translatorcomment>
<translation type="vanished">OCR</translation>
</message>
<message>
<source>Choose</source>
<translation type="vanished">Choose</translation>
</message>
<message>
<source>Path to image: </source>
<translation type="vanished">Path to image: </translation>
</message>
<message>
<source>Here is recognised check text. Please, edit it if something&apos;s wrong:</source>
<translation type="vanished">Here is recognised check text. Please, edit it if something&apos;s wrong:</translation>
</message>
<message>
<source>OFD</source>
<translatorcomment>OFD = Оператор Фискальных Данных</translatorcomment>
<translation type="vanished">OFD</translation>
</message>
<message>
<source>0000000000000000</source>
<translation type="vanished">0000000000000000</translation>
</message>
<message>
<location filename="../scenes/mainwindow.ui" line="322"/>
<source>FN (Fiscal Number)</source>
<translatorcomment>FN = Фискальный Номер</translatorcomment>
<translation>FN (Fiscal Number)</translation>
</message>
<message>
<location filename="../scenes/mainwindow.ui" line="58"/>
<source>FD (Fiscal Document)</source>
<translatorcomment>FD = Фискальный Документ</translatorcomment>
<translation>FD (Fiscal Document)</translation>
</message>
<message>
<source>0000000000</source>
<translation type="vanished">000000000</translation>
</message>
<message>
<source>Back</source>
<translation type="obsolete">Back</translation>
</message>
<message>
<location filename="../scenes/mainwindow.ui" line="95"/>
<source>Stop server</source>
<translation>Stop server</translation>
</message>
<message>
<source>Choose image on your PC</source>
<translation type="vanished">Choose image on your PC</translation>
</message>
<message>
<location filename="../scenes/mainwindow.ui" line="118"/>
<location filename="../scenes/mainwindow.ui" line="173"/>
<source>or</source>
<translation>or</translation>
</message>
<message>
<source>Use your phone as a QR code scanner</source>
<translation type="vanished">Use your phone as a QR code scanner</translation>
</message>
<message>
<location filename="../scenes/mainwindow.ui" line="295"/>
<source>FI (Fiscal Identifier)</source>
<translatorcomment>FI = Фискальный Признак</translatorcomment>
<translation>FI (Fiscal Identifier)</translation>
</message>
<message>
<location filename="../scenes/mainwindow.ui" line="329"/>
<source>Delete selected</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Add new check</source>
<translation type="vanished">Add new check</translation>
</message>
<message>
<source>Clear</source>
<translation type="vanished">Clear</translation>
</message>
<message>
<location filename="../scenes/mainwindow.ui" line="105"/>
<source>Date and time of purchase</source>
<translation>Date and time of purchase</translation>
</message>
<message>
<location filename="../scenes/mainwindow.ui" line="309"/>
<source>Operation type</source>
<translation>Operation type</translation>
</message>
<message>
<location filename="../scenes/mainwindow.ui" line="288"/>
<source>Parse an E-Mail</source>
<translation>Parse an E-Mail</translation>
</message>
<message>
<location filename="../scenes/mainwindow.ui" line="45"/>
<source>Add to queue</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../scenes/mainwindow.ui" line="66"/>
<source>Funds income</source>
<translatorcomment>Приход средств</translatorcomment>
<translation>Funds income</translation>
</message>
<message>
<location filename="../scenes/mainwindow.ui" line="71"/>
<source>Funds return</source>
<translatorcomment>Возврат средств</translatorcomment>
<translation>Funds return</translation>
</message>
<message>
<location filename="../scenes/mainwindow.ui" line="76"/>
<source>Funds spend</source>
<translatorcomment>Расход средств</translatorcomment>
<translation>Funds spend</translation>
</message>
<message>
<location filename="../scenes/mainwindow.ui" line="81"/>
<source>Spends return</source>
<translatorcomment>Возврат расхода</translatorcomment>
<translation>Spends return</translation>
</message>
<message>
<location filename="../scenes/mainwindow.ui" line="144"/>
<source>Checks to parse</source>
<translation>Checks to parse</translation>
</message>
<message>
<location filename="../scenes/mainwindow.ui" line="160"/>
<source>Parse queue</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../scenes/mainwindow.ui" line="186"/>
<source>QR image</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../scenes/mainwindow.ui" line="212"/>
<source>Scan QR using phone</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../scenes/mainwindow.ui" line="225"/>
<source>Settings</source>
<translation>Settings</translation>
</message>
<message>
<location filename="../scenes/mainwindow.ui" line="238"/>
<source>Clear data</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../scenes/mainwindow.ui" line="302"/>
<source>Total</source>
<translation>Total</translation>
</message>
<message>
<source>checks parser</source>
<translation type="vanished">checks parser</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="106"/>
<source>QR code for binaryeye to connect</source>
<translation>QR code for binaryeye to connect</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="107"/>
<source>I&apos;ve scanned</source>
<translation>I&apos;ve scanned</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="113"/>
<source>Could not start http server. 10 times in a row random port was occupied. Either you should run for a lottery ticket, or the problem is in the program. If the lottery ticket wasn&apos;t lucky, please, contact the developer.</source>
<translation>Could not start http server. 10 times in a row random port was occupied. Either you should run for a lottery ticket, or the problem is in the program. If the lottery ticket wasn&apos;t lucky, please, contact the developer.</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="115"/>
<source>Could not start http server.</source>
<translation>Could not start http server.</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="138"/>
<source>Images (*.jpg *.jpeg *.png)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="144"/>
<source>Selected image: </source>
<translation>Selected image: </translation>
</message>
<message>
<source>This feature is under development. Wait it to appear in next updates.</source>
<translation type="vanished">This feature is under development. Wait for it to appear in next updates.</translation>
</message>
<message>
<source>Under development</source>
<translation type="vanished">Under development</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="159"/>
<source>E-Mail files (*.eml)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="170"/>
<source>QR code in this E-Mail was not found. If you are sure that the e-mail you supplied has qr code, please, contact the developer and send him the .eml file.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="172"/>
<source>QR code was not found in E-Mail</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="186"/>
<source>Please, add check(s) to parse</source>
<translation>Please, add check(s) to parse</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="188"/>
<source>No checks to parse</source>
<translation>No checks to parse</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="255"/>
<source>Captcha was not solved correctly!</source>
<translation>Captcha was not solved correctly!</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="257"/>
<source>Captcha is incorrect</source>
<translation>Captcha is incorrect</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="261"/>
<source>Internal server error. Please, try again later.</source>
<translation>Internal server error. Please, try again later.</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="263"/>
<source>Internal server error</source>
<translation>Internal server error</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="267"/>
<source>Check not found. Please, ensure correctness of entered data.</source>
<translation>Check not found. Please, ensure correctness of entered data.</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="269"/>
<source>Check was not found</source>
<translation>Check was not found</translation>
</message>
<message>
<source>An error has occured. Check was matched incorrectly. Vector sizes are different. Please, contact the developer.</source>
<translation type="vanished">An error has occured. Check was matched incorrectly. Vector sizes are different. Please, contact the developer.</translation>
</message>
<message>
<source>Error in parsing</source>
<translation type="vanished">Error in parsing</translation>
</message>
<message>
<source>Please, select a picture where QR code that contains info about check is present</source>
<translation type="vanished">Please, select a picture where QR code that contains info about check is present</translation>
</message>
<message>
<source>Picture was not selected</source>
<translation type="vanished">Picture was not selected</translation>
</message>
<message>
<source>Please, select a picture to scan</source>
<translation type="vanished">Please, select a picture to scan</translation>
</message>
<message>
<location filename="../scenes/mainwindow.ui" line="26"/>
<source>Form</source>
<translation>Form</translation>
</message>
<message>
<source>Optical Character Recognition</source>
<translation type="vanished">Optical Character Recognition</translation>
</message>
<message>
<source>Text from E-Mail</source>
<translation type="vanished">Text from E-Mail</translation>
</message>
</context>
<context>
<name>OCRScene</name>
<message>
<source>Form</source>
<translation type="vanished">Form</translation>
</message>
<message>
<source>Choose</source>
<translation type="vanished">Choose</translation>
</message>
<message>
<source>Path to image:</source>
<translation type="vanished">Path to image:</translation>
</message>
<message>
<source>Store:</source>
<translation type="vanished">Store:</translation>
</message>
<message>
<source>Recognized text will be shown below as soon as image will be processed. Please, edit it</source>
<translation type="vanished">Recognized text will be shown below as soon as image will be processed. Please, edit it</translation>
</message>
<message>
<source>Back</source>
<translation type="vanished">Back</translation>
</message>
<message>
<source>Parse</source>
<translation type="vanished">Parse</translation>
</message>
<message>
<source>An error has occured. Check was matched incorrectly. Vector sizes are different. Please, contact the developer.</source>
<translation type="vanished">An error has occured. Check was matched incorrectly. Vector sizes are different. Please, contact the developer.</translation>
</message>
<message>
<source>Error in parsing</source>
<translation type="vanished">Error in parsing</translation>
</message>
<message>
<source>Please, select a picture to scan</source>
<translation type="vanished">Please, select a picture to scan</translation>
</message>
<message>
<source>Picture was not selected</source>
<translation type="vanished">Picture was not selected</translation>
</message>
<message>
<source>Path to image: </source>
<translation type="vanished">Path to image: </translation>
</message>
</context>
<context>
<name>OFDScene</name>
<message>
<source>Form</source>
<translation type="vanished">Form</translation>
</message>
<message>
<source>Total</source>
<translation type="vanished">Total</translation>
</message>
<message>
<source>Back</source>
<translation type="vanished">Back</translation>
</message>
<message>
<source>or</source>
<translation type="vanished">or</translation>
</message>
<message>
<source>FD (Fiscal Document)</source>
<translation type="vanished">FD (Fiscal Document)</translation>
</message>
<message>
<source>Date and time of purchase</source>
<translation type="vanished">Date and time of purchase</translation>
</message>
<message>
<source>Stop server</source>
<translation type="vanished">Stop server</translation>
</message>
<message>
<source>Funds income</source>
<translation type="vanished">Funds income</translation>
</message>
<message>
<source>Funds return</source>
<translation type="vanished">Funds return</translation>
</message>
<message>
<source>Funds spend</source>
<translation type="vanished">Funds spend</translation>
</message>
<message>
<source>Spends return</source>
<translation type="vanished">Spends return</translation>
</message>
<message>
<source>Use your phone as a QR code scanner</source>
<translation type="vanished">Use your phone as a QR code scanner</translation>
</message>
<message>
<source>FN (Fiscal Number)</source>
<translation type="vanished">FN (Fiscal Number)</translation>
</message>
<message>
<source>FI (Fiscal Identifier)</source>
<translation type="vanished">FI (Fiscal Identifier)</translation>
</message>
<message>
<source>Choose image on your PC</source>
<translation type="vanished">Choose image on your PC</translation>
</message>
<message>
<source>Operation type</source>
<translation type="vanished">Operation type</translation>
</message>
<message>
<source>Parse</source>
<translation type="vanished">Parse</translation>
</message>
<message>
<source>Could not start http server. 10 times in a row random port was occupied. Either you should run for a lottery ticket, or the problem is in the program. If the lottery ticket wasn&apos;t lucky, please, contact the developer.</source>
<translation type="vanished">Could not start http server. 10 times in a row random port was occupied. Either you should run for a lottery ticket, or the problem is in the program. If the lottery ticket wasn&apos;t lucky, please, contact the developer.</translation>
</message>
<message>
<source>Could not start http server.</source>
<translation type="vanished">Could not start http server.</translation>
</message>
<message>
<source>Please, select a picture where QR code that contains info about check is present</source>
<translation type="vanished">Please, select a picture where QR code that contains info about check is present</translation>
</message>
<message>
<source>Picture was not selected</source>
<translation type="vanished">Picture was not selected</translation>
</message>
<message>
<source>Selected image: </source>
<translation type="vanished">Selected image: </translation>
</message>
<message>
<source>Captcha was not solved correctly!</source>
<translation type="vanished">Captcha was not solved correctly!</translation>
</message>
<message>
<source>Captcha is incorrect</source>
<translation type="vanished">Captcha is incorrect</translation>
</message>
<message>
<source>Internal server error. Please, try again later.</source>
<translation type="vanished">Internal server error. Please, try again later.</translation>
</message>
<message>
<source>Internal server error</source>
<translation type="vanished">Internal server error</translation>
</message>
<message>
<source>Check not found. Please, ensure correctness of entered data.</source>
<translation type="vanished">Check not found. Please, ensure correctness of entered data.</translation>
</message>
<message>
<source>Check was not found</source>
<translation type="vanished">Check was not found</translation>
</message>
<message>
<source>QR code for binaryeye to connect</source>
<translation type="vanished">QR code for binaryeye to connect</translation>
</message>
<message>
<source>I&apos;ve scanned</source>
<translation type="vanished">I&apos;ve scanned</translation>
</message>
<message>
<source>123 123</source>
<translation type="obsolete">123 123</translation>
</message>
</context>
<context>
<name>OutputDialog</name>
<message>
<location filename="../scenes/outputdialog.ui" line="14"/>
<source>Dialog</source>
<translation>Dialog</translation>
</message>
<message>
<location filename="../scenes/outputdialog.ui" line="20"/>
<source>Path to export: </source>
<translation>Path to export: </translation>
</message>
<message>
<location filename="../scenes/outputdialog.ui" line="34"/>
<source>Choose</source>
<translation>Choose</translation>
</message>
<message>
<location filename="../scenes/outputdialog.ui" line="76"/>
<source>Print header</source>
<translation>Print header</translation>
</message>
<message>
<source>Date</source>
<translation type="vanished">Date</translation>
</message>
<message>
<source>Goods name</source>
<translation type="vanished">Goods name</translation>
</message>
<message>
<source>Goods price</source>
<translation type="vanished">Goods price</translation>
</message>
<message>
<source>Goods quantity</source>
<translation type="vanished">Goods quantity</translation>
</message>
<message>
<source>Goods net weight</source>
<translation type="vanished">Goods net weight</translation>
</message>
<message>
<source>Goods total</source>
<translation type="vanished">Goods total</translation>
</message>
<message>
<source>position</source>
<translation type="vanished">position</translation>
</message>
<message>
<source>name</source>
<translation type="vanished">name</translation>
</message>
<message>
<source>1</source>
<translation type="vanished">1</translation>
</message>
<message>
<source>Name</source>
<translation type="vanished">Name</translation>
</message>
<message>
<source>2</source>
<translation type="vanished">2</translation>
</message>
<message>
<source>Price</source>
<translation type="vanished">Price</translation>
</message>
<message>
<source>3</source>
<translation type="vanished">3</translation>
</message>
<message>
<source>Quantity</source>
<translation type="vanished">Quantity</translation>
</message>
<message>
<source>4</source>
<translation type="vanished">4</translation>
</message>
<message>
<source>Net weight</source>
<translation type="vanished">Net Weight</translation>
</message>
<message>
<source>5</source>
<translation type="vanished">5</translation>
</message>
<message>
<source>6</source>
<translation type="vanished">6</translation>
</message>
<message>
<source>Total price</source>
<translation type="vanished">Total price</translation>
</message>
<message>
<location filename="../scenes/outputdialog.ui" line="27"/>
<source>Print total</source>
<translation>Print total</translation>
</message>
<message>
<location filename="../outputdialog.cpp" line="37"/>
<source>Кто здесь?</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QObject</name>
<message>
<location filename="../main.cpp" line="60"/>
<source>Using locale: </source>
<translation>Using locale: </translation>
</message>
</context>
<context>
<name>SettingsDialog</name>
<message>
<location filename="../settingsdialog.cpp" line="24"/>
<source>Кто здесь?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="89"/>
<source>You need to restart program to apply language changes</source>
<translation>You need to restart program to apply language changes</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="91"/>
<source>Restart required</source>
<translation>Restart required</translation>
</message>
</context>
<context>
<name>SolveCaptchaDialog</name>
<message>
<location filename="../scenes/solvecaptchadialog.ui" line="14"/>
<source>Dialog</source>
<translation>Dialog</translation>
</message>
<message>
<location filename="../solvecaptchadialog.cpp" line="22"/>
<source>Please, enter a valid captcha</source>
<translation>Please, enter a valid captcha</translation>
</message>
<message>
<location filename="../solvecaptchadialog.cpp" line="24"/>
<source>No captcha</source>
<translation>No captcha</translation>
</message>
</context>
<context>
<name>settingsdialog</name>
<message>
<location filename="../scenes/settingsdialog.ui" line="14"/>
<source>Dialog</source>
<translation>Dialog</translation>
</message>
<message>
<source>Goods name position</source>
<translation type="vanished">Goods name position</translation>
</message>
<message>
<source>Goods price per unit alias</source>
<translation type="vanished">Goods price per unit alias</translation>
</message>
<message>
<source>Date name position</source>
<translation type="vanished">Date name position</translation>
</message>
<message>
<location filename="../scenes/settingsdialog.ui" line="85"/>
<source>Language</source>
<translation>Language</translation>
</message>
<message>
<source>Date name alias</source>
<translation type="vanished">Date name alias</translation>
</message>
<message>
<source>TextLabel</source>
<translation type="vanished">Language</translation>
</message>
<message>
<location filename="../scenes/settingsdialog.ui" line="58"/>
<source>en_US</source>
<translation>en_US</translation>
</message>
<message>
<location filename="../scenes/settingsdialog.ui" line="63"/>
<source>ru_RU</source>
<translation>ru_RU</translation>
</message>
<message>
<source>Choose</source>
<translation type="vanished">Choose</translation>
</message>
<message>
<location filename="../scenes/settingsdialog.ui" line="71"/>
<source>Print header</source>
<translation>Print header</translation>
</message>
<message>
<source>Goods net weight alias</source>
<translation type="vanished">Goods net weight alias</translation>
</message>
<message>
<source>Stores modules url</source>
<translation type="vanished">Stores modules url</translation>
</message>
<message>
<source>Goods total alias</source>
<translation type="vanished">Goods total alias</translation>
</message>
<message>
<source>Goods name alias</source>
<translation type="vanished">Goods name alias</translation>
</message>
<message>
<source>Goods quantity alias</source>
<translation type="vanished">Goods quantity alias</translation>
</message>
<message>
<source>Stores modules directory</source>
<translation type="vanished">Stores modules directory</translation>
</message>
<message>
<source>OFD modules directory</source>
<translation type="vanished">OFD modules directory</translation>
</message>
<message>
<source>Goods price per unit position</source>
<translation type="vanished">Goods price per unit position</translation>
</message>
<message>
<source>Goods net weight position</source>
<translation type="vanished">Goods net weight position</translation>
</message>
<message>
<source>OFD modules url</source>
<translation type="vanished">OFD modules url</translation>
</message>
<message>
<source>Goods total position</source>
<translation type="vanished">Goods total position</translation>
</message>
<message>
<source>Goods quantity position</source>
<translation type="vanished">Goods quantity position</translation>
</message>
<message>
<location filename="../scenes/settingsdialog.ui" line="50"/>
<source>Print total</source>
<translation>Print total</translation>
</message>
</context>
</TS>

786
translations/ru_RU.ts Normal file
View File

@@ -0,0 +1,786 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="ru_RU">
<context>
<name>AdjustPictureDialog</name>
<message>
<location filename="../scenes/adjustpicturedialog.ui" line="14"/>
<source>Dialog</source>
<translation>Диалог</translation>
</message>
<message>
<location filename="../scenes/adjustpicturedialog.ui" line="33"/>
<source>Please, zoom to qr code and adjust contrast so that qr code looks sharp</source>
<translation>Пожалуйста, приблизьте QR код и настройте контраст, чтобы он читался</translation>
</message>
<message>
<location filename="../adjustpicturedialog.cpp" line="42"/>
<source>QR code was not detected on that image. Please edit it again or enter data manually</source>
<translation>QR код не найден на этом изображении. Пожалуйста, попытайтесь снова или введите данные вручную</translation>
</message>
<message>
<location filename="../adjustpicturedialog.cpp" line="44"/>
<source>No QR code</source>
<translation>QR код не найден</translation>
</message>
</context>
<context>
<name>EmailTextScene</name>
<message>
<source>Form</source>
<translation type="vanished">Форма</translation>
</message>
<message>
<source>Store type</source>
<translation type="obsolete">Магазин</translation>
</message>
<message>
<source>Check content</source>
<translation type="vanished">Контент чека</translation>
</message>
<message>
<source>Parse</source>
<translation type="vanished">Парсить</translation>
</message>
<message>
<source>Store:</source>
<translation type="vanished">Магазин:</translation>
</message>
<message>
<source>Back</source>
<translation type="vanished">Назад</translation>
</message>
<message>
<source>An error has occured. Check was matched incorrectly. Vector sizes are different. Please, contact the developer.</source>
<translation type="vanished">Произошла ошибка. Чек был прочитан неверно. Размеры векторов различаются. Пожалуйста, сообщите об этом разработчику.</translation>
</message>
<message>
<source>Error in parsing</source>
<translation type="vanished">Ошибка в парсинге</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<source>MainWindow</source>
<translation type="vanished">ГлавноеОкно</translation>
</message>
<message>
<source>Store type</source>
<translation type="vanished">Магазин</translation>
</message>
<message>
<source>Parse</source>
<translation type="vanished">Парсить</translation>
</message>
<message>
<source>Preferences</source>
<translation type="vanished">Настройки</translation>
</message>
<message>
<source>Text</source>
<translation type="vanished">Текст</translation>
</message>
<message>
<source>Check content</source>
<translation type="vanished">Контент чека</translation>
</message>
<message>
<source>OCR</source>
<translatorcomment>Оптическое Распознавание Символов</translatorcomment>
<translation type="vanished">ОРС</translation>
</message>
<message>
<source>Choose</source>
<translation type="vanished">Выбрать</translation>
</message>
<message>
<source>Path to image: </source>
<translation type="vanished">Путь к изображению: </translation>
</message>
<message>
<source>Here is recognised check text. Please, edit it if something&apos;s wrong:</source>
<translation type="vanished">Ниже приведён распознанный текст. Пожалуйста, отредактируйте его:</translation>
</message>
<message>
<source>OFD</source>
<translatorcomment>Оператор Фискальных Данных</translatorcomment>
<translation type="vanished">ОФД</translation>
</message>
<message>
<source>0000000000000000</source>
<translation type="vanished">0000000000000000</translation>
</message>
<message>
<location filename="../scenes/mainwindow.ui" line="322"/>
<source>FN (Fiscal Number)</source>
<translatorcomment>Фискальный Норма</translatorcomment>
<translation>ФН</translation>
</message>
<message>
<location filename="../scenes/mainwindow.ui" line="58"/>
<source>FD (Fiscal Document)</source>
<translatorcomment>Фискальный Документ</translatorcomment>
<translation>ФД</translation>
</message>
<message>
<source>0000000000</source>
<translation type="vanished">000000000</translation>
</message>
<message>
<source>Back</source>
<translation type="obsolete">Назад</translation>
</message>
<message>
<location filename="../scenes/mainwindow.ui" line="95"/>
<source>Stop server</source>
<translation>Остановить сервер</translation>
</message>
<message>
<source>Choose image on your PC</source>
<translation type="vanished">Выбрать изображение на компьютере</translation>
</message>
<message>
<location filename="../scenes/mainwindow.ui" line="118"/>
<location filename="../scenes/mainwindow.ui" line="173"/>
<source>or</source>
<translation>или</translation>
</message>
<message>
<source>Use your phone as a QR code scanner</source>
<translation type="vanished">Использовать телефон как сканнер QR</translation>
</message>
<message>
<location filename="../scenes/mainwindow.ui" line="295"/>
<source>FI (Fiscal Identifier)</source>
<translatorcomment>Фискальный Признак</translatorcomment>
<translation>ФП</translation>
</message>
<message>
<location filename="../scenes/mainwindow.ui" line="329"/>
<source>Delete selected</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../scenes/mainwindow.ui" line="105"/>
<source>Date and time of purchase</source>
<translation>Дата и время покупки</translation>
</message>
<message>
<location filename="../scenes/mainwindow.ui" line="309"/>
<source>Operation type</source>
<translation>Тип операции</translation>
</message>
<message>
<location filename="../scenes/mainwindow.ui" line="288"/>
<source>Parse an E-Mail</source>
<translation>Парсить E-Mail</translation>
</message>
<message>
<location filename="../scenes/mainwindow.ui" line="45"/>
<source>Add to queue</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../scenes/mainwindow.ui" line="66"/>
<source>Funds income</source>
<translation>Приход средств</translation>
</message>
<message>
<location filename="../scenes/mainwindow.ui" line="71"/>
<source>Funds return</source>
<translation>Возврат средств</translation>
</message>
<message>
<location filename="../scenes/mainwindow.ui" line="76"/>
<source>Funds spend</source>
<translation>Расход средств</translation>
</message>
<message>
<location filename="../scenes/mainwindow.ui" line="81"/>
<source>Spends return</source>
<translation>Возврат расхода</translation>
</message>
<message>
<location filename="../scenes/mainwindow.ui" line="144"/>
<source>Checks to parse</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../scenes/mainwindow.ui" line="160"/>
<source>Parse queue</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../scenes/mainwindow.ui" line="186"/>
<source>QR image</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../scenes/mainwindow.ui" line="212"/>
<source>Scan QR using phone</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../scenes/mainwindow.ui" line="225"/>
<source>Settings</source>
<translation>Настройки</translation>
</message>
<message>
<location filename="../scenes/mainwindow.ui" line="238"/>
<source>Clear data</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../scenes/mainwindow.ui" line="302"/>
<source>Total</source>
<translation>Итого</translation>
</message>
<message>
<source>checks parser</source>
<translation type="vanished">Парсер чеков</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="106"/>
<source>QR code for binaryeye to connect</source>
<translation>QR код для подключения BinaryEye</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="107"/>
<source>I&apos;ve scanned</source>
<translation>Просканировал</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="113"/>
<source>Could not start http server. 10 times in a row random port was occupied. Either you should run for a lottery ticket, or the problem is in the program. If the lottery ticket wasn&apos;t lucky, please, contact the developer.</source>
<translation>Не смог поднять HTTP сервер. 10 раз подряд случайно выбранный порт был занят. Либо Вам следует бежать за лоттерейным билетом, или в программе баг. Если лотерейный билет не был выигрышным, пожалуйста, сообщите разработчику.</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="115"/>
<source>Could not start http server.</source>
<translation>Не получилось запустить HTTP сервер.</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="138"/>
<source>Images (*.jpg *.jpeg *.png)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="144"/>
<source>Selected image: </source>
<translation>Выбранное изображение: </translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="159"/>
<source>E-Mail files (*.eml)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="170"/>
<source>QR code in this E-Mail was not found. If you are sure that the e-mail you supplied has qr code, please, contact the developer and send him the .eml file.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="172"/>
<source>QR code was not found in E-Mail</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="186"/>
<source>Please, add check(s) to parse</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="188"/>
<source>No checks to parse</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="255"/>
<source>Captcha was not solved correctly!</source>
<translation>Капча была решена неверно!</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="257"/>
<source>Captcha is incorrect</source>
<translation>Капча введена неверно</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="261"/>
<source>Internal server error. Please, try again later.</source>
<translation>Внутренняя ошибка сервера. Пожалуйста, попробуйте снова позже.</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="263"/>
<source>Internal server error</source>
<translation>Внутренняя ошибка сервера</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="267"/>
<source>Check not found. Please, ensure correctness of entered data.</source>
<translation>Чек не найден. Пожалуйста, убедитесь в правильности введённых данных.</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="269"/>
<source>Check was not found</source>
<translation>Чек не найден</translation>
</message>
<message>
<source>An error has occured. Check was matched incorrectly. Vector sizes are different. Please, contact the developer.</source>
<translation type="vanished">Произошла ошибка. Чек был прочитан неверно. Размеры векторов различаются. Пожалуйста, сообщите об этом разработчику.</translation>
</message>
<message>
<source>Error in parsing</source>
<translation type="vanished">Ошибка в парсинге</translation>
</message>
<message>
<source>Please, select a picture where QR code that contains info about check is present</source>
<translation type="vanished">Пожалуйста, выберете изображение, содержащее QR код с информацией о чеке</translation>
</message>
<message>
<source>Picture was not selected</source>
<translation type="vanished">Изображение не было выбрано</translation>
</message>
<message>
<source>Please, select a picture to scan</source>
<translation type="vanished">Пожалуйста, выберете изображение для сканирования</translation>
</message>
<message>
<location filename="../scenes/mainwindow.ui" line="26"/>
<source>Form</source>
<translation>Форма</translation>
</message>
<message>
<source>Optical Character Recognition</source>
<translation type="vanished">Оптическое распознавание символов</translation>
</message>
<message>
<source>Text from E-Mail</source>
<translation type="vanished">Текст из электронного письма</translation>
</message>
</context>
<context>
<name>OCRScene</name>
<message>
<source>Form</source>
<translation type="vanished">Форма</translation>
</message>
<message>
<source>Choose</source>
<translation type="vanished">Выбрать</translation>
</message>
<message>
<source>Path to image:</source>
<translation type="vanished">Путь к изображению:</translation>
</message>
<message>
<source>Store:</source>
<translation type="vanished">Магазин:</translation>
</message>
<message>
<source>Recognized text will be shown below as soon as image will be processed. Please, edit it</source>
<translation type="vanished">Распознанный текст будет показан ниже как только изображение обработается. Пожалуйста, отредактируйте</translation>
</message>
<message>
<source>Back</source>
<translation type="vanished">Назад</translation>
</message>
<message>
<source>Parse</source>
<translation type="vanished">Парсить</translation>
</message>
<message>
<source>An error has occured. Check was matched incorrectly. Vector sizes are different. Please, contact the developer.</source>
<translation type="vanished">Произошла ошибка. Чек был прочитан неверно. Размеры векторов различаются. Пожалуйста, сообщите об этом разработчику.</translation>
</message>
<message>
<source>Error in parsing</source>
<translation type="vanished">Ошибка в парсинге</translation>
</message>
<message>
<source>Please, select a picture to scan</source>
<translation type="vanished">Пожалуйста, выберете изображение для сканирования</translation>
</message>
<message>
<source>Picture was not selected</source>
<translation type="vanished">Изображение не было выбрано</translation>
</message>
<message>
<source>Path to image: </source>
<translation type="vanished">Путь к изображению: </translation>
</message>
</context>
<context>
<name>OFDScene</name>
<message>
<source>Form</source>
<translation type="vanished">Форма</translation>
</message>
<message>
<source>Total</source>
<translation type="vanished">Итого</translation>
</message>
<message>
<source>Back</source>
<translation type="vanished">Назад</translation>
</message>
<message>
<source>or</source>
<translation type="vanished">или</translation>
</message>
<message>
<source>FD (Fiscal Document)</source>
<translation type="vanished">ФД</translation>
</message>
<message>
<source>Date and time of purchase</source>
<translation type="vanished">Дата и время покупки</translation>
</message>
<message>
<source>Stop server</source>
<translation type="vanished">Остановить сервер</translation>
</message>
<message>
<source>Funds income</source>
<translation type="vanished">Приход средств</translation>
</message>
<message>
<source>Funds return</source>
<translation type="vanished">Возврат средств</translation>
</message>
<message>
<source>Funds spend</source>
<translation type="vanished">Расход средств</translation>
</message>
<message>
<source>Spends return</source>
<translation type="vanished">Возврат расхода</translation>
</message>
<message>
<source>Use your phone as a QR code scanner</source>
<translation type="vanished">Использовать телефон как сканнер QR</translation>
</message>
<message>
<source>FN (Fiscal Number)</source>
<translation type="vanished">ФН</translation>
</message>
<message>
<source>FI (Fiscal Identifier)</source>
<translation type="vanished">ФП</translation>
</message>
<message>
<source>Choose image on your PC</source>
<translation type="vanished">Выбрать изображение на компьютере</translation>
</message>
<message>
<source>Operation type</source>
<translation type="vanished">Тип операции</translation>
</message>
<message>
<source>Parse</source>
<translation type="vanished">Парсить</translation>
</message>
<message>
<source>Could not start http server. 10 times in a row random port was occupied. Either you should run for a lottery ticket, or the problem is in the program. If the lottery ticket wasn&apos;t lucky, please, contact the developer.</source>
<translation type="vanished">Не смог поднять HTTP сервер. 10 раз подряд случайно выбранный порт был занят. Либо Вам следует бежать за лоттерейным билетом, или в программе баг. Если лотерейный билет не был выигрышным, пожалуйста, сообщите разработчику.</translation>
</message>
<message>
<source>Could not start http server.</source>
<translation type="vanished">Не получилось запустить HTTP сервер.</translation>
</message>
<message>
<source>Please, select a picture where QR code that contains info about check is present</source>
<translation type="vanished">Пожалуйста, выберете изображение, содержащее QR код с информацией о чеке</translation>
</message>
<message>
<source>Picture was not selected</source>
<translation type="vanished">Изображение не было выбрано</translation>
</message>
<message>
<source>Selected image: </source>
<translation type="vanished">Выбранное изображение: </translation>
</message>
<message>
<source>Captcha was not solved correctly!</source>
<translation type="vanished">Капча была решена неверно!</translation>
</message>
<message>
<source>Captcha is incorrect</source>
<translation type="vanished">Капча введена неверно</translation>
</message>
<message>
<source>Internal server error. Please, try again later.</source>
<translation type="vanished">Внутренняя ошибка сервера. Пожалуйста, попробуйте снова позже.</translation>
</message>
<message>
<source>Internal server error</source>
<translation type="vanished">Внутренняя ошибка сервера</translation>
</message>
<message>
<source>Check not found. Please, ensure correctness of entered data.</source>
<translation type="vanished">Чек не найден. Пожалуйста, убедитесь в правильности введённых данных.</translation>
</message>
<message>
<source>Check was not found</source>
<translation type="vanished">Чек не найден</translation>
</message>
<message>
<source>QR code for binaryeye to connect</source>
<translation type="vanished">QR код для подключения BinaryEye</translation>
</message>
<message>
<source>I&apos;ve scanned</source>
<translation type="vanished">Просканировал</translation>
</message>
<message>
<source>123 123</source>
<translation type="obsolete">123 123</translation>
</message>
</context>
<context>
<name>OutputDialog</name>
<message>
<location filename="../scenes/outputdialog.ui" line="14"/>
<source>Dialog</source>
<translation>Диалог</translation>
</message>
<message>
<location filename="../scenes/outputdialog.ui" line="20"/>
<source>Path to export: </source>
<translation>Путь для экспорта: </translation>
</message>
<message>
<location filename="../scenes/outputdialog.ui" line="34"/>
<source>Choose</source>
<translation>Выбрать</translation>
</message>
<message>
<location filename="../scenes/outputdialog.ui" line="76"/>
<source>Print header</source>
<translation>Печатать заголовок</translation>
</message>
<message>
<source>Goods name</source>
<translation type="vanished">Имя товара</translation>
</message>
<message>
<source>Goods price</source>
<translation type="vanished">Цена товара</translation>
</message>
<message>
<source>Goods quantity</source>
<translation type="vanished">Количество товара</translation>
</message>
<message>
<source>Goods net weight</source>
<translation type="vanished">Масса нетто товара</translation>
</message>
<message>
<source>Goods total</source>
<translation type="vanished">Всего за товар</translation>
</message>
<message>
<source>position</source>
<translation type="vanished">позиция</translation>
</message>
<message>
<source>name</source>
<translation type="vanished">алиас</translation>
</message>
<message>
<source>1</source>
<translation type="vanished">1</translation>
</message>
<message>
<source>Name</source>
<translation type="vanished">Имя</translation>
</message>
<message>
<source>2</source>
<translation type="vanished">2</translation>
</message>
<message>
<source>Price</source>
<translation type="vanished">Цена</translation>
</message>
<message>
<source>3</source>
<translation type="vanished">3</translation>
</message>
<message>
<source>Quantity</source>
<translation type="vanished">Количество</translation>
</message>
<message>
<source>4</source>
<translation type="vanished">4</translation>
</message>
<message>
<source>Net weight</source>
<translation type="vanished">Масса нетто</translation>
</message>
<message>
<source>5</source>
<translation type="vanished">5</translation>
</message>
<message>
<source>6</source>
<translation type="obsolete">6</translation>
</message>
<message>
<source>Total price</source>
<translation type="vanished">Всего</translation>
</message>
<message>
<location filename="../scenes/outputdialog.ui" line="27"/>
<source>Print total</source>
<translation>Печатать Итого</translation>
</message>
<message>
<location filename="../outputdialog.cpp" line="37"/>
<source>Кто здесь?</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QObject</name>
<message>
<location filename="../main.cpp" line="60"/>
<source>Using locale: </source>
<translation>Использую локаль: </translation>
</message>
</context>
<context>
<name>SettingsDialog</name>
<message>
<location filename="../settingsdialog.cpp" line="24"/>
<source>Кто здесь?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="89"/>
<source>You need to restart program to apply language changes</source>
<translation>Требуется перезагрузить программу, чтобы применить изменения языка</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="91"/>
<source>Restart required</source>
<translation>Требуется перезагрузка</translation>
</message>
</context>
<context>
<name>SolveCaptchaDialog</name>
<message>
<location filename="../scenes/solvecaptchadialog.ui" line="14"/>
<source>Dialog</source>
<translation>Диалог</translation>
</message>
<message>
<location filename="../solvecaptchadialog.cpp" line="22"/>
<source>Please, enter a valid captcha</source>
<translation>Пожалуйста, введите верную капчу</translation>
</message>
<message>
<location filename="../solvecaptchadialog.cpp" line="24"/>
<source>No captcha</source>
<translation>Нет капчи</translation>
</message>
</context>
<context>
<name>settingsdialog</name>
<message>
<location filename="../scenes/settingsdialog.ui" line="14"/>
<source>Dialog</source>
<translation>Диалог</translation>
</message>
<message>
<source>Goods name position</source>
<translation type="vanished">Позиция имени товара</translation>
</message>
<message>
<source>Goods price per unit alias</source>
<translation type="vanished">Алиас цены товара</translation>
</message>
<message>
<location filename="../scenes/settingsdialog.ui" line="85"/>
<source>Language</source>
<translation>Язык</translation>
</message>
<message>
<source>TextLabel</source>
<translation type="vanished">Язык</translation>
</message>
<message>
<location filename="../scenes/settingsdialog.ui" line="58"/>
<source>en_US</source>
<translation>en_US</translation>
</message>
<message>
<location filename="../scenes/settingsdialog.ui" line="63"/>
<source>ru_RU</source>
<translation>ru_RU</translation>
</message>
<message>
<source>Choose</source>
<translation type="vanished">Выбрать</translation>
</message>
<message>
<location filename="../scenes/settingsdialog.ui" line="71"/>
<source>Print header</source>
<translation>Печатать заголовок</translation>
</message>
<message>
<source>Goods net weight alias</source>
<translation type="vanished">Алиас массы нетто товара</translation>
</message>
<message>
<source>Stores modules url</source>
<translation type="vanished">URL модулей магазина</translation>
</message>
<message>
<source>Goods total alias</source>
<translation type="vanished">Алиас всего за продукт</translation>
</message>
<message>
<source>Goods name alias</source>
<translation type="vanished">Алиас имени товара</translation>
</message>
<message>
<source>Goods quantity alias</source>
<translation type="vanished">Алиас количества товара</translation>
</message>
<message>
<source>Stores modules directory</source>
<translation type="vanished">Директория модулей магазина</translation>
</message>
<message>
<source>OFD modules directory</source>
<translation type="vanished">Директория модулей ОФД</translation>
</message>
<message>
<source>Goods price per unit position</source>
<translation type="vanished">Позиция центы товара</translation>
</message>
<message>
<source>Goods net weight position</source>
<translation type="vanished">Позиция массы нетто товара</translation>
</message>
<message>
<source>OFD modules url</source>
<translation type="vanished">URL модулей ОФД</translation>
</message>
<message>
<source>Goods total position</source>
<translation type="vanished">Позиция всего за товар</translation>
</message>
<message>
<source>Goods quantity position</source>
<translation type="vanished">Позиция количества товара</translation>
</message>
<message>
<location filename="../scenes/settingsdialog.ui" line="50"/>
<source>Print total</source>
<translation>Печатать Итого</translation>
</message>
</context>
</TS>

79
utils/base64.cpp Normal file
View File

@@ -0,0 +1,79 @@
/*
base64.cpp and base64.h
Copyright (C) 2004-2008 René Nyffenegger
This source code is provided 'as-is', without any express or implied
warranty. In no event will the author be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this source code must not be misrepresented; you must not
claim that you wrote the original source code. If you use this source code
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original source code.
3. This notice may not be removed or altered from any source distribution.
René Nyffenegger rene.nyffenegger@adp-gmbh.ch
*/
#include <utils/base64.h>
#include <string>
static const std::string base64_chars =
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz"
"0123456789+/";
static inline bool is_base64(unsigned char c) {
return (std::isalnum(c) || (c == '+') || (c == '/'));
}
std::string base64_decode(std::string const& encoded_string) {
int in_len = encoded_string.size();
int i = 0;
int j = 0;
int in_ = 0;
unsigned char char_array_4[4], char_array_3[3];
std::string ret;
while (in_len-- && ( encoded_string[in_] != '=') && is_base64(encoded_string[in_])) {
char_array_4[i++] = encoded_string[in_]; in_++;
if (i ==4) {
for (i = 0; i <4; i++)
char_array_4[i] = base64_chars.find(char_array_4[i]);
char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4);
char_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2);
char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3];
for (i = 0; (i < 3); i++)
ret += char_array_3[i];
i = 0;
}
}
if (i) {
for (j = i; j <4; j++)
char_array_4[j] = 0;
for (j = 0; j <4; j++)
char_array_4[j] = base64_chars.find(char_array_4[j]);
char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4);
char_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2);
char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3];
for (j = 0; (j < i - 1); j++) ret += char_array_3[j];
}
return ret;
}

29
utils/base64.h Normal file
View File

@@ -0,0 +1,29 @@
/*
base64.cpp and base64.h
Copyright (C) 2004-2008 René Nyffenegger
This source code is provided 'as-is', without any express or implied
warranty. In no event will the author be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this source code must not be misrepresented; you must not
claim that you wrote the original source code. If you use this source code
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original source code.
3. This notice may not be removed or altered from any source distribution.
René Nyffenegger rene.nyffenegger@adp-gmbh.ch
*/
#include <string>
std::string base64_decode(std::string const& encoded_string);

View File

@@ -1,8 +1,62 @@
#include "utils.h"
#include "output/output_options.h"
#include <utils/utils.h>
#ifdef BUILD_OFD_BINARYEYE_SCAN
# include <arpa/inet.h>
# include <qrencode.h>
# include <ifaddrs.h>
# include <netinet/in.h>
#endif
#ifdef BUILD_OFD_MODE
# include <exceptions/ofdrequestexception.h>
# include <fstream>
#endif
#include <codecvt>
#include <cstring>
#include <iostream>
#include <locale>
#if defined(BUILD_OCR_MODE) || defined(BUILD_OFD_MODE)
# include <opencv2/core/mat.hpp>
# include <opencv2/imgcodecs.hpp>
# include <opencv2/imgproc.hpp>
#endif
#include <string>
#include <QWidget>
#include <boost/regex.hpp>
#include <net/net.h>
#include <settings/settings.h>
#include <boost/regex.hpp>
#include <boost/algorithm/string/regex.hpp>
#include <boost/algorithm/string.hpp>
#ifdef BUILD_OFD_BINARYEYE_SCAN
std::string get_local_ip_address() {
struct ifaddrs * ifAddrStruct=NULL;
struct ifaddrs * ifa=NULL;
void * tmpAddrPtr=NULL;
getifaddrs(&ifAddrStruct);
for (ifa = ifAddrStruct; ifa != NULL; ifa = ifa->ifa_next) {
if (ifa->ifa_addr == nullptr) continue;
if (ifa->ifa_addr->sa_family==AF_INET) {
tmpAddrPtr=&((struct sockaddr_in *)ifa->ifa_addr)->sin_addr;
char addressBuffer[128];
inet_ntop(AF_INET, tmpAddrPtr, addressBuffer, INET_ADDRSTRLEN);
std::string value(addressBuffer);
//TODO: better way to determine local IP address
if (!strncmp(value.c_str(), "192.168", 7)) {
return value;
}
}
}
if (ifAddrStruct!=NULL)
freeifaddrs(ifAddrStruct);
throw std::runtime_error(QWidget::tr("Could not find any usable local IP address. If you beleive that this is problem with the program, please, contact the developer.").toStdString());
}
#endif
std::string to_utf8(std::wstring wide_string) {
static std::wstring_convert<std::codecvt_utf8<wchar_t>> utf8_conv;
@@ -18,6 +72,26 @@ std::string get_path_relative_to_home(std::string path) {
return std::string(std::getenv("HOME")) + "/" + path;
}
std::string get_application_home_path() {
return get_path_relative_to_home(".local/share/checks_parser");
}
std::map<std::string, std::string> get_params_from_string(std::string parametersString) {
parametersString = boost::regex_replace(parametersString, boost::regex("%26"), "&");
parametersString = boost::regex_replace(parametersString, boost::regex("%3[Dd]"), "=");
std::vector<std::string> parameters = split(parametersString, "&");
std::map<std::string, std::string> paramsMap;
for (auto &parameter : parameters) {
std::vector<std::string> values = split(parameter, "=");
paramsMap.insert(std::pair<std::string, std::string> (values[0], values[1]));
}
return paramsMap;
}
template <typename T>
bool vector_contains_element(const std::vector<T>& vector, const T& to_find) {
for (const T& element : vector) {
@@ -25,9 +99,36 @@ bool vector_contains_element(const std::vector<T>& vector, const T& to_find) {
}
return false;
}
template<class T>
bool areAllSizesEqual(const std::vector<T>& v1, const std::vector<T>& v2,
const std::vector<T>& v3, const std::vector<T>& v4) {
return (v1.size() == v2.size() && v2.size() == v3.size() && v3.size() == v4.size());
}
// template<typename K, typename V>
// K find_key_by_value(std::map<K, V> &m, V value) {
// for (auto& entry : m) {
// if (value == entry.second) {
// return entry.first;
// }
// }
// return K();
// }
std::string find_key_by_value(const std::map<std::string, ColumnType> &m, ColumnType value) {
for (auto& entry : m) {
if (value == entry.second) {
return entry.first;
}
}
return "";
}
//ужас
template bool vector_contains_element<std::string>(const std::vector<std::string>& vector, const std::string& to_find);
template bool areAllSizesEqual(const std::vector<std::string>& v1, const std::vector<std::string>& v2,
const std::vector<std::string>& v3, const std::vector<std::string>& v4);
// template std::string find_key_by_value(std::map<std::string, ColumnType> &, ColumnType);
std::vector<std::string> split(std::string s, std::string delimiter) {
std::vector<std::string> result;
@@ -42,3 +143,227 @@ std::vector<std::string> split(std::string s, std::string delimiter) {
return result;
}
std::vector<std::wstring> split(std::wstring s, std::wstring delimiter) {
std::vector<std::wstring> result;
size_t pos = 0;
std::wstring token;
while ((pos = s.find(delimiter)) != std::string::npos) {
token = s.substr(0, pos);
result.push_back(token);
s.erase(0, pos + delimiter.length());
}
result.push_back(s);
return result;
}
std::wstring substring_from_to(std::wstring& text, std::wstring from, std::wstring to) {
unsigned int start_pos = 0;
unsigned int end_pos = 0;
std::wstring substring;
boost::wregex start_regex(from);
boost::wregex end_regex(to);
for (boost::wsregex_iterator it{text.begin(), text.end(), start_regex}, end{};
it != end; it++) {
start_pos = it->position() + it->str().size();
break;
}
if(text == from_utf8("")) return text;
substring = text.substr(start_pos, text.size());
for (boost::wsregex_iterator it{substring.begin(), substring.end(), end_regex}, end{};
it != end; it++) {
end_pos = it->position();
break;
}
if (end_pos == 0) return substring;
substring = substring.substr(0, end_pos);
return substring;
}
#ifdef BUILD_OFD_MODE
std::wstring trim_html_response(std::wstring& check) {
std::wstring begin_check_marker = from_utf8("<!-- Products -->");
std::wstring end_check_marker = from_utf8("<!-- \\/Products -->");
std::wstring trimmed = substring_from_to(check, begin_check_marker, end_check_marker);
trimmed += from_utf8("\n</div>");
return trimmed;
}
std::vector<std::wstring> find_in_html(std::string& html, std::string regex) {
boost::regex searching_regex(regex, boost::match_flag_type::match_single_line);
std::vector<std::wstring> parsed;
for (boost::sregex_iterator it{html.begin(), html.end(), searching_regex}, end{};
it != end; it++) {
// std::wstring found_entry = from_utf8(it->str());
parsed.push_back(from_utf8(it->str()));
// std::cout << "Found: " << to_utf8(found_entry) << std::endl;
// std::wstring extracted = substring_from_to(found_entry, from_utf8(html_start), from_utf8(html_end));
// std::cout << "Extracted: " << to_utf8(extracted) << std::endl;
// parsed.push_back(extracted);
}
return parsed;
}
std::vector<std::wstring> find_products_in_html(std::string html) {
boost::regex search_regex("(?<=\\n\\s{20}<div class=\"ifw-col ifw-col-1 text-left\">).{0,100}(?=(<\\/b>)?<\\/div>)");
boost::regex b_regex("(<b>)|(</b>)");
std::vector<std::wstring> parsed;
for (boost::sregex_iterator it{html.begin(), html.end(), search_regex}, end{};
it != end; it++) {
std::string found = it->str();
boost::erase_all_regex(found, b_regex);
found = boost::regex_replace(found, boost::regex("&nbsp;"), "?");
parsed.push_back(from_utf8(found));
}
return parsed;
}
std::vector<std::wstring> find_amounts_in_html(std::string html) {
return find_in_html(html, "(?<=<div><span>)\\d+(\\.|\\,)?\\d{0,3}(?=<\\/span>)");
}
std::vector<std::wstring> find_net_weights_in_names(std::vector<std::wstring> &names) {
std::vector<std::wstring> result;
for (std::wstring &name : names ) {
boost::wregex regexp(from_utf8("((\\d+(\\.|,)?\\d{0,}((м|)л|(к|м|)г|т|ц|шт|(pc|)s|(m|k|)g|(m|)l|t))(\\s|\\t){0,})+"), boost::regex_constants::collate);
bool found = false;
for (boost::wsregex_iterator it{name.begin(), name.end(), regexp}, end{}; it != end;
it++) {
result.push_back(it->str());
found = true;
name.erase(it->position(), it->str().length());
break;
}
if (!found) {
result.push_back(from_utf8("?"));
}
}
for (auto &entry : result) {
std::replace(entry.begin(), entry.end(), ',', '.');
}
return result;
}
std::vector<std::wstring> find_prices_in_html(std::string html) {
return find_in_html(html, "(?<=X <\\/span><span>)\\d+(\\.|,)\\d{2}(?=<\\/span>)");
}
void dumpVectorsToStderr(std::vector<std::wstring> &products, std::vector<std::wstring> &amounts, std::vector<std::wstring> &net_weights, std::vector<std::wstring> &prices) {
std::cerr << "Products: ";
for (auto &product : products) {
std::cerr << to_utf8(product) << "|[]|";
}
std::cerr << std::endl;
std::cerr << "Amounts: ";
for (auto &amount : amounts) {
std::wcerr << amount << " ";
}
std::cerr << std::endl;
std::cerr << "Net weights: ";
for (auto &net_weight : net_weights) {
std::wcerr << net_weight << " ";
}
std::cerr << std::endl;
std::cerr << "Prices: ";
for (auto &price : prices) {
std::wcerr << price << " ";
}
std::cerr << std::endl;
}
Check parseOfdRuAnswer(std::string html) {
std::wstring wstr_html = from_utf8(html);
std::string trimmed = to_utf8(trim_html_response(wstr_html));
std::vector<std::wstring> products = find_products_in_html(trimmed);
std::vector<std::wstring> amounts = find_amounts_in_html(trimmed);
std::vector<std::wstring> net_weights = find_net_weights_in_names(products);
std::vector<std::wstring> prices = find_prices_in_html(trimmed);
if ((products.size() + amounts.size() + prices.size()) == 0) {
if (html == "Bad Request4") { // Failed to solve a captcha
throw OfdRequestException("Incorrect captcha");
} else if (html.find("500 - Internal server error.") != std::string::npos) {
throw OfdRequestException("Internal server error");
} else { // Most likely that the check does not exist
throw OfdRequestException("Does not exist");
}
return Check();
}
if ((products.size() + amounts.size() + prices.size())/products.size() != 3) {
dumpVectorsToStderr(products, amounts, net_weights, prices);
//TOOD: make new setting "app_home" and get all path using it.
std::ofstream error_log(get_path_relative_to_home(".local/share/checks_parser/error_log.txt"), std::ios_base::app);
error_log << trimmed << std::endl;
std::cerr << "An error has occured during the parsing of html. Please, contact the developer." << std::endl;
std::exit(-1);
}
Check c;
for (int i = 0; i < products.size(); i ++) {
// std::cout << "Adding to check: ";
// std::cout << to_utf8(products[i]) << " " << to_utf8(prices[i]) << " " << to_utf8(net_weights[i]) << " " << to_utf8(amounts[i]) << std::endl;
std::replace(amounts[i].begin(), amounts[i].end(), from_utf8(",")[0], from_utf8(".")[0]);
Goods goods(to_utf8(products[i]), std::stod(prices[i]), to_utf8(net_weights[i]), std::stod(amounts[i]));
c.add_goods(goods);
}
return c;
}
#endif // ifdef BUILD_OFD_MODE
#ifdef BUILD_OFD_BINARYEYE_SCAN
void generate_qr_code(std::string data) {
QRcode *qrCode = QRcode_encodeString(data.c_str(), 2, QR_ECLEVEL_L, QR_MODE_8, 1);
if (qrCode == NULL) {
std::cerr << "Error on generating qr code" << std::endl;
}
cv::Mat qrCodeImage = cv::Mat::zeros(qrCode->width, qrCode->width, CV_8UC3);
for (int y = 0; y < qrCode->width; y++) {
for (int x = 0; x < qrCode->width; x++) {
cv::rectangle(
qrCodeImage,
cv::Point(x, y),
cv::Point(x + 1, y + 1),
((qrCode->data[y * qrCode->width + x] & 1) ?
cv::Scalar(255., 255., 255.) : cv::Scalar(0., 0., 0.)
),
-1
);
}
}
cv::imwrite(get_path_relative_to_home(".local/share/checks_parser/binaryeye_connection.png"), qrCodeImage);
QRcode_free(qrCode);
}
#endif // ifdef BUILD_OFD_BINARYEYE_SCAN
#ifdef BUILD_EMAIL_MODE
std::string read_file(std::string &path) {
std::ifstream ifile(path, std::ios::in | std::ios::binary);
const unsigned int size = std::filesystem::file_size(path);
std::string content(size, '\0');
ifile.read(content.data(), size);
ifile.close();
return content;
}
#endif // ifdef BUILD_EMAIL_MODE

View File

@@ -3,15 +3,53 @@
#include <string>
#include <vector>
#include <map>
#include "../check/check.h"
#include "output/output_options.h"
std::string to_utf8(std::wstring wide_string);
std::wstring from_utf8(std::string string);
std::string get_path_relative_to_home(std::string path);
std::string get_application_home_path();
std::map<std::string, std::string> get_params_from_string(std::string);
const std::map<std::string, ColumnType> column_names = {
{"date", ColumnType::date},
{"goods_name", ColumnType::goods_name},
{"goods_price_per_unit", ColumnType::goods_price_per_unit},
{"goods_quantity", ColumnType::goods_quantity},
{"goods_net_weight", ColumnType::goods_net_weight},
{"goods_total", ColumnType::goods_total}
};
// template <typename K, typename V>
// K find_key_by_value(std::map<K, V> &m, V value);
std::string find_key_by_value(const std::map<std::string, ColumnType> &m, ColumnType value);
template <typename T>
bool vector_contains_element(const std::vector<T> &vector, const T &to_find);
template <class T>
bool areAllSizesEqual(const std::vector<T>& v1, const std::vector<T>& v2,
const std::vector<T>& v3, const std::vector<T>& v4);
std::vector<std::string> split(std::string, std::string);
std::vector<std::wstring> split(std::wstring s, std::wstring delimiter);
#ifdef BUILD_OFD_MODE
Check parseOfdRuAnswer(std::string);
std::wstring trim_html_response(std::wstring& check);
#endif
#ifdef BUILD_OFD_BINARYEYE_SCAN
void generate_qr_code(std::string data);
std::string get_local_ip_address();
#endif
void fetch_and_download_modules();
#ifdef BUILD_EMAIL_MODE
std::string read_file(std::string &path);
#endif
#endif // UTILS_H

View File

@@ -0,0 +1,229 @@
#include "checkqueuetablemodel.h"
#include <QMimeData>
#include <QIODevice>
#include <QDateTime>
#include <QVector>
CheckQueueTableModel::CheckQueueTableModel(std::vector<Check> *checks, QObject *parent)
: checks(checks), QAbstractTableModel{parent}
{}
int CheckQueueTableModel::rowCount(const QModelIndex &parent) const { return checks->size(); }
int CheckQueueTableModel::columnCount(const QModelIndex &parent) const { return 2; }
QVariant CheckQueueTableModel::data(const QModelIndex &index, int role) const {
if (!index.isValid() || index.row() >= checks->size())
return QVariant();
if (role != Qt::DisplayRole) return QVariant();
Check& c = checks->at(index.row());
switch (index.column()) {
case 0:
return QVariant::fromValue(QString::fromStdString(c.get_date()));
break;
case 1:
return QVariant::fromValue(c.get_total());
break;
}
return QVariant();
}
bool CheckQueueTableModel::setData(const QModelIndex &index, const QVariant &value, int role) {
if (role == Qt::EditRole) {
if (!index.isValid() || index.row() >= checks->size())
return false;
unsigned int row = index.row();
Check &c = checks->at(row);
switch (index.column()) {
case 0:
c.set_date(value.value<std::string>());
break;
case 1:
c.set_total(value.value<double>());
break;
emit dataChanged(index, index, {role});
}
return true;
}
return false;
}
QVariant CheckQueueTableModel::headerData(int section, Qt::Orientation orientation, int role) const {
if (role == Qt::DisplayRole && orientation == Qt::Horizontal) {
switch (section) {
case 0:
return tr("Date&Time");
case 1:
return tr("Total");
}
} else if (role == Qt::DisplayRole && orientation == Qt::Vertical) {
return section + 1;
}
return QVariant();
}
Qt::ItemFlags CheckQueueTableModel::flags(const QModelIndex &index) const {
auto flags = QAbstractItemModel::flags(index);
if (index.isValid())
flags |= Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsDragEnabled;
else
flags |= Qt::ItemIsDropEnabled;
return flags;
}
Qt::DropActions CheckQueueTableModel::supportedDropActions() const {
return Qt::DropActions() | Qt::MoveAction;
}
bool CheckQueueTableModel::insertRows(int position, int rows, const QModelIndex &index) {
beginInsertRows(QModelIndex(), position, position+rows-1);
for (int i = 0; i < rows; ++i)
checks->emplace(checks->begin() + position, Check());
endInsertRows();
return true;
}
bool CheckQueueTableModel::removeRows(int position, int rows, const QModelIndex &index) {
beginRemoveRows(QModelIndex(), position, position+rows-1);
for (int row = 0; row < rows; ++row)
checks->erase(std::next(checks->begin(), position));
endRemoveRows();
return true;
}
QStringList CheckQueueTableModel::mimeTypes() const {
QStringList types;
types << CheckQueueTableModel::MimeType;
return types;
}
bool CheckQueueTableModel::canDropMimeData(const QMimeData *data, Qt::DropAction action, int row, int, const QModelIndex &) {
if (action != Qt::MoveAction || !data->hasFormat(CheckQueueTableModel::MimeType))
return false;
if (row > checks->size()) return false;
return true;
}
QMimeData* CheckQueueTableModel::mimeData(const QModelIndexList &indexes) const {
QMimeData* mimeData = new QMimeData;
QByteArray encodedData;
QDataStream stream(&encodedData, QIODevice::WriteOnly);
for (const QModelIndex &i : indexes) {
if (i.isValid() && i.column() == 0) {
Check &c = checks->at(i.row());
QString date = QString::fromStdString(c.get_date()),
fn = QString::fromStdString(c.get_fn()),
fd = QString::fromStdString(c.get_fd()),
fi = QString::fromStdString(c.get_fi());
double total = c.get_total();
OperationType type = c.get_operationType();
std::vector<Goods> goods = c.get_goods();
stream << date << total << type << fn << fd << fi << goods;
}
}
mimeData->setData(CheckQueueTableModel::MimeType, encodedData);
return mimeData;
}
bool CheckQueueTableModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) {
if (!canDropMimeData(data, action, row, column, parent)) return false;
if (action == Qt::IgnoreAction) return true;
else if (action != Qt::MoveAction) return false;
if (row > checks->size()) return false;
QByteArray encodedData = data->data(CheckQueueTableModel::MimeType);
QDataStream stream(&encodedData, QIODevice::ReadOnly);
std::vector<Check> newItems;
int rows = 0;
while (!stream.atEnd()) {
QString date, fn, fd, fi;
double total;
OperationType type;
std::vector<Goods> goods;
stream >> date >> total >> type >> fn >> fd >> fi >> goods;
Check c = Check(
date.toStdString(),
total,
type,
fn.toStdString(),
fd.toStdString(),
fi.toStdString(),
goods
);
newItems.push_back(c);
++rows;
}
insertRows(row, rows, QModelIndex());
for (Check item : newItems) {
// (*checks)[row] = std::move(item);
Check &c = checks->at(row);
c.set_date(item.get_date());
c.set_total(item.get_total());
c.set_fn(item.get_fn());
c.set_fd(item.get_fd());
c.set_fi(item.get_fi());
c.set_operation_type(item.get_operationType());
for (Goods &g : item.get_goods()) {
c.add_goods(g);
}
emit dataChanged(index(row, 0), index(row, 1));
row++;
}
return true;
}
void CheckQueueTableModel::sort(int column, Qt::SortOrder order) {
beginResetModel();
switch (column) {
case 0:
std::sort(checks->begin(), checks->end(),
[&](const Check& a, const Check& b) {
if (order == Qt::AscendingOrder) {
return compare(a, b, column);
} else {
return !compare(a, b, column);
}
});
break;
case 1:
std::sort(checks->begin(), checks->end(),
[&](const Check& a, const Check& b) {
if (order == Qt::AscendingOrder) {
return compare(a, b, column);
} else {
return !compare(a, b, column);
}
});
}
endResetModel();
}
bool CheckQueueTableModel::compare(const Check &check_a, const Check &check_b, int column) {
switch (column) {
case 0:
return
QDateTime::fromString(QString::fromStdString(((Check &)check_a).get_date()), "yyyyMMddThhmm")
>
QDateTime::fromString(QString::fromStdString(((Check &)check_b).get_date()), "yyyyMMddThhmm");
break;
case 1:
return ((Check &)check_a).get_total() > ((Check &)check_b).get_total();
break;
default: return false;
}
}

View File

@@ -0,0 +1,41 @@
#ifndef CHECKQUEUETABLEMODEL_H
#define CHECKQUEUETABLEMODEL_H
#include <QAbstractTableModel>
#include <check/check.h>
class CheckQueueTableModel : public QAbstractTableModel
{
Q_OBJECT
static constexpr const char* MimeType = "application/check.queue.model";
public:
explicit CheckQueueTableModel(std::vector<Check> *checks, QObject *parent = nullptr);
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
int columnCount(const QModelIndex &parent = QModelIndex()) const override;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override;
QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
Qt::ItemFlags flags(const QModelIndex &index) const override;
Qt::DropActions supportedDropActions() const override;
bool insertRows(int position, int rows, const QModelIndex &index = QModelIndex()) override;
bool removeRows(int position, int rows, const QModelIndex &index = QModelIndex()) override;
QStringList mimeTypes() const override;
bool canDropMimeData(const QMimeData *data, Qt::DropAction action, int, int, const QModelIndex &);
QMimeData* mimeData(const QModelIndexList &indexes) const override;
bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) override;
void sort(int column, Qt::SortOrder order) override;
private:
std::vector<Check> *checks;
bool compare(const Check& check_a, const Check& check_b, int column);
signals:
void editCompleted(const QString &);
};
#endif // CHECKQUEUETABLEMODEL_H

Some files were not shown because too many files have changed in this diff Show More