diff --git a/src/ui/MainWindow.cpp b/src/ui/MainWindow.cpp index 0554d49c..487e1133 100644 --- a/src/ui/MainWindow.cpp +++ b/src/ui/MainWindow.cpp @@ -175,6 +175,7 @@ void MainWindow::InitUI() { //ui->status->setText(tr("start: no start")); InitDockLayout(); + InitChartLayout(); //ui->viewWidget->layout()->addWidget(qtOsgViewWidget_); qtOsgViewWidget_->LoadDefaultScene(); @@ -335,6 +336,97 @@ void MainWindow::AddDockArea(const QString& strArea) { resizeDocks(listAdd, listSpliter, orient); } +void MainWindow::InitChartLayout() +{ + QString strChart = RecourceHelper::Get().GetBasePath() + "/workspace/Chart.xml"; + m_mgrChart.Load(strChart); + + QVariantList varList = m_mgrChart.GetChartWgt(); + for (int nI = 0; nI < varList.size(); nI++) + { + QVariantMap mapWgt = varList.at(nI).toMap(); + QString strWgt = mapWgt.begin().key(); + QVariantList listChart = mapWgt.begin().value().toList(); + + QMainWindow* mainWindow_ = new QMainWindow; + connect(mainWindow_, &QMainWindow::tabifiedDockWidgetActivated, this, &MainWindow::OnTabifiedDockWidgetActivated); + + int nCount = tabWidget_->count(); + tabWidget_->insertTab(nCount, mainWindow_, strWgt); + + QVariantMap varRows; + for (int nJ = 0; nJ < listChart.size(); nJ++) + { + QVariantMap mapChart = listChart.at(nJ).toMap(); + int nRow = mapChart.value("row").toInt(); + int nCol = mapChart.value("column").toInt(); + QString strKey = QString::number(nRow) + "-" + QString::number(nCol); + varRows.insert(strKey, mapChart); + } + + QDockWidget* lastRowDock = nullptr; + QDockWidget* lastColDock = nullptr; + int lastRow = -1; + int lastCol = -1; + for (QVariantMap::Iterator ite = varRows.begin(); ite != varRows.end(); ++ite) + { + QVariantMap mapChart = ite.value().toMap(); + int nRow = mapChart.value("row").toInt(); + int nCol = mapChart.value("column").toInt(); + QString strName = mapChart.value("Name").toString(); + QString xTitle = mapChart.value("xTitle").toString(); + QString yTitle = mapChart.value("yTitle").toString(); + float xMin = mapChart.value("xMin").toFloat(); + float xMax = mapChart.value("xMax").toFloat(); + int xCount = mapChart.value("xCount").toInt(); + float yMin = mapChart.value("yMin").toFloat(); + float yMax = mapChart.value("yMax").toFloat(); + + DockWidget* pDock = new DockWidget(strName, 0); + fitCurveDlg_ = new FitCurveDialog(1); + fitCurveDlg_->AttachDock(pDock); + fitCurveDlg_->updateTitle(xTitle, yTitle); + fitCurveDlg_->updateMinMaxX(xMin, xMax, xCount); + fitCurveDlg_->updateMinMaxY(yMin, yMax); + + mainWindow_->addDockWidget(Qt::LeftDockWidgetArea, pDock); + + if (lastRow > -1) + { + if (lastRow == nRow) + { + if (lastCol > -1) + { + if (lastCol != nCol) + { + mainWindow_->splitDockWidget(lastColDock, pDock, Qt::Horizontal); + } + lastColDock = pDock; + } + else + { + lastColDock = pDock; + } + } + else + { + //mainWindow_->splitDockWidget(lastRowDock, pDock, Qt::Vertical); + + lastRowDock = pDock; + } + } + else + { + lastRowDock = pDock; + lastColDock = pDock; + } + + lastRow = nRow; + lastCol = nCol; + } + } +} + void MainWindow::OnTabifiedDockWidgetActivated(QDockWidget* dockWidget) { //if (dockWidget) { // QMainWindow* mainWindow = qobject_cast(dockWidget->parentWidget()); diff --git a/src/ui/MainWindow.h b/src/ui/MainWindow.h index 13680c78..adb9d0f8 100644 --- a/src/ui/MainWindow.h +++ b/src/ui/MainWindow.h @@ -4,6 +4,8 @@ #include #include +#include "chartPlot/ChartXMLMgr.h" + namespace Ui { class MainWindow; } @@ -47,6 +49,8 @@ private: void InitDockLayout(); void AddDockArea(const QString& strArea); + void InitChartLayout(); + protected: void OnTabifiedDockWidgetActivated(QDockWidget* dockWidget); @@ -70,4 +74,5 @@ private: QMap m_mapDockWidget; + ChartXMLMgr m_mgrChart; }; \ No newline at end of file diff --git a/src/ui/chartPlot/FitCurveDialog.cpp b/src/ui/chartPlot/FitCurveDialog.cpp index d3070918..55169db0 100644 --- a/src/ui/chartPlot/FitCurveDialog.cpp +++ b/src/ui/chartPlot/FitCurveDialog.cpp @@ -681,6 +681,41 @@ void FitCurveDialog::InitReportFile(const QString& strFile, int iBatchCount) } } +void FitCurveDialog::updateTitle(const QString & xTitle, const QString & yTitle) +{ + if (m_pAxisX) + { + m_pAxisX->setTitleText(xTitle); + } + if (m_pAxisY) + { + m_pAxisY->setTitleText(yTitle); + } +} + +void FitCurveDialog::updateMinMaxX(float min, float max, int count) +{ + m_iXMin = min; + m_iXMax = max; + + QList axesX; + axesX = curveChart->axes(Qt::Horizontal); + QValueAxis* curAxisX = (QValueAxis*)axesX[0]; + curAxisX->setRange(m_iXMin, m_iXMax); + curAxisX->setTickCount(count); +} + +void FitCurveDialog::updateMinMaxY(float min, float max) +{ + m_iYMin = min; + m_iYMax = max; + + QList axesY; + axesY = curveChart->axes(Qt::Vertical); + QValueAxis* curAxisY = (QValueAxis*)axesY[0]; + curAxisY->setRange(m_iYMin, m_iYMax); +} + bool FitCurveDialog::ParseWave(const QString& strFile, std::vector>>& vecWavePoint, int iRowCount) { if (strFile.isEmpty()) diff --git a/src/ui/chartPlot/FitCurveDialog.h b/src/ui/chartPlot/FitCurveDialog.h index 750e3345..ce433263 100644 --- a/src/ui/chartPlot/FitCurveDialog.h +++ b/src/ui/chartPlot/FitCurveDialog.h @@ -28,6 +28,10 @@ public: void InitWaveFile(const QString& strFile, int iBatchCount = 50); void InitReportFile(const QString& strFile, int iBatchCount = 50); + void updateTitle(const QString& xTitle, const QString& yTitle); + void updateMinMaxX(float min, float max, int count); + void updateMinMaxY(float min, float max); + protected: bool ParseWave(const QString& strFile, std::vector < std::vector>>& vecWavePoint, int iRowCount = 50); bool ParseReport(const QString& strFile, std::vector>>& vecReportPoint, int iRowCount = 50);