| @@ -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 | |||