diff --git a/Images/directory.png b/Images/directory.png new file mode 100644 index 0000000..1600437 Binary files /dev/null and b/Images/directory.png differ diff --git a/SourcePath.txt b/SourcePath.txt new file mode 100644 index 0000000..51b3b08 --- /dev/null +++ b/SourcePath.txt @@ -0,0 +1,3 @@ +#S:\EEF\TCPE\72410\72410\BD ZT\Logs_Reseau\ +D:\Main\Fichiers\JOB\OutilZT_Direct\trains\ +#c:\ \ No newline at end of file diff --git a/sources/GuiElements/LogsListPage.cpp b/sources/GuiElements/LogsListPage.cpp index aa7f309..3746842 100644 --- a/sources/GuiElements/LogsListPage.cpp +++ b/sources/GuiElements/LogsListPage.cpp @@ -35,12 +35,17 @@ #include #include #include - +#include +#include +#include "TrainLogFileMgr.h" +#include +#include CLogsListPage::~CLogsListPage() { // delete mListParsingTimer; + delete mLogsTable; } CLogsListPage::CLogsListPage(QGraphicsWidget *Parent) @@ -50,11 +55,28 @@ CLogsListPage::CLogsListPage(QGraphicsWidget *Parent) mProgramHandle = 0; mStationFilter.clear(); + QFile PathSource("SourcePath.txt"); + mNetworkBasePath = NETWORK_LOGS_BASE_PATH; + if(PathSource.open(QIODevice::ReadOnly|QIODevice::Text)) + { + QString Path; + do + { + Path = QString(PathSource.readLine()); + if(Path.contains('#') == false) + { + mNetworkBasePath = Path.chopped(1); + break; + } + } + while(!PathSource.atEnd()); + } + mLogsTable = new QTableWidget(0,4); - QGraphicsProxyWidget *TableProxy = new QGraphicsProxyWidget(this); - TableProxy->setWidget(mLogsTable); - TableProxy->setPos(3,20); - TableProxy->resize(380,350); + mLogListTableProxy = new QGraphicsProxyWidget(this); + mLogListTableProxy->setWidget(mLogsTable); + mLogListTableProxy->setPos(3,20); + mLogListTableProxy->resize(380,350); mLogsTable->resize(380,350); mLogsTable->setSelectionBehavior(QAbstractItemView::SelectRows); mLogsTable->setSelectionMode(QAbstractItemView::SingleSelection); @@ -65,6 +87,103 @@ CLogsListPage::CLogsListPage(QGraphicsWidget *Parent) 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))); + mLogListTableProxy->hide(); + + mLogsTreeProxy = new QGraphicsProxyWidget(this); + mLogFilesTree = new QTreeWidget; + mLogsTreeProxy->setWidget(mLogFilesTree); + mLogFilesTree->setColumnCount(3); + mLogFilesTree->resize(590,350); + mLogFilesTree->setHeaderLabels(QStringList() << "Passage" << "Décl" << "Zone" << "Compo"); + connect(mLogFilesTree,SIGNAL(itemExpanded(QTreeWidgetItem*)),this,SLOT(LogsTreeItemExpanded(QTreeWidgetItem*))); + connect(mLogFilesTree,SIGNAL(itemSelectionChanged()),this,SLOT(LogsTreeItemSelected())); + connect(mLogFilesTree,SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)),this,SLOT(LogsTreeItemDoubleClicked(QTreeWidgetItem*))); + connect(mLogFilesTree,SIGNAL(itemCollapsed(QTreeWidgetItem*)),this,SLOT(LogsTreeItemCollapsed(QTreeWidgetItem*))); + mLogFilesTree->setSortingEnabled(true); + + // mLogsTreeProxy->hide(); + + QTreeWidgetItem* TopStationItem; + TopStationItem = new QTreeWidgetItem(static_cast(nullptr)); + TopStationItem->setText(0,"Angrignon"); + CTreeItemInfo *ItemInfo = new CTreeItemInfo; + ItemInfo->TreeItemType = TREE_ITEM_STATION_TYPE; + ItemInfo->TreeItemPath = QString(mNetworkBasePath) + "ANG"; + TopStationItem->setData(0,Qt::UserRole,QVariant::fromValue((void*)ItemInfo)); + TopStationItem->addChild(new QTreeWidgetItem(QStringList() << "")); + mLogFilesTree->insertTopLevelItem(0,TopStationItem); + + TopStationItem = new QTreeWidgetItem(static_cast(nullptr)); + TopStationItem->setText(0,"Berri-UQAM"); + ItemInfo = new CTreeItemInfo; + ItemInfo->TreeItemType = TREE_ITEM_STATION_TYPE; + ItemInfo->TreeItemPath = QString(mNetworkBasePath) + "BUQ4"; + TopStationItem->setData(0,Qt::UserRole,QVariant::fromValue((void*)ItemInfo)); + TopStationItem->addChild(new QTreeWidgetItem(QStringList() << "")); + mLogFilesTree->insertTopLevelItem(1,TopStationItem); + + TopStationItem = new QTreeWidgetItem(static_cast(nullptr)); + TopStationItem->setText(0,"Côte-Vertu"); + ItemInfo = new CTreeItemInfo; + ItemInfo->TreeItemType = TREE_ITEM_STATION_TYPE; + ItemInfo->TreeItemPath = QString(mNetworkBasePath) + "CVRT"; + TopStationItem->setData(0,Qt::UserRole,QVariant::fromValue((void*)ItemInfo)); + TopStationItem->addChild(new QTreeWidgetItem(QStringList() << "")); + mLogFilesTree->insertTopLevelItem(2,TopStationItem); + + + TopStationItem = new QTreeWidgetItem(static_cast(nullptr)); + TopStationItem->setText(0,"H-Beaugrand"); + ItemInfo = new CTreeItemInfo; + ItemInfo->TreeItemType = TREE_ITEM_STATION_TYPE; + ItemInfo->TreeItemPath = QString(mNetworkBasePath) + "HBGR"; + TopStationItem->setData(0,Qt::UserRole,QVariant::fromValue((void*)ItemInfo)); + TopStationItem->addChild(new QTreeWidgetItem(QStringList() << "")); + mLogFilesTree->insertTopLevelItem(3,TopStationItem); + + + TopStationItem = new QTreeWidgetItem(static_cast(nullptr)); + TopStationItem->setText(0,"Longueuil"); + ItemInfo = new CTreeItemInfo; + ItemInfo->TreeItemType = TREE_ITEM_STATION_TYPE; + ItemInfo->TreeItemPath = QString(mNetworkBasePath) + "LONG"; + TopStationItem->setData(0,Qt::UserRole,QVariant::fromValue((void*)ItemInfo)); + TopStationItem->addChild(new QTreeWidgetItem(QStringList() << "")); + mLogFilesTree->insertTopLevelItem(4,TopStationItem); + + + TopStationItem = new QTreeWidgetItem(static_cast(nullptr)); + TopStationItem->setText(0,"Montmorency"); + ItemInfo = new CTreeItemInfo; + ItemInfo->TreeItemType = TREE_ITEM_STATION_TYPE; + ItemInfo->TreeItemPath = QString(mNetworkBasePath) + "MMO"; + TopStationItem->setData(0,Qt::UserRole,QVariant::fromValue((void*)ItemInfo)); + TopStationItem->addChild(new QTreeWidgetItem(QStringList() << "")); + mLogFilesTree->insertTopLevelItem(5,TopStationItem); + + + TopStationItem = new QTreeWidgetItem(static_cast(nullptr)); + TopStationItem->setText(0,"Snowdon"); + ItemInfo = new CTreeItemInfo; + ItemInfo->TreeItemType = TREE_ITEM_STATION_TYPE; + ItemInfo->TreeItemPath = QString(mNetworkBasePath) + "SNW5"; + TopStationItem->setData(0,Qt::UserRole,QVariant::fromValue((void*)ItemInfo)); + TopStationItem->addChild(new QTreeWidgetItem(QStringList() << "")); + mLogFilesTree->insertTopLevelItem(6,TopStationItem); + + + TopStationItem = new QTreeWidgetItem(static_cast(nullptr)); + TopStationItem->setText(0,"St-Michel"); + ItemInfo = new CTreeItemInfo; + ItemInfo->TreeItemType = TREE_ITEM_STATION_TYPE; + ItemInfo->TreeItemPath = QString(mNetworkBasePath) + "SMIC"; + TopStationItem->setData(0,Qt::UserRole,QVariant::fromValue((void*)ItemInfo)); + TopStationItem->addChild(new QTreeWidgetItem(QStringList() << "")); + mLogFilesTree->insertTopLevelItem(7,TopStationItem); + + mLogFilesTree->sortByColumn(0,Qt::AscendingOrder); + + mSummaryText = new QGraphicsTextItem(this); QFont textfont; textfont.setPointSize(12); @@ -149,6 +268,17 @@ CLogsListPage::CLogsListPage(QGraphicsWidget *Parent) mShowProblematicTrainsChkbx->setChecked(true); connect(mShowProblematicTrainsChkbx,SIGNAL(stateChanged(int)),this,SLOT(CheckBoxClicked(int))); + WidgetProxy = new QGraphicsProxyWidget(this); + mLoadTreeLogDetails = new QCheckBox("Charger détails"); + WidgetProxy->setWidget(mLoadTreeLogDetails); + WidgetProxy->setPos(190,390); + mLoadTreeLogDetails->setChecked(true); + connect(mLoadTreeLogDetails,SIGNAL(stateChanged(int)),this,SLOT(CheckBoxClicked(int))); + + mTreeLoadingStatusLabel = new QGraphicsTextItem(this); + mTreeLoadingStatusLabel->setPlainText(""); + mTreeLoadingStatusLabel->setPos(190,395); + mTreeLoadingStatusLabel->hide(); QGraphicsTextItem *Label = new QGraphicsTextItem(this); Label->setPlainText("Station:"); @@ -174,23 +304,36 @@ CLogsListPage::CLogsListPage(QGraphicsWidget *Parent) mViewZTLogBtn = new CPushButton(this,"./Images/log.png",false,0); mViewZTLogBtn->resize(50,50); - mViewZTLogBtn->setPos(400,25); + mViewZTLogBtn->setPos(400,375); 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); + mSaveCSVLogBtn->setPos(400,450); 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); + mDeleteFileButton->setPos(400,525); connect(mDeleteFileButton,SIGNAL(clicked(CPushButton*)),this,SLOT(DeleteSelectedLog(CPushButton*))); + mLogsTreeMode = new CPushButton(this,"./Images/directory.png",false,0); + mLogsTreeMode->resize(50,50); + mLogsTreeMode->setPos(475,375); + connect(mLogsTreeMode,SIGNAL(clicked(CPushButton*)),this,SLOT(TreeLogsViewModeSelected(CPushButton*))); + + mLogsTableMode = new CPushButton(this,"./Images/database.png",false,0); + mLogsTableMode->resize(50,50); + mLogsTableMode->setPos(475,450); + connect(mLogsTableMode,SIGNAL(clicked(CPushButton*)),this,SLOT(TableLogsViewModeSelected(CPushButton*))); mSaveCSVLogBtn->hide(); mDeleteFileButton->hide(); +// TreeLogsViewModeSelected(mLogsTreeMode); + TableLogsViewModeSelected(mLogsTableMode); + + @@ -241,9 +384,9 @@ void CLogsListPage::ButtonClicked(CTextButtonWidget *BtnPtr) void CLogsListPage::EnableEngineeringMode() { - mSaveCSVLogBtn->show(); - mDeleteFileButton->show(); - mProtectLogChkBx->setEnabled(true); + mSaveCSVLogBtn->hide(); + mDeleteFileButton->hide(); + mProtectLogChkBx->setEnabled(false); } unsigned int CLogsListPage::RefreshList() @@ -482,18 +625,183 @@ void CLogsListPage::LogsTableCellClicked(int row, int column) // qDebug("Selection : %d",row); QList *LogsList = mLogMgrHandle->GetLogsList(); - float MeanSpeed = 0.0; - QString Summary; +// 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) + + UpdateSummaryText(LogsList->at(ItemIndex)); +// 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; + +// QString TrainType = CZTData::GetModbusTrainTypeString(ZT1LogElement->mFlags.mModbusTrainType); +// if(TrainType == "Inconnu") +// { +// TrainType = CZTData::GetTrainTypeString(ZT1LogElement->mTrainType); +// } + +// QString TrainCompo = "Non Disponible"; +// // if(!((ZT1LogElement->mFlags.mTrainCompo1 == 0) && (ZT1LogElement->mFlags.mTrainCompo2 == 0) && (ZT1LogElement->mFlags.mTrainCompo3 == 0))) +// { +// TrainCompo = QString("%1-%2-%3").arg(ZT1LogElement->mFlags.mTrainCompo1)\ +// .arg(ZT1LogElement->mFlags.mTrainCompo2) +// .arg(ZT1LogElement->mFlags.mTrainCompo3); +// } + +// QString Iti("Principal"); +// if(ZT1LogElement->mFlags.mZT1ITI == ZT_SECONDARY_ITI) +// { +// Iti = "Secondaire (10/22)"; +// } + +// Summary = QString("Passage:\n\nDate: %1\nHeure: %2\nItinéraire: %7\nZone Test : ZT1\nTrain : %3\nCompo: %6\nNombre d'éléments: %4\nProblématique: %5\n\n\nDéclenchements: \n")\ +// .arg(ZT1LogElement->mPassageDateTime.toString("yyyy/MM/dd"))\ +// .arg(ZT1LogElement->mPassageDateTime.toString("hh:mm:ss"))\ +// .arg(TrainType)\ +// .arg(ZT1LogElement->mNbElements)\ +// .arg(Problem) +// .arg(TrainCompo) +// .arg(Iti); +//// 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()); + +// QString TrainType = CZTData::GetModbusTrainTypeString(ZT2LogElement->mFlags.mModbusTrainType); + +// QString TrainCompo = "Non Disponible"; +// if(ZT2LogElement->mFlags.mTrainCompo1 != 0) +// { +// TrainCompo = QString("%1-%2-%3").arg(ZT2LogElement->mFlags.mTrainCompo1)\ +// .arg(ZT2LogElement->mFlags.mTrainCompo2) +// .arg(ZT2LogElement->mFlags.mTrainCompo3); +// } + +// Summary = QString("Passage:\n\nDate: %1\nHeure: %2\nZone Test : ZT2\nTrain : %3\nCompo: %6\nNombre d'éléments: %4\nProblématique: %5\n\n\nDéclenchements: \n")\ +// .arg(ZT2LogElement->mPassageDateTime.toString("yyyy/MM/dd"))\ +// .arg(ZT2LogElement->mPassageDateTime.toString("hh:mm:ss"))\ +// .arg(TrainType)\ +// .arg(ZT2LogElement->mNbElements)\ +// .arg(Problem) +// .arg(TrainCompo); + +// 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); + +} + +int CLogsListPage::UpdateSummaryText(CLogElement *Element) +{ + float MeanSpeed = 0.0; + QString Summary; + if(Element->mZTLogType == ZT1_LOG_TYPE) { // //CZT1LogElement *ZT1LogElement = (CZT1LogElement*) LogsList->at(row); - CZT1LogElement *ZT1LogElement = (CZT1LogElement*) LogsList->at(ItemIndex); + CZT1LogElement *ZT1LogElement = (CZT1LogElement*) Element; if(ZT1LogElement->mFileProtected == true) { @@ -513,7 +821,7 @@ void CLogsListPage::LogsTableCellClicked(int row, int column) { Problem = "NON"; } - MeanSpeed = ZT1LogElement->mMeanSpeed; + MeanSpeed = ZT1LogElement->mMeanSpeed; QString TrainType = CZTData::GetModbusTrainTypeString(ZT1LogElement->mFlags.mModbusTrainType); if(TrainType == "Inconnu") @@ -555,16 +863,16 @@ void CLogsListPage::LogsTableCellClicked(int row, int column) 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); - } + 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) + if(i >= MAX_DETECTION_LIST_NBR - 1) { temp = " - Autres déclenchements non affichés -"; Summary += temp; @@ -576,10 +884,10 @@ void CLogsListPage::LogsTableCellClicked(int row, int column) Summary += "Aucun déclenchement"; } //else if(LogsList->at(row)->mZTLogType == ZT2_LOG_TYPE) - else if(LogsList->at(ItemIndex)->mZTLogType == ZT2_LOG_TYPE) + else if(Element->mZTLogType == ZT2_LOG_TYPE) { //CZT2LogElement *ZT2LogElement = (CZT2LogElement*) LogsList->at(row); - CZT2LogElement *ZT2LogElement = (CZT2LogElement*) LogsList->at(ItemIndex); + CZT2LogElement *ZT2LogElement = (CZT2LogElement*) Element; if(ZT2LogElement->mFileProtected == true) { @@ -630,7 +938,7 @@ void CLogsListPage::LogsTableCellClicked(int row, int column) 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) + if(i >= MAX_DETECTION_LIST_NBR-1) { temp = "- Autres déclenchements non affichés -"; Summary += temp; @@ -643,11 +951,7 @@ void CLogsListPage::LogsTableCellClicked(int row, int column) } mSummaryText->setPlainText(Summary); - - CLogElement* Element = mLogMgrHandle->LoadLogData(LogsList->at(ItemIndex)); - mProgramHandle->LogViewRequest(Element,this); - mLogMgrHandle->FreeLogData(Element); - + return RET_OK; } void CLogsListPage::StationFilterSelected(int Index) @@ -852,3 +1156,396 @@ void CLogsListPage::TableDoubleClicked(int row, int col) Q_UNUSED(row) // ButtonClicked(mViewLogDataButton); } + +void CLogsListPage::LogsTreeItemExpanded(QTreeWidgetItem *item) +{ + CTreeItemInfo *ItemInfo = (CTreeItemInfo*)item->data(0,Qt::UserRole).value(); + if(ItemInfo) + { + + switch(ItemInfo->TreeItemType) + { + case TREE_ITEM_STATION_TYPE: + { + qDebug("%s",qPrintable(ItemInfo->TreeItemPath)); + + //delete all tree + qDebug("Deleting tree"); + while(item->childCount() > 0) //delete directories branch + { + QTreeWidgetItem *DirItem = item->takeChild(0); + + while(DirItem->childCount() > 0) //delete logs list + { + QTreeWidgetItem *LogItem = DirItem->takeChild(0); + CTreeItemInfo *Info = (CTreeItemInfo*)LogItem->data(0,Qt::UserRole).value(); + if(Info) + delete Info; + // DirItem->removeChild(LogItem); + } + + CTreeItemInfo *Info = (CTreeItemInfo*)DirItem->data(0,Qt::UserRole).value(); + if(Info) + delete Info; + + // item->removeChild(DirItem); + } + + qDebug("Tree deleted. Populating data"); + CTreeItemInfo *Info = (CTreeItemInfo*)item->data(0,Qt::UserRole).value(); + if(Info) + { + PopulateDirectoriesTreeBranch(item,Info->TreeItemPath); + } + else + { + qDebug("Invalid path in station tree item..."); + } + + mLogFilesTree->resizeColumnToContents(0); + + break; + } + case TREE_ITEM_DIR_TYPE: + { + + qDebug("Deleting %d log items",item->childCount()); + while(item->childCount() > 0) //delete log items + { + QTreeWidgetItem *LogItem = item->takeChild(0); + CTreeItemInfo *Info = (CTreeItemInfo*)LogItem->data(0,Qt::UserRole).value(); + if(Info) + delete Info; + + delete LogItem; + //item->removeChild(LogItem); + } + + qDebug("Logs deleted. Populating data"); + CTreeItemInfo *Info = (CTreeItemInfo*)item->data(0,Qt::UserRole).value(); + if(Info) + { + PopulateLogFilesTreeBranch(item,Info->TreeItemPath); + } + else + { + qDebug("Invalid path in station tree item..."); + } + + qDebug("Data populated..."); + mLogFilesTree->resizeColumnToContents(0); + break; + } + case TREE_ITEM_LOGFILE_TYPE: + { + break; + } + } + } +} + +void CLogsListPage::LogsTreeItemCollapsed(QTreeWidgetItem *item) +{ + + if(item->parent()) + { + mLogFilesTree->setCurrentItem(item->parent()); + } + + CTreeItemInfo *ItemInfo = (CTreeItemInfo*)item->data(0,Qt::UserRole).value(); + if(ItemInfo) + { + + switch(ItemInfo->TreeItemType) + { + case TREE_ITEM_STATION_TYPE: + { + qDebug("%s",qPrintable(ItemInfo->TreeItemPath)); + + //delete all tree + qDebug("Deleting %d tree items",item->childCount()); + while(item->childCount() > 0) //delete directories branch + { + QTreeWidgetItem *DirItem = item->takeChild(0); + + qDebug("Deleting %d logs items",DirItem->childCount()); + while(DirItem->childCount() > 0) //delete logs list + { + // qDebug("Taking child"); + QTreeWidgetItem *LogItem = DirItem->takeChild(0); + CTreeItemInfo *Info = (CTreeItemInfo*)LogItem->data(0,Qt::UserRole).value(); + // qDebug("Deleting info"); + if(Info) + { + // qDebug("delete.."); + delete Info; + } + // qDebug("Tree item deleted"); + } + CTreeItemInfo *Info = (CTreeItemInfo*)DirItem->data(0,Qt::UserRole).value(); + if(Info) + delete Info; + +// item->removeChild(DirItem); + } + + qDebug("Tree deleted."); + item->addChild(new QTreeWidgetItem(QStringList() << "VIDE")); //add an empty item + + mLogFilesTree->resizeColumnToContents(0); + + break; + } + case TREE_ITEM_DIR_TYPE: + { + + qDebug("Deleting %d log items",item->childCount()); + while(item->childCount() > 0) //delete log items + { + // qDebug("Taking child"); + QTreeWidgetItem *LogItem = item->takeChild(0); + CTreeItemInfo *Info = (CTreeItemInfo*)LogItem->data(0,Qt::UserRole).value(); + // qDebug("Deleting info"); + if(Info) + { + // qDebug("delete.."); + delete Info; + } + // qDebug("Tree item deleted"); + + delete LogItem; + } + + qDebug("Logs deleted."); + item->addChild(new QTreeWidgetItem(QStringList() << "VIDE")); //add an empty item + + mLogFilesTree->resizeColumnToContents(1); + break; + } + case TREE_ITEM_LOGFILE_TYPE: + { + break; + } + } + } +} +int CLogsListPage::PopulateDirectoriesTreeBranch(QTreeWidgetItem *parent, QString Path) +{ + QDir Directory(Path); + QFileInfoList DirList = Directory.entryInfoList(QDir::Dirs|QDir::NoDotAndDotDot); + if(DirList.isEmpty()) + { + parent->addChild(new QTreeWidgetItem(QStringList() << "VIDE")); //add an empty item + } + else + { + for(int i = 0; i < DirList.size(); i++) + { + QTreeWidgetItem *NewDirItem = new QTreeWidgetItem(QStringList() << DirList.at(i).fileName()); + CTreeItemInfo* ItemInfo = new CTreeItemInfo; + ItemInfo->TreeItemType = TREE_ITEM_DIR_TYPE; + ItemInfo->TreeItemPath = DirList.at(i).absoluteFilePath(); + NewDirItem->setData(0,Qt::UserRole,QVariant::fromValue((void*)ItemInfo)); + NewDirItem->addChild(new QTreeWidgetItem(QStringList() << "VIDE")); //add an empty item + parent->addChild(NewDirItem); + } + } +} + +int CLogsListPage::PopulateLogFilesTreeBranch(QTreeWidgetItem *parent, QString Path) +{ + QDir Directory(Path); + QFileInfoList DirList = Directory.entryInfoList(QDir::Files|QDir::NoDotAndDotDot); + bool ShowZT1Items = (mShowZT1ItemsChkBx->checkState() == Qt::Checked); + bool ShowZT2Items = (mShowZT2ItemsChkBx->checkState() == Qt::Checked); + bool ShowNoDetections = (mShowNoDetectionsChkBx->checkState() == Qt::Checked); + bool LoadLogDetails = (mLoadTreeLogDetails->checkState() == Qt::Checked); + + float LoadingPercent = 0.0; + int Size; + + if(DirList.isEmpty()) + { + parent->addChild(new QTreeWidgetItem(QStringList() << "VIDE")); //add an empty item + } + else + { + Size = DirList.size(); + for(int i = 0; i < Size; i++) + { + LoadingPercent = (float)(i+1)/(float)Size; + LoadingPercent *= 100; + mTreeLoadingStatusLabel->setPlainText(QString("Chargement:%1\%").arg(LoadingPercent)); + + // QApplication::processEvents(); + CTreeItemInfo* ItemInfo = new CTreeItemInfo; + ItemInfo->TreeItemType = TREE_ITEM_LOGFILE_TYPE; + ItemInfo->TreeItemPath = DirList.at(i).filePath(); + + QStringList ItemData; + if(DirList.at(i).suffix() == "bin") + { + if(LoadLogDetails == true) + { + unsigned int ret; + CLogElement* Element = CTrainLogFileMgr::instance()->OpenTrainLog(ItemInfo->TreeItemPath,ret); + if(ret == RET_OK) + { + if(Element->mZTLogType == ZT1_LOG_TYPE && ShowZT1Items == true) + { + CZT1LogElement *ZT1Element = (CZT1LogElement*)Element; + if(!(ShowNoDetections == false && ZT1Element->mZTDetections.size() == 0)) + { + ItemData.append(ZT1Element->mPassageDateTime.toString("yyyy/MM/dd - hh:mm:ss")); + ItemData.append(QString("%1").arg(ZT1Element->mZTDetections.size())); + ItemData.append("ZT1"); + ItemData.append(QString("%1-%2-%3").arg(ZT1Element->mFlags.mTrainCompo1).arg(ZT1Element->mFlags.mTrainCompo2).arg(ZT1Element->mFlags.mTrainCompo3)); + QTreeWidgetItem *NewDirItem = new QTreeWidgetItem(QStringList(ItemData)); + NewDirItem->setData(0,Qt::UserRole,QVariant::fromValue((void*)ItemInfo)); + parent->addChild(NewDirItem); + } + } + else if(Element->mZTLogType == ZT2_LOG_TYPE && ShowZT2Items == true) + { + CZT2LogElement *ZT2Element = (CZT2LogElement*)Element; + if(!(ShowNoDetections == false && ZT2Element->mZTDetections.size() == 0)) + { + ItemData.append(ZT2Element->mPassageDateTime.toString("yyyy/MM/dd - hh:mm:ss")); + ItemData.append(QString("%1").arg(ZT2Element->mZTDetections.size())); + ItemData.append("ZT2"); + ItemData.append(QString("%1-%2-%3").arg(ZT2Element->mFlags.mTrainCompo1).arg(ZT2Element->mFlags.mTrainCompo2).arg(ZT2Element->mFlags.mTrainCompo3)); + QTreeWidgetItem *NewDirItem = new QTreeWidgetItem(QStringList(ItemData)); + NewDirItem->setData(0,Qt::UserRole,QVariant::fromValue((void*)ItemInfo)); + parent->addChild(NewDirItem); + } + + } + delete Element; + } + + else + { + ItemData.append(DirList.at(i).baseName()); + QTreeWidgetItem *NewDirItem = new QTreeWidgetItem(QStringList(ItemData)); + NewDirItem->setData(0,Qt::UserRole,QVariant::fromValue((void*)ItemInfo)); + parent->addChild(NewDirItem); + } + } + else + { + + QTreeWidgetItem *NewDirItem = new QTreeWidgetItem(QStringList() << DirList.at(i).baseName()); + NewDirItem->setData(0,Qt::UserRole,QVariant::fromValue((void*)ItemInfo)); + parent->addChild(NewDirItem); + } + } + else if(DirList.at(i).suffix() == "txt") + { + QTreeWidgetItem *NewDirItem = new QTreeWidgetItem(QStringList() << DirList.at(i).fileName()); + NewDirItem->setData(0,Qt::UserRole,QVariant::fromValue((void*)ItemInfo)); + parent->addChild(NewDirItem); + } + else + { + delete ItemInfo; + } + + if(parent->childCount() == 0) + { + parent->addChild(new QTreeWidgetItem(QStringList() << "VIDE")); //add an empty item + } + + + } + } +} + +void CLogsListPage::LogsTreeItemSelected() +{ + QTreeWidgetItem* Selection = mLogFilesTree->selectedItems().at(0); + if(Selection) + { + CTreeItemInfo *Info = (CTreeItemInfo*)Selection->data(0,Qt::UserRole).value(); + if(Info) + { + if(Info->TreeItemType == TREE_ITEM_LOGFILE_TYPE) + { + QFileInfo FileInfo(Info->TreeItemPath); + if(FileInfo.suffix() == "bin") + { + unsigned int ret; + CLogElement* Element = CTrainLogFileMgr::instance()->OpenTrainLog(Info->TreeItemPath,ret,0,true); + if(ret == RET_OK) + {UpdateSummaryText(Element); + mProgramHandle->LogViewRequest(Element,this); + mLogMgrHandle->FreeLogData(Element); + } + } + } + + } + } +} + +void CLogsListPage::TableLogsViewModeSelected(CPushButton *Btb) +{ + mLogListTableProxy->show(); + mLogsTreeProxy->hide(); + + mShowFNChkBx->show(); + mShowCountChkBx->show(); + mShowPGChkBx->show(); + mShowPPChkBx->show(); + mShowMPM10ChkBx->show(); + mShowMRChkBx->show(); + mShowProblematicTrainsChkbx->show(); + mStationsFilterComboBox->show(); + mViewZTLogBtn->show(); + mProtectLogChkBx->show(); + mLoadTreeLogDetails->hide(); + +} + +void CLogsListPage::TreeLogsViewModeSelected(CPushButton *Btn) +{ + mLogListTableProxy->hide(); + mLogsTreeProxy->show(); + + mShowFNChkBx->hide(); + mShowCountChkBx->hide(); + mShowPGChkBx->hide(); + mShowPPChkBx->hide(); + mShowMPM10ChkBx->hide(); + mShowMRChkBx->hide(); + mShowProblematicTrainsChkbx->hide(); + mStationsFilterComboBox->hide(); + mViewZTLogBtn->hide(); + mProtectLogChkBx->hide(); + mLoadTreeLogDetails->show(); +} + +void CLogsListPage::LogsTreeItemDoubleClicked(QTreeWidgetItem *item) +{ + CTreeItemInfo *Info = (CTreeItemInfo*)item->data(0,Qt::UserRole).value(); + if(Info) + { + if(Info->TreeItemType == TREE_ITEM_LOGFILE_TYPE) + { + QFileInfo FileInfo(Info->TreeItemPath); + if(FileInfo.suffix() == "txt") + { + QFile *LogFile = new QFile(FileInfo.filePath()); + if(LogFile) + { + if(LogFile->open(QIODevice::ReadOnly | QIODevice::Text | QIODevice::Unbuffered) == true) + { + QString LogText(LogFile->readAll()); + mProgramHandle->ShowZTLogRequest(LogText,0,-1); + LogFile->close(); + } + delete LogFile; + } + } + } + } +} diff --git a/sources/GuiElements/LogsListPage.h b/sources/GuiElements/LogsListPage.h index 8f311a1..6a61abf 100644 --- a/sources/GuiElements/LogsListPage.h +++ b/sources/GuiElements/LogsListPage.h @@ -39,11 +39,29 @@ #include #include #include +#include #define MAX_DETECTION_LIST_NBR 6 +//#define NETWORK_LOGS_BASE_PATH "S:\\EEF\\TCPE\\72410\\72410\\BD ZT\\Logs_Reseau\\" +#define NETWORK_LOGS_BASE_PATH "D:\\Main\\Fichiers\\JOB\\OutilZT_Direct\\trains\\" + class COutilZT; +enum eTreeItemType +{ + TREE_ITEM_STATION_TYPE, + TREE_ITEM_DIR_TYPE, + TREE_ITEM_LOGFILE_TYPE +}; + +class CTreeItemInfo +{ +public: + int TreeItemType; + QString TreeItemPath; +}; + class CLogsListPage : public CGuiPage { Q_OBJECT @@ -65,25 +83,34 @@ public: private: QTableWidget *mLogsTable; + QTreeWidget *mLogFilesTree; QGraphicsTextItem *mSummaryText; CTextButtonWidget *mViewLogDataButton; CTextButtonWidget *mExportCSVLogButton; + QGraphicsProxyWidget *mLogListTableProxy, *mLogsTreeProxy; QCheckBox *mShowZT1ItemsChkBx, *mShowZT2ItemsChkBx, *mShowNoDetectionsChkBx; QCheckBox *mShowFNChkBx, *mShowCountChkBx, *mShowPGChkBx, *mShowPPChkBx,*mShowMPM10ChkBx, *mShowMRChkBx, *mShowProblematicTrainsChkbx;//, *mShowAllChkBx; + QCheckBox *mLoadTreeLogDetails; + QGraphicsTextItem *mTreeLoadingStatusLabel; QTimer *mListParsingTimer; QComboBox *mStationsFilterComboBox; QString mStationFilter; - CPushButton *mViewZTLogBtn, *mSaveCSVLogBtn,*mDeleteFileButton; + CPushButton *mViewZTLogBtn, *mSaveCSVLogBtn,*mDeleteFileButton, *mLogsTreeMode, *mLogsTableMode; QCheckBox *mProtectLogChkBx; + QString mNetworkBasePath; //bool mShowZT1Items,mShowZT2Items,mShowNoDetections,mUSBDetected; void ClearTable(); + int PopulateDirectoriesTreeBranch(QTreeWidgetItem *parent, QString Path); + int PopulateLogFilesTreeBranch(QTreeWidgetItem *parent, QString Path); + + int UpdateSummaryText(CLogElement* Element); public slots: @@ -97,8 +124,17 @@ public slots: void SaveCSVLogBtnClicked(CPushButton *); void DeleteSelectedLog(CPushButton*); void ProtectLogCheckBoxClicked(); + void TreeLogsViewModeSelected(CPushButton*); + void TableLogsViewModeSelected(CPushButton*); + + void LogsTreeItemExpanded(QTreeWidgetItem *item); + void LogsTreeItemDoubleClicked(QTreeWidgetItem *item); + void LogsTreeItemCollapsed(QTreeWidgetItem *item); + void LogsTreeItemSelected(); // void ParsingTimerExipred(); }; + + #endif // LOGSLISTPAGE_H diff --git a/sources/GuiElements/MainPage.cpp b/sources/GuiElements/MainPage.cpp index f06c709..1d6ee6d 100644 --- a/sources/GuiElements/MainPage.cpp +++ b/sources/GuiElements/MainPage.cpp @@ -57,29 +57,29 @@ CMainPage::CMainPage(QGraphicsWidget *Parent) // mTimeDisplayText->setZValue(1); mDatabaseModePushButton = new CPushButton(this,"./Images/Save-icon.png"); - mDatabaseModePushButton->setPos(10,10); - mDatabaseModePushButton->resize(50,50); + mDatabaseModePushButton->setPos(5,5); + mDatabaseModePushButton->resize(35,35); connect( mDatabaseModePushButton, SIGNAL( clicked(CPushButton*) ), this, SLOT(ButtonPressed(CPushButton*) ) ); mNetworkModePushButton = new CPushButton(this,"./Images/ethernet.png"); - mNetworkModePushButton->setPos(10,150); - mNetworkModePushButton->resize(50,50); + mNetworkModePushButton->setPos(5,150); + mNetworkModePushButton->resize(35,35); 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); + mZTLogsListPushButton->setPos(5,80); + mZTLogsListPushButton->resize(35,35); connect( mZTLogsListPushButton, SIGNAL( clicked(CPushButton*) ), this, SLOT(ButtonPressed(CPushButton*) ) ); mToolsPushButton = new CPushButton(this,"./Images/tools.png"); - mToolsPushButton->setPos(10,375); - mToolsPushButton->resize(50,50); + mToolsPushButton->setPos(5,375); + mToolsPushButton->resize(35,35); connect( mToolsPushButton, SIGNAL( clicked(CPushButton*) ), this, SLOT(ButtonPressed(CPushButton*) ) ); mDatabaseOptionsPushButton = new CPushButton(this,"./Images/database.png"); - mDatabaseOptionsPushButton->setPos(10,300); - mDatabaseOptionsPushButton->resize(50,50); + mDatabaseOptionsPushButton->setPos(5,300); + mDatabaseOptionsPushButton->resize(35,35); connect( mDatabaseOptionsPushButton, SIGNAL( clicked(CPushButton*) ), this, SLOT(ButtonPressed(CPushButton*) ) ); diff --git a/sources/MainPanel.cpp b/sources/MainPanel.cpp index abf352f..b529584 100644 --- a/sources/MainPanel.cpp +++ b/sources/MainPanel.cpp @@ -139,7 +139,7 @@ Panel::Panel() mDatabaseModeLogViewPage->DisableCloseButton(); mDatabaseModeLogViewPage->show(); - mDatabaseModeLogListPage->setPos(100,0); + mDatabaseModeLogListPage->setPos(45,0); mDatabaseModeLogListPage->resize(400,SCREEN_RES_HEIGHT-100); mDatabaseModeLogListPage->setZValue(1); mDatabaseModeLogListPage->show(); diff --git a/sources/OutilZTVersion.h b/sources/OutilZTVersion.h index 8b494d3..e4eb4d7 100644 --- a/sources/OutilZTVersion.h +++ b/sources/OutilZTVersion.h @@ -1,7 +1,7 @@ #ifndef OUTILZTVERSION_H #define OUTILZTVERSION_H -#define SOFTWARE_VERSION "1.17" +#define SOFTWARE_VERSION "1.18" //Suivi des versions //