| @@ -0,0 +1,5 @@ | |||||
| /LOGS/* | |||||
| /bleh/ | |||||
| /release/* | |||||
| /debug/* | |||||
| /ZTStats.pro.user | |||||
| @@ -0,0 +1,36 @@ | |||||
| <?xml version="1.0" encoding="UTF-8"?> | |||||
| <ui version="4.0"> | |||||
| <class>CMainWindow</class> | |||||
| <widget class="QMainWindow" name="CMainWindow"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>0</x> | |||||
| <y>0</y> | |||||
| <width>927</width> | |||||
| <height>610</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="windowTitle"> | |||||
| <string>CMainWindow</string> | |||||
| </property> | |||||
| <widget class="QWidget" name="centralWidget"> | |||||
| <widget class="QGroupBox" name="ReportParamsGroupBx"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>10</x> | |||||
| <y>10</y> | |||||
| <width>531</width> | |||||
| <height>551</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="title"> | |||||
| <string>Paramètres du rapport</string> | |||||
| </property> | |||||
| </widget> | |||||
| </widget> | |||||
| <widget class="QStatusBar" name="statusBar"/> | |||||
| </widget> | |||||
| <layoutdefault spacing="6" margin="11"/> | |||||
| <resources/> | |||||
| <connections/> | |||||
| </ui> | |||||
| @@ -0,0 +1,485 @@ | |||||
| ############################################################################# | |||||
| # Makefile for building: ZTStats | |||||
| # Generated by qmake (3.1) (Qt 5.14.2) | |||||
| # Project: ZTStats.pro | |||||
| # Template: app | |||||
| # Command: C:\Qt\Qt5.14.2\5.14.2\mingw73_64\bin\qmake.exe -o Makefile ZTStats.pro -spec win32-g++ | |||||
| ############################################################################# | |||||
| MAKEFILE = Makefile | |||||
| EQ = = | |||||
| first: release | |||||
| install: release-install | |||||
| uninstall: release-uninstall | |||||
| QMAKE = C:\Qt\Qt5.14.2\5.14.2\mingw73_64\bin\qmake.exe | |||||
| DEL_FILE = del | |||||
| CHK_DIR_EXISTS= if not exist | |||||
| MKDIR = mkdir | |||||
| COPY = copy /y | |||||
| COPY_FILE = copy /y | |||||
| COPY_DIR = xcopy /s /q /y /i | |||||
| INSTALL_FILE = copy /y | |||||
| INSTALL_PROGRAM = copy /y | |||||
| INSTALL_DIR = xcopy /s /q /y /i | |||||
| QINSTALL = C:\Qt\Qt5.14.2\5.14.2\mingw73_64\bin\qmake.exe -install qinstall | |||||
| QINSTALL_PROGRAM = C:\Qt\Qt5.14.2\5.14.2\mingw73_64\bin\qmake.exe -install qinstall -exe | |||||
| DEL_FILE = del | |||||
| SYMLINK = $(QMAKE) -install ln -f -s | |||||
| DEL_DIR = rmdir | |||||
| MOVE = move | |||||
| IDC = idc | |||||
| IDL = midl | |||||
| ZIP = zip -r -9 | |||||
| DEF_FILE = | |||||
| RES_FILE = | |||||
| SED = $(QMAKE) -install sed | |||||
| MOVE = move | |||||
| SUBTARGETS = \ | |||||
| release \ | |||||
| debug | |||||
| release: FORCE | |||||
| $(MAKE) -f $(MAKEFILE).Release | |||||
| release-make_first: FORCE | |||||
| $(MAKE) -f $(MAKEFILE).Release | |||||
| release-all: FORCE | |||||
| $(MAKE) -f $(MAKEFILE).Release all | |||||
| release-clean: FORCE | |||||
| $(MAKE) -f $(MAKEFILE).Release clean | |||||
| release-distclean: FORCE | |||||
| $(MAKE) -f $(MAKEFILE).Release distclean | |||||
| release-install: FORCE | |||||
| $(MAKE) -f $(MAKEFILE).Release install | |||||
| release-uninstall: FORCE | |||||
| $(MAKE) -f $(MAKEFILE).Release uninstall | |||||
| debug: FORCE | |||||
| $(MAKE) -f $(MAKEFILE).Debug | |||||
| debug-make_first: FORCE | |||||
| $(MAKE) -f $(MAKEFILE).Debug | |||||
| debug-all: FORCE | |||||
| $(MAKE) -f $(MAKEFILE).Debug all | |||||
| debug-clean: FORCE | |||||
| $(MAKE) -f $(MAKEFILE).Debug clean | |||||
| debug-distclean: FORCE | |||||
| $(MAKE) -f $(MAKEFILE).Debug distclean | |||||
| debug-install: FORCE | |||||
| $(MAKE) -f $(MAKEFILE).Debug install | |||||
| debug-uninstall: FORCE | |||||
| $(MAKE) -f $(MAKEFILE).Debug uninstall | |||||
| Makefile: ZTStats.pro C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/win32-g++/qmake.conf C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/spec_pre.prf \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/qdevice.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/device_config.prf \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/common/sanitize.conf \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/common/gcc-base.conf \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/common/g++-base.conf \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/common/angle.conf \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/win32/windows_vulkan_sdk.prf \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/common/windows-vulkan.conf \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/common/g++-win32.conf \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/common/windows-desktop.conf \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/qconfig.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_3danimation.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_3danimation_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_3dcore.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_3dcore_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_3dextras.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_3dextras_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_3dinput.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_3dinput_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_3dlogic.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_3dlogic_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_3dquick.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_3dquick_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_3dquickanimation.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_3dquickanimation_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_3dquickextras.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_3dquickextras_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_3dquickinput.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_3dquickinput_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_3dquickrender.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_3dquickrender_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_3dquickscene2d.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_3dquickscene2d_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_3drender.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_3drender_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_accessibility_support_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_axbase.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_axbase_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_axcontainer.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_axcontainer_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_axserver.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_axserver_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_bluetooth.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_bluetooth_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_bootstrap_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_concurrent.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_concurrent_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_core.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_core_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_dbus.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_dbus_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_designer.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_designer_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_designercomponents_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_edid_support_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_egl_support_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_fb_support_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_fontdatabase_support_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_gamepad.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_gamepad_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_gui.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_gui_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_help.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_help_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_httpserver.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_httpserver_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_location.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_location_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_mqtt.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_mqtt_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_multimedia.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_multimedia_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_multimediawidgets.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_multimediawidgets_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_network.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_network_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_nfc.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_nfc_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_opengl.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_opengl_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_openglextensions.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_openglextensions_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_packetprotocol_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_platformcompositor_support_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_positioning.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_positioning_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_positioningquick.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_positioningquick_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_printsupport.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_printsupport_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_qml.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_qml_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_qmldebug_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_qmldevtools_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_qmlmodels.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_qmlmodels_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_qmltest.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_qmltest_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_qmlworkerscript.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_qmlworkerscript_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_quick.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_quick_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_quickcontrols2.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_quickcontrols2_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_quickparticles_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_quickshapes_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_quicktemplates2.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_quicktemplates2_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_quickwidgets.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_quickwidgets_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_remoteobjects.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_remoteobjects_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_repparser.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_repparser_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_scxml.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_scxml_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_sensors.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_sensors_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_serialbus.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_serialbus_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_serialport.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_serialport_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_sql.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_sql_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_sslserver.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_sslserver_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_svg.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_svg_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_testlib.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_testlib_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_texttospeech.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_texttospeech_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_theme_support_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_uiplugin.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_uitools.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_uitools_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_vulkan_support_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_webchannel.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_webchannel_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_websockets.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_websockets_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_widgets.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_widgets_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_windowsuiautomation_support_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_winextras.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_winextras_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_xlsx.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_xlsx_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_xml.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_xml_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_xmlpatterns.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_xmlpatterns_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_zlib_private.pri \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/qt_functions.prf \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/qt_config.prf \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/win32-g++/qmake.conf \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/spec_post.prf \ | |||||
| ../.qmake.stash \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/exclusive_builds.prf \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/toolchain.prf \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/default_pre.prf \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/win32/default_pre.prf \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/resolve_config.prf \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/exclusive_builds_post.prf \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/default_post.prf \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/precompile_header.prf \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/warn_on.prf \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/qt.prf \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/resources_functions.prf \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/resources.prf \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/moc.prf \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/win32/opengl.prf \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/uic.prf \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/qmake_use.prf \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/file_copies.prf \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/win32/windows.prf \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/testcase_targets.prf \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/exceptions.prf \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/yacc.prf \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/lex.prf \ | |||||
| ZTStats.pro \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/lib/Qt5Xlsx.prl \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/lib/Qt5Widgets.prl \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/lib/Qt5Gui.prl \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/lib/Qt5Core.prl \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/lib/qtmain.prl \ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/build_pass.prf | |||||
| $(QMAKE) -o Makefile ZTStats.pro -spec win32-g++ | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/spec_pre.prf: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/qdevice.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/device_config.prf: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/common/sanitize.conf: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/common/gcc-base.conf: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/common/g++-base.conf: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/common/angle.conf: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/win32/windows_vulkan_sdk.prf: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/common/windows-vulkan.conf: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/common/g++-win32.conf: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/common/windows-desktop.conf: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/qconfig.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_3danimation.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_3danimation_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_3dcore.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_3dcore_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_3dextras.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_3dextras_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_3dinput.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_3dinput_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_3dlogic.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_3dlogic_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_3dquick.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_3dquick_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_3dquickanimation.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_3dquickanimation_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_3dquickextras.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_3dquickextras_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_3dquickinput.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_3dquickinput_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_3dquickrender.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_3dquickrender_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_3dquickscene2d.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_3dquickscene2d_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_3drender.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_3drender_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_accessibility_support_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_axbase.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_axbase_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_axcontainer.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_axcontainer_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_axserver.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_axserver_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_bluetooth.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_bluetooth_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_bootstrap_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_concurrent.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_concurrent_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_core.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_core_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_dbus.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_dbus_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_designer.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_designer_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_designercomponents_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_devicediscovery_support_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_edid_support_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_egl_support_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_fb_support_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_fontdatabase_support_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_gamepad.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_gamepad_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_gui.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_gui_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_help.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_help_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_httpserver.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_httpserver_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_location.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_location_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_mqtt.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_mqtt_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_multimedia.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_multimedia_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_multimediawidgets.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_multimediawidgets_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_network.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_network_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_nfc.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_nfc_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_opengl.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_opengl_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_openglextensions.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_openglextensions_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_packetprotocol_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_platformcompositor_support_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_positioning.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_positioning_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_positioningquick.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_positioningquick_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_printsupport.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_printsupport_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_qml.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_qml_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_qmldebug_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_qmldevtools_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_qmlmodels.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_qmlmodels_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_qmltest.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_qmltest_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_qmlworkerscript.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_qmlworkerscript_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_quick.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_quick_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_quickcontrols2.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_quickcontrols2_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_quickparticles_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_quickshapes_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_quicktemplates2.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_quicktemplates2_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_quickwidgets.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_quickwidgets_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_remoteobjects.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_remoteobjects_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_repparser.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_repparser_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_scxml.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_scxml_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_sensors.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_sensors_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_serialbus.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_serialbus_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_serialport.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_serialport_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_sql.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_sql_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_sslserver.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_sslserver_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_svg.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_svg_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_testlib.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_testlib_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_texttospeech.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_texttospeech_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_theme_support_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_uiplugin.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_uitools.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_uitools_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_vulkan_support_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_webchannel.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_webchannel_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_websockets.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_websockets_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_widgets.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_widgets_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_windowsuiautomation_support_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_winextras.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_winextras_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_xlsx.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_xlsx_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_xml.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_xml_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_xmlpatterns.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_xmlpatterns_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/modules/qt_lib_zlib_private.pri: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/qt_functions.prf: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/qt_config.prf: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/win32-g++/qmake.conf: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/spec_post.prf: | |||||
| ../.qmake.stash: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/exclusive_builds.prf: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/toolchain.prf: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/default_pre.prf: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/win32/default_pre.prf: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/resolve_config.prf: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/exclusive_builds_post.prf: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/default_post.prf: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/precompile_header.prf: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/warn_on.prf: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/qt.prf: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/resources_functions.prf: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/resources.prf: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/moc.prf: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/win32/opengl.prf: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/uic.prf: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/qmake_use.prf: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/file_copies.prf: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/win32/windows.prf: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/testcase_targets.prf: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/exceptions.prf: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/yacc.prf: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/lex.prf: | |||||
| ZTStats.pro: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/lib/Qt5Xlsx.prl: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/lib/Qt5Widgets.prl: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/lib/Qt5Gui.prl: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/lib/Qt5Core.prl: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/lib/qtmain.prl: | |||||
| C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/build_pass.prf: | |||||
| qmake: FORCE | |||||
| @$(QMAKE) -o Makefile ZTStats.pro -spec win32-g++ | |||||
| qmake_all: FORCE | |||||
| make_first: release-make_first debug-make_first FORCE | |||||
| all: release-all debug-all FORCE | |||||
| clean: release-clean debug-clean FORCE | |||||
| distclean: release-distclean debug-distclean FORCE | |||||
| -$(DEL_FILE) Makefile | |||||
| release-mocclean: | |||||
| $(MAKE) -f $(MAKEFILE).Release mocclean | |||||
| debug-mocclean: | |||||
| $(MAKE) -f $(MAKEFILE).Debug mocclean | |||||
| mocclean: release-mocclean debug-mocclean | |||||
| release-mocables: | |||||
| $(MAKE) -f $(MAKEFILE).Release mocables | |||||
| debug-mocables: | |||||
| $(MAKE) -f $(MAKEFILE).Debug mocables | |||||
| mocables: release-mocables debug-mocables | |||||
| check: first | |||||
| benchmark: first | |||||
| FORCE: | |||||
| $(MAKEFILE).Release: Makefile | |||||
| $(MAKEFILE).Debug: Makefile | |||||
| @@ -0,0 +1,680 @@ | |||||
| <?xml version="1.0" encoding="UTF-8"?> | |||||
| <ui version="4.0"> | |||||
| <class>CReportPage</class> | |||||
| <widget class="QWidget" name="CReportPage"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>0</x> | |||||
| <y>0</y> | |||||
| <width>980</width> | |||||
| <height>617</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="windowTitle"> | |||||
| <string>Form</string> | |||||
| </property> | |||||
| <widget class="QGroupBox" name="groupBox"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>10</x> | |||||
| <y>20</y> | |||||
| <width>391</width> | |||||
| <height>561</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="title"> | |||||
| <string>Paramètres du rapport</string> | |||||
| </property> | |||||
| <widget class="QDateEdit" name="mReportEndDateEdit"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>94</x> | |||||
| <y>70</y> | |||||
| <width>110</width> | |||||
| <height>22</height> | |||||
| </rect> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QLabel" name="mReportStartDateLbl"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>14</x> | |||||
| <y>40</y> | |||||
| <width>71</width> | |||||
| <height>20</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="font"> | |||||
| <font> | |||||
| <pointsize>10</pointsize> | |||||
| </font> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>Date début</string> | |||||
| </property> | |||||
| <property name="alignment"> | |||||
| <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QDateEdit" name="mReportStartDateEdit"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>94</x> | |||||
| <y>40</y> | |||||
| <width>110</width> | |||||
| <height>22</height> | |||||
| </rect> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QLabel" name="mReportEndDateLbl"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>10</x> | |||||
| <y>70</y> | |||||
| <width>71</width> | |||||
| <height>20</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="font"> | |||||
| <font> | |||||
| <pointsize>10</pointsize> | |||||
| </font> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>Date fin</string> | |||||
| </property> | |||||
| <property name="alignment"> | |||||
| <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QGroupBox" name="groupBox_2"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>10</x> | |||||
| <y>280</y> | |||||
| <width>371</width> | |||||
| <height>261</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="title"> | |||||
| <string>Filtre détection</string> | |||||
| </property> | |||||
| <widget class="QCheckBox" name="mReportFunctionPPI_2ChkBx"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>180</x> | |||||
| <y>50</y> | |||||
| <width>131</width> | |||||
| <height>20</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="font"> | |||||
| <font> | |||||
| <pointsize>10</pointsize> | |||||
| </font> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>PP Intérieur</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QCheckBox" name="mReportFunctionComptage_2ChkBx"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>180</x> | |||||
| <y>90</y> | |||||
| <width>131</width> | |||||
| <height>20</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="font"> | |||||
| <font> | |||||
| <pointsize>10</pointsize> | |||||
| </font> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>Comptage</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QCheckBox" name="mReportFunctionPEQ2ChkBx"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>180</x> | |||||
| <y>110</y> | |||||
| <width>131</width> | |||||
| <height>20</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="font"> | |||||
| <font> | |||||
| <pointsize>10</pointsize> | |||||
| </font> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>Panne Équipement</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QCheckBox" name="mReportFunctionFNChkBx"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>10</x> | |||||
| <y>50</y> | |||||
| <width>131</width> | |||||
| <height>20</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="font"> | |||||
| <font> | |||||
| <pointsize>10</pointsize> | |||||
| </font> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>Frotteurs Négatifs</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QCheckBox" name="mReportFunctionPGChkBx"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>10</x> | |||||
| <y>70</y> | |||||
| <width>131</width> | |||||
| <height>20</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="font"> | |||||
| <font> | |||||
| <pointsize>10</pointsize> | |||||
| </font> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>PG</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QCheckBox" name="mReportFunctionPEQ1ChkBx"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>10</x> | |||||
| <y>150</y> | |||||
| <width>131</width> | |||||
| <height>20</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="font"> | |||||
| <font> | |||||
| <pointsize>10</pointsize> | |||||
| </font> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>Panne Équipement</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QCheckBox" name="mReportFunctionPPE_2ChkBx"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>180</x> | |||||
| <y>70</y> | |||||
| <width>131</width> | |||||
| <height>20</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="font"> | |||||
| <font> | |||||
| <pointsize>10</pointsize> | |||||
| </font> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>PP Extérieur</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QCheckBox" name="mReportFunctionComptage_1ChkBx"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>10</x> | |||||
| <y>130</y> | |||||
| <width>131</width> | |||||
| <height>20</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="font"> | |||||
| <font> | |||||
| <pointsize>10</pointsize> | |||||
| </font> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>Comptage</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QLabel" name="mReportEndDateLbl_2"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>30</x> | |||||
| <y>20</y> | |||||
| <width>71</width> | |||||
| <height>20</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="font"> | |||||
| <font> | |||||
| <pointsize>12</pointsize> | |||||
| </font> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>ZT1</string> | |||||
| </property> | |||||
| <property name="alignment"> | |||||
| <set>Qt::AlignCenter</set> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QLabel" name="mReportEndDateLbl_3"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>190</x> | |||||
| <y>20</y> | |||||
| <width>71</width> | |||||
| <height>20</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="font"> | |||||
| <font> | |||||
| <pointsize>12</pointsize> | |||||
| </font> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>ZT2</string> | |||||
| </property> | |||||
| <property name="alignment"> | |||||
| <set>Qt::AlignCenter</set> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QCheckBox" name="mReportFunctionPPE_1ChkBx"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>10</x> | |||||
| <y>110</y> | |||||
| <width>131</width> | |||||
| <height>20</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="font"> | |||||
| <font> | |||||
| <pointsize>10</pointsize> | |||||
| </font> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>PP Extérieur</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QCheckBox" name="mReportFunctionPPI_1ChkBx"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>10</x> | |||||
| <y>90</y> | |||||
| <width>131</width> | |||||
| <height>20</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="font"> | |||||
| <font> | |||||
| <pointsize>10</pointsize> | |||||
| </font> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>PP Intérieur</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QCheckBox" name="mReportFunctionNoDecl1ChkBx"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>10</x> | |||||
| <y>220</y> | |||||
| <width>151</width> | |||||
| <height>20</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="font"> | |||||
| <font> | |||||
| <pointsize>10</pointsize> | |||||
| </font> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>Sans déclenchements</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QCheckBox" name="mReportFunctionNoDecl2ChkBx"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>170</x> | |||||
| <y>220</y> | |||||
| <width>151</width> | |||||
| <height>20</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="font"> | |||||
| <font> | |||||
| <pointsize>10</pointsize> | |||||
| </font> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>Sans déclenchements</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QPushButton" name="mSelectAllFuncZT1Btn"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>10</x> | |||||
| <y>180</y> | |||||
| <width>41</width> | |||||
| <height>22</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>Tout</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QPushButton" name="mSelectNoneFuncZT1Btn"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>70</x> | |||||
| <y>180</y> | |||||
| <width>41</width> | |||||
| <height>22</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>Rien</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QPushButton" name="mSelectNoneFuncZT2Btn"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>240</x> | |||||
| <y>140</y> | |||||
| <width>41</width> | |||||
| <height>22</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>Rien</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QPushButton" name="mSelectAllFuncZT2Btn"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>180</x> | |||||
| <y>140</y> | |||||
| <width>41</width> | |||||
| <height>22</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>Tout</string> | |||||
| </property> | |||||
| </widget> | |||||
| </widget> | |||||
| <widget class="QGroupBox" name="groupBox_3"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>10</x> | |||||
| <y>120</y> | |||||
| <width>371</width> | |||||
| <height>141</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="title"> | |||||
| <string>Sélection des stations</string> | |||||
| </property> | |||||
| <widget class="QCheckBox" name="mReportStationSnowdonChkBx"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>150</x> | |||||
| <y>90</y> | |||||
| <width>111</width> | |||||
| <height>20</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="font"> | |||||
| <font> | |||||
| <pointsize>10</pointsize> | |||||
| </font> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>Snowdon</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QCheckBox" name="mReportStationBeaugrandChkBx"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>10</x> | |||||
| <y>40</y> | |||||
| <width>111</width> | |||||
| <height>20</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="font"> | |||||
| <font> | |||||
| <pointsize>10</pointsize> | |||||
| </font> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>H. Beaugrand</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QCheckBox" name="mReportStationBourassaChkBx"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>10</x> | |||||
| <y>90</y> | |||||
| <width>111</width> | |||||
| <height>20</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="font"> | |||||
| <font> | |||||
| <pointsize>10</pointsize> | |||||
| </font> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>Henri-Bourassa</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QCheckBox" name="mReportStationVertuChkBx"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>10</x> | |||||
| <y>70</y> | |||||
| <width>111</width> | |||||
| <height>20</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="font"> | |||||
| <font> | |||||
| <pointsize>10</pointsize> | |||||
| </font> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>Côte-Vertu</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QCheckBox" name="mReportStationMontmorencyChkBx"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>10</x> | |||||
| <y>110</y> | |||||
| <width>111</width> | |||||
| <height>20</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="font"> | |||||
| <font> | |||||
| <pointsize>10</pointsize> | |||||
| </font> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>Montmorency</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QCheckBox" name="mReportStationBerriChkBx"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>150</x> | |||||
| <y>20</y> | |||||
| <width>91</width> | |||||
| <height>20</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="font"> | |||||
| <font> | |||||
| <pointsize>10</pointsize> | |||||
| </font> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>Berri L4</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QCheckBox" name="mReportStationLongueuilChkBx"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>150</x> | |||||
| <y>40</y> | |||||
| <width>91</width> | |||||
| <height>20</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="font"> | |||||
| <font> | |||||
| <pointsize>10</pointsize> | |||||
| </font> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>Longueuil</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QCheckBox" name="mReportStationStMichelChkBx"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>150</x> | |||||
| <y>70</y> | |||||
| <width>111</width> | |||||
| <height>20</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="font"> | |||||
| <font> | |||||
| <pointsize>10</pointsize> | |||||
| </font> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>St-Michel</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QCheckBox" name="mReportStationAngrignonChkBx"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>10</x> | |||||
| <y>20</y> | |||||
| <width>91</width> | |||||
| <height>20</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="font"> | |||||
| <font> | |||||
| <pointsize>10</pointsize> | |||||
| </font> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>Angrignon</string> | |||||
| </property> | |||||
| </widget> | |||||
| </widget> | |||||
| </widget> | |||||
| <widget class="QPushButton" name="mGenerateReportBtn"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>470</x> | |||||
| <y>30</y> | |||||
| <width>111</width> | |||||
| <height>22</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>Générer Rapport</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QProgressBar" name="mReportProgressBarr"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>510</x> | |||||
| <y>470</y> | |||||
| <width>321</width> | |||||
| <height>23</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="value"> | |||||
| <number>24</number> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QTextEdit" name="mReportProgressTextEdit"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>470</x> | |||||
| <y>60</y> | |||||
| <width>401</width> | |||||
| <height>391</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="textInteractionFlags"> | |||||
| <set>Qt::NoTextInteraction</set> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QLabel" name="mTimerLable"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>670</x> | |||||
| <y>30</y> | |||||
| <width>151</width> | |||||
| <height>16</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="font"> | |||||
| <font> | |||||
| <pointsize>12</pointsize> | |||||
| </font> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>TextLabel</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QPushButton" name="mOpenReportBtn"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>470</x> | |||||
| <y>510</y> | |||||
| <width>80</width> | |||||
| <height>22</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>Ouvrir rapport</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QLabel" name="mReportPathLabel"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>560</x> | |||||
| <y>510</y> | |||||
| <width>381</width> | |||||
| <height>16</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="font"> | |||||
| <font> | |||||
| <pointsize>10</pointsize> | |||||
| </font> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>TextLabel</string> | |||||
| </property> | |||||
| </widget> | |||||
| </widget> | |||||
| <resources/> | |||||
| <connections/> | |||||
| </ui> | |||||
| @@ -0,0 +1,2 @@ | |||||
| D:\Main\Dev\ZTStats\LOGS | |||||
| D:\Main\Dev\ZTStats\bleh | |||||
| @@ -0,0 +1,264 @@ | |||||
| #include "DirParserThread.h" | |||||
| #include "ZTData.h" | |||||
| #include "GlobalDefine.h" | |||||
| #include "QString" | |||||
| #include "QStringList" | |||||
| #include <QDate> | |||||
| void CDirParserThread::ParseDirectories() | |||||
| { | |||||
| // if(mRootDir.absolutePath().isEmpty() == true) | |||||
| // { | |||||
| // emit ParsingFinished(0); | |||||
| // return; | |||||
| // } | |||||
| // ParseDir(mRootDir,mKeepData); | |||||
| mMutex.lockForWrite(); | |||||
| mExecThread = true; | |||||
| mMutex.unlock(); | |||||
| GatherReportData(mReportSettings,mReportFilters); | |||||
| // emit ParsingFinished(1); | |||||
| qDebug("Worker thread finished"); | |||||
| } | |||||
| CDirParserThread::CDirParserThread() | |||||
| { | |||||
| mExecThread = true; | |||||
| //Allocate a directory list for each station. | |||||
| for(int i = 0; i < NB_ZT_ID; i++) | |||||
| { | |||||
| mReportDirectoriesList.append(QStringList()); | |||||
| } | |||||
| } | |||||
| void CDirParserThread::GatherReportData(CReportProgramSettingsData ReportSettings, CReportConfigData ReportFilters) | |||||
| { | |||||
| //First, get a list of the filtered directories | |||||
| for(int i = 0; i < NB_ZT_ID; i++) | |||||
| { | |||||
| mReportDirectoriesList[i].clear(); | |||||
| } | |||||
| for(int i = 0; i < ReportSettings.mDataSourceDirectoryPaths.size(); i++) | |||||
| { | |||||
| QString BaseDir(ReportSettings.mDataSourceDirectoryPaths.at(i)); | |||||
| if(ReportFilters.mReportStationAngrignon == true) | |||||
| { | |||||
| QDir AngDir(QString("%1/ANG/").arg(BaseDir)); | |||||
| mReportDirectoriesList[ANGRIGNON_ZT_ID].append(FilterDirectories(AngDir,ReportFilters.mReportStartDate,ReportFilters.mReportEndDate)); | |||||
| } | |||||
| if(ReportFilters.mReportStationBeaugrand == true) | |||||
| { | |||||
| QDir Dir(QString("%1/HBGR/").arg(BaseDir)); | |||||
| mReportDirectoriesList[HONORE_BEAUGRAND_ZT_ID].append(FilterDirectories(Dir,ReportFilters.mReportStartDate,ReportFilters.mReportEndDate)); | |||||
| } | |||||
| if(ReportFilters.mReportStationVertu == true) | |||||
| { | |||||
| QDir Dir(QString("%1/CVRT/").arg(BaseDir)); | |||||
| mReportDirectoriesList[COTE_VERTU_ZT_ID].append(FilterDirectories(Dir,ReportFilters.mReportStartDate,ReportFilters.mReportEndDate)); | |||||
| } | |||||
| if(ReportFilters.mReportStationBourassa == true) | |||||
| { | |||||
| QDir Dir(QString("%1/HBOU/").arg(BaseDir)); | |||||
| mReportDirectoriesList[HENRI_BOURASSA_ZT_ID].append(FilterDirectories(Dir,ReportFilters.mReportStartDate,ReportFilters.mReportEndDate)); | |||||
| } | |||||
| if(ReportFilters.mReportStationMontmorency == true) | |||||
| { | |||||
| QDir Dir(QString("%1/MMO/").arg(BaseDir)); | |||||
| mReportDirectoriesList[MONTMORENCY_ZT_ID].append(FilterDirectories(Dir,ReportFilters.mReportStartDate,ReportFilters.mReportEndDate)); | |||||
| } | |||||
| if(ReportFilters.mReportStationBerri == true) | |||||
| { | |||||
| QDir Dir(QString("%1/BUQ4/").arg(BaseDir)); | |||||
| mReportDirectoriesList[BERRI_UQAM_ZT_ID].append(FilterDirectories(Dir,ReportFilters.mReportStartDate,ReportFilters.mReportEndDate)); | |||||
| } | |||||
| if(ReportFilters.mReportStationLongueuil == true) | |||||
| { | |||||
| QDir Dir(QString("%1/LONG/").arg(BaseDir)); | |||||
| mReportDirectoriesList[LONGUEUIL_ZT_ID].append(FilterDirectories(Dir,ReportFilters.mReportStartDate,ReportFilters.mReportEndDate)); | |||||
| } | |||||
| if(ReportFilters.mReportStationStMichel == true) | |||||
| { | |||||
| QDir Dir(QString("%1/SMIC/").arg(BaseDir)); | |||||
| mReportDirectoriesList[SAINT_MICHEL_ZT_ID].append(FilterDirectories(Dir,ReportFilters.mReportStartDate,ReportFilters.mReportEndDate)); | |||||
| } | |||||
| if(ReportFilters.mReportStationSnowdon == true) | |||||
| { | |||||
| QDir Dir(QString("%1/SNW5/").arg(BaseDir)); | |||||
| mReportDirectoriesList[SNOWDON_ZT_ID].append(FilterDirectories(Dir,ReportFilters.mReportStartDate,ReportFilters.mReportEndDate)); | |||||
| } | |||||
| } | |||||
| //Check if we found any directory... | |||||
| bool found = false; | |||||
| for(int i = 0; i < mReportDirectoriesList.size(); i++) | |||||
| { | |||||
| if(mReportDirectoriesList.at(i).isEmpty() == false) | |||||
| { | |||||
| found = true; | |||||
| break; | |||||
| } | |||||
| } | |||||
| if(found == false) | |||||
| { | |||||
| emit ReportProgressStatus("Aucun log correspondant aux filtres n'a été trouvé"); | |||||
| emit ParsingFinished(0); | |||||
| return; | |||||
| } | |||||
| //Now, parse each directory and collect data from ZT files. | |||||
| for(int station = 0; station < mReportDirectoriesList.size(); station++) | |||||
| { | |||||
| if(mReportDirectoriesList[station].isEmpty() == false) | |||||
| { | |||||
| QList<CLogElement*> *Container = mReportDataContainer->at(station); | |||||
| for(int dir =0; dir < mReportDirectoriesList[station].size(); dir++) | |||||
| { | |||||
| mMutex.lockForRead(); | |||||
| bool Run = mExecThread; | |||||
| mMutex.unlock(); | |||||
| if(Run == false) | |||||
| { | |||||
| emit ThreadAborted(); | |||||
| return; | |||||
| } | |||||
| emit ReportProgressStatus(QString("Analyse des fichiers du répertoire %1").arg(mReportDirectoriesList[station].at(dir))); | |||||
| ParseDir(QDir(mReportDirectoriesList[station].at(dir)),Container); | |||||
| } | |||||
| } | |||||
| } | |||||
| emit ParsingFinished(1); | |||||
| } | |||||
| QStringList CDirParserThread::FilterDirectories(QDir BaseDir, QDate StartDate, QDate EndDate) | |||||
| { | |||||
| QStringList OutputList; | |||||
| OutputList.clear(); | |||||
| BaseDir.setFilter(QDir::Dirs | QDir::NoDotAndDotDot); | |||||
| BaseDir.setSorting(QDir::Name); | |||||
| //QStringList DirList = BaseDir.entryList(); | |||||
| QFileInfoList DirList = BaseDir.entryInfoList(); | |||||
| for(int i = 0; i < DirList.size(); i++) | |||||
| { | |||||
| QString curDir = DirList.at(i).absoluteFilePath(); | |||||
| // QStringList DirNameChunks = curDir.split(BaseDir.separator()); | |||||
| // if(!DirNameChunks.isEmpty()) | |||||
| { | |||||
| //QDate DirDate; | |||||
| QString DirDateString = DirList.at(i).baseName().right(8); | |||||
| QDate DirDate = QDate::fromString(DirDateString,"yyyyMMdd"); | |||||
| //Check if the directory is in the date range | |||||
| if(DirDate <= EndDate && DirDate >= StartDate) | |||||
| { | |||||
| OutputList.append(curDir); | |||||
| } | |||||
| } | |||||
| } | |||||
| return OutputList; | |||||
| } | |||||
| int CDirParserThread::ParseDir(QDir dir, QList<CLogElement *> *Container) | |||||
| { | |||||
| mMutex.lockForRead(); | |||||
| bool Run = mExecThread; | |||||
| mMutex.unlock(); | |||||
| if(Run == false) | |||||
| { | |||||
| emit ThreadAborted(); | |||||
| return 0; | |||||
| } | |||||
| QStringList LogFilters; | |||||
| QFileInfoList list; | |||||
| // QString LogDataDir = mProgramHandle->GetLogDataPath(); | |||||
| LogFilters << "*.bin"; | |||||
| //Load files in base directory | |||||
| QDir LogDir(dir); | |||||
| LogDir.setFilter(QDir::Files | QDir::NoDotAndDotDot); | |||||
| LogDir.setNameFilters(LogFilters); | |||||
| LogDir.setSorting(QDir::Name); | |||||
| list = LogDir.entryInfoList(); | |||||
| if(list.size() != 0) | |||||
| { | |||||
| //Extract data for each passage | |||||
| for(int i = 0; i < list.size(); i++) | |||||
| { | |||||
| mMutex.lockForRead(); | |||||
| bool Run = mExecThread; | |||||
| mMutex.unlock(); | |||||
| if(Run == false) | |||||
| { | |||||
| emit ThreadAborted(); | |||||
| return 0; | |||||
| } | |||||
| //ParseNewLog(list.at(i).filePath(),KeepData); | |||||
| unsigned int ret; | |||||
| // emit ReportProgressStatus(QString("Analyse du fichiers %1").arg(list.at(i).fileName())); | |||||
| CLogElement *NewLog = CTrainLogFileMgr::instance()->OpenTrainLog(list.at(i).filePath(),ret); | |||||
| if(ret == RET_OK) | |||||
| { | |||||
| emit NewLogParsed(NewLog); | |||||
| mMutex.lockForWrite(); | |||||
| Container->append(NewLog); | |||||
| mMutex.unlock(); | |||||
| } | |||||
| } | |||||
| } | |||||
| else | |||||
| { | |||||
| emit EmptyDirParsed(); | |||||
| } | |||||
| // //Check for subdirectories | |||||
| // QDir SubDirectories(dir); | |||||
| // SubDirectories.setFilter(QDir::Dirs | QDir::NoDotAndDotDot); | |||||
| // QFileInfoList SubDirList = SubDirectories.entryInfoList(); | |||||
| // for(int i = 0; i < SubDirList.size(); i++) | |||||
| // { | |||||
| // ParseDir(QDir(SubDirList.at(i).absoluteFilePath()), KeepData); | |||||
| // } | |||||
| return 1; | |||||
| } | |||||
| //void CDirParserThread::SetParsingInfo(QDir dir, QString Filter, bool KeepData) | |||||
| //{ | |||||
| // //qDebug("DirParserThread parsing info: dir: %s, Filter: %s",dir.dirName().toAscii().data(),Filter.toAscii().data()); | |||||
| // mRootDir = dir; | |||||
| // mKeepData = KeepData; | |||||
| // mFilter = Filter; | |||||
| //} | |||||
| void CDirParserThread::SetParsingInfo(CReportProgramSettingsData ReportSettings, CReportConfigData ReportFilters, QList<QList<CLogElement *> *> *ReportDataContainer) | |||||
| { | |||||
| mMutex.lockForWrite(); | |||||
| mReportSettings = ReportSettings; | |||||
| mReportFilters = ReportFilters; | |||||
| mReportDataContainer = ReportDataContainer; | |||||
| mMutex.unlock(); | |||||
| } | |||||
| void CDirParserThread::KillThread() | |||||
| { | |||||
| mMutex.lockForWrite(); | |||||
| mExecThread = false; | |||||
| mMutex.unlock(); | |||||
| } | |||||
| @@ -0,0 +1,46 @@ | |||||
| #ifndef DIRPARSERTHREAD_H | |||||
| #define DIRPARSERTHREAD_H | |||||
| #include "GlobalDefine.h" | |||||
| #include <QDir> | |||||
| #include <QReadWriteLock> | |||||
| #include "TrainLogFileMgr.h" | |||||
| #include "ReportSettingsData.h" | |||||
| class CDirParserThread : public QObject | |||||
| { | |||||
| Q_OBJECT | |||||
| public: | |||||
| CDirParserThread(); | |||||
| // void SetParsingInfo(QDir dir,QString Filter,bool KeepData = false); | |||||
| void SetParsingInfo(CReportProgramSettingsData ReportSettings, CReportConfigData ReportFilters, QList<QList<CLogElement *> *> *ReportDataContainer); | |||||
| void KillThread(); | |||||
| int ParseDir(QDir dir, QList<CLogElement*> *Container); | |||||
| void GatherReportData(CReportProgramSettingsData ReportSettings, CReportConfigData ReportFilters); | |||||
| QStringList FilterDirectories(QDir BaseDir, QDate StartDate, QDate EndDate); | |||||
| private: | |||||
| QDir mRootDir; | |||||
| bool mKeepData; | |||||
| QReadWriteLock mMutex; | |||||
| bool mExecThread; | |||||
| QString mFilter; | |||||
| QList<QStringList> mReportDirectoriesList; | |||||
| CReportProgramSettingsData mReportSettings; | |||||
| CReportConfigData mReportFilters; | |||||
| QList<QList<CLogElement*>*> *mReportDataContainer; | |||||
| public slots: | |||||
| void ParseDirectories(); | |||||
| signals: | |||||
| void NewLogParsed(QString,bool); | |||||
| void NewLogParsed(CLogElement*); | |||||
| void ParsingFinished(int); | |||||
| void EmptyDirParsed(); | |||||
| void ThreadAborted(); | |||||
| void ReportProgressStatus(QString); | |||||
| }; | |||||
| #endif // DIRPARSERTHREAD_H | |||||
| @@ -0,0 +1,75 @@ | |||||
| /******************************************************************************* | |||||
| * * | |||||
| * Société de Transports de Montréal. * | |||||
| * 2012 * | |||||
| * * | |||||
| * Projet Zones Tests * | |||||
| * * | |||||
| * * | |||||
| * * | |||||
| *******************************************************************************/ | |||||
| /* | |||||
| Description: | |||||
| Description du fichier si nécessaire. | |||||
| */ | |||||
| /* ************************************************************************** */ | |||||
| /* Revision: | |||||
| ### 20121210 JFM | |||||
| Verision d'origine. | |||||
| ### YYYYMMDD Description du besoin ou du bug | |||||
| Description du changement. | |||||
| */ | |||||
| /* ************************************************************************** */ | |||||
| #ifndef GLOBAL_DEFINE | |||||
| #define GLOBAL_DEFINE | |||||
| //Screen resolution. | |||||
| #define SCREEN_RES_WIDTH 1200 | |||||
| #define SCREEN_RES_HEIGHT 700 | |||||
| //Train parameters | |||||
| #define MR_BOGIE_LENGTH 1.52 //meters | |||||
| #define MPM_BOGIE_LENGTH 2.0 //meters | |||||
| //Misc definitions | |||||
| #define USE_FAST_LOGFILE_LOADING | |||||
| #define MAX_LOG_FILE_COUNT 25000 | |||||
| #define MAX_LOG_DIR_SIZE (qint64)1073741824 //in bytes = 1 GB | |||||
| #define USE_ANALOG_ACQUISITION | |||||
| #define ZT_TCP_PORT 1234 | |||||
| #define ZT_UDP_PORT 41245 | |||||
| //Debug defs | |||||
| //#define LOG_RAM_USAGE | |||||
| //General purpose return values. | |||||
| enum eGeneralRetValue | |||||
| { | |||||
| RET_OK, | |||||
| RET_ERROR | |||||
| }; | |||||
| enum eZTID | |||||
| { | |||||
| ANGRIGNON_ZT_ID, | |||||
| HONORE_BEAUGRAND_ZT_ID, | |||||
| LONGUEUIL_ZT_ID, | |||||
| BERRI_UQAM_ZT_ID, | |||||
| SNOWDON_ZT_ID, | |||||
| SAINT_MICHEL_ZT_ID, | |||||
| COTE_VERTU_ZT_ID, | |||||
| HENRI_BOURASSA_ZT_ID, | |||||
| MONTMORENCY_ZT_ID, | |||||
| NB_ZT_ID | |||||
| }; | |||||
| #endif | |||||
| @@ -0,0 +1,646 @@ | |||||
| /******************************************************************************* | |||||
| * * | |||||
| * Société de Transports de Montréal. * | |||||
| * 2012 - 2013 * | |||||
| * * | |||||
| * Projet Zones Tests * | |||||
| * * | |||||
| * * | |||||
| * * | |||||
| *******************************************************************************/ | |||||
| /* | |||||
| Description: | |||||
| Cette classe est responsable de la création d'une liste d'objets CLogElement | |||||
| à partir des données de passage des trains contenues dans les fichiers log. | |||||
| Cette classe est principalement utilisée par l'interface graphique pour la | |||||
| visualisation des passages. | |||||
| */ | |||||
| /* ************************************************************************** */ | |||||
| /* Revision: | |||||
| ### 20121024 JFM | |||||
| ### YYYYMMDD Description du besoin ou du bug | |||||
| Description du changement. | |||||
| */ | |||||
| /* ************************************************************************** */ | |||||
| #include "LogMgr.h" | |||||
| #include "TrainLogFileMgr.h" | |||||
| //#include "OutilZT.h" | |||||
| //#include "ZTLog.h" | |||||
| #include <QCoreApplication> | |||||
| #include <QMessageBox> | |||||
| #include <QBuffer> | |||||
| #include <QThread> | |||||
| CLogMgr::CLogMgr() | |||||
| { | |||||
| mProgramHandle = 0; | |||||
| mDirParserThread = new QThread(); | |||||
| mDirParserWorkerThread = new CDirParserThread(); | |||||
| mDirParserWorkerThread->moveToThread(mDirParserThread); | |||||
| connect(mDirParserThread,SIGNAL(started()),mDirParserWorkerThread,SLOT(ParseDirectories())); | |||||
| connect(mDirParserThread,SIGNAL(finished()),this,SLOT(ThreadQuit())); | |||||
| connect(mDirParserThread,SIGNAL(terminated()),this,SLOT(ThreadTerminated())); | |||||
| // connect(mDirParserWorkerThread,SIGNAL(NewLogParsed(QString,bool)),this,SLOT(NewLogParsed(QString,bool))); | |||||
| connect(mDirParserWorkerThread,SIGNAL(NewLogParsed(CLogElement*)),this,SLOT(NewLogParsed(CLogElement*))); | |||||
| connect(mDirParserWorkerThread,SIGNAL(ParsingFinished(int)),this,SLOT(DirParsingFinished(int))); | |||||
| connect(mDirParserWorkerThread,SIGNAL(EmptyDirParsed()),this,SLOT(EmptyDirParsed())); | |||||
| mDatabaseParsingTimer = new QTimer(); | |||||
| mDatabaseParsingTimer->setInterval(60000); | |||||
| connect(mDatabaseParsingTimer,SIGNAL(timeout()),this,SLOT(ParsingTimerExpired())); | |||||
| } | |||||
| CLogMgr::~CLogMgr() | |||||
| { | |||||
| DestroyLogList(); | |||||
| delete mDirParserThread; | |||||
| delete mDirParserWorkerThread; | |||||
| delete mDatabaseParsingTimer; | |||||
| } | |||||
| unsigned int CLogMgr::DestroyLogList() | |||||
| { | |||||
| for(int i = 0; i < mPassagesList.size(); i++) | |||||
| { | |||||
| delete mPassagesList.at(i); | |||||
| } | |||||
| mPassagesList.clear(); | |||||
| return RET_OK; | |||||
| } | |||||
| unsigned int CLogMgr::ProtectLogElementFile(bool IsProtected, CLogElement *Element) | |||||
| { | |||||
| if(Element->mZTLogType == ZT1_LOG_TYPE) | |||||
| { | |||||
| CZT1LogElement *ZT1Element = (CZT1LogElement*)Element; | |||||
| if(CTrainLogFileMgr::instance()->SetTrainLogProtected(IsProtected,ZT1Element->mLogFileName) == RET_OK) | |||||
| { | |||||
| ZT1Element->mFileProtected = IsProtected; | |||||
| SaveDatabaseFile(); | |||||
| return RET_OK; | |||||
| } | |||||
| } | |||||
| else if(Element->mZTLogType == ZT2_LOG_TYPE) | |||||
| { | |||||
| CZT2LogElement *ZT2Element = (CZT2LogElement*)Element; | |||||
| if(CTrainLogFileMgr::instance()->SetTrainLogProtected(IsProtected,ZT2Element->mLogFileName) == RET_OK) | |||||
| { | |||||
| ZT2Element->mFileProtected = IsProtected; | |||||
| SaveDatabaseFile(); | |||||
| return RET_OK; | |||||
| } | |||||
| } | |||||
| return RET_ERROR; | |||||
| } | |||||
| unsigned int CLogMgr::ParseLogs(bool RebuildDatabase, bool KeepData) | |||||
| { | |||||
| DestroyLogList(); | |||||
| qDebug("Parsing Logs now..."); | |||||
| mSaveDBFile = false; | |||||
| mParsingFinished = false; | |||||
| // mProgramHandle->DatabaseFetchingBegin(this); | |||||
| mDatabaseFileCounter = 0; | |||||
| if(RebuildDatabase == true) | |||||
| { | |||||
| qDebug("Rebuilding database now..."); | |||||
| //mDirParserWorkerThread->SetParsingInfo(QDir(mLogDataDir),"*.bin",KeepData); | |||||
| qDebug("Starting parser thread now..."); | |||||
| mDirParserThread->start(); | |||||
| mSaveDBFile = true; | |||||
| } | |||||
| else | |||||
| { | |||||
| //Load database file. | |||||
| QDir BaseDir(mLogDataDir); | |||||
| QString DatabaseFilePath = BaseDir.filePath("Trains.zdb"); | |||||
| // DatabaseFilePath += "Trains.zdb"; | |||||
| QFile* DatabaseFile = new QFile(BaseDir.filePath("Trains.zdb")/*DatabaseFilePath*/); | |||||
| if(DatabaseFile) | |||||
| { | |||||
| if(DatabaseFile->open(QIODevice::ReadOnly | QIODevice::Unbuffered) == false) | |||||
| { | |||||
| //rebuild database... | |||||
| qDebug("Failed to open Trains.zdb, rebuilding database now..."); | |||||
| //mDirParserWorkerThread->SetParsingInfo(QDir(mLogDataDir),"*.bin",KeepData); | |||||
| qDebug("Starting parser thread now..."); | |||||
| mDirParserThread->start(); | |||||
| mSaveDBFile = true; | |||||
| delete DatabaseFile; | |||||
| return RET_OK; | |||||
| } | |||||
| } | |||||
| else | |||||
| { | |||||
| DirParsingFinished(0); | |||||
| return RET_ERROR; | |||||
| } | |||||
| QByteArray DBData = DatabaseFile->readAll(); | |||||
| QDataStream *DBStrm = new QDataStream(DBData); | |||||
| qint32 NBRecords; | |||||
| *DBStrm >> NBRecords; | |||||
| for(qint32 i = 0; i < NBRecords; i++) | |||||
| { | |||||
| unsigned int LogType; | |||||
| *DBStrm >> LogType; | |||||
| if(LogType == ZT1_LOG_TYPE) | |||||
| { | |||||
| CZT1LogElement *NewElement = new CZT1LogElement; | |||||
| *DBStrm >> NewElement->mPassageDateTime | |||||
| >> NewElement->mTrainType | |||||
| >> NewElement->mNbElements | |||||
| >> NewElement->mThreadDataStartTime | |||||
| >> NewElement->mThreadDataEndTime | |||||
| >> NewElement->mLogFileName | |||||
| >> NewElement->mMeanSpeed | |||||
| >> NewElement->mFlags | |||||
| >> NewElement->mStationName | |||||
| >> NewElement->mFileProtected; | |||||
| int NBDetect; | |||||
| *DBStrm >> NBDetect; | |||||
| for(int i = 0; i < NBDetect; i++) | |||||
| { | |||||
| CZTDetectionData *NewDetection = new CZTDetectionData; | |||||
| *DBStrm >> NewDetection->mDetectionID | |||||
| >> NewDetection->mRank | |||||
| >> NewDetection->mTimeStamp; | |||||
| NewElement->mZTDetections.append(NewDetection); | |||||
| } | |||||
| NewLogParsed(NewElement); | |||||
| } | |||||
| else if(LogType == ZT2_LOG_TYPE) | |||||
| { | |||||
| CZT2LogElement *NewElement = new CZT2LogElement; | |||||
| *DBStrm >> NewElement->mPassageDateTime | |||||
| >> NewElement->mLogFileName | |||||
| >> NewElement->mNbElements | |||||
| >> NewElement-> mStationName | |||||
| >> NewElement->mFlags | |||||
| >> NewElement->mFileProtected; | |||||
| int NBDetect; | |||||
| *DBStrm >> NBDetect; | |||||
| for(int i = 0; i < NBDetect; i++) | |||||
| { | |||||
| CZTDetectionData *NewDetection = new CZTDetectionData; | |||||
| *DBStrm >> NewDetection->mDetectionID | |||||
| >> NewDetection->mRank | |||||
| >> NewDetection->mTimeStamp; | |||||
| NewElement->mZTDetections.append(NewDetection); | |||||
| } | |||||
| NewLogParsed(NewElement); | |||||
| } | |||||
| else | |||||
| { | |||||
| qDebug("Invalid logtype in DB file..."); | |||||
| } | |||||
| } | |||||
| DatabaseFile->close(); | |||||
| delete DatabaseFile; | |||||
| delete DBStrm; | |||||
| DirParsingFinished(1); | |||||
| } | |||||
| return RET_OK; | |||||
| } | |||||
| unsigned int CLogMgr::SaveDatabaseFile() | |||||
| { | |||||
| QDir BaseDir(mLogDataDir); | |||||
| QString DatabaseFilePath = BaseDir.filePath("Trains.zdb"); | |||||
| // DatabaseFilePath += "Trains.zdb"; | |||||
| QFile* DatabaseFile = new QFile(BaseDir.filePath("Trains.zdb")/*DatabaseFilePath*/); | |||||
| if(DatabaseFile) | |||||
| { | |||||
| if(DatabaseFile->open(QIODevice::WriteOnly | QIODevice::Unbuffered) == false) | |||||
| { | |||||
| QMessageBox::information(0,"Erreur","Impossible de créer le fichier DB"); | |||||
| delete DatabaseFile; | |||||
| return RET_ERROR; | |||||
| } | |||||
| } | |||||
| else | |||||
| { | |||||
| QMessageBox::information(0,"Erreur","Impossible de créer le fichier DB"); | |||||
| return RET_ERROR; | |||||
| } | |||||
| QByteArray byteArray; | |||||
| QBuffer FileBuffer(&byteArray); | |||||
| FileBuffer.open(QIODevice::WriteOnly); | |||||
| QDataStream *DBStrm = new QDataStream(&FileBuffer); | |||||
| qint32 NBRecords = mPassagesList.size(); | |||||
| *DBStrm << NBRecords; | |||||
| for(qint32 i = 0; i < NBRecords; i++) | |||||
| { | |||||
| unsigned int LogType = mPassagesList.at(i)->mZTLogType; | |||||
| *DBStrm << LogType; | |||||
| if(LogType == ZT1_LOG_TYPE) | |||||
| { | |||||
| CZT1LogElement *NewElement = (CZT1LogElement*)mPassagesList.at(i); | |||||
| QDateTime test = NewElement->mPassageDateTime; | |||||
| // *DBStrm << NewElement->mPassageDateTime | |||||
| *DBStrm << test | |||||
| << NewElement->mTrainType | |||||
| << NewElement->mNbElements | |||||
| << NewElement->mThreadDataStartTime | |||||
| << NewElement->mThreadDataEndTime | |||||
| << NewElement->mLogFileName | |||||
| << NewElement->mMeanSpeed | |||||
| << NewElement->mFlags | |||||
| << NewElement->mStationName | |||||
| << NewElement->mFileProtected; | |||||
| int NBDetect = NewElement->mZTDetections.size(); | |||||
| *DBStrm << NBDetect; | |||||
| for(int i = 0; i < NBDetect; i++) | |||||
| { | |||||
| *DBStrm << NewElement->mZTDetections.at(i)->mDetectionID | |||||
| << NewElement->mZTDetections.at(i)->mRank | |||||
| << NewElement->mZTDetections.at(i)->mTimeStamp; | |||||
| } | |||||
| } | |||||
| else if(LogType == ZT2_LOG_TYPE) | |||||
| { | |||||
| CZT2LogElement *NewElement = (CZT2LogElement*)mPassagesList.at(i); | |||||
| *DBStrm << NewElement->mPassageDateTime | |||||
| << NewElement->mLogFileName | |||||
| << NewElement->mNbElements | |||||
| << NewElement->mStationName | |||||
| << NewElement->mFlags | |||||
| << NewElement->mFileProtected; | |||||
| int NBDetect = NewElement->mZTDetections.size(); | |||||
| *DBStrm << NBDetect; | |||||
| for(int i = 0; i < NBDetect; i++) | |||||
| { | |||||
| *DBStrm << NewElement->mZTDetections.at(i)->mDetectionID | |||||
| << NewElement->mZTDetections.at(i)->mRank | |||||
| << NewElement->mZTDetections.at(i)->mTimeStamp; | |||||
| } | |||||
| } | |||||
| else | |||||
| { | |||||
| qDebug("Invalid log type in array!!!"); | |||||
| } | |||||
| } | |||||
| FileBuffer.seek(0); | |||||
| DatabaseFile->write(FileBuffer.buffer()); | |||||
| DatabaseFile->flush(); | |||||
| FileBuffer.close(); | |||||
| DatabaseFile->close(); | |||||
| delete DatabaseFile; | |||||
| delete DBStrm; | |||||
| mSaveDBFile = false; | |||||
| return RET_OK; | |||||
| } | |||||
| unsigned int CLogMgr::RebuildDatabaseFile() | |||||
| { | |||||
| ParseLogs(true,false); | |||||
| mSaveDBFile = true; | |||||
| return RET_OK; | |||||
| } | |||||
| int CLogMgr::ParseDir(QDir dir, bool KeepData) | |||||
| { | |||||
| QStringList LogFilters; | |||||
| QFileInfoList list; | |||||
| // QString LogDataDir = mProgramHandle->GetLogDataPath(); | |||||
| LogFilters << "*.bin"; | |||||
| //Load files in base directory | |||||
| QDir LogDir(dir); | |||||
| LogDir.setFilter(QDir::Files | QDir::NoDotAndDotDot); | |||||
| LogDir.setNameFilters(LogFilters); | |||||
| LogDir.setSorting(QDir::Name); | |||||
| list = LogDir.entryInfoList(); | |||||
| if(list.size() != 0) | |||||
| { | |||||
| //Extract data for each passage | |||||
| for(int i = 0; i < list.size(); i++) | |||||
| { | |||||
| ParseNewLog(list.at(i).filePath(),KeepData); | |||||
| } | |||||
| } | |||||
| //Check for subdirectories | |||||
| QDir SubDirectories(dir); | |||||
| SubDirectories.setFilter(QDir::Dirs | QDir::NoDotAndDotDot); | |||||
| QFileInfoList SubDirList = SubDirectories.entryInfoList(); | |||||
| for(int i = 0; i < SubDirList.size(); i++) | |||||
| { | |||||
| ParseDir(QDir(SubDirList.at(i).absoluteFilePath()), KeepData); | |||||
| } | |||||
| return 1; | |||||
| } | |||||
| CLogElement* CLogMgr::LoadLogData(CLogElement *Element) | |||||
| { | |||||
| if(Element->mZTLogType == ZT1_LOG_TYPE) | |||||
| { | |||||
| CZT1LogElement *TargetElement = (CZT1LogElement*)Element; | |||||
| QString FilePath = TargetElement->mLogFileName; | |||||
| unsigned int ret; | |||||
| //Make shure that the lists are empty in the target element | |||||
| for(int i = 0; i < TargetElement->mZTLogData.size(); i++) | |||||
| { | |||||
| delete TargetElement->mZTLogData.at(i); | |||||
| } | |||||
| for(int i = 0; i < TargetElement->mZTDetections.size(); i++) | |||||
| { | |||||
| delete TargetElement->mZTDetections.at(i); | |||||
| } | |||||
| TargetElement->mZTLogData.clear(); | |||||
| TargetElement->mZTDetections.clear(); | |||||
| //Passing the TargetElement to the OpenTrainLog function will fill it with data | |||||
| CTrainLogFileMgr::instance()->OpenTrainLog(FilePath,ret,TargetElement,true); | |||||
| return (CLogElement*)TargetElement; | |||||
| } | |||||
| else if(Element->mZTLogType == ZT2_LOG_TYPE) | |||||
| { | |||||
| CZT2LogElement *TargetElement = (CZT2LogElement*)Element; | |||||
| QString FilePath = TargetElement->mLogFileName; | |||||
| unsigned int ret; | |||||
| //Make shure that the lists are empty in the target element | |||||
| for(int i = 0; i < TargetElement->mZTLogData.size(); i++) | |||||
| { | |||||
| delete TargetElement->mZTLogData.at(i); | |||||
| } | |||||
| for(int i = 0; i < TargetElement->mZTDetections.size(); i++) | |||||
| { | |||||
| delete TargetElement->mZTDetections.at(i); | |||||
| } | |||||
| TargetElement->mZTLogData.clear(); | |||||
| TargetElement->mZTDetections.clear(); | |||||
| //Passing the TargetElement to the OpenTrainLog function will fill it with data | |||||
| CTrainLogFileMgr::instance()->OpenTrainLog(FilePath,ret,TargetElement,true); | |||||
| return (CLogElement*)TargetElement; | |||||
| } | |||||
| return 0; | |||||
| } | |||||
| unsigned int CLogMgr::FreeLogData(CLogElement *Element) | |||||
| { | |||||
| if(Element->mZTLogType == ZT1_LOG_TYPE) | |||||
| { | |||||
| CZT1LogElement *temp = (CZT1LogElement*)Element; | |||||
| for(int i = 0; i < temp->mZTLogData.size(); i++) | |||||
| delete temp->mZTLogData.at(i); | |||||
| temp->mZTLogData.clear(); | |||||
| } | |||||
| if(Element->mZTLogType == ZT2_LOG_TYPE) | |||||
| { | |||||
| CZT2LogElement *temp = (CZT2LogElement*)Element; | |||||
| for(int i = 0; i < temp->mZTLogData.size(); i++) | |||||
| delete temp->mZTLogData.at(i); | |||||
| temp->mZTLogData.clear(); | |||||
| } | |||||
| return RET_OK; | |||||
| } | |||||
| unsigned int CLogMgr::DeleteLog(int LogIndex) | |||||
| { | |||||
| if(LogIndex >= mPassagesList.size()) | |||||
| return RET_ERROR; | |||||
| QString Filename; | |||||
| CLogElement *Element = mPassagesList.takeAt(LogIndex); | |||||
| FreeLogData(Element); //make shure no data will be leaked | |||||
| { | |||||
| if(Element->mZTLogType == ZT1_LOG_TYPE) | |||||
| { | |||||
| CZT1LogElement *temp = (CZT1LogElement*)Element; | |||||
| Filename = temp->mLogFileName; | |||||
| } | |||||
| if(Element->mZTLogType == ZT2_LOG_TYPE) | |||||
| { | |||||
| CZT2LogElement *temp = (CZT2LogElement*)Element; | |||||
| Filename = temp->mLogFileName; | |||||
| } | |||||
| } | |||||
| QDir DirObject; | |||||
| DirObject.remove(Filename); | |||||
| delete Element; | |||||
| SaveDatabaseFile(); | |||||
| return RET_OK; | |||||
| } | |||||
| bool CLogMgr::ParseNextLog() | |||||
| { | |||||
| if((int)mLogsFileIndex >= mLogsFilelist.size()) | |||||
| return false; | |||||
| //Extract data | |||||
| if(ParseNewLog(mLogsFilelist.at(mLogsFileIndex).filePath()) == RET_ERROR) | |||||
| return false; | |||||
| mLogsFileIndex++; | |||||
| return true; | |||||
| } | |||||
| void CLogMgr::NewLogParsed(QString Filename,bool KeepData) | |||||
| { | |||||
| ParseNewLog(Filename,KeepData); | |||||
| mDatabaseParsingTimer->start(); | |||||
| } | |||||
| void CLogMgr::NewLogParsed(CLogElement * NewLog) | |||||
| { | |||||
| mPassagesList.append(NewLog); | |||||
| mDatabaseParsingTimer->start(); | |||||
| // mProgramHandle->DatabaseFetchingTick(this,mDatabaseFileCounter++); | |||||
| } | |||||
| void CLogMgr::DirParsingFinished(int Res) | |||||
| { | |||||
| mDatabaseParsingTimer->stop(); | |||||
| mParsingFinished = true; | |||||
| mDirParserThread->quit(); | |||||
| // mProgramHandle->LogsDatabaseLoaded(this,Res); | |||||
| if(mSaveDBFile == true) | |||||
| { | |||||
| SaveDatabaseFile(); | |||||
| } | |||||
| } | |||||
| void CLogMgr::ParsingTimerExpired() | |||||
| { | |||||
| qDebug("Parsing timer timeout"); | |||||
| mDirParserWorkerThread->KillThread(); | |||||
| mDirParserThread->terminate(); | |||||
| DirParsingFinished(2); | |||||
| } | |||||
| void CLogMgr::EmptyDirParsed() | |||||
| { | |||||
| //The thread is not stuck. Kick the timer... | |||||
| mDatabaseParsingTimer->start(); | |||||
| } | |||||
| void CLogMgr::ThreadQuit() | |||||
| { | |||||
| qDebug("Thread quit slot"); | |||||
| } | |||||
| void CLogMgr::ThreadTerminated() | |||||
| { | |||||
| qDebug("Thread terminated slot"); | |||||
| } | |||||
| unsigned int CLogMgr::ParseNewLog(QString FileName, bool KeepData) | |||||
| { | |||||
| Q_UNUSED(KeepData) | |||||
| unsigned int ret; | |||||
| CLogElement *NewLog = CTrainLogFileMgr::instance()->OpenTrainLog(FileName,ret); | |||||
| if(ret == RET_ERROR) | |||||
| { | |||||
| return RET_ERROR; | |||||
| } | |||||
| //the date and time of the log entry is assigned the date and time of the first record... | |||||
| if(NewLog->mZTLogType == ZT1_LOG_TYPE) | |||||
| { | |||||
| mPassagesList.append(NewLog); | |||||
| } | |||||
| else if(NewLog->mZTLogType == ZT2_LOG_TYPE) | |||||
| { | |||||
| mPassagesList.append(NewLog); | |||||
| } | |||||
| return RET_OK; | |||||
| } | |||||
| unsigned int CLogMgr::ParseImportedLogs(QStringList *NewLogFiles) | |||||
| { | |||||
| if(NewLogFiles == 0) | |||||
| { | |||||
| return RET_ERROR; | |||||
| } | |||||
| for(int i = 0; i < NewLogFiles->size(); i++) | |||||
| { | |||||
| ParseNewLog(NewLogFiles->at(i)); | |||||
| } | |||||
| SaveDatabaseFile(); | |||||
| // mProgramHandle->LogsDatabaseLoaded(this,1); | |||||
| return RET_OK; | |||||
| } | |||||
| unsigned int CLogMgr::GetLogsCount() | |||||
| { | |||||
| return mPassagesList.size(); | |||||
| } | |||||
| QList<CLogElement*> * CLogMgr::GetLogsList() | |||||
| { | |||||
| return &mPassagesList; | |||||
| } | |||||
| CLogElement::~CLogElement() | |||||
| { | |||||
| } | |||||
| CZT1LogElement::~CZT1LogElement() | |||||
| { | |||||
| qDeleteAll(mZTLogData); | |||||
| mZTLogData.clear(); | |||||
| qDeleteAll(mZTDetections); | |||||
| mZTDetections.clear(); | |||||
| } | |||||
| CZT2LogElement::~CZT2LogElement() | |||||
| { | |||||
| for(int i = 0; i < mZTLogData.size(); i++) | |||||
| delete mZTLogData.at(i); | |||||
| mZTLogData.clear(); | |||||
| for(int i = 0; i < mZTDetections.size(); i++) | |||||
| delete mZTDetections.at(i); | |||||
| mZTDetections.clear(); | |||||
| } | |||||
| @@ -0,0 +1,145 @@ | |||||
| /******************************************************************************* | |||||
| * * | |||||
| * Société de Transports de Montréal. * | |||||
| * 2012 - 2013 * | |||||
| * * | |||||
| * Projet Zones Tests * | |||||
| * * | |||||
| * * | |||||
| * * | |||||
| *******************************************************************************/ | |||||
| /* | |||||
| Description: | |||||
| Description du fichier si nécessaire. | |||||
| */ | |||||
| /* ************************************************************************** */ | |||||
| /* Revision: | |||||
| ### YYYMMDD JFM | |||||
| Verision d'origine. | |||||
| ### YYYYMMDD Description du besoin ou du bug | |||||
| Description du changement. | |||||
| */ | |||||
| /* ************************************************************************** */ | |||||
| #ifndef LOGMGR_H | |||||
| #define LOGMGR_H | |||||
| #include "ZTData.h" | |||||
| #include "GlobalDefine.h" | |||||
| #include <QList> | |||||
| #include <QDir> | |||||
| #include <QTimer> | |||||
| #include <QReadWriteLock> | |||||
| #include "DirParserThread.h" | |||||
| class CLogElement | |||||
| { | |||||
| public: | |||||
| unsigned int mZTLogType; | |||||
| virtual ~CLogElement(); | |||||
| }; | |||||
| //QDataStream &operator<<(QDataStream &out, const CLogElement &source); | |||||
| //QDataStream &operator>>(QDataStream &in, CLogElement &dest); | |||||
| class CZT1LogElement : public CLogElement | |||||
| { | |||||
| public: | |||||
| CZT1LogElement(){mZTLogType=ZT1_LOG_TYPE;} | |||||
| ~CZT1LogElement(); | |||||
| QDateTime mPassageDateTime; | |||||
| QVector<CZT1LogData*> mZTLogData; | |||||
| QVector<CZTDetectionData*> mZTDetections; | |||||
| quint32 mTrainType; | |||||
| quint32 mNbElements; | |||||
| quint64 mThreadDataStartTime, mThreadDataEndTime; | |||||
| QString mLogFileName; | |||||
| qreal mMeanSpeed; | |||||
| CZT1FlagsData mFlags; | |||||
| QString mStationName; | |||||
| bool mFileProtected; | |||||
| int mFileVersion; | |||||
| }; | |||||
| //QDataStream &operator<<(QDataStream &out, const CZT1LogElement &source); | |||||
| //QDataStream &operator>>(QDataStream &in, CZT1LogElement &dest); | |||||
| class CZT2LogElement : public CLogElement | |||||
| { | |||||
| public: | |||||
| CZT2LogElement(){mZTLogType = ZT2_LOG_TYPE;} | |||||
| ~CZT2LogElement(); | |||||
| QDateTime mPassageDateTime; | |||||
| QVector<CZT2LogData*> mZTLogData; | |||||
| QVector<CZTDetectionData*> mZTDetections; | |||||
| QString mLogFileName; | |||||
| quint32 mNbElements; | |||||
| QString mStationName; | |||||
| CZT2FlagsData mFlags; | |||||
| bool mFileProtected; | |||||
| }; | |||||
| class COutilZT; | |||||
| class CLogMgr : public QObject | |||||
| { | |||||
| Q_OBJECT | |||||
| public: | |||||
| CLogMgr(); | |||||
| ~CLogMgr(); | |||||
| COutilZT *mProgramHandle; | |||||
| unsigned int GetLogsCount(); | |||||
| QList<CLogElement*> *GetLogsList(); | |||||
| unsigned int ParseLogs(bool RebuildDatabase = false, bool KeepData = false); | |||||
| unsigned int ParseNewLog(QString FileName, bool KeepData = false); | |||||
| unsigned int ParseImportedLogs(QStringList *NewLogFiles); | |||||
| CLogElement* LoadLogData(CLogElement * Element); | |||||
| unsigned int FreeLogData(CLogElement * Element); | |||||
| unsigned int DeleteLog(int LogIndex); | |||||
| void SetLogDataDir(QString Dir){mLogDataDir = Dir;} | |||||
| bool ParseNextLog(); | |||||
| unsigned int SaveDatabaseFile(); | |||||
| unsigned int RebuildDatabaseFile(); | |||||
| unsigned int ProtectLogElementFile(bool IsProtected, CLogElement *Element); | |||||
| QTimer *mDatabaseParsingTimer; | |||||
| QDir GetBaseLogDataDir(){return QDir(mLogDataDir);} | |||||
| private: | |||||
| CDirParserThread *mDirParserWorkerThread; | |||||
| QThread *mDirParserThread; | |||||
| QList<CLogElement*> mPassagesList; | |||||
| unsigned int DestroyLogList(); | |||||
| int ParseDir(QDir dir, bool KeepData = false); | |||||
| QFileInfoList mLogsFilelist; | |||||
| unsigned int mLogsFileIndex; | |||||
| QString mLogDataDir; | |||||
| bool mParsingFinished; | |||||
| unsigned int mDatabaseFileCounter; | |||||
| bool mSaveDBFile; | |||||
| public slots: | |||||
| void NewLogParsed(QString,bool); | |||||
| void NewLogParsed(CLogElement*); | |||||
| void DirParsingFinished(int); | |||||
| void ParsingTimerExpired(); | |||||
| void EmptyDirParsed(); | |||||
| void ThreadQuit(); | |||||
| void ThreadTerminated(); | |||||
| }; | |||||
| #endif // LOGMGR_H | |||||
| @@ -0,0 +1,23 @@ | |||||
| #include "MainWindow.h" | |||||
| #include "ui_MainWindow.h" | |||||
| CMainWindow::CMainWindow(QWidget *parent) : | |||||
| QMainWindow(parent), | |||||
| ui(new Ui::CMainWindow) | |||||
| { | |||||
| ui->setupUi(this); | |||||
| setWindowTitle("Générateur de rapport ZT"); | |||||
| mMainWindowTabWidget = new QTabWidget(this); | |||||
| mReportPage = new CReportPage(this); | |||||
| mSettingsPage = new CSettingsPage(this); | |||||
| setCentralWidget(mMainWindowTabWidget); | |||||
| mMainWindowTabWidget->addTab(mReportPage,"Rapport"); | |||||
| mMainWindowTabWidget->addTab(mSettingsPage,"Paramètres"); | |||||
| } | |||||
| CMainWindow::~CMainWindow() | |||||
| { | |||||
| delete ui; | |||||
| } | |||||
| @@ -0,0 +1,30 @@ | |||||
| #ifndef MAINWINDOW_H | |||||
| #define MAINWINDOW_H | |||||
| #include <QMainWindow> | |||||
| #include <QTabWidget> | |||||
| #include "ReportPage.h" | |||||
| #include "SettingsPage.h" | |||||
| namespace Ui { | |||||
| class CMainWindow; | |||||
| } | |||||
| class CMainWindow : public QMainWindow | |||||
| { | |||||
| Q_OBJECT | |||||
| public: | |||||
| explicit CMainWindow(QWidget *parent = 0); | |||||
| ~CMainWindow(); | |||||
| QTabWidget *mMainWindowTabWidget; | |||||
| CReportPage *mReportPage; | |||||
| CSettingsPage *mSettingsPage; | |||||
| private: | |||||
| Ui::CMainWindow *ui; | |||||
| }; | |||||
| #endif // MAINWINDOW_H | |||||
| @@ -0,0 +1,342 @@ | |||||
| #include "ReportGenerator.h" | |||||
| #include <QtXlsx> | |||||
| #include <QStringList> | |||||
| #include "ZTData.h" | |||||
| #include "LogMgr.h" | |||||
| #include "GlobalDefine.h" | |||||
| #include "ZTStats.h" | |||||
| CReportGenerator::CReportGenerator() | |||||
| { | |||||
| mDirParserThread = new QThread(); | |||||
| mDirParserWorkerThread = new CDirParserThread(); | |||||
| mDirParserWorkerThread->moveToThread(mDirParserThread); | |||||
| connect(mDirParserThread,SIGNAL(started()),mDirParserWorkerThread,SLOT(ParseDirectories())); | |||||
| connect(mDirParserThread,SIGNAL(finished()),this,SLOT(ThreadQuit())); | |||||
| connect(mDirParserWorkerThread,SIGNAL(ParsingFinished(int)),this,SLOT(DirParsingFinished(int))); | |||||
| connect(mDirParserWorkerThread,SIGNAL(ReportProgressStatus(QString)),this,SLOT(ThreadReportStatus(QString))); | |||||
| connect(mDirParserWorkerThread,SIGNAL(ThreadAborted()),this,SLOT(DirThreadAborted())); | |||||
| mStationNames << "Angrignon" << "Beaugrand" << "Longueuil" << "Berri" << "Snowdon" << "St-Michel" << "Vertu" << "Bourassa" << "Montmorency"; | |||||
| //Allocate report data structure for each station | |||||
| for(int i = 0; i < NB_ZT_ID; i++) | |||||
| { QList<CLogElement*> *ElementList = new QList<CLogElement*>; | |||||
| mReportData.append(ElementList); | |||||
| } | |||||
| } | |||||
| CReportGenerator::~CReportGenerator() | |||||
| { | |||||
| mDirParserThread->quit(); | |||||
| delete mDirParserWorkerThread; | |||||
| //delete mDirParserThread; | |||||
| } | |||||
| int CReportGenerator::GenerateReport(QString ReportFileName, CReportProgramSettingsData ReportSettings, CReportConfigData ReportFilters) | |||||
| { | |||||
| mReportFilename = ReportFileName; | |||||
| mReportFilters = ReportFilters; | |||||
| ClearReportData(); | |||||
| mDirParserWorkerThread->SetParsingInfo(ReportSettings,ReportFilters,&mReportData); | |||||
| mDirParserThread->start(); | |||||
| return RET_OK; | |||||
| } | |||||
| int CReportGenerator::ClearReportData() | |||||
| { | |||||
| for(int station = 0; station < mReportData.size(); station++) | |||||
| { | |||||
| QList<CLogElement*> *LogsList = mReportData.at(station); | |||||
| for(int log = 0; log < LogsList->size(); log++) | |||||
| { | |||||
| delete LogsList->at(log); | |||||
| } | |||||
| LogsList->clear(); | |||||
| } | |||||
| return RET_OK; | |||||
| } | |||||
| void CReportGenerator::ThreadQuit() | |||||
| { | |||||
| qDebug("Parsing thread quit"); | |||||
| } | |||||
| void CReportGenerator::ThreadTerminated() | |||||
| { | |||||
| qDebug("Parsing thread terminated"); | |||||
| } | |||||
| void CReportGenerator::DirParsingFinished(int Res) | |||||
| { | |||||
| mDirParserThread->exit(); | |||||
| if(Res == 0) | |||||
| { | |||||
| ClearReportData(); | |||||
| ThreadReportStatus("La génération du rapport a échoué..."); | |||||
| mProgramPtr->ReportCreationFinished(QString()); | |||||
| return; | |||||
| } | |||||
| //Generate report | |||||
| GenerateExcelReport(); | |||||
| } | |||||
| void CReportGenerator::DirThreadAborted() | |||||
| { | |||||
| mDirParserThread->exit(); | |||||
| ClearReportData(); | |||||
| ThreadReportStatus("La génération du rapport a été annulée"); | |||||
| mProgramPtr->ReportCreationFinished(QString()); | |||||
| } | |||||
| int CReportGenerator::GenerateExcelReport() | |||||
| { | |||||
| if(mReportFilename.isEmpty()) | |||||
| { | |||||
| return RET_ERROR; | |||||
| } | |||||
| ThreadReportStatus("Passages analysés... création du fichier Excel."); | |||||
| QXlsx::Document ExcelDoc(mReportFilename); | |||||
| //Clean the file if it already exist | |||||
| for(int station = 0; station < mStationNames.size(); station++) | |||||
| { | |||||
| ExcelDoc.deleteSheet(mStationNames.at(station)); | |||||
| } | |||||
| for(int station = 0; station < mReportData.size(); station++) | |||||
| { | |||||
| int PassageID = 1; | |||||
| if(mReportData.at(station)->isEmpty() == false) | |||||
| { | |||||
| QList<CLogElement*> *PassageLogData = mReportData.at(station); | |||||
| int row = 6; | |||||
| ExcelDoc.addSheet(mStationNames.at(station)); | |||||
| ExcelDoc.selectSheet(mStationNames.at(station)); | |||||
| //Create Header | |||||
| ExcelDoc.write(1,1,QString("Rapport de déclenchements ZT de la station %1").arg(mStationNames.at(station))); | |||||
| ExcelDoc.write(2,1,QString("Date de début %1").arg(mReportFilters.mReportStartDate.toString("yyyy-MM-dd"))); | |||||
| ExcelDoc.write(3,1,QString("Date de fin %1").arg(mReportFilters.mReportEndDate.toString("yyyy-MM-dd"))); | |||||
| ExcelDoc.write(5,1,QString("ID Passage")); | |||||
| ExcelDoc.write(5,2,QString("Date et Heure")); | |||||
| ExcelDoc.write(5,3,QString("Nb Décl (passage)")); | |||||
| ExcelDoc.write(5,4,QString("Zone")); | |||||
| ExcelDoc.write(5,5,QString("Composition")); | |||||
| ExcelDoc.write(5,6,QString("Déclenchement")); | |||||
| ExcelDoc.write(5,7,QString("Rang")); | |||||
| for(int log = 0; log < PassageLogData->size(); log++) | |||||
| { | |||||
| if(PassageLogData->at(log)->mZTLogType == ZT1_LOG_TYPE) | |||||
| { | |||||
| bool IncPassage = false; | |||||
| CZT1LogElement *Element = (CZT1LogElement*)PassageLogData->at(log); | |||||
| if(mReportFilters.mReportIncludeSansDeclZT1 == true) | |||||
| { | |||||
| ExcelDoc.write(row,1,PassageID); | |||||
| ExcelDoc.write(row,2,Element->mPassageDateTime.toString("yyyy-MM-dd hh:mm:ss")); | |||||
| ExcelDoc.write(row,3,Element->mZTDetections.size()); | |||||
| ExcelDoc.write(row,4,"ZT1"); | |||||
| ExcelDoc.write(row,5,QString("%1-%2-%3").arg(Element->mFlags.mTrainCompo1).arg(Element->mFlags.mTrainCompo2).arg(Element->mFlags.mTrainCompo3)); | |||||
| ExcelDoc.write(row,6,"---"); | |||||
| ExcelDoc.write(row,7,"---"); | |||||
| row++; | |||||
| } | |||||
| if(Element->mZTDetections.size() != 0) | |||||
| { | |||||
| for(int detect = 0; detect < Element->mZTDetections.size(); detect++) | |||||
| { | |||||
| QString DetectionName = ""; | |||||
| switch(Element->mZTDetections.at(detect)->mDetectionID) | |||||
| { | |||||
| case DETECTION_FN_DETECTION: | |||||
| { | |||||
| if(mReportFilters.mReportFilterIncludeFN == true) | |||||
| { | |||||
| DetectionName = "FN"; | |||||
| } | |||||
| break; | |||||
| } | |||||
| case DETECTION_MAGNETIC_SENSOR_COUNT: | |||||
| { | |||||
| if(mReportFilters.mReportfilterIncludeComptage1 == true) | |||||
| { | |||||
| DetectionName = "Erreur de comptage"; | |||||
| } | |||||
| break; | |||||
| } | |||||
| case DETECTION_PG_DETECTION: | |||||
| { | |||||
| if(mReportFilters.mReportfilterIncludePG == true) | |||||
| { | |||||
| DetectionName = "PG"; | |||||
| } | |||||
| break; | |||||
| } | |||||
| case DETECTION_PPI_DETECTION: | |||||
| { | |||||
| if(mReportFilters.mReportfilterIncludePPI1 == true) | |||||
| { | |||||
| DetectionName = "PPI"; | |||||
| } | |||||
| break; | |||||
| } | |||||
| case DETECTION_PPE_DETECTION: | |||||
| { | |||||
| if(mReportFilters.mReportfilterIncludePPE1 == true) | |||||
| { | |||||
| DetectionName = "PPE"; | |||||
| } | |||||
| break; | |||||
| } | |||||
| case DETECTION_PEQ1_DETECTION: | |||||
| { | |||||
| if(mReportFilters.mReportfilterIncludePEQ1 == true) | |||||
| { | |||||
| DetectionName = "Panne équipement"; | |||||
| } | |||||
| break; | |||||
| } | |||||
| default: | |||||
| { | |||||
| DetectionName.clear(); | |||||
| break; | |||||
| } | |||||
| } | |||||
| if(DetectionName.isEmpty() == false) | |||||
| { | |||||
| ExcelDoc.write(row,1,PassageID); | |||||
| ExcelDoc.write(row,2,Element->mPassageDateTime.toString("yyyy-MM-dd hh:mm:ss")); | |||||
| ExcelDoc.write(row,3,Element->mZTDetections.size()); | |||||
| ExcelDoc.write(row,4,"ZT1"); | |||||
| ExcelDoc.write(row,5,QString("%1-%2-%3").arg(Element->mFlags.mTrainCompo1).arg(Element->mFlags.mTrainCompo2).arg(Element->mFlags.mTrainCompo3)); | |||||
| ExcelDoc.write(row,6,DetectionName); | |||||
| ExcelDoc.write(row,7,Element->mZTDetections.at(detect)->mRank); | |||||
| row++; | |||||
| IncPassage = true; //we had ad least one log added, this passage must count... | |||||
| } | |||||
| } | |||||
| } | |||||
| if(IncPassage == true || mReportFilters.mReportIncludeSansDeclZT1 == true) | |||||
| { | |||||
| PassageID++; | |||||
| } | |||||
| } | |||||
| else if(PassageLogData->at(log)->mZTLogType == ZT2_LOG_TYPE) | |||||
| { | |||||
| bool IncPassage = false; | |||||
| CZT2LogElement *Element = (CZT2LogElement*)PassageLogData->at(log); | |||||
| if(mReportFilters.mReportIncludeSansDeclZT2 == true) | |||||
| { | |||||
| ExcelDoc.write(row,1,PassageID); | |||||
| ExcelDoc.write(row,2,Element->mPassageDateTime.toString("yyyy-MM-dd hh:mm:ss")); | |||||
| ExcelDoc.write(row,3,Element->mZTDetections.size()); | |||||
| ExcelDoc.write(row,4,"ZT2"); | |||||
| ExcelDoc.write(row,5,QString("%1-%2-%3").arg(Element->mFlags.mTrainCompo1).arg(Element->mFlags.mTrainCompo2).arg(Element->mFlags.mTrainCompo3)); | |||||
| ExcelDoc.write(row,6,"---"); | |||||
| ExcelDoc.write(row,7,"---"); | |||||
| row++; | |||||
| } | |||||
| if(Element->mZTDetections.size() != 0) | |||||
| { | |||||
| for(int detect = 0; detect < Element->mZTDetections.size(); detect++) | |||||
| { | |||||
| QString DetectionName = ""; | |||||
| switch(Element->mZTDetections.at(detect)->mDetectionID) | |||||
| { | |||||
| case DETECTION_ZT2_MAGNETIC_SENCOR_COUNT: | |||||
| { | |||||
| if(mReportFilters.mReportfilterIncludeComptage2 == true) | |||||
| { | |||||
| DetectionName = "Erreur de comptage"; | |||||
| } | |||||
| break; | |||||
| } | |||||
| case DETECTION_ZT2_PPI_DETECTION: | |||||
| { | |||||
| if(mReportFilters.mReportfilterIncludePPI2 == true) | |||||
| { | |||||
| DetectionName = "PPI"; | |||||
| } | |||||
| break; | |||||
| } | |||||
| case DETECTION_ZT2_PPE_DETECTION: | |||||
| { | |||||
| if(mReportFilters.mReportfilterIncludePPE2 == true) | |||||
| { | |||||
| DetectionName = "PPE"; | |||||
| } | |||||
| break; | |||||
| } | |||||
| case DETECTION_PEQ2_DETECTION: | |||||
| { | |||||
| if(mReportFilters.mReportfilterIncludePEQ2 == true) | |||||
| { | |||||
| DetectionName = "Panne Équipement"; | |||||
| } | |||||
| break; | |||||
| } | |||||
| default: | |||||
| { | |||||
| DetectionName.clear(); | |||||
| break; | |||||
| } | |||||
| } | |||||
| if(DetectionName.isEmpty() == false) | |||||
| { | |||||
| ExcelDoc.write(row,1,PassageID); | |||||
| ExcelDoc.write(row,2,Element->mPassageDateTime.toString("yyyy-MM-dd hh:mm:ss")); | |||||
| ExcelDoc.write(row,3,Element->mZTDetections.size()); | |||||
| ExcelDoc.write(row,4,"ZT2"); | |||||
| ExcelDoc.write(row,5,QString("%1-%2-%3").arg(Element->mFlags.mTrainCompo1).arg(Element->mFlags.mTrainCompo2).arg(Element->mFlags.mTrainCompo3)); | |||||
| ExcelDoc.write(row,6,DetectionName); | |||||
| ExcelDoc.write(row,7,Element->mZTDetections.at(detect)->mRank); | |||||
| row++; | |||||
| IncPassage = true; //we had ad least one log added, this passage must count... | |||||
| } | |||||
| } | |||||
| } | |||||
| if(IncPassage == true || mReportFilters.mReportIncludeSansDeclZT2) | |||||
| { | |||||
| PassageID++; | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| ExcelDoc.save(); | |||||
| ThreadReportStatus("Rapport créé avec succès!"); | |||||
| mProgramPtr->ReportCreationFinished(mReportFilename); | |||||
| qDebug("Création du rapport terminée"); | |||||
| return RET_OK; | |||||
| } | |||||
| void CReportGenerator::ThreadReportStatus(QString status) | |||||
| { | |||||
| mProgramPtr->UpdateReportProgressStatus(status); | |||||
| } | |||||
| int CReportGenerator::AbortReportCreation() | |||||
| { | |||||
| mDirParserWorkerThread->KillThread(); | |||||
| return RET_OK; | |||||
| } | |||||
| @@ -0,0 +1,46 @@ | |||||
| #ifndef REPORTGENERATOR_H | |||||
| #define REPORTGENERATOR_H | |||||
| #include "ReportSettingsData.h" | |||||
| #include <QList> | |||||
| #include <QStringList> | |||||
| #include <QObject> | |||||
| #include <QThread> | |||||
| #include "DirParserThread.h" | |||||
| #include "ZTData.h" | |||||
| class CZTStats; | |||||
| class CReportGenerator : public QObject | |||||
| { | |||||
| Q_OBJECT | |||||
| public: | |||||
| CReportGenerator(); | |||||
| ~CReportGenerator(); | |||||
| int GenerateReport(QString ReportFileName,CReportProgramSettingsData ReportSettings, CReportConfigData ReportFilters); | |||||
| int ClearReportData(); | |||||
| int GenerateExcelReport(); | |||||
| int AbortReportCreation(); | |||||
| CZTStats *mProgramPtr; | |||||
| QThread *mDirParserThread; | |||||
| CDirParserThread *mDirParserWorkerThread; | |||||
| QList<QList<CLogElement*>*> mReportData; | |||||
| QString mReportFilename; | |||||
| QStringList mStationNames; | |||||
| CReportConfigData mReportFilters; | |||||
| public slots: | |||||
| void ThreadQuit(); | |||||
| void ThreadTerminated(); | |||||
| void DirParsingFinished(int Res); | |||||
| void ThreadReportStatus(QString status); | |||||
| void DirThreadAborted(); | |||||
| }; | |||||
| #endif // REPORTGENERATOR_H | |||||
| @@ -0,0 +1,231 @@ | |||||
| #include "ReportPage.h" | |||||
| #include "ui_ReportPage.h" | |||||
| #include <QMessageBox> | |||||
| #include <QFileDialog> | |||||
| #include <QString> | |||||
| #include "ZTStats.h" | |||||
| #include <QScrollBar> | |||||
| #include <QDesktopServices> | |||||
| CReportPage::CReportPage(QWidget *parent) : | |||||
| QWidget(parent), | |||||
| ui(new Ui::CReportPage) | |||||
| { | |||||
| ui->setupUi(this); | |||||
| ui->mReportStartDateEdit->setCalendarPopup(true); | |||||
| ui->mReportStartDateEdit->setDate(QDate::currentDate()); | |||||
| ui->mReportStartDateEdit->setMaximumDate(QDate::currentDate()); | |||||
| ui->mReportEndDateEdit->setCalendarPopup(true); | |||||
| ui->mReportEndDateEdit->setDate(QDate::currentDate()); | |||||
| ui->mReportEndDateEdit->setMaximumDate(QDate::currentDate()); | |||||
| ui->mReportFunctionFNChkBx->setCheckState(Qt::Checked); | |||||
| connect(ui->mGenerateReportBtn,&QPushButton::clicked,this,&CReportPage::GenerateReportBtnClicked); | |||||
| connect(ui->mSelectAllFuncZT1Btn,&QPushButton::clicked,this,&CReportPage::FunctionSelectionBtnPressed); | |||||
| connect(ui->mSelectAllFuncZT2Btn,&QPushButton::clicked,this,&CReportPage::FunctionSelectionBtnPressed); | |||||
| connect(ui->mSelectNoneFuncZT1Btn,&QPushButton::clicked,this,&CReportPage::FunctionSelectionBtnPressed); | |||||
| connect(ui->mSelectNoneFuncZT2Btn,&QPushButton::clicked,this,&CReportPage::FunctionSelectionBtnPressed); | |||||
| connect(ui->mOpenReportBtn,&QPushButton::clicked,this,&CReportPage::OpenReportBtnClicked); | |||||
| mTimeCounter = new QTimer; | |||||
| mTimeCounter->setSingleShot(false); | |||||
| mTimeCounter->setInterval(1000); | |||||
| // connect(mTimeCounter,&QTimer::timeout,this,&CReportPage::TimerExpired); | |||||
| connect(mTimeCounter,SIGNAL(timeout()),this,SLOT(TimerExpired())); | |||||
| ui->mTimerLable->setText(""); | |||||
| ui->mOpenReportBtn->hide(); | |||||
| ui->mReportPathLabel->hide(); | |||||
| ui->mReportProgressBarr->setMinimum(0); | |||||
| ui->mReportProgressBarr->setMaximum(1); | |||||
| ui->mReportProgressBarr->setValue(0); | |||||
| } | |||||
| CReportPage::~CReportPage() | |||||
| { | |||||
| delete ui; | |||||
| delete mTimeCounter; | |||||
| } | |||||
| CReportConfigData CReportPage::GetReportFiltersConfig() | |||||
| { | |||||
| CReportConfigData FiltersConfig; | |||||
| FiltersConfig.mReportStartDate = ui->mReportStartDateEdit->date(); | |||||
| FiltersConfig.mReportEndDate = ui->mReportEndDateEdit->date(); | |||||
| FiltersConfig.mReportFilterIncludeFN = ui->mReportFunctionFNChkBx->isChecked(); | |||||
| FiltersConfig.mReportfilterIncludePEQ1 = ui->mReportFunctionPEQ1ChkBx->isChecked(); | |||||
| FiltersConfig.mReportfilterIncludePG = ui->mReportFunctionPGChkBx->isChecked(); | |||||
| FiltersConfig.mReportfilterIncludeComptage1 = ui->mReportFunctionComptage_1ChkBx->isChecked(); | |||||
| FiltersConfig.mReportfilterIncludePPE1 = ui->mReportFunctionPPE_1ChkBx->isChecked(); | |||||
| FiltersConfig.mReportfilterIncludePPI1 = ui->mReportFunctionPPI_1ChkBx->isChecked(); | |||||
| FiltersConfig.mReportfilterIncludeComptage2 = ui->mReportFunctionComptage_2ChkBx->isChecked(); | |||||
| FiltersConfig.mReportfilterIncludePEQ2 = ui->mReportFunctionPEQ2ChkBx->isChecked(); | |||||
| FiltersConfig.mReportfilterIncludePPE2 = ui->mReportFunctionPPE_2ChkBx->isChecked(); | |||||
| FiltersConfig.mReportfilterIncludePPI2 = ui->mReportFunctionPPI_2ChkBx->isChecked(); | |||||
| FiltersConfig.mReportStationAngrignon = ui->mReportStationAngrignonChkBx->isChecked(); | |||||
| FiltersConfig.mReportStationBeaugrand = ui->mReportStationBeaugrandChkBx->isChecked(); | |||||
| FiltersConfig.mReportStationBerri = ui->mReportStationBerriChkBx->isChecked(); | |||||
| FiltersConfig.mReportStationBourassa = ui->mReportStationBourassaChkBx->isChecked(); | |||||
| FiltersConfig.mReportStationLongueuil = ui->mReportStationLongueuilChkBx->isChecked(); | |||||
| FiltersConfig.mReportStationMontmorency = ui->mReportStationMontmorencyChkBx->isChecked(); | |||||
| FiltersConfig.mReportStationSnowdon = ui->mReportStationSnowdonChkBx->isChecked(); | |||||
| FiltersConfig.mReportStationStMichel = ui->mReportStationStMichelChkBx->isChecked(); | |||||
| FiltersConfig.mReportStationVertu = ui->mReportStationVertuChkBx->isChecked(); | |||||
| FiltersConfig.mReportIncludeSansDeclZT1 = ui->mReportFunctionNoDecl1ChkBx->isChecked(); | |||||
| FiltersConfig.mReportIncludeSansDeclZT2 = ui->mReportFunctionNoDecl2ChkBx->isChecked(); | |||||
| return FiltersConfig; | |||||
| } | |||||
| void CReportPage::GenerateReportBtnClicked() | |||||
| { | |||||
| if(ui->mGenerateReportBtn->text() == "Annuler") | |||||
| { | |||||
| mProgramHandle->AbortReportCreationRequest(); | |||||
| } | |||||
| else | |||||
| { | |||||
| //Sanity check first... | |||||
| CReportConfigData ConfigFilters = GetReportFiltersConfig(); | |||||
| if(ConfigFilters.IsAnyFilterSelected() == false) | |||||
| { | |||||
| QMessageBox::critical(this,"Erreur","Vous devez sélectionner au moins 1 alarme à analyser"); | |||||
| return; | |||||
| } | |||||
| if(ConfigFilters.IsAnyStationSelected() == false) | |||||
| { | |||||
| QMessageBox::critical(this,"Erreur","Vous devez sélectionner au moins 1 station"); | |||||
| return; | |||||
| } | |||||
| if(ConfigFilters.IsDateRangeValid() == false) | |||||
| { | |||||
| QMessageBox::critical(this,"Erreur","Vous devez sélectionner une période valide (dates)"); | |||||
| return; | |||||
| } | |||||
| QString ExcelFile = QFileDialog::getSaveFileName(this, tr("Fichier rapport"), QString(),tr("Excel (*.xlsx)")); | |||||
| // qDebug("%s",qPrintable(ExcelFile)); | |||||
| if(ExcelFile.isEmpty()) | |||||
| { | |||||
| return; | |||||
| } | |||||
| ClearProgressStatus(); | |||||
| ui->mReportProgressBarr->setMinimum(0); | |||||
| ui->mReportProgressBarr->setMaximum(0); | |||||
| mProgressTime.setHMS(0,0,0,0); | |||||
| mTimeCounter->start(); | |||||
| UpdateProgressStatus("Création du rapport en cours... ça peut être long!!!"); | |||||
| ui->mGenerateReportBtn->setText("Annuler"); | |||||
| mProgramHandle->GenerateReportRequest(ExcelFile,ConfigFilters); | |||||
| } | |||||
| } | |||||
| void CReportPage::UpdateProgressStatus(QString Status) | |||||
| { | |||||
| Status.append("\n"); | |||||
| ui->mReportProgressTextEdit->setPlainText(ui->mReportProgressTextEdit->document()->toPlainText().append(Status)); | |||||
| ui->mReportProgressTextEdit->verticalScrollBar()->setValue(ui->mReportProgressTextEdit->verticalScrollBar()->maximum()); | |||||
| } | |||||
| void CReportPage::ClearProgressStatus() | |||||
| { | |||||
| ui->mReportProgressTextEdit->clear(); | |||||
| ui->mReportProgressBarr->setMinimum(0); | |||||
| ui->mReportProgressBarr->setMaximum(1); | |||||
| ui->mReportProgressBarr->setValue(0); | |||||
| } | |||||
| void CReportPage::ReportCreationFinished(QString ReportFilePath) | |||||
| { | |||||
| // ClearProgressStatus(); | |||||
| ui->mReportProgressBarr->setMinimum(0); | |||||
| ui->mReportProgressBarr->setMaximum(1); | |||||
| ui->mReportProgressBarr->setValue(0); | |||||
| ui->mGenerateReportBtn->setText("Générer Rapport"); | |||||
| mTimeCounter->stop(); | |||||
| if(ReportFilePath.isEmpty() == false) | |||||
| { | |||||
| mReportFilePath = ReportFilePath; | |||||
| ui->mReportPathLabel->setText(ReportFilePath); | |||||
| ui->mReportPathLabel->show(); | |||||
| ui->mOpenReportBtn->show(); | |||||
| } | |||||
| } | |||||
| void CReportPage::TimerExpired() | |||||
| { | |||||
| mProgressTime = mProgressTime.addSecs(1); | |||||
| ui->mTimerLable->setText(mProgressTime.toString("hh:mm:ss")); | |||||
| } | |||||
| void CReportPage::FunctionSelectionBtnPressed() | |||||
| { | |||||
| QObject *CallerBtn = sender(); | |||||
| if(CallerBtn == ui->mSelectAllFuncZT1Btn) | |||||
| { | |||||
| ui->mReportFunctionFNChkBx->setCheckState(Qt::Checked); | |||||
| ui->mReportFunctionPEQ1ChkBx->setCheckState(Qt::Checked); | |||||
| ui->mReportFunctionPGChkBx->setCheckState(Qt::Checked); | |||||
| ui->mReportFunctionComptage_1ChkBx->setCheckState(Qt::Checked); | |||||
| ui->mReportFunctionPPI_1ChkBx->setCheckState(Qt::Checked); | |||||
| ui->mReportFunctionPPE_1ChkBx->setCheckState(Qt::Checked); | |||||
| } | |||||
| else if(CallerBtn == ui->mSelectAllFuncZT2Btn) | |||||
| { | |||||
| ui->mReportFunctionComptage_2ChkBx->setCheckState(Qt::Checked); | |||||
| ui->mReportFunctionComptage_2ChkBx->setCheckState(Qt::Checked); | |||||
| ui->mReportFunctionPEQ2ChkBx->setCheckState(Qt::Checked); | |||||
| ui->mReportFunctionPPE_2ChkBx->setCheckState(Qt::Checked); | |||||
| ui->mReportFunctionPPI_2ChkBx->setCheckState(Qt::Checked); | |||||
| } | |||||
| else if(CallerBtn == ui->mSelectNoneFuncZT1Btn) | |||||
| { | |||||
| ui->mReportFunctionFNChkBx->setCheckState(Qt::Unchecked); | |||||
| ui->mReportFunctionPEQ1ChkBx->setCheckState(Qt::Unchecked); | |||||
| ui->mReportFunctionPGChkBx->setCheckState(Qt::Unchecked); | |||||
| ui->mReportFunctionComptage_1ChkBx->setCheckState(Qt::Unchecked); | |||||
| ui->mReportFunctionPPI_1ChkBx->setCheckState(Qt::Unchecked); | |||||
| ui->mReportFunctionPPE_1ChkBx->setCheckState(Qt::Unchecked); | |||||
| } | |||||
| else if(CallerBtn == ui->mSelectNoneFuncZT2Btn) | |||||
| { | |||||
| ui->mReportFunctionComptage_2ChkBx->setCheckState(Qt::Unchecked); | |||||
| ui->mReportFunctionComptage_2ChkBx->setCheckState(Qt::Unchecked); | |||||
| ui->mReportFunctionPEQ2ChkBx->setCheckState(Qt::Unchecked); | |||||
| ui->mReportFunctionPPE_2ChkBx->setCheckState(Qt::Unchecked); | |||||
| ui->mReportFunctionPPI_2ChkBx->setCheckState(Qt::Unchecked); | |||||
| } | |||||
| } | |||||
| void CReportPage::OpenReportBtnClicked() | |||||
| { | |||||
| // system(qPrintable(mReportFilePath)); | |||||
| // QProcess::execute(mReportFilePath); | |||||
| QDesktopServices::openUrl(QUrl::fromLocalFile(mReportFilePath)); | |||||
| } | |||||
| @@ -0,0 +1,44 @@ | |||||
| #ifndef REPORTPAGE_H | |||||
| #define REPORTPAGE_H | |||||
| #include <QWidget> | |||||
| #include "ReportSettingsData.h" | |||||
| #include <QTimer> | |||||
| #include <QTime> | |||||
| class CZTStats; | |||||
| namespace Ui { | |||||
| class CReportPage; | |||||
| } | |||||
| class CReportPage : public QWidget | |||||
| { | |||||
| Q_OBJECT | |||||
| public: | |||||
| explicit CReportPage(QWidget *parent = 0); | |||||
| ~CReportPage(); | |||||
| CReportConfigData GetReportFiltersConfig(); | |||||
| void UpdateProgressStatus(QString Status); | |||||
| void ClearProgressStatus(); | |||||
| void ReportCreationFinished(QString ReportFilePath); | |||||
| CZTStats *mProgramHandle; | |||||
| QTimer *mTimeCounter; | |||||
| QTime mProgressTime; | |||||
| QString mReportFilePath; | |||||
| private: | |||||
| Ui::CReportPage *ui; | |||||
| public slots: | |||||
| void GenerateReportBtnClicked(); | |||||
| void TimerExpired(); | |||||
| void FunctionSelectionBtnPressed(); | |||||
| void OpenReportBtnClicked(); | |||||
| }; | |||||
| #endif // REPORTPAGE_H | |||||
| @@ -0,0 +1,156 @@ | |||||
| #include "ReportSettingsData.h" | |||||
| CReportSettingsData::CReportSettingsData() | |||||
| { | |||||
| } | |||||
| CReportProgramSettingsData::CReportProgramSettingsData() | |||||
| { | |||||
| mDataSourceDirectoryPaths.clear(); | |||||
| } | |||||
| CReportProgramSettingsData& CReportProgramSettingsData::operator=(const CReportProgramSettingsData &source) | |||||
| { | |||||
| if(&source == this) | |||||
| { | |||||
| return *this; | |||||
| } | |||||
| this->mDataSourceDirectoryPaths = source.mDataSourceDirectoryPaths; | |||||
| return *this; | |||||
| } | |||||
| bool CReportConfigData::IsAnyStationSelected() | |||||
| { | |||||
| if(mReportStationAngrignon == true || | |||||
| mReportStationBeaugrand == true || | |||||
| mReportStationVertu == true || | |||||
| mReportStationBourassa == true || | |||||
| mReportStationMontmorency == true || | |||||
| mReportStationBerri == true || | |||||
| mReportStationLongueuil == true || | |||||
| mReportStationStMichel == true || | |||||
| mReportStationSnowdon == true) | |||||
| { | |||||
| return true; | |||||
| } | |||||
| return false; | |||||
| } | |||||
| bool CReportConfigData::IsAnyFilterSelected() | |||||
| { | |||||
| if(mReportFilterIncludeFN == true || | |||||
| mReportfilterIncludePPI1 == true || | |||||
| mReportfilterIncludePPE1 == true || | |||||
| mReportfilterIncludePG == true || | |||||
| mReportfilterIncludeComptage1 == true || | |||||
| mReportfilterIncludePEQ1 == true || | |||||
| mReportfilterIncludePPI2 == true || | |||||
| mReportfilterIncludePPE2 == true || | |||||
| mReportfilterIncludeComptage2 == true || | |||||
| mReportfilterIncludePEQ2 == true || | |||||
| mReportIncludeSansDeclZT1 == true || | |||||
| mReportIncludeSansDeclZT2 == true ) | |||||
| { | |||||
| return true; | |||||
| } | |||||
| return false; | |||||
| } | |||||
| bool CReportConfigData::IsDateRangeValid() | |||||
| { | |||||
| if(mReportEndDate < mReportStartDate) | |||||
| { | |||||
| return false; | |||||
| } | |||||
| return true; | |||||
| } | |||||
| CReportConfigData& CReportConfigData::operator=(const CReportConfigData &source) | |||||
| { | |||||
| if(&source == this) | |||||
| { | |||||
| return *this; | |||||
| } | |||||
| this->mReportStationAngrignon = source.mReportStationAngrignon; | |||||
| this->mReportStationBeaugrand = source.mReportStationBeaugrand; | |||||
| this->mReportStationVertu = source.mReportStationVertu; | |||||
| this->mReportStationBourassa = source.mReportStationBourassa; | |||||
| this->mReportStationMontmorency = source.mReportStationMontmorency; | |||||
| this->mReportStationBerri = source.mReportStationBerri; | |||||
| this->mReportStationLongueuil = source.mReportStationLongueuil; | |||||
| this->mReportStationStMichel = source.mReportStationStMichel; | |||||
| this->mReportStationSnowdon = source.mReportStationSnowdon; | |||||
| this->mReportFilterIncludeFN = source.mReportFilterIncludeFN; | |||||
| this->mReportfilterIncludePPI1 = source.mReportfilterIncludePPI1; | |||||
| this->mReportfilterIncludePPE1 = source.mReportfilterIncludePPE1; | |||||
| this->mReportfilterIncludePG = source.mReportfilterIncludePG; | |||||
| this->mReportfilterIncludeComptage1 = source.mReportfilterIncludeComptage1; | |||||
| this->mReportfilterIncludePEQ1 = source.mReportfilterIncludePEQ1; | |||||
| this->mReportfilterIncludePPI2 = source.mReportfilterIncludePPI2; | |||||
| this->mReportfilterIncludePPE2 = source.mReportfilterIncludePPE2; | |||||
| this->mReportfilterIncludeComptage2 = source.mReportfilterIncludeComptage2; | |||||
| this->mReportfilterIncludePEQ2 = source.mReportfilterIncludePEQ2; | |||||
| this->mReportStartDate = source.mReportStartDate; | |||||
| this->mReportEndDate = source.mReportEndDate; | |||||
| this->mReportIncludeSansDeclZT1 = source.mReportIncludeSansDeclZT1; | |||||
| this->mReportIncludeSansDeclZT2 = source.mReportIncludeSansDeclZT2; | |||||
| return *this; | |||||
| } | |||||
| QDataStream &operator<<(QDataStream &out, const CReportProgramSettingsData &source) | |||||
| { | |||||
| out << source.mDataSourceDirectoryPaths.size(); | |||||
| for(int i = 0; i < source.mDataSourceDirectoryPaths.size(); i++) | |||||
| { | |||||
| out << source.mDataSourceDirectoryPaths.at(i); | |||||
| } | |||||
| return out; | |||||
| } | |||||
| QDataStream &operator>>(QDataStream &in, CReportProgramSettingsData &dest) | |||||
| { | |||||
| // unsigned int NbPaths; | |||||
| // in >> NbPaths; | |||||
| // // in >> NbPaths; | |||||
| // for(int i = 0; i < NbPaths; i++) | |||||
| // { | |||||
| // QString Path; | |||||
| // in >> Path; | |||||
| // dest.mDataSourceDirectoryPaths.append(Path); | |||||
| // } | |||||
| // return in; | |||||
| } | |||||
| @@ -0,0 +1,65 @@ | |||||
| #ifndef REPORTSETTINGSDATA_H | |||||
| #define REPORTSETTINGSDATA_H | |||||
| #include <QStringList> | |||||
| #include <QString> | |||||
| #include <QList> | |||||
| #include <QDate> | |||||
| class CReportProgramSettingsData | |||||
| { | |||||
| public: | |||||
| CReportProgramSettingsData(); | |||||
| QStringList mDataSourceDirectoryPaths; | |||||
| CReportProgramSettingsData &operator=(const CReportProgramSettingsData &source); | |||||
| }; | |||||
| QDataStream &operator<<(QDataStream &out, const CReportProgramSettingsData &source); | |||||
| QDataStream &operator>>(QDataStream &in, CReportProgramSettingsData &dest); | |||||
| class CReportConfigData | |||||
| { | |||||
| public: | |||||
| bool mReportStationAngrignon; | |||||
| bool mReportStationBeaugrand; | |||||
| bool mReportStationVertu; | |||||
| bool mReportStationBourassa; | |||||
| bool mReportStationMontmorency; | |||||
| bool mReportStationBerri; | |||||
| bool mReportStationLongueuil; | |||||
| bool mReportStationStMichel; | |||||
| bool mReportStationSnowdon; | |||||
| bool mReportFilterIncludeFN; | |||||
| bool mReportfilterIncludePPI1; | |||||
| bool mReportfilterIncludePPE1; | |||||
| bool mReportfilterIncludePG; | |||||
| bool mReportfilterIncludeComptage1; | |||||
| bool mReportfilterIncludePEQ1; | |||||
| bool mReportfilterIncludePPI2; | |||||
| bool mReportfilterIncludePPE2; | |||||
| bool mReportfilterIncludeComptage2; | |||||
| bool mReportfilterIncludePEQ2; | |||||
| bool mReportIncludeSansDeclZT1; | |||||
| bool mReportIncludeSansDeclZT2; | |||||
| QDate mReportStartDate, mReportEndDate; | |||||
| bool IsAnyStationSelected(); | |||||
| bool IsAnyFilterSelected(); | |||||
| bool IsDateRangeValid(); | |||||
| CReportConfigData &operator=(const CReportConfigData &source); | |||||
| }; | |||||
| class CReportSettingsData | |||||
| { | |||||
| public: | |||||
| CReportSettingsData(); | |||||
| }; | |||||
| #endif // REPORTSETTINGSDATA_H | |||||
| @@ -0,0 +1,15 @@ | |||||
| #include "SettingsPage.h" | |||||
| #include "ui_SettingsPage.h" | |||||
| CSettingsPage::CSettingsPage(QWidget *parent) : | |||||
| QWidget(parent), | |||||
| ui(new Ui::CSettingsPage) | |||||
| { | |||||
| ui->setupUi(this); | |||||
| } | |||||
| CSettingsPage::~CSettingsPage() | |||||
| { | |||||
| delete ui; | |||||
| } | |||||
| @@ -0,0 +1,23 @@ | |||||
| #ifndef SETTINGSPAGE_H | |||||
| #define SETTINGSPAGE_H | |||||
| #include <QWidget> | |||||
| namespace Ui { | |||||
| class CSettingsPage; | |||||
| } | |||||
| class CSettingsPage : public QWidget | |||||
| { | |||||
| Q_OBJECT | |||||
| public: | |||||
| explicit CSettingsPage(QWidget *parent = 0); | |||||
| ~CSettingsPage(); | |||||
| private: | |||||
| Ui::CSettingsPage *ui; | |||||
| }; | |||||
| #endif // SETTINGSPAGE_H | |||||
| @@ -0,0 +1,32 @@ | |||||
| <?xml version="1.0" encoding="UTF-8"?> | |||||
| <ui version="4.0"> | |||||
| <class>CSettingsPage</class> | |||||
| <widget class="QWidget" name="CSettingsPage"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>0</x> | |||||
| <y>0</y> | |||||
| <width>667</width> | |||||
| <height>650</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="windowTitle"> | |||||
| <string>Form</string> | |||||
| </property> | |||||
| <widget class="QGroupBox" name="groupBox"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>40</x> | |||||
| <y>20</y> | |||||
| <width>431</width> | |||||
| <height>471</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="title"> | |||||
| <string>Répertoires sources</string> | |||||
| </property> | |||||
| </widget> | |||||
| </widget> | |||||
| <resources/> | |||||
| <connections/> | |||||
| </ui> | |||||
| @@ -0,0 +1,61 @@ | |||||
| /******************************************************************************* | |||||
| * * | |||||
| * Société de Transports de Montréal. * | |||||
| * 2012 - 2013 * | |||||
| * * | |||||
| * Projet Zones Tests * | |||||
| * * | |||||
| * * | |||||
| * * | |||||
| *******************************************************************************/ | |||||
| /* | |||||
| Description: | |||||
| Description du fichier si nécessaire. | |||||
| */ | |||||
| /* ************************************************************************** */ | |||||
| /* Revision: | |||||
| ### YYYMMDD JFM | |||||
| Verision d'origine. | |||||
| ### YYYYMMDD Description du besoin ou du bug | |||||
| Description du changement. | |||||
| */ | |||||
| /* ************************************************************************** */ | |||||
| #ifndef TRAINLOGFILEMGR_H | |||||
| #define TRAINLOGFILEMGR_H | |||||
| #include "GlobalDefine.h" | |||||
| #include "ZTData.h" | |||||
| class CLogElement; | |||||
| class CTrainLogFileMgr | |||||
| { | |||||
| public: | |||||
| //CTrainLogFileMgr is a singleton class | |||||
| static CTrainLogFileMgr* instance(){return &mSingleton;} | |||||
| static CTrainLogFileMgr mSingleton; | |||||
| CTrainLogFileMgr(); | |||||
| unsigned int SaveTrainLog(QString LogFilePathName,CZT1Log *ZT1Log,QVector<CZTDetectionData*> *ZT1DetectionsLog,QString StationName); | |||||
| unsigned int SaveTrainLog(QString LogFilePathName,QVector<CZT2LogData*> *ZT2Log,QVector<CZTDetectionData*> *ZT2DetectionsLog,QString StationName); | |||||
| CLogElement *OpenTrainLog(QString LogFilePathName,unsigned int &RetValue,CLogElement *TargetElement = 0,bool LoadData = false); | |||||
| unsigned int SaveCSVFile(QString CSVFilePathName,QVector<CZT1LogData*> *ZT1Log,CZT1FlagsData *ZT1Flags,QVector<CZTDetectionData*> *ZT1DetectionsLog, QString StationName); | |||||
| unsigned int SaveCSVFile(QString CSVFilePathName,CZT1Log *ZT1Log,QVector<CZTDetectionData*> *ZT1DetectionsLog, QString StationName); | |||||
| unsigned int SaveCSVFile(QString CSVFilePathName,QVector<CZT2LogData*> *ZT2Log,QVector<CZTDetectionData*> *ZT2DetectionsLog, QString StationName); | |||||
| unsigned int SetTrainLogProtected(bool IsProtected,QString LogFilePathName); | |||||
| unsigned int SaveBINFromCSV(QString CSVFilePathName); | |||||
| }; | |||||
| #endif // TRAINLOGFILEMGR_H | |||||
| @@ -0,0 +1,449 @@ | |||||
| /******************************************************************************* | |||||
| * * | |||||
| * Société de Transports de Montréal. * | |||||
| * 2012 * | |||||
| * * | |||||
| * Projet Zones Tests * | |||||
| * * | |||||
| * * | |||||
| * * | |||||
| *******************************************************************************/ | |||||
| /* | |||||
| Description: | |||||
| Classe fourre-tout qui contient les différentes structures données utilisées | |||||
| un peu partout dans le programme. | |||||
| */ | |||||
| /* ************************************************************************** */ | |||||
| /* Revision: | |||||
| ### YYYMMDD JFM | |||||
| Verision d'origine. | |||||
| ### YYYYMMDD Description du besoin ou du bug | |||||
| Description du changement. | |||||
| */ | |||||
| /* ************************************************************************** */ | |||||
| #include "ZTData.h" | |||||
| const char * CZTData::TrainTypeString[] = {"Inconnu","MR63/73", "MPM10"}; | |||||
| CZTData::CZTData() | |||||
| { | |||||
| } | |||||
| const char * CZTData::ErrorString[] = {"Erreur de comptage S1-S2", | |||||
| "Déclenchement frotteur négatif", | |||||
| "Déclenchement pneu de guidage", | |||||
| "Déclenchement pneu porteur intérieur", | |||||
| "Déclenchement pneu porteur extérieur", | |||||
| "Erreur de comptage ZT2", | |||||
| "Déclenchement pneu porteur intérieur ZT2", | |||||
| "Déclenchement pneu porteur extérieur ZT2", | |||||
| "Panne équipement ZT1", | |||||
| "Panne équipement ZT2", | |||||
| }; | |||||
| const char * CZTData::ShortErrorString[] = {"V00", | |||||
| "DFN", | |||||
| "DPG", | |||||
| "DPPI", | |||||
| "DPPE", | |||||
| "V002", | |||||
| "DPPI2", | |||||
| "DPPE2", | |||||
| "PEQ1", | |||||
| "PEQ2"}; | |||||
| const char* CZTData::GetErrorString(unsigned int ErrorID) | |||||
| { | |||||
| if(ErrorID >= DETECTION_MAX_DETECTION_ID) | |||||
| ErrorID = 0; | |||||
| return ErrorString[ErrorID]; | |||||
| } | |||||
| const char* CZTData::GetShortErrorString(unsigned int ErrorID) | |||||
| { | |||||
| if(ErrorID >= DETECTION_MAX_DETECTION_ID) | |||||
| ErrorID = 0; | |||||
| return ShortErrorString[ErrorID]; | |||||
| } | |||||
| const char* CZTData::GetTrainTypeString(unsigned int TrainType) | |||||
| { | |||||
| if(TrainType >= TRAIN_TYPE_MAX_ID) | |||||
| TrainType = TRAIN_TYPE_UNKNOWN; | |||||
| return TrainTypeString[TrainType]; | |||||
| } | |||||
| const char* CZTData::GetModbusTrainTypeString(unsigned int TrainType) | |||||
| { | |||||
| switch(TrainType) | |||||
| { | |||||
| case MODBUS_CC_TRAIN_TYPE_MR63: | |||||
| { | |||||
| return "MR63"; | |||||
| break; | |||||
| } | |||||
| case MODBUS_CC_TRAIN_TYPE_MR73: | |||||
| { | |||||
| return "MR73"; | |||||
| break; | |||||
| } | |||||
| case MODBUS_CC_TRAIN_TYPE_MPM10: | |||||
| { | |||||
| return "MPM10"; | |||||
| break; | |||||
| } | |||||
| case MODBUS_CC_TRAIN_TYPE_MAINTENANCE: | |||||
| { | |||||
| return "Vehicule Travaux"; | |||||
| break; | |||||
| } | |||||
| case MODBUS_CC_TRAIN_TYPE_INVALID_ATS_OFFLINE: | |||||
| case MODBUS_CC_TRAIN_TYPE_INVALID_SERVICE_REBOOT: | |||||
| case MODBUS_CC_TRAIN_TYPE_INVALID_NOT_UPDATED: | |||||
| case MODBUS_CC_TRAIN_TYPE_INVALID_SACL_OFFLINE: | |||||
| default: | |||||
| { | |||||
| return "Inconnu"; | |||||
| break; | |||||
| } | |||||
| } | |||||
| } | |||||
| CZT1LogData::CZT1LogData(CZT1ThreadData *ThreadData): | |||||
| mZT1ThreadData(ThreadData) | |||||
| { | |||||
| } | |||||
| CZT1LogData::~CZT1LogData() | |||||
| { | |||||
| if(mZT1ThreadData != 0) | |||||
| delete mZT1ThreadData; | |||||
| } | |||||
| CZT1ThreadData::~CZT1ThreadData() | |||||
| { | |||||
| } | |||||
| void CZT1ThreadData::operator =(CZT1ThreadData& TD) | |||||
| { | |||||
| mTimeStamp = TD.mTimeStamp; | |||||
| mDateTime = TD.mDateTime; | |||||
| mS1 = TD.mS1; | |||||
| mS2 = TD.mS2; | |||||
| mPInt = TD.mPInt; | |||||
| mPExt = TD.mPExt; | |||||
| mFN = TD.mFN; | |||||
| mPG = TD.mPG; | |||||
| mBogie = TD.mBogie; | |||||
| mRank = TD.mRank; | |||||
| mS1Count = TD.mS1Count; | |||||
| mS2Count = TD.mS2Count; | |||||
| mFNCount = TD.mFNCount; | |||||
| mPGExtValue = TD.mPGExtValue; | |||||
| mPGIntValue = TD.mPGIntValue; | |||||
| mTrainSpeed = TD.mTrainSpeed; | |||||
| mTrainType = TD.mTrainType; | |||||
| } | |||||
| QDataStream &operator<<(QDataStream &out, const CZT1FlagsData &source) | |||||
| { | |||||
| out << source.mExtPGOffset | |||||
| << source.mIntPGOffset | |||||
| << source.mPGCalibrationON | |||||
| << source.mPGTresholdValue | |||||
| << source.mAnalogTracePresent | |||||
| << source.mIsProblematicPassage | |||||
| << source.mTrainCompo1 | |||||
| << source.mTrainCompo2 | |||||
| << source.mTrainCompo3 | |||||
| << source.mModbusTrainType | |||||
| << source.mZT1ITI | |||||
| << source.mUnusedFlag13 | |||||
| << source.mUnusedFlag14 | |||||
| << source.mUnusedFlag15 | |||||
| << source.mUnusedFlag16 | |||||
| << source.mUnusedFlag17 | |||||
| << source.mUnusedFlag18 | |||||
| << source.mUnusedFlag19 | |||||
| << source.mUnusedFlag20; | |||||
| return out; | |||||
| } | |||||
| QDataStream &operator>>(QDataStream &in, CZT1FlagsData &dest) | |||||
| { | |||||
| in >> dest.mExtPGOffset | |||||
| >> dest.mIntPGOffset | |||||
| >> dest.mPGCalibrationON | |||||
| >> dest.mPGTresholdValue | |||||
| >> dest.mAnalogTracePresent | |||||
| >> dest.mIsProblematicPassage | |||||
| >> dest.mTrainCompo1 | |||||
| >> dest.mTrainCompo2 | |||||
| >> dest.mTrainCompo3 | |||||
| >> dest.mModbusTrainType | |||||
| >> dest.mZT1ITI | |||||
| >> dest.mUnusedFlag13 | |||||
| >> dest.mUnusedFlag14 | |||||
| >> dest.mUnusedFlag15 | |||||
| >> dest.mUnusedFlag16 | |||||
| >> dest.mUnusedFlag17 | |||||
| >> dest.mUnusedFlag18 | |||||
| >> dest.mUnusedFlag19 | |||||
| >> dest.mUnusedFlag20; | |||||
| return in; | |||||
| } | |||||
| QDataStream& operator<<(QDataStream &out, const CZT1LogData &source) | |||||
| { | |||||
| quint32 ThreadDataValid = 0; | |||||
| if(source.mZT1ThreadData != 0) | |||||
| ThreadDataValid = 1; | |||||
| out << source.mDateTime | |||||
| << source.mTimestamp | |||||
| << source.mCIZT1 | |||||
| << source.mCDVApproach_ZT1 | |||||
| << source.mCDVARM_ZT1 | |||||
| << ThreadDataValid; | |||||
| if(ThreadDataValid == 1) | |||||
| { | |||||
| out << source.mZT1ThreadData->mS1 | |||||
| << source.mZT1ThreadData->mS2 | |||||
| << source.mZT1ThreadData->mFN | |||||
| << source.mZT1ThreadData->mPInt | |||||
| << source.mZT1ThreadData->mPExt | |||||
| << source.mZT1ThreadData->mPG | |||||
| << source.mZT1ThreadData->mTrainSpeed | |||||
| << source.mZT1ThreadData->mBogie | |||||
| << source.mZT1ThreadData->mRank | |||||
| << source.mZT1ThreadData->mPGExtValue | |||||
| << source.mZT1ThreadData->mPGIntValue | |||||
| << source.mZT1ThreadData->mTrainType | |||||
| << source.mZT1ThreadData->mS1Count | |||||
| << source.mZT1ThreadData->mS2Count; | |||||
| } | |||||
| return out; | |||||
| } | |||||
| QDataStream &operator>>(QDataStream &in, CZT1LogData &dest) | |||||
| { | |||||
| quint32 ThreadValid; | |||||
| in >> dest.mDateTime | |||||
| >> dest.mTimestamp | |||||
| >> dest.mCIZT1 | |||||
| >> dest.mCDVApproach_ZT1 | |||||
| >> dest.mCDVARM_ZT1 | |||||
| >> ThreadValid; | |||||
| if(ThreadValid == 1) | |||||
| { | |||||
| dest.mZT1ThreadData = new CZT1ThreadData(); | |||||
| in >> dest.mZT1ThreadData->mS1 | |||||
| >> dest.mZT1ThreadData->mS2 | |||||
| >> dest.mZT1ThreadData->mFN | |||||
| >> dest.mZT1ThreadData->mPInt | |||||
| >> dest.mZT1ThreadData->mPExt | |||||
| >> dest.mZT1ThreadData->mPG | |||||
| >> dest.mZT1ThreadData->mTrainSpeed | |||||
| >> dest.mZT1ThreadData->mBogie | |||||
| >> dest.mZT1ThreadData->mRank | |||||
| >> dest.mZT1ThreadData->mPGExtValue | |||||
| >> dest.mZT1ThreadData->mPGIntValue | |||||
| >> dest.mZT1ThreadData->mTrainType | |||||
| >>dest.mZT1ThreadData->mS1Count | |||||
| >>dest.mZT1ThreadData->mS2Count; | |||||
| } | |||||
| return in; | |||||
| } | |||||
| QDataStream &operator<<(QDataStream &out, const CZTDetectionData &source) | |||||
| { | |||||
| out << source.mTimeStamp | |||||
| << source.mRank | |||||
| << source.mDetectionID; | |||||
| return out; | |||||
| } | |||||
| QDataStream &operator>>(QDataStream &in, CZTDetectionData &dest) | |||||
| { | |||||
| in >> dest.mTimeStamp | |||||
| >> dest.mRank | |||||
| >> dest.mDetectionID; | |||||
| return in; | |||||
| } | |||||
| CZT2LogData::CZT2LogData(CZT2ThreadData *ThreadData): | |||||
| mZT2ThreadData(ThreadData) | |||||
| { | |||||
| } | |||||
| CZT2LogData::~CZT2LogData() | |||||
| { | |||||
| if(mZT2ThreadData != 0) | |||||
| delete mZT2ThreadData; | |||||
| } | |||||
| QDataStream &operator<<(QDataStream &out, const CZT2FlagsData &source) | |||||
| { | |||||
| out << source.mIsProblematicPassage | |||||
| << source.mTrainCompo1 | |||||
| << source.mTrainCompo2 | |||||
| << source.mTrainCompo3 | |||||
| << source.mModbusTrainType | |||||
| << source.mUnusedFlag6 | |||||
| << source.mUnusedFlag7 | |||||
| << source.mUnusedFlag8 | |||||
| << source.mUnusedFlag9 | |||||
| << source.mUnusedFlag10; | |||||
| return out; | |||||
| } | |||||
| QDataStream &operator>>(QDataStream &in, CZT2FlagsData &dest) | |||||
| { | |||||
| in >> dest.mIsProblematicPassage | |||||
| >> dest.mTrainCompo1 | |||||
| >> dest.mTrainCompo2 | |||||
| >> dest.mTrainCompo3 | |||||
| >> dest.mModbusTrainType | |||||
| >> dest.mUnusedFlag6 | |||||
| >> dest.mUnusedFlag7 | |||||
| >> dest.mUnusedFlag8 | |||||
| >> dest.mUnusedFlag9 | |||||
| >> dest.mUnusedFlag10;; | |||||
| return in; | |||||
| } | |||||
| QDataStream& operator<<(QDataStream &out, const CZT2LogData &source) | |||||
| { | |||||
| quint32 ThreadDataValid = 0; | |||||
| if(source.mZT2ThreadData != 0) | |||||
| ThreadDataValid = 1; | |||||
| out << source.mDateTime | |||||
| << source.mTimestamp | |||||
| << source.mCIZT2 | |||||
| << source.mCDVARM_ZT2 | |||||
| << source.mCDVApproach_ZT2 | |||||
| << ThreadDataValid; | |||||
| if(ThreadDataValid == 1) | |||||
| { | |||||
| out << source.mZT2ThreadData->mS1 | |||||
| << source.mZT2ThreadData->mPPInt | |||||
| << source.mZT2ThreadData->mPPExt | |||||
| << source.mZT2ThreadData->mBogie | |||||
| << source.mZT2ThreadData->mRank | |||||
| << source.mZT2ThreadData->mS1Count; | |||||
| } | |||||
| return out; | |||||
| } | |||||
| QDataStream &operator>>(QDataStream &in, CZT2LogData &dest) | |||||
| { | |||||
| quint32 ThreadValid; | |||||
| in >> dest.mDateTime | |||||
| >> dest.mTimestamp | |||||
| >> dest.mCIZT2 | |||||
| >> dest.mCDVARM_ZT2 | |||||
| >> dest.mCDVApproach_ZT2 | |||||
| >> ThreadValid; | |||||
| if(ThreadValid == 1) | |||||
| { | |||||
| dest.mZT2ThreadData = new CZT2ThreadData(); | |||||
| in >> dest.mZT2ThreadData->mS1 | |||||
| >> dest.mZT2ThreadData->mPPInt | |||||
| >> dest.mZT2ThreadData->mPPExt | |||||
| >> dest.mZT2ThreadData->mBogie | |||||
| >> dest.mZT2ThreadData->mRank | |||||
| >> dest.mZT2ThreadData->mS1Count; | |||||
| } | |||||
| return in; | |||||
| } | |||||
| CZTDetectionFunctionConfig::CZTDetectionFunctionConfig() | |||||
| { | |||||
| for(int i = 0; i < DETECTION_FCT_MAX_FCT; i++) | |||||
| { | |||||
| mZTDetectionConfig[i].AnalysisActive = false; | |||||
| mZTDetectionConfig[i].TKActive = false; | |||||
| } | |||||
| } | |||||
| void CZTDetectionFunctionConfig::operator =(CZTDetectionFunctionConfig& DF) | |||||
| { | |||||
| for(int i = 0; i < DETECTION_FCT_MAX_FCT; i++) | |||||
| { | |||||
| mZTDetectionConfig[i].AnalysisActive = DF.mZTDetectionConfig[i].AnalysisActive; | |||||
| mZTDetectionConfig[i].TKActive = DF.mZTDetectionConfig[i].TKActive; | |||||
| } | |||||
| } | |||||
| QDataStream &operator<<(QDataStream &out, const CZTDetectionFunctionConfig &source) | |||||
| { | |||||
| for(int i = 0; i < DETECTION_FCT_MAX_FCT; i++) | |||||
| { | |||||
| out << source.mZTDetectionConfig[i].AnalysisActive | |||||
| << source.mZTDetectionConfig[i].TKActive; | |||||
| } | |||||
| return out; | |||||
| } | |||||
| QDataStream &operator>>(QDataStream &in, CZTDetectionFunctionConfig &dest) | |||||
| { | |||||
| for(int i = 0; i < DETECTION_FCT_MAX_FCT; i++) | |||||
| { | |||||
| in >> dest.mZTDetectionConfig[i].AnalysisActive | |||||
| >> dest.mZTDetectionConfig[i].TKActive; | |||||
| } | |||||
| return in; | |||||
| } | |||||
| CSettingsData::CSettingsData() | |||||
| { | |||||
| } | |||||
| CZTSettingsData::CZTSettingsData() | |||||
| { | |||||
| mDetectionFunctionSettings = new CZTDetectionFunctionConfig(); | |||||
| mAutoExportZT1CSV = false; | |||||
| mAutoExportZT2CSV = false; | |||||
| } | |||||
| QDataStream &operator<<(QDataStream &out, const CZTNetworkConfig &source) | |||||
| { | |||||
| out << source.mZTID | |||||
| << source.mIPAdress; | |||||
| return out; | |||||
| } | |||||
| QDataStream &operator>>(QDataStream &in, CZTNetworkConfig &dest) | |||||
| { | |||||
| in >> dest.mZTID | |||||
| >> dest.mIPAdress; | |||||
| return in; | |||||
| } | |||||
| @@ -0,0 +1,407 @@ | |||||
| /******************************************************************************* | |||||
| * * | |||||
| * Société de Transports de Montréal. * | |||||
| * 2012 * | |||||
| * * | |||||
| * Projet Zones Tests * | |||||
| * * | |||||
| * * | |||||
| * * | |||||
| *******************************************************************************/ | |||||
| /* | |||||
| Description: | |||||
| Ces classes contiennent l'état de la Zone Tests et les informations nécessaires | |||||
| au fonctionnement des machines à états. | |||||
| */ | |||||
| /* ************************************************************************** */ | |||||
| /* Revision: | |||||
| ### 20130501 JFM | |||||
| Verision d'origine. | |||||
| ### YYYYMMDD Description du besoin ou du bug | |||||
| Description du changement. | |||||
| */ | |||||
| /* ************************************************************************** */ | |||||
| #ifndef ZTDATA_H | |||||
| #define ZTDATA_H | |||||
| #include "GlobalDefine.h" | |||||
| #include <QObject> | |||||
| #include <QTime> | |||||
| #include <QDataStream> | |||||
| #include <QVector> | |||||
| enum eZTLOGType | |||||
| { | |||||
| ZT1_LOG_TYPE, | |||||
| ZT2_LOG_TYPE, | |||||
| UNKNOWN_LOG_TYPE | |||||
| }; | |||||
| enum eCDVState | |||||
| { | |||||
| CDV_STATE_OCCUPIED, | |||||
| CDV_STATE_FREE, | |||||
| CDV_STATE_ITI_CMD, | |||||
| CDV_STATE_UNKNOWN | |||||
| }; | |||||
| enum eSwitchCVDPosition | |||||
| { | |||||
| SWITCH_CDV_NORMAL_POSITION, | |||||
| SWITCH_CDV_REVERSE_POSITION, | |||||
| SWITCH_CDV_UNKNOWN_POSITION | |||||
| }; | |||||
| enum eCDVType | |||||
| { | |||||
| CDV_NORMAL_TYPE, | |||||
| CDV_SWITCH_TYPE | |||||
| }; | |||||
| enum eZTITI | |||||
| { | |||||
| ZT_PRIMARY_ITI, // Itinéraire 10/12 ou en voie normale | |||||
| ZT_SECONDARY_ITI, // Itinéraire 10/22 ou autre changement de voie (quai banalisé) | |||||
| ZT_MAX_ITI | |||||
| }; | |||||
| enum eDetectionID | |||||
| { | |||||
| DETECTION_MAGNETIC_SENSOR_COUNT, | |||||
| DETECTION_FN_DETECTION, | |||||
| DETECTION_PG_DETECTION, | |||||
| DETECTION_PPI_DETECTION, | |||||
| DETECTION_PPE_DETECTION, | |||||
| DETECTION_ZT2_MAGNETIC_SENCOR_COUNT, | |||||
| DETECTION_ZT2_PPI_DETECTION, | |||||
| DETECTION_ZT2_PPE_DETECTION, | |||||
| DETECTION_PEQ1_DETECTION, | |||||
| DETECTION_PEQ2_DETECTION, | |||||
| DETECTION_MAX_DETECTION_ID | |||||
| }; | |||||
| enum eDetectionFunctionID | |||||
| { | |||||
| DETECTION_FCT_FN, | |||||
| DETECTION_FCT_PG, | |||||
| DETECTION_FCT_PP, | |||||
| DETECTION_FCT_PP2, | |||||
| DETECTION_FCT_ZT1, | |||||
| DETECTION_FCT_ZT2, | |||||
| DETECTION_FCT_MAX_FCT | |||||
| }; | |||||
| enum eTrainTypeID | |||||
| { | |||||
| TRAIN_TYPE_UNKNOWN, | |||||
| TRAIN_TYPE_MR63_MR73, | |||||
| TRAIN_TYPE_MPM10, | |||||
| TRAIN_TYPE_MAX_ID | |||||
| }; | |||||
| enum eOutilZTFlagsIndex | |||||
| { | |||||
| OUTILZT_FILE_PROTECTED_FLAG, | |||||
| OUTILSZT_UNUSED_FLAG_2, | |||||
| OUTILSZT_UNUSED_FLAG_3, | |||||
| OUTILSZT_UNUSED_FLAG_4, | |||||
| OUTILSZT_UNUSED_FLAG_5, | |||||
| OUTILSZT_UNUSED_FLAG_6, | |||||
| OUTILSZT_UNUSED_FLAG_7, | |||||
| OUTILSZT_UNUSED_FLAG_8, | |||||
| OUTILSZT_UNUSED_FLAG_9, | |||||
| OUTILSZT_UNUSED_FLAG_10 | |||||
| }; | |||||
| enum eModbusCCTrainTypes | |||||
| { | |||||
| MODBUS_CC_TRAIN_TYPE_MR63 = 63, | |||||
| MODBUS_CC_TRAIN_TYPE_MR73 = 73, | |||||
| MODBUS_CC_TRAIN_TYPE_MPM10 = 10, | |||||
| MODBUS_CC_TRAIN_TYPE_MAINTENANCE = 0, | |||||
| MODBUS_CC_TRAIN_TYPE_INVALID_ATS_OFFLINE = 98, | |||||
| MODBUS_CC_TRAIN_TYPE_INVALID_SERVICE_REBOOT = 97, | |||||
| MODBUS_CC_TRAIN_TYPE_INVALID_NOT_UPDATED = 99, | |||||
| MODBUS_CC_TRAIN_TYPE_INVALID_SACL_OFFLINE = 96, | |||||
| MODBUS_CC_TRAIN_TYPE_MAX_VALUE | |||||
| }; | |||||
| enum eZT1FlagsID | |||||
| { | |||||
| ZT1_INT_PG_OFFSET_FLAG_ID, | |||||
| ZT1_EXT_PG_OFFSET_FLAG_ID, | |||||
| ZT1_PG_TRESHOLD_VALUE_FLAG_ID, | |||||
| ZT1_PG_CALIB_ON_FLAG_ID, | |||||
| ZT1_MAX_FLAG_ID | |||||
| }; | |||||
| enum eZTStatus | |||||
| { | |||||
| SB_ZT_ACTIVE_STATUS, | |||||
| SB_ZT_INACTIVE_STATUS, | |||||
| SB_ZT_NOT_PRESENT_STATUS, | |||||
| SB_ZT_DISABLED_STATUS, | |||||
| SB_ZT_MAX_STATUS | |||||
| }; | |||||
| class CZTData | |||||
| { | |||||
| public: | |||||
| CZTData(); | |||||
| unsigned int mCIZT2; | |||||
| static const char *ErrorString[]; | |||||
| static const char *ShortErrorString[]; | |||||
| static const char* GetErrorString(unsigned int ErrorID); | |||||
| static const char* GetShortErrorString(unsigned int ErrorID); | |||||
| static const char *TrainTypeString[]; | |||||
| static const char *GetTrainTypeString(unsigned int TrainType); | |||||
| static const char *GetModbusTrainTypeString(unsigned int TrainType); | |||||
| }; | |||||
| //This class contains data from the ZT1 analysis thread | |||||
| //that is periodically communicated to the main thread | |||||
| class CZT1ThreadData | |||||
| { | |||||
| public: | |||||
| ~CZT1ThreadData(); | |||||
| qint64 mTimeStamp; //nanosecs | |||||
| QDateTime mDateTime; | |||||
| quint32 mS1; | |||||
| quint32 mS2; | |||||
| quint32 mPInt; | |||||
| quint32 mPExt; | |||||
| quint32 mFN; | |||||
| quint32 mPG; | |||||
| quint32 mBogie; | |||||
| quint32 mRank; | |||||
| quint32 mS1Count; | |||||
| quint32 mS2Count; | |||||
| quint32 mFNCount; | |||||
| qint32 mPGExtValue; | |||||
| qint32 mPGIntValue; | |||||
| qreal mTrainSpeed; | |||||
| quint32 mTrainType; | |||||
| void operator=(CZT1ThreadData& a); | |||||
| }; | |||||
| class CZT1FlagsData | |||||
| { | |||||
| public: | |||||
| qint32 mIntPGOffset; | |||||
| qint32 mExtPGOffset; | |||||
| qint32 mPGTresholdValue; | |||||
| qint32 mPGCalibrationON; | |||||
| qint32 mAnalogTracePresent; | |||||
| qint32 mIsProblematicPassage; //This flag will be set if problems have been detected but not sent to PCC due to PURE comitee rules. | |||||
| qint32 mTrainCompo1; | |||||
| qint32 mTrainCompo2; | |||||
| qint32 mTrainCompo3; | |||||
| qint32 mModbusTrainType; | |||||
| qint32 mZT1ITI; | |||||
| qint32 mUnusedFlag13; | |||||
| qint32 mUnusedFlag14; | |||||
| qint32 mUnusedFlag15; | |||||
| qint32 mUnusedFlag16; | |||||
| qint32 mUnusedFlag17; | |||||
| qint32 mUnusedFlag18; | |||||
| qint32 mUnusedFlag19; | |||||
| qint32 mUnusedFlag20; | |||||
| }; | |||||
| QDataStream &operator<<(QDataStream &out, const CZT1FlagsData &source); | |||||
| QDataStream &operator>>(QDataStream &in, CZT1FlagsData &dest); | |||||
| class CZT1LogData | |||||
| { | |||||
| public: | |||||
| CZT1LogData(CZT1ThreadData *ThreadData = 0); | |||||
| ~CZT1LogData(); | |||||
| QDateTime mDateTime; | |||||
| qint64 mTimestamp; | |||||
| quint32 mCIZT1; | |||||
| quint32 mCDVApproach_ZT1; | |||||
| quint32 mCDVARM_ZT1; | |||||
| #ifdef USE_ANALOG_ACQUISITION | |||||
| qint32 mAnalogData; //The analog data must be written or read to/from file manually (not part of the QStream << operator overloading) | |||||
| #endif | |||||
| CZT1ThreadData *mZT1ThreadData; | |||||
| }; | |||||
| class CZT1Log | |||||
| { | |||||
| public: | |||||
| // QList<CZT1LogData*> mZT1LogData; | |||||
| QVector<CZT1LogData*> mZT1LogData; | |||||
| CZT1FlagsData mZT1Flags; | |||||
| }; | |||||
| QDataStream &operator<<(QDataStream &out, const CZT1LogData &source); | |||||
| QDataStream &operator>>(QDataStream &in, CZT1LogData &dest); | |||||
| class CZT2ThreadData | |||||
| { | |||||
| public: | |||||
| qint64 mTimeStamp; | |||||
| quint32 mS1; | |||||
| quint32 mPPInt; | |||||
| quint32 mPPExt; | |||||
| quint32 mBogie; | |||||
| quint32 mRank; | |||||
| quint32 mS1Count; | |||||
| }; | |||||
| class CZTDetectionData | |||||
| { | |||||
| public: | |||||
| qint64 mTimeStamp; | |||||
| // QDateTime mDateTime; | |||||
| quint32 mDetectionID; | |||||
| quint32 mRank; | |||||
| // quint32 mBogie; | |||||
| }; | |||||
| QDataStream &operator<<(QDataStream &out, const CZTDetectionData &source); | |||||
| QDataStream &operator>>(QDataStream &in, CZTDetectionData &dest); | |||||
| class CZT2FlagsData | |||||
| { | |||||
| public: | |||||
| qint32 mIsProblematicPassage; //This flag will be set if problems have been detected but not sent to PCC due to PURE comitee rules. | |||||
| qint32 mTrainCompo1; | |||||
| qint32 mTrainCompo2; | |||||
| qint32 mTrainCompo3; | |||||
| qint32 mModbusTrainType; | |||||
| qint32 mUnusedFlag6; | |||||
| qint32 mUnusedFlag7; | |||||
| qint32 mUnusedFlag8; | |||||
| qint32 mUnusedFlag9; | |||||
| qint32 mUnusedFlag10; | |||||
| }; | |||||
| QDataStream &operator<<(QDataStream &out, const CZT2FlagsData &source); | |||||
| QDataStream &operator>>(QDataStream &in, CZT2FlagsData &dest); | |||||
| class CZT2LogData | |||||
| { | |||||
| public: | |||||
| CZT2LogData(CZT2ThreadData *ThreadData = 0); | |||||
| ~CZT2LogData(); | |||||
| QDateTime mDateTime; | |||||
| qint64 mTimestamp; | |||||
| quint32 mCIZT2; | |||||
| quint32 mCDVARM_ZT2; | |||||
| quint32 mCDVApproach_ZT2; | |||||
| CZT2ThreadData *mZT2ThreadData; | |||||
| }; | |||||
| QDataStream &operator<<(QDataStream &out, const CZT2LogData &source); | |||||
| QDataStream &operator>>(QDataStream &in, CZT2LogData &dest); | |||||
| class CZT2Log | |||||
| { | |||||
| public: | |||||
| QVector<CZT2LogData*> mZT2LogData; | |||||
| CZT2FlagsData mZT2Flags; | |||||
| }; | |||||
| class CZTDetectionConfig | |||||
| { | |||||
| public: | |||||
| bool AnalysisActive; | |||||
| bool TKActive; | |||||
| }; | |||||
| class CZTDetectionFunctionConfig | |||||
| { | |||||
| public: | |||||
| CZTDetectionFunctionConfig(); | |||||
| CZTDetectionConfig mZTDetectionConfig[DETECTION_FCT_MAX_FCT]; | |||||
| void operator=(CZTDetectionFunctionConfig& a); | |||||
| }; | |||||
| QDataStream &operator<<(QDataStream &out, const CZTDetectionFunctionConfig &source); | |||||
| QDataStream &operator>>(QDataStream &in, CZTDetectionFunctionConfig &dest); | |||||
| class CZTSettingsData | |||||
| { | |||||
| public: | |||||
| CZTSettingsData(); | |||||
| CZTDetectionFunctionConfig *mDetectionFunctionSettings; | |||||
| bool mAutoExportZT1CSV; | |||||
| bool mAutoExportZT2CSV; | |||||
| int mPGTreshold; | |||||
| }; | |||||
| class CZTNetworkConfig | |||||
| { | |||||
| public: | |||||
| int mZTID; | |||||
| QString mIPAdress; | |||||
| }; | |||||
| QDataStream &operator<<(QDataStream &out, const CZTNetworkConfig &source); | |||||
| QDataStream &operator>>(QDataStream &in, CZTNetworkConfig &dest); | |||||
| class CSettingsData | |||||
| { | |||||
| public: | |||||
| CSettingsData(); | |||||
| QString mDataSourceDirectoryPath; | |||||
| QList<CZTNetworkConfig> mNetworkCfgList; | |||||
| }; | |||||
| class CZTPGCalibrationData | |||||
| { | |||||
| public: | |||||
| qint64 mTimestamp; | |||||
| int mTrainNbr; | |||||
| qint32 mPGExtValue; | |||||
| qint32 mPGIntValue; | |||||
| }; | |||||
| class CZTLogFileInfo | |||||
| { | |||||
| public: | |||||
| QDateTime mStartDateTime; | |||||
| QDateTime mEndDateTime; | |||||
| QString mStationName; | |||||
| int mZTStationID; | |||||
| QString mZTLogFilePath; | |||||
| }; | |||||
| #endif // ZTDATA_H | |||||
| @@ -0,0 +1,391 @@ | |||||
| #include "ZTLogFilesMgr.h" | |||||
| #include <QFileInfo> | |||||
| #include <QTextStream> | |||||
| #include <QCoreApplication> | |||||
| #include <QMessageBox> | |||||
| #include <QBuffer> | |||||
| CZTLogFilesMgr::CZTLogFilesMgr() | |||||
| { | |||||
| mProgramHandle = 0; | |||||
| mDirParserThread = new QThread(); | |||||
| mDirParserWorkerThread = new CDirParserThread(); | |||||
| mDirParserWorkerThread->moveToThread(mDirParserThread); | |||||
| connect(mDirParserThread,SIGNAL(started()),mDirParserWorkerThread,SLOT(ParseDirectories())); | |||||
| connect(mDirParserThread,SIGNAL(finished()),this,SLOT(ThreadQuit())); | |||||
| connect(mDirParserThread,SIGNAL(terminated()),this,SLOT(ThreadTerminated())); | |||||
| connect(mDirParserWorkerThread,SIGNAL(NewLogParsed(QString,bool)),this,SLOT(NewZTLogParsed(QString,bool))); | |||||
| connect(mDirParserWorkerThread,SIGNAL(ParsingFinished(int)),this,SLOT(DirParsingFinished(int))); | |||||
| connect(mDirParserWorkerThread,SIGNAL(EmptyDirParsed()),this,SLOT(EmptyDirParsed())); | |||||
| mDatabaseParsingTimer = new QTimer(); | |||||
| mDatabaseParsingTimer->setInterval(60000); | |||||
| connect(mDatabaseParsingTimer,SIGNAL(timeout()),this,SLOT(ParsingTimerExpired())); | |||||
| mSaveDBFile = false; | |||||
| } | |||||
| CZTLogFilesMgr::~CZTLogFilesMgr() | |||||
| { | |||||
| delete mDirParserThread; | |||||
| delete mDirParserWorkerThread; | |||||
| delete mDatabaseParsingTimer; | |||||
| } | |||||
| void CZTLogFilesMgr::DestroyZTLogFilesList() | |||||
| { | |||||
| mZTLogFilesList.clear(); | |||||
| } | |||||
| void CZTLogFilesMgr::ParseZTLogFiles(bool RebuildDatabase) | |||||
| { | |||||
| mZTLogFilesList.clear(); | |||||
| if(RebuildDatabase == true) | |||||
| { | |||||
| mSaveDBFile = true; | |||||
| // mDirParserWorkerThread->SetParsingInfo(QDir(mLogDatabaseDir),"*.txt",false); | |||||
| mDirParserThread->start(); | |||||
| //mProgramHandle->ZTLogFilesFetchingBegin(this); | |||||
| return ; | |||||
| } | |||||
| else | |||||
| { | |||||
| QDir BaseDir(mLogDatabaseDir); | |||||
| QString DatabaseFilePath = BaseDir.filePath("ZTLogs.zdb"); | |||||
| // DatabaseFilePath += "Trains.zdb"; | |||||
| QFile* DatabaseFile = new QFile(BaseDir.filePath("ZTLogs.zdb")/*DatabaseFilePath*/); | |||||
| if(DatabaseFile) | |||||
| { | |||||
| if(DatabaseFile->open(QIODevice::ReadOnly | QIODevice::Unbuffered) == false) | |||||
| { | |||||
| mSaveDBFile = true; | |||||
| // mDirParserWorkerThread->SetParsingInfo(QDir(mLogDatabaseDir),"*.txt",false); | |||||
| mDirParserThread->start(); | |||||
| // mProgramHandle->ZTLogFilesFetchingBegin(this); | |||||
| delete DatabaseFile; | |||||
| return ; | |||||
| } | |||||
| } | |||||
| else | |||||
| { | |||||
| QMessageBox::information(0,"Erreur","Impossible de créer le fichier DB ZTLog"); | |||||
| return ; | |||||
| } | |||||
| QByteArray DBData = DatabaseFile->readAll(); | |||||
| QDataStream *DBStrm = new QDataStream(DBData); | |||||
| qint32 NBRecords; | |||||
| *DBStrm >> NBRecords; | |||||
| for(qint32 i = 0; i < NBRecords; i++) | |||||
| { | |||||
| CZTLogFileInfo NewElement; | |||||
| *DBStrm >> NewElement.mStationName | |||||
| >> NewElement.mZTStationID | |||||
| >> NewElement.mStartDateTime | |||||
| >> NewElement.mEndDateTime | |||||
| >> NewElement.mZTLogFilePath; | |||||
| mZTLogFilesList.append(NewElement); | |||||
| } | |||||
| DatabaseFile->close(); | |||||
| delete DatabaseFile; | |||||
| delete DBStrm; | |||||
| DirParsingFinished(1); | |||||
| } | |||||
| } | |||||
| void CZTLogFilesMgr::NewZTLogParsed(QString FilePath, bool KeepData) | |||||
| { | |||||
| Q_UNUSED(KeepData) | |||||
| // mProgramHandle->ZTLogFilesFetchingTick(this,mZTLogFilesList.size(),FilePath); | |||||
| ExtractLogInfo(FilePath); | |||||
| mDatabaseParsingTimer->start(); | |||||
| } | |||||
| void CZTLogFilesMgr::DirParsingFinished(int Res) | |||||
| { | |||||
| qDebug("ZTLog Files Parsing finished with result %d",Res); | |||||
| mDirParserThread->quit(); | |||||
| mDatabaseParsingTimer->stop(); | |||||
| // mProgramHandle->ZTLogFilesDatabaseLoaded(this,Res); | |||||
| qDebug("Parsed %d ZTLog files",mZTLogFilesList.size()); | |||||
| if(mSaveDBFile == true) | |||||
| { | |||||
| SaveDatabaseFile(); | |||||
| } | |||||
| } | |||||
| int CZTLogFilesMgr::GetZTLogFilesCount() | |||||
| { | |||||
| return mZTLogFilesList.size(); | |||||
| } | |||||
| void CZTLogFilesMgr::ParsingTimerExpired() | |||||
| { | |||||
| qDebug("ZTLogs Parsing timer timeout"); | |||||
| mDirParserWorkerThread->KillThread(); | |||||
| mDirParserThread->terminate(); | |||||
| DirParsingFinished(2); | |||||
| } | |||||
| void CZTLogFilesMgr::EmptyDirParsed() | |||||
| { | |||||
| //The thread is not stuck. Kick the timer... | |||||
| mDatabaseParsingTimer->start(); | |||||
| } | |||||
| void CZTLogFilesMgr::ThreadQuit() | |||||
| { | |||||
| // qDebug("Thread quit slot"); | |||||
| } | |||||
| void CZTLogFilesMgr::ThreadTerminated() | |||||
| { | |||||
| // qDebug("Thread terminated slot"); | |||||
| } | |||||
| bool CZTLogFilesMgr::ExtractLogInfo(QString LogFilePath) | |||||
| { | |||||
| QFileInfo LogFileInfo(LogFilePath); | |||||
| if(LogFileInfo.fileName() != "ZTLog.txt") | |||||
| return false; | |||||
| CZTLogFileInfo NewLogFileInfo; | |||||
| int line =0; | |||||
| QFile *LogFile = new QFile(LogFilePath); | |||||
| if(LogFile) | |||||
| { | |||||
| if(LogFile->open(QIODevice::ReadOnly | QIODevice::Text | QIODevice::Unbuffered) == true) | |||||
| { | |||||
| QString LogText(LogFile->readAll()); | |||||
| QTextStream strm(&LogText); | |||||
| strm.seek(0); | |||||
| QString temp; | |||||
| //find a valid line | |||||
| do | |||||
| { | |||||
| temp = strm.readLine(); | |||||
| line++; | |||||
| if(strm.atEnd()) | |||||
| break; | |||||
| } | |||||
| while(temp.length() < 10); | |||||
| // temp = strm.readLine(); | |||||
| QStringList parts = temp.split(" : "); | |||||
| QString LineText,DateString; | |||||
| if(parts.size() != 0) | |||||
| { | |||||
| LineText.clear(); | |||||
| DateString = parts.at(0); | |||||
| NewLogFileInfo.mStartDateTime = QDateTime::fromString(DateString,"yyyy/MM/dd - hh:mm:ss.zzz"); | |||||
| } | |||||
| //go to end of file | |||||
| QString LastValidLine; | |||||
| do | |||||
| { | |||||
| temp = strm.readLine(); | |||||
| if(temp.size() >=10) | |||||
| LastValidLine = temp; | |||||
| } | |||||
| while(!strm.atEnd()); | |||||
| parts = LastValidLine.split(" : "); | |||||
| if(parts.size() != 0) | |||||
| { | |||||
| DateString = parts.at(0); | |||||
| NewLogFileInfo.mEndDateTime = QDateTime::fromString(DateString,"yyyy/MM/dd - hh:mm:ss.zzz"); | |||||
| } | |||||
| LogFile->close(); | |||||
| } | |||||
| delete LogFile; | |||||
| } | |||||
| else | |||||
| { | |||||
| return false; | |||||
| } | |||||
| NewLogFileInfo.mZTLogFilePath = LogFilePath; | |||||
| if(LogFilePath.contains("ANG")) | |||||
| { | |||||
| NewLogFileInfo.mZTStationID = ANGRIGNON_ZT_ID; | |||||
| // NewLogFileInfo.mStationName = mProgramHandle->GetStationName(ANGRIGNON_ZT_ID);// "Angrignon"; | |||||
| } | |||||
| else if(LogFilePath.contains("BUQ4")) | |||||
| { | |||||
| NewLogFileInfo.mZTStationID = BERRI_UQAM_ZT_ID; | |||||
| // NewLogFileInfo.mStationName = mProgramHandle->GetStationName(BERRI_UQAM_ZT_ID);//"Berri-UQAM"; | |||||
| } | |||||
| else if(LogFilePath.contains("HBOU")) | |||||
| { | |||||
| NewLogFileInfo.mZTStationID = HENRI_BOURASSA_ZT_ID; | |||||
| // NewLogFileInfo.mStationName = mProgramHandle->GetStationName(HENRI_BOURASSA_ZT_ID);//"Henri-Bourassa"; | |||||
| } | |||||
| else if(LogFilePath.contains("HBGR")) | |||||
| { | |||||
| NewLogFileInfo.mZTStationID = HONORE_BEAUGRAND_ZT_ID; | |||||
| // NewLogFileInfo.mStationName = mProgramHandle->GetStationName(HONORE_BEAUGRAND_ZT_ID);//"Honoré-Beaugrand"; | |||||
| } | |||||
| else if(LogFilePath.contains("LONG")) | |||||
| { | |||||
| NewLogFileInfo.mZTStationID = LONGUEUIL_ZT_ID; | |||||
| // NewLogFileInfo.mStationName = mProgramHandle->GetStationName(LONGUEUIL_ZT_ID);//"Longueuil"; | |||||
| } | |||||
| else if(LogFilePath.contains("MMOY")) | |||||
| { | |||||
| NewLogFileInfo.mZTStationID = MONTMORENCY_ZT_ID; | |||||
| // NewLogFileInfo.mStationName = mProgramHandle->GetStationName(MONTMORENCY_ZT_ID);//"Montmorency"; | |||||
| } | |||||
| // else if(LogFilePath.contains("MMO")) | |||||
| // { | |||||
| // NewLogFileInfo.mZTStationID = MONTMORENCY_10_12_ZT_ID; | |||||
| // // NewLogFileInfo.mStationName = mProgramHandle->GetStationName(MONTMORENCY_10_12_ZT_ID);//"Montmorency 10/12"; | |||||
| // } | |||||
| // else if(LogFilePath.contains("MMO2")) | |||||
| // { | |||||
| // NewLogFileInfo.mZTStationID = MONTMORENCY_10_22_ZT_ID; | |||||
| // // NewLogFileInfo.mStationName = mProgramHandle->GetStationName(MONTMORENCY_10_22_ZT_ID);///"Montmorency 10/22"; | |||||
| // } | |||||
| else if(LogFilePath.contains("SMIC")) | |||||
| { | |||||
| NewLogFileInfo.mZTStationID = SAINT_MICHEL_ZT_ID; | |||||
| // NewLogFileInfo.mStationName = mProgramHandle->GetStationName(SAINT_MICHEL_ZT_ID);//"Saint-Michel"; | |||||
| } | |||||
| else if(LogFilePath.contains("SNW5")) | |||||
| { | |||||
| NewLogFileInfo.mZTStationID = SNOWDON_ZT_ID; | |||||
| // NewLogFileInfo.mStationName = mProgramHandle->GetStationName(SNOWDON_ZT_ID);//"Snowdon"; | |||||
| } | |||||
| else | |||||
| { | |||||
| return false; | |||||
| } | |||||
| mZTLogFilesList.append(NewLogFileInfo); | |||||
| return true; | |||||
| } | |||||
| int CZTLogFilesMgr::ParseDir(QDir dir) | |||||
| { | |||||
| QStringList LogFilters; | |||||
| QFileInfoList list; | |||||
| // QString LogDataDir = mProgramHandle->GetLogDataPath(); | |||||
| LogFilters << "*.txt"; | |||||
| //Load files in base directory | |||||
| QDir LogDir(dir); | |||||
| LogDir.setFilter(QDir::Files | QDir::NoDotAndDotDot); | |||||
| LogDir.setNameFilters(LogFilters); | |||||
| LogDir.setSorting(QDir::Name); | |||||
| list = LogDir.entryInfoList(); | |||||
| if(list.size() != 0) | |||||
| { | |||||
| //Extract data for each passage | |||||
| for(int i = 0; i < list.size(); i++) | |||||
| { | |||||
| ExtractLogInfo(list.at(i).absoluteFilePath()); | |||||
| } | |||||
| } | |||||
| //Check for subdirectories | |||||
| QDir SubDirectories(dir); | |||||
| SubDirectories.setFilter(QDir::Dirs | QDir::NoDotAndDotDot); | |||||
| QFileInfoList SubDirList = SubDirectories.entryInfoList(); | |||||
| for(int i = 0; i < SubDirList.size(); i++) | |||||
| { | |||||
| ParseDir(QDir(SubDirList.at(i).absoluteFilePath())); | |||||
| } | |||||
| return 1; | |||||
| } | |||||
| int CZTLogFilesMgr::SaveDatabaseFile() | |||||
| { | |||||
| qDebug("Saving ZTLogs.zdb database"); | |||||
| QDir BaseDir(mLogDatabaseDir); | |||||
| QString DatabaseFilePath = BaseDir.filePath("ZTLogs.zdb"); | |||||
| // DatabaseFilePath += "Trains.zdb"; | |||||
| QFile* DatabaseFile = new QFile(BaseDir.filePath("ZTLogs.zdb")/*DatabaseFilePath*/); | |||||
| if(DatabaseFile) | |||||
| { | |||||
| if(DatabaseFile->open(QIODevice::WriteOnly | QIODevice::Unbuffered) == false) | |||||
| { | |||||
| QMessageBox::information(0,"Erreur","Impossible de créer le fichier DB ZTLog"); | |||||
| delete DatabaseFile; | |||||
| return RET_ERROR; | |||||
| } | |||||
| } | |||||
| else | |||||
| { | |||||
| QMessageBox::information(0,"Erreur","Impossible de créer le fichier DB ZTLog"); | |||||
| return RET_ERROR; | |||||
| } | |||||
| QByteArray byteArray; | |||||
| QBuffer FileBuffer(&byteArray); | |||||
| FileBuffer.open(QIODevice::WriteOnly); | |||||
| QDataStream *DBStrm = new QDataStream(&FileBuffer); | |||||
| qint32 NBRecords = mZTLogFilesList.size(); | |||||
| *DBStrm << NBRecords; | |||||
| for(int i = 0; i < mZTLogFilesList.size(); i++) | |||||
| { | |||||
| *DBStrm << mZTLogFilesList.at(i).mStationName | |||||
| << mZTLogFilesList.at(i).mZTStationID | |||||
| << mZTLogFilesList.at(i).mStartDateTime | |||||
| << mZTLogFilesList.at(i).mEndDateTime | |||||
| << mZTLogFilesList.at(i).mZTLogFilePath; | |||||
| } | |||||
| FileBuffer.seek(0); | |||||
| DatabaseFile->write(FileBuffer.buffer()); | |||||
| DatabaseFile->flush(); | |||||
| FileBuffer.close(); | |||||
| DatabaseFile->close(); | |||||
| delete DatabaseFile; | |||||
| delete DBStrm; | |||||
| mSaveDBFile = false; | |||||
| return RET_OK; | |||||
| } | |||||
| @@ -0,0 +1,83 @@ | |||||
| /******************************************************************************* | |||||
| * * | |||||
| * Société de Transports de Montréal. * | |||||
| * 2012 - 2013 * | |||||
| * * | |||||
| * Projet Zones Tests * | |||||
| * * | |||||
| * * | |||||
| * * | |||||
| *******************************************************************************/ | |||||
| /* | |||||
| Description: | |||||
| Cette classe est responsable de la création d'une liste de tous lesfichiers | |||||
| ZTLog présents dans la base de données. À ne pas confondre avec les fichiers | |||||
| de passage. | |||||
| */ | |||||
| /* ************************************************************************** */ | |||||
| /* Revision: | |||||
| ### 20150227 JFM | |||||
| ### YYYYMMDD Description du besoin ou du bug | |||||
| Description du changement. | |||||
| */ | |||||
| /* ************************************************************************** */ | |||||
| #ifndef ZTLOGFILESMGR_H | |||||
| #define ZTLOGFILESMGR_H | |||||
| #include "ZTData.h" | |||||
| #include "GlobalDefine.h" | |||||
| #include <QList> | |||||
| #include <QDir> | |||||
| #include "DirParserThread.h" | |||||
| #include <QThread> | |||||
| #include <QTimer> | |||||
| class COutilZT; | |||||
| class CZTLogFilesMgr: public QObject | |||||
| { | |||||
| Q_OBJECT | |||||
| public: | |||||
| CZTLogFilesMgr(); | |||||
| ~CZTLogFilesMgr(); | |||||
| COutilZT *mProgramHandle; | |||||
| void DestroyZTLogFilesList(); | |||||
| void ParseZTLogFiles(bool RebuildDatabase); | |||||
| bool ExtractLogInfo(QString LogFilePath); | |||||
| void SetLogDataDir(QString Dir){mLogDatabaseDir = Dir;} | |||||
| QList<CZTLogFileInfo> *GetZTLogsList(){return &mZTLogFilesList;} | |||||
| int GetZTLogFilesCount(); | |||||
| int SaveDatabaseFile(); | |||||
| private: | |||||
| QList<CZTLogFileInfo> mZTLogFilesList; | |||||
| QString mLogDatabaseDir; | |||||
| QThread *mDirParserThread; | |||||
| CDirParserThread *mDirParserWorkerThread; | |||||
| QTimer *mDatabaseParsingTimer; | |||||
| bool mSaveDBFile; | |||||
| int ParseDir(QDir dir); | |||||
| public slots: | |||||
| void NewZTLogParsed(QString,bool); | |||||
| void DirParsingFinished(int); | |||||
| void ParsingTimerExpired(); | |||||
| void EmptyDirParsed(); | |||||
| void ThreadQuit(); | |||||
| void ThreadTerminated(); | |||||
| }; | |||||
| #endif // ZTLOGFILESMGR_H | |||||
| @@ -0,0 +1,82 @@ | |||||
| #include "ZTStats.h" | |||||
| #include "MainWindow.h" | |||||
| #include <QFile> | |||||
| CZTStats::CZTStats(CMainWindow *MainWindowPtr) | |||||
| { | |||||
| mMainWindow = MainWindowPtr; | |||||
| mReportGenerator.mProgramPtr = this; | |||||
| } | |||||
| void CZTStats::Init() | |||||
| { | |||||
| mMainWindow->mReportPage->mProgramHandle = this; | |||||
| // mProgramConfig.mDataSourceDirectoryPaths.append("D:\\Main\\Dev\\ZTStats\\LOGS"); | |||||
| QString Path = "C:"; | |||||
| QFile *CfgFile = new QFile("Source.txt"); | |||||
| if(CfgFile != 0) | |||||
| { | |||||
| CfgFile->open(QIODevice::ReadOnly | QIODevice::Text); | |||||
| while(!CfgFile->atEnd()) | |||||
| { | |||||
| Path = QString(CfgFile->readLine()).trimmed(); | |||||
| if(Path.contains("#") == false) | |||||
| { | |||||
| QDir test(Path); | |||||
| if(test.exists() == true) | |||||
| { | |||||
| mProgramConfig.mDataSourceDirectoryPaths.append(Path); | |||||
| } | |||||
| else | |||||
| { | |||||
| mMainWindow->mReportPage->UpdateProgressStatus(QString("Répertoire invalide dans le fichier de configuration: %1").arg(Path)); | |||||
| } | |||||
| } | |||||
| } | |||||
| // if(Path.isEmpty()) | |||||
| // { | |||||
| // Path = "C:"; | |||||
| // } | |||||
| CfgFile->close(); | |||||
| delete CfgFile; | |||||
| } | |||||
| for(int i = 0; i < mProgramConfig.mDataSourceDirectoryPaths.size(); i++) | |||||
| { | |||||
| UpdateReportProgressStatus(QString("Répertoire source: %1").arg(mProgramConfig.mDataSourceDirectoryPaths.at(i))); | |||||
| } | |||||
| } | |||||
| void CZTStats::Run() | |||||
| { | |||||
| } | |||||
| int CZTStats::GenerateReportRequest(QString OutputFileName, CReportConfigData ReportConfigFilters) | |||||
| { | |||||
| mReportGenerator.GenerateReport(OutputFileName,mProgramConfig,ReportConfigFilters); | |||||
| return RET_OK; | |||||
| } | |||||
| void CZTStats::UpdateReportProgressStatus(QString status) | |||||
| { | |||||
| mMainWindow->mReportPage->UpdateProgressStatus(status); | |||||
| } | |||||
| void CZTStats::ReportCreationFinished(QString ReportFilePath) | |||||
| { | |||||
| mMainWindow->mReportPage->ReportCreationFinished(ReportFilePath); | |||||
| } | |||||
| void CZTStats::AbortReportCreationRequest() | |||||
| { | |||||
| mReportGenerator.AbortReportCreation(); | |||||
| } | |||||
| @@ -0,0 +1,29 @@ | |||||
| #ifndef ZTSTATS_H | |||||
| #define ZTSTATS_H | |||||
| #include "ReportGenerator.h" | |||||
| #include "ReportSettingsData.h" | |||||
| class CMainWindow; | |||||
| class CZTStats | |||||
| { | |||||
| public: | |||||
| CZTStats(CMainWindow *MainWindowPtr); | |||||
| void Init(); | |||||
| void Run(); | |||||
| int GenerateReportRequest(QString OutputFileName,CReportConfigData ReportConfigFilters); | |||||
| void UpdateReportProgressStatus(QString status); | |||||
| void ReportCreationFinished(QString ReportFilePath); | |||||
| void AbortReportCreationRequest(); | |||||
| CReportGenerator mReportGenerator; | |||||
| CReportProgramSettingsData mProgramConfig; | |||||
| CMainWindow *mMainWindow; | |||||
| }; | |||||
| #endif // ZTSTATS_H | |||||
| @@ -0,0 +1,17 @@ | |||||
| #include "MainWindow.h" | |||||
| #include <QApplication> | |||||
| #include "ZTStats.h" | |||||
| int main(int argc, char *argv[]) | |||||
| { | |||||
| QApplication a(argc, argv); | |||||
| CMainWindow w; | |||||
| CZTStats Program(&w); | |||||
| Program.Init(); | |||||
| Program.Run(); | |||||
| w.show(); | |||||
| return a.exec(); | |||||
| } | |||||
| @@ -0,0 +1,59 @@ | |||||
| #------------------------------------------------- | |||||
| # | |||||
| # Project created by QtCreator 2024-07-23T14:12:59 | |||||
| # | |||||
| #------------------------------------------------- | |||||
| QT += core gui xlsx | |||||
| greaterThan(QT_MAJOR_VERSION, 4): QT += widgets | |||||
| TARGET = ZTStats | |||||
| TEMPLATE = app | |||||
| # The following define makes your compiler emit warnings if you use | |||||
| # any feature of Qt which as been marked as deprecated (the exact warnings | |||||
| # depend on your compiler). Please consult the documentation of the | |||||
| # deprecated API in order to know how to port your code away from it. | |||||
| DEFINES += QT_DEPRECATED_WARNINGS | |||||
| # You can also make your code fail to compile if you use deprecated APIs. | |||||
| # In order to do so, uncomment the following line. | |||||
| # You can also select to disable deprecated APIs only up to a certain version of Qt. | |||||
| #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 | |||||
| SOURCES +=\ | |||||
| Sources/main.cpp \ | |||||
| Sources/MainWindow.cpp \ | |||||
| Sources/DirParserThread.cpp \ | |||||
| Sources/ZTLogFilesMgr.cpp \ | |||||
| Sources/ZTData.cpp \ | |||||
| Sources/TrainLogFileMgr.cpp \ | |||||
| Sources/LogMgr.cpp \ | |||||
| Sources/ReportPage.cpp \ | |||||
| Sources/SettingsPage.cpp \ | |||||
| Sources/ReportSettingsData.cpp \ | |||||
| Sources/ReportGenerator.cpp \ | |||||
| Sources/ZTStats.cpp | |||||
| HEADERS += \ | |||||
| Sources/MainWindow.h \ | |||||
| Sources/DirParserThread.h \ | |||||
| Sources/GlobalDefine.h \ | |||||
| Sources/ZTLogFilesMgr.h \ | |||||
| Sources/ZTData.h \ | |||||
| Sources/TrainLogFileMgr.h \ | |||||
| Sources/LogMgr.h \ | |||||
| Sources/ReportPage.h \ | |||||
| Sources/SettingsPage.h \ | |||||
| Sources/ReportSettingsData.h \ | |||||
| Sources/ReportGenerator.h \ | |||||
| Sources/ZTStats.h | |||||
| Sources/MainWindow.h | |||||
| FORMS += MainWindow.ui \ | |||||
| ReportPage.ui \ | |||||
| Sources/SettingsPage.ui | |||||
| INCLUDEPATH += PWD/Sources\ | |||||
| @@ -0,0 +1,19 @@ | |||||
| debug/main.o | |||||
| debug/MainWindow.o | |||||
| debug/DirParserThread.o | |||||
| debug/ZTLogFilesMgr.o | |||||
| debug/ZTData.o | |||||
| debug/TrainLogFileMgr.o | |||||
| debug/LogMgr.o | |||||
| debug/ReportPage.o | |||||
| debug/SettingsPage.o | |||||
| debug/ReportSettingsData.o | |||||
| debug/ReportGenerator.o | |||||
| debug/ZTStats.o | |||||
| debug/moc_MainWindow.o | |||||
| debug/moc_DirParserThread.o | |||||
| debug/moc_ZTLogFilesMgr.o | |||||
| debug/moc_LogMgr.o | |||||
| debug/moc_ReportPage.o | |||||
| debug/moc_SettingsPage.o | |||||
| debug/moc_ReportGenerator.o | |||||
| @@ -0,0 +1,19 @@ | |||||
| release/main.o | |||||
| release/MainWindow.o | |||||
| release/DirParserThread.o | |||||
| release/ZTLogFilesMgr.o | |||||
| release/ZTData.o | |||||
| release/TrainLogFileMgr.o | |||||
| release/LogMgr.o | |||||
| release/ReportPage.o | |||||
| release/SettingsPage.o | |||||
| release/ReportSettingsData.o | |||||
| release/ReportGenerator.o | |||||
| release/ZTStats.o | |||||
| release/moc_MainWindow.o | |||||
| release/moc_DirParserThread.o | |||||
| release/moc_ZTLogFilesMgr.o | |||||
| release/moc_LogMgr.o | |||||
| release/moc_ReportPage.o | |||||
| release/moc_SettingsPage.o | |||||
| release/moc_ReportGenerator.o | |||||
| @@ -0,0 +1,62 @@ | |||||
| /******************************************************************************** | |||||
| ** Form generated from reading UI file 'MainWindow.ui' | |||||
| ** | |||||
| ** Created by: Qt User Interface Compiler version 5.14.2 | |||||
| ** | |||||
| ** WARNING! All changes made in this file will be lost when recompiling UI file! | |||||
| ********************************************************************************/ | |||||
| #ifndef UI_MAINWINDOW_H | |||||
| #define UI_MAINWINDOW_H | |||||
| #include <QtCore/QVariant> | |||||
| #include <QtWidgets/QApplication> | |||||
| #include <QtWidgets/QGroupBox> | |||||
| #include <QtWidgets/QMainWindow> | |||||
| #include <QtWidgets/QStatusBar> | |||||
| #include <QtWidgets/QWidget> | |||||
| QT_BEGIN_NAMESPACE | |||||
| class Ui_CMainWindow | |||||
| { | |||||
| public: | |||||
| QWidget *centralWidget; | |||||
| QGroupBox *ReportParamsGroupBx; | |||||
| QStatusBar *statusBar; | |||||
| void setupUi(QMainWindow *CMainWindow) | |||||
| { | |||||
| if (CMainWindow->objectName().isEmpty()) | |||||
| CMainWindow->setObjectName(QString::fromUtf8("CMainWindow")); | |||||
| CMainWindow->resize(927, 610); | |||||
| centralWidget = new QWidget(CMainWindow); | |||||
| centralWidget->setObjectName(QString::fromUtf8("centralWidget")); | |||||
| ReportParamsGroupBx = new QGroupBox(centralWidget); | |||||
| ReportParamsGroupBx->setObjectName(QString::fromUtf8("ReportParamsGroupBx")); | |||||
| ReportParamsGroupBx->setGeometry(QRect(10, 10, 531, 551)); | |||||
| CMainWindow->setCentralWidget(centralWidget); | |||||
| statusBar = new QStatusBar(CMainWindow); | |||||
| statusBar->setObjectName(QString::fromUtf8("statusBar")); | |||||
| CMainWindow->setStatusBar(statusBar); | |||||
| retranslateUi(CMainWindow); | |||||
| QMetaObject::connectSlotsByName(CMainWindow); | |||||
| } // setupUi | |||||
| void retranslateUi(QMainWindow *CMainWindow) | |||||
| { | |||||
| CMainWindow->setWindowTitle(QCoreApplication::translate("CMainWindow", "CMainWindow", nullptr)); | |||||
| ReportParamsGroupBx->setTitle(QCoreApplication::translate("CMainWindow", "Param\303\250tres du rapport", nullptr)); | |||||
| } // retranslateUi | |||||
| }; | |||||
| namespace Ui { | |||||
| class CMainWindow: public Ui_CMainWindow {}; | |||||
| } // namespace Ui | |||||
| QT_END_NAMESPACE | |||||
| #endif // UI_MAINWINDOW_H | |||||
| @@ -0,0 +1,286 @@ | |||||
| /******************************************************************************** | |||||
| ** Form generated from reading UI file 'ReportPage.ui' | |||||
| ** | |||||
| ** Created by: Qt User Interface Compiler version 5.14.2 | |||||
| ** | |||||
| ** WARNING! All changes made in this file will be lost when recompiling UI file! | |||||
| ********************************************************************************/ | |||||
| #ifndef UI_REPORTPAGE_H | |||||
| #define UI_REPORTPAGE_H | |||||
| #include <QtCore/QVariant> | |||||
| #include <QtWidgets/QApplication> | |||||
| #include <QtWidgets/QCheckBox> | |||||
| #include <QtWidgets/QDateEdit> | |||||
| #include <QtWidgets/QGroupBox> | |||||
| #include <QtWidgets/QLabel> | |||||
| #include <QtWidgets/QProgressBar> | |||||
| #include <QtWidgets/QPushButton> | |||||
| #include <QtWidgets/QTextEdit> | |||||
| #include <QtWidgets/QWidget> | |||||
| QT_BEGIN_NAMESPACE | |||||
| class Ui_CReportPage | |||||
| { | |||||
| public: | |||||
| QGroupBox *groupBox; | |||||
| QDateEdit *mReportEndDateEdit; | |||||
| QLabel *mReportStartDateLbl; | |||||
| QDateEdit *mReportStartDateEdit; | |||||
| QLabel *mReportEndDateLbl; | |||||
| QGroupBox *groupBox_2; | |||||
| QCheckBox *mReportFunctionPPI_2ChkBx; | |||||
| QCheckBox *mReportFunctionComptage_2ChkBx; | |||||
| QCheckBox *mReportFunctionPEQ2ChkBx; | |||||
| QCheckBox *mReportFunctionFNChkBx; | |||||
| QCheckBox *mReportFunctionPGChkBx; | |||||
| QCheckBox *mReportFunctionPEQ1ChkBx; | |||||
| QCheckBox *mReportFunctionPPE_2ChkBx; | |||||
| QCheckBox *mReportFunctionComptage_1ChkBx; | |||||
| QLabel *mReportEndDateLbl_2; | |||||
| QLabel *mReportEndDateLbl_3; | |||||
| QCheckBox *mReportFunctionPPE_1ChkBx; | |||||
| QCheckBox *mReportFunctionPPI_1ChkBx; | |||||
| QCheckBox *mReportFunctionNoDecl1ChkBx; | |||||
| QCheckBox *mReportFunctionNoDecl2ChkBx; | |||||
| QPushButton *mSelectAllFuncZT1Btn; | |||||
| QPushButton *mSelectNoneFuncZT1Btn; | |||||
| QPushButton *mSelectNoneFuncZT2Btn; | |||||
| QPushButton *mSelectAllFuncZT2Btn; | |||||
| QGroupBox *groupBox_3; | |||||
| QCheckBox *mReportStationSnowdonChkBx; | |||||
| QCheckBox *mReportStationBeaugrandChkBx; | |||||
| QCheckBox *mReportStationBourassaChkBx; | |||||
| QCheckBox *mReportStationVertuChkBx; | |||||
| QCheckBox *mReportStationMontmorencyChkBx; | |||||
| QCheckBox *mReportStationBerriChkBx; | |||||
| QCheckBox *mReportStationLongueuilChkBx; | |||||
| QCheckBox *mReportStationStMichelChkBx; | |||||
| QCheckBox *mReportStationAngrignonChkBx; | |||||
| QPushButton *mGenerateReportBtn; | |||||
| QProgressBar *mReportProgressBarr; | |||||
| QTextEdit *mReportProgressTextEdit; | |||||
| QLabel *mTimerLable; | |||||
| QPushButton *mOpenReportBtn; | |||||
| QLabel *mReportPathLabel; | |||||
| void setupUi(QWidget *CReportPage) | |||||
| { | |||||
| if (CReportPage->objectName().isEmpty()) | |||||
| CReportPage->setObjectName(QString::fromUtf8("CReportPage")); | |||||
| CReportPage->resize(980, 617); | |||||
| groupBox = new QGroupBox(CReportPage); | |||||
| groupBox->setObjectName(QString::fromUtf8("groupBox")); | |||||
| groupBox->setGeometry(QRect(10, 20, 391, 561)); | |||||
| mReportEndDateEdit = new QDateEdit(groupBox); | |||||
| mReportEndDateEdit->setObjectName(QString::fromUtf8("mReportEndDateEdit")); | |||||
| mReportEndDateEdit->setGeometry(QRect(94, 70, 110, 22)); | |||||
| mReportStartDateLbl = new QLabel(groupBox); | |||||
| mReportStartDateLbl->setObjectName(QString::fromUtf8("mReportStartDateLbl")); | |||||
| mReportStartDateLbl->setGeometry(QRect(14, 40, 71, 20)); | |||||
| QFont font; | |||||
| font.setPointSize(10); | |||||
| mReportStartDateLbl->setFont(font); | |||||
| mReportStartDateLbl->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); | |||||
| mReportStartDateEdit = new QDateEdit(groupBox); | |||||
| mReportStartDateEdit->setObjectName(QString::fromUtf8("mReportStartDateEdit")); | |||||
| mReportStartDateEdit->setGeometry(QRect(94, 40, 110, 22)); | |||||
| mReportEndDateLbl = new QLabel(groupBox); | |||||
| mReportEndDateLbl->setObjectName(QString::fromUtf8("mReportEndDateLbl")); | |||||
| mReportEndDateLbl->setGeometry(QRect(10, 70, 71, 20)); | |||||
| mReportEndDateLbl->setFont(font); | |||||
| mReportEndDateLbl->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); | |||||
| groupBox_2 = new QGroupBox(groupBox); | |||||
| groupBox_2->setObjectName(QString::fromUtf8("groupBox_2")); | |||||
| groupBox_2->setGeometry(QRect(10, 280, 371, 261)); | |||||
| mReportFunctionPPI_2ChkBx = new QCheckBox(groupBox_2); | |||||
| mReportFunctionPPI_2ChkBx->setObjectName(QString::fromUtf8("mReportFunctionPPI_2ChkBx")); | |||||
| mReportFunctionPPI_2ChkBx->setGeometry(QRect(180, 50, 131, 20)); | |||||
| mReportFunctionPPI_2ChkBx->setFont(font); | |||||
| mReportFunctionComptage_2ChkBx = new QCheckBox(groupBox_2); | |||||
| mReportFunctionComptage_2ChkBx->setObjectName(QString::fromUtf8("mReportFunctionComptage_2ChkBx")); | |||||
| mReportFunctionComptage_2ChkBx->setGeometry(QRect(180, 90, 131, 20)); | |||||
| mReportFunctionComptage_2ChkBx->setFont(font); | |||||
| mReportFunctionPEQ2ChkBx = new QCheckBox(groupBox_2); | |||||
| mReportFunctionPEQ2ChkBx->setObjectName(QString::fromUtf8("mReportFunctionPEQ2ChkBx")); | |||||
| mReportFunctionPEQ2ChkBx->setGeometry(QRect(180, 110, 131, 20)); | |||||
| mReportFunctionPEQ2ChkBx->setFont(font); | |||||
| mReportFunctionFNChkBx = new QCheckBox(groupBox_2); | |||||
| mReportFunctionFNChkBx->setObjectName(QString::fromUtf8("mReportFunctionFNChkBx")); | |||||
| mReportFunctionFNChkBx->setGeometry(QRect(10, 50, 131, 20)); | |||||
| mReportFunctionFNChkBx->setFont(font); | |||||
| mReportFunctionPGChkBx = new QCheckBox(groupBox_2); | |||||
| mReportFunctionPGChkBx->setObjectName(QString::fromUtf8("mReportFunctionPGChkBx")); | |||||
| mReportFunctionPGChkBx->setGeometry(QRect(10, 70, 131, 20)); | |||||
| mReportFunctionPGChkBx->setFont(font); | |||||
| mReportFunctionPEQ1ChkBx = new QCheckBox(groupBox_2); | |||||
| mReportFunctionPEQ1ChkBx->setObjectName(QString::fromUtf8("mReportFunctionPEQ1ChkBx")); | |||||
| mReportFunctionPEQ1ChkBx->setGeometry(QRect(10, 150, 131, 20)); | |||||
| mReportFunctionPEQ1ChkBx->setFont(font); | |||||
| mReportFunctionPPE_2ChkBx = new QCheckBox(groupBox_2); | |||||
| mReportFunctionPPE_2ChkBx->setObjectName(QString::fromUtf8("mReportFunctionPPE_2ChkBx")); | |||||
| mReportFunctionPPE_2ChkBx->setGeometry(QRect(180, 70, 131, 20)); | |||||
| mReportFunctionPPE_2ChkBx->setFont(font); | |||||
| mReportFunctionComptage_1ChkBx = new QCheckBox(groupBox_2); | |||||
| mReportFunctionComptage_1ChkBx->setObjectName(QString::fromUtf8("mReportFunctionComptage_1ChkBx")); | |||||
| mReportFunctionComptage_1ChkBx->setGeometry(QRect(10, 130, 131, 20)); | |||||
| mReportFunctionComptage_1ChkBx->setFont(font); | |||||
| mReportEndDateLbl_2 = new QLabel(groupBox_2); | |||||
| mReportEndDateLbl_2->setObjectName(QString::fromUtf8("mReportEndDateLbl_2")); | |||||
| mReportEndDateLbl_2->setGeometry(QRect(30, 20, 71, 20)); | |||||
| QFont font1; | |||||
| font1.setPointSize(12); | |||||
| mReportEndDateLbl_2->setFont(font1); | |||||
| mReportEndDateLbl_2->setAlignment(Qt::AlignCenter); | |||||
| mReportEndDateLbl_3 = new QLabel(groupBox_2); | |||||
| mReportEndDateLbl_3->setObjectName(QString::fromUtf8("mReportEndDateLbl_3")); | |||||
| mReportEndDateLbl_3->setGeometry(QRect(190, 20, 71, 20)); | |||||
| mReportEndDateLbl_3->setFont(font1); | |||||
| mReportEndDateLbl_3->setAlignment(Qt::AlignCenter); | |||||
| mReportFunctionPPE_1ChkBx = new QCheckBox(groupBox_2); | |||||
| mReportFunctionPPE_1ChkBx->setObjectName(QString::fromUtf8("mReportFunctionPPE_1ChkBx")); | |||||
| mReportFunctionPPE_1ChkBx->setGeometry(QRect(10, 110, 131, 20)); | |||||
| mReportFunctionPPE_1ChkBx->setFont(font); | |||||
| mReportFunctionPPI_1ChkBx = new QCheckBox(groupBox_2); | |||||
| mReportFunctionPPI_1ChkBx->setObjectName(QString::fromUtf8("mReportFunctionPPI_1ChkBx")); | |||||
| mReportFunctionPPI_1ChkBx->setGeometry(QRect(10, 90, 131, 20)); | |||||
| mReportFunctionPPI_1ChkBx->setFont(font); | |||||
| mReportFunctionNoDecl1ChkBx = new QCheckBox(groupBox_2); | |||||
| mReportFunctionNoDecl1ChkBx->setObjectName(QString::fromUtf8("mReportFunctionNoDecl1ChkBx")); | |||||
| mReportFunctionNoDecl1ChkBx->setGeometry(QRect(10, 220, 151, 20)); | |||||
| mReportFunctionNoDecl1ChkBx->setFont(font); | |||||
| mReportFunctionNoDecl2ChkBx = new QCheckBox(groupBox_2); | |||||
| mReportFunctionNoDecl2ChkBx->setObjectName(QString::fromUtf8("mReportFunctionNoDecl2ChkBx")); | |||||
| mReportFunctionNoDecl2ChkBx->setGeometry(QRect(170, 220, 151, 20)); | |||||
| mReportFunctionNoDecl2ChkBx->setFont(font); | |||||
| mSelectAllFuncZT1Btn = new QPushButton(groupBox_2); | |||||
| mSelectAllFuncZT1Btn->setObjectName(QString::fromUtf8("mSelectAllFuncZT1Btn")); | |||||
| mSelectAllFuncZT1Btn->setGeometry(QRect(10, 180, 41, 22)); | |||||
| mSelectNoneFuncZT1Btn = new QPushButton(groupBox_2); | |||||
| mSelectNoneFuncZT1Btn->setObjectName(QString::fromUtf8("mSelectNoneFuncZT1Btn")); | |||||
| mSelectNoneFuncZT1Btn->setGeometry(QRect(70, 180, 41, 22)); | |||||
| mSelectNoneFuncZT2Btn = new QPushButton(groupBox_2); | |||||
| mSelectNoneFuncZT2Btn->setObjectName(QString::fromUtf8("mSelectNoneFuncZT2Btn")); | |||||
| mSelectNoneFuncZT2Btn->setGeometry(QRect(240, 140, 41, 22)); | |||||
| mSelectAllFuncZT2Btn = new QPushButton(groupBox_2); | |||||
| mSelectAllFuncZT2Btn->setObjectName(QString::fromUtf8("mSelectAllFuncZT2Btn")); | |||||
| mSelectAllFuncZT2Btn->setGeometry(QRect(180, 140, 41, 22)); | |||||
| groupBox_3 = new QGroupBox(groupBox); | |||||
| groupBox_3->setObjectName(QString::fromUtf8("groupBox_3")); | |||||
| groupBox_3->setGeometry(QRect(10, 120, 371, 141)); | |||||
| mReportStationSnowdonChkBx = new QCheckBox(groupBox_3); | |||||
| mReportStationSnowdonChkBx->setObjectName(QString::fromUtf8("mReportStationSnowdonChkBx")); | |||||
| mReportStationSnowdonChkBx->setGeometry(QRect(150, 90, 111, 20)); | |||||
| mReportStationSnowdonChkBx->setFont(font); | |||||
| mReportStationBeaugrandChkBx = new QCheckBox(groupBox_3); | |||||
| mReportStationBeaugrandChkBx->setObjectName(QString::fromUtf8("mReportStationBeaugrandChkBx")); | |||||
| mReportStationBeaugrandChkBx->setGeometry(QRect(10, 40, 111, 20)); | |||||
| mReportStationBeaugrandChkBx->setFont(font); | |||||
| mReportStationBourassaChkBx = new QCheckBox(groupBox_3); | |||||
| mReportStationBourassaChkBx->setObjectName(QString::fromUtf8("mReportStationBourassaChkBx")); | |||||
| mReportStationBourassaChkBx->setGeometry(QRect(10, 90, 111, 20)); | |||||
| mReportStationBourassaChkBx->setFont(font); | |||||
| mReportStationVertuChkBx = new QCheckBox(groupBox_3); | |||||
| mReportStationVertuChkBx->setObjectName(QString::fromUtf8("mReportStationVertuChkBx")); | |||||
| mReportStationVertuChkBx->setGeometry(QRect(10, 70, 111, 20)); | |||||
| mReportStationVertuChkBx->setFont(font); | |||||
| mReportStationMontmorencyChkBx = new QCheckBox(groupBox_3); | |||||
| mReportStationMontmorencyChkBx->setObjectName(QString::fromUtf8("mReportStationMontmorencyChkBx")); | |||||
| mReportStationMontmorencyChkBx->setGeometry(QRect(10, 110, 111, 20)); | |||||
| mReportStationMontmorencyChkBx->setFont(font); | |||||
| mReportStationBerriChkBx = new QCheckBox(groupBox_3); | |||||
| mReportStationBerriChkBx->setObjectName(QString::fromUtf8("mReportStationBerriChkBx")); | |||||
| mReportStationBerriChkBx->setGeometry(QRect(150, 20, 91, 20)); | |||||
| mReportStationBerriChkBx->setFont(font); | |||||
| mReportStationLongueuilChkBx = new QCheckBox(groupBox_3); | |||||
| mReportStationLongueuilChkBx->setObjectName(QString::fromUtf8("mReportStationLongueuilChkBx")); | |||||
| mReportStationLongueuilChkBx->setGeometry(QRect(150, 40, 91, 20)); | |||||
| mReportStationLongueuilChkBx->setFont(font); | |||||
| mReportStationStMichelChkBx = new QCheckBox(groupBox_3); | |||||
| mReportStationStMichelChkBx->setObjectName(QString::fromUtf8("mReportStationStMichelChkBx")); | |||||
| mReportStationStMichelChkBx->setGeometry(QRect(150, 70, 111, 20)); | |||||
| mReportStationStMichelChkBx->setFont(font); | |||||
| mReportStationAngrignonChkBx = new QCheckBox(groupBox_3); | |||||
| mReportStationAngrignonChkBx->setObjectName(QString::fromUtf8("mReportStationAngrignonChkBx")); | |||||
| mReportStationAngrignonChkBx->setGeometry(QRect(10, 20, 91, 20)); | |||||
| mReportStationAngrignonChkBx->setFont(font); | |||||
| mGenerateReportBtn = new QPushButton(CReportPage); | |||||
| mGenerateReportBtn->setObjectName(QString::fromUtf8("mGenerateReportBtn")); | |||||
| mGenerateReportBtn->setGeometry(QRect(470, 30, 111, 22)); | |||||
| mReportProgressBarr = new QProgressBar(CReportPage); | |||||
| mReportProgressBarr->setObjectName(QString::fromUtf8("mReportProgressBarr")); | |||||
| mReportProgressBarr->setGeometry(QRect(510, 470, 321, 23)); | |||||
| mReportProgressBarr->setValue(24); | |||||
| mReportProgressTextEdit = new QTextEdit(CReportPage); | |||||
| mReportProgressTextEdit->setObjectName(QString::fromUtf8("mReportProgressTextEdit")); | |||||
| mReportProgressTextEdit->setGeometry(QRect(470, 60, 401, 391)); | |||||
| mReportProgressTextEdit->setTextInteractionFlags(Qt::NoTextInteraction); | |||||
| mTimerLable = new QLabel(CReportPage); | |||||
| mTimerLable->setObjectName(QString::fromUtf8("mTimerLable")); | |||||
| mTimerLable->setGeometry(QRect(670, 30, 151, 16)); | |||||
| mTimerLable->setFont(font1); | |||||
| mOpenReportBtn = new QPushButton(CReportPage); | |||||
| mOpenReportBtn->setObjectName(QString::fromUtf8("mOpenReportBtn")); | |||||
| mOpenReportBtn->setGeometry(QRect(470, 510, 80, 22)); | |||||
| mReportPathLabel = new QLabel(CReportPage); | |||||
| mReportPathLabel->setObjectName(QString::fromUtf8("mReportPathLabel")); | |||||
| mReportPathLabel->setGeometry(QRect(560, 510, 381, 16)); | |||||
| mReportPathLabel->setFont(font); | |||||
| retranslateUi(CReportPage); | |||||
| QMetaObject::connectSlotsByName(CReportPage); | |||||
| } // setupUi | |||||
| void retranslateUi(QWidget *CReportPage) | |||||
| { | |||||
| CReportPage->setWindowTitle(QCoreApplication::translate("CReportPage", "Form", nullptr)); | |||||
| groupBox->setTitle(QCoreApplication::translate("CReportPage", "Param\303\250tres du rapport", nullptr)); | |||||
| mReportStartDateLbl->setText(QCoreApplication::translate("CReportPage", "Date d\303\251but", nullptr)); | |||||
| mReportEndDateLbl->setText(QCoreApplication::translate("CReportPage", "Date fin", nullptr)); | |||||
| groupBox_2->setTitle(QCoreApplication::translate("CReportPage", "Filtre d\303\251tection", nullptr)); | |||||
| mReportFunctionPPI_2ChkBx->setText(QCoreApplication::translate("CReportPage", "PP Int\303\251rieur", nullptr)); | |||||
| mReportFunctionComptage_2ChkBx->setText(QCoreApplication::translate("CReportPage", "Comptage", nullptr)); | |||||
| mReportFunctionPEQ2ChkBx->setText(QCoreApplication::translate("CReportPage", "Panne \303\211quipement", nullptr)); | |||||
| mReportFunctionFNChkBx->setText(QCoreApplication::translate("CReportPage", "Frotteurs N\303\251gatifs", nullptr)); | |||||
| mReportFunctionPGChkBx->setText(QCoreApplication::translate("CReportPage", "PG", nullptr)); | |||||
| mReportFunctionPEQ1ChkBx->setText(QCoreApplication::translate("CReportPage", "Panne \303\211quipement", nullptr)); | |||||
| mReportFunctionPPE_2ChkBx->setText(QCoreApplication::translate("CReportPage", "PP Ext\303\251rieur", nullptr)); | |||||
| mReportFunctionComptage_1ChkBx->setText(QCoreApplication::translate("CReportPage", "Comptage", nullptr)); | |||||
| mReportEndDateLbl_2->setText(QCoreApplication::translate("CReportPage", "ZT1", nullptr)); | |||||
| mReportEndDateLbl_3->setText(QCoreApplication::translate("CReportPage", "ZT2", nullptr)); | |||||
| mReportFunctionPPE_1ChkBx->setText(QCoreApplication::translate("CReportPage", "PP Ext\303\251rieur", nullptr)); | |||||
| mReportFunctionPPI_1ChkBx->setText(QCoreApplication::translate("CReportPage", "PP Int\303\251rieur", nullptr)); | |||||
| mReportFunctionNoDecl1ChkBx->setText(QCoreApplication::translate("CReportPage", "Sans d\303\251clenchements", nullptr)); | |||||
| mReportFunctionNoDecl2ChkBx->setText(QCoreApplication::translate("CReportPage", "Sans d\303\251clenchements", nullptr)); | |||||
| mSelectAllFuncZT1Btn->setText(QCoreApplication::translate("CReportPage", "Tout", nullptr)); | |||||
| mSelectNoneFuncZT1Btn->setText(QCoreApplication::translate("CReportPage", "Rien", nullptr)); | |||||
| mSelectNoneFuncZT2Btn->setText(QCoreApplication::translate("CReportPage", "Rien", nullptr)); | |||||
| mSelectAllFuncZT2Btn->setText(QCoreApplication::translate("CReportPage", "Tout", nullptr)); | |||||
| groupBox_3->setTitle(QCoreApplication::translate("CReportPage", "S\303\251lection des stations", nullptr)); | |||||
| mReportStationSnowdonChkBx->setText(QCoreApplication::translate("CReportPage", "Snowdon", nullptr)); | |||||
| mReportStationBeaugrandChkBx->setText(QCoreApplication::translate("CReportPage", "H. Beaugrand", nullptr)); | |||||
| mReportStationBourassaChkBx->setText(QCoreApplication::translate("CReportPage", "Henri-Bourassa", nullptr)); | |||||
| mReportStationVertuChkBx->setText(QCoreApplication::translate("CReportPage", "C\303\264te-Vertu", nullptr)); | |||||
| mReportStationMontmorencyChkBx->setText(QCoreApplication::translate("CReportPage", "Montmorency", nullptr)); | |||||
| mReportStationBerriChkBx->setText(QCoreApplication::translate("CReportPage", "Berri L4", nullptr)); | |||||
| mReportStationLongueuilChkBx->setText(QCoreApplication::translate("CReportPage", "Longueuil", nullptr)); | |||||
| mReportStationStMichelChkBx->setText(QCoreApplication::translate("CReportPage", "St-Michel", nullptr)); | |||||
| mReportStationAngrignonChkBx->setText(QCoreApplication::translate("CReportPage", "Angrignon", nullptr)); | |||||
| mGenerateReportBtn->setText(QCoreApplication::translate("CReportPage", "G\303\251n\303\251rer Rapport", nullptr)); | |||||
| mTimerLable->setText(QCoreApplication::translate("CReportPage", "TextLabel", nullptr)); | |||||
| mOpenReportBtn->setText(QCoreApplication::translate("CReportPage", "Ouvrir rapport", nullptr)); | |||||
| mReportPathLabel->setText(QCoreApplication::translate("CReportPage", "TextLabel", nullptr)); | |||||
| } // retranslateUi | |||||
| }; | |||||
| namespace Ui { | |||||
| class CReportPage: public Ui_CReportPage {}; | |||||
| } // namespace Ui | |||||
| QT_END_NAMESPACE | |||||
| #endif // UI_REPORTPAGE_H | |||||
| @@ -0,0 +1,52 @@ | |||||
| /******************************************************************************** | |||||
| ** Form generated from reading UI file 'SettingsPage.ui' | |||||
| ** | |||||
| ** Created by: Qt User Interface Compiler version 5.14.2 | |||||
| ** | |||||
| ** WARNING! All changes made in this file will be lost when recompiling UI file! | |||||
| ********************************************************************************/ | |||||
| #ifndef UI_SETTINGSPAGE_H | |||||
| #define UI_SETTINGSPAGE_H | |||||
| #include <QtCore/QVariant> | |||||
| #include <QtWidgets/QApplication> | |||||
| #include <QtWidgets/QGroupBox> | |||||
| #include <QtWidgets/QWidget> | |||||
| QT_BEGIN_NAMESPACE | |||||
| class Ui_CSettingsPage | |||||
| { | |||||
| public: | |||||
| QGroupBox *groupBox; | |||||
| void setupUi(QWidget *CSettingsPage) | |||||
| { | |||||
| if (CSettingsPage->objectName().isEmpty()) | |||||
| CSettingsPage->setObjectName(QString::fromUtf8("CSettingsPage")); | |||||
| CSettingsPage->resize(667, 650); | |||||
| groupBox = new QGroupBox(CSettingsPage); | |||||
| groupBox->setObjectName(QString::fromUtf8("groupBox")); | |||||
| groupBox->setGeometry(QRect(40, 20, 431, 471)); | |||||
| retranslateUi(CSettingsPage); | |||||
| QMetaObject::connectSlotsByName(CSettingsPage); | |||||
| } // setupUi | |||||
| void retranslateUi(QWidget *CSettingsPage) | |||||
| { | |||||
| CSettingsPage->setWindowTitle(QCoreApplication::translate("CSettingsPage", "Form", nullptr)); | |||||
| groupBox->setTitle(QCoreApplication::translate("CSettingsPage", "R\303\251pertoires sources", nullptr)); | |||||
| } // retranslateUi | |||||
| }; | |||||
| namespace Ui { | |||||
| class CSettingsPage: public Ui_CSettingsPage {}; | |||||
| } // namespace Ui | |||||
| QT_END_NAMESPACE | |||||
| #endif // UI_SETTINGSPAGE_H | |||||