This commit is contained in:
JF 2017-07-20 11:11:06 -04:00
commit 861cbe1f68
99 changed files with 16874 additions and 0 deletions

14
.gitignore vendored Normal file
View File

@ -0,0 +1,14 @@
ANG
BUQ4
CVRT
HBGR
MMO
SMIC
SNW5
/OutilZT.pro.user
/OutilZT.pro.user.0000000
/debug
/release
/Temp
/Trains/ZTLogs.zdb
/Trains/Trains.zdb

BIN
Configuration/Settings.ozs Normal file

Binary file not shown.

BIN
Images/GuiBackground.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

BIN
Images/Play Normal.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
Images/Save-icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
Images/Slider_Green.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

BIN
Images/Slider_Red.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

BIN
Images/csv.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

BIN
Images/database.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

BIN
Images/ethernet.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

BIN
Images/file_delete.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
Images/green-led-off-md.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

BIN
Images/green-led-on-md.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
Images/green_check.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

BIN
Images/log.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
Images/open-file-icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
Images/pushbutton-green.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

BIN
Images/red-led-off-md.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

BIN
Images/red-led-on-md.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
Images/red_cross.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

BIN
Images/tools.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

147
Makefile Normal file
View File

@ -0,0 +1,147 @@
#############################################################################
# Makefile for building: OutilZT
# Generated by qmake (2.01a) (Qt 4.8.1) on: Wed May 18 10:55:42 2016
# Project: OutilZT.pro
# Template: app
# Command: c:\Qt\4.8.1\bin\qmake.exe -spec ..\..\Qt\4.8.1\mkspecs\win32-g++ CONFIG+=release -o Makefile OutilZT.pro
#############################################################################
first: release
install: release-install
uninstall: release-uninstall
MAKEFILE = Makefile
QMAKE = c:\Qt\4.8.1\bin\qmake.exe
DEL_FILE = del
CHK_DIR_EXISTS= if not exist
MKDIR = mkdir
COPY = copy /y
COPY_FILE = $(COPY)
COPY_DIR = xcopy /s /q /y /i
INSTALL_FILE = $(COPY_FILE)
INSTALL_PROGRAM = $(COPY_FILE)
INSTALL_DIR = $(COPY_DIR)
DEL_FILE = del
SYMLINK =
DEL_DIR = rmdir
MOVE = move
CHK_DIR_EXISTS= if not exist
MKDIR = mkdir
SUBTARGETS = \
release \
debug
release: $(MAKEFILE).Release FORCE
$(MAKE) -f $(MAKEFILE).Release
release-make_default: $(MAKEFILE).Release FORCE
$(MAKE) -f $(MAKEFILE).Release
release-make_first: $(MAKEFILE).Release FORCE
$(MAKE) -f $(MAKEFILE).Release first
release-all: $(MAKEFILE).Release FORCE
$(MAKE) -f $(MAKEFILE).Release all
release-clean: $(MAKEFILE).Release FORCE
$(MAKE) -f $(MAKEFILE).Release clean
release-distclean: $(MAKEFILE).Release FORCE
$(MAKE) -f $(MAKEFILE).Release distclean
release-install: $(MAKEFILE).Release FORCE
$(MAKE) -f $(MAKEFILE).Release install
release-uninstall: $(MAKEFILE).Release FORCE
$(MAKE) -f $(MAKEFILE).Release uninstall
debug: $(MAKEFILE).Debug FORCE
$(MAKE) -f $(MAKEFILE).Debug
debug-make_default: $(MAKEFILE).Debug FORCE
$(MAKE) -f $(MAKEFILE).Debug
debug-make_first: $(MAKEFILE).Debug FORCE
$(MAKE) -f $(MAKEFILE).Debug first
debug-all: $(MAKEFILE).Debug FORCE
$(MAKE) -f $(MAKEFILE).Debug all
debug-clean: $(MAKEFILE).Debug FORCE
$(MAKE) -f $(MAKEFILE).Debug clean
debug-distclean: $(MAKEFILE).Debug FORCE
$(MAKE) -f $(MAKEFILE).Debug distclean
debug-install: $(MAKEFILE).Debug FORCE
$(MAKE) -f $(MAKEFILE).Debug install
debug-uninstall: $(MAKEFILE).Debug FORCE
$(MAKE) -f $(MAKEFILE).Debug uninstall
Makefile: OutilZT.pro ../../Qt/4.8.1/mkspecs/win32-g++/qmake.conf ../../Qt/4.8.1/mkspecs/qconfig.pri \
../../Qt/4.8.1/mkspecs/modules/qt_webkit_version.pri \
../../Qt/4.8.1/mkspecs/features/qt_functions.prf \
../../Qt/4.8.1/mkspecs/features/qt_config.prf \
../../Qt/4.8.1/mkspecs/features/exclusive_builds.prf \
../../Qt/4.8.1/mkspecs/features/default_pre.prf \
../../Qt/4.8.1/mkspecs/features/win32/default_pre.prf \
../../Qt/4.8.1/mkspecs/features/release.prf \
../../Qt/4.8.1/mkspecs/features/debug_and_release.prf \
../../Qt/4.8.1/mkspecs/features/default_post.prf \
../../Qt/4.8.1/mkspecs/features/win32/default_post.prf \
../../Qt/4.8.1/mkspecs/features/win32/rtti.prf \
../../Qt/4.8.1/mkspecs/features/win32/exceptions.prf \
../../Qt/4.8.1/mkspecs/features/win32/stl.prf \
../../Qt/4.8.1/mkspecs/features/shared.prf \
../../Qt/4.8.1/mkspecs/features/warn_on.prf \
../../Qt/4.8.1/mkspecs/features/qt.prf \
../../Qt/4.8.1/mkspecs/features/win32/thread.prf \
../../Qt/4.8.1/mkspecs/features/moc.prf \
../../Qt/4.8.1/mkspecs/features/win32/windows.prf \
../../Qt/4.8.1/mkspecs/features/resources.prf \
../../Qt/4.8.1/mkspecs/features/uic.prf \
../../Qt/4.8.1/mkspecs/features/yacc.prf \
../../Qt/4.8.1/mkspecs/features/lex.prf \
../../Qt/4.8.1/mkspecs/features/include_source_dir.prf \
c:/Qt/4.8.1/lib/qtmain.prl
$(QMAKE) -spec ..\..\Qt\4.8.1\mkspecs\win32-g++ CONFIG+=release -o Makefile OutilZT.pro
..\..\Qt\4.8.1\mkspecs\qconfig.pri:
..\..\Qt\4.8.1\mkspecs\modules\qt_webkit_version.pri:
..\..\Qt\4.8.1\mkspecs\features\qt_functions.prf:
..\..\Qt\4.8.1\mkspecs\features\qt_config.prf:
..\..\Qt\4.8.1\mkspecs\features\exclusive_builds.prf:
..\..\Qt\4.8.1\mkspecs\features\default_pre.prf:
..\..\Qt\4.8.1\mkspecs\features\win32\default_pre.prf:
..\..\Qt\4.8.1\mkspecs\features\release.prf:
..\..\Qt\4.8.1\mkspecs\features\debug_and_release.prf:
..\..\Qt\4.8.1\mkspecs\features\default_post.prf:
..\..\Qt\4.8.1\mkspecs\features\win32\default_post.prf:
..\..\Qt\4.8.1\mkspecs\features\win32\rtti.prf:
..\..\Qt\4.8.1\mkspecs\features\win32\exceptions.prf:
..\..\Qt\4.8.1\mkspecs\features\win32\stl.prf:
..\..\Qt\4.8.1\mkspecs\features\shared.prf:
..\..\Qt\4.8.1\mkspecs\features\warn_on.prf:
..\..\Qt\4.8.1\mkspecs\features\qt.prf:
..\..\Qt\4.8.1\mkspecs\features\win32\thread.prf:
..\..\Qt\4.8.1\mkspecs\features\moc.prf:
..\..\Qt\4.8.1\mkspecs\features\win32\windows.prf:
..\..\Qt\4.8.1\mkspecs\features\resources.prf:
..\..\Qt\4.8.1\mkspecs\features\uic.prf:
..\..\Qt\4.8.1\mkspecs\features\yacc.prf:
..\..\Qt\4.8.1\mkspecs\features\lex.prf:
..\..\Qt\4.8.1\mkspecs\features\include_source_dir.prf:
c:\Qt\4.8.1\lib\qtmain.prl:
qmake: qmake_all FORCE
@$(QMAKE) -spec ..\..\Qt\4.8.1\mkspecs\win32-g++ CONFIG+=release -o Makefile OutilZT.pro
qmake_all: FORCE
make_default: release-make_default debug-make_default 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
check: first
release-mocclean: $(MAKEFILE).Release
$(MAKE) -f $(MAKEFILE).Release mocclean
debug-mocclean: $(MAKEFILE).Debug
$(MAKE) -f $(MAKEFILE).Debug mocclean
mocclean: release-mocclean debug-mocclean
release-mocables: $(MAKEFILE).Release
$(MAKE) -f $(MAKEFILE).Release mocables
debug-mocables: $(MAKEFILE).Debug
$(MAKE) -f $(MAKEFILE).Debug mocables
mocables: release-mocables debug-mocables
FORCE:
$(MAKEFILE).Release: Makefile
$(MAKEFILE).Debug: Makefile

709
Makefile.Debug Normal file
View File

@ -0,0 +1,709 @@
#############################################################################
# Makefile for building: OutilZT
# Generated by qmake (2.01a) (Qt 4.8.1) on: Wed May 18 10:55:42 2016
# Project: OutilZT.pro
# Template: app
#############################################################################
####### Compiler, tools and options
CC = gcc
CXX = g++
DEFINES = -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN
CFLAGS = -g -Wall $(DEFINES)
CXXFLAGS = -g -frtti -fexceptions -mthreads -Wall $(DEFINES)
INCPATH = -I"..\..\Qt\4.8.1\include\QtCore" -I"..\..\Qt\4.8.1\include\QtNetwork" -I"..\..\Qt\4.8.1\include\QtGui" -I"..\..\Qt\4.8.1\include" -I"." -I"sources" -I"sources\GuiElements" -I"..\..\Qt\4.8.1\include\ActiveQt" -I"debug" -I"..\..\Qt\4.8.1\mkspecs\win32-g++"
LINK = g++
LFLAGS = -mthreads -Wl,-subsystem,windows
LIBS = -L"c:\Qt\4.8.1\lib" -lmingw32 -lqtmaind -lQtGuid4 -lQtNetworkd4 -lQtCored4
QMAKE = c:\Qt\4.8.1\bin\qmake.exe
IDC = c:\Qt\4.8.1\bin\idc.exe
IDL = midl
ZIP = zip -r -9
DEF_FILE =
RES_FILE =
COPY = copy /y
SED =
COPY_FILE = $(COPY)
COPY_DIR = xcopy /s /q /y /i
DEL_FILE = del
DEL_DIR = rmdir
MOVE = move
CHK_DIR_EXISTS= if not exist
MKDIR = mkdir
INSTALL_FILE = $(COPY_FILE)
INSTALL_PROGRAM = $(COPY_FILE)
INSTALL_DIR = $(COPY_DIR)
####### Output directory
OBJECTS_DIR = debug
####### Files
SOURCES = sources\main.cpp \
sources\OutilZT.cpp \
sources\MainPanel.cpp \
sources\GuiElements\MainPage.cpp \
sources\GuiElements\GuiPage.cpp \
sources\GuiElements\PushButton.cpp \
sources\GuiElements\LogViewPage.cpp \
sources\GuiElements\TextButtonWidget.cpp \
sources\GuiElements\RankRulerWidget.cpp \
sources\GuiElements\GraphCursorWidget.cpp \
sources\GuiElements\EventsRulerWidget.cpp \
sources\GuiElements\AnalogGraphItem.cpp \
sources\GuiElements\GraphItem.cpp \
sources\GuiElements\GraphRulerWidget.cpp \
sources\ZTData.cpp \
sources\LogMgr.cpp \
sources\TrainLogFileMgr.cpp \
sources\GuiElements\LogsListPage.cpp \
sources\GuiElements\OptionsPage.cpp \
sources\Settings.cpp \
sources\GuiElements\NetworkZTListPage.cpp \
sources\GuiElements\ToggleTextButtonWidget.cpp \
sources\GuiElements\NetworkCtrlPage.cpp \
sources\NetworkManager.cpp \
sources\GuiElements\TxRxWidget.cpp \
sources\TCPProtocol.cpp \
sources\GuiElements\RemoteZTPage.cpp \
sources\GuiElements\ZTLogViewerPage.cpp \
sources\GuiElements\ProgressBarPage.cpp \
sources\GuiElements\RemoteZTCtrlPage.cpp \
sources\GuiElements\ToggleButtonWidget.cpp \
sources\UDPProtocol.cpp \
sources\GuiElements\DatabaseMgrPage.cpp \
sources\GuiElements\ZTLogsListPage.cpp \
sources\ZTLogFilesMgr.cpp \
sources\DirParserThread.cpp debug\moc_OutilZT.cpp \
debug\moc_MainPanel.cpp \
debug\moc_MainPage.cpp \
debug\moc_Guipage.cpp \
debug\moc_PushButton.cpp \
debug\moc_LogViewPage.cpp \
debug\moc_TextButtonWidget.cpp \
debug\moc_RankRulerWidget.cpp \
debug\moc_GraphCursorWidget.cpp \
debug\moc_EventsRulerWidget.cpp \
debug\moc_AnalogGraphItem.cpp \
debug\moc_GraphItem.cpp \
debug\moc_GraphRulerWidget.cpp \
debug\moc_LogMgr.cpp \
debug\moc_LogsListPage.cpp \
debug\moc_OptionsPage.cpp \
debug\moc_NetworkZTListPage.cpp \
debug\moc_ToggleTextButtonWidget.cpp \
debug\moc_NetworkCtrlPage.cpp \
debug\moc_NetworkManager.cpp \
debug\moc_TxRxWidget.cpp \
debug\moc_RemoteZTPage.cpp \
debug\moc_ZTLogViewerPage.cpp \
debug\moc_ProgressBarPage.cpp \
debug\moc_RemoteZTCtrlPage.cpp \
debug\moc_ToggleButtonWidget.cpp \
debug\moc_DatabaseMgrPage.cpp \
debug\moc_ZTLogsListPage.cpp \
debug\moc_ZTLogFilesMgr.cpp \
debug\moc_DirParserThread.cpp
OBJECTS = debug/main.o \
debug/OutilZT.o \
debug/MainPanel.o \
debug/MainPage.o \
debug/GuiPage.o \
debug/PushButton.o \
debug/LogViewPage.o \
debug/TextButtonWidget.o \
debug/RankRulerWidget.o \
debug/GraphCursorWidget.o \
debug/EventsRulerWidget.o \
debug/AnalogGraphItem.o \
debug/GraphItem.o \
debug/GraphRulerWidget.o \
debug/ZTData.o \
debug/LogMgr.o \
debug/TrainLogFileMgr.o \
debug/LogsListPage.o \
debug/OptionsPage.o \
debug/Settings.o \
debug/NetworkZTListPage.o \
debug/ToggleTextButtonWidget.o \
debug/NetworkCtrlPage.o \
debug/NetworkManager.o \
debug/TxRxWidget.o \
debug/TCPProtocol.o \
debug/RemoteZTPage.o \
debug/ZTLogViewerPage.o \
debug/ProgressBarPage.o \
debug/RemoteZTCtrlPage.o \
debug/ToggleButtonWidget.o \
debug/UDPProtocol.o \
debug/DatabaseMgrPage.o \
debug/ZTLogsListPage.o \
debug/ZTLogFilesMgr.o \
debug/DirParserThread.o \
debug/moc_OutilZT.o \
debug/moc_MainPanel.o \
debug/moc_MainPage.o \
debug/moc_Guipage.o \
debug/moc_PushButton.o \
debug/moc_LogViewPage.o \
debug/moc_TextButtonWidget.o \
debug/moc_RankRulerWidget.o \
debug/moc_GraphCursorWidget.o \
debug/moc_EventsRulerWidget.o \
debug/moc_AnalogGraphItem.o \
debug/moc_GraphItem.o \
debug/moc_GraphRulerWidget.o \
debug/moc_LogMgr.o \
debug/moc_LogsListPage.o \
debug/moc_OptionsPage.o \
debug/moc_NetworkZTListPage.o \
debug/moc_ToggleTextButtonWidget.o \
debug/moc_NetworkCtrlPage.o \
debug/moc_NetworkManager.o \
debug/moc_TxRxWidget.o \
debug/moc_RemoteZTPage.o \
debug/moc_ZTLogViewerPage.o \
debug/moc_ProgressBarPage.o \
debug/moc_RemoteZTCtrlPage.o \
debug/moc_ToggleButtonWidget.o \
debug/moc_DatabaseMgrPage.o \
debug/moc_ZTLogsListPage.o \
debug/moc_ZTLogFilesMgr.o \
debug/moc_DirParserThread.o
DIST =
QMAKE_TARGET = OutilZT
DESTDIR = debug\ #avoid trailing-slash linebreak
TARGET = OutilZT.exe
DESTDIR_TARGET = debug\OutilZT.exe
####### Implicit rules
.SUFFIXES: .cpp .cc .cxx .c
.cpp.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
.cc.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
.cxx.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
.c.o:
$(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
####### Build rules
first: all
all: Makefile.Debug $(DESTDIR_TARGET)
$(DESTDIR_TARGET): $(OBJECTS)
$(LINK) $(LFLAGS) -o $(DESTDIR_TARGET) object_script.OutilZT.Debug $(LIBS)
qmake: FORCE
@$(QMAKE) -spec ..\..\Qt\4.8.1\mkspecs\win32-g++ CONFIG+=release -o Makefile.Debug OutilZT.pro
dist:
$(ZIP) OutilZT.zip $(SOURCES) $(DIST) OutilZT.pro ..\..\Qt\4.8.1\mkspecs\qconfig.pri ..\..\Qt\4.8.1\mkspecs\modules\qt_webkit_version.pri ..\..\Qt\4.8.1\mkspecs\features\qt_functions.prf ..\..\Qt\4.8.1\mkspecs\features\qt_config.prf ..\..\Qt\4.8.1\mkspecs\features\exclusive_builds.prf ..\..\Qt\4.8.1\mkspecs\features\default_pre.prf ..\..\Qt\4.8.1\mkspecs\features\win32\default_pre.prf ..\..\Qt\4.8.1\mkspecs\features\debug.prf ..\..\Qt\4.8.1\mkspecs\features\debug_and_release.prf ..\..\Qt\4.8.1\mkspecs\features\default_post.prf ..\..\Qt\4.8.1\mkspecs\features\win32\default_post.prf ..\..\Qt\4.8.1\mkspecs\features\build_pass.prf ..\..\Qt\4.8.1\mkspecs\features\win32\rtti.prf ..\..\Qt\4.8.1\mkspecs\features\win32\exceptions.prf ..\..\Qt\4.8.1\mkspecs\features\win32\stl.prf ..\..\Qt\4.8.1\mkspecs\features\shared.prf ..\..\Qt\4.8.1\mkspecs\features\warn_on.prf ..\..\Qt\4.8.1\mkspecs\features\qt.prf ..\..\Qt\4.8.1\mkspecs\features\win32\thread.prf ..\..\Qt\4.8.1\mkspecs\features\moc.prf ..\..\Qt\4.8.1\mkspecs\features\win32\windows.prf ..\..\Qt\4.8.1\mkspecs\features\resources.prf ..\..\Qt\4.8.1\mkspecs\features\uic.prf ..\..\Qt\4.8.1\mkspecs\features\yacc.prf ..\..\Qt\4.8.1\mkspecs\features\lex.prf ..\..\Qt\4.8.1\mkspecs\features\include_source_dir.prf c:\Qt\4.8.1\lib\qtmaind.prl HEADERS RESOURCES IMAGES SOURCES OBJECTIVE_SOURCES FORMS YACCSOURCES YACCSOURCES LEXSOURCES
clean: compiler_clean
-$(DEL_FILE) debug\main.o debug\OutilZT.o debug\MainPanel.o debug\MainPage.o debug\GuiPage.o debug\PushButton.o debug\LogViewPage.o debug\TextButtonWidget.o debug\RankRulerWidget.o debug\GraphCursorWidget.o debug\EventsRulerWidget.o debug\AnalogGraphItem.o debug\GraphItem.o debug\GraphRulerWidget.o debug\ZTData.o debug\LogMgr.o debug\TrainLogFileMgr.o debug\LogsListPage.o debug\OptionsPage.o debug\Settings.o debug\NetworkZTListPage.o debug\ToggleTextButtonWidget.o debug\NetworkCtrlPage.o debug\NetworkManager.o debug\TxRxWidget.o debug\TCPProtocol.o debug\RemoteZTPage.o debug\ZTLogViewerPage.o debug\ProgressBarPage.o debug\RemoteZTCtrlPage.o debug\ToggleButtonWidget.o debug\UDPProtocol.o debug\DatabaseMgrPage.o debug\ZTLogsListPage.o debug\ZTLogFilesMgr.o debug\DirParserThread.o debug\moc_OutilZT.o debug\moc_MainPanel.o debug\moc_MainPage.o debug\moc_Guipage.o debug\moc_PushButton.o debug\moc_LogViewPage.o debug\moc_TextButtonWidget.o debug\moc_RankRulerWidget.o debug\moc_GraphCursorWidget.o debug\moc_EventsRulerWidget.o debug\moc_AnalogGraphItem.o debug\moc_GraphItem.o debug\moc_GraphRulerWidget.o debug\moc_LogMgr.o debug\moc_LogsListPage.o debug\moc_OptionsPage.o debug\moc_NetworkZTListPage.o debug\moc_ToggleTextButtonWidget.o debug\moc_NetworkCtrlPage.o debug\moc_NetworkManager.o debug\moc_TxRxWidget.o debug\moc_RemoteZTPage.o debug\moc_ZTLogViewerPage.o debug\moc_ProgressBarPage.o debug\moc_RemoteZTCtrlPage.o debug\moc_ToggleButtonWidget.o debug\moc_DatabaseMgrPage.o debug\moc_ZTLogsListPage.o debug\moc_ZTLogFilesMgr.o debug\moc_DirParserThread.o
distclean: clean
-$(DEL_FILE) $(DESTDIR_TARGET)
-$(DEL_FILE) Makefile.Debug
check: first
mocclean: compiler_moc_header_clean compiler_moc_source_clean
mocables: compiler_moc_header_make_all compiler_moc_source_make_all
compiler_moc_header_make_all: debug/moc_OutilZT.cpp debug/moc_MainPanel.cpp debug/moc_MainPage.cpp debug/moc_Guipage.cpp debug/moc_PushButton.cpp debug/moc_LogViewPage.cpp debug/moc_TextButtonWidget.cpp debug/moc_RankRulerWidget.cpp debug/moc_GraphCursorWidget.cpp debug/moc_EventsRulerWidget.cpp debug/moc_AnalogGraphItem.cpp debug/moc_GraphItem.cpp debug/moc_GraphRulerWidget.cpp debug/moc_LogMgr.cpp debug/moc_LogsListPage.cpp debug/moc_OptionsPage.cpp debug/moc_NetworkZTListPage.cpp debug/moc_ToggleTextButtonWidget.cpp debug/moc_NetworkCtrlPage.cpp debug/moc_NetworkManager.cpp debug/moc_TxRxWidget.cpp debug/moc_RemoteZTPage.cpp debug/moc_ZTLogViewerPage.cpp debug/moc_ProgressBarPage.cpp debug/moc_RemoteZTCtrlPage.cpp debug/moc_ToggleButtonWidget.cpp debug/moc_DatabaseMgrPage.cpp debug/moc_ZTLogsListPage.cpp debug/moc_ZTLogFilesMgr.cpp debug/moc_DirParserThread.cpp
compiler_moc_header_clean:
-$(DEL_FILE) debug\moc_OutilZT.cpp debug\moc_MainPanel.cpp debug\moc_MainPage.cpp debug\moc_Guipage.cpp debug\moc_PushButton.cpp debug\moc_LogViewPage.cpp debug\moc_TextButtonWidget.cpp debug\moc_RankRulerWidget.cpp debug\moc_GraphCursorWidget.cpp debug\moc_EventsRulerWidget.cpp debug\moc_AnalogGraphItem.cpp debug\moc_GraphItem.cpp debug\moc_GraphRulerWidget.cpp debug\moc_LogMgr.cpp debug\moc_LogsListPage.cpp debug\moc_OptionsPage.cpp debug\moc_NetworkZTListPage.cpp debug\moc_ToggleTextButtonWidget.cpp debug\moc_NetworkCtrlPage.cpp debug\moc_NetworkManager.cpp debug\moc_TxRxWidget.cpp debug\moc_RemoteZTPage.cpp debug\moc_ZTLogViewerPage.cpp debug\moc_ProgressBarPage.cpp debug\moc_RemoteZTCtrlPage.cpp debug\moc_ToggleButtonWidget.cpp debug\moc_DatabaseMgrPage.cpp debug\moc_ZTLogsListPage.cpp debug\moc_ZTLogFilesMgr.cpp debug\moc_DirParserThread.cpp
debug/moc_OutilZT.cpp: sources/MainPanel.h \
sources/GlobalDefine.h \
sources/LogMgr.h \
sources/ZTData.h \
sources/DirParserThread.h \
sources/TrainLogFileMgr.h \
sources/Settings.h \
sources/TCPProtocol.h \
sources/ZTLogFilesMgr.h \
sources/OutilZT.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\OutilZT.h -o debug\moc_OutilZT.cpp
debug/moc_MainPanel.cpp: sources/GlobalDefine.h \
sources/MainPanel.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\MainPanel.h -o debug\moc_MainPanel.cpp
debug/moc_MainPage.cpp: sources/GuiElements/Guipage.h \
sources/GuiElements/PushButton.h \
sources/GuiElements/MainPage.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\GuiElements\MainPage.h -o debug\moc_MainPage.cpp
debug/moc_Guipage.cpp: sources/GuiElements/Guipage.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\GuiElements\Guipage.h -o debug\moc_Guipage.cpp
debug/moc_PushButton.cpp: sources/GuiElements/PushButton.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\GuiElements\PushButton.h -o debug\moc_PushButton.cpp
debug/moc_LogViewPage.cpp: sources/GuiElements/Guipage.h \
sources/GuiElements/PushButton.h \
sources/GuiElements/TextButtonWidget.h \
sources/GuiElements/GraphItem.h \
sources/GuiElements/GraphCursorWidget.h \
sources/GuiElements/GraphRulerWidget.h \
sources/GuiElements/AnalogGraphItem.h \
sources/GuiElements/RankRulerWidget.h \
sources/GuiElements/EventsRulerWidget.h \
sources/GuiElements/LogViewPage.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\GuiElements\LogViewPage.h -o debug\moc_LogViewPage.cpp
debug/moc_TextButtonWidget.cpp: sources/GuiElements/TextButtonWidget.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\GuiElements\TextButtonWidget.h -o debug\moc_TextButtonWidget.cpp
debug/moc_RankRulerWidget.cpp: sources/GuiElements/RankRulerWidget.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\GuiElements\RankRulerWidget.h -o debug\moc_RankRulerWidget.cpp
debug/moc_GraphCursorWidget.cpp: sources/GuiElements/GraphCursorWidget.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\GuiElements\GraphCursorWidget.h -o debug\moc_GraphCursorWidget.cpp
debug/moc_EventsRulerWidget.cpp: sources/GuiElements/EventsRulerWidget.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\GuiElements\EventsRulerWidget.h -o debug\moc_EventsRulerWidget.cpp
debug/moc_AnalogGraphItem.cpp: sources/GuiElements/AnalogGraphItem.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\GuiElements\AnalogGraphItem.h -o debug\moc_AnalogGraphItem.cpp
debug/moc_GraphItem.cpp: sources/GuiElements/GraphItem.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\GuiElements\GraphItem.h -o debug\moc_GraphItem.cpp
debug/moc_GraphRulerWidget.cpp: sources/GuiElements/GraphRulerWidget.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\GuiElements\GraphRulerWidget.h -o debug\moc_GraphRulerWidget.cpp
debug/moc_LogMgr.cpp: sources/ZTData.h \
sources/GlobalDefine.h \
sources/DirParserThread.h \
sources/TrainLogFileMgr.h \
sources/LogMgr.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\LogMgr.h -o debug\moc_LogMgr.cpp
debug/moc_LogsListPage.cpp: sources/GuiElements/Guipage.h \
sources/GuiElements/PushButton.h \
sources/GuiElements/TextButtonWidget.h \
sources/GuiElements/LogsListPage.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\GuiElements\LogsListPage.h -o debug\moc_LogsListPage.cpp
debug/moc_OptionsPage.cpp: sources/GuiElements/Guipage.h \
sources/GuiElements/PushButton.h \
sources/GuiElements/TextButtonWidget.h \
sources/GuiElements/OptionsPage.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\GuiElements\OptionsPage.h -o debug\moc_OptionsPage.cpp
debug/moc_NetworkZTListPage.cpp: sources/GuiElements/Guipage.h \
sources/GuiElements/PushButton.h \
sources/GuiElements/TextButtonWidget.h \
sources/GuiElements/NetworkZTListPage.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\GuiElements\NetworkZTListPage.h -o debug\moc_NetworkZTListPage.cpp
debug/moc_ToggleTextButtonWidget.cpp: sources/GuiElements/TextButtonWidget.h \
sources/GuiElements/ToggleTextButtonWidget.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\GuiElements\ToggleTextButtonWidget.h -o debug\moc_ToggleTextButtonWidget.cpp
debug/moc_NetworkCtrlPage.cpp: sources/GuiElements/Guipage.h \
sources/GuiElements/ToggleTextButtonWidget.h \
sources/GuiElements/TextButtonWidget.h \
sources/GuiElements/TxRxWidget.h \
sources/GuiElements/NetworkCtrlPage.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\GuiElements\NetworkCtrlPage.h -o debug\moc_NetworkCtrlPage.cpp
debug/moc_NetworkManager.cpp: sources/GlobalDefine.h \
sources/ZTData.h \
sources/TCPProtocol.h \
sources/UDPProtocol.h \
sources/NetworkManager.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\NetworkManager.h -o debug\moc_NetworkManager.cpp
debug/moc_TxRxWidget.cpp: sources/GuiElements/TxRxWidget.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\GuiElements\TxRxWidget.h -o debug\moc_TxRxWidget.cpp
debug/moc_RemoteZTPage.cpp: sources/GuiElements/Guipage.h \
sources/GuiElements/ToggleTextButtonWidget.h \
sources/GuiElements/TextButtonWidget.h \
sources/GuiElements/RemoteZTPage.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\GuiElements\RemoteZTPage.h -o debug\moc_RemoteZTPage.cpp
debug/moc_ZTLogViewerPage.cpp: sources/GuiElements/Guipage.h \
sources/GuiElements/TextButtonWidget.h \
sources/GuiElements/ZTLogViewerPage.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\GuiElements\ZTLogViewerPage.h -o debug\moc_ZTLogViewerPage.cpp
debug/moc_ProgressBarPage.cpp: sources/GuiElements/Guipage.h \
sources/GuiElements/ProgressBarPage.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\GuiElements\ProgressBarPage.h -o debug\moc_ProgressBarPage.cpp
debug/moc_RemoteZTCtrlPage.cpp: sources/GuiElements/Guipage.h \
sources/GuiElements/TextButtonWidget.h \
sources/GuiElements/ToggleButtonWidget.h \
sources/GuiElements/RemoteZTCtrlPage.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\GuiElements\RemoteZTCtrlPage.h -o debug\moc_RemoteZTCtrlPage.cpp
debug/moc_ToggleButtonWidget.cpp: sources/GuiElements/ToggleButtonWidget.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\GuiElements\ToggleButtonWidget.h -o debug\moc_ToggleButtonWidget.cpp
debug/moc_DatabaseMgrPage.cpp: sources/GuiElements/Guipage.h \
sources/GuiElements/PushButton.h \
sources/GuiElements/TextButtonWidget.h \
sources/GuiElements/DatabaseMgrPage.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\GuiElements\DatabaseMgrPage.h -o debug\moc_DatabaseMgrPage.cpp
debug/moc_ZTLogsListPage.cpp: sources/GuiElements/Guipage.h \
sources/GuiElements/PushButton.h \
sources/GuiElements/TextButtonWidget.h \
sources/GuiElements/ZTLogsListPage.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\GuiElements\ZTLogsListPage.h -o debug\moc_ZTLogsListPage.cpp
debug/moc_ZTLogFilesMgr.cpp: sources/ZTData.h \
sources/GlobalDefine.h \
sources/DirParserThread.h \
sources/TrainLogFileMgr.h \
sources/ZTLogFilesMgr.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\ZTLogFilesMgr.h -o debug\moc_ZTLogFilesMgr.cpp
debug/moc_DirParserThread.cpp: sources/GlobalDefine.h \
sources/TrainLogFileMgr.h \
sources/ZTData.h \
sources/DirParserThread.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\DirParserThread.h -o debug\moc_DirParserThread.cpp
compiler_rcc_make_all:
compiler_rcc_clean:
compiler_image_collection_make_all: qmake_image_collection.cpp
compiler_image_collection_clean:
-$(DEL_FILE) qmake_image_collection.cpp
compiler_moc_source_make_all:
compiler_moc_source_clean:
compiler_uic_make_all:
compiler_uic_clean:
compiler_yacc_decl_make_all:
compiler_yacc_decl_clean:
compiler_yacc_impl_make_all:
compiler_yacc_impl_clean:
compiler_lex_make_all:
compiler_lex_clean:
compiler_clean: compiler_moc_header_clean
####### Compile
debug/main.o: sources/main.cpp sources/OutilZT.h \
sources/MainPanel.h \
sources/GlobalDefine.h \
sources/LogMgr.h \
sources/ZTData.h \
sources/DirParserThread.h \
sources/TrainLogFileMgr.h \
sources/Settings.h \
sources/TCPProtocol.h \
sources/ZTLogFilesMgr.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\main.o sources\main.cpp
debug/OutilZT.o: sources/OutilZT.cpp sources/OutilZT.h \
sources/MainPanel.h \
sources/GlobalDefine.h \
sources/LogMgr.h \
sources/ZTData.h \
sources/DirParserThread.h \
sources/TrainLogFileMgr.h \
sources/Settings.h \
sources/TCPProtocol.h \
sources/ZTLogFilesMgr.h \
sources/NetworkManager.h \
sources/UDPProtocol.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\OutilZT.o sources\OutilZT.cpp
debug/MainPanel.o: sources/MainPanel.cpp sources/MainPanel.h \
sources/GlobalDefine.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\MainPanel.o sources\MainPanel.cpp
debug/MainPage.o: sources/GuiElements/MainPage.cpp sources/GuiElements/MainPage.h \
sources/GuiElements/Guipage.h \
sources/GuiElements/PushButton.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\MainPage.o sources\GuiElements\MainPage.cpp
debug/GuiPage.o: sources/GuiElements/GuiPage.cpp sources/GuiElements/Guipage.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\GuiPage.o sources\GuiElements\GuiPage.cpp
debug/PushButton.o: sources/GuiElements/PushButton.cpp sources/GuiElements/PushButton.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\PushButton.o sources\GuiElements\PushButton.cpp
debug/LogViewPage.o: sources/GuiElements/LogViewPage.cpp sources/GuiElements/LogViewPage.h \
sources/GuiElements/Guipage.h \
sources/GuiElements/PushButton.h \
sources/GuiElements/TextButtonWidget.h \
sources/GuiElements/GraphItem.h \
sources/GuiElements/GraphCursorWidget.h \
sources/GuiElements/GraphRulerWidget.h \
sources/GuiElements/AnalogGraphItem.h \
sources/GuiElements/RankRulerWidget.h \
sources/GuiElements/EventsRulerWidget.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\LogViewPage.o sources\GuiElements\LogViewPage.cpp
debug/TextButtonWidget.o: sources/GuiElements/TextButtonWidget.cpp sources/GuiElements/TextButtonWidget.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\TextButtonWidget.o sources\GuiElements\TextButtonWidget.cpp
debug/RankRulerWidget.o: sources/GuiElements/RankRulerWidget.cpp sources/GuiElements/RankRulerWidget.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\RankRulerWidget.o sources\GuiElements\RankRulerWidget.cpp
debug/GraphCursorWidget.o: sources/GuiElements/GraphCursorWidget.cpp sources/GuiElements/GraphCursorWidget.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\GraphCursorWidget.o sources\GuiElements\GraphCursorWidget.cpp
debug/EventsRulerWidget.o: sources/GuiElements/EventsRulerWidget.cpp sources/GuiElements/EventsRulerWidget.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\EventsRulerWidget.o sources\GuiElements\EventsRulerWidget.cpp
debug/AnalogGraphItem.o: sources/GuiElements/AnalogGraphItem.cpp sources/GuiElements/AnalogGraphItem.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\AnalogGraphItem.o sources\GuiElements\AnalogGraphItem.cpp
debug/GraphItem.o: sources/GuiElements/GraphItem.cpp sources/GuiElements/GraphItem.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\GraphItem.o sources\GuiElements\GraphItem.cpp
debug/GraphRulerWidget.o: sources/GuiElements/GraphRulerWidget.cpp sources/GuiElements/GraphRulerWidget.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\GraphRulerWidget.o sources\GuiElements\GraphRulerWidget.cpp
debug/ZTData.o: sources/ZTData.cpp sources/ZTData.h \
sources/GlobalDefine.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\ZTData.o sources\ZTData.cpp
debug/LogMgr.o: sources/LogMgr.cpp sources/LogMgr.h \
sources/ZTData.h \
sources/GlobalDefine.h \
sources/DirParserThread.h \
sources/TrainLogFileMgr.h \
sources/OutilZT.h \
sources/MainPanel.h \
sources/Settings.h \
sources/TCPProtocol.h \
sources/ZTLogFilesMgr.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\LogMgr.o sources\LogMgr.cpp
debug/TrainLogFileMgr.o: sources/TrainLogFileMgr.cpp sources/TrainLogFileMgr.h \
sources/GlobalDefine.h \
sources/ZTData.h \
sources/LogMgr.h \
sources/DirParserThread.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\TrainLogFileMgr.o sources\TrainLogFileMgr.cpp
debug/LogsListPage.o: sources/GuiElements/LogsListPage.cpp sources/GuiElements/LogsListPage.h \
sources/GuiElements/Guipage.h \
sources/GuiElements/PushButton.h \
sources/GuiElements/TextButtonWidget.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\LogsListPage.o sources\GuiElements\LogsListPage.cpp
debug/OptionsPage.o: sources/GuiElements/OptionsPage.cpp sources/GuiElements/OptionsPage.h \
sources/GuiElements/Guipage.h \
sources/GuiElements/PushButton.h \
sources/GuiElements/TextButtonWidget.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\OptionsPage.o sources\GuiElements\OptionsPage.cpp
debug/Settings.o: sources/Settings.cpp sources/Settings.h \
sources/GlobalDefine.h \
sources/ZTData.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\Settings.o sources\Settings.cpp
debug/NetworkZTListPage.o: sources/GuiElements/NetworkZTListPage.cpp sources/GuiElements/NetworkZTListPage.h \
sources/GuiElements/Guipage.h \
sources/GuiElements/PushButton.h \
sources/GuiElements/TextButtonWidget.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\NetworkZTListPage.o sources\GuiElements\NetworkZTListPage.cpp
debug/ToggleTextButtonWidget.o: sources/GuiElements/ToggleTextButtonWidget.cpp sources/GuiElements/TextButtonWidget.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\ToggleTextButtonWidget.o sources\GuiElements\ToggleTextButtonWidget.cpp
debug/NetworkCtrlPage.o: sources/GuiElements/NetworkCtrlPage.cpp sources/GuiElements/NetworkCtrlPage.h \
sources/GuiElements/Guipage.h \
sources/GuiElements/ToggleTextButtonWidget.h \
sources/GuiElements/TextButtonWidget.h \
sources/GuiElements/TxRxWidget.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\NetworkCtrlPage.o sources\GuiElements\NetworkCtrlPage.cpp
debug/NetworkManager.o: sources/NetworkManager.cpp sources/NetworkManager.h \
sources/GlobalDefine.h \
sources/ZTData.h \
sources/TCPProtocol.h \
sources/UDPProtocol.h \
sources/OutilZT.h \
sources/MainPanel.h \
sources/LogMgr.h \
sources/DirParserThread.h \
sources/TrainLogFileMgr.h \
sources/Settings.h \
sources/ZTLogFilesMgr.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\NetworkManager.o sources\NetworkManager.cpp
debug/TxRxWidget.o: sources/GuiElements/TxRxWidget.cpp sources/GuiElements/TxRxWidget.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\TxRxWidget.o sources\GuiElements\TxRxWidget.cpp
debug/TCPProtocol.o: sources/TCPProtocol.cpp sources/TCPProtocol.h \
sources/GlobalDefine.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\TCPProtocol.o sources\TCPProtocol.cpp
debug/RemoteZTPage.o: sources/GuiElements/RemoteZTPage.cpp sources/GuiElements/RemoteZTPage.h \
sources/GuiElements/Guipage.h \
sources/GuiElements/ToggleTextButtonWidget.h \
sources/GuiElements/TextButtonWidget.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\RemoteZTPage.o sources\GuiElements\RemoteZTPage.cpp
debug/ZTLogViewerPage.o: sources/GuiElements/ZTLogViewerPage.cpp sources/GuiElements/ZTLogViewerPage.h \
sources/GuiElements/Guipage.h \
sources/GuiElements/TextButtonWidget.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\ZTLogViewerPage.o sources\GuiElements\ZTLogViewerPage.cpp
debug/ProgressBarPage.o: sources/GuiElements/ProgressBarPage.cpp sources/GuiElements/ProgressBarPage.h \
sources/GuiElements/Guipage.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\ProgressBarPage.o sources\GuiElements\ProgressBarPage.cpp
debug/RemoteZTCtrlPage.o: sources/GuiElements/RemoteZTCtrlPage.cpp sources/GuiElements/RemoteZTCtrlPage.h \
sources/GuiElements/Guipage.h \
sources/GuiElements/TextButtonWidget.h \
sources/GuiElements/ToggleButtonWidget.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\RemoteZTCtrlPage.o sources\GuiElements\RemoteZTCtrlPage.cpp
debug/ToggleButtonWidget.o: sources/GuiElements/ToggleButtonWidget.cpp sources/GuiElements/ToggleButtonWidget.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\ToggleButtonWidget.o sources\GuiElements\ToggleButtonWidget.cpp
debug/UDPProtocol.o: sources/UDPProtocol.cpp sources/UDPProtocol.h \
sources/GlobalDefine.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\UDPProtocol.o sources\UDPProtocol.cpp
debug/DatabaseMgrPage.o: sources/GuiElements/DatabaseMgrPage.cpp sources/GuiElements/DatabaseMgrPage.h \
sources/GuiElements/Guipage.h \
sources/GuiElements/PushButton.h \
sources/GuiElements/TextButtonWidget.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\DatabaseMgrPage.o sources\GuiElements\DatabaseMgrPage.cpp
debug/ZTLogsListPage.o: sources/GuiElements/ZTLogsListPage.cpp sources/GuiElements/ZTLogsListPage.h \
sources/GuiElements/Guipage.h \
sources/GuiElements/PushButton.h \
sources/GuiElements/TextButtonWidget.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\ZTLogsListPage.o sources\GuiElements\ZTLogsListPage.cpp
debug/ZTLogFilesMgr.o: sources/ZTLogFilesMgr.cpp sources/ZTLogFilesMgr.h \
sources/ZTData.h \
sources/GlobalDefine.h \
sources/DirParserThread.h \
sources/TrainLogFileMgr.h \
sources/OutilZT.h \
sources/MainPanel.h \
sources/LogMgr.h \
sources/Settings.h \
sources/TCPProtocol.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\ZTLogFilesMgr.o sources\ZTLogFilesMgr.cpp
debug/DirParserThread.o: sources/DirParserThread.cpp sources/DirParserThread.h \
sources/GlobalDefine.h \
sources/TrainLogFileMgr.h \
sources/ZTData.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\DirParserThread.o sources\DirParserThread.cpp
debug/moc_OutilZT.o: debug/moc_OutilZT.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\moc_OutilZT.o debug\moc_OutilZT.cpp
debug/moc_MainPanel.o: debug/moc_MainPanel.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\moc_MainPanel.o debug\moc_MainPanel.cpp
debug/moc_MainPage.o: debug/moc_MainPage.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\moc_MainPage.o debug\moc_MainPage.cpp
debug/moc_Guipage.o: debug/moc_Guipage.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\moc_Guipage.o debug\moc_Guipage.cpp
debug/moc_PushButton.o: debug/moc_PushButton.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\moc_PushButton.o debug\moc_PushButton.cpp
debug/moc_LogViewPage.o: debug/moc_LogViewPage.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\moc_LogViewPage.o debug\moc_LogViewPage.cpp
debug/moc_TextButtonWidget.o: debug/moc_TextButtonWidget.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\moc_TextButtonWidget.o debug\moc_TextButtonWidget.cpp
debug/moc_RankRulerWidget.o: debug/moc_RankRulerWidget.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\moc_RankRulerWidget.o debug\moc_RankRulerWidget.cpp
debug/moc_GraphCursorWidget.o: debug/moc_GraphCursorWidget.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\moc_GraphCursorWidget.o debug\moc_GraphCursorWidget.cpp
debug/moc_EventsRulerWidget.o: debug/moc_EventsRulerWidget.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\moc_EventsRulerWidget.o debug\moc_EventsRulerWidget.cpp
debug/moc_AnalogGraphItem.o: debug/moc_AnalogGraphItem.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\moc_AnalogGraphItem.o debug\moc_AnalogGraphItem.cpp
debug/moc_GraphItem.o: debug/moc_GraphItem.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\moc_GraphItem.o debug\moc_GraphItem.cpp
debug/moc_GraphRulerWidget.o: debug/moc_GraphRulerWidget.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\moc_GraphRulerWidget.o debug\moc_GraphRulerWidget.cpp
debug/moc_LogMgr.o: debug/moc_LogMgr.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\moc_LogMgr.o debug\moc_LogMgr.cpp
debug/moc_LogsListPage.o: debug/moc_LogsListPage.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\moc_LogsListPage.o debug\moc_LogsListPage.cpp
debug/moc_OptionsPage.o: debug/moc_OptionsPage.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\moc_OptionsPage.o debug\moc_OptionsPage.cpp
debug/moc_NetworkZTListPage.o: debug/moc_NetworkZTListPage.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\moc_NetworkZTListPage.o debug\moc_NetworkZTListPage.cpp
debug/moc_ToggleTextButtonWidget.o: debug/moc_ToggleTextButtonWidget.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\moc_ToggleTextButtonWidget.o debug\moc_ToggleTextButtonWidget.cpp
debug/moc_NetworkCtrlPage.o: debug/moc_NetworkCtrlPage.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\moc_NetworkCtrlPage.o debug\moc_NetworkCtrlPage.cpp
debug/moc_NetworkManager.o: debug/moc_NetworkManager.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\moc_NetworkManager.o debug\moc_NetworkManager.cpp
debug/moc_TxRxWidget.o: debug/moc_TxRxWidget.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\moc_TxRxWidget.o debug\moc_TxRxWidget.cpp
debug/moc_RemoteZTPage.o: debug/moc_RemoteZTPage.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\moc_RemoteZTPage.o debug\moc_RemoteZTPage.cpp
debug/moc_ZTLogViewerPage.o: debug/moc_ZTLogViewerPage.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\moc_ZTLogViewerPage.o debug\moc_ZTLogViewerPage.cpp
debug/moc_ProgressBarPage.o: debug/moc_ProgressBarPage.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\moc_ProgressBarPage.o debug\moc_ProgressBarPage.cpp
debug/moc_RemoteZTCtrlPage.o: debug/moc_RemoteZTCtrlPage.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\moc_RemoteZTCtrlPage.o debug\moc_RemoteZTCtrlPage.cpp
debug/moc_ToggleButtonWidget.o: debug/moc_ToggleButtonWidget.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\moc_ToggleButtonWidget.o debug\moc_ToggleButtonWidget.cpp
debug/moc_DatabaseMgrPage.o: debug/moc_DatabaseMgrPage.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\moc_DatabaseMgrPage.o debug\moc_DatabaseMgrPage.cpp
debug/moc_ZTLogsListPage.o: debug/moc_ZTLogsListPage.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\moc_ZTLogsListPage.o debug\moc_ZTLogsListPage.cpp
debug/moc_ZTLogFilesMgr.o: debug/moc_ZTLogFilesMgr.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\moc_ZTLogFilesMgr.o debug\moc_ZTLogFilesMgr.cpp
debug/moc_DirParserThread.o: debug/moc_DirParserThread.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\moc_DirParserThread.o debug\moc_DirParserThread.cpp
####### Install
install: FORCE
uninstall: FORCE
FORCE:

709
Makefile.Release Normal file
View File

@ -0,0 +1,709 @@
#############################################################################
# Makefile for building: OutilZT
# Generated by qmake (2.01a) (Qt 4.8.1) on: Wed May 18 10:55:42 2016
# Project: OutilZT.pro
# Template: app
#############################################################################
####### Compiler, tools and options
CC = gcc
CXX = g++
DEFINES = -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN
CFLAGS = -O2 -Wall $(DEFINES)
CXXFLAGS = -O2 -frtti -fexceptions -mthreads -Wall $(DEFINES)
INCPATH = -I"..\..\Qt\4.8.1\include\QtCore" -I"..\..\Qt\4.8.1\include\QtNetwork" -I"..\..\Qt\4.8.1\include\QtGui" -I"..\..\Qt\4.8.1\include" -I"." -I"sources" -I"sources\GuiElements" -I"..\..\Qt\4.8.1\include\ActiveQt" -I"release" -I"..\..\Qt\4.8.1\mkspecs\win32-g++"
LINK = g++
LFLAGS = -Wl,-s -mthreads -Wl,-subsystem,windows
LIBS = -L"c:\Qt\4.8.1\lib" -lmingw32 -lqtmain -lQtGui4 -lQtNetwork4 -lQtCore4
QMAKE = c:\Qt\4.8.1\bin\qmake.exe
IDC = c:\Qt\4.8.1\bin\idc.exe
IDL = midl
ZIP = zip -r -9
DEF_FILE =
RES_FILE =
COPY = copy /y
SED =
COPY_FILE = $(COPY)
COPY_DIR = xcopy /s /q /y /i
DEL_FILE = del
DEL_DIR = rmdir
MOVE = move
CHK_DIR_EXISTS= if not exist
MKDIR = mkdir
INSTALL_FILE = $(COPY_FILE)
INSTALL_PROGRAM = $(COPY_FILE)
INSTALL_DIR = $(COPY_DIR)
####### Output directory
OBJECTS_DIR = release
####### Files
SOURCES = sources\main.cpp \
sources\OutilZT.cpp \
sources\MainPanel.cpp \
sources\GuiElements\MainPage.cpp \
sources\GuiElements\GuiPage.cpp \
sources\GuiElements\PushButton.cpp \
sources\GuiElements\LogViewPage.cpp \
sources\GuiElements\TextButtonWidget.cpp \
sources\GuiElements\RankRulerWidget.cpp \
sources\GuiElements\GraphCursorWidget.cpp \
sources\GuiElements\EventsRulerWidget.cpp \
sources\GuiElements\AnalogGraphItem.cpp \
sources\GuiElements\GraphItem.cpp \
sources\GuiElements\GraphRulerWidget.cpp \
sources\ZTData.cpp \
sources\LogMgr.cpp \
sources\TrainLogFileMgr.cpp \
sources\GuiElements\LogsListPage.cpp \
sources\GuiElements\OptionsPage.cpp \
sources\Settings.cpp \
sources\GuiElements\NetworkZTListPage.cpp \
sources\GuiElements\ToggleTextButtonWidget.cpp \
sources\GuiElements\NetworkCtrlPage.cpp \
sources\NetworkManager.cpp \
sources\GuiElements\TxRxWidget.cpp \
sources\TCPProtocol.cpp \
sources\GuiElements\RemoteZTPage.cpp \
sources\GuiElements\ZTLogViewerPage.cpp \
sources\GuiElements\ProgressBarPage.cpp \
sources\GuiElements\RemoteZTCtrlPage.cpp \
sources\GuiElements\ToggleButtonWidget.cpp \
sources\UDPProtocol.cpp \
sources\GuiElements\DatabaseMgrPage.cpp \
sources\GuiElements\ZTLogsListPage.cpp \
sources\ZTLogFilesMgr.cpp \
sources\DirParserThread.cpp release\moc_OutilZT.cpp \
release\moc_MainPanel.cpp \
release\moc_MainPage.cpp \
release\moc_Guipage.cpp \
release\moc_PushButton.cpp \
release\moc_LogViewPage.cpp \
release\moc_TextButtonWidget.cpp \
release\moc_RankRulerWidget.cpp \
release\moc_GraphCursorWidget.cpp \
release\moc_EventsRulerWidget.cpp \
release\moc_AnalogGraphItem.cpp \
release\moc_GraphItem.cpp \
release\moc_GraphRulerWidget.cpp \
release\moc_LogMgr.cpp \
release\moc_LogsListPage.cpp \
release\moc_OptionsPage.cpp \
release\moc_NetworkZTListPage.cpp \
release\moc_ToggleTextButtonWidget.cpp \
release\moc_NetworkCtrlPage.cpp \
release\moc_NetworkManager.cpp \
release\moc_TxRxWidget.cpp \
release\moc_RemoteZTPage.cpp \
release\moc_ZTLogViewerPage.cpp \
release\moc_ProgressBarPage.cpp \
release\moc_RemoteZTCtrlPage.cpp \
release\moc_ToggleButtonWidget.cpp \
release\moc_DatabaseMgrPage.cpp \
release\moc_ZTLogsListPage.cpp \
release\moc_ZTLogFilesMgr.cpp \
release\moc_DirParserThread.cpp
OBJECTS = release/main.o \
release/OutilZT.o \
release/MainPanel.o \
release/MainPage.o \
release/GuiPage.o \
release/PushButton.o \
release/LogViewPage.o \
release/TextButtonWidget.o \
release/RankRulerWidget.o \
release/GraphCursorWidget.o \
release/EventsRulerWidget.o \
release/AnalogGraphItem.o \
release/GraphItem.o \
release/GraphRulerWidget.o \
release/ZTData.o \
release/LogMgr.o \
release/TrainLogFileMgr.o \
release/LogsListPage.o \
release/OptionsPage.o \
release/Settings.o \
release/NetworkZTListPage.o \
release/ToggleTextButtonWidget.o \
release/NetworkCtrlPage.o \
release/NetworkManager.o \
release/TxRxWidget.o \
release/TCPProtocol.o \
release/RemoteZTPage.o \
release/ZTLogViewerPage.o \
release/ProgressBarPage.o \
release/RemoteZTCtrlPage.o \
release/ToggleButtonWidget.o \
release/UDPProtocol.o \
release/DatabaseMgrPage.o \
release/ZTLogsListPage.o \
release/ZTLogFilesMgr.o \
release/DirParserThread.o \
release/moc_OutilZT.o \
release/moc_MainPanel.o \
release/moc_MainPage.o \
release/moc_Guipage.o \
release/moc_PushButton.o \
release/moc_LogViewPage.o \
release/moc_TextButtonWidget.o \
release/moc_RankRulerWidget.o \
release/moc_GraphCursorWidget.o \
release/moc_EventsRulerWidget.o \
release/moc_AnalogGraphItem.o \
release/moc_GraphItem.o \
release/moc_GraphRulerWidget.o \
release/moc_LogMgr.o \
release/moc_LogsListPage.o \
release/moc_OptionsPage.o \
release/moc_NetworkZTListPage.o \
release/moc_ToggleTextButtonWidget.o \
release/moc_NetworkCtrlPage.o \
release/moc_NetworkManager.o \
release/moc_TxRxWidget.o \
release/moc_RemoteZTPage.o \
release/moc_ZTLogViewerPage.o \
release/moc_ProgressBarPage.o \
release/moc_RemoteZTCtrlPage.o \
release/moc_ToggleButtonWidget.o \
release/moc_DatabaseMgrPage.o \
release/moc_ZTLogsListPage.o \
release/moc_ZTLogFilesMgr.o \
release/moc_DirParserThread.o
DIST =
QMAKE_TARGET = OutilZT
DESTDIR = release\ #avoid trailing-slash linebreak
TARGET = OutilZT.exe
DESTDIR_TARGET = release\OutilZT.exe
####### Implicit rules
.SUFFIXES: .cpp .cc .cxx .c
.cpp.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
.cc.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
.cxx.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
.c.o:
$(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
####### Build rules
first: all
all: Makefile.Release $(DESTDIR_TARGET)
$(DESTDIR_TARGET): $(OBJECTS)
$(LINK) $(LFLAGS) -o $(DESTDIR_TARGET) object_script.OutilZT.Release $(LIBS)
qmake: FORCE
@$(QMAKE) -spec ..\..\Qt\4.8.1\mkspecs\win32-g++ CONFIG+=release -o Makefile.Release OutilZT.pro
dist:
$(ZIP) OutilZT.zip $(SOURCES) $(DIST) OutilZT.pro ..\..\Qt\4.8.1\mkspecs\qconfig.pri ..\..\Qt\4.8.1\mkspecs\modules\qt_webkit_version.pri ..\..\Qt\4.8.1\mkspecs\features\qt_functions.prf ..\..\Qt\4.8.1\mkspecs\features\qt_config.prf ..\..\Qt\4.8.1\mkspecs\features\exclusive_builds.prf ..\..\Qt\4.8.1\mkspecs\features\default_pre.prf ..\..\Qt\4.8.1\mkspecs\features\win32\default_pre.prf ..\..\Qt\4.8.1\mkspecs\features\release.prf ..\..\Qt\4.8.1\mkspecs\features\debug_and_release.prf ..\..\Qt\4.8.1\mkspecs\features\default_post.prf ..\..\Qt\4.8.1\mkspecs\features\win32\default_post.prf ..\..\Qt\4.8.1\mkspecs\features\build_pass.prf ..\..\Qt\4.8.1\mkspecs\features\win32\rtti.prf ..\..\Qt\4.8.1\mkspecs\features\win32\exceptions.prf ..\..\Qt\4.8.1\mkspecs\features\win32\stl.prf ..\..\Qt\4.8.1\mkspecs\features\shared.prf ..\..\Qt\4.8.1\mkspecs\features\warn_on.prf ..\..\Qt\4.8.1\mkspecs\features\qt.prf ..\..\Qt\4.8.1\mkspecs\features\win32\thread.prf ..\..\Qt\4.8.1\mkspecs\features\moc.prf ..\..\Qt\4.8.1\mkspecs\features\win32\windows.prf ..\..\Qt\4.8.1\mkspecs\features\resources.prf ..\..\Qt\4.8.1\mkspecs\features\uic.prf ..\..\Qt\4.8.1\mkspecs\features\yacc.prf ..\..\Qt\4.8.1\mkspecs\features\lex.prf ..\..\Qt\4.8.1\mkspecs\features\include_source_dir.prf c:\Qt\4.8.1\lib\qtmain.prl HEADERS RESOURCES IMAGES SOURCES OBJECTIVE_SOURCES FORMS YACCSOURCES YACCSOURCES LEXSOURCES
clean: compiler_clean
-$(DEL_FILE) release\main.o release\OutilZT.o release\MainPanel.o release\MainPage.o release\GuiPage.o release\PushButton.o release\LogViewPage.o release\TextButtonWidget.o release\RankRulerWidget.o release\GraphCursorWidget.o release\EventsRulerWidget.o release\AnalogGraphItem.o release\GraphItem.o release\GraphRulerWidget.o release\ZTData.o release\LogMgr.o release\TrainLogFileMgr.o release\LogsListPage.o release\OptionsPage.o release\Settings.o release\NetworkZTListPage.o release\ToggleTextButtonWidget.o release\NetworkCtrlPage.o release\NetworkManager.o release\TxRxWidget.o release\TCPProtocol.o release\RemoteZTPage.o release\ZTLogViewerPage.o release\ProgressBarPage.o release\RemoteZTCtrlPage.o release\ToggleButtonWidget.o release\UDPProtocol.o release\DatabaseMgrPage.o release\ZTLogsListPage.o release\ZTLogFilesMgr.o release\DirParserThread.o release\moc_OutilZT.o release\moc_MainPanel.o release\moc_MainPage.o release\moc_Guipage.o release\moc_PushButton.o release\moc_LogViewPage.o release\moc_TextButtonWidget.o release\moc_RankRulerWidget.o release\moc_GraphCursorWidget.o release\moc_EventsRulerWidget.o release\moc_AnalogGraphItem.o release\moc_GraphItem.o release\moc_GraphRulerWidget.o release\moc_LogMgr.o release\moc_LogsListPage.o release\moc_OptionsPage.o release\moc_NetworkZTListPage.o release\moc_ToggleTextButtonWidget.o release\moc_NetworkCtrlPage.o release\moc_NetworkManager.o release\moc_TxRxWidget.o release\moc_RemoteZTPage.o release\moc_ZTLogViewerPage.o release\moc_ProgressBarPage.o release\moc_RemoteZTCtrlPage.o release\moc_ToggleButtonWidget.o release\moc_DatabaseMgrPage.o release\moc_ZTLogsListPage.o release\moc_ZTLogFilesMgr.o release\moc_DirParserThread.o
distclean: clean
-$(DEL_FILE) $(DESTDIR_TARGET)
-$(DEL_FILE) Makefile.Release
check: first
mocclean: compiler_moc_header_clean compiler_moc_source_clean
mocables: compiler_moc_header_make_all compiler_moc_source_make_all
compiler_moc_header_make_all: release/moc_OutilZT.cpp release/moc_MainPanel.cpp release/moc_MainPage.cpp release/moc_Guipage.cpp release/moc_PushButton.cpp release/moc_LogViewPage.cpp release/moc_TextButtonWidget.cpp release/moc_RankRulerWidget.cpp release/moc_GraphCursorWidget.cpp release/moc_EventsRulerWidget.cpp release/moc_AnalogGraphItem.cpp release/moc_GraphItem.cpp release/moc_GraphRulerWidget.cpp release/moc_LogMgr.cpp release/moc_LogsListPage.cpp release/moc_OptionsPage.cpp release/moc_NetworkZTListPage.cpp release/moc_ToggleTextButtonWidget.cpp release/moc_NetworkCtrlPage.cpp release/moc_NetworkManager.cpp release/moc_TxRxWidget.cpp release/moc_RemoteZTPage.cpp release/moc_ZTLogViewerPage.cpp release/moc_ProgressBarPage.cpp release/moc_RemoteZTCtrlPage.cpp release/moc_ToggleButtonWidget.cpp release/moc_DatabaseMgrPage.cpp release/moc_ZTLogsListPage.cpp release/moc_ZTLogFilesMgr.cpp release/moc_DirParserThread.cpp
compiler_moc_header_clean:
-$(DEL_FILE) release\moc_OutilZT.cpp release\moc_MainPanel.cpp release\moc_MainPage.cpp release\moc_Guipage.cpp release\moc_PushButton.cpp release\moc_LogViewPage.cpp release\moc_TextButtonWidget.cpp release\moc_RankRulerWidget.cpp release\moc_GraphCursorWidget.cpp release\moc_EventsRulerWidget.cpp release\moc_AnalogGraphItem.cpp release\moc_GraphItem.cpp release\moc_GraphRulerWidget.cpp release\moc_LogMgr.cpp release\moc_LogsListPage.cpp release\moc_OptionsPage.cpp release\moc_NetworkZTListPage.cpp release\moc_ToggleTextButtonWidget.cpp release\moc_NetworkCtrlPage.cpp release\moc_NetworkManager.cpp release\moc_TxRxWidget.cpp release\moc_RemoteZTPage.cpp release\moc_ZTLogViewerPage.cpp release\moc_ProgressBarPage.cpp release\moc_RemoteZTCtrlPage.cpp release\moc_ToggleButtonWidget.cpp release\moc_DatabaseMgrPage.cpp release\moc_ZTLogsListPage.cpp release\moc_ZTLogFilesMgr.cpp release\moc_DirParserThread.cpp
release/moc_OutilZT.cpp: sources/MainPanel.h \
sources/GlobalDefine.h \
sources/LogMgr.h \
sources/ZTData.h \
sources/DirParserThread.h \
sources/TrainLogFileMgr.h \
sources/Settings.h \
sources/TCPProtocol.h \
sources/ZTLogFilesMgr.h \
sources/OutilZT.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\OutilZT.h -o release\moc_OutilZT.cpp
release/moc_MainPanel.cpp: sources/GlobalDefine.h \
sources/MainPanel.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\MainPanel.h -o release\moc_MainPanel.cpp
release/moc_MainPage.cpp: sources/GuiElements/Guipage.h \
sources/GuiElements/PushButton.h \
sources/GuiElements/MainPage.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\GuiElements\MainPage.h -o release\moc_MainPage.cpp
release/moc_Guipage.cpp: sources/GuiElements/Guipage.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\GuiElements\Guipage.h -o release\moc_Guipage.cpp
release/moc_PushButton.cpp: sources/GuiElements/PushButton.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\GuiElements\PushButton.h -o release\moc_PushButton.cpp
release/moc_LogViewPage.cpp: sources/GuiElements/Guipage.h \
sources/GuiElements/PushButton.h \
sources/GuiElements/TextButtonWidget.h \
sources/GuiElements/GraphItem.h \
sources/GuiElements/GraphCursorWidget.h \
sources/GuiElements/GraphRulerWidget.h \
sources/GuiElements/AnalogGraphItem.h \
sources/GuiElements/RankRulerWidget.h \
sources/GuiElements/EventsRulerWidget.h \
sources/GuiElements/LogViewPage.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\GuiElements\LogViewPage.h -o release\moc_LogViewPage.cpp
release/moc_TextButtonWidget.cpp: sources/GuiElements/TextButtonWidget.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\GuiElements\TextButtonWidget.h -o release\moc_TextButtonWidget.cpp
release/moc_RankRulerWidget.cpp: sources/GuiElements/RankRulerWidget.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\GuiElements\RankRulerWidget.h -o release\moc_RankRulerWidget.cpp
release/moc_GraphCursorWidget.cpp: sources/GuiElements/GraphCursorWidget.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\GuiElements\GraphCursorWidget.h -o release\moc_GraphCursorWidget.cpp
release/moc_EventsRulerWidget.cpp: sources/GuiElements/EventsRulerWidget.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\GuiElements\EventsRulerWidget.h -o release\moc_EventsRulerWidget.cpp
release/moc_AnalogGraphItem.cpp: sources/GuiElements/AnalogGraphItem.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\GuiElements\AnalogGraphItem.h -o release\moc_AnalogGraphItem.cpp
release/moc_GraphItem.cpp: sources/GuiElements/GraphItem.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\GuiElements\GraphItem.h -o release\moc_GraphItem.cpp
release/moc_GraphRulerWidget.cpp: sources/GuiElements/GraphRulerWidget.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\GuiElements\GraphRulerWidget.h -o release\moc_GraphRulerWidget.cpp
release/moc_LogMgr.cpp: sources/ZTData.h \
sources/GlobalDefine.h \
sources/DirParserThread.h \
sources/TrainLogFileMgr.h \
sources/LogMgr.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\LogMgr.h -o release\moc_LogMgr.cpp
release/moc_LogsListPage.cpp: sources/GuiElements/Guipage.h \
sources/GuiElements/PushButton.h \
sources/GuiElements/TextButtonWidget.h \
sources/GuiElements/LogsListPage.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\GuiElements\LogsListPage.h -o release\moc_LogsListPage.cpp
release/moc_OptionsPage.cpp: sources/GuiElements/Guipage.h \
sources/GuiElements/PushButton.h \
sources/GuiElements/TextButtonWidget.h \
sources/GuiElements/OptionsPage.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\GuiElements\OptionsPage.h -o release\moc_OptionsPage.cpp
release/moc_NetworkZTListPage.cpp: sources/GuiElements/Guipage.h \
sources/GuiElements/PushButton.h \
sources/GuiElements/TextButtonWidget.h \
sources/GuiElements/NetworkZTListPage.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\GuiElements\NetworkZTListPage.h -o release\moc_NetworkZTListPage.cpp
release/moc_ToggleTextButtonWidget.cpp: sources/GuiElements/TextButtonWidget.h \
sources/GuiElements/ToggleTextButtonWidget.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\GuiElements\ToggleTextButtonWidget.h -o release\moc_ToggleTextButtonWidget.cpp
release/moc_NetworkCtrlPage.cpp: sources/GuiElements/Guipage.h \
sources/GuiElements/ToggleTextButtonWidget.h \
sources/GuiElements/TextButtonWidget.h \
sources/GuiElements/TxRxWidget.h \
sources/GuiElements/NetworkCtrlPage.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\GuiElements\NetworkCtrlPage.h -o release\moc_NetworkCtrlPage.cpp
release/moc_NetworkManager.cpp: sources/GlobalDefine.h \
sources/ZTData.h \
sources/TCPProtocol.h \
sources/UDPProtocol.h \
sources/NetworkManager.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\NetworkManager.h -o release\moc_NetworkManager.cpp
release/moc_TxRxWidget.cpp: sources/GuiElements/TxRxWidget.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\GuiElements\TxRxWidget.h -o release\moc_TxRxWidget.cpp
release/moc_RemoteZTPage.cpp: sources/GuiElements/Guipage.h \
sources/GuiElements/ToggleTextButtonWidget.h \
sources/GuiElements/TextButtonWidget.h \
sources/GuiElements/RemoteZTPage.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\GuiElements\RemoteZTPage.h -o release\moc_RemoteZTPage.cpp
release/moc_ZTLogViewerPage.cpp: sources/GuiElements/Guipage.h \
sources/GuiElements/TextButtonWidget.h \
sources/GuiElements/ZTLogViewerPage.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\GuiElements\ZTLogViewerPage.h -o release\moc_ZTLogViewerPage.cpp
release/moc_ProgressBarPage.cpp: sources/GuiElements/Guipage.h \
sources/GuiElements/ProgressBarPage.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\GuiElements\ProgressBarPage.h -o release\moc_ProgressBarPage.cpp
release/moc_RemoteZTCtrlPage.cpp: sources/GuiElements/Guipage.h \
sources/GuiElements/TextButtonWidget.h \
sources/GuiElements/ToggleButtonWidget.h \
sources/GuiElements/RemoteZTCtrlPage.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\GuiElements\RemoteZTCtrlPage.h -o release\moc_RemoteZTCtrlPage.cpp
release/moc_ToggleButtonWidget.cpp: sources/GuiElements/ToggleButtonWidget.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\GuiElements\ToggleButtonWidget.h -o release\moc_ToggleButtonWidget.cpp
release/moc_DatabaseMgrPage.cpp: sources/GuiElements/Guipage.h \
sources/GuiElements/PushButton.h \
sources/GuiElements/TextButtonWidget.h \
sources/GuiElements/DatabaseMgrPage.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\GuiElements\DatabaseMgrPage.h -o release\moc_DatabaseMgrPage.cpp
release/moc_ZTLogsListPage.cpp: sources/GuiElements/Guipage.h \
sources/GuiElements/PushButton.h \
sources/GuiElements/TextButtonWidget.h \
sources/GuiElements/ZTLogsListPage.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\GuiElements\ZTLogsListPage.h -o release\moc_ZTLogsListPage.cpp
release/moc_ZTLogFilesMgr.cpp: sources/ZTData.h \
sources/GlobalDefine.h \
sources/DirParserThread.h \
sources/TrainLogFileMgr.h \
sources/ZTLogFilesMgr.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\ZTLogFilesMgr.h -o release\moc_ZTLogFilesMgr.cpp
release/moc_DirParserThread.cpp: sources/GlobalDefine.h \
sources/TrainLogFileMgr.h \
sources/ZTData.h \
sources/DirParserThread.h
C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 sources\DirParserThread.h -o release\moc_DirParserThread.cpp
compiler_rcc_make_all:
compiler_rcc_clean:
compiler_image_collection_make_all: qmake_image_collection.cpp
compiler_image_collection_clean:
-$(DEL_FILE) qmake_image_collection.cpp
compiler_moc_source_make_all:
compiler_moc_source_clean:
compiler_uic_make_all:
compiler_uic_clean:
compiler_yacc_decl_make_all:
compiler_yacc_decl_clean:
compiler_yacc_impl_make_all:
compiler_yacc_impl_clean:
compiler_lex_make_all:
compiler_lex_clean:
compiler_clean: compiler_moc_header_clean
####### Compile
release/main.o: sources/main.cpp sources/OutilZT.h \
sources/MainPanel.h \
sources/GlobalDefine.h \
sources/LogMgr.h \
sources/ZTData.h \
sources/DirParserThread.h \
sources/TrainLogFileMgr.h \
sources/Settings.h \
sources/TCPProtocol.h \
sources/ZTLogFilesMgr.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\main.o sources\main.cpp
release/OutilZT.o: sources/OutilZT.cpp sources/OutilZT.h \
sources/MainPanel.h \
sources/GlobalDefine.h \
sources/LogMgr.h \
sources/ZTData.h \
sources/DirParserThread.h \
sources/TrainLogFileMgr.h \
sources/Settings.h \
sources/TCPProtocol.h \
sources/ZTLogFilesMgr.h \
sources/NetworkManager.h \
sources/UDPProtocol.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\OutilZT.o sources\OutilZT.cpp
release/MainPanel.o: sources/MainPanel.cpp sources/MainPanel.h \
sources/GlobalDefine.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\MainPanel.o sources\MainPanel.cpp
release/MainPage.o: sources/GuiElements/MainPage.cpp sources/GuiElements/MainPage.h \
sources/GuiElements/Guipage.h \
sources/GuiElements/PushButton.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\MainPage.o sources\GuiElements\MainPage.cpp
release/GuiPage.o: sources/GuiElements/GuiPage.cpp sources/GuiElements/Guipage.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\GuiPage.o sources\GuiElements\GuiPage.cpp
release/PushButton.o: sources/GuiElements/PushButton.cpp sources/GuiElements/PushButton.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\PushButton.o sources\GuiElements\PushButton.cpp
release/LogViewPage.o: sources/GuiElements/LogViewPage.cpp sources/GuiElements/LogViewPage.h \
sources/GuiElements/Guipage.h \
sources/GuiElements/PushButton.h \
sources/GuiElements/TextButtonWidget.h \
sources/GuiElements/GraphItem.h \
sources/GuiElements/GraphCursorWidget.h \
sources/GuiElements/GraphRulerWidget.h \
sources/GuiElements/AnalogGraphItem.h \
sources/GuiElements/RankRulerWidget.h \
sources/GuiElements/EventsRulerWidget.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\LogViewPage.o sources\GuiElements\LogViewPage.cpp
release/TextButtonWidget.o: sources/GuiElements/TextButtonWidget.cpp sources/GuiElements/TextButtonWidget.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\TextButtonWidget.o sources\GuiElements\TextButtonWidget.cpp
release/RankRulerWidget.o: sources/GuiElements/RankRulerWidget.cpp sources/GuiElements/RankRulerWidget.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\RankRulerWidget.o sources\GuiElements\RankRulerWidget.cpp
release/GraphCursorWidget.o: sources/GuiElements/GraphCursorWidget.cpp sources/GuiElements/GraphCursorWidget.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\GraphCursorWidget.o sources\GuiElements\GraphCursorWidget.cpp
release/EventsRulerWidget.o: sources/GuiElements/EventsRulerWidget.cpp sources/GuiElements/EventsRulerWidget.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\EventsRulerWidget.o sources\GuiElements\EventsRulerWidget.cpp
release/AnalogGraphItem.o: sources/GuiElements/AnalogGraphItem.cpp sources/GuiElements/AnalogGraphItem.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\AnalogGraphItem.o sources\GuiElements\AnalogGraphItem.cpp
release/GraphItem.o: sources/GuiElements/GraphItem.cpp sources/GuiElements/GraphItem.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\GraphItem.o sources\GuiElements\GraphItem.cpp
release/GraphRulerWidget.o: sources/GuiElements/GraphRulerWidget.cpp sources/GuiElements/GraphRulerWidget.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\GraphRulerWidget.o sources\GuiElements\GraphRulerWidget.cpp
release/ZTData.o: sources/ZTData.cpp sources/ZTData.h \
sources/GlobalDefine.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\ZTData.o sources\ZTData.cpp
release/LogMgr.o: sources/LogMgr.cpp sources/LogMgr.h \
sources/ZTData.h \
sources/GlobalDefine.h \
sources/DirParserThread.h \
sources/TrainLogFileMgr.h \
sources/OutilZT.h \
sources/MainPanel.h \
sources/Settings.h \
sources/TCPProtocol.h \
sources/ZTLogFilesMgr.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\LogMgr.o sources\LogMgr.cpp
release/TrainLogFileMgr.o: sources/TrainLogFileMgr.cpp sources/TrainLogFileMgr.h \
sources/GlobalDefine.h \
sources/ZTData.h \
sources/LogMgr.h \
sources/DirParserThread.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\TrainLogFileMgr.o sources\TrainLogFileMgr.cpp
release/LogsListPage.o: sources/GuiElements/LogsListPage.cpp sources/GuiElements/LogsListPage.h \
sources/GuiElements/Guipage.h \
sources/GuiElements/PushButton.h \
sources/GuiElements/TextButtonWidget.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\LogsListPage.o sources\GuiElements\LogsListPage.cpp
release/OptionsPage.o: sources/GuiElements/OptionsPage.cpp sources/GuiElements/OptionsPage.h \
sources/GuiElements/Guipage.h \
sources/GuiElements/PushButton.h \
sources/GuiElements/TextButtonWidget.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\OptionsPage.o sources\GuiElements\OptionsPage.cpp
release/Settings.o: sources/Settings.cpp sources/Settings.h \
sources/GlobalDefine.h \
sources/ZTData.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\Settings.o sources\Settings.cpp
release/NetworkZTListPage.o: sources/GuiElements/NetworkZTListPage.cpp sources/GuiElements/NetworkZTListPage.h \
sources/GuiElements/Guipage.h \
sources/GuiElements/PushButton.h \
sources/GuiElements/TextButtonWidget.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\NetworkZTListPage.o sources\GuiElements\NetworkZTListPage.cpp
release/ToggleTextButtonWidget.o: sources/GuiElements/ToggleTextButtonWidget.cpp sources/GuiElements/TextButtonWidget.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\ToggleTextButtonWidget.o sources\GuiElements\ToggleTextButtonWidget.cpp
release/NetworkCtrlPage.o: sources/GuiElements/NetworkCtrlPage.cpp sources/GuiElements/NetworkCtrlPage.h \
sources/GuiElements/Guipage.h \
sources/GuiElements/ToggleTextButtonWidget.h \
sources/GuiElements/TextButtonWidget.h \
sources/GuiElements/TxRxWidget.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\NetworkCtrlPage.o sources\GuiElements\NetworkCtrlPage.cpp
release/NetworkManager.o: sources/NetworkManager.cpp sources/NetworkManager.h \
sources/GlobalDefine.h \
sources/ZTData.h \
sources/TCPProtocol.h \
sources/UDPProtocol.h \
sources/OutilZT.h \
sources/MainPanel.h \
sources/LogMgr.h \
sources/DirParserThread.h \
sources/TrainLogFileMgr.h \
sources/Settings.h \
sources/ZTLogFilesMgr.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\NetworkManager.o sources\NetworkManager.cpp
release/TxRxWidget.o: sources/GuiElements/TxRxWidget.cpp sources/GuiElements/TxRxWidget.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\TxRxWidget.o sources\GuiElements\TxRxWidget.cpp
release/TCPProtocol.o: sources/TCPProtocol.cpp sources/TCPProtocol.h \
sources/GlobalDefine.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\TCPProtocol.o sources\TCPProtocol.cpp
release/RemoteZTPage.o: sources/GuiElements/RemoteZTPage.cpp sources/GuiElements/RemoteZTPage.h \
sources/GuiElements/Guipage.h \
sources/GuiElements/ToggleTextButtonWidget.h \
sources/GuiElements/TextButtonWidget.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\RemoteZTPage.o sources\GuiElements\RemoteZTPage.cpp
release/ZTLogViewerPage.o: sources/GuiElements/ZTLogViewerPage.cpp sources/GuiElements/ZTLogViewerPage.h \
sources/GuiElements/Guipage.h \
sources/GuiElements/TextButtonWidget.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\ZTLogViewerPage.o sources\GuiElements\ZTLogViewerPage.cpp
release/ProgressBarPage.o: sources/GuiElements/ProgressBarPage.cpp sources/GuiElements/ProgressBarPage.h \
sources/GuiElements/Guipage.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\ProgressBarPage.o sources\GuiElements\ProgressBarPage.cpp
release/RemoteZTCtrlPage.o: sources/GuiElements/RemoteZTCtrlPage.cpp sources/GuiElements/RemoteZTCtrlPage.h \
sources/GuiElements/Guipage.h \
sources/GuiElements/TextButtonWidget.h \
sources/GuiElements/ToggleButtonWidget.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\RemoteZTCtrlPage.o sources\GuiElements\RemoteZTCtrlPage.cpp
release/ToggleButtonWidget.o: sources/GuiElements/ToggleButtonWidget.cpp sources/GuiElements/ToggleButtonWidget.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\ToggleButtonWidget.o sources\GuiElements\ToggleButtonWidget.cpp
release/UDPProtocol.o: sources/UDPProtocol.cpp sources/UDPProtocol.h \
sources/GlobalDefine.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\UDPProtocol.o sources\UDPProtocol.cpp
release/DatabaseMgrPage.o: sources/GuiElements/DatabaseMgrPage.cpp sources/GuiElements/DatabaseMgrPage.h \
sources/GuiElements/Guipage.h \
sources/GuiElements/PushButton.h \
sources/GuiElements/TextButtonWidget.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\DatabaseMgrPage.o sources\GuiElements\DatabaseMgrPage.cpp
release/ZTLogsListPage.o: sources/GuiElements/ZTLogsListPage.cpp sources/GuiElements/ZTLogsListPage.h \
sources/GuiElements/Guipage.h \
sources/GuiElements/PushButton.h \
sources/GuiElements/TextButtonWidget.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\ZTLogsListPage.o sources\GuiElements\ZTLogsListPage.cpp
release/ZTLogFilesMgr.o: sources/ZTLogFilesMgr.cpp sources/ZTLogFilesMgr.h \
sources/ZTData.h \
sources/GlobalDefine.h \
sources/DirParserThread.h \
sources/TrainLogFileMgr.h \
sources/OutilZT.h \
sources/MainPanel.h \
sources/LogMgr.h \
sources/Settings.h \
sources/TCPProtocol.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\ZTLogFilesMgr.o sources\ZTLogFilesMgr.cpp
release/DirParserThread.o: sources/DirParserThread.cpp sources/DirParserThread.h \
sources/GlobalDefine.h \
sources/TrainLogFileMgr.h \
sources/ZTData.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\DirParserThread.o sources\DirParserThread.cpp
release/moc_OutilZT.o: release/moc_OutilZT.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\moc_OutilZT.o release\moc_OutilZT.cpp
release/moc_MainPanel.o: release/moc_MainPanel.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\moc_MainPanel.o release\moc_MainPanel.cpp
release/moc_MainPage.o: release/moc_MainPage.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\moc_MainPage.o release\moc_MainPage.cpp
release/moc_Guipage.o: release/moc_Guipage.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\moc_Guipage.o release\moc_Guipage.cpp
release/moc_PushButton.o: release/moc_PushButton.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\moc_PushButton.o release\moc_PushButton.cpp
release/moc_LogViewPage.o: release/moc_LogViewPage.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\moc_LogViewPage.o release\moc_LogViewPage.cpp
release/moc_TextButtonWidget.o: release/moc_TextButtonWidget.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\moc_TextButtonWidget.o release\moc_TextButtonWidget.cpp
release/moc_RankRulerWidget.o: release/moc_RankRulerWidget.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\moc_RankRulerWidget.o release\moc_RankRulerWidget.cpp
release/moc_GraphCursorWidget.o: release/moc_GraphCursorWidget.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\moc_GraphCursorWidget.o release\moc_GraphCursorWidget.cpp
release/moc_EventsRulerWidget.o: release/moc_EventsRulerWidget.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\moc_EventsRulerWidget.o release\moc_EventsRulerWidget.cpp
release/moc_AnalogGraphItem.o: release/moc_AnalogGraphItem.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\moc_AnalogGraphItem.o release\moc_AnalogGraphItem.cpp
release/moc_GraphItem.o: release/moc_GraphItem.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\moc_GraphItem.o release\moc_GraphItem.cpp
release/moc_GraphRulerWidget.o: release/moc_GraphRulerWidget.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\moc_GraphRulerWidget.o release\moc_GraphRulerWidget.cpp
release/moc_LogMgr.o: release/moc_LogMgr.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\moc_LogMgr.o release\moc_LogMgr.cpp
release/moc_LogsListPage.o: release/moc_LogsListPage.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\moc_LogsListPage.o release\moc_LogsListPage.cpp
release/moc_OptionsPage.o: release/moc_OptionsPage.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\moc_OptionsPage.o release\moc_OptionsPage.cpp
release/moc_NetworkZTListPage.o: release/moc_NetworkZTListPage.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\moc_NetworkZTListPage.o release\moc_NetworkZTListPage.cpp
release/moc_ToggleTextButtonWidget.o: release/moc_ToggleTextButtonWidget.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\moc_ToggleTextButtonWidget.o release\moc_ToggleTextButtonWidget.cpp
release/moc_NetworkCtrlPage.o: release/moc_NetworkCtrlPage.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\moc_NetworkCtrlPage.o release\moc_NetworkCtrlPage.cpp
release/moc_NetworkManager.o: release/moc_NetworkManager.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\moc_NetworkManager.o release\moc_NetworkManager.cpp
release/moc_TxRxWidget.o: release/moc_TxRxWidget.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\moc_TxRxWidget.o release\moc_TxRxWidget.cpp
release/moc_RemoteZTPage.o: release/moc_RemoteZTPage.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\moc_RemoteZTPage.o release\moc_RemoteZTPage.cpp
release/moc_ZTLogViewerPage.o: release/moc_ZTLogViewerPage.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\moc_ZTLogViewerPage.o release\moc_ZTLogViewerPage.cpp
release/moc_ProgressBarPage.o: release/moc_ProgressBarPage.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\moc_ProgressBarPage.o release\moc_ProgressBarPage.cpp
release/moc_RemoteZTCtrlPage.o: release/moc_RemoteZTCtrlPage.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\moc_RemoteZTCtrlPage.o release\moc_RemoteZTCtrlPage.cpp
release/moc_ToggleButtonWidget.o: release/moc_ToggleButtonWidget.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\moc_ToggleButtonWidget.o release\moc_ToggleButtonWidget.cpp
release/moc_DatabaseMgrPage.o: release/moc_DatabaseMgrPage.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\moc_DatabaseMgrPage.o release\moc_DatabaseMgrPage.cpp
release/moc_ZTLogsListPage.o: release/moc_ZTLogsListPage.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\moc_ZTLogsListPage.o release\moc_ZTLogsListPage.cpp
release/moc_ZTLogFilesMgr.o: release/moc_ZTLogFilesMgr.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\moc_ZTLogFilesMgr.o release\moc_ZTLogFilesMgr.cpp
release/moc_DirParserThread.o: release/moc_DirParserThread.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\moc_DirParserThread.o release\moc_DirParserThread.cpp
####### Install
install: FORCE
uninstall: FORCE
FORCE:

84
OutilZT.pro Normal file
View File

@ -0,0 +1,84 @@
QT += network
#CONFIG += console
HEADERS += \
sources/OutilZT.h \
sources/MainPanel.h \
sources/GlobalDefine.h \
sources/GuiElements/MainPage.h \
sources/GuiElements/Guipage.h \
sources/GuiElements/PushButton.h \
sources/GuiElements/LogViewPage.h \
sources/GuiElements/TextButtonWidget.h \
sources/GuiElements/RankRulerWidget.h \
sources/GuiElements/GraphCursorWidget.h \
sources/GuiElements/EventsRulerWidget.h \
sources/GuiElements/AnalogGraphItem.h \
sources/GuiElements/GraphItem.h \
sources/GuiElements/GraphRulerWidget.h \
sources/ZTData.h \
sources/LogMgr.h \
sources/TrainLogFileMgr.h \
sources/GuiElements/LogsListPage.h \
sources/GuiElements/OptionsPage.h \
sources/Settings.h \
sources/GuiElements/NetworkZTListPage.h \
sources/GuiElements/ToggleTextButtonWidget.h \
sources/GuiElements/NetworkCtrlPage.h \
sources/NetworkManager.h \
sources/GuiElements/TxRxWidget.h \
sources/TCPProtocol.h \
sources/GuiElements/RemoteZTPage.h \
sources/GuiElements/ZTLogViewerPage.h \
sources/GuiElements/ProgressBarPage.h \
sources/GuiElements/RemoteZTCtrlPage.h \
sources/GuiElements/ToggleButtonWidget.h \
sources/UDPProtocol.h \
sources/GuiElements/DatabaseMgrPage.h \
sources/GuiElements/ZTLogsListPage.h \
sources/ZTLogFilesMgr.h \
sources/OutilZTVersion.h \
sources/DirParserThread.h
SOURCES += \
sources/main.cpp \
sources/OutilZT.cpp \
sources/MainPanel.cpp \
sources/GuiElements/MainPage.cpp \
sources/GuiElements/GuiPage.cpp \
sources/GuiElements/PushButton.cpp \
sources/GuiElements/LogViewPage.cpp \
sources/GuiElements/TextButtonWidget.cpp \
sources/GuiElements/RankRulerWidget.cpp \
sources/GuiElements/GraphCursorWidget.cpp \
sources/GuiElements/EventsRulerWidget.cpp \
sources/GuiElements/AnalogGraphItem.cpp \
sources/GuiElements/GraphItem.cpp \
sources/GuiElements/GraphRulerWidget.cpp \
sources/ZTData.cpp \
sources/LogMgr.cpp \
sources/TrainLogFileMgr.cpp \
sources/GuiElements/LogsListPage.cpp \
sources/GuiElements/OptionsPage.cpp \
sources/Settings.cpp \
sources/GuiElements/NetworkZTListPage.cpp \
sources/GuiElements/ToggleTextButtonWidget.cpp \
sources/GuiElements/NetworkCtrlPage.cpp \
sources/NetworkManager.cpp \
sources/GuiElements/TxRxWidget.cpp \
sources/TCPProtocol.cpp \
sources/GuiElements/RemoteZTPage.cpp \
sources/GuiElements/ZTLogViewerPage.cpp \
sources/GuiElements/ProgressBarPage.cpp \
sources/GuiElements/RemoteZTCtrlPage.cpp \
sources/GuiElements/ToggleButtonWidget.cpp \
sources/UDPProtocol.cpp \
sources/GuiElements/DatabaseMgrPage.cpp \
sources/GuiElements/ZTLogsListPage.cpp \
sources/ZTLogFilesMgr.cpp \
sources/DirParserThread.cpp
INCLUDEPATH += $$PWD/ \
$$PWD/sources/ \
$$PWD/sources/GuiElements

103
sources/DirParserThread.cpp Normal file
View File

@ -0,0 +1,103 @@
#include "DirParserThread.h"
#include "GlobalDefine.h"
void CDirParserThread::ParseDirectories()
{
if(mRootDir.absolutePath().isEmpty() == true)
{
emit ParsingFinished(0);
return;
}
ParseDir(mRootDir,mKeepData);
emit ParsingFinished(1);
qDebug("Worker thread finished");
}
CDirParserThread::CDirParserThread()
{
mExecThread = true;
}
int CDirParserThread::ParseDir(QDir dir, bool KeepData)
{
mMutex.lockForRead();
bool Run = mExecThread;
mMutex.unlock();
if(Run == false)
return 0;
QStringList LogFilters;
QFileInfoList list;
// QString LogDataDir = mProgramHandle->GetLogDataPath();
LogFilters << mFilter;//"*.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);
unsigned int ret;
// CLogElement *NewLog = CTrainLogFileMgr::instance()->OpenTrainLog(list.at(i).filePath(),ret);
// if(ret == RET_OK)
if(mFilter == "*.bin")
{
CLogElement *NewLog = CTrainLogFileMgr::instance()->OpenTrainLog(list.at(i).filePath(),ret);
if(ret == RET_OK)
{
emit NewLogParsed(NewLog);
}
}
else
{
emit NewLogParsed(list.at(i).filePath(),KeepData);
}
}
}
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: ",dir.dirName().toAscii().data(),Filter.toAscii().data());
mRootDir = dir;
mKeepData = KeepData;
mFilter = Filter;
}
void CDirParserThread::KillThread()
{
mMutex.lockForWrite();
mExecThread = false;
mMutex.unlock();
}

34
sources/DirParserThread.h Normal file
View File

@ -0,0 +1,34 @@
#ifndef DIRPARSERTHREAD_H
#define DIRPARSERTHREAD_H
#include "GlobalDefine.h"
#include <QDir>
#include <QReadWriteLock>
#include "TrainLogFileMgr.h"
class CDirParserThread : public QObject
{
Q_OBJECT
public:
CDirParserThread();
void SetParsingInfo(QDir dir,QString Filter,bool KeepData = false);
void KillThread();
int ParseDir(QDir dir, bool KeepData = false);
private:
QDir mRootDir;
bool mKeepData;
QReadWriteLock mMutex;
bool mExecThread;
QString mFilter;
public slots:
void ParseDirectories();
signals:
void NewLogParsed(QString,bool);
void NewLogParsed(CLogElement*);
void ParsingFinished(int);
void EmptyDirParsed();
};
#endif // DIRPARSERTHREAD_H

77
sources/GlobalDefine.h Normal file
View File

@ -0,0 +1,77 @@
/*******************************************************************************
* *
* 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 1600
#define SCREEN_RES_HEIGHT 768
//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,
MONTMORENCY_10_12_ZT_ID,
MONTMORENCY_10_22_ZT_ID,
NB_ZT_ID
};
#endif

View File

@ -0,0 +1,412 @@
/*******************************************************************************
* *
* Société de Transports de Montréal. *
* 2013 *
* *
* Projet Zones Tests *
* *
* *
* *
*******************************************************************************/
/*
Description:
Classe d'affichage d'un graphique analogique (vitesse du train, sondes lazer,
etc.) La fonction SetData permet d'associer la liste de points à tracer. La
fonction DisplayData() permet de fixer le timespan à afficher. La fonction détermine
quels points sont dans le span et crée une liste de lignes qui sont ensuite affichés
dans la fonction de rappel paint().
Utilisée dans la page de visualisation des passages de train.
*/
/* ************************************************************************** */
/* Revision:
### 20131024 JFM
Verision d'origine.
### YYYYMMDD Description du besoin ou du bug
Description du changement.
*/
/* ************************************************************************** */
#include "AnalogGraphItem.h"
#include <QPainter>
#include <QGraphicsSceneMouseEvent>
#include <limits>
#include <QStyleOptionGraphicsItem>
CAnalogGraphItem::CAnalogGraphItem(QGraphicsItem *Parent)
{
setParentItem(Parent);
mDataSet = 0;
mStartTime = mStopTime = 0;
mDataValid = false;
mLabel = new QGraphicsTextItem(this);
mGraphPixmap = new QPixmap(boundingRect().width(),boundingRect().height());
mHorizLine = 0;
mYOffset = 0;
}
CAnalogGraphItem::~CAnalogGraphItem()
{
delete mGraphPixmap;
if(mHorizLine != 0)
delete mHorizLine;
}
void CAnalogGraphItem::SetData(QList<CGraphAnalogDataPair*> *DataList)
{
mDataSet = DataList;
//Build the lines list
}
unsigned int CAnalogGraphItem::DisplayData(quint64 StartTime, quint64 StopTime)
{
mPainterPath = QPainterPath();
if(mDataSet == 0)
return RET_OK;
if(mDataSet->isEmpty())
return RET_ERROR;
quint64 MinTime = mDataSet->first()->mTime;
quint64 MaxTime = mDataSet->last()->mTime;
if(StartTime >= StopTime)
return RET_ERROR;
if(StartTime < MinTime)
return RET_ERROR;
if(StopTime > MaxTime)
return RET_ERROR;
quint64 TimeSpan = StopTime - StartTime;
mStartTime = StartTime;
mStopTime = StopTime;
//Find the index of the first and last point included in the timespan.
int StartIndex = 0, StopIndex = 0;
int i = 0;
bool StartFound = false, StopFound = false;
quint64 StartDrawTime = StartTime ,EndDrawTime = StopTime;
if(StartTime < mAbsoluteStartTime)
StartDrawTime = mAbsoluteStartTime;
if(StopTime > mAbsoluteEndTime)
EndDrawTime = mAbsoluteEndTime;
while(StartFound == false || StopFound == false)
{
if(i >= mDataSet->size())
{
qDebug("GraphItem::Array overflow while searching for time index");
return RET_ERROR;
}
quint64 CurTime = mDataSet->at(i)->mTime;
if(CurTime <= StartDrawTime)
{
StartIndex = i;
StartFound = true;
}
if(CurTime >= EndDrawTime && !StopFound)
{
StopIndex = i;
StopFound = true;
}
i++;
}
//Find the Y scaling (vertical)
qreal MaxValue = std::numeric_limits<float>::min();
qreal MinValue = std::numeric_limits<float>::max();
for(int i = 0; i < mDataSet->size(); i++)
{
qreal CurValue = mDataSet->at(i)->mValue;
if(CurValue != -1 && CurValue != 0) //-1 is the value for "NO DATA" and 0 is not a valid value
{
if(MaxValue < CurValue)
MaxValue = CurValue;
if(MinValue > CurValue)
MinValue = CurValue;
}
}
if(MinValue < 0)
{
MinValue *= -1;
MinValue += 1;
mYOffset = MinValue;
for(int i = 0; i < mDataSet->size(); i++)
{
mDataSet->at(i)->mValue += MinValue;
}
MaxValue += MinValue;
MinValue = 1;
}
//Build the lines list
mLinesList.clear();
qreal Width = boundingRect().width();
qreal Height = boundingRect().height();
qreal tick = (Width)/TimeSpan; //pixels per microsec
qreal YFactor = (Height-2)/(MaxValue - MinValue);
mYScaling = YFactor;
mXScaling = tick;
qreal X1,X2,Y1,Y2;
//There is no quadratic interpolation, simply draw a straight
//line between the points. When needed, execute a linear
//interpolation when one of the two points creating a line is
//outside the timespan (at both extremities of the view).
// P2 P3
// P1 | *-------* |
// * | | P4
// | | *
// |<----timespan---->|
// Start End
//
//Interpolation needed between Start->P2 and P3->End so there is no
//"gap" in the graph between the first/last points and the view.
for(int i = StartIndex; i < StopIndex; i++)
{
if(mDataSet->at(i)->mValue != -1) //-1 is the value for "NO DATA".
{
QLine NewLine;
//Check if interpolation is needed at the left
//of the span
if(mDataSet->at(i)->mTime < StartTime)
{
//Interpolate Y value at StartTime
qreal x1 = mDataSet->at(i)->mTime;
qreal y1 = mDataSet->at(i)->mValue - MinValue;
qreal x2 = mDataSet->at(i+1)->mTime;
qreal y2 = mDataSet->at(i+1)->mValue - MinValue;
// Y = mX + B
qreal DeltaX = x2 - x1;
qreal DeltaY = y2 - y1;
qreal m = DeltaY/DeltaX;
Y1 = (qreal)StartTime*m;
Y1 += (y2 - m*x2);
X1 = 0;
}
else
{
X1 = mDataSet->at(i)->mTime - StartTime;
Y1 = mDataSet->at(i)->mValue - MinValue;
}
//Check if interpolation is needed at the right
//of the span
if(mDataSet->at(i+1)->mTime > StopTime)
{
//Interpolate Y value at StopTime
qreal x1 = mDataSet->at(i)->mTime;
qreal y1 = mDataSet->at(i)->mValue - MinValue;
qreal x2 = mDataSet->at(i+1)->mTime;
qreal y2 = mDataSet->at(i+1)->mValue - MinValue;
qreal DeltaX = x2 - x1;
qreal DeltaY = y2 - y1;
qreal m = DeltaY/DeltaX;
Y2 = (qreal)(StopTime)*m;
Y2 += (y2 - m*x2);
X2 = StopTime - StartTime;
}
else
{
X2 = mDataSet->at(i+1)->mTime - StartTime;
Y2 = mDataSet->at(i+1)->mValue - MinValue;
}
Y1 = Height - Y1*YFactor;
Y2 = Height - Y2*YFactor;
NewLine.setLine(X1*tick,Y1-1,X2*tick,Y2-1);
mLinesList.append(NewLine);
if(mPainterPath.isEmpty())
mPainterPath.moveTo(X1*tick,Y1-1);
// mPainterPath.lineTo(X2*tick,Y2-1);
}
}
if(mHorizLine != 0)
{
Y1 = (mHorizLineYPos+mYOffset-MinValue);
Y1 = Height - Y1*YFactor;
mHorizLine->setP1(QPoint(0,Y1-1));
mHorizLine->setP2(QPoint((mDataSet->at(StopIndex)->mTime - StartTime)*tick,Y1-1));
}
mDataValid = true;
//#ifndef WINDOWS_OS
mGraphPixmap->fill(QColor(245, 245, 255));
QPainter *painter = new QPainter(mGraphPixmap);
painter->drawLines(mLinesList);
delete painter;
//#endif
update();
return RET_OK;
}
qreal CAnalogGraphItem::GetValueForTime(quint64 time)
{
qreal value = 0.0;
for(int i = 0; i < mDataSet->size()-1; i++)
{
if(time >= mDataSet->at(i)->mTime && time < mDataSet->at(i+1)->mTime)
{
value = mDataSet->at(i)->mValue - mYOffset;
break;
}
}
QString label = mLabelTitle;
label += "\n";
label += QString().sprintf("%.2f",value);
mLabel->setPlainText(label);
mLabel->setPos(mLabel->pos().x(),boundingRect().height()/2 - mLabel->boundingRect().height()/2);
update();
return value;
}
void CAnalogGraphItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
Q_UNUSED(option)
Q_UNUSED(widget)
if(mDataValid == false)
return ;
if(mDataSet == 0)
return;
if(mDataSet->size() == 0)
return;
// painter->setClipRect(option->exposedRect);
// QPen pen;
// pen.setWidth(1);
//// pen.setColor(Qt::red);
//// painter->setPen(pen);
//// painter->drawRect(boundingRect());
// pen.setColor(Qt::black);
// painter->setPen(pen);
//#ifdef WINDOWS_OS
// painter->drawLines(mLinesList);
//#else
painter->drawPixmap(0,0,*mGraphPixmap);
if(mHorizLine != 0)
{
painter->setPen(QPen(Qt::red));
painter->drawLine(*mHorizLine);
}
//painter->drawPath(mPainterPath);
//#endif
// for(int i = 0; i < mLinesList.size(); i++)
// {
// painter->drawEllipse(mLinesList.at(i).p1(),2,2);
// }
}
//void CGraphItem::UpdateDisplay()
//{
// DisplayData(mStartIndex,mStopIndex);
// update();
//}
void CAnalogGraphItem::AddHorizontalLine(qreal YPosition)
{
if(mHorizLine == 0)
mHorizLine = new QLine();
mHorizLineYPos = YPosition;
}
void CAnalogGraphItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
event->ignore();
}
void CAnalogGraphItem::mouseReleaseEvent( QGraphicsSceneMouseEvent * event)
{
event->ignore();
}
void CAnalogGraphItem::resizeEvent(QGraphicsSceneResizeEvent *event)
{
Q_UNUSED(event)
//mBackgroundRect->setRect(boundingRect());
delete mGraphPixmap;
mGraphPixmap = new QPixmap(boundingRect().width(),boundingRect().height());
DisplayData(mStartTime,mStopTime);
}
void CAnalogGraphItem::SetLabel(QString label,int Offset)
{
QFont font;
font.setBold(true);
mLabelTitle = label;
mLabel->setFont(font);
mLabel->setPlainText(label);
mLabel->setPos(-Offset,boundingRect().height()/2 - mLabel->boundingRect().height()/2);
}
CGraphAnalogDataPair::CGraphAnalogDataPair(qreal Value, quint64 Time):
mValue(Value),
mTime(Time)
{
}

View File

@ -0,0 +1,60 @@
#ifndef ANALOGGRAPHITEM_H
#define ANALOGGRAPHITEM_H
#include <GlobalDefine.h>
#include <QGraphicsWidget>
#include <QRect>
#include <QTimeLine>
#include <QList>
#include <QPainterPath>
class CGraphAnalogDataPair
{
public:
CGraphAnalogDataPair(qreal Value, quint64 Time);
qreal mValue; //changed from qint32
quint64 mTime;
};
class CAnalogGraphItem : public QGraphicsWidget
{
Q_OBJECT
public:
CAnalogGraphItem(QGraphicsItem *Parent = 0);
~CAnalogGraphItem();
QList<CGraphAnalogDataPair*> *mDataSet;
QGraphicsRectItem *mBackgroundRect;
unsigned int DisplayData(quint64 StartTime, quint64 StopTime);
void SetData(QList<CGraphAnalogDataPair*> *DataList);
void SetLabel(QString label,int Offset);
void SetAbsoluteLimits(quint64 StartTime,quint64 EndTime){mAbsoluteStartTime = StartTime; mAbsoluteEndTime = EndTime;}
void AddHorizontalLine(qreal YPosition);
qreal GetValueForTime(quint64 time);
virtual void paint( QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget = 0 );
virtual void mousePressEvent ( QGraphicsSceneMouseEvent * event );
virtual void mouseReleaseEvent( QGraphicsSceneMouseEvent * event);
virtual void resizeEvent(QGraphicsSceneResizeEvent *event);
private:
bool mDataValid;
quint64 mStartTime, mStopTime, mAbsoluteEndTime,mAbsoluteStartTime;
QVector<QLine> mLinesList;
QString mLabelTitle;
QGraphicsTextItem *mLabel;
QPixmap *mGraphPixmap;
qreal mYScaling,mXScaling;
qreal mYOffset;
qreal mHorizLineYPos;
QLine *mHorizLine;
QPainterPath mPainterPath;
};
#endif // ANALOGGRAPHITEM_H

View File

@ -0,0 +1,904 @@
/*******************************************************************************
* *
* Société de Transports de Montréal. *
* 2012 *
* *
* Projet Zones Tests *
* *
* *
* *
*******************************************************************************/
/*
Description:
Page de sélection des options (sélection des fonctions de détection, ingénierie,
mode entretien, etc.).
*/
/* ************************************************************************** */
/* Revision:
### 20131021 JFM
Verision d'origine.
### YYYMMDD Description du besoin ou du bug
Description du changement.
*/
/* ************************************************************************** */
#include "DatabaseMgrPage.h"
#include <QPainter>
#include "GlobalDefine.h"
#include <QDialog>
#include <QMainWindow>
#include "OutilZT.h"
#include <QDateTime>
#include <QFont>
#include <QFileDialog>
#include <QTextEdit>
#include "OutilZT.h"
#include <QGraphicsProxyWidget>
#include <QListView>
#include <QTreeView>
#include <QList>
#include <TrainLogFileMgr.h>
#include <QCoreApplication>
#include <QMessageBox>
#include <QFileInfo>
CDatabaseMgrPage::~CDatabaseMgrPage()
{
delete mDatabaseImporterThread;
delete mDatabaseImporterWorkerThread;
}
CDatabaseMgrPage::CDatabaseMgrPage(QGraphicsWidget *Parent, bool EngMode)
{
Q_UNUSED(Parent)
mProgramHandle = 0;
mBackgroundRect = new QGraphicsRectItem(boundingRect(), this);
QBrush BackgroundBrush(QColor(245, 245, 255));
mBackgroundRect->setBrush(BackgroundBrush);
QGraphicsTextItem *Title = new QGraphicsTextItem("Base de données",this);
QFont font;
font.setPointSize(18);
Title->setFont(font);
Title->setPos(40,10);
mCancelButton = new CTextButtonWidget("Fermer");
mCancelButton->setParentItem(this);
mCancelButton->setPos(50,360);
connect(mCancelButton,SIGNAL(TxtButtonClicked(CTextButtonWidget*)),this,SLOT(ButtonClicked(CTextButtonWidget*)));
mImportDataButton = new CTextButtonWidget("Importer");
mImportDataButton->setParentItem(this);
mImportDataButton->setPos(125,200);
connect(mImportDataButton,SIGNAL(TxtButtonClicked(CTextButtonWidget*)),this,SLOT(ButtonClicked(CTextButtonWidget*)));
mImportDataButton->hide();
mCancelImportButton = new CTextButtonWidget("Annuler");
mCancelImportButton->setParentItem(this);
mCancelImportButton->setPos(125,200);
mCancelImportButton->hide();
connect(mCancelImportButton,SIGNAL(TxtButtonClicked(CTextButtonWidget*)),this,SLOT(ButtonClicked(CTextButtonWidget*)));
Title = new QGraphicsTextItem("Importation de passages",this);
font.setPointSize(14);
Title->setFont(font);
Title->setPos(40,70);
QPen RectPen;
RectPen.setWidth(2);
QGraphicsRectItem *ImportZoneFrame = new QGraphicsRectItem(this);
ImportZoneFrame->setRect(QRectF(0,0,230,230));
ImportZoneFrame->setPos(40,100);
ImportZoneFrame->setPen(RectPen);
QGraphicsProxyWidget *WidgetProxy = new QGraphicsProxyWidget(this);
mImportErrorDataOnlyChkBx = new QCheckBox("Seulement les déclenchements");
WidgetProxy->setWidget(mImportErrorDataOnlyChkBx);
WidgetProxy->setPos(60,110);
mImportErrorDataOnlyChkBx->setChecked(false);
WidgetProxy = new QGraphicsProxyWidget(this);
mFilterDuplicateChkBx = new QCheckBox("Filtrer les doublons");
WidgetProxy->setWidget(mFilterDuplicateChkBx);
WidgetProxy->setPos(60,140);
mFilterDuplicateChkBx->setChecked(true);
// WidgetProxy = new QGraphicsProxyWidget(this);
// mDeleteSourceDataChkBx = new QCheckBox("Effacer données sources");
// WidgetProxy->setWidget(mDeleteSourceDataChkBx);
// WidgetProxy->setPos(60,170);
mProgressBar = new QProgressBar();
WidgetProxy = new QGraphicsProxyWidget(this);
WidgetProxy->setWidget(mProgressBar);
WidgetProxy->setPos(60,240);
font.setPointSize(8);
mProgressStatusText = new QGraphicsTextItem(this);
mProgressStatusText->setFont(font);
mProgressStatusText->setPos(60,260);
mProgressStatusText->setPlainText("Progrès de l'importation");
mDatabaseImporterWorkerThread = new CDatabaseImporterThread();
mDatabaseImporterThread = new QThread();
mDatabaseImporterWorkerThread->moveToThread(mDatabaseImporterThread);
connect(mDatabaseImporterThread,SIGNAL(started()),mDatabaseImporterWorkerThread,SLOT(ImportLogs()));
connect(mDatabaseImporterWorkerThread,SIGNAL(DatabaseImportFinished(bool,QStringList*)),this,SLOT(DatabaseImportFinished(bool,QStringList*)));
connect(mDatabaseImporterWorkerThread,SIGNAL(ResetProgressBar()),mProgressBar,SLOT(reset()));
connect(mDatabaseImporterWorkerThread,SIGNAL(SetProgressBarRange(int,int)),mProgressBar,SLOT(setRange(int,int)));
connect(mDatabaseImporterWorkerThread,SIGNAL(SetProgressBarVal(int)),mProgressBar,SLOT(setValue(int)));
connect(mDatabaseImporterWorkerThread,SIGNAL(SetProgressText(QString)),this,SLOT(SetProgressText(QString)));
Title = new QGraphicsTextItem("Maintenance de la BD",this);
font.setPointSize(14);
Title->setFont(font);
Title->setPos(350,70);
QGraphicsRectItem *MaintenanceZoneFrame = new QGraphicsRectItem(this);
MaintenanceZoneFrame->setRect(QRectF(0,0,260,240));
MaintenanceZoneFrame->setPos(350,100);
MaintenanceZoneFrame->setPen(RectPen);
mDeleteDBDuplicatesBtn = new CTextButtonWidget("Effacer doublons");
mDeleteDBDuplicatesBtn->setParentItem(this);
mDeleteDBDuplicatesBtn->setPos(360,110);
connect(mDeleteDBDuplicatesBtn,SIGNAL(TxtButtonClicked(CTextButtonWidget*)),this,SLOT(ButtonClicked(CTextButtonWidget*)));
mDeleteNonErrorLogs = new CTextButtonWidget("Effacer passages sans décl.");
mDeleteNonErrorLogs->setParentItem(this);
mDeleteNonErrorLogs->setPos(360,140);
connect(mDeleteNonErrorLogs,SIGNAL(TxtButtonClicked(CTextButtonWidget*)),this,SLOT(ButtonClicked(CTextButtonWidget*)));
mDeleteZTLogFiles = new CTextButtonWidget("Effacer fichiers ZTLOG orphelins");
mDeleteZTLogFiles->setParentItem(this);
mDeleteZTLogFiles->setPos(360,170);
connect(mDeleteZTLogFiles,SIGNAL(TxtButtonClicked(CTextButtonWidget*)),this,SLOT(ButtonClicked(CTextButtonWidget*)));
mRebuildDatabaseFile = new CTextButtonWidget("Reconstruire le fichier BD");
mRebuildDatabaseFile->setParentItem(this);
mRebuildDatabaseFile->setPos(360,200);
connect(mRebuildDatabaseFile,SIGNAL(TxtButtonClicked(CTextButtonWidget*)),this,SLOT(ButtonClicked(CTextButtonWidget*)));
mDBMaintenanceProgressBar = new QProgressBar();
WidgetProxy = new QGraphicsProxyWidget(this);
WidgetProxy->setWidget(mDBMaintenanceProgressBar);
WidgetProxy->setPos(360,240);
font.setPointSize(8);
mDBMaintenanceProgressStatusText = new QGraphicsTextItem(this);
mDBMaintenanceProgressStatusText->setFont(font);
mDBMaintenanceProgressStatusText->setPos(360,260);
mDBMaintenanceProgressStatusText->setPlainText("");
if(EngMode == false)
{
mDeleteDBDuplicatesBtn->hide();
mDeleteNonErrorLogs->hide();
mDeleteZTLogFiles->hide();
mRebuildDatabaseFile->hide();
mDBMaintenanceProgressBar->hide();
mDBMaintenanceProgressStatusText->hide();
mFilterDuplicateChkBx->hide();
}
font.setPointSize(12);
mDBFileCountText = new QGraphicsTextItem(this);
mDBFileCountText->setFont(font);
mDBFileCountText->setPos(300,10);
mDBFileCountText->setPlainText("Nombre de passages: 440\nNombre de fichiers ZTLog: 30");
}
void CDatabaseMgrPage::resizeEvent(QGraphicsSceneResizeEvent *event)
{
Q_UNUSED(event)
mBackgroundRect->setRect(boundingRect());
}
void CDatabaseMgrPage::ButtonClicked(CTextButtonWidget *BtnPtr)
{
if(BtnPtr == mCancelButton)
{
hide();
}
else if(BtnPtr == mImportDataButton)
{
ImportData(mImportErrorDataOnlyChkBx->isChecked(), mFilterDuplicateChkBx->isChecked());
}
else if(BtnPtr == mCancelImportButton)
{
mDatabaseImporterWorkerThread->KillThread();
}
else if(BtnPtr == mDeleteDBDuplicatesBtn)
{
CleanDBDuplicates();
}
else if(BtnPtr == mDeleteNonErrorLogs)
{
if(QMessageBox::question(0,"Attention","Voulez vous vraiment éliminer les passages\nsans déclenchements?\nCette action est irréversible",QMessageBox::Yes,QMessageBox::No) == QMessageBox::Yes)
{
CleanDBNormalPasses();
}
}
else if(BtnPtr == mDeleteZTLogFiles)
{
if(QMessageBox::question(0,"Attention","Voulez vous vraiment éliminer les fichiers orphelins?\nCette action est irréversible",QMessageBox::Yes,QMessageBox::No) == QMessageBox::Yes)
{
CleanSingleZTLogFiles();
}
}
else if(BtnPtr == mRebuildDatabaseFile)
{
mProgramHandle->RebuildDatabaseFile();
}
}
bool CDatabaseMgrPage::ImportData(bool OnlyErrorLogs, bool FilterDuplicates)
{
//Ask the user to select the data source directories...
QStringList SelectedDirs;
SelectedDirs.clear();
QFileDialog FileDlg;
FileDlg.setFileMode(QFileDialog::DirectoryOnly);
QListView *l = FileDlg.findChild<QListView*>("listView");
if (l)
{
l->setSelectionMode(QAbstractItemView::MultiSelection);
}
QTreeView *t = FileDlg.findChild<QTreeView*>();
if (t)
{
t->setSelectionMode(QAbstractItemView::MultiSelection);
}
if(FileDlg.exec() == QDialog::Rejected)
{
return false;
}
SelectedDirs = FileDlg.selectedFiles();
if(SelectedDirs.isEmpty())
return false;
mDatabaseImporterWorkerThread->SetDatabasePath(mProgramHandle->GetLogDataPath());
mDatabaseImporterWorkerThread->SetImporParams(SelectedDirs,FilterDuplicates,OnlyErrorLogs);
mDatabaseImporterWorkerThread->SetLogMgrHandle(mLogMgrHandle);
mCancelButton->hide();
mImportDataButton->hide();
mCancelImportButton->show();
mDatabaseImporterThread->start();
return true;
}
bool CDatabaseMgrPage::CleanDBDuplicates()
{
int NbDeletedFiles = 0;
QList<CLogElement*> *LogsList = mLogMgrHandle->GetLogsList();
mDBMaintenanceProgressStatusText->setPlainText("Analyse en cours");
mDBMaintenanceProgressBar->setRange(0,LogsList->size());
for(int i = 0; i < LogsList->size(); i++)
{
mDBMaintenanceProgressBar->setValue(i+1);
for(int j = i+1; j < LogsList->size(); j++)
{
QCoreApplication::processEvents();
if((LogsList->at(i)->mZTLogType == ZT1_LOG_TYPE) && (LogsList->at(j)->mZTLogType == ZT1_LOG_TYPE))
{
CZT1LogElement *ZT1LogElement_A = (CZT1LogElement*)LogsList->at(i);
CZT1LogElement *ZT1LogElement_B = (CZT1LogElement*)LogsList->at(j);
if(ZT1LogElement_A->mStationName == ZT1LogElement_B->mStationName)
{
if(ZT1LogElement_A->mPassageDateTime == ZT1LogElement_B->mPassageDateTime)
{
//delete file from element B...
DeleteFile(ZT1LogElement_B->mLogFileName);
NbDeletedFiles++;
mDBMaintenanceProgressStatusText->setPlainText(QString().sprintf("Analyse en cours\n%d passages éliminés",NbDeletedFiles));
}
}
}
else if((LogsList->at(i)->mZTLogType == ZT2_LOG_TYPE) && (LogsList->at(j)->mZTLogType == ZT2_LOG_TYPE))
{
CZT2LogElement *ZT2LogElement_A = (CZT2LogElement*)LogsList->at(i);
CZT2LogElement *ZT2LogElement_B = (CZT2LogElement*)LogsList->at(j);
if(ZT2LogElement_A->mStationName == ZT2LogElement_B->mStationName)
{
if(ZT2LogElement_A->mPassageDateTime == ZT2LogElement_B->mPassageDateTime)
{
//delete file from element B...
DeleteFile(ZT2LogElement_B->mLogFileName);
NbDeletedFiles++;
mDBMaintenanceProgressStatusText->setPlainText(QString().sprintf("Analyse en cours\n%d passages éliminés",NbDeletedFiles));
}
}
}
}
}
mDBMaintenanceProgressStatusText->setPlainText(QString().sprintf("Analyse des doublons terminée\n%d passages éliminés",NbDeletedFiles));
mProgramHandle->LogsDatabaseChanged(0);
return true;
}
bool CDatabaseMgrPage::CleanDBNormalPasses()
{
int NbDeletedFiles = 0;
QList<CLogElement*> *LogsList = mLogMgrHandle->GetLogsList();
mDBMaintenanceProgressStatusText->setPlainText("Analyse en cours");
mDBMaintenanceProgressBar->setRange(0,LogsList->size());
for(int i = 0; i < LogsList->size(); i++)
{
mDBMaintenanceProgressBar->setValue(i+1);
QCoreApplication::processEvents();
if(LogsList->at(i)->mZTLogType == ZT1_LOG_TYPE)
{
CZT1LogElement *ZT1LogElement = (CZT1LogElement*)LogsList->at(i);
if(ZT1LogElement->mZTDetections.size() == 0 /*&& ZT1LogElement->mFlags.mIsProblematicPassage != 1*/ && ZT1LogElement->mFileProtected == false)
{
DeleteFile(ZT1LogElement->mLogFileName);
NbDeletedFiles++;
mDBMaintenanceProgressStatusText->setPlainText(QString().sprintf("Analyse en cours\n%d passages éliminés",NbDeletedFiles));
}
}
else
{
CZT2LogElement *ZT2LogElement = (CZT2LogElement*)LogsList->at(i);
if(ZT2LogElement->mZTDetections.size() == 0 /*&& ZT2LogElement->mFlags.mIsProblematicPassage != 1*/ && ZT2LogElement->mFileProtected == false)
{
//delete file from element B...
DeleteFile(ZT2LogElement->mLogFileName);
NbDeletedFiles++;
mDBMaintenanceProgressStatusText->setPlainText(QString().sprintf("Analyse en cours\n%d passages éliminés",NbDeletedFiles));
}
}
}
mDBMaintenanceProgressStatusText->setPlainText(QString().sprintf("Analyse des passages terminée\n%d passages éliminés",NbDeletedFiles));
mProgramHandle->LogsDatabaseChanged(0);
return true;
}
bool CDatabaseMgrPage::CleanSingleZTLogFiles()
{
QList<CZTLogFileInfo> *ZTLogFilesList;
ZTLogFilesList = mZTLogFilesManager->GetZTLogsList();
if(ZTLogFilesList->size() == 0)
return true;
mDBMaintenanceProgressStatusText->setPlainText("Analyse en cours");
mDBMaintenanceProgressBar->setRange(0,ZTLogFilesList->size());
int NbRemoved = 0;
for(int i = 0; i < ZTLogFilesList->size(); i++)
{
mDBMaintenanceProgressBar->setValue(i+1);
QFileInfo ZTLogFile(ZTLogFilesList->at(i).mZTLogFilePath);
QDir ZTLogFileDir = ZTLogFile.absoluteDir();
ZTLogFileDir.setFilter(QDir::Files | QDir::NoDotAndDotDot);
if(ZTLogFileDir.entryList().size() == 1)
{
NbRemoved++;
if(ZTLogFileDir.remove(ZTLogFile.absoluteFilePath()))
{
//qDebug("Removed %s",ZTLogFile.absoluteFilePath().toUtf8().data());
}
ZTLogFileDir.rmdir(ZTLogFile.absolutePath());
{
//qDebug("Removed %s",ZTLogFile.absolutePath().toUtf8().data());
}
ZTLogFilesList->removeAt(i);
i--;
}
}
mDBMaintenanceProgressStatusText->setPlainText(QString().sprintf("Analyse des fichiers terminée\n%d fichiers ZTLOG éliminés",NbRemoved));
mDBMaintenanceProgressBar->setRange(0,ZTLogFilesList->size());
mProgramHandle->ZTLogFilesChanged();
return true;
}
void CDatabaseMgrPage::DatabaseImportFinished(bool ret,QStringList* FilesList)
{
if(ret == false)
{
mProgressBar->reset();
mProgressStatusText->setPlainText("Importation non terminée...");
}
mDatabaseImporterThread->quit();
mCancelButton->show();
mImportDataButton->show();
mCancelImportButton->hide();
if(ret == true)
{
mProgramHandle->LogsDatabaseChanged(FilesList);
FilesList->clear();
delete FilesList;
}
}
void CDatabaseMgrPage::SetProgressText(QString Text)
{
mProgressStatusText->setPlainText(Text);
}
bool CDatabaseMgrPage::DeleteFile(QString FilePath)
{
QDir dir;
if(dir.remove(FilePath) == false)
{
qDebug("Could not delete file %s",FilePath.toUtf8().data());
return false;
}
qDebug("File deleted: %s",FilePath.toUtf8().data());
return true;
}
void CDatabaseMgrPage::UpdateDBStats()
{
int NbTrains, NbZTLog;
NbTrains = mLogMgrHandle->GetLogsCount();
NbZTLog = mZTLogFilesManager->GetZTLogFilesCount();
mDBFileCountText->setPlainText(QString().sprintf("Nombre de passages: %d\nNombre de fichiers ZTLog: %d",NbTrains,NbZTLog));
}
void CDatabaseMgrPage::EnableEngineeringMode()
{
mDeleteDBDuplicatesBtn->show();
mDeleteNonErrorLogs->show();
mDeleteZTLogFiles->show();
mRebuildDatabaseFile->show();
mDBMaintenanceProgressBar->show();
mDBMaintenanceProgressStatusText->show();
mFilterDuplicateChkBx->show();
}
void CDatabaseMgrPage::EnableLogImport()
{
mImportDataButton->show();
}
//Grab the mouse if the user clicks outside buttons
void CDatabaseMgrPage::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
Q_UNUSED(event)
}
void CDatabaseMgrPage::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
Q_UNUSED(event)
}
void CDatabaseMgrPage::showEvent(QShowEvent *event)
{
//qDebug("Show");
UpdateDBStats();
}
CDatabaseImporterThread::CDatabaseImporterThread()
{
mLogMgrHandle = 0;
mKillThread = false;
}
void CDatabaseImporterThread::ImportLogs()
{
mKillThread = false;
bool OnlyErrorLogs = mOnlyErrorLogs;
bool FilterDuplicates = mFilterDuplicates;
QStringList SelectedDirs = mSelectedDirs;
int NbDeletedFiles = 0;
int NbCopiedFiles = 0;
int NbCopiedDirs = 0;
ClearDir(QDir("./Temp"));
emit SetProgressBarRange(0,SelectedDirs.size());
emit ResetProgressBar();
emit SetProgressText("Copie des répertoires temporaires");
//Copy the files
for(int i = 0; i < SelectedDirs.size(); i++)
{
QDir SrcDir(SelectedDirs.at(i));
QString tmp = "./Temp/" + SrcDir.dirName();
QDir DestDir(tmp);
CopyDir(SrcDir,DestDir);
emit SetProgressBarVal(i+1);
if(IsThreadKilled())
{
emit DatabaseImportFinished(false,0);
return;
}
}
// Parse each directory to add.
QFileInfoList DataFilePath;
DataFilePath.clear();
QDir TempDir("./Temp");
DataFilePath = TempDir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot);
if(DataFilePath.isEmpty())
{
emit DatabaseImportFinished(false,0);
return;
}
QString DatabasePath = mDatabasePath;
QList<CLogElement*> *ExistingLogsList = mLogMgrHandle->GetLogsList();
QStringList LogFilters;
LogFilters << "*.bin";
bool CopyDirectory = true;
if(FilterDuplicates == true || OnlyErrorLogs == true)
{
for(int i = 0; i < DataFilePath.size(); i++)
{
QFileInfoList list;
//Load files in base directory
QDir LogDir(DataFilePath.at(i).absoluteFilePath());
LogDir.setFilter(QDir::Files | QDir::NoDotAndDotDot);
LogDir.setNameFilters(LogFilters);
LogDir.setSorting(QDir::Name);
list = LogDir.entryInfoList();
if(list.size() != 0)
{
//If no filtering is required, just copy the directory...
if(FilterDuplicates == false && OnlyErrorLogs == false)
{
CopyDirectory = true;
}
else
{
unsigned int ret;
emit SetProgressBarRange(0,list.size());
emit ResetProgressBar();
emit SetProgressText(QString().sprintf("Vérification du répertoire:\n%s",DataFilePath.at(i).fileName().toUtf8().data()));
for(int NewLogIndex = 0; NewLogIndex < list.size(); NewLogIndex++)
{
CLogElement *CurLogElement = CTrainLogFileMgr::instance()->OpenTrainLog(list.at(NewLogIndex).absoluteFilePath(),ret);
if(CurLogElement->mZTLogType == ZT1_LOG_TYPE)
{
CZT1LogElement * NewZT1Element = (CZT1LogElement*)CurLogElement;
bool FileDeleted = false;
if(OnlyErrorLogs && (FileDeleted == false))
{
if(NewZT1Element->mZTDetections.size() == 0)
{
DeleteFile(list.at(NewLogIndex).absoluteFilePath());
FileDeleted = true;
NbDeletedFiles++;
}
}
if(FilterDuplicates && (FileDeleted == false))
{
for(int ExistingLogIndex = 0; ExistingLogIndex < ExistingLogsList->size(); ExistingLogIndex++)
{
if(ExistingLogsList->at(ExistingLogIndex)->mZTLogType == ZT1_LOG_TYPE)
{
CZT1LogElement * ExistingZT1Element = (CZT1LogElement*)ExistingLogsList->at(ExistingLogIndex);
if(ExistingZT1Element->mStationName == NewZT1Element->mStationName)
{
if(ExistingZT1Element->mPassageDateTime == NewZT1Element->mPassageDateTime)
{
//Delete the file from the temporary directory.
DeleteFile(list.at(NewLogIndex).absoluteFilePath());
FileDeleted = true;
NbDeletedFiles++;
break;
}
}
}
}
}
}
else //ZT2
{
CZT2LogElement * NewZT2Element = (CZT2LogElement*)CurLogElement;
bool FileDeleted = false;
if(OnlyErrorLogs && (FileDeleted == false))
{
if(NewZT2Element->mZTDetections.size() == 0)
{
DeleteFile(list.at(NewLogIndex).absoluteFilePath());
FileDeleted = true;
NbDeletedFiles++;
}
}
if(FilterDuplicates && (FileDeleted == false))
{
for(int ExistingLogIndex = 0; ExistingLogIndex < ExistingLogsList->size(); ExistingLogIndex++)
{
if(ExistingLogsList->at(ExistingLogIndex)->mZTLogType == ZT2_LOG_TYPE)
{
CZT2LogElement * ExistingZT2Element = (CZT2LogElement*)ExistingLogsList->at(ExistingLogIndex);
if(ExistingZT2Element->mStationName == NewZT2Element->mStationName)
{
if(ExistingZT2Element->mPassageDateTime == NewZT2Element->mPassageDateTime)
{
//Delete the file from the temporary directory.
DeleteFile(list.at(NewLogIndex).absoluteFilePath());
FileDeleted = true;
NbDeletedFiles++;
}
}
}
}
}
}
emit SetProgressBarVal(NewLogIndex+1);
delete CurLogElement;
if(IsThreadKilled())
{
emit DatabaseImportFinished(false,0);
return;
}
}
}
}
else
{
CopyDirectory = true;
}
}
}
QStringList *NewFilesList = new QStringList;
if(CopyDirectory)
{
QDir TmpDir("./Temp");
DataFilePath.clear();
DataFilePath = TmpDir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot);
//Find the number of files to copy for the progress bar...
int NbFilesToCopy = 0;
for(int i = 0; i < DataFilePath.size(); i++)
{
QDir SrcDir(DataFilePath.at(i).absoluteFilePath());
NbFilesToCopy += SrcDir.entryList(QDir::Files).size();
}
emit SetProgressBarRange(0,NbFilesToCopy);
emit ResetProgressBar();
ProgressValue = 0;
emit SetProgressText("Copie des fichiers dans la BD");
for(int i = 0; i < DataFilePath.size(); i++)
{
QString StationDir;
StationDir.clear();
QStringList DirNameNibbles = DataFilePath.at(i).fileName().split('_');
if(DirNameNibbles.size() == 3)
{
StationDir = DirNameNibbles.at(1);
QDir SrcDir(DataFilePath.at(i).absoluteFilePath());
QString tmp = DatabasePath + SrcDir.separator() + StationDir + SrcDir.separator() + SrcDir.dirName();
QDir DestDir(QDir::cleanPath(tmp));
NbCopiedFiles += CopyDir(SrcDir,DestDir,true);
NbCopiedDirs++;
QFileInfoList FilesList = DestDir.entryInfoList(QDir::Files);
for(int i = 0; i < FilesList.size(); i++)
{
NewFilesList->append(FilesList.at(i).absoluteFilePath());
}
}
else
{
qDebug("Erreur, nom de répertoire illégal : %s",DataFilePath.at(i).absoluteFilePath().toUtf8().data());
}
if(IsThreadKilled())
{
emit DatabaseImportFinished(false,0);
return;
}
// emit SetProgressBarVal(i+1);
}
}
emit ResetProgressBar();
emit SetProgressText(QString().sprintf("Importation terminée avec succès\n%d passages ignorés\n%d fichiers copiés dans %d répertoires",NbDeletedFiles,NbCopiedFiles,NbCopiedDirs));
emit DatabaseImportFinished(true,NewFilesList);
return;
}
int CDatabaseImporterThread::CopyDir(QDir Dir, QDir DestDir, bool NotifyWhenCopied)
{
int CopiedFiles = 0;
if (!Dir.exists())
{
return false;
}
Dir.mkpath(DestDir.absolutePath());
foreach (QString f, Dir.entryList(QDir::Files))
{
QFile::copy(Dir.absolutePath() + QDir::separator() + f, DestDir.absolutePath() + QDir::separator() + f);
CopiedFiles++;
if(NotifyWhenCopied)
{
ProgressValue++;
emit SetProgressBarVal(ProgressValue);
emit SetProgressText(QString().sprintf("Copie des fichiers dans la BD\n%s",f.toUtf8().data()));
}
if(IsThreadKilled())
{
return CopiedFiles;
}
}
return CopiedFiles;
}
bool CDatabaseImporterThread::ClearDir(QDir Dir)
{
if (!Dir.exists())
return true;
QFileInfoList DirList = Dir.entryInfoList(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot);
for(int i = 0; i < DirList.size(); i++)
{
// QFileInfo info(DirList.at(i));
if (DirList.at(i).isDir())
{
if (!ClearDir(QDir(DirList.at(i).filePath())))
{
return false;
}
else
{
if(Dir.rmdir(DirList.at(i).absoluteFilePath()) == false)
{
qDebug("Could not delete %s",DirList.at(i).filePath().toUtf8().data());
}
}
}
else
{
if (Dir.remove(DirList.at(i).absoluteFilePath()) == false)
{
qDebug("Cannot delete %s",DirList.at(i).absoluteFilePath().toUtf8().data()); // return false;
}
}
}
return true;
}
bool CDatabaseImporterThread::DeleteFile(QString FilePath)
{
QDir dir;
if(dir.remove(FilePath) == false)
{
qDebug("Could not delete file %s",FilePath.toUtf8().data());
return false;
}
qDebug("File deleted: %s",FilePath.toUtf8().data());
return true;
}
int CDatabaseImporterThread::ParseDir(QDir dir)
{
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)
{
}
else
return 0;
return 1;
}
void CDatabaseImporterThread::SetImporParams(QStringList SelectedDirs, bool FilterDuplicates, bool OnlyErrorLogs)
{
mSelectedDirs = SelectedDirs;
mFilterDuplicates = FilterDuplicates;
mOnlyErrorLogs = OnlyErrorLogs;
}
void CDatabaseImporterThread::KillThread()
{
mMutex.lockForWrite();
mKillThread = true;
mMutex.unlock();
qDebug("Thread killed");
}
bool CDatabaseImporterThread::IsThreadKilled()
{
bool tmp;
mMutex.lockForRead();
tmp = mKillThread;
mMutex.unlock();
return tmp;
}

View File

@ -0,0 +1,157 @@
/*******************************************************************************
* *
* Société de Transports de Montréal. *
* 2012 *
* *
* Projet Zones Tests *
* *
* *
* *
*******************************************************************************/
/*
Description:
Description du fichier si nécessaire.
*/
/* ************************************************************************** */
/* Revision:
### 20131021 JFM
Verision d'origine.
### YYYMMDD Description du besoin ou du bug
Description du changement.
*/
/* ************************************************************************** */
#ifndef DATABASEMGRPAGE_H
#define DATABASEMGRPAGE_H
#include "GlobalDefine.h"
#include <QGraphicsWidget>
#include "Guipage.h"
#include <QString>
#include "PushButton.h"
#include "TextButtonWidget.h"
#include "ZTData.h"
#include <QCheckBox>
#include "LogMgr.h"
#include <QProgressBar>
#include <QThread>
#include <QReadWriteLock>
#include "ZTLogFilesMgr.h"
class COutilZT;
class CDatabaseImporterThread : public QObject
{
Q_OBJECT
public:
CDatabaseImporterThread();
void SetDatabasePath(QString path){mDatabasePath = path;}
void SetLogMgrHandle(CLogMgr *Handle){mLogMgrHandle = Handle;}
void SetImporParams(QStringList SelectedDirs, bool FilterDuplicates, bool OnlyErrorLogs);
void KillThread();
public slots:
void ImportLogs();
private:
int ParseDir(QDir dir);
int CopyDir(QDir Dir, QDir DestDir,bool NotifyWhenCopied = false);
bool ClearDir(QDir Dir);
bool DeleteFile(QString FilePath);
bool mKillThread;
QReadWriteLock mMutex;
QString mDatabasePath;
CLogMgr *mLogMgrHandle;
QStringList mSelectedDirs;
bool mFilterDuplicates;
bool mOnlyErrorLogs;
bool IsThreadKilled();
int ProgressValue;
signals:
void DatabaseImportFinished(bool,QStringList*);
void SetProgressBarRange(int,int);
void SetProgressBarVal(int);
void ResetProgressBar();
void SetProgressText(QString);
};
class CDatabaseMgrPage : public CGuiPage
{
Q_OBJECT
public:
CDatabaseMgrPage(QGraphicsWidget *Parent = 0,bool EngMode = false);
~CDatabaseMgrPage();
COutilZT *mProgramHandle;
CLogMgr *mLogMgrHandle;
CZTLogFilesMgr *mZTLogFilesManager;
void UpdateDBStats();
void EnableEngineeringMode();
void EnableLogImport();
virtual void showEvent(QShowEvent *event);
virtual void resizeEvent(QGraphicsSceneResizeEvent *event);
virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
private:
QGraphicsRectItem *mBackgroundRect;
CTextButtonWidget *mCancelButton, *mImportDataButton, *mCancelImportButton;
QCheckBox *mImportErrorDataOnlyChkBx, *mFilterDuplicateChkBx, *mDeleteSourceDataChkBx;
QProgressBar *mProgressBar;
QGraphicsTextItem *mProgressStatusText;
CTextButtonWidget *mDeleteDBDuplicatesBtn, *mDeleteNonErrorLogs, *mDeleteZTLogFiles, *mRebuildDatabaseFile;
QProgressBar *mDBMaintenanceProgressBar;
QGraphicsTextItem *mDBMaintenanceProgressStatusText;
QGraphicsTextItem *mDBFileCountText;
CDatabaseImporterThread *mDatabaseImporterWorkerThread;
QThread *mDatabaseImporterThread;
bool ImportData(bool OnlyError, bool FilterDuplicates);
bool CleanDBDuplicates();
bool CleanDBNormalPasses();
bool CleanSingleZTLogFiles();
bool DeleteFile(QString FilePath);
// int ParseDir(QDir dir);
// bool CopyDir(QDir Dir, QDir DestDir);
// bool ClearDir(QDir Dir);
// bool DeleteFile(QString FilePath);
public slots:
void ButtonClicked(CTextButtonWidget *);
void DatabaseImportFinished(bool,QStringList*);
void SetProgressText(QString);
};
#endif // DATABASEMGRPAGE_H

View File

@ -0,0 +1,127 @@
/*******************************************************************************
* *
* Société de Transports de Montréal. *
* 2012 - 2013 *
* *
* Projet Zones Tests *
* *
* *
* *
*******************************************************************************/
/*
Description:
Dessine une règle temporelle sur laquelle sont affichés les déclenchements.
Une ligne rouge est dessinée au temps correspondant au déclenchement et du
texte identifiant le type de déclenchement est aussi affiché.
Utilisée dans la page de visualisation des passages de train.
CETTE CLASSE DEVRAIT ÊTRE OPTIMISÉE.
*/
/* ************************************************************************** */
/* Revision:
### YYYMMDD JFM
Verision d'origine.
### YYYYMMDD Description du besoin ou du bug
Description du changement.
*/
/* ************************************************************************** */
#include "EventsRulerWidget.h"
#include <QPainter>
#include <QTextStream>
CEventRulerWidget::CEventRulerWidget(qreal RulerPixelWidth, QGraphicsItem *Parent)
{
setParentItem(Parent);
mPixelWidth = RulerPixelWidth;
mLabel = new QGraphicsTextItem(this);
}
void CEventRulerWidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
Q_UNUSED(option)
Q_UNUSED(widget)
if(mEventItems.isEmpty())
return;
QFont font;
font.setPixelSize(12);
painter->setFont(font);
qreal pitch = mPixelWidth/(mEndTime - mStartTime); //pixel/ns
QPen LinePen,TextPen;
LinePen.setColor(Qt::red);
LinePen.setWidth(2);
TextPen.setColor(Qt::black);
TextPen.setWidth(1);
qreal Height = boundingRect().height();
for(int i = 0; i < mEventItems.size(); i++)
{
if(mEventItems.at(i).mEventTime >= mStartTime)
{
if(mEventItems.at(i).mEventTime <= mEndTime)
{
qreal PixelPos = (mEventItems.at(i).mEventTime - mStartTime)*pitch;
painter->setPen(LinePen);
painter->drawLine(PixelPos,0,PixelPos,Height);
painter->setPen(TextPen);
painter->drawText(QRectF(PixelPos+3,0,50,Height),mEventItems.at(i).mLabel,Qt::AlignLeft | Qt::AlignVCenter);
}
else
{
return;
}
}
}
}
unsigned int CEventRulerWidget::SetRange(quint64 StartTime, quint64 EndTime)
{
if(StartTime > EndTime)
return false;
if(mEventItems.isEmpty())
return false;
mStartTime = StartTime;
mEndTime = EndTime;
update();
return RET_OK;
}
unsigned int CEventRulerWidget::AddEventItem(QString Rank, quint64 EventTime)
{
CEventRulerWidgetItem NewItem;
NewItem.mLabel = Rank;
NewItem.mEventTime = EventTime;
mEventItems.append(NewItem);
return RET_OK;
}
void CEventRulerWidget::SetLabel(QString Label, int Offset)
{
QFont font;
font.setBold(true);
mLabel->setFont(font);
mLabel->setPlainText(Label);
mLabel->setPos(-Offset,boundingRect().height()/2 - mLabel->boundingRect().height()/2);
}
void CEventRulerWidget::ClearRuler()
{
mEventItems.clear();
update();
}

View File

@ -0,0 +1,65 @@
/*******************************************************************************
* *
* Société de Transports de Montréal. *
* 2012 - 2013 *
* *
* Projet Zones Tests *
* *
* *
* *
*******************************************************************************/
/*
Description:
Description du fichier si nécessaire.
*/
/* ************************************************************************** */
/* Revision:
### 20131030 JFM
Verision d'origine.
### 20131107 Description du besoin ou du bug
Description du changement.
*/
/* ************************************************************************** */
#ifndef EVENTSRULERWIDGET_H
#define EVENTSRULERWIDGET_H
#include "GlobalDefine.h"
#include <QGraphicsWidget>
class CEventRulerWidgetItem
{
public:
QString mLabel;
quint64 mEventTime;
};
class CEventRulerWidget : public QGraphicsWidget
{
Q_OBJECT
public:
CEventRulerWidget(qreal RulerPixelWidth,QGraphicsItem *Parent = 0);
virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
unsigned int SetRange(quint64 StartTime, quint64 EndTime);
unsigned int AddEventItem(QString EventLabel,quint64 EventTime);
void SetLabel(QString Label,int Offset);
void ClearRuler();
private:
qreal mPixelWidth;
quint64 mStartTime, mEndTime;
qreal mPixelPitch;
QGraphicsTextItem *mLabel;
QList<CEventRulerWidgetItem> mEventItems;
};
#endif // RANKRULERWIDGET_H

View File

@ -0,0 +1,138 @@
/*******************************************************************************
* *
* Société de Transports de Montréal. *
* 2012 - 2013 *
* *
* Projet Zones Tests *
* *
* *
* *
*******************************************************************************/
/*
Description:
Dessine une ligne verticale et garde certaines information sur la position du
curseur
Utilisée dans la page de visualisation des passages de train..
*/
/* ************************************************************************** */
/* Revision:
### YYYMMDD JFM
Verision d'origine.
### YYYYMMDD Description du besoin ou du bug
Description du changement.
*/
/* ************************************************************************** */
#include "GraphCursorWidget.h"
#include <QPen>
#include <QPainter>
CVerticalGraphCursorWidget::CVerticalGraphCursorWidget(qreal Height,QGraphicsItem *Parent)
{
setParentItem(Parent);
resize(3,Height);
mLine.setLine(0,0,0,Height);
mColor = Qt::blue;
mCursorTime = 0;
mCursorSet = false;
}
void CVerticalGraphCursorWidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
Q_UNUSED(option)
Q_UNUSED(widget)
QPen pen;
pen.setWidth(1);
pen.setColor(mColor);
painter->setPen(pen);
painter->drawLine(mLine);
// if(mWidth != 0)
// painter->drawLine(mHLine);
}
qreal CVerticalGraphCursorWidget::GetPixelPos()
{
return pos().x();
}
quint64 CVerticalGraphCursorWidget::GetTime()
{
return mCursorTime;
}
void CVerticalGraphCursorWidget::SetTime(quint64 time)
{
mCursorTime = time;
}
bool CVerticalGraphCursorWidget::IsCursorSet()
{
return mCursorSet;
}
void CVerticalGraphCursorWidget::ClearCursor()
{
mCursorSet = false;
hide();
}
void CVerticalGraphCursorWidget::SetCursor()
{
mCursorSet = true;
}
//---------------------------------------------
CHorizontalGraphCursorWidget::CHorizontalGraphCursorWidget(qreal Width,QGraphicsItem *Parent)
{
setParentItem(Parent);
resize(3,Width);
mLine.setLine(0,0,Width,0);
mColor = Qt::blue;
mCursorSet = false;
}
void CHorizontalGraphCursorWidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
Q_UNUSED(option)
Q_UNUSED(widget)
QPen pen;
pen.setWidth(1);
pen.setColor(mColor);
painter->setPen(pen);
painter->drawLine(mLine);
// if(mWidth != 0)
// painter->drawLine(mHLine);
}
qreal CHorizontalGraphCursorWidget::GetPixelPos()
{
return pos().y();
}
bool CHorizontalGraphCursorWidget::IsCursorSet()
{
return mCursorSet;
}
void CHorizontalGraphCursorWidget::ClearCursor()
{
mCursorSet = false;
hide();
}
void CHorizontalGraphCursorWidget::SetCursor()
{
mCursorSet = true;
}

View File

@ -0,0 +1,76 @@
/*******************************************************************************
* *
* 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 GRAPHCURSORWIDGET_H
#define GRAPHCURSORWIDGET_H
#include "GlobalDefine.h"
#include <QGraphicsWidget>
class CVerticalGraphCursorWidget : public QGraphicsWidget
{
Q_OBJECT
public:
CVerticalGraphCursorWidget(qreal Height, QGraphicsItem *Parent = 0);
virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
qreal GetPixelPos();
void SetColor(QColor color){mColor = color;}
quint64 GetTime();
void SetTime(quint64 time);
bool IsCursorSet();
void ClearCursor();
void SetCursor();
private:
QLine mLine;
QColor mColor;
quint64 mCursorTime;
bool mCursorSet;
};
class CHorizontalGraphCursorWidget : public QGraphicsWidget
{
Q_OBJECT
public:
CHorizontalGraphCursorWidget(qreal Width, QGraphicsItem *Parent = 0);
virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
qreal GetPixelPos();
void SetColor(QColor color){mColor = color;}
bool IsCursorSet();
void ClearCursor();
void SetCursor();
private:
QLine mLine;
QColor mColor;
quint64 mCursorPos;
bool mCursorSet;
};
#endif // GRAPHCURSORWIDGET_H

View File

@ -0,0 +1,254 @@
/*******************************************************************************
* *
* Société de Transports de Montréal. *
* 2013 *
* *
* Projet Zones Tests *
* *
* *
* *
*******************************************************************************/
/*
Description:
Classe d'affichage d'un graphique discret (sondes magnétiques, pédales, etc.)La
fonction SetData permet d'associer la liste des transitions. La
fonction DisplayData() permet de fixer le timespan à afficher. La fonction détermine
quels points sont dans le span et crée une liste de lignes qui sont ensuite affichés
dans la fonction de rappel paint().
Utilisée dans la page de visualisation des passages de train.
*/
/* ************************************************************************** */
/* Revision:
### 20131024 JFM
Verision d'origine.
### YYYYMMDD Description du besoin ou du bug
Description du changement.
*/
/* ************************************************************************** */
#include "GraphItem.h"
#include <QPainter>
#include <QGraphicsSceneMouseEvent>
#include <QStyleOptionGraphicsItem>
CGraphItem::CGraphItem(QGraphicsItem *Parent)
{
setParentItem(Parent);
mDataSet = 0;
mStartTime = mStopTime = 0;
mDataValid = false;
mLabel = new QGraphicsTextItem(this);
mGraphPixmap = new QPixmap(boundingRect().width(),boundingRect().height());
}
CGraphItem::~CGraphItem()
{
delete mGraphPixmap;
}
void CGraphItem::SetData(QList<CGraphDiscreteDataPair*> *DataList)
{
mDataSet = DataList;
//Build the lines list
}
unsigned int CGraphItem::DisplayData(quint64 StartTime, quint64 StopTime)
{
if(mDataSet == 0)
return RET_OK;
quint64 MinTime = mDataSet->first()->mTime;
quint64 MaxTime = mDataSet->last()->mTime;
if(StartTime >= StopTime)
return RET_ERROR;
if(StartTime < MinTime)
return RET_ERROR;
if(StopTime > MaxTime)
return RET_ERROR;
mStartTime = StartTime;
mStopTime = StopTime;
quint64 TimeSpan = StopTime - StartTime;
//Find the index of the first and last point in the timespan.
int StartIndex = 0, StopIndex = 0;
quint64 StartDeltaTime, StopDeltaTime;
int i = 0;
bool StartFound = false, StopFound = false;
while(StartFound == false || StopFound == false)
{
if(i >= mDataSet->size())
{
qDebug("GraphItem::Array overflow while searching for time index");
return RET_ERROR;
}
quint64 CurTime = mDataSet->at(i)->mTime;
if(CurTime <= StartTime)
{
StartIndex = i;
StartDeltaTime = CurTime - StartTime;
StartFound = true;
}
if(CurTime >= StopTime && !StopFound)
{
StopIndex = i;
StopDeltaTime = StopTime - mDataSet->at(StopIndex)->mTime;
StopFound = true;
}
i++;
}
//Build the lines list
mLinesList.clear();
qreal Width = boundingRect().width();
qreal Height = boundingRect().height()-2;
qreal tick = (Width)/TimeSpan; //pixels per microsec
qreal X1,X2,Y1,Y2;
//Add all the lines to create the graph. When there is a transition
//the horizontal line must be continued to the next point and a vertical
//line must be drawn.
for(int i = StartIndex; i < StopIndex; i++)
{
QLine NewLine;
if(mDataSet->at(i)->mTime < StartTime)
X1 = 0;
else
X1 = (qreal)(mDataSet->at(i)->mTime - StartTime);
Y1 = mDataSet->at(i)->mValue;
if(mDataSet->at(i+1)->mTime > StopTime)
{
X2 = StopTime - StartTime;
Y2 = mDataSet->at(i)->mValue; //Do not draw the vertical line if the point outside the span is not the same value.
}
else
{
X2 = mDataSet->at(i+1)->mTime - StartTime;
Y2 = mDataSet->at(i+1)->mValue;
}
//Reverse the Y axis
if(Y1 == 0)
Y1 = 1;
else
Y1 = 0;
if(Y2 == 0)
Y2 = 1;
else
Y2 = 0;
if(Y1 == Y2) //no transition
{
NewLine.setLine(X1*tick,Y1*Height+1,X2*tick,Y2*Height+1);
mLinesList.append(NewLine);
}
else //value transition...
{
NewLine.setLine(X1*tick,Y1*Height+1,X2*tick,Y1*Height+1); //horizontal line
mLinesList.append(NewLine);
NewLine.setLine(X2*tick,Y1*Height+1,X2*tick,Y2*Height+1); //vertical line
mLinesList.append(NewLine);
}
}
mDataValid = true;
//#ifndef WINDOWS_OS
mGraphPixmap->fill(QColor(245, 245, 255));
QPainter *painter = new QPainter(mGraphPixmap);
painter->drawLines(mLinesList);
delete painter;
//#endif
update();
return RET_OK;
}
void CGraphItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
Q_UNUSED(option)
Q_UNUSED(widget)
// static int toto = 0;
// qDebug("CGraphItem::paint %d",toto++);
if(mDataValid == false)
return ;
if(mDataSet == 0)
return;
if(mDataSet->size() == 0)
return;
// painter->setClipRect(option->exposedRect);
// QPen pen;
// pen.setWidth(1);
// pen.setColor(Qt::red);
// painter->setPen(pen);
// painter->drawRect(boundingRect());
// pen.setColor(Qt::black);
// painter->setPen(pen);
//#ifdef WINDOWS_OS
// painter->drawLines(mLinesList);
//#else
painter->drawPixmap(0,0,*mGraphPixmap);
//#endif
// for(int i = 0; i < mLinesList.size(); i++)
// {
// painter->drawEllipse(mLinesList.at(i).p1(),2,2);
// }
}
void CGraphItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
event->ignore();
}
void CGraphItem::mouseReleaseEvent( QGraphicsSceneMouseEvent * event)
{
event->ignore();
}
void CGraphItem::resizeEvent(QGraphicsSceneResizeEvent *event)
{
Q_UNUSED(event)
//mBackgroundRect->setRect(boundingRect());
delete mGraphPixmap;
mGraphPixmap = new QPixmap(boundingRect().width(),boundingRect().height());
DisplayData(mStartTime,mStopTime);
}
void CGraphItem::SetLabel(QString label,int Offset)
{
QFont font;
font.setBold(true);
mLabel->setFont(font);
mLabel->setPlainText(label);
mLabel->setPos(-Offset,boundingRect().height()/2 - mLabel->boundingRect().height()/2);
}
CGraphDiscreteDataPair::CGraphDiscreteDataPair(quint32 Value, quint64 Time):
mValue(Value),
mTime(Time)
{
}

View File

@ -0,0 +1,56 @@
#ifndef CGRAPHITEM_H
#define CGRAPHITEM_H
#include <GlobalDefine.h>
#include <QGraphicsWidget>
#include <QRect>
#include <QTimeLine>
#include <QList>
#include <QPainterPath>
class CGraphDiscreteDataPair
{
public:
CGraphDiscreteDataPair(quint32 Value, quint64 Time);
quint32 mValue;
quint64 mTime;
};
class CGraphItem : public QGraphicsWidget
{
Q_OBJECT
public:
CGraphItem(QGraphicsItem *Parent = 0);
~CGraphItem();
QList<CGraphDiscreteDataPair*> *mDataSet;
QGraphicsRectItem *mBackgroundRect;
// unsigned int DisplayData(quint32 StartIndex, quint32 StopIndex);
unsigned int DisplayData(quint64 StartTime, quint64 StopTime);
void SetData(QList<CGraphDiscreteDataPair*> *DataList);
// void UpdateDisplay(void);
void SetLabel(QString label,int Offset);
virtual void paint( QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget = 0 );
virtual void mousePressEvent ( QGraphicsSceneMouseEvent * event );
virtual void mouseReleaseEvent( QGraphicsSceneMouseEvent * event);
virtual void resizeEvent(QGraphicsSceneResizeEvent *event);
private:
//quint64 mTimeSpan;
//quint64 mOffset;
bool mDataValid;
//quint32 mStartIndex,mStopIndex;
quint64 mStartTime, mStopTime;
QVector<QLine> mLinesList;
QGraphicsTextItem *mLabel;
QPixmap *mGraphPixmap;
};
#endif // CGRAPHITEM_H

View File

@ -0,0 +1,228 @@
/*******************************************************************************
* *
* Société de Transports de Montréal. *
* 2013 *
* *
* Projet Zones Tests *
* *
* *
* *
*******************************************************************************/
/*
Description:
Élément graphique qui affiche une règle de graduation temporelle dans le bas
de la zone d'affichage.
Utilisée dans la page de visualisation des passages de train.
*/
/* ************************************************************************** */
/* Revision:
### 20131024 JFM
Verision d'origine.
### YYYYMMDD Description du besoin ou du bug
Description du changement.
*/
/* ************************************************************************** */
#include "GraphRulerWidget.h"
#include <QPainter>
#include <QTextStream>
#include <QStyleOptionGraphicsItem>
CGraphRulerWidget::CGraphRulerWidget(qreal RulerPixelWidth, QGraphicsItem *Parent)
{
setParentItem(Parent);
mPixelWidth = RulerPixelWidth;
mPixelPitch = RulerPixelWidth/RULER_NB_TICKS;
mRulerPixmap = new QPixmap(RulerPixelWidth,boundingRect().height()+1);
mValidRange = false;
}
CGraphRulerWidget::~CGraphRulerWidget()
{
delete mRulerPixmap;
}
void CGraphRulerWidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
Q_UNUSED(option)
Q_UNUSED(widget)
if(mValidRange == false)
return;
painter->setClipRect(option->exposedRect);
painter->drawPixmap(0,0,*mRulerPixmap);
// static int toto = 0;
// qDebug("CGraphRulerWidget::paint %d",toto++);
// qreal x = 0;
// QRectF TextRect(0,0,100,10);
// QString TimeText;
// qreal tick = (mEndTime - mStartTime)/mPixelWidth;
// QFont font;
// font.setPixelSize(12);
// painter->setFont(font);
// for(int i = 0; i <= RULER_NB_TICKS; i++)
// {
// QLine line;
// if(i%20 == 0)
// {
// TimeText.clear();
// line.setLine(x,0,x,10); //long line
// TextRect.moveCenter(QPoint(x,15));
// qreal time = (x*tick) + mStartTime;
// if(time < 1000)
// {
// QTextStream(&TimeText) << time << " ns";
// }
// else
// {
// time /= 1000;
// if(time < 1000)
// {
// QTextStream(&TimeText) << time << " us";
// }
// else
// {
// time /= 1000;
// if(time < 1000)
// {
// QTextStream(&TimeText) << time << " ms";
// }
// else
// {
// time /= 1000;
// if(time < 1000)
// {
// QTextStream(&TimeText) << time << " s";
// }
// }
// }
// }
// painter->drawText(TextRect,Qt::AlignCenter,TimeText);
// }
// else
// {
// line.setLine(x,0,x,5);
// }
// painter->drawLine(line);
// x += mPixelPitch;
// }
}
unsigned int CGraphRulerWidget::SetRange(quint64 StartTime, quint64 EndTime)
{
if(StartTime > EndTime)
return false;
mStartTime = StartTime;
mEndTime = EndTime;
mValidRange = true;
Render();
update();
return RET_OK;
}
void CGraphRulerWidget::Render()
{
qreal x = 0;
QRectF TextRect(0,0,100,10);
QString TimeText;
qreal tick = (mEndTime - mStartTime)/mPixelWidth;
QFont font;
mRulerPixmap->fill(Qt::white);
QPainter *painter = new QPainter(mRulerPixmap);
font.setPixelSize(12);
painter->setFont(font);
for(int i = 0; i <= RULER_NB_TICKS; i++)
{
QLine line;
if(i%20 == 0)
{
TimeText.clear();
line.setLine(x,0,x,10); //long line
TextRect.moveCenter(QPoint(x,15));
if(i == 0)
TextRect.moveLeft(x);
else if(i == RULER_NB_TICKS)
TextRect.moveRight(x);
qreal time = (x*tick) + mStartTime;
if(time < 1000)
{
QTextStream(&TimeText) << time << " ns";
}
else
{
time /= 1000;
if(time < 1000)
{
QTextStream(&TimeText) << time << " us";
}
else
{
time /= 1000;
if(time < 1000)
{
QTextStream(&TimeText) << time << " ms";
}
else
{
time /= 1000;
if(time < 1000)
{
QTextStream(&TimeText) << time << " s";
}
}
}
}
if(i == 0)
painter->drawText(TextRect,Qt::AlignLeft | Qt::AlignVCenter,TimeText);
else if(i == RULER_NB_TICKS)
painter->drawText(TextRect,Qt::AlignRight | Qt::AlignVCenter,TimeText);
else
painter->drawText(TextRect,Qt::AlignCenter,TimeText);
}
else
{
line.setLine(x,0,x,5);
}
painter->drawLine(line);
x += mPixelPitch;
}
delete painter;
}
void CGraphRulerWidget::resizeEvent(QGraphicsSceneResizeEvent *event)
{
Q_UNUSED(event)
delete mRulerPixmap;
mRulerPixmap = new QPixmap(mPixelWidth,boundingRect().height()+1);
}

View File

@ -0,0 +1,60 @@
/*******************************************************************************
* *
* Société de Transports de Montréal. *
* 2012 - 2013 *
* *
* Projet Zones Tests *
* *
* *
* *
*******************************************************************************/
/*
Description:
Description du fichier si nécessaire.
*/
/* ************************************************************************** */
/* Revision:
### 20131030 JFM
Verision d'origine.
### YYYYMMDD Description du besoin ou du bug
Description du changement.
*/
/* ************************************************************************** */
#ifndef GRAPHRULERWIDGET_H
#define GRAPHRULERWIDGET_H
#include "GlobalDefine.h"
#include <QGraphicsWidget>
#define RULER_NB_TICKS 200
class CGraphRulerWidget : public QGraphicsWidget
{
Q_OBJECT
public:
CGraphRulerWidget(qreal RulerPixelWidth,QGraphicsItem *Parent = 0);
~CGraphRulerWidget();
virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
unsigned int SetRange(quint64 StartTime, quint64 EndTime);
virtual void resizeEvent(QGraphicsSceneResizeEvent *event);
private:
qreal mPixelWidth;
quint64 mStartTime, mEndTime;
qreal mPixelPitch;
bool mValidRange;
QPixmap *mRulerPixmap;
void Render();
};
#endif // GRAPHRULERWIDGET_H

View File

@ -0,0 +1,42 @@
/*******************************************************************************
* *
* Société de Transports de Montréal. *
* 2012 *
* *
* Projet Zones Tests *
* *
* *
* *
*******************************************************************************/
/*
Description:
Classe de base d'une page de l'interface graphique (GUI = Graphics User Interface).
Une page contient les éléments graphiques affichés à l'écran.
*/
/* ************************************************************************** */
/* Revision:
### 20121220 JFM
Verision d'origine.
### YYYMMDD Description du besoin ou du bug
Description du changement.
*/
/* ************************************************************************** */
#include "Guipage.h"
#include <QGraphicsWidget>
CGuiPage::CGuiPage()
{
}
void CGuiPage::ShowPage()
{
}

View File

@ -0,0 +1,52 @@
/*******************************************************************************
* *
* Société de Transports de Montréal. *
* 2012 *
* *
* Projet Zones Tests *
* *
* *
* *
*******************************************************************************/
/*
Description:
Description du fichier si nécessaire.
*/
/* ************************************************************************** */
/* Revision:
### 201212120 JFM
Verision d'origine.
### YYYYMMDD Description du besoin ou du bug
Description du changement.
*/
/* ************************************************************************** */
#ifndef GUIPAGE_H
#define GUIPAGE_H
#include <QGraphicsWidget>
#include <QTimeLine>
#include "GlobalDefine.h"
class CGuiPage : public QGraphicsWidget
{
Q_OBJECT
public:
CGuiPage();
virtual void ShowPage();
};
#endif // GUIPAGE_H

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,205 @@
/*******************************************************************************
* *
* Société de Transports de Montréal. *
* 2012 *
* *
* Projet Zones Tests *
* *
* *
* *
*******************************************************************************/
/*
Description:
Description du fichier si nécessaire.
*/
/* ************************************************************************** */
/* Revision:
### 20131024 JFM
Verision d'origine.
### YYYMMDD Description du besoin ou du bug
Description du changement.
*/
/* ************************************************************************** */
#ifndef LOGVIEWPAGE_H
#define LOGVIEWPAGE_H
#include "GlobalDefine.h"
#include <QGraphicsWidget>
#include "Guipage.h"
#include <QString>
#include "PushButton.h"
#include "TextButtonWidget.h"
#include "LogMgr.h"
#include <QTableWidget>
#include "GraphItem.h"
//#include "qcustomplot.h"
#include "GraphCursorWidget.h"
#include "GraphRulerWidget.h"
#include "AnalogGraphItem.h"
#include "RankRulerWidget.h"
#include "EventsRulerWidget.h"
#include "QElapsedTimer"
#define GRAPH_ZONE_WIDTH 880//900
#define GRAPH_ZONE_HEIGHT 650//700
#define GRAPH_ZONE_X_OFFSET 70 //50
#define MIN_TIMESPAN 1000 //1 millisecond
#define ZOOM_TICK 10
#define SCROLL_TICK 1
#define ZOOM_CENTERED_ON_CURSOR
class COutilZT;
enum eZT1DiscreetPlottableParamID
{
ZT1_DISCREET_PLOTTABLE_S1_PARAM,
ZT1_DISCREET_PLOTTABLE_S2_PARAM,
ZT1_DISCREET_PLOTTABLE_PPINT_PARAM,
ZT1_DISCREET_PLOTTABLE_PPEXT_PARAM,
ZT1_DISCREET_PLOTTABLE_PG_PARAM,
ZT1_DISCREET_PLOTTABLE_FN_PARAM,
ZT1_DISCREET_PLOTTABLE_CI_PARAM,
ZT1_DISCREET_PLOTTABLE_ZT1_CDV_PARAM,
ZT1_DISCREET_PLOTTABLE_NB_PARAM
};
enum eZT1AnalogPlottableParamID
{
ZT1_ANALOG_PLOTTABLE_PGINT_PARAM,
ZT1_ANALOG_PLOTTABLE_PGEXT_PARAM,
ZT1_ANALOG_PLOTTABLE_PGCOMBINED_PARAM,
ZT1_ANALOG_PLOTTABLE_TRAIN_SPEED_PARAM,
ZT1_ANALOG_PLOTTABLE_SDF_DATA_PARAM,
ZT1_ANALOG_PLOTTABLE_NB_PARAM
};
enum eZT2DiscreetPlottableParamID
{
ZT2_DISCREET_PLOTTABLE_S1_PARAM,
ZT2_DISCREET_PLOTTABLE_PPEXT_PARAM,
ZT2_DISCREET_PLOTTABLE_PPINT_PARAM,
ZT2_DISCREET_PLOTTABLE_CI_PARAM,
ZT2_DISCREET_PLOTTABLE_APPROACH_CDV_PARAM,
ZT2_DISCREET_PLOTTABLE_CDV_PARAM,
ZT2_DISCREET_PLOTTABLE_NB_PARAM
};
enum eZT2AnalogPlottableParamID
{
ZT2_ANALOG_PLOTTABLE_NB_PARAM
};
class CDiscreetPlottableItem
{
public:
unsigned int mParamID;
QList<CGraphDiscreteDataPair*> *mDataSet;
CGraphItem *mPlotGaph;
};
class CAnalogPlottableItem
{
public:
unsigned int mParamID;
QList<CGraphAnalogDataPair*> *mDataSet;
CAnalogGraphItem *mPlotGaph;
};
class CLogViewPage : public CGuiPage
{
Q_OBJECT
public:
CLogViewPage(QGraphicsWidget *Parent = 0);
~CLogViewPage();
COutilZT *mProgramHandle;
CLogElement *mLogElement;
CDiscreetPlottableItem mZT1DiscreetPlots[ZT1_DISCREET_PLOTTABLE_NB_PARAM];
CAnalogPlottableItem mZT1AnalogPlots[ZT1_ANALOG_PLOTTABLE_NB_PARAM];
CDiscreetPlottableItem mZT2DiscreetPlots[ZT2_DISCREET_PLOTTABLE_NB_PARAM];
void SetLogData(CLogElement *element);
void DestroyData();
void EnableCloseButton();
void DisableCloseButton();
virtual void resizeEvent(QGraphicsSceneResizeEvent *event);
virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
virtual void wheelEvent(QGraphicsSceneWheelEvent *event);
virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *event);
// virtual void keyReleaseEvent(QKeyEvent *event);
virtual bool eventFilter(QObject *obj, QEvent *event);
// QCustomPlot mPlotWidget;
private:
QGraphicsRectItem *mBackgroundRect;
CTextButtonWidget *mCancelButton;
CTextButtonWidget *mCursorsZoomButton, *mZoomInButton, *mZoomOutButton, *mZoomResetButton;
int mZoomValue;
quint64 mStartTime, mStopTime;
quint64 mCurTimeSpan;
quint64 mTotalTimeSpan;
quint64 mMinTime, mMaxTime;
qreal mCurPixelTickValue;
qint32 mPGTreshold;
CVerticalGraphCursorWidget *mStaticCursor1, *mStaticCursor2, *mVCursor;
CHorizontalGraphCursorWidget *mHCursor;
QGraphicsTextItem *mCursorPosTxt;
QGraphicsTextItem *mStaticCursorDeltaTimeTxt, *mCursor1TimeTxt, *mCursor2TimeTxt;
QGraphicsTextItem *mPassageStats1Txt,*mPassageStats2Txt;
QString mPassageDateTime, mPassageStation;
CGraphRulerWidget *mRuler;
CRankRulerWidget *mRankRuler;
CEventRulerWidget *mEventRuler;
unsigned int mViewType;
int mStaticCursor1Pos, mStaticCursor2Pos;
int mCursorPos;
bool mMouseDragging;
bool mMouseMoved;
QElapsedTimer mScrollAnimationTimer;
qreal mLastMousePos;
void SetZoom(int ZoomValue);
void ZoomIn(bool CenterOnCursor = true);
void ZoomOut(bool CenterOnCursor = true);
void ScrollGraphs(qint64 Delta);
quint64 GetTimeForPixel(qreal PixelPos);
qreal GetPixelForTime(quint64 Time);
unsigned int ShowSpan(qreal PixelPos1, qreal PixelPos2);
unsigned int ShowSpan(quint64 TimePos1, quint64 TimePos2);
unsigned int AdjustStaticCursorsPos();
unsigned int AdjustMouseCursorPos(qreal PosX, qreal PosY);
unsigned int UpdateStaticCursorsDeltaTime();
void ShowPlots(unsigned int ViewType);
public slots:
void ButtonClicked(CTextButtonWidget *);
};
#endif // LOGVIEWPAGE_H

View File

@ -0,0 +1,802 @@
/*******************************************************************************
* *
* Société de Transports de Montréal. *
* 2012 *
* *
* Projet Zones Tests *
* *
* *
* *
*******************************************************************************/
/*
Description:
Page affichant la liste des passages de train.
*/
/* ************************************************************************** */
/* Revision:
### 20131021 JFM
Verision d'origine.
### YYYMMDD Description du besoin ou du bug
Description du changement.
*/
/* ************************************************************************** */
#include "LogsListPage.h"
#include <QGraphicsProxyWidget>
#include "OutilZT.h"
#include "TrainLogFileMgr.h"
#include <QString>
#include <QTextCodec>
#include <QTextStream>
#include <QDebug>
#include <QFileDialog>
CLogsListPage::~CLogsListPage()
{
// delete mListParsingTimer;
}
CLogsListPage::CLogsListPage(QGraphicsWidget *Parent)
{
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
setParentItem(Parent);
mProgramHandle = 0;
mStationFilter.clear();
mLogsTable = new QTableWidget(0,4);
QGraphicsProxyWidget *TableProxy = new QGraphicsProxyWidget(this);
TableProxy->setWidget(mLogsTable);
TableProxy->setPos(3,20);
TableProxy->resize(380,350);
mLogsTable->resize(380,350);
mLogsTable->setSelectionBehavior(QAbstractItemView::SelectRows);
mLogsTable->setSelectionMode(QAbstractItemView::SingleSelection);
mLogsTable->clearContents();
mLogsTable->setRowCount(0);
mLogsTable->setHorizontalHeaderLabels(QStringList() << "Date du passage" << "Station" << "Décl." << "Type");
// connect(mLogsTable,SIGNAL(cellClicked(int,int)),this,SLOT(LogsTableCellClicked(int,int)));
connect(mLogsTable,SIGNAL(currentCellChanged(int,int,int,int)),this,SLOT(LogsTableCellSelected(int,int,int,int)));
connect(mLogsTable,SIGNAL(cellDoubleClicked(int,int)),SLOT(TableDoubleClicked(int,int)));
mSummaryText = new QGraphicsTextItem(this);
QFont textfont;
textfont.setPointSize(12);
mSummaryText->setFont(textfont);
mSummaryText->setPlainText("Passage:");
mSummaryText->setPos(3,370);
QGraphicsProxyWidget *WidgetProxy = new QGraphicsProxyWidget(this);
mShowZT1ItemsChkBx = new QCheckBox("ZT1");
WidgetProxy->setWidget(mShowZT1ItemsChkBx);
WidgetProxy->setPos(190,450);
mShowZT1ItemsChkBx->setChecked(true);
connect(mShowZT1ItemsChkBx,SIGNAL(stateChanged(int)),this,SLOT(CheckBoxClicked(int)));
WidgetProxy = new QGraphicsProxyWidget(this);
mShowZT2ItemsChkBx = new QCheckBox("ZT2");
WidgetProxy->setWidget(mShowZT2ItemsChkBx);
//WidgetProxy->setPos(410,550);
WidgetProxy->setPos(250,450);
mShowZT2ItemsChkBx->setChecked(true);
connect(mShowZT2ItemsChkBx,SIGNAL(stateChanged(int)),this,SLOT(CheckBoxClicked(int)));
WidgetProxy = new QGraphicsProxyWidget(this);
mShowNoDetectionsChkBx = new QCheckBox("Sans décl.");
WidgetProxy->setWidget(mShowNoDetectionsChkBx);
WidgetProxy->setPos(300,450);
mShowNoDetectionsChkBx->setChecked(true);
connect(mShowNoDetectionsChkBx,SIGNAL(stateChanged(int)),this,SLOT(CheckBoxClicked(int)));
int x = 190, y = 480;
int xSpacing = 100, ySpacing = 30;
WidgetProxy = new QGraphicsProxyWidget(this);
mShowFNChkBx = new QCheckBox("Frotteur");
WidgetProxy->setWidget(mShowFNChkBx);
WidgetProxy->setPos(x,y+ySpacing);
mShowFNChkBx->setChecked(true);
connect(mShowFNChkBx,SIGNAL(stateChanged(int)),this,SLOT(CheckBoxClicked(int)));
WidgetProxy = new QGraphicsProxyWidget(this);
mShowCountChkBx = new QCheckBox("Comptage");
WidgetProxy->setWidget(mShowCountChkBx);
WidgetProxy->setPos(x+xSpacing,y+ySpacing);
mShowCountChkBx->setChecked(true);
connect(mShowCountChkBx,SIGNAL(stateChanged(int)),this,SLOT(CheckBoxClicked(int)));
WidgetProxy = new QGraphicsProxyWidget(this);
mShowPGChkBx = new QCheckBox("P. Guidage");
WidgetProxy->setWidget(mShowPGChkBx);
WidgetProxy->setPos(x+(xSpacing),y+(ySpacing*2));
mShowPGChkBx->setChecked(true);
connect(mShowPGChkBx,SIGNAL(stateChanged(int)),this,SLOT(CheckBoxClicked(int)));
WidgetProxy = new QGraphicsProxyWidget(this);
mShowPPChkBx = new QCheckBox("P. Porteur");
WidgetProxy->setWidget(mShowPPChkBx);
WidgetProxy->setPos(x,y+(ySpacing*2));
mShowPPChkBx->setChecked(true);
connect(mShowPPChkBx,SIGNAL(stateChanged(int)),this,SLOT(CheckBoxClicked(int)));
WidgetProxy = new QGraphicsProxyWidget(this);
mShowMPM10ChkBx = new QCheckBox("MPM10");
WidgetProxy->setWidget(mShowMPM10ChkBx);
WidgetProxy->setPos(x,y);
mShowMPM10ChkBx->setChecked(true);
connect(mShowMPM10ChkBx,SIGNAL(stateChanged(int)),this,SLOT(CheckBoxClicked(int)));
WidgetProxy = new QGraphicsProxyWidget(this);
mShowMRChkBx = new QCheckBox("MR63/73");
WidgetProxy->setWidget(mShowMRChkBx);
WidgetProxy->setPos(x+(xSpacing),y);
mShowMRChkBx->setChecked(true);
connect(mShowMRChkBx,SIGNAL(stateChanged(int)),this,SLOT(CheckBoxClicked(int)));
WidgetProxy = new QGraphicsProxyWidget(this);
mShowProblematicTrainsChkbx = new QCheckBox("Passage Problématique");
WidgetProxy->setWidget(mShowProblematicTrainsChkbx);
WidgetProxy->setPos(x,y+(ySpacing*3));
mShowProblematicTrainsChkbx->setChecked(true);
connect(mShowProblematicTrainsChkbx,SIGNAL(stateChanged(int)),this,SLOT(CheckBoxClicked(int)));
QGraphicsTextItem *Label = new QGraphicsTextItem(this);
Label->setPlainText("Station:");
Label->setPos(190,418);
WidgetProxy = new QGraphicsProxyWidget(this);
mProtectLogChkBx = new QCheckBox("Passage protégé");
WidgetProxy->setWidget(mProtectLogChkBx);
WidgetProxy->setPos(190,390);
mProtectLogChkBx->setChecked(false);
connect(mProtectLogChkBx,SIGNAL(clicked()),this,SLOT(ProtectLogCheckBoxClicked()));
mProtectLogChkBx->setEnabled(false);
WidgetProxy = new QGraphicsProxyWidget(this);
mStationsFilterComboBox = new QComboBox();
WidgetProxy->setWidget(mStationsFilterComboBox);
WidgetProxy->setPos(250,420);
mStationsFilterComboBox->insertItems(0,QStringList() << "Toutes" << "Angrignon" << "Snowdon" << "Henri Bourassa" << "Honoré Beaugrand" << "Longueuil" << "Berri UQAM" << "Montmorency (10/12)" << "Montmorency (10/22)" << "Côte Vertu" << "Saint-Michel");
mStationsFilterComboBox->setSizeAdjustPolicy(QComboBox::AdjustToContents);
mStationsFilterComboBox->adjustSize();
mStationsFilterComboBox->setMaxVisibleItems(15);
connect(mStationsFilterComboBox,SIGNAL(activated(int)),this,SLOT(StationFilterSelected(int)));
mViewZTLogBtn = new CPushButton(this,"./Images/log.png",false,0);
mViewZTLogBtn->resize(50,50);
mViewZTLogBtn->setPos(400,25);
connect(mViewZTLogBtn,SIGNAL(clicked(CPushButton*)),this,SLOT(ViewZTLogBtnClicked(CPushButton*)));
mSaveCSVLogBtn = new CPushButton(this,"./Images/csv.png",false,0);
mSaveCSVLogBtn->resize(50,50);
mSaveCSVLogBtn->setPos(400,100);
connect(mSaveCSVLogBtn,SIGNAL(clicked(CPushButton*)),this,SLOT(SaveCSVLogBtnClicked(CPushButton*)));
mDeleteFileButton = new CPushButton(this,"./Images/file_delete.png",false,0);
mDeleteFileButton->resize(50,50);
mDeleteFileButton->setPos(400,175);
connect(mDeleteFileButton,SIGNAL(clicked(CPushButton*)),this,SLOT(DeleteSelectedLog(CPushButton*)));
mSaveCSVLogBtn->hide();
mDeleteFileButton->hide();
}
void CLogsListPage::resizeEvent(QGraphicsSceneResizeEvent *event)
{
Q_UNUSED(event)
// mBackgroundRect->setRect(boundingRect());
}
void CLogsListPage::ButtonClicked(CTextButtonWidget *BtnPtr)
{
if(BtnPtr == mViewLogDataButton)
{
if(mLogMgrHandle->GetLogsCount() == 0)
return;
int cursel = mLogsTable->selectedItems().at(0)->data(Qt::UserRole).toInt();
CLogElement* Element = mLogMgrHandle->GetLogsList()->at(cursel);
mProgramHandle->LogViewRequest(mLogMgrHandle->LoadLogData(Element),this);
mLogMgrHandle->FreeLogData(Element);
}
else if(BtnPtr == mExportCSVLogButton)
{
if(mLogMgrHandle->GetLogsCount() == 0)
return;
QString Filename;
int cursel = mLogsTable->selectedItems().at(0)->data(Qt::UserRole).toInt();
CLogElement* Element = mLogMgrHandle->GetLogsList()->at(cursel);
mLogMgrHandle->LoadLogData(Element);
if(Element->mZTLogType == ZT1_LOG_TYPE)
{
CZT1LogElement *temp = (CZT1LogElement*)Element;
Filename = temp->mLogFileName.replace("bin","csv");
CTrainLogFileMgr::instance()->SaveCSVFile(Filename,&temp->mZTLogData,&temp->mFlags,&temp->mZTDetections,temp->mStationName);
}
else
{
CZT2LogElement *temp = (CZT2LogElement*)Element;
Filename = temp->mLogFileName.replace("bin","csv");
CTrainLogFileMgr::instance()->SaveCSVFile(Filename,&temp->mZTLogData,&temp->mZTDetections,temp->mStationName);
}
mLogMgrHandle->FreeLogData(Element);
}
}
void CLogsListPage::EnableEngineeringMode()
{
mSaveCSVLogBtn->show();
mDeleteFileButton->show();
mProtectLogChkBx->setEnabled(true);
}
unsigned int CLogsListPage::RefreshList()
{
ClearTable();
bool ShowZT1Items = (mShowZT1ItemsChkBx->checkState() == Qt::Checked);
bool ShowZT2Items = (mShowZT2ItemsChkBx->checkState() == Qt::Checked);
bool ShowNoDetections = (mShowNoDetectionsChkBx->checkState() == Qt::Checked);
bool ShowPPDetections = (mShowPPChkBx->checkState() == Qt::Checked);
bool ShowPGDetections = (mShowPGChkBx->checkState() == Qt::Checked);
bool ShowCountDetections = (mShowCountChkBx->checkState() == Qt::Checked);
bool ShowFNDetections = (mShowFNChkBx->checkState() == Qt::Checked);
bool ShowMRTrains = (mShowMRChkBx->checkState() == Qt::Checked);
bool ShowMPM10Trains = (mShowMPM10ChkBx->checkState() == Qt::Checked);
bool ShowProblematicTrains = (mShowProblematicTrainsChkbx->checkState() == Qt::Checked);
mLogsTable->setRowCount(mLogMgrHandle->GetLogsCount());
if(mLogMgrHandle->GetLogsCount() == 0)
return RET_OK;
int CurRow = 0;
QList<CLogElement*> *LogsList = mLogMgrHandle->GetLogsList();
for(unsigned int i = 0; i < mLogMgrHandle->GetLogsCount(); i++)
{
if(LogsList->at(i)->mZTLogType == ZT1_LOG_TYPE && ShowZT1Items == true)
{
CZT1LogElement *ZT1LogElement = (CZT1LogElement*)LogsList->at(i);
QString stationtext = mStationsFilterComboBox->currentText();
if((ZT1LogElement->mStationName == mStationsFilterComboBox->currentText() || mStationsFilterComboBox->currentText() == "Toutes") &&
((ShowMPM10Trains == true) || (ShowMPM10Trains == false && ZT1LogElement->mTrainType != TRAIN_TYPE_MPM10)) &&
((ShowMRTrains == true) || (ShowMRTrains == false && ZT1LogElement->mTrainType != TRAIN_TYPE_MR63_MR73)) &&
(ShowProblematicTrains == true || (ShowProblematicTrains == false && ZT1LogElement->mFlags.mIsProblematicPassage != 1)))
{
int NbDetections = ZT1LogElement->mZTDetections.size();
if(ShowNoDetections == true && NbDetections == 0)
{
QTableWidgetItem * NewItem = new QTableWidgetItem(ZT1LogElement->mPassageDateTime.toString("yyyy/MM/dd - hh:mm:ss"));
NewItem->setData(Qt::UserRole,QVariant(i));
NewItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
mLogsTable->setItem(CurRow,0,NewItem);
NewItem = new QTableWidgetItem(ZT1LogElement->mStationName);
NewItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
mLogsTable->setItem(CurRow,1,NewItem);
NewItem = new QTableWidgetItem(QString().sprintf("%d",NbDetections));
NewItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
mLogsTable->setItem(CurRow,2,NewItem);
NewItem = new QTableWidgetItem(QString().sprintf("ZT1"));
NewItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
mLogsTable->setItem(CurRow,3,NewItem);
CurRow++;
}
else if(ShowNoDetections == false && NbDetections == 0)
{
}
else
{
bool FilterItem = true;
for(int trig = 0; trig < NbDetections; trig++)
{
quint32 DetectionID = ZT1LogElement->mZTDetections.at(trig)->mDetectionID;
if((ShowCountDetections == true && DetectionID == DETECTION_MAGNETIC_SENSOR_COUNT) ||
(ShowFNDetections == true && DetectionID == DETECTION_FN_DETECTION) ||
(ShowPGDetections == true && DetectionID == DETECTION_PG_DETECTION) ||
(ShowPPDetections == true && (DetectionID == DETECTION_PPI_DETECTION || DetectionID == DETECTION_PPE_DETECTION)) ||
(DetectionID == DETECTION_PEQ1_DETECTION) ||
(DetectionID == DETECTION_PEQ2_DETECTION))
{
FilterItem = false;
break;
}
}
if(FilterItem == false)
{
QTableWidgetItem * NewItem = new QTableWidgetItem(ZT1LogElement->mPassageDateTime.toString("yyyy/MM/dd - hh:mm:ss"));
NewItem->setData(Qt::UserRole,QVariant(i));
NewItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
mLogsTable->setItem(CurRow,0,NewItem);
NewItem = new QTableWidgetItem(ZT1LogElement->mStationName);
NewItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
mLogsTable->setItem(CurRow,1,NewItem);
NewItem = new QTableWidgetItem(QString().sprintf("%d",NbDetections));
NewItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
mLogsTable->setItem(CurRow,2,NewItem);
NewItem = new QTableWidgetItem(QString().sprintf("ZT1"));
NewItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
mLogsTable->setItem(CurRow,3,NewItem);
CurRow++;
}
}
}
}
else if(LogsList->at(i)->mZTLogType == ZT2_LOG_TYPE && ShowZT2Items == true)
{
CZT2LogElement *ZT2LogElement = (CZT2LogElement*)LogsList->at(i);
if((ZT2LogElement->mStationName == mStationsFilterComboBox->currentText() || mStationsFilterComboBox->currentText() == "Toutes") &&
(ShowProblematicTrains == true || (ShowProblematicTrains == false && ZT2LogElement->mFlags.mIsProblematicPassage != 1)))
{
int NbDetections = ZT2LogElement->mZTDetections.size();
if(ShowNoDetections == true && NbDetections == 0)
{
QTableWidgetItem * NewItem = new QTableWidgetItem(ZT2LogElement->mPassageDateTime.toString("yyyy/MM/dd - hh:mm:ss"));
NewItem->setData(Qt::UserRole,QVariant(i));
NewItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
mLogsTable->setItem(CurRow,0,NewItem);
NewItem = new QTableWidgetItem(ZT2LogElement->mStationName);
NewItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
mLogsTable->setItem(CurRow,1,NewItem);
NewItem = new QTableWidgetItem(QString().sprintf("%d",ZT2LogElement->mZTDetections.size()));
NewItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
mLogsTable->setItem(CurRow,2,NewItem);
NewItem = new QTableWidgetItem(QString().sprintf("ZT2"));
NewItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
mLogsTable->setItem(CurRow,3,NewItem);
CurRow++;
}
else if(ShowNoDetections == false && NbDetections == 0)
{
}
else
{
bool FilterItem = true;
for(int trig = 0; trig < NbDetections; trig++)
{
quint32 DetectionID = ZT2LogElement->mZTDetections.at(trig)->mDetectionID;
if((ShowCountDetections == true && DetectionID == DETECTION_ZT2_MAGNETIC_SENCOR_COUNT) ||
(ShowPPDetections == true && (DetectionID == DETECTION_ZT2_PPI_DETECTION || DetectionID == DETECTION_ZT2_PPE_DETECTION)))
{
FilterItem = false;
break;
}
}
if(FilterItem == false)
{
QTableWidgetItem * NewItem = new QTableWidgetItem(ZT2LogElement->mPassageDateTime.toString("yyyy/MM/dd - hh:mm:ss"));
NewItem->setData(Qt::UserRole,QVariant(i));
NewItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
mLogsTable->setItem(CurRow,0,NewItem);
NewItem = new QTableWidgetItem(ZT2LogElement->mStationName);
NewItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
mLogsTable->setItem(CurRow,1,NewItem);
NewItem = new QTableWidgetItem(QString().sprintf("%d",ZT2LogElement->mZTDetections.size()));
NewItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
mLogsTable->setItem(CurRow,2,NewItem);
NewItem = new QTableWidgetItem(QString().sprintf("ZT2"));
NewItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
mLogsTable->setItem(CurRow,3,NewItem);
CurRow++;
}
}
}
}
}
mLogsTable->setRowCount(CurRow);
mLogsTable->setColumnWidth(0,150);
mLogsTable->setColumnWidth(1,100);
mLogsTable->setColumnWidth(2,50);
mLogsTable->setColumnWidth(3,50);
mLogsTable->sortItems(0,Qt::DescendingOrder);
mLogsTable->setCurrentCell(0,0);
LogsTableCellClicked(0,0);
return RET_OK;
}
void CLogsListPage::ClearTable()
{
for(int Col = 0; Col < mLogsTable->columnCount(); Col++)
{
for(int Row = 0; Row < mLogsTable->rowCount(); Row++)
{
delete mLogsTable->item(Row,Col);
//mLogsTable->item(Row,Col) = 0;
}
}
mLogsTable->setRowCount(0);
mLogsTable->clearContents();
}
void CLogsListPage::LogsTableCellSelected( int row, int col, int prevrow, int prevcol)
{
Q_UNUSED(prevrow)
Q_UNUSED(prevcol)
if(row < 0 || col < 0)
return;
LogsTableCellClicked(row,col);
}
void CLogsListPage::LogsTableCellClicked(int row, int column)
{
Q_UNUSED(column);
int rowcount = mLogsTable->rowCount();
if(rowcount == 0)
return;
// qDebug("Selection : %d",row);
QList<CLogElement*> *LogsList = mLogMgrHandle->GetLogsList();
float MeanSpeed = 0.0;
QString Summary;
if(mLogsTable->item(row,0) == 0)
return;
int ItemIndex = mLogsTable->item(row,0)->data(Qt::UserRole).toInt();
//if(LogsList->at(row)->mZTLogType == ZT1_LOG_TYPE)
if(LogsList->at(ItemIndex)->mZTLogType == ZT1_LOG_TYPE)
{
// //CZT1LogElement *ZT1LogElement = (CZT1LogElement*) LogsList->at(row);
CZT1LogElement *ZT1LogElement = (CZT1LogElement*) LogsList->at(ItemIndex);
if(ZT1LogElement->mFileProtected == true)
{
mProtectLogChkBx->setCheckState(Qt::Checked);
}
else
{
mProtectLogChkBx->setCheckState(Qt::Unchecked);
}
QString Problem = "N/A";
if(ZT1LogElement->mFlags.mIsProblematicPassage == 1)
{
Problem = "OUI";
}
else if(ZT1LogElement->mFlags.mIsProblematicPassage == 0)
{
Problem = "NON";
}
MeanSpeed = ZT1LogElement->mMeanSpeed;
Summary.sprintf("Passage:\n\nDate: %s\nHeure: %s\nZone Test : ZT1\nTrain : %s\nNombre d'éléments: %d\nProblématique: %s\n\n\nDéclenchements: \n",
ZT1LogElement->mPassageDateTime.toString("yyyy/MM/dd").toAscii().data(),
ZT1LogElement->mPassageDateTime.toString("hh:mm:ss").toAscii().data(),
CZTData::GetTrainTypeString(ZT1LogElement->mTrainType),
ZT1LogElement->mNbElements,
Problem.toAscii().data());
if(ZT1LogElement->mZTDetections.size() > 0)
{
for(int i = 0; i < ZT1LogElement->mZTDetections.size(); i++)
{
QString temp;
if(ZT1LogElement->mZTDetections.at(i)->mDetectionID == DETECTION_FN_DETECTION)
{
temp.sprintf("%s au bogie %d\n",CZTData::GetErrorString(ZT1LogElement->mZTDetections.at(i)->mDetectionID),ZT1LogElement->mZTDetections.at(i)->mRank);
}
else
{
temp.sprintf("%s au rang %d\n",CZTData::GetErrorString(ZT1LogElement->mZTDetections.at(i)->mDetectionID),ZT1LogElement->mZTDetections.at(i)->mRank);
}
Summary += temp;
if(i >= MAX_DETECTION_LIST_NBR - 1)
{
temp = " - Autres déclenchements non affichés -";
Summary += temp;
break;
}
}
}
else
Summary += "Aucun déclenchement";
}
//else if(LogsList->at(row)->mZTLogType == ZT2_LOG_TYPE)
else if(LogsList->at(ItemIndex)->mZTLogType == ZT2_LOG_TYPE)
{
//CZT2LogElement *ZT2LogElement = (CZT2LogElement*) LogsList->at(row);
CZT2LogElement *ZT2LogElement = (CZT2LogElement*) LogsList->at(ItemIndex);
if(ZT2LogElement->mFileProtected == true)
{
mProtectLogChkBx->setCheckState(Qt::Checked);
}
else
{
mProtectLogChkBx->setCheckState(Qt::Unchecked);
}
QString Problem = "N/A";
if(ZT2LogElement->mFlags.mIsProblematicPassage == 1)
{
Problem = "OUI";
}
else if(ZT2LogElement->mFlags.mIsProblematicPassage == 0)
{
Problem = "NON";
}
Summary.sprintf("Statistiques du passage:\n\nDate: %s\nHeure: %s\nZone Test: ZT2\nNombre d'éléments: %d\nProblématique: %s\n\n\n\nDéclenchements: \n",
ZT2LogElement->mPassageDateTime.toString("yyyy/MM/dd").toAscii().data(),
ZT2LogElement->mPassageDateTime.toString("hh:mm:ss").toAscii().data(),
ZT2LogElement->mNbElements,
Problem.toAscii().data());
if(ZT2LogElement->mZTDetections.size() > 0)
{
for(int i = 0; i < ZT2LogElement->mZTDetections.size(); i++)
{
QString temp;
temp.sprintf("%s au rang %d\n",CZTData::GetErrorString(ZT2LogElement->mZTDetections.at(i)->mDetectionID),ZT2LogElement->mZTDetections.at(i)->mRank);
Summary += temp;
if(i >= MAX_DETECTION_LIST_NBR-1)
{
temp = "- Autres déclenchements non affichés -";
Summary += temp;
break;
}
}
}
else
Summary += "Aucun déclenchement";
}
mSummaryText->setPlainText(Summary);
CLogElement* Element = mLogMgrHandle->LoadLogData(LogsList->at(ItemIndex));
mProgramHandle->LogViewRequest(Element,this);
mLogMgrHandle->FreeLogData(Element);
}
void CLogsListPage::StationFilterSelected(int Index)
{
Q_UNUSED(Index);
RefreshList();
}
void CLogsListPage::ViewZTLogBtnClicked(CPushButton *btn)
{
if(mLogsTable->rowCount() == 0)
return;
int cursel = mLogsTable->selectedItems().at(0)->data(Qt::UserRole).toInt();
CLogElement* Element = mLogMgrHandle->GetLogsList()->at(cursel);
QString FilePath;
QDateTime PassageDateTime;
if(Element->mZTLogType == ZT1_LOG_TYPE)
{
CZT1LogElement* log = (CZT1LogElement*)Element;
FilePath = log->mLogFileName;
PassageDateTime = log->mPassageDateTime;
}
else
{
CZT2LogElement* log = (CZT2LogElement*)Element;
FilePath = log->mLogFileName;
PassageDateTime = log->mPassageDateTime;
}
QFileInfo FileDir(FilePath);
QString ZTLogFilePath = FileDir.absolutePath();
ZTLogFilePath += "/ZTLog.txt";
int line =0;
QFile *LogFile = new QFile(ZTLogFilePath);
if(LogFile)
{
if(LogFile->open(QIODevice::ReadOnly | QIODevice::Text | QIODevice::Unbuffered) == true)
{
QString LogText(LogFile->readAll());
//Try to find the line corresponding to the selected train passage in the log
QDateTime DateTimeLine1,DateTimeLine2;
QTextStream strm(&LogText);
strm.seek(0);
bool finished = false;
QString temp;
do
{
temp = strm.readLine();
line++;
if(strm.atEnd())
break;
}
while(temp.length() < 10);
QStringList parts = temp.split(" : ");
QString LineText,DateString;
LineText.clear();
if(PassageDateTime > DateTimeLine1)
{
if(parts.size() != 0)
{
DateString = parts.at(0);
DateTimeLine1 = QDateTime::fromString(DateString,"yyyy/MM/dd - hh:mm:ss.zzz");
while(!finished)
{
temp = strm.readLine();
line++;
if(temp.length() > 10)
{
parts = temp.split(" : ");
if(parts.size() != 0)
{
DateString = parts.at(0);
DateTimeLine2 = QDateTime::fromString(DateString,"yyyy/MM/dd - hh:mm:ss.zzz");
if(PassageDateTime >= DateTimeLine1 && PassageDateTime <= DateTimeLine2)
{
LineText = parts.at(0);
finished = true;
}
}
}
else
{
if(strm.atEnd())
finished = true;
}
DateTimeLine1 = DateTimeLine2;
}
}
}
mProgramHandle->ShowZTLogRequest(LogText,LineText);
LogFile->close();
}
delete LogFile;
}
}
void CLogsListPage::SaveCSVLogBtnClicked(CPushButton *)
{
if(mLogsTable->rowCount() == 0)
return;
QString Filename;
int cursel = mLogsTable->selectedItems().at(0)->data(Qt::UserRole).toInt();
CLogElement* Element = mLogMgrHandle->GetLogsList()->at(cursel);
mLogMgrHandle->LoadLogData(Element);
if(Element->mZTLogType == ZT1_LOG_TYPE)
{
CZT1LogElement *temp = (CZT1LogElement*)Element;
QString dummy;
dummy = temp->mLogFileName;//.replace("bin","csv");
Filename = dummy.replace("bin","csv");
QString CSVFileName = QFileDialog::getSaveFileName(0,"Exporter .csv",Filename,tr("CSV (*.csv)"));
CTrainLogFileMgr::instance()->SaveCSVFile(CSVFileName,&temp->mZTLogData,&temp->mFlags,&temp->mZTDetections,temp->mStationName);
}
else
{
CZT2LogElement *temp = (CZT2LogElement*)Element;
QString dummy;
dummy = temp->mLogFileName;
Filename = dummy.replace("bin","csv");
QString CSVFileName = QFileDialog::getSaveFileName(0,"Exporter .csv",Filename,tr("CSV (*.csv)"));
CTrainLogFileMgr::instance()->SaveCSVFile(CSVFileName,&temp->mZTLogData,&temp->mZTDetections,temp->mStationName);
}
mLogMgrHandle->FreeLogData(Element);
}
void CLogsListPage::DeleteSelectedLog(CPushButton *)
{
if(mLogsTable->rowCount() == 0)
return;
int SelRow = mLogsTable->selectedItems().at(0)->row();
int SelCol = mLogsTable->selectedItems().at(0)->column();
mLogMgrHandle->DeleteLog(mLogsTable->selectedItems().at(0)->data(Qt::UserRole).toInt());
RefreshList();
mLogsTable->setCurrentCell(SelRow,SelCol);
}
//Grab the mouse if the user clicks outside buttons
void CLogsListPage::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
// qDebug("CLogsListPage");
Q_UNUSED(event)
}
void CLogsListPage::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
Q_UNUSED(event)
}
void CLogsListPage::CheckBoxClicked(int state)
{
Q_UNUSED(state)
RefreshList();
}
void CLogsListPage::ProtectLogCheckBoxClicked()
{
int state = mProtectLogChkBx->checkState();
int cursel = mLogsTable->selectedItems().at(0)->data(Qt::UserRole).toInt();
CLogElement* Element = mLogMgrHandle->GetLogsList()->at(cursel);
if(state == Qt::Checked)
{
if(mProgramHandle->SetLogProtection(true,Element,this) == RET_ERROR)
{
mProtectLogChkBx->setCheckState(Qt::Unchecked);
}
}
else
{
if(mProgramHandle->SetLogProtection(false,Element,this) == RET_ERROR)
{
mProtectLogChkBx->setCheckState(Qt::Checked);
}
}
}
void CLogsListPage::TableDoubleClicked(int row, int col)
{
Q_UNUSED(col)
Q_UNUSED(row)
// ButtonClicked(mViewLogDataButton);
}

View File

@ -0,0 +1,104 @@
/*******************************************************************************
* *
* Société de Transports de Montréal. *
* 2012 *
* *
* Projet Zones Tests *
* *
* *
* *
*******************************************************************************/
/*
Description:
Description du fichier si nécessaire.
*/
/* ************************************************************************** */
/* Revision:
### 20131024 JFM
Verision d'origine.
### YYYMMDD Description du besoin ou du bug
Description du changement.
*/
/* ************************************************************************** */
#ifndef LOGSLISTPAGE_H
#define LOGSLISTPAGE_H
#include "GlobalDefine.h"
#include <QGraphicsWidget>
#include "Guipage.h"
#include <QString>
#include "PushButton.h"
#include "TextButtonWidget.h"
#include "LogMgr.h"
#include <QTableWidget>
#include <QCheckBox>
#include <QComboBox>
#define MAX_DETECTION_LIST_NBR 6
class COutilZT;
class CLogsListPage : public CGuiPage
{
Q_OBJECT
public:
virtual ~CLogsListPage();
CLogsListPage(QGraphicsWidget *Parent = 0);
COutilZT *mProgramHandle;
CLogMgr *mLogMgrHandle;
unsigned int RefreshList();
void EnableEngineeringMode();
virtual void resizeEvent(QGraphicsSceneResizeEvent *event);
virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
private:
QTableWidget *mLogsTable;
QGraphicsTextItem *mSummaryText;
CTextButtonWidget *mViewLogDataButton;
CTextButtonWidget *mExportCSVLogButton;
QCheckBox *mShowZT1ItemsChkBx, *mShowZT2ItemsChkBx, *mShowNoDetectionsChkBx;
QCheckBox *mShowFNChkBx, *mShowCountChkBx, *mShowPGChkBx, *mShowPPChkBx,*mShowMPM10ChkBx, *mShowMRChkBx, *mShowProblematicTrainsChkbx;//, *mShowAllChkBx;
QTimer *mListParsingTimer;
QComboBox *mStationsFilterComboBox;
QString mStationFilter;
CPushButton *mViewZTLogBtn, *mSaveCSVLogBtn,*mDeleteFileButton;
QCheckBox *mProtectLogChkBx;
//bool mShowZT1Items,mShowZT2Items,mShowNoDetections,mUSBDetected;
void ClearTable();
public slots:
void ButtonClicked(CTextButtonWidget *);
void LogsTableCellClicked(int, int);
void LogsTableCellSelected(int,int,int,int);
void CheckBoxClicked(int);
void TableDoubleClicked(int,int);
void StationFilterSelected(int);
void ViewZTLogBtnClicked(CPushButton *);
void SaveCSVLogBtnClicked(CPushButton *);
void DeleteSelectedLog(CPushButton*);
void ProtectLogCheckBoxClicked();
// void ParsingTimerExipred();
};
#endif // LOGSLISTPAGE_H

View File

@ -0,0 +1,133 @@
/*******************************************************************************
* *
* Société de Transports de Montréal. *
* 2012 *
* *
* Projet Zones Tests *
* *
* *
* *
*******************************************************************************/
/*
Description:
Page principale de la ZT. C'est sur cette dernière que tout est affiché.
*/
/* ************************************************************************** */
/* Revision:
### 20121221 JFM
Verision d'origine.
### YYYMMDD Description du besoin ou du bug
Description du changement.
*/
/* ************************************************************************** */
#include "MainPage.h"
#include <QPainter>
#include "GlobalDefine.h"
#include <QDialog>
#include <QMainWindow>
#include "OutilZT.h"
#include <QDateTime>
//#include "Version.h"
CMainPage::CMainPage(QGraphicsWidget *Parent)
{
setGeometry(0,0,SCREEN_RES_WIDTH,SCREEN_RES_HEIGHT);
mProgramHandle = 0;
// QGraphicsTextItem *SoftVersion = new QGraphicsTextItem(this);
// QFont TextFont;
// TextFont.setPointSize(15);
// TextFont.setBold(true);
// SoftVersion->setFont(TextFont);
// SoftVersion->setPlainText(QString().sprintf("Version: %s",SOFT_VERSION));
// SoftVersion->setZValue(1);
// SoftVersion->adjustSize();
// SoftVersion->setPos(800,2);
// mTimeDisplayText = new QGraphicsTextItem(this);
// mTimeDisplayText->setPos(400,2);
// mTimeDisplayText->setFont(TextFont);
// mTimeDisplayText->setZValue(1);
mDatabaseModePushButton = new CPushButton(this,"./Images/Save-icon.png");
mDatabaseModePushButton->setPos(10,10);
mDatabaseModePushButton->resize(50,50);
connect( mDatabaseModePushButton, SIGNAL( clicked(CPushButton*) ), this, SLOT(ButtonPressed(CPushButton*) ) );
mNetworkModePushButton = new CPushButton(this,"./Images/ethernet.png");
mNetworkModePushButton->setPos(10,150);
mNetworkModePushButton->resize(50,50);
connect( mNetworkModePushButton, SIGNAL( clicked(CPushButton*) ), this, SLOT(ButtonPressed(CPushButton*) ) );
mNetworkModePushButton->hide();
mZTLogsListPushButton = new CPushButton(this,"./Images/log.png");
mZTLogsListPushButton->setPos(10,80);
mZTLogsListPushButton->resize(50,50);
connect( mZTLogsListPushButton, SIGNAL( clicked(CPushButton*) ), this, SLOT(ButtonPressed(CPushButton*) ) );
mToolsPushButton = new CPushButton(this,"./Images/tools.png");
mToolsPushButton->setPos(10,375);
mToolsPushButton->resize(50,50);
connect( mToolsPushButton, SIGNAL( clicked(CPushButton*) ), this, SLOT(ButtonPressed(CPushButton*) ) );
mDatabaseOptionsPushButton = new CPushButton(this,"./Images/database.png");
mDatabaseOptionsPushButton->setPos(10,300);
mDatabaseOptionsPushButton->resize(50,50);
connect( mDatabaseOptionsPushButton, SIGNAL( clicked(CPushButton*) ), this, SLOT(ButtonPressed(CPushButton*) ) );
// CPushButton *LogsPushButton = new CPushButton(this,"./Images/Save-icon.png");
// LogsPushButton->setPos(70,700);
// LogsPushButton->resize(65,65);
// connect( LogsPushButton, SIGNAL( clicked(CPushButton*) ), this, SLOT(LogsButtonPressed()) );
// mTimeDisplayTimer = new QTimer();
// connect(mTimeDisplayTimer,SIGNAL(timeout()),this,SLOT(UpdateTime()));
// mTimeDisplayTimer->setSingleShot(false);
// mTimeDisplayTimer->start(1000);
}
void CMainPage::ButtonPressed(CPushButton *Btn)
{
if(Btn == mToolsPushButton)
{
mProgramHandle->ShowOptionsRequest();
}
else if(Btn == mNetworkModePushButton)
{
mProgramHandle->EnterNetworkModeRequest();
}
else if(Btn == mDatabaseModePushButton)
{
mProgramHandle->EnterDatabaseModeRequest();
}
else if(Btn == mDatabaseOptionsPushButton)
{
mProgramHandle->ShowDatabaseMgrRequest();
}
else if(Btn == mZTLogsListPushButton)
{
mProgramHandle->EnterZTLogModeRequest();
}
}
void CMainPage::UpdateTime()
{
// QDateTime time = QDateTime::currentDateTime();
// mTimeDisplayText->setPlainText(time.toString("yyyy/MM/dd hh:mm:ss"));
}

View File

@ -0,0 +1,77 @@
/*******************************************************************************
* *
* Société de Transports de Montréal. *
* 2012 *
* *
* Projet Zones Tests *
* *
* *
* *
*******************************************************************************/
/*
Description:
Description du fichier si nécessaire.
*/
/* ************************************************************************** */
/* Revision:
### 20121221 JFM
Verision d'origine.
### YYYMMDD Description du besoin ou du bug
Description du changement.
*/
/* ************************************************************************** */
#ifndef MAINPAGE_H
#define MAINPAGE_H
#include "GlobalDefine.h"
#include <QGraphicsWidget>
#include "Guipage.h"
#include <QString>
#include "PushButton.h"
#include <QTimer>
class COutilZT;
class CEvent;
class CMainPage : public CGuiPage
{
Q_OBJECT
public:
CMainPage(QGraphicsWidget *Parent = 0);
CPushButton *mToolsPushButton;
CPushButton *mNetworkModePushButton;
CPushButton *mDatabaseModePushButton;
CPushButton *mDatabaseOptionsPushButton;
CPushButton *mZTLogsListPushButton;
QGraphicsTextItem *mTimeDisplayText;
QTimer *mTimeDisplayTimer;
COutilZT *mProgramHandle;
private:
public slots:
void UpdateTime();
void ButtonPressed(CPushButton*);
};
#endif // MAINPAGE_H

View File

@ -0,0 +1,216 @@
/*******************************************************************************
* *
* Société de Transports de Montréal. *
* 2012 *
* *
* Projet Zones Tests *
* *
* *
* *
*******************************************************************************/
/*
Description:
Page affichant la liste des passages de train.
*/
/* ************************************************************************** */
/* Revision:
### 20131021 JFM
Verision d'origine.
### YYYMMDD Description du besoin ou du bug
Description du changement.
*/
/* ************************************************************************** */
#include "NetworkCtrlPage.h"
#include <QGraphicsProxyWidget>
#include "OutilZT.h"
#include <QString>
#include <QTextCodec>
#include <QHeaderView>
CNetworkCtrlPage::~CNetworkCtrlPage()
{
delete mRadioButtonsGroup;
}
CNetworkCtrlPage::CNetworkCtrlPage(QGraphicsWidget *Parent)
{
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
setParentItem(Parent);
mProgramHandle = 0;
mIsConnecting = false;
mNetworkConnectButton = new CToggleTextButtonWidget("Déconnecter"," Connecter ",QPixmap("./Images/red_cross.png"),QPixmap("./Images/green_check.png"),25,125);
mNetworkConnectButton->setParentItem(this);
// mNetworkConnectButton->setPos(10,350);
mNetworkConnectButton->setPos(10,25);
connect(mNetworkConnectButton,SIGNAL(ToggleBtnActivate(CToggleTextButtonWidget*)),this,SLOT(ConnectButtonPressed()));
connect(mNetworkConnectButton,SIGNAL(ToggleBtnDeActivate(CToggleTextButtonWidget*)),this,SLOT(ConnectButtonReleased()));
mZTStatusRefreshButton = new CTextButtonWidget("Rafraîchir");
mZTStatusRefreshButton->setParentItem(this);
mZTStatusRefreshButton->setPos(180,75);
connect(mZTStatusRefreshButton,SIGNAL(TxtButtonClicked(CTextButtonWidget*)),this,SLOT(ButtonClicked(CTextButtonWidget*)));
mZTLogDownloadButton = new CTextButtonWidget("Voir ZTLog");
mZTLogDownloadButton->setParentItem(this);
mZTLogDownloadButton->setPos(50,75);
connect(mZTLogDownloadButton,SIGNAL(TxtButtonClicked(CTextButtonWidget*)),this,SLOT(ButtonClicked(CTextButtonWidget*)));
mTrainLogsDownloadButton = new CTextButtonWidget("Téléch. Passages");
mTrainLogsDownloadButton->setParentItem(this);
mTrainLogsDownloadButton->setPos(50,125);
connect(mTrainLogsDownloadButton,SIGNAL(TxtButtonClicked(CTextButtonWidget*)),this,SLOT(ButtonClicked(CTextButtonWidget*)));
mRadioButtonsGroup = new QButtonGroup();
mViewRemoteControlRadioBtn = new QRadioButton("Voir contrôle");
QGraphicsProxyWidget *RadioButtonsProxyWidget = new QGraphicsProxyWidget(this);
RadioButtonsProxyWidget->setWidget(mViewRemoteControlRadioBtn);
RadioButtonsProxyWidget->setPos(180,0);
RadioButtonsProxyWidget->resize(150,15);
connect(mViewRemoteControlRadioBtn,SIGNAL(toggled(bool)),this,SLOT(RemoteViewRadioButtonToggled(bool)));
mViewRemoteTrainLogsRadioBtn = new QRadioButton("Voir passages");
RadioButtonsProxyWidget = new QGraphicsProxyWidget(this);
RadioButtonsProxyWidget->setWidget(mViewRemoteTrainLogsRadioBtn);
RadioButtonsProxyWidget->setPos(180,20);
RadioButtonsProxyWidget->resize(150,15);
connect(mViewRemoteTrainLogsRadioBtn,SIGNAL(toggled(bool)),this,SLOT(RemoteViewRadioButtonToggled(bool)));
mViewRemoteLiveZtRadioBtn = new QRadioButton("Voir temps réel");
RadioButtonsProxyWidget = new QGraphicsProxyWidget(this);
RadioButtonsProxyWidget->setWidget(mViewRemoteLiveZtRadioBtn);
RadioButtonsProxyWidget->setPos(180,40);
RadioButtonsProxyWidget->resize(150,15);
connect(mViewRemoteLiveZtRadioBtn,SIGNAL(toggled(bool)),this,SLOT(RemoteViewRadioButtonToggled(bool)));
mViewRemoteTrainLogsRadioBtn->setChecked(true);
mRadioButtonsGroup->addButton(mViewRemoteControlRadioBtn);
mRadioButtonsGroup->addButton(mViewRemoteTrainLogsRadioBtn);
mRadioButtonsGroup->addButton(mViewRemoteLiveZtRadioBtn);
mTxRxWidget = new CTxRxWidget();
mTxRxWidget->setParentItem(this);
mTxRxWidget->setPos(180,100);
}
void CNetworkCtrlPage::resizeEvent(QGraphicsSceneResizeEvent *event)
{
Q_UNUSED(event)
// mBackgroundRect->setRect(boundingRect());
}
void CNetworkCtrlPage::ButtonClicked(CTextButtonWidget *BtnPtr)
{
if(BtnPtr == mZTStatusRefreshButton)
{
mProgramHandle->RefreshRemoteZTStatusRequest();
}
else if(BtnPtr == mZTLogDownloadButton)
{
mProgramHandle->DownloadZTLogRequest();
}
else if(BtnPtr == mTrainLogsDownloadButton)
{
mProgramHandle->DownloadTrainLogsRequest();
}
}
void CNetworkCtrlPage::ConnectButtonPressed()
{
mNetworkConnectButton->ForceDeactivation();
mNetworkConnectButton->OverrideText("Annuler...");
if(mIsConnecting == false)
{
if(mProgramHandle->ConnectToZTRequest() == RET_OK)
{
mIsConnecting = true;
}
}
else
{
mProgramHandle->DisconnectZTRequest();
mIsConnecting = false;
}
}
void CNetworkCtrlPage::ConnectButtonReleased()
{
mProgramHandle->DisconnectZTRequest();
}
void CNetworkCtrlPage::NetworkZTConnected(int ID)
{
mNetworkConnectButton->ForceActivation();
mIsConnecting = false;
}
void CNetworkCtrlPage::NetworkZTConnectionFailed(int ID)
{
mNetworkConnectButton->ForceDeactivation();
mIsConnecting = false;
}
void CNetworkCtrlPage::NetworkRx()
{
mTxRxWidget->Receive();
}
void CNetworkCtrlPage::NetworkTx()
{
mTxRxWidget->Transmit();
}
void CNetworkCtrlPage::DisableNetworkButtons()
{
mZTStatusRefreshButton->DisableButton();
mZTLogDownloadButton->DisableButton();
mTrainLogsDownloadButton->DisableButton();
}
void CNetworkCtrlPage::EnableNetworkButtons()
{
mZTStatusRefreshButton->EnableButton();
mZTLogDownloadButton->EnableButton();
mTrainLogsDownloadButton->EnableButton();
}
void CNetworkCtrlPage::RemoteViewRadioButtonToggled(bool state)
{
if(mViewRemoteControlRadioBtn->isChecked())
{
if(mProgramHandle != 0)
mProgramHandle->ShowRemoteControlPage();
}
else if(mViewRemoteTrainLogsRadioBtn->isChecked())
{
if(mProgramHandle != 0)
mProgramHandle->ShowRemoteTrainLogsViewPages();
}
else if(mViewRemoteLiveZtRadioBtn->isChecked())
{
if(mProgramHandle != 0)
mProgramHandle->ShowRemoteLiveZTPage();
}
}
//Grab the mouse if the user clicks outside buttons
void CNetworkCtrlPage::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
qDebug("CNetworkCtrlPage");
Q_UNUSED(event)
}
void CNetworkCtrlPage::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
Q_UNUSED(event)
}

View File

@ -0,0 +1,87 @@
/*******************************************************************************
* *
* Société de Transports de Montréal. *
* 2012 *
* *
* Projet Zones Tests *
* *
* *
* *
*******************************************************************************/
/*
Description:
Description du fichier si nécessaire.
*/
/* ************************************************************************** */
/* Revision:
### 20131024 JFM
Verision d'origine.
### YYYMMDD Description du besoin ou du bug
Description du changement.
*/
/* ************************************************************************** */
#ifndef NETWORKCTRLPAGE_H
#define NETWORKCTRLPAGE_H
#include "GlobalDefine.h"
#include <QGraphicsWidget>
#include "Guipage.h"
#include <QString>
#include "ToggleTextButtonWidget.h"
#include "TextButtonWidget.h"
#include "TxRxWidget.h"
#include <QRadioButton>
#include <QButtonGroup>
class COutilZT;
class CNetworkCtrlPage : public CGuiPage
{
Q_OBJECT
public:
virtual ~CNetworkCtrlPage();
CNetworkCtrlPage(QGraphicsWidget *Parent = 0);
COutilZT *mProgramHandle;
virtual void resizeEvent(QGraphicsSceneResizeEvent *event);
virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
void DisableNetworkButtons();
void EnableNetworkButtons();
private:
CToggleTextButtonWidget *mNetworkConnectButton;
CTextButtonWidget *mZTStatusRefreshButton;
CTxRxWidget *mTxRxWidget;
CTextButtonWidget *mZTLogDownloadButton;
CTextButtonWidget *mTrainLogsDownloadButton;
QRadioButton *mViewRemoteTrainLogsRadioBtn, *mViewRemoteControlRadioBtn, *mViewRemoteLiveZtRadioBtn;
QButtonGroup *mRadioButtonsGroup;
bool mIsConnecting;
public slots:
void ButtonClicked(CTextButtonWidget *);
void ConnectButtonPressed();
void ConnectButtonReleased();
void NetworkZTConnected(int);
void NetworkZTConnectionFailed(int);
void NetworkTx();
void NetworkRx();
void RemoteViewRadioButtonToggled(bool);
// void ParsingTimerExipred();
};
#endif // NETWORKCTRLPAGE_H

View File

@ -0,0 +1,490 @@
/*******************************************************************************
* *
* Société de Transports de Montréal. *
* 2012 *
* *
* Projet Zones Tests *
* *
* *
* *
*******************************************************************************/
/*
Description:
Page affichant la liste des passages de train.
*/
/* ************************************************************************** */
/* Revision:
### 20131021 JFM
Verision d'origine.
### YYYMMDD Description du besoin ou du bug
Description du changement.
*/
/* ************************************************************************** */
#include "NetworkZTListPage.h"
#include <QGraphicsProxyWidget>
#include "OutilZT.h"
#include <QString>
#include <QTextCodec>
#include <QHeaderView>
#include <NetworkManager.h>
#include <QDebug>
CNetworkZTListPage::~CNetworkZTListPage()
{
ClearTable();
}
CNetworkZTListPage::CNetworkZTListPage(QGraphicsWidget *Parent)
{
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
setParentItem(Parent);
mProgramHandle = 0;
mZTListTable = new QTableWidget(0,3);
QGraphicsProxyWidget *TableProxy = new QGraphicsProxyWidget(this);
TableProxy->setWidget(mZTListTable);
TableProxy->setPos(3,20);
TableProxy->resize(320,300);
TableProxy->setZValue(3);
mZTListTable->resize(320,300);
mZTListTable->horizontalHeader()->setStretchLastSection(true);
mZTListTable->setSelectionBehavior(QAbstractItemView::SelectRows);
mZTListTable->setSelectionMode(QAbstractItemView::SingleSelection);
mZTListTable->clearContents();
mZTListTable->setRowCount(NB_ZT_ID);
mZTListTable->setHorizontalHeaderLabels(QStringList() << "Zone Test" << "Addr. IP" << "Connection");
// connect(mLogsTable,SIGNAL(cellClicked(int,int)),this,SLOT(LogsTableCellClicked(int,int)));
connect(mZTListTable,SIGNAL(currentCellChanged(int,int,int,int)),this,SLOT(ZTListTableCellSelected(int,int,int,int)));
connect(mZTListTable,SIGNAL(cellDoubleClicked(int,int)),SLOT(TableDoubleClicked(int,int)));
for(int i = 0; i < NB_ZT_ID; i++)
{
QTableWidgetItem * NewItem = new QTableWidgetItem(COutilZT::GetStationName(i));
NewItem->setData(Qt::UserRole,QVariant(i));
NewItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
mZTListTable->setItem(i,0,NewItem);
NewItem = new QTableWidgetItem("192.168.100.100");
NewItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
mZTListTable->setItem(i,1,NewItem);
NewItem = new QTableWidgetItem("Inconnu");
NewItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
mZTListTable->setItem(i,2,NewItem);
}
mZTListTable->resizeColumnsToContents();
mZTListTable->setCurrentCell(0,0);
}
void CNetworkZTListPage::resizeEvent(QGraphicsSceneResizeEvent *event)
{
Q_UNUSED(event)
// mBackgroundRect->setRect(boundingRect());
}
void CNetworkZTListPage::ButtonClicked(CTextButtonWidget *BtnPtr)
{
}
unsigned int CNetworkZTListPage::RefreshList()
{
// ClearTable();
// bool ShowZT1Items = (mShowZT1ItemsChkBx->checkState() == Qt::Checked);
// bool ShowZT2Items = (mShowZT2ItemsChkBx->checkState() == Qt::Checked);
// bool ShowNoDetections = (mShowNoDetectionsChkBx->checkState() == Qt::Checked);
// bool ShowPPDetections = (mShowPPChkBx->checkState() == Qt::Checked);
// bool ShowPGDetections = (mShowPGChkBx->checkState() == Qt::Checked);
// bool ShowCountDetections = (mShowCountChkBx->checkState() == Qt::Checked);
// bool ShowFNDetections = (mShowFNChkBx->checkState() == Qt::Checked);
// mLogsTable->setRowCount(mLogMgrHandle->GetLogsCount());
// if(mLogMgrHandle->GetLogsCount() == 0)
// return RET_OK;
// int CurRow = 0;
// QList<CLogElement*> *LogsList = mLogMgrHandle->GetLogsList();
// for(unsigned int i = 0; i < mLogMgrHandle->GetLogsCount(); i++)
// {
// if(LogsList->at(i)->mZTLogType == ZT1_LOG_TYPE && ShowZT1Items == true)
// {
// CZT1LogElement *ZT1LogElement = (CZT1LogElement*)LogsList->at(i);
// QString stationtext = mStationsFilterComboBox->currentText();
// if(ZT1LogElement->mStationName == mStationsFilterComboBox->currentText() || mStationsFilterComboBox->currentText() == "Toutes")
// {
// int NbDetections = ZT1LogElement->mZTDetections.size();
// if(ShowNoDetections == true && NbDetections == 0)
// {
// QTableWidgetItem * NewItem = new QTableWidgetItem(ZT1LogElement->mPassageDateTime.toString("yyyy/MM/dd - hh:mm:ss"));
// NewItem->setData(Qt::UserRole,QVariant(i));
// NewItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
// mLogsTable->setItem(CurRow,0,NewItem);
// NewItem = new QTableWidgetItem(ZT1LogElement->mStationName);
// NewItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
// mLogsTable->setItem(CurRow,1,NewItem);
// NewItem = new QTableWidgetItem(QString().sprintf("%d",NbDetections));
// NewItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
// mLogsTable->setItem(CurRow,2,NewItem);
// NewItem = new QTableWidgetItem(QString().sprintf("ZT1"));
// NewItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
// mLogsTable->setItem(CurRow,3,NewItem);
// CurRow++;
// }
// else if(ShowNoDetections == false && NbDetections == 0)
// {
// }
// else
// {
// bool FilterItem = true;
// for(int trig = 0; trig < NbDetections; trig++)
// {
// quint32 DetectionID = ZT1LogElement->mZTDetections.at(trig)->mDetectionID;
// if((ShowCountDetections == true && DetectionID == DETECTION_MAGNETIC_SENSOR_COUNT) ||
// (ShowFNDetections == true && DetectionID == DETECTION_FN_DETECTION) ||
// (ShowPGDetections == true && DetectionID == DETECTION_PG_DETECTION) ||
// (ShowPPDetections == true && (DetectionID == DETECTION_PPI_DETECTION || DetectionID == DETECTION_PPE_DETECTION)))
// {
// FilterItem = false;
// break;
// }
// }
// if(FilterItem == false)
// {
// QTableWidgetItem * NewItem = new QTableWidgetItem(ZT1LogElement->mPassageDateTime.toString("yyyy/MM/dd - hh:mm:ss"));
// NewItem->setData(Qt::UserRole,QVariant(i));
// NewItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
// mLogsTable->setItem(CurRow,0,NewItem);
// NewItem = new QTableWidgetItem(ZT1LogElement->mStationName);
// NewItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
// mLogsTable->setItem(CurRow,1,NewItem);
// NewItem = new QTableWidgetItem(QString().sprintf("%d",NbDetections));
// NewItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
// mLogsTable->setItem(CurRow,2,NewItem);
// NewItem = new QTableWidgetItem(QString().sprintf("ZT1"));
// NewItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
// mLogsTable->setItem(CurRow,3,NewItem);
// CurRow++;
// }
// }
// }
// }
// else if(LogsList->at(i)->mZTLogType == ZT2_LOG_TYPE && ShowZT2Items == true)
// {
// CZT2LogElement *ZT2LogElement = (CZT2LogElement*)LogsList->at(i);
// if(ZT2LogElement->mStationName == mStationsFilterComboBox->currentText() || mStationsFilterComboBox->currentText() == "Toutes")
// {
// int NbDetections = ZT2LogElement->mZTDetections.size();
// if(ShowNoDetections == true && NbDetections == 0)
// {
// QTableWidgetItem * NewItem = new QTableWidgetItem(ZT2LogElement->mPassageDateTime.toString("yyyy/MM/dd - hh:mm:ss"));
// NewItem->setData(Qt::UserRole,QVariant(i));
// NewItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
// mLogsTable->setItem(CurRow,0,NewItem);
// NewItem = new QTableWidgetItem(ZT2LogElement->mStationName);
// NewItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
// mLogsTable->setItem(CurRow,1,NewItem);
// NewItem = new QTableWidgetItem(QString().sprintf("%d",ZT2LogElement->mZTDetections.size()));
// NewItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
// mLogsTable->setItem(CurRow,2,NewItem);
// NewItem = new QTableWidgetItem(QString().sprintf("ZT2"));
// NewItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
// mLogsTable->setItem(CurRow,32,NewItem);
// CurRow++;
// }
// else if(ShowNoDetections == false && NbDetections == 0)
// {
// }
// else
// {
// bool FilterItem = true;
// for(int trig = 0; trig < NbDetections; trig++)
// {
// quint32 DetectionID = ZT2LogElement->mZTDetections.at(trig)->mDetectionID;
// if((ShowCountDetections == true && DetectionID == DETECTION_ZT2_MAGNETIC_SENCOR_COUNT) ||
// (ShowPPDetections == true && (DetectionID == DETECTION_ZT2_PPI_DETECTION || DetectionID == DETECTION_ZT2_PPE_DETECTION)))
// {
// FilterItem = false;
// break;
// }
// }
// if(FilterItem == false)
// {
// QTableWidgetItem * NewItem = new QTableWidgetItem(ZT2LogElement->mPassageDateTime.toString("yyyy/MM/dd - hh:mm:ss"));
// NewItem->setData(Qt::UserRole,QVariant(i));
// NewItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
// mLogsTable->setItem(CurRow,0,NewItem);
// NewItem = new QTableWidgetItem(ZT2LogElement->mStationName);
// NewItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
// mLogsTable->setItem(CurRow,1,NewItem);
// NewItem = new QTableWidgetItem(QString().sprintf("%d",ZT2LogElement->mZTDetections.size()));
// NewItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
// mLogsTable->setItem(CurRow,2,NewItem);
// NewItem = new QTableWidgetItem(QString().sprintf("ZT2"));
// NewItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
// mLogsTable->setItem(CurRow,32,NewItem);
// CurRow++;
// }
// }
// }
// }
// }
// mLogsTable->setRowCount(CurRow);
// mLogsTable->setColumnWidth(0,150);
// mLogsTable->setColumnWidth(1,75);
// mLogsTable->setColumnWidth(2,50);
// mLogsTable->setColumnWidth(3,50);
// mLogsTable->sortItems(0,Qt::DescendingOrder);
// mLogsTable->setCurrentCell(0,0);
// LogsTableCellClicked(0,0);
return RET_OK;
}
void CNetworkZTListPage::ClearTable()
{
for(int Col = 0; Col < mZTListTable->columnCount(); Col++)
{
for(int Row = 0; Row < mZTListTable->rowCount(); Row++)
{
delete mZTListTable->item(Row,Col);
}
}
mZTListTable->setRowCount(0);
mZTListTable->clearContents();
}
unsigned int CNetworkZTListPage::SetConfig(CSettingsData *SettingsData)
{
if(SettingsData->mNetworkCfgList.size() != NB_ZT_ID)
return RET_ERROR;
for(int i = 0; i < NB_ZT_ID; i++)
{
mZTListTable->item(i,1)->setText(SettingsData->mNetworkCfgList.at(i).mIPAdress);
}
return RET_OK;
}
void CNetworkZTListPage::ZTListTableCellSelected( int row, int col, int prevrow, int prevcol)
{
Q_UNUSED(prevrow)
Q_UNUSED(prevcol)
// if(row < 0 || col < 0)
// return;
// LogsTableCellClicked(row,col);
}
int CNetworkZTListPage::GetSelectedZT()
{
return mZTListTable->selectedItems().at(0)->data(Qt::UserRole).toInt();
}
void CNetworkZTListPage::ZTListTableCellClicked(int row, int column)
{
Q_UNUSED(column);
// int rowcount = mLogsTable->rowCount();
// if(rowcount == 0)
// return;
//// qDebug("Selection : %d",row);
// QList<CLogElement*> *LogsList = mLogMgrHandle->GetLogsList();
// float MeanSpeed = 0.0;
// QString Summary;
// if(mLogsTable->item(row,0) == 0)
// return;
// int ItemIndex = mLogsTable->item(row,0)->data(Qt::UserRole).toInt();
// //if(LogsList->at(row)->mZTLogType == ZT1_LOG_TYPE)
// if(LogsList->at(ItemIndex)->mZTLogType == ZT1_LOG_TYPE)
// {
//// //CZT1LogElement *ZT1LogElement = (CZT1LogElement*) LogsList->at(row);
// CZT1LogElement *ZT1LogElement = (CZT1LogElement*) LogsList->at(ItemIndex);
// MeanSpeed = ZT1LogElement->mMeanSpeed;
// Summary.sprintf("Passage:\n\nDate: %s\nHeure: %s\nZone Test : ZT1\nTrain : %s\nNombre d'éléments: %d\n\n\nDéclenchements: \n",
// ZT1LogElement->mPassageDateTime.toString("yyyy/MM/dd").toAscii().data(),
// ZT1LogElement->mPassageDateTime.toString("hh:mm:ss").toAscii().data(),
// CZTData::GetTrainTypeString(ZT1LogElement->mTrainType),
// ZT1LogElement->mNbElements);
// if(ZT1LogElement->mZTDetections.size() > 0)
// {
// for(int i = 0; i < ZT1LogElement->mZTDetections.size(); i++)
// {
// QString temp;
// if(ZT1LogElement->mZTDetections.at(i)->mDetectionID == DETECTION_FN_DETECTION)
// {
// temp.sprintf("%s au bogie %d\n",CZTData::GetErrorString(ZT1LogElement->mZTDetections.at(i)->mDetectionID),ZT1LogElement->mZTDetections.at(i)->mRank);
// }
// else
// {
// temp.sprintf("%s au rang %d\n",CZTData::GetErrorString(ZT1LogElement->mZTDetections.at(i)->mDetectionID),ZT1LogElement->mZTDetections.at(i)->mRank);
// }
// Summary += temp;
// if(i >= MAX_DETECTION_LIST_NBR - 1)
// {
// temp = " - Autres déclenchements non affichés -";
// Summary += temp;
// break;
// }
// }
// }
// else
// Summary += "Aucun déclenchement";
// }
// //else if(LogsList->at(row)->mZTLogType == ZT2_LOG_TYPE)
// else if(LogsList->at(ItemIndex)->mZTLogType == ZT2_LOG_TYPE)
// {
// //CZT2LogElement *ZT2LogElement = (CZT2LogElement*) LogsList->at(row);
// CZT2LogElement *ZT2LogElement = (CZT2LogElement*) LogsList->at(ItemIndex);
// Summary.sprintf("Statistiques du passage:\n\nDate: %s\nHeure: %s\nZone Test: ZT2\nNombre d'éléments: %d\n\n\nDéclenchements: \n",
// ZT2LogElement->mPassageDateTime.toString("yyyy/MM/dd").toAscii().data(),
// ZT2LogElement->mPassageDateTime.toString("hh:mm:ss").toAscii().data(),
// ZT2LogElement->mNbElements);
// if(ZT2LogElement->mZTDetections.size() > 0)
// {
// for(int i = 0; i < ZT2LogElement->mZTDetections.size(); i++)
// {
// QString temp;
// temp.sprintf("%s au rang %d\n",CZTData::GetErrorString(ZT2LogElement->mZTDetections.at(i)->mDetectionID),ZT2LogElement->mZTDetections.at(i)->mRank);
// Summary += temp;
// if(i >= MAX_DETECTION_LIST_NBR-1)
// {
// temp = "- Autres déclenchements non affichés -";
// Summary += temp;
// break;
// }
// }
// }
// else
// Summary += "Aucun déclenchement";
// }
// mSummaryText->setPlainText(Summary);
}
//Grab the mouse if the user clicks outside buttons
void CNetworkZTListPage::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
// qDebug("CNetworkZTListPage");
Q_UNUSED(event)
}
void CNetworkZTListPage::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
Q_UNUSED(event)
}
void CNetworkZTListPage::TableDoubleClicked(int row, int col)
{
Q_UNUSED(col)
Q_UNUSED(row)
// ButtonClicked(mViewLogDataButton);
}
void CNetworkZTListPage::ZTNetworkStatusChanged(int ZTID,int Status)
{
if(ZTID >= NB_ZT_ID)
return;
// qDebug() << "ZT Network status changed. ID: " << ZTID << "Status : " << Status;
QString ZTStatus;
QColor Color;
switch(Status)
{
case CNetworkManager::ZT_NETWORK_OFFLINE_STATUS:
{
ZTStatus = "Hors Ligne";
Color = Qt::red;
break;
}
case CNetworkManager::ZT_NETWORK_ONLINE_STATUS:
{
ZTStatus = "En Ligne";
Color = Qt::darkGreen;
break;
}
case CNetworkManager::ZT_NETWORK_SEARCHING_STATUS:
{
ZTStatus = "Recherche...";
Color = Qt::black;
break;
}
case CNetworkManager::ZT_NETWORK_UNKNOWN_STATUS:
{
ZTStatus = "Inconnu";
Color = Qt::black;
break;
}
case CNetworkManager::ZT_NETWORK_CONNECTED_STATUS:
{
ZTStatus = "Connecté";
Color = Qt::darkBlue;
break;
}
}
mZTListTable->item(ZTID,2)->setText(ZTStatus);
mZTListTable->item(ZTID,2)->setForeground(QBrush(Color));
}

View File

@ -0,0 +1,85 @@
/*******************************************************************************
* *
* Société de Transports de Montréal. *
* 2012 *
* *
* Projet Zones Tests *
* *
* *
* *
*******************************************************************************/
/*
Description:
Description du fichier si nécessaire.
*/
/* ************************************************************************** */
/* Revision:
### 20131024 JFM
Verision d'origine.
### YYYMMDD Description du besoin ou du bug
Description du changement.
*/
/* ************************************************************************** */
#ifndef NETWORKZTLISTPAGE_H
#define NETWORKZTLISTPAGE_H
#include "GlobalDefine.h"
#include <QGraphicsWidget>
#include "Guipage.h"
#include <QString>
#include "PushButton.h"
#include "TextButtonWidget.h"
#include <QTableWidget>
#include <QCheckBox>
#include <QComboBox>
#include "ZTData.h"
class COutilZT;
class CNetworkZTListPage : public CGuiPage
{
Q_OBJECT
public:
virtual ~CNetworkZTListPage();
CNetworkZTListPage(QGraphicsWidget *Parent = 0);
COutilZT *mProgramHandle;
unsigned int RefreshList();
unsigned int SetConfig(CSettingsData *SettingsData);
int GetSelectedZT();
virtual void resizeEvent(QGraphicsSceneResizeEvent *event);
virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
private:
QTableWidget *mZTListTable;
void ClearTable();
public slots:
void ButtonClicked(CTextButtonWidget *);
void ZTListTableCellClicked(int, int);
void ZTListTableCellSelected(int,int,int,int);
void TableDoubleClicked(int,int);
void ZTNetworkStatusChanged(int,int);
// void ParsingTimerExipred();
};
#endif // NETWORKZTLISTPAGE_H

View File

@ -0,0 +1,211 @@
/*******************************************************************************
* *
* Société de Transports de Montréal. *
* 2012 *
* *
* Projet Zones Tests *
* *
* *
* *
*******************************************************************************/
/*
Description:
Page de sélection des options (sélection des fonctions de détection, ingénierie,
mode entretien, etc.).
*/
/* ************************************************************************** */
/* Revision:
### 20131021 JFM
Verision d'origine.
### YYYMMDD Description du besoin ou du bug
Description du changement.
*/
/* ************************************************************************** */
#include "OptionsPage.h"
#include <QPainter>
#include "GlobalDefine.h"
#include <QDialog>
#include <QMainWindow>
#include "OutilZT.h"
#include <QDateTime>
#include <QFont>
#include <QFileDialog>
#include <QTextEdit>
#include "OutilZT.h"
#include <QGraphicsProxyWidget>
#include "OutilZTVersion.h"
COptionsPage::~COptionsPage()
{
}
COptionsPage::COptionsPage(QGraphicsWidget *Parent)
{
Q_UNUSED(Parent)
mProgramHandle = 0;
mSettings = 0;
mBackgroundRect = new QGraphicsRectItem(boundingRect(), this);
QBrush BackgroundBrush(QColor(245, 245, 255));
mBackgroundRect->setBrush(BackgroundBrush);
QGraphicsTextItem *Title = new QGraphicsTextItem("Options",this);
QFont font;
font.setPointSize(18);
Title->setFont(font);
Title->setPos(250,10);
QGraphicsTextItem *SoftVersion = new QGraphicsTextItem(this);
font.setPointSize(14);
SoftVersion->setFont(font);
QString VersionString = "OutilZT version: ";
VersionString += SOFTWARE_VERSION;
SoftVersion->setPlainText(VersionString);
SoftVersion->setPos(25,210);
QPixmap *FilePixmap = new QPixmap("./Images/open-file-icon.png");
mLogDataDirDialogButton = new CTextButtonWidget("Sélectionner",0,50,150,15,FilePixmap);
mLogDataDirDialogButton->setParentItem(this);
mLogDataDirDialogButton->setPos(25,100);
connect(mLogDataDirDialogButton, SIGNAL(TxtButtonClicked(CTextButtonWidget*)), this, SLOT(ButtonClicked(CTextButtonWidget*)));
mLogDataDirDialogButton->hide();
mCancelButton = new CTextButtonWidget("Fermer");
mCancelButton->setParentItem(this);
mCancelButton->setPos(50,310);
connect(mCancelButton,SIGNAL(TxtButtonClicked(CTextButtonWidget*)),this,SLOT(ButtonClicked(CTextButtonWidget*)));
font.setPointSize(12);
mLogsPathText = new QGraphicsTextItem(this);
mLogsPathText->setPlainText("Répertoire de données: ");
mLogsPathText->setFont(font);
mLogsPathText->setPos(25,65);
QGraphicsTextItem *StationName;
QLineEdit *StationIP;
QGraphicsProxyWidget *Proxy;
int xpos = 375;
int ypos = 150;
for(int i = 0; i < NB_ZT_ID; i++)
{
StationName = new QGraphicsTextItem(this);
StationName->setFont(font);
StationName->setPlainText(COutilZT::GetStationName(i));
StationName->adjustSize();
StationName->setPos(xpos-StationName->boundingRect().width(), ypos + (i*30));
StationIP = new QLineEdit("100.100.100.100");
Proxy = new QGraphicsProxyWidget(this);
Proxy->setWidget(StationIP);
// StationIP->setInputMask("000.000.000.000;");
Proxy->setPos(xpos+10,ypos +(i*30)+3);
StationIP->resize(100,20);
StationIP->setEnabled(false);
mIpAddressList.append(StationIP);
}
mApplyNetworkSettingsBtn = new CTextButtonWidget("Appliquer");
mApplyNetworkSettingsBtn->setParentItem(this);
mApplyNetworkSettingsBtn->setPos(50,260);
connect(mApplyNetworkSettingsBtn,SIGNAL(TxtButtonClicked(CTextButtonWidget*)),this,SLOT(ButtonClicked(CTextButtonWidget*)));
}
void COptionsPage::resizeEvent(QGraphicsSceneResizeEvent *event)
{
Q_UNUSED(event)
mBackgroundRect->setRect(boundingRect());
}
void COptionsPage::ButtonClicked(CTextButtonWidget *BtnPtr)
{
if(BtnPtr == mCancelButton)
{
hide();
}
else if(BtnPtr == mLogDataDirDialogButton)
{
QString DataFilePath;
DataFilePath.clear();
QFileDialog FileDlg;
FileDlg.setFileMode(QFileDialog::DirectoryOnly);
// DataFilePath = FileDlg.getOpenFileName(0,"Répertoire de données",QString(),QString(),0,QFileDialog::ShowDirsOnly);
DataFilePath = FileDlg.getExistingDirectory(0,"Répertoire de données");
if(DataFilePath.isEmpty())
return;
qDebug("open file %s",DataFilePath.toAscii().data());
mProgramHandle->DataSourceDirChanged(DataFilePath);
QString tmp = "Répertoire de données: ";
tmp += mProgramHandle->GetLogDataPath();
mLogsPathText->setPlainText(tmp);
}
else if(BtnPtr == mApplyNetworkSettingsBtn)
{
if(mSettings == 0)
return;
for(int i = 0; i < mSettings->mNetworkCfgList.size(); i++)
{
mSettings->mNetworkCfgList[i].mIPAdress = mIpAddressList.at(i)->text();
}
mProgramHandle->NetworkDataChanged();
}
}
void COptionsPage::SetLogsDataPath(QString Path)
{
mLogsPathText->setPlainText(Path);
}
unsigned int COptionsPage::SetSettings(CSettingsData *SettingsData)
{
mSettings = SettingsData;
mLogsPathText->setPlainText(SettingsData->mDataSourceDirectoryPath);
if(SettingsData->mNetworkCfgList.size() != mIpAddressList.size())
return RET_ERROR;
for(int i = 0; i < mIpAddressList.size(); i++)
{
mIpAddressList.at(i)->setText(SettingsData->mNetworkCfgList.at(i).mIPAdress);
}
return RET_OK;
}
void COptionsPage::EnableEngineeringMode()
{
mLogDataDirDialogButton->show();
for(int i = 0; i < mIpAddressList.size(); i++)
{
mIpAddressList.at(i)->setEnabled(true);
}
}
//Grab the mouse if the user clicks outside buttons
void COptionsPage::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
// qDebug("COptionsPage");
Q_UNUSED(event)
}
void COptionsPage::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
Q_UNUSED(event)
}

View File

@ -0,0 +1,83 @@
/*******************************************************************************
* *
* Société de Transports de Montréal. *
* 2012 *
* *
* Projet Zones Tests *
* *
* *
* *
*******************************************************************************/
/*
Description:
Description du fichier si nécessaire.
*/
/* ************************************************************************** */
/* Revision:
### 20131021 JFM
Verision d'origine.
### YYYMMDD Description du besoin ou du bug
Description du changement.
*/
/* ************************************************************************** */
#ifndef OPTIONSPAGE_H
#define OPTIONSPAGE_H
#include "GlobalDefine.h"
#include <QGraphicsWidget>
#include "Guipage.h"
#include <QString>
#include "PushButton.h"
#include "TextButtonWidget.h"
#include "ZTData.h"
#include "QLineEdit"
class COutilZT;
class COptionsPage : public CGuiPage
{
Q_OBJECT
public:
COptionsPage(QGraphicsWidget *Parent = 0);
~COptionsPage();
CPushButton *mToolsPushButton;
COutilZT *mProgramHandle;
virtual void resizeEvent(QGraphicsSceneResizeEvent *event);
virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
void SetLogsDataPath(QString Path);
unsigned int SetSettings(CSettingsData *SettingsData);
void EnableEngineeringMode();
private:
QGraphicsRectItem *mBackgroundRect;
CTextButtonWidget *mLogDataDirDialogButton;
CTextButtonWidget *mCancelButton;
CTextButtonWidget *mApplyNetworkSettingsBtn;
QGraphicsTextItem *mLogsPathText;
QList<QLineEdit*> mIpAddressList;
CSettingsData *mSettings;
public slots:
void ButtonClicked(CTextButtonWidget *);
};
#endif // OPTIONSPAGE_H

View File

@ -0,0 +1,118 @@
/*******************************************************************************
* *
* Société de Transports de Montréal. *
* 2012 *
* *
* Projet Zones Tests *
* *
* *
* *
*******************************************************************************/
/*
Description:
Page de sélection des options (sélection des fonctions de détection, ingénierie,
mode entretien, etc.).
*/
/* ************************************************************************** */
/* Revision:
### 20131021 JFM
Verision d'origine.
### YYYMMDD Description du besoin ou du bug
Description du changement.
*/
/* ************************************************************************** */
#include "ProgressBarPage.h"
#include <QGraphicsProxyWidget>
CProgressBarPage::~CProgressBarPage()
{
}
CProgressBarPage::CProgressBarPage(QGraphicsWidget *Parent)
{
Q_UNUSED(Parent)
resize(400,100);
mBackgroundRect = new QGraphicsRectItem(boundingRect(), this);
QBrush BackgroundBrush(QColor(245, 245, 255));
mBackgroundRect->setBrush(BackgroundBrush);
mTitle = new QGraphicsTextItem("Title",this);
QFont font;
font.setPointSize(15);
mTitle->setFont(font);
mTitle->setPos(10,2);
font.setPointSize(10);
mMiscLabel = new QGraphicsTextItem(this);
mMiscLabel->setPlainText("MiscLabel");
mMiscLabel->setFont(font);
mMiscLabel->setPos(10,50);
mProgressBar = new QProgressBar();
QGraphicsProxyWidget *proxy = new QGraphicsProxyWidget(this);
proxy->setWidget(mProgressBar);
proxy->setPos(10,30);
mProgressBar->resize(390,20);
SetProgressBarRange(100);
mProgressBar->setValue(0);
}
void CProgressBarPage::resizeEvent(QGraphicsSceneResizeEvent *event)
{
Q_UNUSED(event)
// mBackgroundRect->setRect(boundingRect());
}
void CProgressBarPage::SetProgressBarRange(int range)
{
mProgressBar->setRange(0,range);
Reset();
}
void CProgressBarPage::Tick()
{
mCurValue++;
mProgressBar->setValue(mCurValue);
mProgressBar->update();
}
void CProgressBarPage::Reset()
{
mCurValue = 0;
}
void CProgressBarPage::SetMiscLabel(QString Label)
{
mMiscLabel->setPlainText(Label);
}
void CProgressBarPage::ClearMiscLabel()
{
mMiscLabel->setPlainText("");
}
void CProgressBarPage::SetTitle(QString Title)
{
mTitle->setPlainText(Title);
}
//Grab the mouse if the user clicks outside buttons
void CProgressBarPage::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
Q_UNUSED(event)
}
void CProgressBarPage::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
Q_UNUSED(event)
}

View File

@ -0,0 +1,78 @@
/*******************************************************************************
* *
* Société de Transports de Montréal. *
* 2012 *
* *
* Projet Zones Tests *
* *
* *
* *
*******************************************************************************/
/*
Description:
Description du fichier si nécessaire.
*/
/* ************************************************************************** */
/* Revision:
### 20131021 JFM
Verision d'origine.
### YYYMMDD Description du besoin ou du bug
Description du changement.
*/
/* ************************************************************************** */
#ifndef PROGRESSBARPAGE_H
#define PROGRESSBARPAGE_H
#include "GlobalDefine.h"
#include <QGraphicsWidget>
#include "Guipage.h"
#include <QString>
#include <QProgressBar>
//class COutilZT;
class CProgressBarPage : public CGuiPage
{
Q_OBJECT
public:
CProgressBarPage(QGraphicsWidget *Parent = 0);
~CProgressBarPage();
// COutilZT *mProgramHandle;
virtual void resizeEvent(QGraphicsSceneResizeEvent *event);
virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
void SetProgressBarRange(int range);
void Tick();
void Reset();
void SetMiscLabel(QString Label);
void ClearMiscLabel();
void SetTitle(QString Title);
private:
QGraphicsRectItem *mBackgroundRect;
QGraphicsTextItem *mMiscLabel, *mTitle;
QProgressBar *mProgressBar;
int mCurValue;
public slots:
// void ButtonClicked(CTextButtonWidget *);
};
#endif // PROGRESSBARPAGE_H

View File

@ -0,0 +1,258 @@
/*******************************************************************************
* *
* Société de Transports de Montréal. *
* 2013 *
* *
* Projet Zones Tests *
* *
* *
* *
*******************************************************************************/
/*
Description:
Widget graphique Bouton qui consiste en une image sur laquelle l'on peut
cliquer.
*/
/* ************************************************************************** */
/* Revision:
### 20130204 JFM
Verision d'origine.
### YYYYMMDD Description du besoin ou du bug
Description du changement.
*/
/* ************************************************************************** */
#include "PushButton.h"
#include <QPixmap>
#include <QPainter>
#include <QDebug>
#include <QTimer>
#include <QBitmap>
#include <QColor>
#include <QGraphicsPixmapItem>
CPushButton::CPushButton(QGraphicsItem *Parent,QString NormalFileName, bool UseTextOverlay,int ButtonData)
{
Q_UNUSED(ButtonData)
setParentItem(Parent);
setAcceptHoverEvents(true);
m_Normal = new QGraphicsPixmapItem(QPixmap(NormalFileName));
ClickTransparency = 1;
//Inform QGraphicsItem of the geometry
setGeometry(m_Normal->boundingRect());
ispressed = false;
isFlashingValid = false;
mDisplayFlashIcon = false;
isreleasing = false;
UseOverlay = UseTextOverlay;
ButtonTextOverlay = "";
timeLine = new QTimeLine(PRESS_EFFECT_FADE_TIMEOUT);
timeLine->setCurveShape(QTimeLine::EaseInCurve);
connect(timeLine, SIGNAL(valueChanged(qreal)), this, SLOT(TimeLine(qreal)));
}
CPushButton::~CPushButton()
{
delete m_Normal;
delete timeLine;
}
void CPushButton::paint(QPainter *Painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
// Painter->setCompositionMode(QPainter::CompositionMode_DestinationOver);
/*if(isDown() || isChecked())
{
m_Normal->paint(Painter,option,widget);
qDebug("Paint Called, button down");
}
else if(underMouse())
{
m_Hovered->paint(Painter,option,widget);
qDebug("Paint Called, hovered");
}
else
{
m_Pressed->paint(Painter,option,widget);
qDebug("Paint Called, normal");
}*/
if(ispressed)
{
//QRadialGradient gradient(50, 50, 50, 50, 50);
QRadialGradient gradient(m_Normal->boundingRect().center(),m_Normal->boundingRect().width()/2);
gradient.setColorAt(0, QColor::fromRgbF(1, 1, 1,1));
gradient.setColorAt(1, QColor::fromRgbF(1, 1, 1,0));
QBrush brush(gradient);
// m_Pressed->paint(Painter,option,widget);
m_Normal->paint(Painter,option,widget);
Painter->setBrush(brush);
Painter->setPen(Qt::NoPen);
//Painter->drawEllipse(m_Normal->boundingRect());
Painter->drawEllipse(m_Normal->boundingRect());
//qDebug("Paint Called, pressed");
}
/* else if(ishovered)
{
m_Hovered->paint(Painter,option,widget);
// qDebug("Paint Called, hovered");
}*/
else
{
if(mDisplayFlashIcon)
{
m_Flashing->paint(Painter,option,widget);
}
else
{
//draw button icon
m_Normal->paint(Painter,option,widget);
//draw text overlay
QRectF textRect = m_Normal->boundingRect();//.adjusted(15, 10, -10, -15);
int flags = Qt::AlignHCenter | Qt::AlignVCenter;
QFont font;
font.setPixelSize(16);
font.setBold(true);
Painter->setPen(Qt::red);
Painter->setFont(font);
Painter->drawText(textRect, flags, ButtonTextOverlay);
//if necessary, draw halo animation
if(isreleasing)
{
//QRadialGradient gradient(50, 50, 50, 50, 50);
QRadialGradient gradient(m_Normal->boundingRect().center(),m_Normal->boundingRect().width()/2);
gradient.setColorAt(0, QColor::fromRgbF(1, 1, 1,ClickTransparency));
gradient.setColorAt(1, QColor::fromRgbF(1, 1, 1, 0));
QBrush brush(gradient);
// m_Pressed->paint(Painter,option,widget);
m_Normal->paint(Painter,option,widget);
Painter->setBrush(brush);
Painter->setPen(Qt::NoPen);
//Painter->drawEllipse(m_Normal->boundingRect());
Painter->drawEllipse(m_Normal->boundingRect());
}
}
// qDebug("Paint Called, normal");
}
}
void CPushButton::hoverEnterEvent ( QGraphicsSceneHoverEvent * event )
{
event->accept();
update();
// qDebug("Hover Enter Called");
}
void CPushButton::hoverLeaveEvent ( QGraphicsSceneHoverEvent * event )
{
event->accept();
update();
// qDebug("Hover Leave Called");
}
void CPushButton::mousePressEvent ( QGraphicsSceneMouseEvent * event )
{
Q_UNUSED(event)
//
ispressed = true;
update();
emit pressed(this);
// qDebug("Mouse Press Event");
//event->ignore();
}
void CPushButton::mouseReleaseEvent( QGraphicsSceneMouseEvent * event)
{
Q_UNUSED(event)
ispressed = false;
emit released(this);
isreleasing = true;
timeLine->start();
// qDebug("Button Mouse Release Event");
}
void CPushButton::StartFlashing()
{
mFlashTimer->start(mFlashTimeout);
}
void CPushButton::StopFlashing()
{
mFlashTimer->stop();
mDisplayFlashIcon = false;
}
void CPushButton::setFlashingData(QString FlashFileName,int FlashDelay)
{
QPixmap temp(FlashFileName);
QBitmap temp2 = temp.createMaskFromColor(QColor(255,255,255),Qt::MaskOutColor);
// temp.setMask(temp2);
m_Flashing = new QGraphicsPixmapItem(temp);
if(!m_Flashing)
{
isFlashingValid = false;
return;
}
isFlashingValid = true;
mFlashTimeout = FlashDelay;
mFlashTimer = new QTimer(this);
connect(mFlashTimer,SIGNAL(timeout()),this,SLOT(FlashButton()));
}
void CPushButton::FlashButton()
{
mDisplayFlashIcon = !mDisplayFlashIcon;
update();
}
void CPushButton::TimeLine(qreal value)
{
ClickTransparency = 1-value;
update();
if(value == 1)
{
isreleasing = false;
emit clicked(this);
}
}
void CPushButton::SetTextOverlay(QString Text)
{
ButtonTextOverlay = Text.left(MAX_OVERLAY_TEXT_LENGTH);
update();
}
void CPushButton::resizeEvent(QGraphicsSceneResizeEvent *event)
{
m_Normal->setPixmap(m_Normal->pixmap().scaled(event->newSize().width(),event->newSize().height()));
this->resize(event->newSize().width(),event->newSize().height());
}

View File

@ -0,0 +1,77 @@
#ifndef PUSHBUTTON_H
#define PUSHBUTTON_H
//#include <QAbstractButton>
#include <QGraphicsWidget>
#include <QGraphicsSceneHoverEvent>
#include <QGraphicsItem>
class QGraphicsPixmapItem;
#include <QObject>
#include <QtCore/qtimeline.h>
class QTimer;
#define PRESS_EFFECT_FADE_TIMEOUT 200
#define MAX_OVERLAY_TEXT_LENGTH 3
class CPushButton : public QGraphicsWidget
{
Q_OBJECT
public:
CPushButton(QGraphicsItem *Parent, QString NormalFileName,bool UseTextOverlay = false, int ButtonData = 0);
virtual ~CPushButton();
void setFlashingData(QString FlashingFileName,int FlashingDelay);
void StartFlashing(void);
void StopFlashing(void);
void SetTextOverlay(QString Text);
void SetButtonData(unsigned long int ButtonData){mButtonData = ButtonData;}
unsigned long int GetBUttonData(){return mButtonData;}
void paint( QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget = 0 );
// QRectF boundingRect() const;
bool ispressed;
bool isreleasing;
bool isFlashingValid;
bool mDisplayFlashIcon;
bool UseOverlay;
QTimer *mFlashTimer;
int mFlashTimeout;
QString ButtonTextOverlay;
unsigned long int mButtonData;
protected:
//virtual void paintEvent(QPaintEvent *e);
virtual void hoverEnterEvent ( QGraphicsSceneHoverEvent * event );
virtual void hoverLeaveEvent ( QGraphicsSceneHoverEvent * event );
virtual void mousePressEvent ( QGraphicsSceneMouseEvent * event );
virtual void mouseReleaseEvent( QGraphicsSceneMouseEvent * event);
virtual void resizeEvent(QGraphicsSceneResizeEvent *event);
private:
QTimeLine *timeLine;
qreal ClickTransparency;
signals:
void clicked(CPushButton *ButtonPtr);
void pressed(CPushButton *ButtonPtr);
void released(CPushButton *ButtonPtr);
public slots:
void FlashButton();
void TimeLine(qreal value);
private:
QGraphicsPixmapItem *m_Normal;
QGraphicsPixmapItem *m_Pressed;
QGraphicsPixmapItem *m_Hovered;
QGraphicsPixmapItem *m_Flashing;
};
#endif // PUSHBUTTON_H

View File

@ -0,0 +1,293 @@
/*******************************************************************************
* *
* Société de Transports de Montréal. *
* 2012 - 2013 *
* *
* Projet Zones Tests *
* *
* *
* *
*******************************************************************************/
/*
Description:
Élément graphique qui affiche une règle qui indique le décompte des rangs
du train dans le temps. Ce qui permet de savoir à quel rang un événement
est survenu lors de la consultation d'un passage de train.
*/
/* ************************************************************************** */
/* Revision:
### YYYMMDD JFM
Verision d'origine.
### YYYYMMDD Description du besoin ou du bug
Description du changement.
*/
/* ************************************************************************** */
#include "RankRulerWidget.h"
#include <QPainter>
#include <QTextStream>
#include <QStyleOptionGraphicsItem>
CRankRulerWidget::~CRankRulerWidget()
{
delete mRulerPixmap;
}
CRankRulerWidget::CRankRulerWidget(qreal RulerPixelWidth, QGraphicsItem *Parent)
{
setParentItem(Parent);
mPixelWidth = RulerPixelWidth;
mLabel = new QGraphicsTextItem(this);
mRulerPixmap = new QPixmap(boundingRect().width(),boundingRect().height());
// mRulerPixmap->fill(Qt::white);
mRankItems.clear();
}
void CRankRulerWidget::resizeEvent(QGraphicsSceneResizeEvent *event)
{
Q_UNUSED(event)
delete mRulerPixmap;
mRulerPixmap = new QPixmap(boundingRect().width(),boundingRect().height());
Render();
}
void CRankRulerWidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
Q_UNUSED(widget)
if(mRankItems.isEmpty())
return;
painter->setClipRect(option->exposedRect);
painter->drawPixmap(0,0,*mRulerPixmap);
// if(mRankItems.isEmpty())
// return;
// QFont font;
// font.setPixelSize(12);
// painter->setFont(font);
// qreal pitch = mPixelWidth/(mEndTime - mStartTime); //pixel/ns
// int StartIndex = 0,EndIndex = 0;
// bool StartFound = false;
// for(int i = 0; i < mRankItems.size(); i++)
// {
// if(StartFound == false)
// {
// if(mStartTime <= mRankItems.at(i).mStartTime)
// {
// StartIndex = i;
// StartFound = true;
// }
// }
// if(mRankItems.at(i).mEndTime <= mEndTime)
// {
// EndIndex = i;
// }
// }
// if(StartIndex > 0)
// {
// if(mStartTime < mRankItems.at(StartIndex).mStartTime)
// {
// QRectF LabelRect;
// qreal StartPixel = 0;//mStartTime * pitch;
// qreal EndPixel = (mRankItems.at(StartIndex).mStartTime - mStartTime) * pitch;
// qreal Height = boundingRect().height();
// LabelRect.setRect(StartPixel,0,(EndPixel-StartPixel),Height);
// painter->drawLine(StartPixel,0,StartPixel,Height);
// painter->drawLine(EndPixel,0,EndPixel,Height);
// painter->drawText(LabelRect,mRankItems.at(StartIndex-1).mLabel,Qt::AlignHCenter | Qt::AlignVCenter);
// }
// }
// for(int i = StartIndex; i <= EndIndex; i++)
// {
// QRectF LabelRect;
// qreal StartPixel = (mRankItems.at(i).mStartTime - mStartTime) * pitch;
// qreal EndPixel;
// if(mRankItems.at(i).mEndTime > mEndTime)
// EndPixel = (mEndTime - mStartTime) * pitch;
// else
// EndPixel = (mRankItems.at(i).mEndTime - mStartTime) * pitch;
// qreal Height = boundingRect().height();
// LabelRect.setRect(StartPixel,0,(EndPixel-StartPixel),Height);
// painter->drawLine(StartPixel,0,StartPixel,Height);
// painter->drawLine(EndPixel,0,EndPixel,Height);
// painter->drawText(LabelRect,mRankItems.at(i).mLabel,Qt::AlignHCenter | Qt::AlignVCenter);
// }
// if(EndIndex < mRankItems.size()-1)
// {
// if(mEndTime > mRankItems.at(EndIndex).mStartTime)
// {
// QRectF LabelRect;
// qreal StartPixel = (mRankItems.at(EndIndex).mEndTime - mStartTime) * pitch;
// qreal EndPixel = (mEndTime - mStartTime) * pitch;
// qreal Height = boundingRect().height();
// LabelRect.setRect(StartPixel,0,(EndPixel-StartPixel),Height);
// painter->drawLine(StartPixel,0,StartPixel,Height);
// painter->drawLine(EndPixel,0,EndPixel,Height);
//// if(EndIndex == StartIndex)
//// painter->drawText(LabelRect,mRankItems.at(EndIndex).mLabel,Qt::AlignHCenter | Qt::AlignVCenter);
//// else
// painter->drawText(LabelRect,mRankItems.at(EndIndex+1).mLabel,Qt::AlignHCenter | Qt::AlignVCenter);
// }
// }
}
void CRankRulerWidget::Render()
{
if(mRankItems.isEmpty())
return;
mRulerPixmap->fill(Qt::white);
QPainter *painter = new QPainter(mRulerPixmap);
QFont font;
font.setPixelSize(12);
painter->setFont(font);
qreal pitch = mPixelWidth/(mEndTime - mStartTime); //pixel/ns
int StartIndex = 0,EndIndex = 0;
bool StartFound = false;
for(int i = 0; i < mRankItems.size(); i++)
{
if(StartFound == false)
{
if(mStartTime <= mRankItems.at(i).mStartTime)
{
StartIndex = i;
StartFound = true;
}
}
if(mRankItems.at(i).mEndTime <= mEndTime)
{
EndIndex = i;
}
}
if(StartIndex > 0)
{
if(mStartTime < mRankItems.at(StartIndex).mStartTime)
{
QRectF LabelRect;
qreal StartPixel = 0;//mStartTime * pitch;
qreal EndPixel = (mRankItems.at(StartIndex).mStartTime - mStartTime) * pitch;
qreal Height = boundingRect().height();
LabelRect.setRect(StartPixel,0,(EndPixel-StartPixel),Height);
painter->drawLine(StartPixel,0,StartPixel,Height);
painter->drawLine(EndPixel,0,EndPixel,Height);
painter->drawText(LabelRect,mRankItems.at(StartIndex-1).mLabel,Qt::AlignHCenter | Qt::AlignVCenter);
}
}
for(int i = StartIndex; i <= EndIndex; i++)
{
QRectF LabelRect;
qreal StartPixel = (mRankItems.at(i).mStartTime - mStartTime) * pitch;
qreal EndPixel;
if(mRankItems.at(i).mEndTime > mEndTime)
EndPixel = (mEndTime - mStartTime) * pitch;
else
EndPixel = (mRankItems.at(i).mEndTime - mStartTime) * pitch;
qreal Height = boundingRect().height();
LabelRect.setRect(StartPixel,0,(EndPixel-StartPixel),Height);
painter->drawLine(StartPixel,0,StartPixel,Height);
painter->drawLine(EndPixel,0,EndPixel,Height);
painter->drawText(LabelRect,mRankItems.at(i).mLabel,Qt::AlignHCenter | Qt::AlignVCenter);
}
if(EndIndex < mRankItems.size()-1)
{
if(mEndTime > mRankItems.at(EndIndex).mStartTime)
{
QRectF LabelRect;
qreal StartPixel = (mRankItems.at(EndIndex).mEndTime - mStartTime) * pitch;
qreal EndPixel = (mEndTime - mStartTime) * pitch;
qreal Height = boundingRect().height();
LabelRect.setRect(StartPixel,0,(EndPixel-StartPixel),Height);
painter->drawLine(StartPixel,0,StartPixel,Height);
painter->drawLine(EndPixel,0,EndPixel,Height);
// if(EndIndex == StartIndex)
// painter->drawText(LabelRect,mRankItems.at(EndIndex).mLabel,Qt::AlignHCenter | Qt::AlignVCenter);
// else
painter->drawText(LabelRect,mRankItems.at(EndIndex+1).mLabel,Qt::AlignHCenter | Qt::AlignVCenter);
}
}
delete painter;
}
unsigned int CRankRulerWidget::SetRange(quint64 StartTime, quint64 EndTime)
{
if(StartTime > EndTime)
return false;
if(mRankItems.isEmpty())
return false;
mStartTime = StartTime;
mEndTime = EndTime;
mTimeOffset = mRankItems.first().mStartTime;
Render();
update();
return RET_OK;
}
unsigned int CRankRulerWidget::AddRankItem(QString Rank, quint64 StartTime, quint64 EndTime)
{
CRankWidgetItem NewItem;
NewItem.mLabel = Rank;
NewItem.mStartTime = StartTime;
NewItem.mEndTime = EndTime;
mRankItems.append(NewItem);
return RET_OK;
}
void CRankRulerWidget::SetLabel(QString Label, int Offset)
{
QFont font;
font.setBold(true);
mLabel->setFont(font);
mLabel->setPlainText(Label);
mLabel->setPos(-Offset,boundingRect().height()/2 - mLabel->boundingRect().height()/2);
}
void CRankRulerWidget::ClearRuler()
{
mRankItems.clear();
}

View File

@ -0,0 +1,74 @@
/*******************************************************************************
* *
* Société de Transports de Montréal. *
* 2012 - 2013 *
* *
* Projet Zones Tests *
* *
* *
* *
*******************************************************************************/
/*
Description:
Description du fichier si nécessaire.
*/
/* ************************************************************************** */
/* Revision:
### 20131030 JFM
Verision d'origine.
### 20131107 Description du besoin ou du bug
Description du changement.
*/
/* ************************************************************************** */
#ifndef RANKRULERWIDGET_H
#define RANKRULERWIDGET_H
#include "GlobalDefine.h"
#include <QGraphicsWidget>
class CRankWidgetItem
{
public:
QString mLabel;
quint64 mStartTime;
quint64 mEndTime;
};
class CRankRulerWidget : public QGraphicsWidget
{
Q_OBJECT
public:
CRankRulerWidget(qreal RulerPixelWidth,QGraphicsItem *Parent = 0);
~CRankRulerWidget();
virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
unsigned int SetRange(quint64 StartTime, quint64 EndTime);
unsigned int AddRankItem(QString Rank,quint64 StartTime,quint64 EndTime);
void SetLabel(QString Label,int Offset);
void ClearRuler();
void resizeEvent(QGraphicsSceneResizeEvent *event);
private:
qreal mPixelWidth;
quint64 mStartTime, mEndTime, mTimeOffset;
qreal mPixelPitch;
QGraphicsTextItem *mLabel;
QPixmap *mRulerPixmap;
QList<CRankWidgetItem> mRankItems;
void Render();
};
#endif // RANKRULERWIDGET_H

View File

@ -0,0 +1,395 @@
/*******************************************************************************
* *
* Société de Transports de Montréal. *
* 2012 *
* *
* Projet Zones Tests *
* *
* *
* *
*******************************************************************************/
/*
Description:
Page affichant la liste des passages de train.
*/
/* ************************************************************************** */
/* Revision:
### 20131021 JFM
Verision d'origine.
### YYYMMDD Description du besoin ou du bug
Description du changement.
*/
/* ************************************************************************** */
#include "RemoteZTCtrlPage.h"
#include <QGraphicsProxyWidget>
#include "OutilZT.h"
#include <QString>
#include <QTextCodec>
#include <QHeaderView>
#include <QTextStream>
#include "TCPProtocol.h"
CRemoteZTCtrlPage::~CRemoteZTCtrlPage()
{
// delete mListParsingTimer;
}
CRemoteZTCtrlPage::CRemoteZTCtrlPage(QGraphicsWidget *Parent)
{
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
setParentItem(Parent);
mProgramHandle = 0;
mDeleteLogFile = new CTextButtonWidget("Effacer fichier LOG");
mDeleteLogFile->setParentItem(this);
mDeleteLogFile->setPos(10,10);
connect(mDeleteLogFile,SIGNAL(TxtButtonClicked(CTextButtonWidget*)),this,SLOT(ButtonClicked(CTextButtonWidget*)));
mSetZTFunctionsBtn = new CTextButtonWidget("Envoyer Config");
mSetZTFunctionsBtn->setParentItem(this);
mSetZTFunctionsBtn->setPos(10,50);
connect(mSetZTFunctionsBtn,SIGNAL(TxtButtonClicked(CTextButtonWidget*)),this,SLOT(ButtonClicked(CTextButtonWidget*)));
QFont font;
QPointF ArrayTopLeft;
ArrayTopLeft.setX(250);
ArrayTopLeft.setY(100);
qreal XButtonSpacing = 90;
qreal YLineSpacing = 40;
QString ONPixmapFilePath = "./Images/Slider_Green.png";
QString OFFPixmapFilePath = "./Images/Slider_Red.png";
QSizeF SlideButtonSize(50,30);
font.setPointSize(12);
QGraphicsTextItem *Label = new QGraphicsTextItem("Analyse",this);
Label->setFont(font);
Label->setPos(ArrayTopLeft.x() - 10,ArrayTopLeft.y() - YLineSpacing);
Label = new QGraphicsTextItem("TK",this);
Label->setFont(font);
Label->setPos(ArrayTopLeft.x() + XButtonSpacing +5 ,ArrayTopLeft.y() - YLineSpacing);
int i = 0;
Label = new QGraphicsTextItem("Frotteur Négatif:",this);
Label->setFont(font);
Label->setPos(35,ArrayTopLeft.y() + (i*YLineSpacing));
mFNFuncToggleBtn = new CToggleButtonWidget(ONPixmapFilePath,OFFPixmapFilePath,this);
mFNFuncToggleBtn->resize(SlideButtonSize);
mFNFuncToggleBtn->setPos(ArrayTopLeft.x(),ArrayTopLeft.y() + (i*YLineSpacing));
mFNTKToggleBtn = new CToggleButtonWidget(ONPixmapFilePath,OFFPixmapFilePath,this);
mFNTKToggleBtn->resize(SlideButtonSize);
mFNTKToggleBtn->setPos(ArrayTopLeft.x() + XButtonSpacing,ArrayTopLeft.y() + (i*YLineSpacing));
i++;
Label = new QGraphicsTextItem("Pneu de guidage:",this);
Label->setFont(font);
Label->setPos(35,ArrayTopLeft.y() + (i*YLineSpacing));
mPGFuncToggleBtn = new CToggleButtonWidget(ONPixmapFilePath,OFFPixmapFilePath,this);
mPGFuncToggleBtn->resize(SlideButtonSize);
mPGFuncToggleBtn->setPos(ArrayTopLeft.x(),ArrayTopLeft.y() + (i*YLineSpacing));
mPGTKToggleBtn = new CToggleButtonWidget(ONPixmapFilePath,OFFPixmapFilePath,this);
mPGTKToggleBtn->resize(SlideButtonSize);
mPGTKToggleBtn->setPos(ArrayTopLeft.x() + XButtonSpacing,ArrayTopLeft.y() + (i*YLineSpacing));
i++;
Label = new QGraphicsTextItem("Pneu porteur:",this);
Label->setFont(font);
Label->setPos(35,ArrayTopLeft.y() + (i*YLineSpacing));
mPPFuncToggleBtn = new CToggleButtonWidget(ONPixmapFilePath,OFFPixmapFilePath,this);
mPPFuncToggleBtn->resize(SlideButtonSize);
mPPFuncToggleBtn->setPos(ArrayTopLeft.x(),ArrayTopLeft.y() + (i*YLineSpacing));
mPPTKToggleBtn = new CToggleButtonWidget(ONPixmapFilePath,OFFPixmapFilePath,this);
mPPTKToggleBtn->resize(SlideButtonSize);
mPPTKToggleBtn->setPos(ArrayTopLeft.x() + XButtonSpacing,ArrayTopLeft.y() + (i*YLineSpacing));
i++;
Label = new QGraphicsTextItem("Pneu porteur ZT2:",this);
Label->setFont(font);
Label->setPos(35,ArrayTopLeft.y() + (i*YLineSpacing));
mPP2FuncToggleBtn = new CToggleButtonWidget(ONPixmapFilePath,OFFPixmapFilePath,this);
mPP2FuncToggleBtn->resize(SlideButtonSize);
mPP2FuncToggleBtn->setPos(ArrayTopLeft.x(),ArrayTopLeft.y() + (i*YLineSpacing));
mPP2TKToggleBtn = new CToggleButtonWidget(ONPixmapFilePath,OFFPixmapFilePath,this);
mPP2TKToggleBtn->resize(SlideButtonSize);
mPP2TKToggleBtn->setPos(ArrayTopLeft.x() + XButtonSpacing,ArrayTopLeft.y() + (i*YLineSpacing));
i++;
Label = new QGraphicsTextItem("ZT1:",this);
Label->setFont(font);
Label->setPos(35,ArrayTopLeft.y() + (i*YLineSpacing));
mZT1FuncToggleBtn = new CToggleButtonWidget(ONPixmapFilePath,OFFPixmapFilePath,this);
mZT1FuncToggleBtn->resize(SlideButtonSize);
mZT1FuncToggleBtn->setPos(ArrayTopLeft.x(),ArrayTopLeft.y() + (i*YLineSpacing));
connect(mZT1FuncToggleBtn,SIGNAL(ButtonToggled(CToggleButtonWidget*)),this,SLOT(ToggleButtonToggled(CToggleButtonWidget*)));
mZT1TKToggleBtn = new CToggleButtonWidget(ONPixmapFilePath,OFFPixmapFilePath,this);
mZT1TKToggleBtn->resize(SlideButtonSize);
mZT1TKToggleBtn->setPos(ArrayTopLeft.x() + XButtonSpacing,ArrayTopLeft.y() + (i*YLineSpacing));
connect(mZT1TKToggleBtn,SIGNAL(ButtonToggled(CToggleButtonWidget*)),this,SLOT(ToggleButtonToggled(CToggleButtonWidget*)));
i++;
Label = new QGraphicsTextItem("ZT2:",this);
Label->setFont(font);
Label->setPos(35,ArrayTopLeft.y() + (i*YLineSpacing));
mZT2FuncToggleBtn = new CToggleButtonWidget(ONPixmapFilePath,OFFPixmapFilePath,this);
mZT2FuncToggleBtn->resize(SlideButtonSize);
mZT2FuncToggleBtn->setPos(ArrayTopLeft.x(),ArrayTopLeft.y() + (i*YLineSpacing));
connect(mZT2FuncToggleBtn,SIGNAL(ButtonToggled(CToggleButtonWidget*)),this,SLOT(ToggleButtonToggled(CToggleButtonWidget*)));
mZT2TKToggleBtn = new CToggleButtonWidget(ONPixmapFilePath,OFFPixmapFilePath,this);
mZT2TKToggleBtn->resize(SlideButtonSize);
mZT2TKToggleBtn->setPos(ArrayTopLeft.x() + XButtonSpacing,ArrayTopLeft.y() + (i*YLineSpacing));
connect(mZT2TKToggleBtn,SIGNAL(ButtonToggled(CToggleButtonWidget*)),this,SLOT(ToggleButtonToggled(CToggleButtonWidget*)));
}
void CRemoteZTCtrlPage::ToggleButtonToggled(CToggleButtonWidget *ToggleButton)
{
if(ToggleButton == mZT1FuncToggleBtn)
{
if(mZT1FuncToggleBtn->GetButtonState() == TOGGLE_BUTTON_OFF)
{
mFNFuncToggleBtn->SetButtonState(TOGGLE_BUTTON_OFF);
mFNFuncToggleBtn->SetButtonEnabled(false);
mPGFuncToggleBtn->SetButtonState(TOGGLE_BUTTON_OFF);
mPGFuncToggleBtn->SetButtonEnabled(false);
mPPFuncToggleBtn->SetButtonState(TOGGLE_BUTTON_OFF);
mPPFuncToggleBtn->SetButtonEnabled(false);
}
else
{
mFNFuncToggleBtn->SetButtonState(TOGGLE_BUTTON_ON);
mFNFuncToggleBtn->SetButtonEnabled(true);
mPGFuncToggleBtn->SetButtonState(TOGGLE_BUTTON_ON);
mPGFuncToggleBtn->SetButtonEnabled(true);
mPPFuncToggleBtn->SetButtonState(TOGGLE_BUTTON_ON);
mPPFuncToggleBtn->SetButtonEnabled(true);
}
}
if(ToggleButton == mZT1TKToggleBtn)
{
if(mZT1TKToggleBtn->GetButtonState() == TOGGLE_BUTTON_OFF)
{
mFNTKToggleBtn->SetButtonState(TOGGLE_BUTTON_OFF);
mFNTKToggleBtn->SetButtonEnabled(false);
mPGTKToggleBtn->SetButtonState(TOGGLE_BUTTON_OFF);
mPGTKToggleBtn->SetButtonEnabled(false);
mPPTKToggleBtn->SetButtonState(TOGGLE_BUTTON_OFF);
mPPTKToggleBtn->SetButtonEnabled(false);
}
else
{
mFNTKToggleBtn->SetButtonState(TOGGLE_BUTTON_ON);
mFNTKToggleBtn->SetButtonEnabled(true);
mPGTKToggleBtn->SetButtonState(TOGGLE_BUTTON_ON);
mPGTKToggleBtn->SetButtonEnabled(true);
mPPTKToggleBtn->SetButtonState(TOGGLE_BUTTON_ON);
mPPTKToggleBtn->SetButtonEnabled(true);
}
}
if(ToggleButton == mZT2FuncToggleBtn)
{
if(mZT2FuncToggleBtn->GetButtonState() == TOGGLE_BUTTON_OFF)
{
mPP2FuncToggleBtn->SetButtonEnabled(false);
mPP2FuncToggleBtn->SetButtonState(TOGGLE_BUTTON_OFF);
}
else
{
mPP2FuncToggleBtn->SetButtonEnabled(true);
mPP2FuncToggleBtn->SetButtonState(TOGGLE_BUTTON_ON);
}
}
if(ToggleButton == mZT2TKToggleBtn)
{
if(mZT2TKToggleBtn->GetButtonState() == TOGGLE_BUTTON_OFF)
{
mPP2TKToggleBtn->SetButtonEnabled(false);
mPP2TKToggleBtn->SetButtonState(TOGGLE_BUTTON_OFF);
}
else
{
mPP2TKToggleBtn->SetButtonEnabled(true);
mPP2TKToggleBtn->SetButtonState(TOGGLE_BUTTON_ON);
}
}
}
void CRemoteZTCtrlPage::resizeEvent(QGraphicsSceneResizeEvent *event)
{
Q_UNUSED(event)
// mBackgroundRect->setRect(boundingRect());
}
void CRemoteZTCtrlPage::ButtonClicked(CTextButtonWidget *BtnPtr)
{
if(BtnPtr == mDeleteLogFile)
{
mProgramHandle->DeleteRemoteZTLogRequest();
}
else if(BtnPtr == mSetZTFunctionsBtn)
{
CTCPZTFunctionsStatus FunctionsConfig;
//update FN flags
if(mFNFuncToggleBtn->GetButtonState() == TOGGLE_BUTTON_ON)
FunctionsConfig.mFNAnalysisActive = true;
else
FunctionsConfig.mFNAnalysisActive = false;
if(mFNTKToggleBtn->GetButtonState() == TOGGLE_BUTTON_ON)
FunctionsConfig.mFNTKActive = true;
else
FunctionsConfig.mFNTKActive = false;
//update PG flags
if(mPGFuncToggleBtn->GetButtonState() == TOGGLE_BUTTON_ON)
FunctionsConfig.mPGAnalysisActive = true;
else
FunctionsConfig.mPGAnalysisActive = false;
if(mPGTKToggleBtn->GetButtonState() == TOGGLE_BUTTON_ON)
FunctionsConfig.mPGTKActive = true;
else
FunctionsConfig.mPGTKActive = false;
//update PP flags
if(mPPFuncToggleBtn->GetButtonState() == TOGGLE_BUTTON_ON)
FunctionsConfig.mPP1AnalysisActive = true;
else
FunctionsConfig.mPP1AnalysisActive = false;
if(mPPTKToggleBtn->GetButtonState() == TOGGLE_BUTTON_ON)
FunctionsConfig.mPP1TKActive = true;
else
FunctionsConfig.mPP1TKActive = false;
//update PP2 flags
if(mPP2FuncToggleBtn->GetButtonState() == TOGGLE_BUTTON_ON)
FunctionsConfig.mPP2AnalysisActive = true;
else
FunctionsConfig.mPP2AnalysisActive = false;
if(mPP2TKToggleBtn->GetButtonState())
FunctionsConfig.mPP2TKActive = true;
else
FunctionsConfig.mPP2TKActive = false;
//update ZT1 flags
if(mZT1FuncToggleBtn->GetButtonState() == TOGGLE_BUTTON_ON)
FunctionsConfig.mZT1AnalysisActive = true;
else
FunctionsConfig.mZT1AnalysisActive = false;
if(mZT1TKToggleBtn->GetButtonState())
FunctionsConfig.mZT1TKActive = true;
else
FunctionsConfig.mZT1TKActive = false;
//update ZT2 flags
if(mZT2FuncToggleBtn->GetButtonState() == TOGGLE_BUTTON_ON)
FunctionsConfig.mZT2AnalysisActive = true;
else
FunctionsConfig.mZT2AnalysisActive = false;
if(mZT2TKToggleBtn->GetButtonState())
FunctionsConfig.mZT2TKActive = true;
else
FunctionsConfig.mZT2TKActive = false;
mProgramHandle->SetZTFunctionsStatus(FunctionsConfig);
}
}
void CRemoteZTCtrlPage::UpdateDisplay(const CTCPZTStatus *RemoteZTStatus)
{
//update FN buttons
if(RemoteZTStatus->mFNAnalysisActive == true)
mFNFuncToggleBtn->SetButtonState(TOGGLE_BUTTON_ON);
else
mFNFuncToggleBtn->SetButtonState(TOGGLE_BUTTON_OFF);
if(RemoteZTStatus->mFNTKActive == true)
mFNTKToggleBtn->SetButtonState(TOGGLE_BUTTON_ON);
else
mFNTKToggleBtn->SetButtonState(TOGGLE_BUTTON_OFF);
//update PG buttons
if(RemoteZTStatus->mPGAnalysisActive == true)
mPGFuncToggleBtn->SetButtonState(TOGGLE_BUTTON_ON);
else
mPGFuncToggleBtn->SetButtonState(TOGGLE_BUTTON_OFF);
if(RemoteZTStatus->mPGTKActive == true)
mPGTKToggleBtn->SetButtonState(TOGGLE_BUTTON_ON);
else
mPGTKToggleBtn->SetButtonState(TOGGLE_BUTTON_OFF);
//update PP buttons
if(RemoteZTStatus->mPP1AnalysisActive == true)
mPPFuncToggleBtn->SetButtonState(TOGGLE_BUTTON_ON);
else
mPPFuncToggleBtn->SetButtonState(TOGGLE_BUTTON_OFF);
if(RemoteZTStatus->mPP1TKActive == true)
mPPTKToggleBtn->SetButtonState(TOGGLE_BUTTON_ON);
else
mPPTKToggleBtn->SetButtonState(TOGGLE_BUTTON_OFF);
//update PP2 buttons
if(RemoteZTStatus->mPP2AnalysisActive == true)
mPP2FuncToggleBtn->SetButtonState(TOGGLE_BUTTON_ON);
else
mPP2FuncToggleBtn->SetButtonState(TOGGLE_BUTTON_OFF);
if(RemoteZTStatus->mPP2TKActive == true)
mPP2TKToggleBtn->SetButtonState(TOGGLE_BUTTON_ON);
else
mPP2TKToggleBtn->SetButtonState(TOGGLE_BUTTON_OFF);
//update ZT1 buttons
if(RemoteZTStatus->mZT1AnalysisActive == true)
mZT1FuncToggleBtn->SetButtonState(TOGGLE_BUTTON_ON);
else
mZT1FuncToggleBtn->SetButtonState(TOGGLE_BUTTON_OFF);
if(RemoteZTStatus->mZT1TKActive == true)
mZT1TKToggleBtn->SetButtonState(TOGGLE_BUTTON_ON);
else
mZT1TKToggleBtn->SetButtonState(TOGGLE_BUTTON_OFF);
//update ZT2 buttons
if(RemoteZTStatus->mZT2AnalysisActive == true)
mZT2FuncToggleBtn->SetButtonState(TOGGLE_BUTTON_ON);
else
mZT2FuncToggleBtn->SetButtonState(TOGGLE_BUTTON_OFF);
if(RemoteZTStatus->mZT2TKActive == true)
mZT2TKToggleBtn->SetButtonState(TOGGLE_BUTTON_ON);
else
mZT2TKToggleBtn->SetButtonState(TOGGLE_BUTTON_OFF);
}
void CRemoteZTCtrlPage::NetworkZTConnected(int ID)
{
}
void CRemoteZTCtrlPage::NetworkZTDisconnected(int ID)
{
}
//Grab the mouse if the user clicks outside buttons
void CRemoteZTCtrlPage::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
// qDebug("CRemoteZTCtrlPage");
Q_UNUSED(event)
}
void CRemoteZTCtrlPage::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
Q_UNUSED(event)
}

View File

@ -0,0 +1,82 @@
/*******************************************************************************
* *
* Société de Transports de Montréal. *
* 2012 *
* *
* Projet Zones Tests *
* *
* *
* *
*******************************************************************************/
/*
Description:
Description du fichier si nécessaire.
*/
/* ************************************************************************** */
/* Revision:
### 20131024 JFM
Verision d'origine.
### YYYMMDD Description du besoin ou du bug
Description du changement.
*/
/* ************************************************************************** */
#ifndef REMOTEZTCTRLPAGE_H
#define REMOTEZTCTRLPAGE_H
#include "GlobalDefine.h"
#include <QGraphicsWidget>
#include "Guipage.h"
#include <QString>
#include "TextButtonWidget.h"
#include "ToggleButtonWidget.h"
class COutilZT;
class CTCPZTStatus;
class CRemoteZTCtrlPage : public CGuiPage
{
Q_OBJECT
public:
virtual ~CRemoteZTCtrlPage();
CRemoteZTCtrlPage(QGraphicsWidget *Parent = 0);
COutilZT *mProgramHandle;
CTextButtonWidget *mDeleteLogFile;
CTextButtonWidget *mSetZTFunctionsBtn;
CToggleButtonWidget *mFNFuncToggleBtn, *mFNTKToggleBtn;
CToggleButtonWidget *mPGFuncToggleBtn, *mPGTKToggleBtn;
CToggleButtonWidget *mPPFuncToggleBtn, *mPPTKToggleBtn;
CToggleButtonWidget *mPP2FuncToggleBtn, *mPP2TKToggleBtn;
CToggleButtonWidget *mZT1FuncToggleBtn, *mZT1TKToggleBtn;
CToggleButtonWidget *mZT2FuncToggleBtn, *mZT2TKToggleBtn;
void UpdateDisplay(const CTCPZTStatus *RemoteZTStatus);
virtual void resizeEvent(QGraphicsSceneResizeEvent *event);
virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
private:
public slots:
void ButtonClicked(CTextButtonWidget *);
void NetworkZTConnected(int);
void NetworkZTDisconnected(int);
void ToggleButtonToggled(CToggleButtonWidget *ToggleButton);
// void ParsingTimerExipred();
};
#endif // REMOTEZTPAGE_H

View File

@ -0,0 +1,182 @@
/*******************************************************************************
* *
* Société de Transports de Montréal. *
* 2012 *
* *
* Projet Zones Tests *
* *
* *
* *
*******************************************************************************/
/*
Description:
Page affichant la liste des passages de train.
*/
/* ************************************************************************** */
/* Revision:
### 20131021 JFM
Verision d'origine.
### YYYMMDD Description du besoin ou du bug
Description du changement.
*/
/* ************************************************************************** */
#include "RemoteZTPage.h"
#include <QGraphicsProxyWidget>
#include "OutilZT.h"
#include <QString>
#include <QTextCodec>
#include <QHeaderView>
#include <QTextStream>
CRemoteZTPage::~CRemoteZTPage()
{
// delete mListParsingTimer;
}
CRemoteZTPage::CRemoteZTPage(QGraphicsWidget *Parent)
{
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
setParentItem(Parent);
mProgramHandle = 0;
QFont font;
font.setPointSize(20);
font.setBold(true);
mStationName = new QGraphicsTextItem(this);
mStationName->setPlainText("Non connecté");
mStationName->setFont(font);
mStationName->setPos(20,10);
font.setPointSize(15);
font.setBold(false);
mRemoteZTStatus = new QGraphicsTextItem(this);
mRemoteZTStatus->setPlainText("Status de la ZT:");
mRemoteZTStatus->setFont(font);
mRemoteZTStatus->setPos(20,60);
}
void CRemoteZTPage::SetRemoteZTName(QString Name)
{
mStationName->setPlainText(Name);
}
void CRemoteZTPage::SetRemoteZTStatus(const CTCPZTStatus *status)
{
// QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
QString StatString;
QTextStream stream(&StatString,QIODevice::ReadWrite);
StatString.clear();
stream.seek(0);
stream.setAutoDetectUnicode(true);
StatString.append("Status de la ZT:\n");
StatString.append("ZT1: ");
switch(status->mZT1Status)
{
case SB_ZT_ACTIVE_STATUS:
{
StatString.append("ACTIVÉE");
break;
}
case SB_ZT_INACTIVE_STATUS:
{
StatString.append("DÉSACTIVÉE");
break;
}
case SB_ZT_NOT_PRESENT_STATUS:
{
StatString.append("ABSENTE (!?)");
break;
}
case SB_ZT_DISABLED_STATUS:
{
StatString.append("HORS-SERVICE");
break;
}
}
StatString.append("\n");
StatString.append("ZT2: ");
switch(status->mZT2Status)
{
case SB_ZT_ACTIVE_STATUS:
{
StatString.append("ACTIVÉE");
break;
}
case SB_ZT_INACTIVE_STATUS:
{
StatString.append("DÉSACTIVÉE");
break;
}
case SB_ZT_NOT_PRESENT_STATUS:
{
StatString.append("ABSENTE");
break;
}
case SB_ZT_DISABLED_STATUS:
{
StatString.append("HORS-SERVICE");
break;
}
}
StatString.append("\n");
StatString.append(QString("Nombre de passages: %1\n").arg(status->mNbPass));
StatString.append(QString("Nombre de déclenchements: %1\n").arg(status->mNbTrigs));
StatString.append(QString("Date de démarrage de la ZT: %1\n").arg(status->mZTStartDateTime.toString("yyyy/MM/dd - hh:mm")));
StatString.append(QString("Date actuelle de la ZT: %1\n").arg(status->mActualDateTime.toString("yyyy/MM/dd - hh:mm")));
StatString.append(QString("Seuil du pneu de guidage: %1\n").arg(status->mPGTreshold));
StatString.append(QString( "Mode Maintenance activé: %1\n").arg(status->mModeMaintenanceON));
StatString.append(QString("Mode calibration activé: %1\n").arg(status->mCalibModeON));
StatString.append(QString("Clef USB connectée: %1\n").arg(status->mUSBKeyConnected));
StatString.append(QString("Frotteur négatif: TK=[%1] - Analyse=[%2]\n").arg(status->mFNTKActive).arg(status->mFNAnalysisActive));
StatString.append(QString("Pneu de guidage: TK=[%1] - Analyse=[%2]\n").arg(status->mPGTKActive).arg(status->mPGAnalysisActive));
StatString.append(QString("Pneu porteur: TK=[%1] - Analyse=[%2]\n").arg(status->mPP1TKActive).arg(status->mPP1AnalysisActive));
StatString.append(QString("Pneu porteur ZT2: TK=[%1] - Analyse=[%2]\n").arg(status->mPP2TKActive).arg(status->mPP2AnalysisActive));
StatString.append(QString("ZT1: TK=[%1] - Analyse=[%2]\n").arg(status->mZT1TKActive).arg(status->mZT1AnalysisActive));
StatString.append(QString("ZT2: TK=[%1] - Analyse=[%2]\n").arg(status->mZT2TKActive).arg(status->mZT2AnalysisActive));
mRemoteZTStatus->setPlainText(StatString);
}
void CRemoteZTPage::resizeEvent(QGraphicsSceneResizeEvent *event)
{
Q_UNUSED(event)
// mBackgroundRect->setRect(boundingRect());
}
void CRemoteZTPage::ButtonClicked(CTextButtonWidget *BtnPtr)
{
}
void CRemoteZTPage::NetworkZTConnected(int ID)
{
}
void CRemoteZTPage::NetworkZTDisconnected(int ID)
{
mStationName->setPlainText("Non connecté");
mRemoteZTStatus->setPlainText("Status de la ZT:");
}
//Grab the mouse if the user clicks outside buttons
void CRemoteZTPage::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
// qDebug("CRemoteZTPage");
Q_UNUSED(event)
}
void CRemoteZTPage::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
Q_UNUSED(event)
}

View File

@ -0,0 +1,74 @@
/*******************************************************************************
* *
* Société de Transports de Montréal. *
* 2012 *
* *
* Projet Zones Tests *
* *
* *
* *
*******************************************************************************/
/*
Description:
Description du fichier si nécessaire.
*/
/* ************************************************************************** */
/* Revision:
### 20131024 JFM
Verision d'origine.
### YYYMMDD Description du besoin ou du bug
Description du changement.
*/
/* ************************************************************************** */
#ifndef REMOTEZTPAGE_H
#define REMOTEZTPAGE_H
#include "GlobalDefine.h"
#include <QGraphicsWidget>
#include "Guipage.h"
#include <QString>
#include "ToggleTextButtonWidget.h"
class COutilZT;
class CTCPZTStatus;
class CRemoteZTPage : public CGuiPage
{
Q_OBJECT
public:
virtual ~CRemoteZTPage();
CRemoteZTPage(QGraphicsWidget *Parent = 0);
void SetRemoteZTName(QString Name);
void SetRemoteZTStatus(const CTCPZTStatus *status);
COutilZT *mProgramHandle;
virtual void resizeEvent(QGraphicsSceneResizeEvent *event);
virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
private:
QGraphicsTextItem *mStationName;
QGraphicsTextItem *mRemoteZTStatus;
public slots:
void ButtonClicked(CTextButtonWidget *);
void NetworkZTConnected(int);
void NetworkZTDisconnected(int);
// void ParsingTimerExipred();
};
#endif // REMOTEZTPAGE_H

View File

@ -0,0 +1,277 @@
/*******************************************************************************
* *
* Société de Transports de Montréal. *
* 2013 *
* *
* Projet Zones Tests *
* *
* *
* *
*******************************************************************************/
/*
Description:
Widget Bouton dans lequel est affiché du texte. Une image peut aussi être
affichée à l'intérieur du bouton.
*/
/* ************************************************************************** */
/* Revision:
### 20130306 JFM
Verision d'origine.
### YYYYMMDD Description du besoin ou du bug
Description du changement.
*/
/* ************************************************************************** */
#include "TextButtonWidget.h"
#include <QPainter>
#include <QGraphicsSceneMouseEvent>
CTextButtonWidget::CTextButtonWidget(QString Text, int TextButtonData,int ButtonHeight,int ButtonWidth,int FontSize, QPixmap *ButtonImage)
{
mIsEnabled = true;
if(ButtonImage)
{
mButtonImagePtr = ButtonImage;
}
else
mButtonImagePtr = 0;
mIsPressed = false;
mWidgetText = Text;
mTextButtonData = TextButtonData;
mButtonHeight = ButtonHeight;
mBackgroundColor = QColor(245, 245, 255, 220);
if(FontSize == 0)
mFontSize = mButtonHeight -10;
else
mFontSize = FontSize;
//Fit widget size with text
mTextFont.setPixelSize(mFontSize);
mTextFont.setBold(true);
int IconOffset = 0;
QFontMetrics FontMetrics(mTextFont);
if(ButtonWidth == 0)
{
if(mButtonImagePtr != 0)
IconOffset = mButtonHeight + 5;
//mButtonWidth = FontMetrics.width(mWidgetText)+IconOffset + 10;
mButtonWidth = FontMetrics.boundingRect(mWidgetText).width()+IconOffset + 10;
}
else
mButtonWidth = ButtonWidth;
resize(mButtonWidth,mButtonHeight);
// setGeometry(0,0,TEXT_BUTTON_WIDGET_WIDTH,TEXT_BUTTON_WIDGET_HEIGHT);
setGeometry(0,0,rect().width(),rect().height());
mIsSelected = false;
mWidgetOrigin.setX(0);
mWidgetOrigin.setY(0);
mTimeLine = new QTimeLine(200,this);
mTimeLine->setCurveShape(QTimeLine::SineCurve);
connect(mTimeLine, SIGNAL(valueChanged(qreal)), this, SLOT(TimeLineEvent(qreal)));
mButtonImagePtr = ButtonImage;
//QRect WidgetRect(mWidgetOrigin.x(),mWidgetOrigin.y(),TEXT_BUTTON_WIDGET_WIDTH,TEXT_BUTTON_WIDGET_HEIGHT);
QRect WidgetRect(mWidgetOrigin.x(),mWidgetOrigin.y(),rect().width(),rect().height());
QRectF textRect = WidgetRect.adjusted(5, 2, -2, -2);
// int flags = Qt::AlignVCenter | Qt::AlignLeft;
}
void CTextButtonWidget::CheckScrolling()
{
int IconOffset = 0;
if(mButtonImagePtr != 0)
IconOffset = rect().height();
QFontMetrics FontMetrics(mTextFont);
if(FontMetrics.boundingRect(mWidgetText).width()+IconOffset > rect().width())
{
mScrollingRequired = true;
mWidgetText.append(" ");
}
else
mScrollingRequired = false;
}
void CTextButtonWidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
PaintButtonWidget(painter,option,widget);
}
void CTextButtonWidget::PaintButtonWidget(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget)
{
Q_UNUSED(widget)
Q_UNUSED(option)
// painter->setOpacity(1);
if(mIsEnabled == false)
{
painter->setPen(QPen(Qt::black, 2));
}
else
{
if(mIsPressed)
painter->setPen(QPen(Qt::red, 2));
else
painter->setPen(QPen(Qt::black, 2));
}
// if(mIsAnimating)
// painter->setBrush(QColor(0, 50, 255, 220));
// else
//painter->setBrush(QColor(245, 245, 255, 220));
painter->setBrush(mBackgroundColor);
//QRect WidgetRect(mWidgetOrigin.x(),mWidgetOrigin.y(),TEXT_BUTTON_WIDGET_WIDTH,TEXT_BUTTON_WIDGET_HEIGHT);
QRect WidgetRect(mWidgetOrigin.x(),mWidgetOrigin.y(),rect().width(),rect().height());
//painter->drawRoundedRect(WidgetRect,10,10);
painter->drawRect(WidgetRect);
QRectF textRect;
if(mButtonImagePtr)
textRect = WidgetRect.adjusted(rect().height() + 5, 2, -2, -2); //if there is an image, it will be square so text must begin at 5 + height of button (height determines size of image)
else
textRect = WidgetRect.adjusted(5, 2, -2, -2);
int flags = Qt::AlignVCenter | Qt::AlignLeft;
// QFont font;
// font.setPixelSize(mButtonHeight/2 - 10);
// font.setBold(true);
painter->setPen(QPen(Qt::black,1));
painter->setFont(mTextFont);
painter->drawText(textRect, flags, mWidgetText);
if(mButtonImagePtr)
{
painter->drawPixmap(WidgetRect.left(),WidgetRect.top(),mButtonImagePtr->scaled(rect().height(),rect().height()));
}
}
void CTextButtonWidget::SetButtonImage(QPixmap *ButtonImage)
{
if(ButtonImage != NULL)
{
mButtonImagePtr = ButtonImage;
update(rect());
}
}
void CTextButtonWidget::SetButtonText(QString ButtonText)
{
mWidgetText = ButtonText;
update(rect());
}
void CTextButtonWidget::SetButtonPos(int x, int y)
{
mWidgetOrigin.setX(x);
mWidgetOrigin.setY(y);
}
void CTextButtonWidget::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
Q_UNUSED(event)
// qDebug("Mouse pressed Text Button Widget");
// mIsSelected = true;
// event->ignore();
// update();
// qDebug("Mouse pressed Text Button Widget");
if(mIsEnabled == false)
return;
mIsPressed = true;
update(rect());
emit TxtButtonPressed(this);
// QGraphicsWidget::mousePressEvent(event);
}
void CTextButtonWidget::SetBackgroundColor(QColor color)
{
mBackgroundColor = color;
update(rect());
}
void CTextButtonWidget::mouseReleaseEvent( QGraphicsSceneMouseEvent * event)
{
Q_UNUSED(event)
///* qDebug("Mouse released Text Button Widget");
// mIsSelected = false;
// update();
// if(isVisible())
// emit clicked(this);
// event->ignore();*/
// //qDebug("Start Timeline");
// mIsAnimating = true;
// mTimeLine->start();
// qDebug("Mouse released Text Button Widget");
if(mIsEnabled == false)
return;
mIsPressed = false;
update(rect());
emit TxtButtonReleased(this);
// qDebug("Text Button Widget clicked");
emit TxtButtonClicked(this);
// QGraphicsWidget::mouseReleaseEvent(event);
}
//void CTextButtonWidget::ButtonClicked()
//{
// mIsSelected = false;
// qDebug("A button is clicked");
//}
void CTextButtonWidget::TimeLineEvent(qreal value)
{
Q_UNUSED(value)
//// ClickTransparency = 255*value;
// update();
// if(value == 0)
// {
// mIsAnimating = false;
// emit clicked(this);
// }
}
void CTextButtonWidget::TickScrollingText()
{
if(mScrollingRequired && isVisible())
{
QChar Character = mWidgetText.at(mSongNameIndex);
mWidgetText.remove(mSongNameIndex,1);
mWidgetText.append(Character);
update();
}
}
void CTextButtonWidget::DisableButton()
{
mIsEnabled = false;
mBackgroundColor = QColor(100, 100, 110, 220);
update(rect());
}
void CTextButtonWidget::EnableButton()
{
mIsEnabled = true;
mBackgroundColor = QColor(245, 245, 255, 220);
update(rect());
}

View File

@ -0,0 +1,64 @@
#ifndef TEXTBUTTONWIDGET_H
#define TEXTBUTTONWIDGET_H
#include <QGraphicsWidget>
#include <QRect>
#include <QTimeLine>
#define TEXT_BUTTON_WIDGET_WIDTH 280
#define TEXT_BUTTON_WIDGET_HEIGHT 25
class CTextButtonWidget : public QGraphicsWidget
{
Q_OBJECT
public:
CTextButtonWidget(QString Text, int TextButtonData = 0,int ButtonHeight = TEXT_BUTTON_WIDGET_HEIGHT,int ButtonWidth = 0,int FontSize = 0,QPixmap *ButtonImage = 0);
QString mWidgetText;
QString mDisplayText;
int mTextButtonData;
bool mIsSelected;
QRectF mButtonsAreaWindow;
QTimeLine *mTimeLine;
bool mIsPressed;
bool mScrollingRequired;
qreal ClickTransparency;
int mSongNameIndex;
QPixmap *mButtonImagePtr;
unsigned int mButtonHeight;
unsigned int mButtonWidth;
unsigned int mFontSize;
QColor mBackgroundColor;
QFont mTextFont;
bool mIsEnabled;
void paint( QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget = 0 );
void SetButtonPos(int x, int y);
void PaintButtonWidget(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget = 0 );
void SetButtonImage(QPixmap *ButtonImage);
void SetButtonText(QString ButtonText);
void SetBackgroundColor(QColor color);
void CheckScrolling(void);
void EnableButton(void);
void DisableButton(void);
QPoint mWidgetOrigin;
virtual void mousePressEvent ( QGraphicsSceneMouseEvent * event );
virtual void mouseReleaseEvent( QGraphicsSceneMouseEvent * event);
void ButtonClicked(void);
public slots:
void TimeLineEvent(qreal value);
void TickScrollingText();
signals:
void TxtButtonClicked(CTextButtonWidget *TextButtonPtr);
void TxtButtonPressed(CTextButtonWidget *TextButtonPtr);
void TxtButtonReleased(CTextButtonWidget *TextButtonPtr);
};
#endif // TEXTBUTTONWIDGET_H

View File

@ -0,0 +1,130 @@
/*******************************************************************************
* *
* Société de Transports de Montréal. *
* 2013 *
* *
* Projet Zones Tests *
* *
* *
* *
*******************************************************************************/
/*
Description:
Widget Bouton de style "toggle" qui affiche une image lorsqu'il est désactivé
et une autre image lorsqu'il est activé.
*/
/* ************************************************************************** */
/* Revision:
### 20130306 JFM
Verision d'origine.
### YYYYMMDD Description du besoin ou du bug
Description du changement.
*/
/* ************************************************************************** */
#include "ToggleButtonWidget.h"
#include <QPainter>
#include <QGraphicsSceneMouseEvent>
CToggleButtonWidget::CToggleButtonWidget(QString ONImageFilePath, QString OFFImageFilePath,QGraphicsItem *Parent, QString Label)
{
setParentItem(Parent);
mButtonState = TOGGLE_BUTTON_OFF;
mONPixmap = new QGraphicsPixmapItem(QPixmap(ONImageFilePath), this);
mONPixmap->hide();
mOFFPixmap = new QGraphicsPixmapItem(QPixmap(OFFImageFilePath), this);
mOFFPixmap->show();
mButtonEnabled = true;
mButtonData = 0;
if(Label.isEmpty() == false)
{
QGraphicsTextItem *BtnLabel = new QGraphicsTextItem(this);
BtnLabel->setPlainText(Label);
BtnLabel->adjustSize();
BtnLabel->setPos(-BtnLabel->boundingRect().width()-3,0);
}
}
void CToggleButtonWidget::SetData(unsigned int data)
{
mButtonData = data;
}
unsigned int CToggleButtonWidget::GetData()
{
return mButtonData;
}
void CToggleButtonWidget::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
Q_UNUSED(event)
}
void CToggleButtonWidget::mouseReleaseEvent( QGraphicsSceneMouseEvent * event)
{
Q_UNUSED(event)
if(mButtonEnabled == false)
return ;
if(mButtonState == TOGGLE_BUTTON_ON)
mButtonState = TOGGLE_BUTTON_OFF;
else
mButtonState = TOGGLE_BUTTON_ON;
UpdateButton();
emit ButtonToggled(this);
}
void CToggleButtonWidget::resizeEvent(QGraphicsSceneResizeEvent *event)
{
Q_UNUSED(event)
mONPixmap->setPixmap(mONPixmap->pixmap().scaled(boundingRect().width(),boundingRect().height()));
mOFFPixmap->setPixmap(mOFFPixmap->pixmap().scaled(boundingRect().width(),boundingRect().height()));
}
unsigned int CToggleButtonWidget::GetButtonState()
{
return mButtonState;
}
unsigned int CToggleButtonWidget::SetButtonEnabled(bool Enabled)
{
mButtonEnabled = Enabled;
return RET_OK;
}
unsigned int CToggleButtonWidget::SetButtonState(unsigned int State)
{
if(mButtonState != TOGGLE_BUTTON_OFF && mButtonState != TOGGLE_BUTTON_ON)
return RET_ERROR;
mButtonState = State;
UpdateButton();
return RET_OK;
}
void CToggleButtonWidget::UpdateButton()
{
if(mButtonState == TOGGLE_BUTTON_OFF)
{
mOFFPixmap->show();
mONPixmap->hide();
}
else
{
mOFFPixmap->hide();
mONPixmap->show();
}
}

View File

@ -0,0 +1,47 @@
#ifndef TOGGLEBUTTONWIDGET_H
#define TOGGLEBUTTONWIDGET_H
#include "GlobalDefine.h"
#include <QGraphicsWidget>
#include <QRect>
#include <QTimeLine>
#define TOGGLE_BUTTON_ON 1
#define TOGGLE_BUTTON_OFF 0
class CToggleButtonWidget : public QGraphicsWidget
{
Q_OBJECT
public:
CToggleButtonWidget(QString ONImageFilePath, QString OFFImageFilePath,QGraphicsItem *Parent,QString Label = QString());
virtual void mousePressEvent ( QGraphicsSceneMouseEvent * event );
virtual void mouseReleaseEvent( QGraphicsSceneMouseEvent * event);
virtual void resizeEvent(QGraphicsSceneResizeEvent *event);
QGraphicsPixmapItem *mONPixmap, *mOFFPixmap;
unsigned int GetButtonState();
unsigned int SetButtonState(unsigned int State);
unsigned int SetButtonEnabled(bool Enabled);
void SetData(unsigned int data);
unsigned int GetData();
private:
unsigned int mButtonState;
bool mButtonEnabled;
unsigned int mButtonData;
void UpdateButton();
signals:
void ButtonToggled(CToggleButtonWidget*);
};
#endif // TOGGLEBUTTONWIDGET_H

View File

@ -0,0 +1,91 @@
/*******************************************************************************
* *
* Société de Transports de Montréal. *
* 2013 *
* *
* Projet Zones Tests *
* *
* *
* *
*******************************************************************************/
/*
Description:
.
*/
/* ************************************************************************** */
/* Revision:
### 20130306 JFM
Verision d'origine.
### YYYYMMDD Description du besoin ou du bug
Description du changement.
*/
/* ************************************************************************** */
#include "TextButtonWidget.h"
#include <QPainter>
#include <ToggleTextButtonWidget.h>
CToggleTextButtonWidget::CToggleTextButtonWidget(QString ActivatedText, QString DeActivatedText, QPixmap ActivatedButtonImage, QPixmap DeActivatedButtonImage, int ButtonHeight,int ButtonWidth,int FontSize, int ToggleTextButtonData)
{
mButtonState = false;
mActivatedBtnText = ActivatedText;
mDeActivatedButtonText = DeActivatedText;
mActivatedBtnImage = ActivatedButtonImage;
mDeActivatedBtnImage = DeActivatedButtonImage;
mButtonHeight = ButtonHeight;
mButtonData = ToggleTextButtonData;
mTextButton = new CTextButtonWidget(DeActivatedText,mButtonData,mButtonHeight,ButtonWidth,FontSize,&mDeActivatedBtnImage);
connect(mTextButton, SIGNAL(TxtButtonClicked(CTextButtonWidget *)), this, SLOT(ChildTextButtonClicked(CTextButtonWidget *)));
setGeometry(mTextButton->rect());
mTextButton->setParentItem(this);
}
CToggleTextButtonWidget::~CToggleTextButtonWidget()
{
delete mTextButton;
}
void CToggleTextButtonWidget::ChildTextButtonClicked(CTextButtonWidget *TextButtonPtr)
{
if(mButtonState)
{
mTextButton->SetButtonImage(&mDeActivatedBtnImage);
mTextButton->SetButtonText(mDeActivatedButtonText);
mTextButton->SetBackgroundColor(QColor(245, 245, 255, 220));
mButtonState = false;
emit ToggleBtnDeActivate(this);
}
else
{
mTextButton->SetButtonImage(&mActivatedBtnImage);
mTextButton->SetButtonText(mActivatedBtnText);
mTextButton->SetBackgroundColor(Qt::green);
mButtonState = true;
emit ToggleBtnActivate(this);
}
}
void CToggleTextButtonWidget::ForceActivation()
{
mTextButton->SetButtonImage(&mActivatedBtnImage);
mTextButton->SetButtonText(mActivatedBtnText);
mTextButton->SetBackgroundColor(Qt::green);
mButtonState = true;
}
void CToggleTextButtonWidget::ForceDeactivation()
{
mTextButton->SetButtonImage(&mDeActivatedBtnImage);
mTextButton->SetButtonText(mDeActivatedButtonText);
mTextButton->SetBackgroundColor(QColor(245, 245, 255, 220));
mButtonState = false;
}
void CToggleTextButtonWidget::OverrideText(QString text)
{
mTextButton->SetButtonText(text);
}

View File

@ -0,0 +1,44 @@
#ifndef TOGGLETEXTBUTTONWIDGET_H
#define TOGGLETEXTBUTTONWIDGET_H
#include <QGraphicsWidget>
#include <QRect>
#include <QTimeLine>
#include "TextButtonWidget.h"
#define TOGGLE_TEXT_BUTTON_WIDGET_WIDTH 280
#define TOGGLE_TEXT_BUTTON_WIDGET_HEIGHT 25
class CToggleTextButtonWidget : public QGraphicsWidget
{
Q_OBJECT
public:
CToggleTextButtonWidget(QString ActivatedText,QString DeActivatedText,
QPixmap ActivatedButtonImage,QPixmap DeActivatedButtonImage,
int ButtonHeight = TOGGLE_TEXT_BUTTON_WIDGET_HEIGHT,int ButtonWidth = 0,int FontSize = 0, int ToggleTextButtonData = 0);
virtual ~CToggleTextButtonWidget();
void ForceDeactivation();
void ForceActivation();
void OverrideText(QString text);
public slots:
void ChildTextButtonClicked(CTextButtonWidget *TextButtonPtr);
// void TxtButtonPressed(CTextButtonWidget *TextButtonPtr);
// void TxtButtonReleased(CTextButtonWidget *TextButtonPtr);
signals:
void ToggleBtnActivate(CToggleTextButtonWidget* ButtonInstancePtr);
void ToggleBtnDeActivate(CToggleTextButtonWidget* ButtonInstancePtr);
private:
CTextButtonWidget *mTextButton;
QString mActivatedBtnText,mDeActivatedButtonText;
QPixmap mActivatedBtnImage,mDeActivatedBtnImage;
unsigned int mButtonHeight,mButtonWidth;
int mButtonData;
bool mButtonState; //false = deactivated(up), true = activated (down)
};
#endif // TOGGLETEXTBUTTONWIDGET_H

View File

@ -0,0 +1,92 @@
/*******************************************************************************
* *
* Société de Transports de Montréal. *
* 2013 *
* *
* Projet Zones Tests *
* *
* *
* *
*******************************************************************************/
/*
Description:
.
*/
/* ************************************************************************** */
/* Revision:
### 20130306 JFM
Verision d'origine.
### YYYYMMDD Description du besoin ou du bug
Description du changement.
*/
/* ************************************************************************** */
#include "TxRxWidget.h"
#include <QPainter>
#define TXRX_WIDGET_SIZE 30
CTxRxWidget::CTxRxWidget(QString Label)
{
mRxLedOffPixmap = new QGraphicsPixmapItem(QPixmap("./Images/green-led-off-md.png").scaled(TXRX_WIDGET_SIZE,TXRX_WIDGET_SIZE),this);
mRxLedOnPixmap = new QGraphicsPixmapItem(QPixmap("./Images/green-led-on-md.png").scaled(TXRX_WIDGET_SIZE,TXRX_WIDGET_SIZE),this);
mTxLedOffPixmap = new QGraphicsPixmapItem(QPixmap("./Images/red-led-off-md.png").scaled(TXRX_WIDGET_SIZE,TXRX_WIDGET_SIZE),this);
mTxLedOnPixmap = new QGraphicsPixmapItem(QPixmap("./Images/red-led-on-md.png").scaled(TXRX_WIDGET_SIZE,TXRX_WIDGET_SIZE),this);
mRxLedOffPixmap->setPos(0,20);
mRxLedOnPixmap->setPos(0,20);
mTxLedOffPixmap->setPos(30,20);
mTxLedOnPixmap->setPos(30,20);
mRxLedOnPixmap->hide();
mTxLedOnPixmap->hide();
mRxToggleTimer = new QTimer();
connect(mRxToggleTimer, SIGNAL(timeout()), this, SLOT(ToggleRxLed()));
mRxToggleTimer->setSingleShot(true);
mTxToggleTimer = new QTimer();
connect(mTxToggleTimer, SIGNAL(timeout()), this, SLOT(ToggleTxLed()));
mTxToggleTimer->setSingleShot(true);
mLabel = new QGraphicsTextItem(this);
mLabel->setPlainText(Label);
mLabel->setPos(5,0);
}
CTxRxWidget::~CTxRxWidget()
{
}
void CTxRxWidget::Receive()
{
mRxLedOnPixmap->show();
mRxLedOffPixmap->hide();
mRxToggleTimer->start(100);
}
void CTxRxWidget::Transmit()
{
mTxLedOnPixmap->show();
mTxLedOffPixmap->hide();
mTxToggleTimer->start(50);
}
void CTxRxWidget::ToggleRxLed()
{
mRxLedOnPixmap->hide();
mRxLedOffPixmap->show();
}
void CTxRxWidget::ToggleTxLed()
{
mTxLedOnPixmap->hide();
mTxLedOffPixmap->show();
}

View File

@ -0,0 +1,33 @@
#ifndef TXRXWIDGET_H
#define TXRXWIDGET_H
#include <QGraphicsWidget>
#include <QRect>
#include <QTimer>
class CTxRxWidget : public QGraphicsWidget
{
Q_OBJECT
public:
CTxRxWidget(QString Lable = QString());
virtual ~CTxRxWidget();
QGraphicsTextItem *mLabel;
QGraphicsPixmapItem *mRxLedOnPixmap,*mRxLedOffPixmap;
QGraphicsPixmapItem *mTxLedOnPixmap,*mTxLedOffPixmap;
void Receive(void);
void Transmit(void);
QTimer *mRxToggleTimer;
QTimer *mTxToggleTimer;
public slots:
void ToggleRxLed();
void ToggleTxLed();
};
#endif // TXRXWIDGET_H

View File

@ -0,0 +1,165 @@
/*******************************************************************************
* *
* Société de Transports de Montréal. *
* 2012 *
* *
* Projet Zones Tests *
* *
* *
* *
*******************************************************************************/
/*
Description:
Page permettant de visualiser le fichier ZTLog.txt
*/
/* ************************************************************************** */
/* Revision:
### 20131021 JFM
Verision d'origine.
### YYYMMDD Description du besoin ou du bug
Description du changement.
*/
/* ************************************************************************** */
#include "ZTLogViewerPage.h"
#include <QPainter>
#include "GlobalDefine.h"
#include <QDialog>
#include <QMainWindow>
#include <QFont>
#include <QGraphicsProxyWidget>
#include <QTextBlock>
#include <QScrollBar>
#include <QGraphicsSceneResizeEvent>
CZTLogViewerPage::CZTLogViewerPage(QGraphicsWidget *Parent, bool Embedded)
{
Q_UNUSED(Parent)
mZTLogText.clear();
mIsEmbedded = Embedded;
// QGraphicsTextItem *Title = new QGraphicsTextItem("Paramètres généraux",this);
// QFont font;
// font.setPointSize(18);
// Title->setFont(font);
// Title->setPos(40,10);
// Title = new QGraphicsTextItem("Ajuster date & heure",this);
// Title->setFont(font);
// Title->setPos(270,130);
if(!Embedded)
{
mBackgroundRect = new QGraphicsRectItem(boundingRect(), this);
QBrush BackgroundBrush(QColor(245, 245, 255));
mBackgroundRect->setBrush(BackgroundBrush);
mCancelButton = new CTextButtonWidget("Fermer");
mCancelButton->setParentItem(this);
mCancelButton->setPos(700,550);
connect(mCancelButton,SIGNAL(TxtButtonClicked(CTextButtonWidget*)),this,SLOT(ButtonClicked(CTextButtonWidget*)));
}
//mZTLogTextZone = new QTextEdit();
mZTLogTextZone = new QPlainTextEdit();
QGraphicsProxyWidget *Proxy = new QGraphicsProxyWidget(this);
Proxy->setWidget(mZTLogTextZone);
Proxy->setPos(10,10);
mZTLogTextZone->resize(780,500);
mZTLogTextZone->setReadOnly(true);
mZTLogTextZone->setWordWrapMode(QTextOption::NoWrap);
QPalette p = mZTLogTextZone->palette();
p.setColor(QPalette::Highlight,QColor(200,100,100));
mZTLogTextZone->setPalette(p);
}
void CZTLogViewerPage::resizeEvent(QGraphicsSceneResizeEvent *event)
{
Q_UNUSED(event)
if(mIsEmbedded)
{
mZTLogTextZone->resize(event->newSize().toSize());
}
else
{
mBackgroundRect->setRect(boundingRect());
}
}
void CZTLogViewerPage::SetZTLogText(QString Text, QString FocusText)
{
mZTLogText = Text;
LoadAndDisplayZTLog();
if(FocusText.length() != 0)
{
QTextCursor cursor = mZTLogTextZone->document()->find(FocusText);
cursor.select(QTextCursor::LineUnderCursor);
mZTLogTextZone->setFocus();
mZTLogTextZone->setTextCursor(cursor);
QScrollBar *VerticalSB = mZTLogTextZone->verticalScrollBar();
mZTLogTextZone->centerCursor();
//VerticalSB->setValue();
}
}
void CZTLogViewerPage::ButtonClicked(CTextButtonWidget *BtnPtr)
{
if(BtnPtr == mCancelButton)
{
mZTLogTextZone->clear();
hide();
}
}
void CZTLogViewerPage::LoadAndDisplayZTLog()
{
mZTLogTextZone->clear();
mZTLogTextZone->setPlainText(mZTLogText);
}
void CZTLogViewerPage::ScrollToLine(int Line)
{
QTextBlock TextBlock = mZTLogTextZone->document()->findBlockByLineNumber(Line-1);
QTextCursor cursor = mZTLogTextZone->textCursor();
cursor.setPosition(TextBlock.position());
mZTLogTextZone->setFocus();
mZTLogTextZone->setTextCursor(cursor);
mZTLogTextZone->centerCursor();
}
void CZTLogViewerPage::showEvent(QShowEvent *event)
{
return;
Q_UNUSED(event)
}
//Grab the mouse if the user clicks outside buttons
void CZTLogViewerPage::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
// qDebug("CZTLogViewerPage");
Q_UNUSED(event)
}
void CZTLogViewerPage::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
Q_UNUSED(event)
}

View File

@ -0,0 +1,74 @@
/*******************************************************************************
* *
* Société de Transports de Montréal. *
* 2012 *
* *
* Projet Zones Tests *
* *
* *
* *
*******************************************************************************/
/*
Description:
Page permettant de visualiser le fichier ZTLog.txt
*/
/* ************************************************************************** */
/* Revision:
### 20131122 JFM
Verision d'origine.
### YYYMMDD Description du besoin ou du bug
Description du changement.
*/
/* ************************************************************************** */
#ifndef ZTLOGVIEWERPAGE_H
#define ZTLOGVIEWERPAGE_H
#include "GlobalDefine.h"
#include <QGraphicsWidget>
#include "Guipage.h"
#include <QString>
#include "TextButtonWidget.h"
#include <QTextEdit>
#include <QPlainTextEdit>
class CZoneTest;
class CZTLogViewerPage : public CGuiPage
{
Q_OBJECT
public:
CZTLogViewerPage(QGraphicsWidget *Parent = 0, bool Embedded = false);
void SetZTLogText(QString Text, QString FocusText = QString());
void ScrollToLine(int Line);
virtual void resizeEvent(QGraphicsSceneResizeEvent *event);
virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
virtual void showEvent ( QShowEvent * event );
private:
QGraphicsRectItem *mBackgroundRect;
CTextButtonWidget *mCancelButton;
// QTextEdit *mZTLogTextZone;
QPlainTextEdit *mZTLogTextZone;
QString mZTLogText;
bool mIsEmbedded;
void LoadAndDisplayZTLog();
public slots:
void ButtonClicked(CTextButtonWidget *);
};
#endif // ZTLOGVIEWERPAGE_H

View File

@ -0,0 +1,272 @@
/*******************************************************************************
* *
* Société de Transports de Montréal. *
* 2012 *
* *
* Projet Zones Tests *
* *
* *
* *
*******************************************************************************/
/*
Description:
Page affichant la liste des fichiers ZTLOG.
*/
/* ************************************************************************** */
/* Revision:
### 20131021 JFM
Verision d'origine.
### YYYMMDD Description du besoin ou du bug
Description du changement.
*/
/* ************************************************************************** */
#include "ZTLogsListPage.h"
#include <QGraphicsProxyWidget>
#include "OutilZT.h"
#include "TrainLogFileMgr.h"
#include <QString>
#include <QTextCodec>
#include <QTextStream>
#include <QDebug>
#include <QFileDialog>
CZTLogsListPage::~CZTLogsListPage()
{
// delete mListParsingTimer;
}
CZTLogsListPage::CZTLogsListPage(QGraphicsWidget *Parent)
{
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
setParentItem(Parent);
mProgramHandle = 0;
mZTLogFilesManager = 0;
mStationFilter.clear();
mZTLogsTable = new QTableWidget(0,3);
QGraphicsProxyWidget *TableProxy = new QGraphicsProxyWidget(this);
TableProxy->setWidget(mZTLogsTable);
TableProxy->setPos(3,20);
TableProxy->resize(380,350);
mZTLogsTable->resize(420,350);
mZTLogsTable->setSelectionBehavior(QAbstractItemView::SelectRows);
mZTLogsTable->setSelectionMode(QAbstractItemView::SingleSelection);
mZTLogsTable->clearContents();
mZTLogsTable->setRowCount(0);
mZTLogsTable->setHorizontalHeaderLabels(QStringList() << "Station" << "Début" << "Fin");
// connect(mZTLogsTable,SIGNAL(cellClicked(int,int)),this,SLOT(LogsTableCellClicked(int,int)));
connect(mZTLogsTable,SIGNAL(currentCellChanged(int,int,int,int)),this,SLOT(LogsTableCellSelected(int,int,int,int)));
connect(mZTLogsTable,SIGNAL(cellDoubleClicked(int,int)),SLOT(TableDoubleClicked(int,int)));
mSummaryText = new QGraphicsTextItem(this);
QFont textfont;
textfont.setPointSize(12);
mSummaryText->setFont(textfont);
mSummaryText->setPlainText("ZTLog:");
mSummaryText->setPos(3,370);
QGraphicsProxyWidget *WidgetProxy = new QGraphicsProxyWidget(this);
QGraphicsTextItem *Label = new QGraphicsTextItem(this);
Label->setPlainText("Station:");
Label->setPos(190,418);
WidgetProxy = new QGraphicsProxyWidget(this);
mStationsFilterComboBox = new QComboBox();
WidgetProxy->setWidget(mStationsFilterComboBox);
WidgetProxy->setPos(250,420);
mStationsFilterComboBox->insertItems(0,QStringList() << "Toutes" << "Angrignon" << "Snowdon" << "Henri Bourassa" << "Honoré Beaugrand" << "Longueuil" << "Berri UQAM" << "Montmorency 10/12" << "Montmorency 10/22" << "Côte Vertu" << "Saint-Michel");
mStationsFilterComboBox->setSizeAdjustPolicy(QComboBox::AdjustToContents);
mStationsFilterComboBox->adjustSize();
mStationsFilterComboBox->setMaxVisibleItems(15);
connect(mStationsFilterComboBox,SIGNAL(activated(int)),this,SLOT(StationFilterSelected(int)));
}
void CZTLogsListPage::resizeEvent(QGraphicsSceneResizeEvent *event)
{
Q_UNUSED(event)
// mBackgroundRect->setRect(boundingRect());
}
void CZTLogsListPage::ButtonClicked(CTextButtonWidget *BtnPtr)
{
// if(BtnPtr == mViewLogDataButton)
// {
// if(mLogMgrHandle->GetLogsCount() == 0)
// return;
// int cursel = mZTLogsTable->selectedItems().at(0)->data(Qt::UserRole).toInt();
// CLogElement* Element = mLogMgrHandle->GetLogsList()->at(cursel);
// mProgramHandle->LogViewRequest(mLogMgrHandle->LoadLogData(Element),this);
// mLogMgrHandle->FreeLogData(Element);
// }
// else if(BtnPtr == mExportCSVLogButton)
// {
// if(mLogMgrHandle->GetLogsCount() == 0)
// return;
// QString Filename;
// int cursel = mZTLogsTable->selectedItems().at(0)->data(Qt::UserRole).toInt();
// CLogElement* Element = mLogMgrHandle->GetLogsList()->at(cursel);
// mLogMgrHandle->LoadLogData(Element);
// if(Element->mZTLogType == ZT1_LOG_TYPE)
// {
// CZT1LogElement *temp = (CZT1LogElement*)Element;
// Filename = temp->mLogFileName.replace("bin","csv");
// CTrainLogFileMgr::instance()->SaveCSVFile(Filename,&temp->mZTLogData,&temp->mFlags,&temp->mZTDetections,temp->mStationName);
// }
// else
// {
// CZT2LogElement *temp = (CZT2LogElement*)Element;
// Filename = temp->mLogFileName.replace("bin","csv");
// CTrainLogFileMgr::instance()->SaveCSVFile(Filename,&temp->mZTLogData,&temp->mZTDetections,temp->mStationName);
// }
// mLogMgrHandle->FreeLogData(Element);
// }
}
unsigned int CZTLogsListPage::RefreshList()
{
ClearTable();
mProgramHandle->ShowZTLogFile("");
QList<CZTLogFileInfo> *ZTLogsList = mZTLogFilesManager->GetZTLogsList();
if(ZTLogsList->size() == 0)
return RET_OK;
mZTLogsTable->setRowCount(ZTLogsList->size());
int CurRow = 0;
for(int i = 0; i < ZTLogsList->size(); i++)
{
QString stationtext = mStationsFilterComboBox->currentText();
if(ZTLogsList->at(i).mStationName == stationtext || stationtext == "Toutes")
{
QTableWidgetItem * NewItem = new QTableWidgetItem(ZTLogsList->at(i).mStationName);
NewItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
NewItem->setData(Qt::UserRole,QVariant(i));
mZTLogsTable->setItem(CurRow,0,NewItem);
NewItem = new QTableWidgetItem(ZTLogsList->at(i).mStartDateTime.toString("yyyy/MM/dd - hh:mm:ss"));
NewItem->setData(Qt::UserRole,QVariant(i));
NewItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
mZTLogsTable->setItem(CurRow,1,NewItem);
NewItem = new QTableWidgetItem(ZTLogsList->at(i).mEndDateTime.toString("yyyy/MM/dd - hh:mm:ss"));
NewItem->setData(Qt::UserRole,QVariant(i));
NewItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
mZTLogsTable->setItem(CurRow,2,NewItem);
CurRow++;
}
}
mZTLogsTable->setRowCount(CurRow);
mZTLogsTable->resizeColumnsToContents();
mZTLogsTable->sortItems(0,Qt::DescendingOrder);
mZTLogsTable->setCurrentCell(0,0);
LogsTableCellClicked(0,0);
return RET_OK;
}
void CZTLogsListPage::ClearTable()
{
for(int Col = 0; Col < mZTLogsTable->columnCount(); Col++)
{
for(int Row = 0; Row < mZTLogsTable->rowCount(); Row++)
{
delete mZTLogsTable->item(Row,Col);
}
}
mZTLogsTable->setRowCount(0);
mZTLogsTable->clearContents();
}
void CZTLogsListPage::LogsTableCellSelected( int row, int col, int prevrow, int prevcol)
{
Q_UNUSED(prevrow)
Q_UNUSED(prevcol)
if(row < 0 || col < 0)
return;
LogsTableCellClicked(row,col);
}
void CZTLogsListPage::LogsTableCellClicked(int row, int column)
{
Q_UNUSED(column);
int rowcount = mZTLogsTable->rowCount();
if(rowcount == 0)
return;
QList<CZTLogFileInfo> *ZTLogsList = mZTLogFilesManager->GetZTLogsList();
if(mZTLogsTable->item(row,0) == 0)
return;
int ItemIndex = mZTLogsTable->item(row,0)->data(Qt::UserRole).toInt();
QFile *ZTLogFile = new QFile(ZTLogsList->at(ItemIndex).mZTLogFilePath);
if(ZTLogFile)
{
ZTLogFile->open(QIODevice::ReadOnly | QIODevice::Text);
QString str = ZTLogFile->readAll();
ZTLogFile->close();
delete ZTLogFile;
mProgramHandle->ShowZTLogFile(str);
}
}
void CZTLogsListPage::StationFilterSelected(int Index)
{
Q_UNUSED(Index);
RefreshList();
}
//Grab the mouse if the user clicks outside buttons
void CZTLogsListPage::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
// qDebug("CLogsListPage");
Q_UNUSED(event)
}
void CZTLogsListPage::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
Q_UNUSED(event)
}
void CZTLogsListPage::CheckBoxClicked(int state)
{
Q_UNUSED(state)
RefreshList();
}
void CZTLogsListPage::TableDoubleClicked(int row, int col)
{
Q_UNUSED(col)
Q_UNUSED(row)
//ButtonClicked(mViewLogDataButton);
}

View File

@ -0,0 +1,91 @@
/*******************************************************************************
* *
* Société de Transports de Montréal. *
* 2012 *
* *
* Projet Zones Tests *
* *
* *
* *
*******************************************************************************/
/*
Description:
Description du fichier si nécessaire.
*/
/* ************************************************************************** */
/* Revision:
### 20131024 JFM
Verision d'origine.
### YYYMMDD Description du besoin ou du bug
Description du changement.
*/
/* ************************************************************************** */
#ifndef ZTLOGSLISTPAGE_H
#define ZTLOGSLISTPAGE_H
#include "GlobalDefine.h"
#include <QGraphicsWidget>
#include "Guipage.h"
#include <QString>
#include "PushButton.h"
#include "TextButtonWidget.h"
#include <QTableWidget>
#include <QCheckBox>
#include <QComboBox>
#include "ZTData.h"
#include "ZTLogFilesMgr.h"
class COutilZT;
class CZTLogsListPage : public CGuiPage
{
Q_OBJECT
public:
virtual ~CZTLogsListPage();
CZTLogsListPage(QGraphicsWidget *Parent = 0);
COutilZT *mProgramHandle;
CZTLogFilesMgr *mZTLogFilesManager;
unsigned int RefreshList();
virtual void resizeEvent(QGraphicsSceneResizeEvent *event);
virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
private:
QTableWidget *mZTLogsTable;
QGraphicsTextItem *mSummaryText;
QTimer *mListParsingTimer;
QComboBox *mStationsFilterComboBox;
QString mStationFilter;
QList<CZTLogFileInfo> *mZTLogFilesList;
void ClearTable();
public slots:
void ButtonClicked(CTextButtonWidget *);
void LogsTableCellClicked(int, int);
void LogsTableCellSelected(int,int,int,int);
void CheckBoxClicked(int);
void TableDoubleClicked(int,int);
void StationFilterSelected(int);
// void ParsingTimerExipred();
};
#endif // LOGSLISTPAGE_H

643
sources/LogMgr.cpp Normal file
View File

@ -0,0 +1,643 @@
/*******************************************************************************
* *
* 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>
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);
*DBStrm << NewElement->mPassageDateTime
<< 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();
}

143
sources/LogMgr.h Normal file
View File

@ -0,0 +1,143 @@
/*******************************************************************************
* *
* 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;
};
//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;
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

226
sources/MainPanel.cpp Normal file
View File

@ -0,0 +1,226 @@
/*******************************************************************************
* *
* Société de Transports de Montréal. *
* 2012 *
* *
* Projet Zones Tests *
* *
* *
* *
*******************************************************************************/
/*
Description:
Classe qui crée la scène ainsi que les instances des différents objets
nécessaires à l'affichage.
*/
/* ************************************************************************** */
/* Revision:
### 20121210 JFM
Verision d'origine.
### YYYYMMDD Description du besoin ou du bug
Description du changement.
*/
/* ************************************************************************** */
#include "MainPanel.h"
#include <QPushButton>
#include <QGraphicsProxyWidget>
#include <QPixmap>
#include <stdio.h>
#include <QtGui>
#include <QColor>
//#include <QtPlugin>
//#ifndef Q_OS_WIN32
//Q_IMPORT_PLUGIN(qjpeg)
//#endif
Panel::~Panel()
{
//if(scene)
//delete scene;
// delete mWelcomePage;
// delete mZTMainPage;
}
Panel::Panel()
{
scene = 0;
// setWindowFlags(Qt::Tool | Qt::FramelessWindowHint);
// // setParent(0); // Create TopLevel-Widget
// setAttribute(Qt::WA_NoSystemBackground, true);
// setAttribute(Qt::WA_TranslucentBackground, true);
// setAttribute(Qt::WA_PaintOnScreen); // not needed in Qt 5.2 and up
//No Scrollbar
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
//Speed-up display
setCacheMode(CacheBackground);
setRenderHints(/*QPainter::Antialiasing | */QPainter::SmoothPixmapTransform/* | QPainter::TextAntialiasing*/);
setViewportUpdateMode(QGraphicsView::SmartViewportUpdate/*QGraphicsView::FullViewportUpdate*/);
// QPixmap background;
// background.load("./Images/GuiBackground.jpg");
// background = background.scaled(SCREEN_RES_WIDTH,SCREEN_RES_HEIGHT);
QLinearGradient BackgroundGradient(QPointF(rect().width()/2,0),QPointF(rect().width()/2,rect().height()));
BackgroundGradient.setColorAt(0.5,QColor(128,158,222));
BackgroundGradient.setColorAt(1,Qt::white);
QBrush BkBrush(BackgroundGradient);
setBackgroundBrush(BkBrush);
// QRectF bounds(0,0, QApplication::desktop()->geometry().width(),QApplication::desktop()->geometry().height());
QRectF bounds(0,0, SCREEN_RES_WIDTH,SCREEN_RES_HEIGHT);
scene = new QGraphicsScene(bounds, this);
setScene(scene);
//resize(QApplication::desktop()->geometry().width(),QApplication::desktop()->geometry().height());
resize(SCREEN_RES_WIDTH,SCREEN_RES_HEIGHT);
////////////////////////
setMouseTracking(true);
mMainPage = new CMainPage();
mDatabaseModeLogViewPage = new CLogViewPage();
mDatabaseModeLogListPage = new CLogsListPage();
mOptionsPage = new COptionsPage();
mNetworkZTListPage = new CNetworkZTListPage();
mNetworkCtrlPage = new CNetworkCtrlPage();
mRemoteZTPage = new CRemoteZTPage();
mZTLogViewerPage = new CZTLogViewerPage(0,false);
mNetworkModeLogListPage = new CLogsListPage();
mNetworkModeLogViewPage = new CLogViewPage();
mProgressBarPage = new CProgressBarPage();
mRemoteZTCtrlPage = new CRemoteZTCtrlPage();
mDatabaseMgrPage = new CDatabaseMgrPage();
mZTLogsListPage = new CZTLogsListPage();
mZTLogFileViewerPage = new CZTLogViewerPage(0,true);
scene->addItem(mMainPage);
scene->addItem(mDatabaseModeLogViewPage);
scene->addItem(mDatabaseModeLogListPage);
scene->addItem(mOptionsPage);
scene->addItem(mNetworkZTListPage);
scene->addItem(mNetworkCtrlPage);
scene->addItem(mRemoteZTPage);
scene->addItem(mZTLogViewerPage);
scene->addItem(mNetworkModeLogListPage);
scene->addItem(mNetworkModeLogViewPage);
scene->addItem(mProgressBarPage);
scene->addItem(mRemoteZTCtrlPage);
scene->addItem(mDatabaseMgrPage);
scene->addItem(mZTLogsListPage);
scene->addItem(mZTLogFileViewerPage);
mMainPage->setPos(0,0);
mMainPage->show();
mMainPage->setZValue(0);
mMainPage->resize(10,SCREEN_RES_HEIGHT);
mDatabaseModeLogViewPage->setPos(SCREEN_RES_WIDTH-980,0);
mDatabaseModeLogViewPage->resize(980,SCREEN_RES_HEIGHT);
mDatabaseModeLogViewPage->setZValue(0);
mDatabaseModeLogViewPage->DisableCloseButton();
mDatabaseModeLogViewPage->show();
mDatabaseModeLogListPage->setPos(100,0);
mDatabaseModeLogListPage->resize(400,SCREEN_RES_HEIGHT-100);
mDatabaseModeLogListPage->setZValue(1);
mDatabaseModeLogListPage->show();
mZTLogsListPage->setPos(100,0);
mZTLogsListPage->resize(SCREEN_RES_WIDTH,SCREEN_RES_HEIGHT);
mZTLogsListPage->setZValue(0);
mZTLogsListPage->hide();
mZTLogFileViewerPage->resize(980,700);
mZTLogFileViewerPage->setPos(600,10);
mZTLogFileViewerPage->hide();
mZTLogFileViewerPage->setZValue(0);
mOptionsPage->setPos(412,100);
mOptionsPage->hide();
mOptionsPage->resize(600,600);
mOptionsPage->setZValue(1);
mDatabaseMgrPage->setPos(412,100);
mDatabaseMgrPage->hide();
mDatabaseMgrPage->resize(644,400);
mDatabaseMgrPage->setZValue(1);
mNetworkZTListPage->setPos(100,0);
mNetworkZTListPage->setZValue(0);
mNetworkZTListPage->hide();
mNetworkCtrlPage->setPos(100,325);
mNetworkCtrlPage->resize(150,150);
mNetworkCtrlPage->setZValue(0);
mNetworkCtrlPage->hide();
mRemoteZTPage->setPos(450,0);
mRemoteZTPage->resize(SCREEN_RES_WIDTH-450,SCREEN_RES_HEIGHT);
mRemoteZTPage->setZValue(0);
mRemoteZTPage->hide();
mZTLogViewerPage->setPos(400,84);
mZTLogViewerPage->hide();
mZTLogViewerPage->resize(800,600);
mZTLogViewerPage->setZValue(1);
mNetworkModeLogListPage->setPos(1000,0);
mNetworkModeLogListPage->resize(400,SCREEN_RES_HEIGHT-100);
mNetworkModeLogListPage->setZValue(1);
mNetworkModeLogListPage->show();
mNetworkModeLogViewPage->setPos(SCREEN_RES_WIDTH-980,0);
mNetworkModeLogViewPage->resize(980,SCREEN_RES_HEIGHT);
mNetworkModeLogViewPage->setZValue(1);
mNetworkModeLogViewPage->EnableCloseButton();
mNetworkModeLogViewPage->hide();
mRemoteZTCtrlPage->setPos(1000,0);
mRemoteZTCtrlPage->resize(400,SCREEN_RES_HEIGHT-100);
mRemoteZTCtrlPage->hide();
mRemoteZTCtrlPage->setZValue(0);
mProgressBarPage->setPos(500,300);
// mProgressBarPage->resize(400,300);
mProgressBarPage->setZValue(2);
mProgressBarPage->hide();
installEventFilter(mDatabaseModeLogViewPage);
}
void Panel::ShowMainPage()
{
mMainPage->show();
}
void Panel::HideMainPAge()
{
mMainPage->hide();
}
//void Panel::mousePressEvent(QGraphicsSceneMouseEvent *event)
//{
//}

101
sources/MainPanel.h Normal file
View File

@ -0,0 +1,101 @@
#ifndef PANEL_H
#define PANEL_H
/*******************************************************************************
* *
* 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.
*/
/* ************************************************************************** */
#include "GlobalDefine.h"
#include <QtGui/qgraphicsview.h>
#include <QFile>
#include <QGraphicsTextItem>
#include "Guipage.h"
#include "MainPage.h"
#include "LogViewPage.h"
#include "LogsListPage.h"
#include "OptionsPage.h"
#include "NetworkZTListPage.h"
#include "NetworkCtrlPage.h"
#include "RemoteZTPage.h"
#include "ZTLogViewerPage.h"
#include "ProgressBarPage.h"
#include "RemoteZTCtrlPage.h"
#include "DatabaseMgrPage.h"
#include "ZTLogsListPage.h"
class Panel : public QGraphicsView
{
Q_OBJECT
//QFile Ledfd;
public:
Panel();
~Panel();
// virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
void HideWelcomePage(void);
void ShowMainPage(void);
void HideMainPAge(void);
public slots:
// void AudioPageButtonClicked();
// void mMailMsgButtonPressed();
// void BusScheduleButtonPressed();
// void DayScheduleButtonPressed();
public:
QGraphicsScene *scene;
CMainPage *mMainPage;
//Database mode display
CLogViewPage *mDatabaseModeLogViewPage;
CLogsListPage *mDatabaseModeLogListPage;
COptionsPage *mOptionsPage;
CDatabaseMgrPage *mDatabaseMgrPage;
//Network mode display
CNetworkZTListPage *mNetworkZTListPage;
CNetworkCtrlPage *mNetworkCtrlPage;
CRemoteZTPage *mRemoteZTPage;
CZTLogViewerPage *mZTLogViewerPage;
CLogViewPage *mNetworkModeLogViewPage;
CLogsListPage *mNetworkModeLogListPage;
CRemoteZTCtrlPage *mRemoteZTCtrlPage;
CZTLogViewerPage *mZTLogFileViewerPage;
//ZTLogs mode display
CZTLogsListPage *mZTLogsListPage;
CProgressBarPage *mProgressBarPage;
};
#endif // PANEL_H

500
sources/NetworkManager.cpp Normal file
View File

@ -0,0 +1,500 @@
#include "NetworkManager.h"
#include <QDebug>
#include "OutilZT.h"
CNetworkManager CNetworkManager::mSingleton;
CNetworkManager::CNetworkManager(QObject *parent) :
QObject(parent)
{
mConfig = 0;
mCurZTID = 0;
mProgramHandle = 0;
mZTUDPSocket = 0;
mUDPServerAdress = QHostAddress::Null;
mNetworkSMState = NETWORK_SM_STANDBY_STATE;
mOnlineCheckNetworkSMState = NETWORK_ONLINE_CHK_SM_STANDBY_STATE;
// mZTTcpSocket.setSocketOption(QAbstractSocket::LowDelayOption,1);
connect(&mZTTcpSocket,SIGNAL(connected()),this,SLOT(SocketConnected()));
connect(&mZTTcpSocket,SIGNAL(disconnected()),this,SLOT(SocketDisconnected()));
connect(&mZTTcpSocket,SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(SocketError(QAbstractSocket::SocketError)));
connect(&mZTTcpSocket,SIGNAL(readyRead()),this,SLOT(SocketDataReady()));
mZTOnlineCheckingSocket.setSocketOption(QAbstractSocket::LowDelayOption,1);
connect(&mZTOnlineCheckingSocket,SIGNAL(connected()),this,SLOT(OnlineCheckSocketConnected()));
connect(&mZTOnlineCheckingSocket,SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(OnlineCheckSocketError(QAbstractSocket::SocketError)));
}
CNetworkManager::~CNetworkManager()
{
mZTTcpSocket.disconnectFromHost();
mZTOnlineCheckingSocket.disconnectFromHost();
}
void CNetworkManager::BindPointers(COutilZT *ProgramHandle)
{
mProgramHandle = ProgramHandle;
}
void CNetworkManager::OnlineCheckStateMachine(eNetworkSMEvent event)
{
switch(mOnlineCheckNetworkSMState)
{
case NETWORK_ONLINE_CHK_SM_INIT_STATE:
{
break;
}
case NETWORK_ONLINE_CHK_SM_STANDBY_STATE:
{
break;
}
case NETWORK_ONLINE_CHK_SM_CHECK_CONNECTIONS_STATE:
{
switch(event)
{
case NETWORK_SM_SOCKET_CONNECTED_EVENT:
{
// qDebug("%s Connected",mConfig->mNetworkCfgList.at(mCurZTID).mIPAdress.toAscii().data());
emit NetworkZTConnectionStatus(mOnlineCheckZTID,ZT_NETWORK_ONLINE_STATUS);
break;
}
case NETWORK_SM_SOCKET_ERROR_EVENT:
{
// qDebug("%s Not connected",mConfig->mNetworkCfgList.at(mCurZTID).mIPAdress.toAscii().data());
emit NetworkZTConnectionStatus(mOnlineCheckZTID,ZT_NETWORK_OFFLINE_STATUS);
break;
}
case NETWORK_SM_SOCKET_DISCONNECTED_EVENT:
{
//Nothing to do here but we need to manage it because it will be received each time we disconnect.
return;
break;
}
default:
{
// qDebug("Unmanaged event in NETWORK_ONLINE_CHK_SM_CHECK_CONNECTIONS_STATE : %d",event);
return;
break;
}
}
mOnlineCheckZTID++;
if(mNetworkSMState != NETWORK_SM_STANDBY_STATE)
{
//Skip the connected ZT if there is one.
if(mOnlineCheckZTID == mCurZTID)
{
mOnlineCheckZTID++;
}
}
if(mOnlineCheckZTID >= NB_ZT_ID)
{
mOnlineCheckNetworkSMState = NETWORK_ONLINE_CHK_SM_STANDBY_STATE;
mZTOnlineCheckingSocket.disconnectFromHost();
}
else
{
mZTOnlineCheckingSocket.disconnectFromHost();
// qDebug("Attempting to connect to %s",mConfig->mNetworkCfgList.at(mOnlineCheckZTID).mIPAdress.toAscii().data());
emit NetworkZTConnectionStatus(mOnlineCheckZTID,ZT_NETWORK_SEARCHING_STATUS);
mZTOnlineCheckingSocket.connectToHost(mConfig->mNetworkCfgList.at(mOnlineCheckZTID).mIPAdress,ZT_TCP_PORT);
}
break;
}
}
}
void CNetworkManager::NetworkStateMachine(eNetworkSMEvent event)
{
switch(mNetworkSMState)
{
case NETWORK_SM_INIT_STATE:
{
break;
}
case NETWORK_SM_STANDBY_STATE:
{
break;
}
case NETWORK_SM_INITIATE_CLIENT_CONNECTION_STATE:
{
switch(event)
{
case NETWORK_SM_SOCKET_CONNECTED_EVENT:
{
qDebug("%s Connected",mConfig->mNetworkCfgList.at(mCurZTID).mIPAdress.toAscii().data());
emit NetworkZTConnected(mCurZTID);
emit NetworkZTConnectionStatus(mCurZTID,ZT_NETWORK_CONNECTED_STATUS);
//RequestHeartbeat();
//mZTTcpSocket.write(GetStationNameReqPacket());
TCPTxRequest(GetStationNameReqPacket());
mNetworkSMState = NETWORK_SM_CLIENT_CONNECTED_STATE;
break;
}
case NETWORK_SM_SOCKET_ERROR_EVENT:
{
qDebug("%s Socket error",mConfig->mNetworkCfgList.at(mCurZTID).mIPAdress.toAscii().data());
emit NetworkZTConnectionError(mCurZTID);
mNetworkSMState = NETWORK_SM_STANDBY_STATE;
break;
}
case NETWORK_SM_SOCKET_DISCONNECTED_EVENT:
{
mNetworkSMState = NETWORK_SM_STANDBY_STATE;
emit NetworkZTConnectionStatus(mOnlineCheckZTID,ZT_NETWORK_UNKNOWN_STATUS);
emit NetworkZTConnectionError(mCurZTID);
break;
}
default:
{
mNetworkSMState = NETWORK_SM_STANDBY_STATE;
qDebug("Invalid event in NETWORK_SM_INITIATE_CLIENT_CONNECTION_STATE : %d",event);
break;
}
}
break;
}
case NETWORK_SM_CLIENT_CONNECTED_STATE:
{
switch(event)
{
case NETWORK_SM_SOCKET_ERROR_EVENT:
{
qDebug("%s Socket error",mConfig->mNetworkCfgList.at(mCurZTID).mIPAdress.toAscii().data());
break;
}
case NETWORK_SM_SOCKET_DISCONNECTED_EVENT:
{
emit NetworkZTDisconnected(mCurZTID);
emit NetworkZTConnectionStatus(mCurZTID,ZT_NETWORK_UNKNOWN_STATUS);
mNetworkSMState = NETWORK_SM_STANDBY_STATE;
//qDebug("%s Disconnected",mConfig->mNetworkCfgList.at(mCurZTID).mIPAdress.toAscii().data());
qDebug("TCP Socket disconnected");
break;
}
default:
{
qDebug("Unmanaged event in NETWORK_SM_CLIENT_CONNECTED_STATE : %d",event);
break;
}
}
break;
}
default:
{
break;
}
}
}
unsigned int CNetworkManager::InitUDPConnection(int ZTID)
{
mZTUDPSocket = new QUdpSocket(this);
if(mZTUDPSocket->bind(QHostAddress::Any,ZT_UDP_PORT) == false)
return RET_ERROR;
mUDPServerAdress = QHostAddress(mConfig->mNetworkCfgList.at(ZTID).mIPAdress);
connect(mZTUDPSocket,SIGNAL(readyRead()),this,SLOT(UDPSocketDataReady()));
QByteArray packet = GetInitUDPConnectionPacket();
mZTUDPSocket->writeDatagram(packet,mUDPServerAdress,ZT_UDP_PORT);
return RET_OK;
}
unsigned int CNetworkManager::StopUDPStream()
{
if(mZTUDPSocket == 0)
return RET_ERROR;
QByteArray packet = GetCloseUDPConnectionPacket();
mZTUDPSocket->writeDatagram(packet,mUDPServerAdress,ZT_UDP_PORT);
mZTUDPSocket->waitForBytesWritten();
return RET_OK;
}
unsigned int CNetworkManager::CloseUDPConnection()
{
if(mZTUDPSocket == 0)
return RET_ERROR;
// QByteArray packet = GetCloseUDPConnectionPacket();
// mZTUDPSocket->writeDatagram(packet,mUDPServerAdress,ZT_UDP_PORT);
// mZTUDPSocket->flush();
delete mZTUDPSocket;
mZTUDPSocket = 0;
mUDPServerAdress = QHostAddress::Null;
return RET_OK;
}
int CNetworkManager::CheckZTConnectionsStatus()
{
if(mOnlineCheckNetworkSMState != NETWORK_ONLINE_CHK_SM_STANDBY_STATE)
return RET_ERROR;
mOnlineCheckZTID = 0;
mOnlineCheckNetworkSMState = NETWORK_ONLINE_CHK_SM_CHECK_CONNECTIONS_STATE;
emit NetworkZTConnectionStatus(mOnlineCheckZTID,ZT_NETWORK_SEARCHING_STATUS);
// qDebug("Attempting to connect to %s",mConfig->mNetworkCfgList.at(mOnlineCheckZTID).mIPAdress.toAscii().data());
mZTOnlineCheckingSocket.connectToHost(mConfig->mNetworkCfgList.at(mOnlineCheckZTID).mIPAdress,ZT_TCP_PORT);
return RET_OK;
}
unsigned int CNetworkManager::SetConfig(CSettingsData *Config)
{
mConfig = Config;
return RET_OK;
}
unsigned int CNetworkManager::ConnectToZT(int ZTID)
{
if(ZTID >= NB_ZT_ID)
{
qDebug("Cannot connect: Invalid ZT ID");
return RET_ERROR;
}
if(mNetworkSMState != NETWORK_SM_STANDBY_STATE)
{
qDebug("Cannot connect: Invalid State machine state : %d",mNetworkSMState);
return RET_ERROR;
}
mCurZTID = ZTID;
mNetworkSMState = NETWORK_SM_INITIATE_CLIENT_CONNECTION_STATE;
mZTTcpSocket.connectToHost(mConfig->mNetworkCfgList.at(mCurZTID).mIPAdress,ZT_TCP_PORT);
qDebug("Connecting to %s", mConfig->mNetworkCfgList.at(mCurZTID).mIPAdress.toAscii().data());
return RET_OK;
}
unsigned int CNetworkManager::DisconnectZT()
{
// if(mNetworkSMState == NETWORK_SM_STANDBY_STATE)
// return RET_ERROR;
if(mNetworkSMState != NETWORK_SM_CLIENT_CONNECTED_STATE)
{
qDebug("Aborting connection from ZT. Socket state : %d",mZTTcpSocket.state());
mZTTcpSocket.abort();
NetworkStateMachine(NETWORK_SM_SOCKET_DISCONNECTED_EVENT);
}
else
{
qDebug("Disconnecting from ZT. Socket state : %d",mZTTcpSocket.state());
mZTTcpSocket.disconnectFromHost();
}
return RET_OK;
}
void CNetworkManager::TCPTxRequest(const QByteArray &request)
{
qDebug() << "Tx request in Network Manager : " << request.size() << " bytes : " << request.toHex();
emit NetworkTCPTx();
mZTTcpSocket.write(request);
}
unsigned int CNetworkManager::RefreshRemoteZTStatus()
{
if(mNetworkSMState != NETWORK_SM_CLIENT_CONNECTED_STATE)
return RET_ERROR;
TCPTxRequest(GetZTStatusReqPacket());
return RET_OK;
}
unsigned int CNetworkManager::DownloadZTLog()
{
if(mNetworkSMState != NETWORK_SM_CLIENT_CONNECTED_STATE)
return RET_ERROR;
TCPTxRequest(GetZTLogDownloadReqPacket());
return RET_OK;
}
unsigned int CNetworkManager::DownloadTrainLogs()
{
if(mNetworkSMState != NETWORK_SM_CLIENT_CONNECTED_STATE)
return RET_ERROR;
TCPTxRequest(GetTrainLogsDownloadReqPacket());
return RET_OK;
}
unsigned int CNetworkManager::DeleteRemoteZTLog()
{
if(mNetworkSMState != NETWORK_SM_CLIENT_CONNECTED_STATE)
return RET_ERROR;
TCPTxRequest(GetDeleteZTLogReqPacket());
return RET_OK;
}
unsigned int CNetworkManager::SetZTFunctions(const CTCPZTFunctionsStatus &ZTFunctions)
{
if(mNetworkSMState != NETWORK_SM_CLIENT_CONNECTED_STATE)
return RET_ERROR;
QByteArray data;
QDataStream strm(&data,QIODevice::WriteOnly);
strm.device()->seek(0);
strm << ZTFunctions;
TCPTxRequest(GetSetZTFunctionsPacket(data));
return RET_OK;
}
//slots
void CNetworkManager::SocketConnected()
{
qDebug("Socket connected slot");
NetworkStateMachine(NETWORK_SM_SOCKET_CONNECTED_EVENT);
}
void CNetworkManager::SocketDisconnected()
{
qDebug("Socket disconnected slot");
NetworkStateMachine(NETWORK_SM_SOCKET_DISCONNECTED_EVENT);
}
void CNetworkManager::SocketError(QAbstractSocket::SocketError socketError)
{
qDebug("Socket error slot. Error:[%d]",socketError);
NetworkStateMachine(NETWORK_SM_SOCKET_ERROR_EVENT);
}
void CNetworkManager::SocketDataReady()
{
// qDebug() << "Socket data ready:" << mZTTcpSocket.bytesAvailable();
emit NetworkTCPRx();
AnalyzeNewData(mZTTcpSocket.readAll());
}
void CNetworkManager::OnlineCheckSocketConnected()
{
OnlineCheckStateMachine(NETWORK_SM_SOCKET_CONNECTED_EVENT);
}
void CNetworkManager::OnlineCheckSocketError(QAbstractSocket::SocketError socketError)
{
OnlineCheckStateMachine(NETWORK_SM_SOCKET_ERROR_EVENT);
}
void CNetworkManager::TCPRxHeartbeat()
{
qDebug() << "TCP: Received Heartbeat";
}
void CNetworkManager::TCPRxStationName(QString Name)
{
qDebug() << "TCP: Received station name:" << Name;
mProgramHandle->RxStationName(Name);
mZTTcpSocket.write(GetZTStatusReqPacket());
}
void CNetworkManager::TCPRxZTStatus(const QByteArray &data)
{
CTCPZTStatus status;
QDataStream stream(data);
stream.device()->seek(0);
stream >> status;
qDebug() << "TCP: Received ZT Status";
mProgramHandle->RxZTStatus(status);
}
void CNetworkManager::TCPRxZTLog(QString ZTLog)
{
mProgramHandle->RxZTLog(ZTLog);
}
void CNetworkManager::TCPRxTrainLogsDownladAck(qint32 NbFiles)
{
qDebug("TCP: Received downoad train files ack : %d",NbFiles);
mProgramHandle->DownloadTrainLogsBegin(NbFiles);
mZTTcpSocket.write(GetTrainLogsFileDataAckPacket((qint32)TCP_PROTOCOL_ACK));
}
void CNetworkManager::TCPRxTrainLogFileData(const QByteArray &TrainFileData)
{
QDataStream strm(TrainFileData);
strm.device()->seek(0);
QString LogFilePathName;
strm >> LogFilePathName;
LogFilePathName.prepend(mProgramHandle->GetTrainLogsTempPath());
QFile* BinaryLogFile = new QFile(LogFilePathName);
if(BinaryLogFile)
{
if(BinaryLogFile->open(QIODevice::WriteOnly) == false)
{
qDebug("Could not create log file : %s",LogFilePathName.toLatin1().data());
delete BinaryLogFile;
return;
}
}
BinaryLogFile->write(strm.device()->readAll());
BinaryLogFile->close();
delete BinaryLogFile;
mProgramHandle->RxTrainLogData(LogFilePathName);
mZTTcpSocket.write(GetTrainLogsFileDataAckPacket((qint32)TCP_PROTOCOL_ACK));
}
void CNetworkManager::TCPRxTrainLogsDownloadFinished()
{
mProgramHandle->RxTrainLogsDownloadFinished();
}
void CNetworkManager::TCPRxDeleteZTLogAck(bool success)
{
mProgramHandle->RemoteZTLogDeleted(success);
}
void CNetworkManager::TCPRxSetZTFunctionsAck(bool ack)
{
mProgramHandle->SetZTFunctionsSatusDone(ack);
}
void CNetworkManager::UDPSocketDataReady()
{
}

127
sources/NetworkManager.h Normal file
View File

@ -0,0 +1,127 @@
#ifndef NETWORKMANAGER_H
#define NETWORKMANAGER_H
#include <QObject>
#include "GlobalDefine.h"
#include "ZTData.h"
#include <QTcpSocket>
#include <QUdpSocket>
#include "TCPProtocol.h"
#include "UDPProtocol.h"
class COutilZT;
class CNetworkManager : public QObject, public CTCPProtocol, public CUDPProtocol
{
Q_OBJECT
public:
enum eZTNetworkStatus
{
ZT_NETWORK_OFFLINE_STATUS,
ZT_NETWORK_ONLINE_STATUS,
ZT_NETWORK_SEARCHING_STATUS,
ZT_NETWORK_UNKNOWN_STATUS,
ZT_NETWORK_CONNECTED_STATUS
};
static CNetworkManager* instance(){return &mSingleton;}
static CNetworkManager mSingleton;
explicit CNetworkManager(QObject *parent = 0);
~CNetworkManager();
void BindPointers(COutilZT *ProgramHandle);
unsigned int SetConfig(CSettingsData *Config);
unsigned int ConnectToZT(int ZTID);
unsigned int DisconnectZT();
unsigned int RefreshRemoteZTStatus();
unsigned int DownloadZTLog();
unsigned int DownloadTrainLogs();
unsigned int DeleteRemoteZTLog();
unsigned int SetZTFunctions(const CTCPZTFunctionsStatus &ZTFunctions);
unsigned int InitUDPConnection(int ZTID);
unsigned int StopUDPStream();
unsigned int CloseUDPConnection();
int CheckZTConnectionsStatus();
virtual void TCPTxRequest(const QByteArray &request);
virtual void TCPRxHeartbeat();
virtual void TCPRxStationName(QString Name);
virtual void TCPRxZTStatus(const QByteArray &data);
virtual void TCPRxZTLog(QString ZTLog);
virtual void TCPRxTrainLogsDownladAck(qint32 NbFiles);
virtual void TCPRxTrainLogFileData(const QByteArray &TrainFileData);
virtual void TCPRxTrainLogsDownloadFinished();
virtual void TCPRxDeleteZTLogAck(bool success);
virtual void TCPRxSetZTFunctionsAck(bool ack);
private:
typedef enum
{
NETWORK_SM_INIT_STATE,
NETWORK_SM_STANDBY_STATE,
NETWORK_SM_INITIATE_CLIENT_CONNECTION_STATE,
NETWORK_SM_CLIENT_CONNECTED_STATE
}eNetworkSMState;
typedef enum
{
NETWORK_ONLINE_CHK_SM_INIT_STATE,
NETWORK_ONLINE_CHK_SM_STANDBY_STATE,
NETWORK_ONLINE_CHK_SM_CHECK_CONNECTIONS_STATE
}eNetworkOnlineCheckSMState;
typedef enum
{
NETWORK_SM_TIMER_EVENT,
NETWORK_SM_SOCKET_CONNECTED_EVENT,
NETWORK_SM_SOCKET_DISCONNECTED_EVENT,
NETWORK_SM_DATA_RX_EVENT,
NETWORK_SM_DATA_SEND_EVENT,
NETWORK_SM_SOCKET_ERROR_EVENT
}eNetworkSMEvent;
void NetworkStateMachine(eNetworkSMEvent event);
void OnlineCheckStateMachine(eNetworkSMEvent event);
QTcpSocket mZTTcpSocket;
QTcpSocket mZTOnlineCheckingSocket;
QUdpSocket *mZTUDPSocket;
QHostAddress mUDPServerAdress;
CSettingsData *mConfig;
eNetworkSMState mNetworkSMState;
eNetworkOnlineCheckSMState mOnlineCheckNetworkSMState;
int mCurZTID;
int mOnlineCheckZTID;
COutilZT *mProgramHandle;
signals:
void NetworkZTConnectionStatus(int,int);
void NetworkZTConnected(int);
void NetworkZTDisconnected(int);
void NetworkZTConnectionError(int);
void NetworkTCPTx();
void NetworkTCPRx();
public slots:
void SocketConnected();
void SocketDisconnected();
void SocketError(QAbstractSocket::SocketError socketError);
void SocketDataReady();
void OnlineCheckSocketError(QAbstractSocket::SocketError socketError);
void OnlineCheckSocketConnected();
void UDPSocketDataReady();
};
#endif // NETWORKMANAGER_H

736
sources/OutilZT.cpp Normal file
View File

@ -0,0 +1,736 @@
/*******************************************************************************
* *
* Société de Transports de Montréal. *
* 2012 *
* *
* Projet Zones Tests *
* *
* *
* *
*******************************************************************************/
/*
Description:
Cette classe est considérée comme l'instance du programme qui
initialise et démarre tous les objets nécessaires.
Elle assure aussi la synchronisation de ces derniers à l'aide de sa
machine à états.
*/
/* ************************************************************************** */
/* Revision:
### 20121214 JFM
Verision d'origine.
### YYYYMMDD Description du besoin ou du bug
Description du changement.
*/
/* ************************************************************************** */
#include "OutilZT.h"
#include <QApplication>
#include <QTextCodec>
#include "NetworkManager.h"
#include <QByteArray>
#include <QDebug>
#include <QMessageBox>
COutilZT::COutilZT()
{
panel.installEventFilter(this); //Install an event filter for CZoneTest to manage some events from GUI
}
COutilZT::~COutilZT()
{
}
unsigned int COutilZT::Start()
{
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
panel.mDatabaseModeLogListPage->mLogMgrHandle = &mDatabaseModeLogManager;
panel.mDatabaseModeLogListPage->mProgramHandle = this;
panel.mMainPage->mProgramHandle = this;
panel.mOptionsPage->mProgramHandle = this;
if(mIsEngMode == true)
{
panel.mOptionsPage->EnableEngineeringMode();
}
panel.mNetworkCtrlPage->mProgramHandle = this;
panel.mDatabaseMgrPage->mProgramHandle = this;
panel.mDatabaseMgrPage->mLogMgrHandle = &mDatabaseModeLogManager;
panel.mDatabaseMgrPage->mZTLogFilesManager = &mZTLogFilesManager;
if(mIsEngMode == true)
{
panel.mDatabaseMgrPage->EnableEngineeringMode();
}
if(mCanImport == true)
{
panel.mDatabaseMgrPage->EnableLogImport();
}
mDatabaseModeLogManager.mProgramHandle = this;
panel.mNetworkModeLogListPage->mProgramHandle = this;
panel.mNetworkModeLogListPage->mLogMgrHandle = &mNetworkModeLogManager;
panel.mNetworkModeLogViewPage->mProgramHandle = this;
mNetworkModeLogManager.mProgramHandle = this;
panel.mRemoteZTCtrlPage->mProgramHandle = this;
panel.mZTLogsListPage->mProgramHandle = this;
panel.mZTLogsListPage->mZTLogFilesManager = &mZTLogFilesManager;
if(mIsEngMode == true)
{
panel.mDatabaseModeLogListPage->EnableEngineeringMode();
panel.mNetworkModeLogListPage->EnableEngineeringMode();
}
mSettingsFileMgr.LoadSettings(&mSettingsData);
CNetworkManager::instance()->BindPointers(this);
CNetworkManager::instance()->SetConfig(&mSettingsData);
panel.mNetworkZTListPage->SetConfig(&mSettingsData);
panel.mOptionsPage->SetSettings(&mSettingsData);
connect(CNetworkManager::instance(),SIGNAL(NetworkZTConnectionStatus(int,int)),panel.mNetworkZTListPage,SLOT(ZTNetworkStatusChanged(int,int)));
connect(CNetworkManager::instance(),SIGNAL(NetworkZTConnected(int)),panel.mNetworkCtrlPage,SLOT(NetworkZTConnected(int)));
connect(CNetworkManager::instance(),SIGNAL(NetworkZTConnectionError(int)),panel.mNetworkCtrlPage,SLOT(NetworkZTConnectionFailed(int)));
connect(CNetworkManager::instance(),SIGNAL(NetworkZTDisconnected(int)),panel.mNetworkCtrlPage,SLOT(NetworkZTConnectionFailed(int)));
connect(CNetworkManager::instance(),SIGNAL(NetworkTCPRx()),panel.mNetworkCtrlPage,SLOT(NetworkRx()));
connect(CNetworkManager::instance(),SIGNAL(NetworkTCPTx()),panel.mNetworkCtrlPage,SLOT(NetworkTx()));
connect(CNetworkManager::instance(),SIGNAL(NetworkZTConnected(int)),panel.mRemoteZTPage,SLOT(NetworkZTConnected(int)));
connect(CNetworkManager::instance(),SIGNAL(NetworkZTDisconnected(int)),panel.mRemoteZTPage,SLOT(NetworkZTDisconnected(int)));
// panel.mDatabaseModeLogListPage->RefreshList();
// panel.mZTLogsListPage->RefreshList();
//Show Graphic User Interface.
panel.setWindowTitle("Outil Zone Test");
panel.show();
mDatabaseModeLogManager.mProgramHandle = this;
mDatabaseModeLogManager.SetLogDataDir(GetLogDataPath());
mDatabaseModeLogManager.ParseLogs();
mNetworkModeLogManager.mProgramHandle = this;
mNetworkModeLogManager.SetLogDataDir(GetTrainLogsTempPath());
// mNetworkModeLogManager.ParseLogs();
mZTLogFilesManager.mProgramHandle = this;
mZTLogFilesManager.SetLogDataDir(GetLogDataPath());
mZTLogFilesManager.ParseZTLogFiles(false);
mOutilZTMode = MODE_INVALID;
// EnterNetworkModeRequest();
EnterDatabaseModeRequest();
mRebuildingDB = false;
// CNetworkManager::instance()->CheckZTConnectionsStatus();
return RET_OK;
}
unsigned int COutilZT::InitZT()
{
return RET_OK;
}
void COutilZT::LogViewRequest(CLogElement *element, CLogsListPage *caller)
{
if(caller == panel.mDatabaseModeLogListPage)
{
panel.mDatabaseModeLogViewPage->SetLogData(element);
}
else if(caller == panel.mNetworkModeLogListPage)
{
panel.mNetworkModeLogViewPage->SetLogData(element);
ShowNetworkModeLogViewRequest();
}
}
unsigned int COutilZT::SetLogProtection(bool Protection, CLogElement* Element, CLogsListPage *Caller)
{
if(Caller == panel.mDatabaseModeLogListPage)
{
if(mDatabaseModeLogManager.ProtectLogElementFile(Protection,Element) == RET_OK)
{
return RET_OK;
}
}
return RET_ERROR;
}
void COutilZT::LogViewCloseRequest(CLogViewPage *caller)
{
if(caller == panel.mNetworkModeLogViewPage)
{
HideNetworkModeLogViewRequest();
}
}
void COutilZT::ShowOptionsRequest()
{
panel.mOptionsPage->show();
}
void COutilZT::HideOptionsRequest()
{
panel.mOptionsPage->hide();
}
void COutilZT::ShowDatabaseMgrRequest()
{
panel.mDatabaseMgrPage->show();
}
void COutilZT::HideDatabaseMgrRequest()
{
panel.mDatabaseMgrPage->hide();
}
void COutilZT::EnterDatabaseModeRequest()
{
if(mOutilZTMode == MODE_DATABASE)
return;
panel.mNetworkZTListPage->hide();
panel.mNetworkCtrlPage->hide();
panel.mRemoteZTPage->hide();
panel.mNetworkModeLogListPage->hide();
panel.mNetworkModeLogViewPage->hide();
panel.mRemoteZTCtrlPage->hide();
panel.mZTLogsListPage->hide();
panel.mZTLogFileViewerPage->hide();
panel.mDatabaseModeLogListPage->show();
panel.mDatabaseModeLogViewPage->show();
mOutilZTMode = MODE_DATABASE;
}
void COutilZT::EnterNetworkModeRequest()
{
if(mOutilZTMode == MODE_NETWORK)
return;
panel.mDatabaseModeLogListPage->hide();
panel.mDatabaseModeLogViewPage->hide();
panel.mNetworkZTListPage->show();
panel.mNetworkCtrlPage->show();
panel.mRemoteZTPage->show();
panel.mNetworkModeLogListPage->show();
panel.mNetworkModeLogViewPage->hide();
panel.mRemoteZTCtrlPage->hide();
panel.mZTLogsListPage->hide();
panel.mZTLogFileViewerPage->hide();
mOutilZTMode = MODE_NETWORK;
}
void COutilZT::EnterZTLogModeRequest()
{
if(mOutilZTMode == MODE_ZTLOG)
return;
panel.mDatabaseModeLogListPage->hide();
panel.mDatabaseModeLogViewPage->hide();
panel.mNetworkZTListPage->hide();
panel.mNetworkCtrlPage->hide();
panel.mRemoteZTPage->hide();
panel.mNetworkModeLogListPage->hide();
panel.mNetworkModeLogViewPage->hide();
panel.mRemoteZTCtrlPage->hide();
panel.mZTLogsListPage->show();
panel.mZTLogFileViewerPage->show();
mOutilZTMode = MODE_ZTLOG;
}
void COutilZT::ShowZTLogRequest(QString Log,QString FocusText,int line)
{
panel.mZTLogViewerPage->SetZTLogText(Log,FocusText);
if(line != -1)
panel.mZTLogViewerPage->ScrollToLine(line);
panel.mZTLogViewerPage->show();
}
void COutilZT::ShowNetworkModeLogViewRequest()
{
// panel.mRemoteZTPage->hide();
panel.mNetworkModeLogListPage->hide();
panel.mNetworkModeLogViewPage->show();
}
void COutilZT::HideNetworkModeLogViewRequest()
{
// panel.mRemoteZTPage->show();
panel.mNetworkModeLogListPage->show();
panel.mNetworkModeLogViewPage->hide();
}
void COutilZT::ShowRemoteControlPage()
{
panel.mRemoteZTPage->show();
panel.mNetworkModeLogListPage->hide();
panel.mNetworkModeLogViewPage->hide();
panel.mRemoteZTCtrlPage->show();
}
void COutilZT::ShowRemoteTrainLogsViewPages()
{
panel.mRemoteZTPage->show();
panel.mNetworkModeLogListPage->show();
panel.mNetworkModeLogViewPage->hide();
panel.mRemoteZTCtrlPage->hide();
}
void COutilZT::ShowRemoteLiveZTPage()
{
panel.mRemoteZTPage->hide();
panel.mNetworkModeLogListPage->hide();
panel.mNetworkModeLogViewPage->hide();
panel.mRemoteZTCtrlPage->hide();
}
QString COutilZT::GetLogDataPath()
{
return mSettingsData.mDataSourceDirectoryPath;
}
QString COutilZT::GetTrainLogsTempPath()
{
return QString("./Temp/");
}
void COutilZT::CleanTrainLogsTempPath()
{
QDir TrainLogsTempDir(GetTrainLogsTempPath());
TrainLogsTempDir.setFilter(QDir::Files | QDir::NoDotAndDotDot);
QFileInfoList fileslist = TrainLogsTempDir.entryInfoList();
for(int i = 0; i < fileslist.size(); i++)
{
QDir().remove(fileslist.at(i).filePath());
}
}
unsigned int COutilZT::DataSourceDirChanged(QString NewPath)
{
mSettingsData.mDataSourceDirectoryPath = NewPath;
mSettingsFileMgr.SaveSettings(&mSettingsData);
mDatabaseModeLogManager.SetLogDataDir(NewPath);
mZTLogFilesManager.SetLogDataDir(NewPath);
LogsDatabaseChanged(0);
return RET_OK;
}
unsigned int COutilZT::NetworkDataChanged()
{
mSettingsFileMgr.SaveSettings(&mSettingsData);
//todo: Notify network manager...
return RET_OK;
}
unsigned int COutilZT::LogsDatabaseChanged(QStringList *NewLogs)
{
if(NewLogs == 0)
{
mDatabaseModeLogManager.ParseLogs(true,false);
}
else
{
mDatabaseModeLogManager.ParseImportedLogs(NewLogs);
}
// ZTLogFilesChanged();
mZTLogFilesManager.ParseZTLogFiles(true);
return RET_OK;
}
unsigned int COutilZT::RebuildDatabaseFile()
{
mDatabaseModeLogManager.ParseLogs(true,false);
// mRebuildingDB = true;
mZTLogFilesManager.ParseZTLogFiles(true);
return RET_OK;
}
unsigned int COutilZT::LogsDatabaseLoaded(CLogMgr *Caller, int Status)
{
if(Caller == &mDatabaseModeLogManager)
{
// QMessageBox::information(0,"Parsing Finished","Parsing finished");
if(Status == 1)
{
panel.mDatabaseModeLogListPage->RefreshList();
panel.mDatabaseMgrPage->UpdateDBStats();
// if(mRebuildingDB)
// {
// mZTLogFilesManager.ParseZTLogFiles(true);
// mRebuildingDB = false;
// }
}
else
{
QMessageBox::information(0,"Erreur","Impossible de charger la base de données");
}
panel.mProgressBarPage->hide();
}
if(Caller == &mNetworkModeLogManager)
{
panel.mNetworkModeLogListPage->RefreshList();
}
return RET_OK;
}
unsigned int COutilZT::UpdateLogsList(CLogMgr *Caller)
{
if(Caller == &mDatabaseModeLogManager)
{
panel.mDatabaseModeLogListPage->RefreshList();
}
if(Caller == &mNetworkModeLogManager)
{
panel.mNetworkModeLogListPage->RefreshList();
}
return RET_OK;
}
unsigned int COutilZT::DatabaseFetchingBegin(CLogMgr *Caller)
{
if(Caller == &mDatabaseModeLogManager)
{
panel.mProgressBarPage->SetProgressBarRange(0);
panel.mProgressBarPage->SetTitle("Chargement de la base de données");
panel.mProgressBarPage->SetMiscLabel("");
panel.mProgressBarPage->show();
}
return RET_OK;
}
unsigned int COutilZT::DatabaseFetchingTick(CLogMgr *Caller,int Index)
{
// qDebug() << "Rx new Train Log: " << FileName;
if(Caller == &mDatabaseModeLogManager)
{
panel.mProgressBarPage->Tick();
panel.mProgressBarPage->SetMiscLabel(QString("%1 passages chargés").arg(Index));
}
return RET_OK;
}
unsigned int COutilZT::ZTLogFilesChanged()
{
mZTLogFilesManager.SaveDatabaseFile();
mZTLogFilesManager.ParseZTLogFiles(false);
return RET_OK;
}
unsigned int COutilZT::ShowZTLogFile(QString FilePath)
{
panel.mZTLogFileViewerPage->SetZTLogText(FilePath);
return RET_OK;
}
unsigned int COutilZT::ZTLogFilesDatabaseLoaded(CZTLogFilesMgr *Caller, int Status)
{
if(Caller == &mZTLogFilesManager)
{
if(Status == 1)
{
panel.mZTLogsListPage->RefreshList();
panel.mDatabaseMgrPage->UpdateDBStats();
// panel.mProgressBarPage->hide();
}
else
{
// QMessageBox::information(0,"Parsing failed","Parsing failed");
}
}
return RET_OK;
}
unsigned int COutilZT::ZTLogFilesFetchingBegin(CZTLogFilesMgr *Caller)
{
if(Caller == &mZTLogFilesManager)
{
// panel.mProgressBarPage->SetProgressBarRange(0);
// panel.mProgressBarPage->SetTitle("Chargement des fichiers LOG");
// panel.mProgressBarPage->SetMiscLabel("");
// panel.mProgressBarPage->show();
}
return RET_OK;
}
unsigned int COutilZT::ZTLogFilesFetchingTick(CZTLogFilesMgr *Caller, int Index, QString File)
{
if(Caller == &mZTLogFilesManager)
{
// panel.mProgressBarPage->Tick();
// panel.mProgressBarPage->SetMiscLabel(QString("%1 passages chargés : %2").arg(Index).arg(File));
}
return RET_OK;
}
unsigned int COutilZT::ConnectToZTRequest()
{
int ID = panel.mNetworkZTListPage->GetSelectedZT();
CNetworkManager::instance()->ConnectToZT(ID);
return RET_OK;
}
unsigned int COutilZT::RxStationName(QString StationName)
{
panel.mRemoteZTPage->SetRemoteZTName(StationName);
return RET_OK;
}
unsigned int COutilZT::DisconnectZTRequest()
{
return CNetworkManager::instance()->DisconnectZT();
}
unsigned int COutilZT::RefreshRemoteZTStatusRequest()
{
if(CNetworkManager::instance()->RefreshRemoteZTStatus() == RET_OK)
{
panel.mNetworkCtrlPage->DisableNetworkButtons();
return RET_OK;
}
return RET_ERROR;
}
unsigned int COutilZT::RxZTStatus(const CTCPZTStatus &status)
{
panel.mNetworkCtrlPage->EnableNetworkButtons();
panel.mRemoteZTPage->SetRemoteZTStatus(&status);
panel.mRemoteZTCtrlPage->UpdateDisplay(&status);
return RET_OK;
}
unsigned int COutilZT::DownloadZTLogRequest()
{
if(CNetworkManager::instance()->DownloadZTLog() == RET_OK)
{
panel.mNetworkCtrlPage->DisableNetworkButtons();
return RET_OK;
}
return RET_ERROR;
}
unsigned int COutilZT::RxZTLog(QString ZTLog)
{
panel.mNetworkCtrlPage->EnableNetworkButtons();
panel.mZTLogViewerPage->SetZTLogText(ZTLog);
panel.mZTLogViewerPage->show();
return RET_OK;
}
unsigned int COutilZT::DownloadTrainLogsRequest()
{
if(CNetworkManager::instance()->DownloadTrainLogs() == RET_OK)
{
panel.mNetworkCtrlPage->DisableNetworkButtons();
return RET_OK;
}
return RET_ERROR;
}
unsigned int COutilZT::DownloadTrainLogsBegin(int NbLogs)
{
CleanTrainLogsTempPath();
panel.mProgressBarPage->SetProgressBarRange(NbLogs);
panel.mProgressBarPage->SetTitle(QString("Réception de %1 fichiers").arg(NbLogs));
panel.mProgressBarPage->SetMiscLabel("");
panel.mProgressBarPage->show();
return RET_OK;
}
unsigned int COutilZT::RxTrainLogData(QString FileName)
{
qDebug() << "Rx new Train Log: " << FileName;
panel.mProgressBarPage->Tick();
panel.mProgressBarPage->SetMiscLabel(QString("Réception: %1").arg(FileName));
return RET_OK;
}
unsigned int COutilZT::RxTrainLogsDownloadFinished()
{
panel.mNetworkCtrlPage->EnableNetworkButtons();
qDebug("TrainLogs download finished");
mNetworkModeLogManager.ParseLogs();
panel.mNetworkModeLogListPage->RefreshList();
panel.mProgressBarPage->hide();
return RET_OK;
}
unsigned int COutilZT::DeleteRemoteZTLogRequest()
{
if(CNetworkManager::instance()->DeleteRemoteZTLog() == RET_OK)
{
panel.mNetworkCtrlPage->DisableNetworkButtons();
return RET_OK;
}
return RET_ERROR;
}
unsigned int COutilZT::RemoteZTLogDeleted(bool Success)
{
panel.mNetworkCtrlPage->EnableNetworkButtons();
return RET_OK;
}
unsigned int COutilZT::SetZTFunctionsStatus(CTCPZTFunctionsStatus status)
{
if(CNetworkManager::instance()->SetZTFunctions(status) == RET_OK)
{
panel.mNetworkCtrlPage->DisableNetworkButtons();
return RET_OK;
}
return RET_ERROR;
}
unsigned int COutilZT::SetZTFunctionsSatusDone(bool succes)
{
panel.mNetworkCtrlPage->EnableNetworkButtons();
return RET_OK;
}
//Catch and manage some events from the graphics user interface
//like the keyboard Exit sequence (Ctrl-F10)
bool COutilZT::eventFilter(QObject *obj, QEvent *event)
{
if(obj == &panel) //Check if event is coming from the GUI
{
if(event->type() == QEvent::KeyPress)
{
QKeyEvent *KeyEvent = static_cast<QKeyEvent*>(event);
//Check if we received CTRL-F10
if(KeyEvent->key() == Qt::Key_F10 &&
KeyEvent->modifiers() == Qt::ControlModifier)
{
QApplication::exit(78); //Quit the application
return true; //keep the keystroke
}
}
}
return QObject::eventFilter(obj,event);
}
QString COutilZT::GetStationName(int StationID)
{
switch(StationID)
{
case ANGRIGNON_ZT_ID:
{
return QString("Angrignon");
break;
}
case HONORE_BEAUGRAND_ZT_ID:
{
return QString("Honoré-Beaugrand");
break;
}
case LONGUEUIL_ZT_ID:
{
return QString("Longueuil");
break;
}
case BERRI_UQAM_ZT_ID:
{
return QString("Berri-UQAM");
break;
}
case SNOWDON_ZT_ID:
{
return QString("Snowdon");
break;
}
case SAINT_MICHEL_ZT_ID:
{
return QString("Saint-Michel");
break;
}
case COTE_VERTU_ZT_ID:
{
return QString("Côte-Vertu");
break;
}
case HENRI_BOURASSA_ZT_ID:
{
return QString("Henri-Bourassa");
break;
}
case MONTMORENCY_ZT_ID:
{
return QString("Montmorency");
break;
}
case MONTMORENCY_10_12_ZT_ID:
{
return QString("Montmorency 10/12");
break;
}
case MONTMORENCY_10_22_ZT_ID:
{
return QString("Montmorency 10/22");
break;
}
}
return QString("Unknown !!!");
}

158
sources/OutilZT.h Normal file
View File

@ -0,0 +1,158 @@
/*******************************************************************************
* *
* 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 OUTILZT_H
#define OUTILZT_H
#include "MainPanel.h"
#include "LogMgr.h"
#include "ZTData.h"
#include "Settings.h"
#include "TCPProtocol.h"
#include "ZTLogFilesMgr.h"
class COutilZT : public QObject
{
Q_OBJECT
public:
typedef enum
{
MODE_DATABASE,
MODE_NETWORK,
MODE_ZTLOG,
MODE_INVALID
}OutilZTMode;
COutilZT();
~COutilZT();
unsigned int Start();
QString GetLogDataPath();
QString GetTrainLogsTempPath();
void CleanTrainLogsTempPath();
static QString GetStationName(int StationID);
bool IsEngMode(){return mIsEngMode;}
//CLogList requests
void LogViewRequest(CLogElement* Element, CLogsListPage* caller);
unsigned int SetLogProtection(bool protection, CLogElement* Element, CLogsListPage *caller);
//CLogView requests
void LogViewCloseRequest(CLogViewPage *caller);
//CMainPage requests
void ShowOptionsRequest();
void HideOptionsRequest();
void ShowDatabaseMgrRequest();
void HideDatabaseMgrRequest();
void EnterDatabaseModeRequest();
void EnterNetworkModeRequest();
void EnterZTLogModeRequest();
void ShowZTLogRequest(QString Log, QString FocusText, int line = -1);
//Networkmode page requests
void ShowNetworkModeLogViewRequest();
void HideNetworkModeLogViewRequest();
void ShowRemoteTrainLogsViewPages();
void ShowRemoteControlPage();
void ShowRemoteLiveZTPage();
//Settings page requests
unsigned int DataSourceDirChanged(QString NewPath);
unsigned int NetworkDataChanged();
//DatabaseManager page requests
unsigned int LogsDatabaseChanged(QStringList *NewLogs);
unsigned int ZTLogFilesChanged();
unsigned int RebuildDatabaseFile();
//LogManager requests
unsigned int LogsDatabaseLoaded(CLogMgr *Caller, int Status);
unsigned int UpdateLogsList(CLogMgr *Caller);
unsigned int DatabaseFetchingBegin(CLogMgr *Caller);
unsigned int DatabaseFetchingTick(CLogMgr *Caller,int Index);
//ZTLogFilesPage requests
unsigned int ShowZTLogFile(QString FilePath);
//ZTLogFilesMgr requests
unsigned int ZTLogFilesDatabaseLoaded(CZTLogFilesMgr *Caller, int Status);
unsigned int ZTLogFilesFetchingBegin(CZTLogFilesMgr *Caller);
unsigned int ZTLogFilesFetchingTick(CZTLogFilesMgr *Caller, int Index, QString File = "");
//Network requests
unsigned int ConnectToZTRequest();
unsigned int DisconnectZTRequest();
unsigned int RxStationName(QString StationName);
unsigned int RefreshRemoteZTStatusRequest();
unsigned int RxZTStatus(const CTCPZTStatus &status);
unsigned int DownloadZTLogRequest();
unsigned int RxZTLog(QString ZTLog);
unsigned int DownloadTrainLogsRequest();
unsigned int DownloadTrainLogsBegin(int NbLogs);
unsigned int RxTrainLogData(QString FileName);
unsigned int RxTrainLogsDownloadFinished();
unsigned int DeleteRemoteZTLogRequest();
unsigned int RemoteZTLogDeleted(bool Success);
unsigned int SetZTFunctionsStatus(CTCPZTFunctionsStatus status);
unsigned int SetZTFunctionsSatusDone(bool succes);
bool mIsEngMode;
bool mCanImport;
bool mRebuildingDB;
private:
unsigned int InitZT();
Panel panel;
CLogMgr mDatabaseModeLogManager;
CLogMgr mNetworkModeLogManager;
CSettingsFileMgr mSettingsFileMgr;
CSettingsData mSettingsData;
CZTLogFilesMgr mZTLogFilesManager;
OutilZTMode mOutilZTMode;
protected:
bool eventFilter(QObject *obj, QEvent *event);
};
#endif // OUTILZT_H

6
sources/OutilZTVersion.h Normal file
View File

@ -0,0 +1,6 @@
#ifndef OUTILZTVERSION_H
#define OUTILZTVERSION_H
#define SOFTWARE_VERSION "1.14"
#endif // OUTILZTVERSION_H

140
sources/Settings.cpp Normal file
View File

@ -0,0 +1,140 @@
/*******************************************************************************
* *
* Société de Transports de Montréal. *
* 2012 *
* *
* Projet Zones Tests *
* *
* *
* *
*******************************************************************************/
/*
Description:
Utilisée pour la configuration non volatile de certains paramètres comme
les fonction de détection hors service (TK HS). Les paramètres sont sauvegardés
dans un fichier binaire qui est ouvert au démarrage du programme.
*/
/* ************************************************************************** */
/* Revision:
### 20121219 JFM
Verision d'origine.
### YYYYMMDD Description du besoin ou du bug
Description du changement.
*/
/* ************************************************************************** */
#include "Settings.h"
#include <QTextStream>
#include <QFile>
CSettingsFileMgr::CSettingsFileMgr()
{
}
unsigned int CSettingsFileMgr::LoadSettings(CSettingsData *SettingsData)
{
QFile* SettingsFile = new QFile("./Configuration/Settings.ozs");
if(SettingsFile)
{
if(SettingsFile->open(QIODevice::ReadOnly | QIODevice::Unbuffered) == false)
{
LoadDefaultSettings(SettingsData);
SaveSettings(SettingsData);
return RET_ERROR;
}
}
else
{
LoadDefaultSettings(SettingsData);
return RET_ERROR;
}
QDataStream * InputStream = new QDataStream(SettingsFile);
quint32 MagicNbr;// = 0xBAADCAFE;
*InputStream >> MagicNbr;
if(MagicNbr != 0xBAADCAFE)
{
LoadDefaultSettings(SettingsData);
return RET_ERROR;
}
int NbNetworkEntries = 0;
*InputStream >> SettingsData->mDataSourceDirectoryPath;
*InputStream >> NbNetworkEntries;
for(int i = 0; i < NbNetworkEntries; i++)
{
CZTNetworkConfig NewCfg;
*InputStream >> NewCfg;
SettingsData->mNetworkCfgList.append(NewCfg);
}
SettingsFile->close();
delete SettingsFile;
delete InputStream;
return RET_OK;
}
unsigned int CSettingsFileMgr::SaveSettings(CSettingsData *SettingsData)
{
QFile* SettingsFile = new QFile("./Configuration/Settings.ozs");
if(SettingsFile)
{
if(SettingsFile->open(QIODevice::WriteOnly | QIODevice::Unbuffered) == false)
{
return RET_ERROR;
}
}
else
{
return RET_ERROR;
}
QDataStream * OutputStream = new QDataStream(SettingsFile);
quint32 MagicNbr = 0xBAADCAFE;
*OutputStream << MagicNbr;
*OutputStream << SettingsData->mDataSourceDirectoryPath;
*OutputStream << SettingsData->mNetworkCfgList.size();
for(int i = 0; i < SettingsData->mNetworkCfgList.size(); i++)
{
*OutputStream << SettingsData->mNetworkCfgList.at(i);
}
SettingsFile->flush();
SettingsFile->close();
delete SettingsFile;
delete OutputStream;
return RET_OK;
}
void CSettingsFileMgr::LoadDefaultSettings(CSettingsData *SettingsData)
{
SettingsData->mDataSourceDirectoryPath = "./Trains/";
SettingsData->mNetworkCfgList.clear();
QString BaseIP = "192.168.0.11";
for(int i = 0; i < NB_ZT_ID; i++)
{
CZTNetworkConfig ZTNetCfg;
ZTNetCfg.mZTID = i;
ZTNetCfg.mIPAdress = BaseIP + QString::number(i);
SettingsData->mNetworkCfgList.append(ZTNetCfg);
}
}

22
sources/Settings.h Normal file
View File

@ -0,0 +1,22 @@
#ifndef SETTINGS_H
#define SETTINGS_H
#include "GlobalDefine.h"
#include "ZTData.h"
class CSettingsFileMgr
{
public:
CSettingsFileMgr();
unsigned int LoadSettings(CSettingsData *SettingsData);
unsigned int SaveSettings(CSettingsData *SettingsData);
void LoadDefaultSettings(CSettingsData *SettingsData);
private:
};
#endif // SETTINGS_H

330
sources/TCPProtocol.cpp Normal file
View File

@ -0,0 +1,330 @@
#include "TCPProtocol.h"
#include <QByteArray>
#include <QDataStream>
#include <QDebug>
CTCPProtocol::CTCPProtocol()
{
ResetRxStateMachine();
}
unsigned int CTCPProtocol::AnalyzeNewData(QByteArray data)
{
QDataStream stream(data);
stream.device()->seek(0);
switch(mProtocolRxState)
{
case TCP_PROTOCOL_GET_HEADER_STATE:
{
quint32 header;
qint32 msg;
stream >> header;
if(header != TCP_PROTOCOL_HEADER)
{
return RET_ERROR;
}
stream >> msg;
stream >> mCurTransactionDataSize;
mCurTransactionMsg = (eTCPMessage)msg;
if(mCurTransactionDataSize != 0)
{
mCurTransactionData = stream.device()->readAll();
if(mCurTransactionData.size() < mCurTransactionDataSize)
{
mProtocolRxState = TCP_PROTOCOL_GET_DATA_STATE;
// qDebug() << "Datasize is: " << mCurTransactionDataSize << ". Going in GET_DATA_STATE";
}
else if(mCurTransactionData.size() > mCurTransactionDataSize)
{
//error
// qDebug("Rx data [%d] > Transaction data [%d]. Aborting transaction",mCurTransactionData.size(),(int)mCurTransactionDataSize);
ResetRxStateMachine();
}
else
{
DecodeTCPMessage();
ResetRxStateMachine();
}
}
else
{
DecodeTCPMessage();
ResetRxStateMachine();
}
break;
}
case TCP_PROTOCOL_GET_MSG_STATE:
{
break;
}
case TCP_PROTOCOL_GET_DATASIZE_STATE:
{
break;
}
case TCP_PROTOCOL_GET_DATA_STATE:
{
mCurTransactionData.append(data);
if(mCurTransactionData.size() == mCurTransactionDataSize)
{
//All data received
// qDebug() << "Data Rx complete... New data size = " << mCurTransactionData.size();
DecodeTCPMessage();
ResetRxStateMachine();
}
else if(mCurTransactionData.size() > mCurTransactionDataSize)
{
//error
qDebug("Rx data > Transaction data. Aborting transaction");
ResetRxStateMachine();
}
else
{
// qDebug() << "Chunk received. New data size = " << mCurTransactionData.size();
}
break;
}
}
return RET_OK;
}
QByteArray CTCPProtocol::GetHeartbeatReqPacket()
{
return BuildSimpleRequestPacket((qint32)TCP_MSG_HEARTBEAT_REQUEST);
}
QByteArray CTCPProtocol::GetStationNameReqPacket()
{
return BuildSimpleRequestPacket((qint32)TCP_MSG_STATION_NAME_REQUEST);
}
QByteArray CTCPProtocol::GetZTStatusReqPacket()
{
return BuildSimpleRequestPacket((qint32)TCP_MSG_ZT_STATUS_REQUEST);
}
QByteArray CTCPProtocol::GetZTLogDownloadReqPacket()
{
return BuildSimpleRequestPacket((qint32)TCP_MSG_ZTLOG_DOWNLOAD_REQUEST);
}
QByteArray CTCPProtocol::BuildSimpleRequestPacket(qint32 RequestID)
{
QByteArray packet;
packet.clear();
QDataStream stream(&packet,QIODevice::WriteOnly);
stream.device()->seek(0);
stream << TCP_PROTOCOL_HEADER << RequestID << (qint64)0;
return packet;
}
QByteArray CTCPProtocol::GetTrainLogsDownloadReqPacket()
{
return BuildSimpleRequestPacket((qint32)TCP_MSG_TRAINLOGS_DOWNLOAD_REQUEST);
}
QByteArray CTCPProtocol::GetTrainLogsFileDataAckPacket(qint32 Acknowledge)
{
QByteArray packet;
packet.clear();
QDataStream stream(&packet,QIODevice::WriteOnly);
stream.device()->seek(0);
qint64 size = 4;
stream << TCP_PROTOCOL_HEADER << (qint32)TCP_MSG_TRAINLOG_FILE_DATA_ACK << size << Acknowledge;
return packet;
}
QByteArray CTCPProtocol::GetDeleteZTLogReqPacket()
{
return BuildSimpleRequestPacket((qint32)TCP_MSG_DELETE_ZTLOG_REQUEST);
}
QByteArray CTCPProtocol::GetSetZTFunctionsPacket(QByteArray &Data)
{
QByteArray packet;
packet.clear();
QDataStream stream(&packet,QIODevice::WriteOnly);
stream.device()->seek(0);
qint64 size = Data.size();
stream << TCP_PROTOCOL_HEADER << (qint32)TCP_MSG_SET_ZT_FUNCTIONS << size;
packet.append(Data);
return packet;
}
void CTCPProtocol::TCPTxRequest(const QByteArray &request)
{
qDebug("No reimplementation of TXRequest in TCPProtocol.c. Request not sent...");
}
void CTCPProtocol::ResetRxStateMachine()
{
mCurTransactionData.clear();
mCurTransactionDataSize = 0;
mCurTransactionMsg = TCP_MSG_UNKNOWN;
mProtocolRxState = TCP_PROTOCOL_GET_HEADER_STATE;
}
int CTCPProtocol::DecodeTCPMessage()
{
switch(mCurTransactionMsg)
{
case TCP_MSG_HEARTBEAT_RESPONSE:
{
TCPRxHeartbeat();
break;
}
case TCP_MSG_STATION_NAME_RESPONSE:
{
TCPRxStationName(QString(mCurTransactionData));
break;
}
case TCP_MSG_ZT_STATUS_RESPONSE:
{
TCPRxZTStatus(mCurTransactionData);
break;
}
case TCP_MSG_ZTLOG_DOWNLOAD_RESPONSE:
{
TCPRxZTLog(QString(mCurTransactionData));
break;
}
case TCP_MSG_TRAINSLOGS_DOWNLOAD_ACK:
{
qint32 NbFiles = 0;
QDataStream strm(mCurTransactionData);
strm.device()->seek(0);
strm >> NbFiles;
TCPRxTrainLogsDownladAck(NbFiles);
break;
}
case TCP_MSG_TRAINLOG_FILE_DATA:
{
TCPRxTrainLogFileData(mCurTransactionData);
break;
}
case TCP_MSG_TRAINLOGS_DOWNLOAD_FINISHED:
{
TCPRxTrainLogsDownloadFinished();
break;
}
case TCP_MSG_DELETE_ZTLOG_ACK:
{
qint32 ack;
QDataStream strm(mCurTransactionData);
strm.device()->seek(0);
strm >> ack;
TCPRxDeleteZTLogAck((bool)ack);
break;
}
case TCP_MSG_SET_ZT_FUNCTIONS_ACK:
{
qint32 ack;
QDataStream strm(mCurTransactionData);
strm.device()->seek(0);
strm >> ack;
TCPRxSetZTFunctionsAck(ack);
break;
}
case TCP_MSG_SET_ZT_FUNCTIONS:
case TCP_MSG_DELETE_ZTLOG_REQUEST:
case TCP_MSG_HEARTBEAT_REQUEST:
case TCP_MSG_STATION_NAME_REQUEST:
case TCP_MSG_ZT_STATUS_REQUEST:
case TCP_MSG_ZTLOG_DOWNLOAD_REQUEST:
case TCP_MSG_TRAINLOGS_DOWNLOAD_REQUEST:
case TCP_MSG_TRAINLOG_FILE_DATA_ACK:
case TCP_MSG_UNKNOWN:
{
qDebug() << "Received invalid msg:" << mCurTransactionMsg;
break;
}
}
return RET_OK;
}
QDataStream &operator>>(QDataStream &in, CTCPZTStatus &dest)
{
in >> dest.mZT1Status
>> dest.mZT2Status
>> dest.mNbPass
>> dest.mNbTrigs
>> dest.mZTStartDateTime
>> dest.mActualDateTime
>> dest.mPGTreshold
>> dest.mModeMaintenanceON
>> dest.mCalibModeON
>> dest.mFNTKActive
>> dest.mFNAnalysisActive
>> dest.mPGTKActive
>> dest.mPGAnalysisActive
>> dest.mPP1TKActive
>> dest.mPP1AnalysisActive
>> dest.mPP2TKActive
>> dest.mPP2AnalysisActive
>> dest.mZT1TKActive
>> dest.mZT1AnalysisActive
>> dest.mZT2TKActive
>> dest.mZT2AnalysisActive
>> dest.mUSBKeyConnected;
return in;
}
QDataStream &operator>>(QDataStream &in, CTCPZTFunctionsStatus &dest)
{
in >> dest.mFNTKActive
>> dest.mFNAnalysisActive
>> dest.mPGTKActive
>> dest.mPGAnalysisActive
>> dest.mPP1TKActive
>> dest.mPP1AnalysisActive
>> dest.mPP2TKActive
>> dest.mPP2AnalysisActive
>> dest.mZT1TKActive
>> dest.mZT1AnalysisActive
>> dest.mZT2TKActive
>> dest.mZT2AnalysisActive;
return in;
}
QDataStream &operator<<(QDataStream &out, const CTCPZTFunctionsStatus &source)
{
out << source.mFNTKActive
<< source.mFNAnalysisActive
<< source.mPGTKActive
<< source.mPGAnalysisActive
<< source.mPP1TKActive
<< source.mPP1AnalysisActive
<< source.mPP2TKActive
<< source.mPP2AnalysisActive
<< source.mZT1TKActive
<< source.mZT1AnalysisActive
<< source.mZT2TKActive
<< source.mZT2AnalysisActive;
return out;
}

146
sources/TCPProtocol.h Normal file
View File

@ -0,0 +1,146 @@
#ifndef TCPPROTOCOL_H
#define TCPPROTOCOL_H
#include "GlobalDefine.h"
#include <QByteArray>
#include <QDateTime>
#define TCP_PROTOCOL_HEADER (quint32)0xDEADCAFE
class CTCPProtocol
{
public:
typedef enum
{
TCP_MSG_HEARTBEAT_REQUEST,
TCP_MSG_HEARTBEAT_RESPONSE,
TCP_MSG_STATION_NAME_REQUEST,
TCP_MSG_STATION_NAME_RESPONSE,
TCP_MSG_ZT_STATUS_REQUEST,
TCP_MSG_ZT_STATUS_RESPONSE,
TCP_MSG_ZTLOG_DOWNLOAD_REQUEST,
TCP_MSG_ZTLOG_DOWNLOAD_RESPONSE,
TCP_MSG_TRAINLOGS_DOWNLOAD_REQUEST,
TCP_MSG_TRAINSLOGS_DOWNLOAD_ACK,
TCP_MSG_TRAINLOG_FILE_DATA,
TCP_MSG_TRAINLOG_FILE_DATA_ACK,
TCP_MSG_TRAINLOGS_DOWNLOAD_FINISHED,
TCP_MSG_DELETE_ZTLOG_REQUEST,
TCP_MSG_DELETE_ZTLOG_ACK,
TCP_MSG_SET_ZT_FUNCTIONS,
TCP_MSG_SET_ZT_FUNCTIONS_ACK,
TCP_MSG_UNKNOWN
}eTCPMessage;
typedef enum
{
TCP_PROTOCOL_GET_HEADER_STATE,
TCP_PROTOCOL_GET_MSG_STATE,
TCP_PROTOCOL_GET_DATASIZE_STATE,
TCP_PROTOCOL_GET_DATA_STATE
}eTCPProtocolState;
typedef enum
{
TCP_PROTOCOL_NACK,
TCP_PROTOCOL_ACK,
TCP_PROTOCOL_NACK_ABORT,
TCP_PROTOCOL_INVALID_ACK
}eTCPProtocolAcknowledge;
CTCPProtocol();
virtual void TCPTxRequest(const QByteArray &request) = 0;
virtual void TCPRxHeartbeat() = 0;
virtual void TCPRxStationName(QString Name) = 0;
virtual void TCPRxZTStatus(const QByteArray &data) = 0;
virtual void TCPRxZTLog(QString ZTLog) = 0;
virtual void TCPRxTrainLogsDownladAck(qint32 NbFiles) = 0;
virtual void TCPRxTrainLogFileData(const QByteArray &TrainFileData) = 0;
virtual void TCPRxTrainLogsDownloadFinished() = 0;
virtual void TCPRxDeleteZTLogAck(bool ack) = 0;
virtual void TCPRxSetZTFunctionsAck(bool ack) = 0;
unsigned int AnalyzeNewData(QByteArray data);
QByteArray GetHeartbeatReqPacket();
QByteArray GetStationNameReqPacket();
QByteArray GetZTStatusReqPacket();
QByteArray GetZTLogDownloadReqPacket();
QByteArray GetTrainLogsDownloadReqPacket();
QByteArray GetTrainLogsFileDataAckPacket(qint32 Acknowledge);
QByteArray GetDeleteZTLogReqPacket();
QByteArray GetSetZTFunctionsPacket(QByteArray &Data);
private:
eTCPProtocolState mProtocolRxState;
eTCPMessage mCurTransactionMsg;
qint64 mCurTransactionDataSize;
QByteArray mCurTransactionData;
void ResetRxStateMachine();
int DecodeTCPMessage();
QByteArray BuildSimpleRequestPacket(qint32 RequestID);
};
class CTCPZTStatus
{
public:
quint32 mZT1Status; //
quint32 mZT2Status;
quint32 mNbPass;
quint32 mNbTrigs;
QDateTime mZTStartDateTime;
QDateTime mActualDateTime;
qint32 mPGTreshold;
bool mModeMaintenanceON;
bool mCalibModeON;
bool mFNTKActive;
bool mFNAnalysisActive;
bool mPGTKActive;
bool mPGAnalysisActive;
bool mPP1TKActive;
bool mPP1AnalysisActive;
bool mPP2TKActive;
bool mPP2AnalysisActive;
bool mZT1TKActive;
bool mZT1AnalysisActive;
bool mZT2TKActive;
bool mZT2AnalysisActive;
bool mUSBKeyConnected;
};
QDataStream &operator>>(QDataStream &in, CTCPZTStatus &dest);
class CTCPZTFunctionsStatus
{
public:
bool mFNTKActive;
bool mFNAnalysisActive;
bool mPGTKActive;
bool mPGAnalysisActive;
bool mPP1TKActive;
bool mPP1AnalysisActive;
bool mPP2TKActive;
bool mPP2AnalysisActive;
bool mZT1TKActive;
bool mZT1AnalysisActive;
bool mZT2TKActive;
bool mZT2AnalysisActive;
};
QDataStream &operator>>(QDataStream &in, CTCPZTFunctionsStatus &dest);
QDataStream &operator<<(QDataStream &out, const CTCPZTFunctionsStatus &source);
#endif // TCPPROTOCOL_H

952
sources/TrainLogFileMgr.cpp Normal file
View File

@ -0,0 +1,952 @@
/*******************************************************************************
* *
* Société de Transports de Montréal. *
* 2012 - 2013 *
* *
* Projet Zones Tests *
* *
* *
* *
*******************************************************************************/
/*
Description:
Cette classe est responsable de la sauvegarde et de l'ouverture des fichiers
log de passage des trains.
*/
/* ************************************************************************** */
/* Revision:
### YYYMMDD JFM
Verision d'origine.
### YYYYMMDD Description du besoin ou du bug
Description du changement.
*/
/* ************************************************************************** */
#include "TrainLogFileMgr.h"
#include <QFile>
#include <QTextStream>
#include "LogMgr.h"
CTrainLogFileMgr CTrainLogFileMgr::mSingleton;
CTrainLogFileMgr::CTrainLogFileMgr()
{
}
//unsigned int CTrainLogFileMgr::SaveTrainLog(QString LogFilePathName, CZT1Log *ZT1Log, QList<CZTDetectionData *> *ZT1DetectionsLog,QString StationName)
unsigned int CTrainLogFileMgr::SaveTrainLog(QString LogFilePathName, CZT1Log *ZT1Log, QVector<CZTDetectionData *> *ZT1DetectionsLog,QString StationName)
{
QFile* BinaryLogFile = new QFile(LogFilePathName);
if(BinaryLogFile)
{
if(BinaryLogFile->open(QIODevice::WriteOnly | QIODevice::Unbuffered) == false)
{
qDebug("Could not create log file : %s",LogFilePathName.toLatin1().data());
delete BinaryLogFile;
return RET_ERROR;
}
}
else
return RET_ERROR;
QDataStream * OutputStream = new QDataStream(BinaryLogFile);
quint32 MagicNbr = 0xDEADBEEF;
quint32 NbLogEntry = 0,NbDetections = 0;
quint32 LogType = ZT1_LOG_TYPE;
NbLogEntry = ZT1Log->mZT1LogData.size();
NbDetections = ZT1DetectionsLog->size();
quint32 TrainType = 0;
quint32 NbElements = 0;
quint64 ThreadDataStartTime = 0, ThreadDataEndTime = 0;
qreal MeanSpeed = 0;
QDateTime DateTime;
//Compute some stats
int SpeedSampleCount = 0;
bool TrainTypeFound = false;
unsigned int NbBogie = 0;
bool ThreadStartTimeFound = false, ThreadEndTimeFound = false;
for(unsigned int i = 0; i < NbLogEntry; i++)
{
if(ZT1Log->mZT1LogData.at(i)->mZT1ThreadData != 0)
{
//get the train type
if(!TrainTypeFound)
{
if(ZT1Log->mZT1LogData.at(i)->mZT1ThreadData->mTrainType != TRAIN_TYPE_UNKNOWN)
{
TrainType = ZT1Log->mZT1LogData.at(i)->mZT1ThreadData->mTrainType;
TrainTypeFound = true;
}
}
//Get the rank count for the train
if(ZT1Log->mZT1LogData.at(i)->mZT1ThreadData->mRank > NbBogie)
NbBogie = ZT1Log->mZT1LogData.at(i)->mZT1ThreadData->mBogie;
//Find the time limits
if(ThreadStartTimeFound == false)
{
ThreadStartTimeFound = true;
ThreadDataStartTime = ZT1Log->mZT1LogData.at(i)->mTimestamp;
}
//Compute the mean speed
if(ZT1Log->mZT1LogData.at(i)->mZT1ThreadData->mTrainSpeed != 0)
{
MeanSpeed += ZT1Log->mZT1LogData.at(i)->mZT1ThreadData->mTrainSpeed;
SpeedSampleCount++;
}
}
else
{
//Find the time limits
if(ThreadStartTimeFound == true && ThreadEndTimeFound == false)
{
ThreadEndTimeFound = true;
ThreadDataEndTime = ZT1Log->mZT1LogData.at(i-1)->mTimestamp;
}
}
}
MeanSpeed /= SpeedSampleCount;
NbElements = NbBogie/6;
DateTime = ZT1Log->mZT1LogData.first()->mDateTime;
*OutputStream << MagicNbr << LogType << NbLogEntry << NbDetections;
*OutputStream << StationName;
*OutputStream << ZT1Log->mZT1Flags;
*OutputStream << TrainType << NbElements << ThreadDataStartTime << ThreadDataEndTime << MeanSpeed << DateTime;
//write detections
for(unsigned int i =0; i < NbDetections; i++)
{
*OutputStream << *ZT1DetectionsLog->at(i);
}
//write train passage log
for(unsigned int i = 0; i < NbLogEntry; i++)
{
*OutputStream << *ZT1Log->mZT1LogData.at(i);
}
#ifdef USE_ANALOG_ACQUISITION
//write analog data if present.
if(ZT1Log->mZT1Flags.mAnalogTracePresent == 1)
{
for(unsigned int i = 0; i < NbLogEntry; i++)
{
*OutputStream << ZT1Log->mZT1LogData.at(i)->mAnalogData;
}
}
#endif
BinaryLogFile->close();
delete BinaryLogFile;
delete OutputStream;
return RET_OK;
}
unsigned int CTrainLogFileMgr::SaveTrainLog(QString LogFilePathName, QVector<CZT2LogData *> *ZT2Log, QVector<CZTDetectionData *> *ZT2DetectionsLog, QString StationName)
{
QFile* BinaryLogFile = new QFile(LogFilePathName);
if(BinaryLogFile)
{
if(BinaryLogFile->open(QIODevice::WriteOnly | QIODevice::Unbuffered) == false)
{
qDebug("Could not create log file : %s",LogFilePathName.toLatin1().data());
delete BinaryLogFile;
return RET_ERROR;
}
}
else
return RET_ERROR;
QDataStream * OutputStream = new QDataStream(BinaryLogFile);
quint32 MagicNbr = 0xDEADBEEF;
quint32 NbLogEntry,NbDetections;
quint32 LogType = ZT2_LOG_TYPE;
NbLogEntry = ZT2Log->size();
NbDetections = ZT2DetectionsLog->size();
quint32 NbElements = 0;
QDateTime DateTime = ZT2Log->at(0)->mDateTime;
//Get some stats
for(int j = 0; j < ZT2Log->size(); j++)
{
if(ZT2Log->at(j)->mZT2ThreadData != 0)
{
//Get the rank count for the train
if(ZT2Log->at(j)->mZT2ThreadData->mRank > NbElements)
NbElements = ZT2Log->at(j)->mZT2ThreadData->mBogie;
}
}
NbElements /= 6; //6 bogies per element
*OutputStream << MagicNbr << LogType << NbLogEntry << NbDetections;
*OutputStream << StationName;
*OutputStream << NbElements << DateTime;
//write detections
for(unsigned int i =0; i < NbDetections; i++)
{
*OutputStream << *ZT2DetectionsLog->at(i);
}
//write train passage log
for(unsigned int i = 0; i < NbLogEntry; i++)
{
*OutputStream << *ZT2Log->at(i);
}
BinaryLogFile->close();
delete BinaryLogFile;
delete OutputStream;
return RET_OK;
}
//It is the responsibility of the caller to make shure TargetElement is empty
CLogElement* CTrainLogFileMgr::OpenTrainLog(QString LogFilePathName,unsigned int &Retvalue,CLogElement* TargetElement,bool LoadData)
{
// if(!ZT1Log->isEmpty() || !ZT1DetectionsLog->isEmpty())
// return RET_ERROR;
int LogFileVersion;
bool FileProtected = false;
if(QFileInfo(LogFilePathName).suffix() != "bin")
{
Retvalue = RET_ERROR;
return 0;
}
QFile* BinaryLogFile = new QFile(LogFilePathName);
if(BinaryLogFile)
{
if(BinaryLogFile->open(QIODevice::ReadOnly | QIODevice::Unbuffered) == false)
{
Retvalue = RET_ERROR;
delete BinaryLogFile;
return 0;
}
}
else
{
Retvalue = RET_ERROR;
return 0;
}
QDataStream * InputStream = new QDataStream(BinaryLogFile);
quint32 MagicNbr,NbLogEntry,NbDetections,LogType;
*InputStream >> MagicNbr;
if(MagicNbr == 0xDEADBEEF)
{
LogFileVersion = 1;
FileProtected = false;
}
else if(MagicNbr == 0xDEADBEEF+1)
{
LogFileVersion = 2;
FileProtected = false;
}
else if(MagicNbr == 0xDEADBEEF+2)
{
LogFileVersion = 1;
FileProtected = true;
}
else if(MagicNbr == 0xDEADBEEF+3)
{
LogFileVersion = 2;
FileProtected = true;
}
else
{
qDebug(QString().sprintf("Fichier de passage invalide (Magic number) %s",LogFilePathName.toAscii().data()).toAscii().data());
BinaryLogFile->close();
delete BinaryLogFile;
delete InputStream;
Retvalue = RET_ERROR;
return 0;
}
*InputStream >> LogType;
if(LogType == ZT1_LOG_TYPE)
{
CZT1LogElement *PassageLog;
if(TargetElement == 0)
{
PassageLog = new CZT1LogElement();
}
else
{
PassageLog = (CZT1LogElement*)TargetElement; //It is the responsibility of the caller to make shure TargetElement is empty
}
PassageLog->mLogFileName = LogFilePathName;
PassageLog->mFileProtected = FileProtected;
*InputStream >> NbLogEntry;
*InputStream >> NbDetections;
*InputStream >> PassageLog->mStationName;
if(LogFileVersion == 1)
{
*InputStream >> PassageLog->mFlags.mExtPGOffset
>> PassageLog->mFlags.mIntPGOffset
>> PassageLog->mFlags.mPGCalibrationON
>> PassageLog->mFlags.mPGTresholdValue
>> PassageLog->mFlags.mAnalogTracePresent;
}
else if(LogFileVersion == 2)
{
*InputStream >> PassageLog->mFlags;
}
*InputStream >> PassageLog->mTrainType;
*InputStream >> PassageLog->mNbElements;
*InputStream >> PassageLog->mThreadDataStartTime;
*InputStream >> PassageLog->mThreadDataEndTime;
*InputStream >> PassageLog->mMeanSpeed;
*InputStream >> PassageLog->mPassageDateTime;
for(unsigned int i = 0; i < NbDetections; i++)
{
CZTDetectionData *NewDetection = new CZTDetectionData();
*InputStream >> *NewDetection;
PassageLog->mZTDetections.append(NewDetection);
}
if(LoadData == true)
{
for(unsigned int i = 0; i < NbLogEntry; i++)
{
CZT1LogData *NewLogChunk = new CZT1LogData();
*InputStream >> *NewLogChunk;
PassageLog->mZTLogData.append(NewLogChunk);
}
#ifdef USE_ANALOG_ACQUISITION
if(PassageLog->mFlags.mAnalogTracePresent == 1)
{
for(int i = 0; i < PassageLog->mZTLogData.size(); i++)
{
*InputStream >> PassageLog->mZTLogData.at(i)->mAnalogData;
}
}
#endif
}
BinaryLogFile->close();
delete BinaryLogFile;
delete InputStream;
Retvalue = RET_OK;
return (CZT1LogElement*) PassageLog;
}
else if(LogType == ZT2_LOG_TYPE)
{
quint32 NbElements;
QDateTime DateTime;
CZT2LogElement *PassageLog;
if(TargetElement == 0)
{
PassageLog = new CZT2LogElement();
}
else
{
PassageLog = (CZT2LogElement*) TargetElement; //It is the responsibility of the caller to make shure TargetElement is empty
}
*InputStream >> NbLogEntry;
*InputStream >> NbDetections;
*InputStream >> PassageLog->mStationName;
if(LogFileVersion == 2)
{
*InputStream >> PassageLog->mFlags;
}
else
{
PassageLog->mFlags.mIsProblematicPassage = 2;
}
*InputStream >> NbElements;
*InputStream >> DateTime;
PassageLog->mNbElements = NbElements;
PassageLog->mLogFileName = LogFilePathName;
PassageLog->mPassageDateTime = DateTime;
PassageLog->mFileProtected = FileProtected;
for(unsigned int i = 0; i < NbDetections; i++)
{
CZTDetectionData *NewDetection = new CZTDetectionData();
*InputStream >> *NewDetection;
PassageLog->mZTDetections.append(NewDetection);
}
if(LoadData == true)
{
for(unsigned int i = 0; i < NbLogEntry; i++)
{
CZT2LogData *NewLogChunk = new CZT2LogData();
*InputStream >> *NewLogChunk;
PassageLog->mZTLogData.append(NewLogChunk);
}
}
BinaryLogFile->close();
delete BinaryLogFile;
delete InputStream;
Retvalue = RET_OK;
return PassageLog;
}
else
{
qDebug("Invalid log type in file %s",LogFilePathName.toLatin1().data());
Retvalue = RET_ERROR;
return 0;
}
}
unsigned int CTrainLogFileMgr::SetTrainLogProtected(bool IsProtected, QString LogFilePathName)
{
QFile* BinaryLogFile = new QFile(LogFilePathName);
if(BinaryLogFile)
{
if(BinaryLogFile->open(QIODevice::ReadWrite | QIODevice::Unbuffered) == false)
{
qDebug("Could not Open log file to set protection : %s",LogFilePathName.toLatin1().data());
delete BinaryLogFile;
return RET_ERROR;
}
}
else
return RET_ERROR;
QDataStream * Stream = new QDataStream(BinaryLogFile);
quint32 MagicNbr;
*Stream >> MagicNbr;
BinaryLogFile->seek(0);
if(IsProtected == true)
{
if(MagicNbr == 0xDEADBEEF + 2 || MagicNbr == 0xDEADBEEF + 3)
{
//file is already protected
}
else if(MagicNbr == 0xDEADBEEF || MagicNbr == 0xDEADBEEF + 1)
{
MagicNbr += 2;
*Stream << MagicNbr;
}
else
{
//Log File Error
BinaryLogFile->close();
qDebug("Invalid log file magic number to set protection : %s",LogFilePathName.toLatin1().data());
delete BinaryLogFile;
}
}
else
{
if(MagicNbr == 0xDEADBEEF + 2 || MagicNbr == 0xDEADBEEF + 3)
{
//file is already protected
MagicNbr -= 2;
*Stream << MagicNbr;
}
else if(MagicNbr == 0xDEADBEEF || MagicNbr == 0xDEADBEEF + 1)
{
//file is already unprotected
}
else
{
//Log File Error
BinaryLogFile->close();
qDebug("Invalid log file magic number to set protection : %s",LogFilePathName.toLatin1().data());
delete BinaryLogFile;
}
}
BinaryLogFile->close();
qDebug("Invalid log file magic number to set protection : %s",LogFilePathName.toLatin1().data());
delete BinaryLogFile;
return RET_OK;
}
//unsigned int CTrainLogFileMgr::SaveCSVFile(QString CSVFilePathName, CZT1Log *ZT1Log, QList<CZTDetectionData *> *ZT1DetectionsLog, QString StationName)
unsigned int CTrainLogFileMgr::SaveCSVFile(QString CSVFilePathName, CZT1Log *ZT1Log, QVector<CZTDetectionData *> *ZT1DetectionsLog, QString StationName)
{
return SaveCSVFile(CSVFilePathName, &ZT1Log->mZT1LogData, &ZT1Log->mZT1Flags, ZT1DetectionsLog,StationName);
}
//unsigned int CTrainLogFileMgr::SaveCSVFile(QString CSVFilePathName, QList<CZT1LogData*> *ZT1Log, CZT1FlagsData *ZT1Flags, QList<CZTDetectionData *> *ZT1DetectionsLog, QString StationName)
unsigned int CTrainLogFileMgr::SaveCSVFile(QString CSVFilePathName, QVector<CZT1LogData*> *ZT1Log, CZT1FlagsData *ZT1Flags, QVector<CZTDetectionData *> *ZT1DetectionsLog, QString StationName)
{
QFile CSVFile(CSVFilePathName);
if(!CSVFile.open(QIODevice::QIODevice::WriteOnly|QIODevice::Text|QIODevice::Truncate))
return RET_ERROR;
QTextStream CSVStream(&CSVFile);
CSVStream << "Log de passage du train dans la ZT1\n";
CSVStream << QString::fromUtf8("Station : ") << StationName << "\n";
CSVStream << QString::fromUtf8("Valeur seuil Pneu de guidage : ") << ZT1Flags->mPGTresholdValue << "\n";
CSVStream << QString::fromUtf8("Valeur zérotage PG Extérieur : ") << ZT1Flags->mExtPGOffset << "\n";
CSVStream << QString::fromUtf8("Valeur zérotage PG Intérieur : ") << ZT1Flags->mIntPGOffset << "\n";
if(ZT1Flags->mPGCalibrationON == 1)
{
CSVStream << "Calibration PG en cours lors du passage: OUI\n";
}
else
CSVStream << "Calibration PG en cours lors du passage: NON\n";
CSVStream << QString::fromUtf8("Nombre de déclenchements : ") << ZT1DetectionsLog->size() << "\n";
if(ZT1DetectionsLog->size() > 0)
{
for(int i = 0; i < ZT1DetectionsLog->size(); i++)
{
CSVStream << QString::fromUtf8("Déclenchement ") << i+1 << ": " << ZT1DetectionsLog->at(i)->mTimeStamp << " - " << QString::fromUtf8(CZTData::GetErrorString(ZT1DetectionsLog->at(i)->mDetectionID)) << " au rang " << ZT1DetectionsLog->at(i)->mRank << "\n";
}
}
CSVStream << "\n";
CSVStream << "Date,Heure,Timestamp,CI,CDV Approche,CDV ZT1,S1,S2,FN,PPI,PPE,PG,Vitesse,Bogie,Rang,Laser Ext,Laser Int,Train";
if(ZT1Flags->mAnalogTracePresent == 1)
{
CSVStream << ",4-20mA SDF";
}
CSVStream << "\n";
for(int i = 0; i < ZT1Log->size(); i++)
{
CSVStream << ZT1Log->at(i)->mDateTime.toString("yyyy-MM-dd, hh:mm:ss:zzz") << ",";
CSVStream << ZT1Log->at(i)->mTimestamp << ",";
CSVStream << ZT1Log->at(i)->mCIZT1 << ",";
CSVStream << ZT1Log->at(i)->mCDVApproach_ZT1 << ",";
CSVStream << ZT1Log->at(i)->mCDVARM_ZT1 << ",";
if(ZT1Log->at(i)->mZT1ThreadData != 0)
{
CSVStream << ZT1Log->at(i)->mZT1ThreadData->mS1 << ",";
CSVStream << ZT1Log->at(i)->mZT1ThreadData->mS2 << ",";
CSVStream << ZT1Log->at(i)->mZT1ThreadData->mFN << ",";
CSVStream << ZT1Log->at(i)->mZT1ThreadData->mPInt << ",";
CSVStream << ZT1Log->at(i)->mZT1ThreadData->mPExt << ",";
CSVStream << ZT1Log->at(i)->mZT1ThreadData->mPG << ",";
CSVStream << ZT1Log->at(i)->mZT1ThreadData->mTrainSpeed << ",";
CSVStream << ZT1Log->at(i)->mZT1ThreadData->mBogie << ",";
CSVStream << ZT1Log->at(i)->mZT1ThreadData->mRank << ",";
CSVStream << ZT1Log->at(i)->mZT1ThreadData->mPGExtValue << ",";
CSVStream << ZT1Log->at(i)->mZT1ThreadData->mPGIntValue << ",";
CSVStream << CZTData::GetTrainTypeString(ZT1Log->at(i)->mZT1ThreadData->mTrainType);
}
else
{
CSVStream << "0,0,0,0,0,0,0,0,0,0,0,0";
//CSVStream <<"\n";
}
if(ZT1Flags->mAnalogTracePresent == 1)
{
CSVStream << "," << ZT1Log->at(i)->mAnalogData ;
}
CSVStream << "\n";
}
CSVFile.flush();
CSVFile.close();
return RET_OK;
}
unsigned int CTrainLogFileMgr::SaveCSVFile(QString CSVFilePathName, QVector<CZT2LogData *> *ZT2Log, QVector<CZTDetectionData *> *ZT2DetectionsLog, QString StationName)
//unsigned int CTrainLogFileMgr::SaveCSVFile(QString CSVFilePathName, QVector<CZT2LogData *> *ZT2Log, QVector<CZTDetectionData *> *ZT2DetectionsLog, QString StationName)
{
QFile CSVFile(CSVFilePathName);
if(!CSVFile.open(QIODevice::QIODevice::WriteOnly|QIODevice::Text|QIODevice::Truncate))
return RET_ERROR;
QTextStream CSVStream(&CSVFile);
CSVStream << "Log de passage du train dans la ZT2\n";
CSVStream << QString::fromUtf8("Station : ") << StationName << "\n";
CSVStream << QString::fromUtf8("Nombre de déclenchements : ") << ZT2DetectionsLog->size() << "\n";
if(ZT2DetectionsLog->size() > 0)
{
for(int i = 0; i < ZT2DetectionsLog->size(); i++)
{
CSVStream << QString::fromUtf8("Déclenchement ") << i+1 << ": " << ZT2DetectionsLog->at(i)->mTimeStamp << " - " << QString::fromUtf8(CZTData::GetErrorString(ZT2DetectionsLog->at(i)->mDetectionID)) << " au rang " << ZT2DetectionsLog->at(i)->mRank << "\n";
}
CSVStream << "\n";
}
CSVStream << "Date,Heure,Timestamp,CI,CDV ZT2,S1,PPI,PPE,Bogie,Rang\n";
for(int i = 0; i < ZT2Log->size(); i++)
{
CSVStream << ZT2Log->at(i)->mDateTime.toString("yyyy-MM-dd, hh:mm:ss:zzz") << ",";
CSVStream << ZT2Log->at(i)->mTimestamp << ",";
CSVStream << ZT2Log->at(i)->mCIZT2 << ",";
CSVStream << ZT2Log->at(i)->mCDVARM_ZT2 << ",";
if(ZT2Log->at(i)->mZT2ThreadData != 0)
{
CSVStream << ZT2Log->at(i)->mZT2ThreadData->mS1 << ",";
CSVStream << ZT2Log->at(i)->mZT2ThreadData->mPPInt << ",";
CSVStream << ZT2Log->at(i)->mZT2ThreadData->mPPExt << ",";
CSVStream << ZT2Log->at(i)->mZT2ThreadData->mBogie << ",";
CSVStream << ZT2Log->at(i)->mZT2ThreadData->mRank << ",";
}
else
{
CSVStream << "0,0,0,0,0";
CSVStream <<"\n";
}
}
CSVFile.flush();
CSVFile.close();
return RET_OK;
}
//Cette fonction a été écrite pour des fins de tests et n'est PAS du tout robuste.
//utiliser avec précaution.
unsigned int CTrainLogFileMgr::SaveBINFromCSV(QString CSVFilePathName)
{
QFile CSVFile(CSVFilePathName);
if(!CSVFile.open(QIODevice::ReadOnly|QIODevice::Text))
return RET_ERROR;
QTextStream CSVStream(&CSVFile);
bool IsZT1 = true;
QString Line;
QStringList LineElements;
QString StationName;
Line.clear();
LineElements.clear();
Line = CSVStream.readLine(); //Log de passage du train dans la ZT1
if(Line.contains("ZT1") == true)
{
IsZT1 = true;
}
else if(Line.contains("ZT2") == true)
{
IsZT1 = false;
}
else
{
//invalid file
CSVFile.close();
return RET_ERROR;
}
Line = CSVStream.readLine(); //Station : Snowdon
LineElements = Line.split(":");
if(LineElements.isEmpty())
{
CSVFile.close();
return RET_ERROR;
}
StationName = LineElements.at(1);
Line.clear();
if(IsZT1 == true)
{
CZT1Log *ZT1LOG = new CZT1Log();
Line = CSVStream.readLine(); //Valeur seuil Pneu de guidage : 15625
LineElements = Line.split(":");
if(LineElements.isEmpty())
{
CSVFile.close();
return RET_ERROR;
}
ZT1LOG->mZT1Flags.mPGTresholdValue = LineElements.at(1).toInt();
Line.clear();
Line = CSVStream.readLine(); //Valeur zérotage PG Extérieur : 128457
LineElements = Line.split(":");
if(LineElements.isEmpty())
{
CSVFile.close();
return RET_ERROR;
}
ZT1LOG->mZT1Flags.mExtPGOffset = LineElements.at(1).toInt();
Line.clear();
Line = CSVStream.readLine(); //Valeur zérotage PG Intérieur : 1300637
LineElements = Line.split(":");
if(LineElements.isEmpty())
{
CSVFile.close();
return RET_ERROR;
}
ZT1LOG->mZT1Flags.mIntPGOffset = LineElements.at(1).toInt();
Line.clear();
Line = CSVStream.readLine(); //Calibration PG en cours lors du passage: NON
if(Line.contains("OUI") == true)
{
ZT1LOG->mZT1Flags.mPGCalibrationON = true;
}
else if(Line.contains("NON") == true)
{
ZT1LOG->mZT1Flags.mPGCalibrationON = false;
}
else
{
CSVFile.close();
return RET_ERROR;
}
Line.clear();
int NbDetections;
Line = CSVStream.readLine(); //Nombre de déclenchements : 12
LineElements = Line.split(":");
if(LineElements.isEmpty())
{
CSVFile.close();
return RET_ERROR;
}
NbDetections = LineElements.at(1).toInt();
Line.clear();
//Ignore detections...
for(int i = 0; i < NbDetections; i++)
{
Line = CSVStream.readLine();
Line.clear();
}
//Skip the empty line after the detections.
Line = CSVStream.readLine();
Line.clear();
//Skip the table header
Line = CSVStream.readLine();
Line.clear();
quint32 LastS1 = 0, LastS2 = 0, LastFN = 0;
quint32 S1Count = 0;
quint32 S2Count = 0;
quint32 FNCount = 0;
while(CSVStream.atEnd() == false)
{
Line.clear();
LineElements.clear();
Line = CSVStream.readLine(); //Date Heure Timestamp CI CDV Approche CDV ZT1 S1 S2 FN PPI PPE PG Vitesse Bogie Rang Sonde Ext Sonde Int Train
LineElements = Line.split(",");
if(LineElements.count() != 18)
{
CSVFile.close();
return RET_ERROR;
}
QDate date = QDate::fromString(LineElements.at(0),"yyyy-MM-dd");
if(date.isValid() == false)
{
CSVFile.close();
return RET_ERROR;
}
QTime time = QTime::fromString(LineElements.at(1).trimmed(),"hh:mm:ss:zzz");
if(time.isValid() == false)
{
CSVFile.close();
return RET_ERROR;
}
qint64 timestamp = LineElements.at(2).toLongLong();
quint32 CIZT1 = LineElements.at(3).toUInt();
quint32 CDVApproach_ZT1 = LineElements.at(4).toUInt();
quint32 CDVARM_ZT1 = LineElements.at(5).toUInt();
CZT1LogData *LogData;
CZT1ThreadData *ThreadData;
if(LineElements.at(17) == "0") //Check if ThreadData is valid
{
//Thread data not valid...
LogData = new CZT1LogData();
}
else
{
ThreadData = new CZT1ThreadData();
LogData = new CZT1LogData(ThreadData);
quint32 S1 = LineElements.at(6).toUInt();
quint32 S2 = LineElements.at(7).toUInt();
quint32 FN = LineElements.at(8).toUInt();
quint32 PInt = LineElements.at(9).toUInt();
quint32 PExt = LineElements.at(10).toUInt();
quint32 PG = LineElements.at(11).toUInt();
qreal TrainSpeed = LineElements.at(12).toFloat();
quint32 Bogie = LineElements.at(13).toUInt();
quint32 Rank = LineElements.at(14).toUInt();
qint32 PGIntValue = LineElements.at(15).toInt();
qint32 PGExtValue = LineElements.at(16).toInt();
quint32 TrainType;
if(LineElements.at(17) == "Inconnu")
{
TrainType = TRAIN_TYPE_UNKNOWN;
}
else if(LineElements.at(17) == "MR63/73")
{
TrainType = TRAIN_TYPE_MR63_MR73;
}
else if(LineElements.at(17) == "MPM10")
{
TrainType = TRAIN_TYPE_MPM10;
}
else
{
CSVFile.close();
return RET_ERROR;
}
if(S1 == 1 && LastS1 == 0)
S1Count++;
if(S2 == 1 && LastS2 == 0)
S2Count++;
if(FN == 1 && LastFN == 0)
FNCount++;
LastS1 = S1;
LastS2 = S2;
LastFN = FN;
ThreadData->mTimeStamp = timestamp; //nanosecs
ThreadData->mDateTime.setDate(date);
ThreadData->mDateTime.setTime(time);
ThreadData->mS1 = S1;
ThreadData->mS2 = S2;
ThreadData->mFN = FN;
ThreadData->mPInt = PInt;
ThreadData->mPExt = PExt;
ThreadData->mPG = PG;
ThreadData->mTrainSpeed = TrainSpeed;
ThreadData->mBogie = Bogie;
ThreadData->mRank = Rank;
ThreadData->mPGIntValue = PGIntValue;
ThreadData->mPGExtValue = PGExtValue;
ThreadData->mS1Count = S1Count;
ThreadData->mS2Count = S2Count;
ThreadData->mFNCount = FNCount;
ThreadData->mTrainType = TrainType;
}
LogData->mTimestamp = timestamp;
LogData->mCIZT1 = CIZT1;
LogData->mCDVApproach_ZT1 = CDVApproach_ZT1;
LogData->mCDVARM_ZT1 = CDVARM_ZT1;
LogData->mDateTime.setDate(date);
LogData->mDateTime.setTime(time);
ZT1LOG->mZT1LogData.append(LogData);
}
// QList<CZTDetectionData*> Dummy; //JFM
QVector<CZTDetectionData*> Dummy;
Dummy.clear();
SaveTrainLog(CSVFilePathName.replace("csv","bin"),ZT1LOG,&Dummy,StationName);
for(int i = 0; i < ZT1LOG->mZT1LogData.size(); i++)
{
delete ZT1LOG->mZT1LogData.at(i);
}
ZT1LOG->mZT1LogData.clear();
delete ZT1LOG;
}
else //ZT1
{
}
return RET_OK;
}

61
sources/TrainLogFileMgr.h Normal file
View File

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

41
sources/UDPProtocol.cpp Normal file
View File

@ -0,0 +1,41 @@
#include "UDPProtocol.h"
#include <QDataStream>
CUDPProtocol::CUDPProtocol()
{
}
unsigned int CUDPProtocol::AnalyseNewData(QByteArray Data)
{
return RET_OK;
}
QByteArray CUDPProtocol::GetInitUDPConnectionPacket()
{
QByteArray packet;
packet.clear();
QDataStream stream(&packet,QIODevice::WriteOnly);
stream.device()->seek(0);
quint32 Request = (quint32)UDP_INIT_CONNECTION_REQUEST;
stream << UDP_PROTOCOL_HEADER << Request;
return packet;
}
QByteArray CUDPProtocol::GetCloseUDPConnectionPacket()
{
QByteArray packet;
packet.clear();
QDataStream stream(&packet,QIODevice::WriteOnly);
stream.device()->seek(0);
quint32 Request = (quint32)UDP_CLOSE_CONNECTION_REQUEST;
stream << UDP_PROTOCOL_HEADER << Request;
return packet;
}

33
sources/UDPProtocol.h Normal file
View File

@ -0,0 +1,33 @@
#ifndef UDPPROTOCOL_H
#define UDPPROTOCOL_H
#include "GlobalDefine.h"
#include <QByteArray>
#define UDP_PROTOCOL_HEADER (quint32)0xDEAD5AD5
class CUDPProtocol
{
public:
typedef enum
{
UDP_INIT_CONNECTION_REQUEST,
UDP_CLOSE_CONNECTION_REQUEST,
TCP_MSG_UNKNOWN
}eUDPMessage;
CUDPProtocol();
public:
unsigned int AnalyseNewData(QByteArray Data);
QByteArray GetInitUDPConnectionPacket();
QByteArray GetStopUDPStreamPacket();
QByteArray GetCloseUDPConnectionPacket();
};
#endif // UDPPROTOCOL_H

373
sources/ZTData.cpp Normal file
View File

@ -0,0 +1,373 @@
/*******************************************************************************
* *
* 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];
}
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
;
return out;
}
QDataStream &operator>>(QDataStream &in, CZT1FlagsData &dest)
{
in >> dest.mExtPGOffset
>> dest.mIntPGOffset
>> dest.mPGCalibrationON
>> dest.mPGTresholdValue
>> dest.mAnalogTracePresent
>> dest.mIsProblematicPassage
;
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
;
return out;
}
QDataStream &operator>>(QDataStream &in, CZT2FlagsData &dest)
{
in >> dest.mIsProblematicPassage
;
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;
}

348
sources/ZTData.h Normal file
View File

@ -0,0 +1,348 @@
/*******************************************************************************
* *
* 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 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 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);
};
//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.
};
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.
};
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

391
sources/ZTLogFilesMgr.cpp Normal file
View File

@ -0,0 +1,391 @@
#include "ZTLogFilesMgr.h"
#include <QFileInfo>
#include <QTextStream>
#include "OutilZT.h"
#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;
}

83
sources/ZTLogFilesMgr.h Normal file
View File

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

73
sources/main.cpp Normal file
View File

@ -0,0 +1,73 @@
/*******************************************************************************
* *
* Société de Transports de Montréal. *
* 2012 *
* *
* Projet Zones Tests *
* *
* *
* *
*******************************************************************************/
/*
Description:
Le main.
*/
/* ************************************************************************** */
/* Revision:
### 20121210 JFM
Verision d'origine.
### YYYYMMDD Description du besoin ou du bug
Description du changement.
*/
/* ************************************************************************** */
#include <QApplication>
#include "OutilZT.h"
#include "MainPanel.h"
int main(int argc, char *argv[])
{
QApplication::setGraphicsSystem("raster");
//Qt Mainframe application instance.
QApplication a(argc, argv);
QFont serifFont("Times", 10, QFont::Bold);
QApplication::setFont(serifFont);
bool EngMode = false;
bool CanImport = false;
for ( int i = 1 ; i < argc ; i ++ )
{
// qDebug("%d %s",i,argv[i]);
if ( strcmp(argv[i],"-ing") == 0 )
{
EngMode = true;
CanImport = true;
}
if ( strcmp(argv[i],"-import") == 0 )
{
CanImport = true;
}
}
//Create program instance
COutilZT OutilZT;
OutilZT.mIsEngMode = EngMode;
OutilZT.mCanImport = CanImport;
//setup stdout for screen printing.
setvbuf(stdout, NULL, _IONBF, 0 );
//Run Zone Tests
OutilZT.Start();
return a.exec();
}