Premier commit
This commit is contained in:
@@ -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
|
||||
+2585
File diff suppressed because one or more lines are too long
+2585
File diff suppressed because one or more lines are too long
+680
@@ -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>
|
||||
File diff suppressed because it is too large
Load Diff
@@ -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();
|
||||
}
|
||||
+59
@@ -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
|
||||
+286
@@ -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
|
||||
Reference in New Issue
Block a user