diff --git a/src/translations/Dyt_zh_CN.ts b/src/translations/Dyt_zh_CN.ts
index a151b381..d835e0f3 100644
--- a/src/translations/Dyt_zh_CN.ts
+++ b/src/translations/Dyt_zh_CN.ts
@@ -4,397 +4,391 @@
AddCurveFileDlg
-
-
+
+
Add Curve Data File
-
+
File Selection
-
+
File Path:
-
+
Select curve data file...
-
+
...
-
+
File Name:
-
-
+
+
-
-
+
File Size:
-
+
Chart Properties
-
+
Chart Name:
-
+
Chart 1
-
+
Enter chart name...
-
+
Chart Type:
-
+
X Axis Title:
-
+
Enter X axis title...
-
+
Y Axis Title:
-
+
Enter Y axis title...
-
+
Time:
-
+
Axis Range Settings
-
+
X Tick Count:
-
+
X Min:
-
+
Y Max:
-
+
Y Min:
-
+
X Max:
-
+
Y Tick Count:
-
+
Curve Management
-
+
Curves:
-
+
Add Curve
-
+
Remove
-
+
Selected Curve Properties
-
+
Curve Name:
-
+
Enter curve name...
-
+
Curve Color:
-
+
Select Color
-
+
background-color: rgb(255, 0, 0); border: 1px solid black;
-
+
Data Start:
-
+
Data Stop:
-
+
X Value:
-
+
Y Value:
-
+
Add File
-
+
Cancel
-
+
Curve %1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
Validation Error
-
+
Please select a data file.
-
+
Selected file does not exist.
-
+
Selected file is not readable. Please check file permissions.
-
+
File is too large (over 100MB). Please select a smaller file.
-
+
At least one curve must be defined.
-
+
Curve %1 name cannot be empty.
-
+
Curve name '%1' is duplicated. Please use different names.
-
+
Curve name '%1' is too long. Please limit to 50 characters.
-
+
Curve '%1' start and stop values must be greater than 0.
-
+
Curve '%1' start value cannot be greater than stop value.
-
+
Curve '%1' data range is too small. At least 2 data points are required.
-
+
Curve '%1' stop value is too large. Please ensure it does not exceed 1000000.
-
+
Curve '%1' X value is out of range. Please ensure it is between -1000000 and 1000000.
-
+
Curve '%1' Y value is out of range. Please ensure it is between -1000000 and 1000000.
-
+
Chart name cannot be empty.
-
+
Chart name is too long. Please limit to 100 characters.
-
+
X axis title is too long. Please limit to 50 characters.
-
+
Y axis title is too long. Please limit to 50 characters.
-
+
X axis minimum value must be less than maximum value.
-
+
Y axis minimum value must be less than maximum value.
-
+
Time parameter cannot be negative.
-
- X axis tick count must be at least 2.
-
-
-
-
+
Data Files (*.txt *.csv *.dat);;All Files (*.*)
-
-
-
+
+
+
Error
-
+
Failed to create file entry
-
+
Unable to get current workspace
-
+
Curve file count has reached the limit (9 files)
-
+
File already exists
-
+
File copy failed
-
+
Invalid file
-
+
Failed to add file
@@ -403,7 +397,7 @@
AddLightFileDlg
-
+
Add Light Data File
@@ -435,7 +429,7 @@
-
+
-
@@ -451,153 +445,163 @@
- Chart Names:
+ Chart Name:
-
- Color Properties
+
+ Chart 1
+ Time:
+
+
+
+
+ Color Properties
+
+
+
+
Open Color:
-
-
+
+
Select Color
-
+
background-color: rgb(0, 255, 0); border: 1px solid black;
-
+
Close Color:
-
+
background-color: rgb(255, 0, 0); border: 1px solid black;
-
+
Light Management
-
+
Lights:
-
+
Add Light Row
-
+
Remove
-
+
Selected Light Properties
-
+
Light Names:
-
+
Enter light names (comma separated)...
-
+
Light Datas:
-
+
Enter data values (comma separated integers)...
-
+
Edit Data
-
+
Row Index:
-
+
Add File
-
+
Cancel
-
+
Light Data Files (*.txt *.csv *.dat);;All Files (*.*)
-
+
Warning
-
+
Please enter a Chart name.
-
-
+
+
Error
-
+
Unable to get current workspace
-
+
Curve file count has reached the limit (9 files)
-
+
File already exists
-
+
File copy failed
-
+
Invalid file
-
+
Failed to add file
@@ -1004,6 +1008,7 @@
+
Error
@@ -1019,7 +1024,12 @@
- Curve file count has reached the limit (9 files)
+ Polar file count has reached the limit (9 files)
+
+
+
+
+ Failed to create Polar file entry.
@@ -1267,7 +1277,7 @@
-
+
Warning
@@ -1287,49 +1297,49 @@
-
+
Please enter a Surface name.
-
-
-
+
+
+
Error
-
+
Failed to create surface file entry.
-
+
Unable to get current workspace
-
+
Surface file count has reached the limit (9 files)
-
+
File already exists
-
+
File copy failed
-
+
Invalid file
-
+
Failed to add file
@@ -1940,6 +1950,11 @@
new polar file
+
+
+ new image file
+
+
FitCurveChartView
@@ -2024,22 +2039,22 @@
-
+
model elements
-
+
preset models
-
+
attribte
-
+
Main View
@@ -2302,38 +2317,38 @@
-
+
Open Workspace
-
-
+
+
Dyt Files (*.dyt)
-
-
-
-
-
-
+
+
+
+
+
+
prompt
-
-
-
-
-
-
+
+
+
+
+
+
please create workspace first
-
+
Save Workspace
diff --git a/src/ui/DockWidget.cpp b/src/ui/DockWidget.cpp
index 29548c19..6e121252 100644
--- a/src/ui/DockWidget.cpp
+++ b/src/ui/DockWidget.cpp
@@ -17,16 +17,6 @@ DockWidgetTitleBar::~DockWidgetTitleBar() {
}
-//QSize DockWidgetTitleBar::minimumSizeHint() const {
-// QDockWidget* dw = qobject_cast(parentWidget());
-// Q_ASSERT(dw);
-// QSize result(0, 90);
-// if (dw->features() & QDockWidget::DockWidgetVerticalTitleBar)
-// result.transpose();
-// return result;
-//}
-
-
DockWidget::DockWidget(const QString& title, QWidget* parent)
: QDockWidget(title, parent) {
setFeatures(DockWidgetClosable | DockWidgetMovable | DockWidgetFloatable);
@@ -42,6 +32,10 @@ DockWidget::DockWidget(const QString& title, QWidget* parent)
DockWidget::DockWidget(QWidget* parent)
: QDockWidget(parent) {
setFeatures(DockWidgetClosable | DockWidgetMovable | DockWidgetFloatable);
+ SystemManagerMenu* windowManagerMenu = MainFrame::Get().GetMenuManager("system_manager");
+ if (nullptr != windowManagerMenu) {
+ windowManagerMenu->AddDockWidget(this);
+ }
m_bMax = false;
}
diff --git a/src/ui/MainWindow.cpp b/src/ui/MainWindow.cpp
index f5cbf96c..76047ec2 100644
--- a/src/ui/MainWindow.cpp
+++ b/src/ui/MainWindow.cpp
@@ -39,7 +39,9 @@ MainWindow::MainWindow(QWidget* parent)
, ui(new Ui::MainWindow) {
ui->setupUi(this);
+ LOG_INFO("MainWindow::MainWindow - Constructor called, about to call InitUI");
InitUI();
+ LOG_INFO("MainWindow::MainWindow - Constructor completed");
}
MainWindow::~MainWindow() {
@@ -48,6 +50,8 @@ MainWindow::~MainWindow() {
}
void MainWindow::InitUI() {
+ LOG_INFO("MainWindow::InitUI - Function started");
+
QWidget* centralWidget = takeCentralWidget();
if (nullptr != centralWidget) {
delete centralWidget;
@@ -63,7 +67,7 @@ void MainWindow::InitUI() {
model->setObjectName("Dock.ModelBrowser");
modelBrowser_ = new ModelBrowser(0);
modelBrowser_->AttachDock(model);
- m_mapDockWidget.insert("ModelBrowser", model);
+ mapDockWidget_.insert("ModelBrowser", model);
addDockWidget(Qt::LeftDockWidgetArea, model);
// 创建预制模型面板
@@ -73,7 +77,7 @@ void MainWindow::InitUI() {
presetModelPanel_ = new PresetModelPanel(0);
presetModelPanel_->AttachDock(presetModel);
addDockWidget(Qt::LeftDockWidgetArea, presetModel);
- m_mapDockWidget.insert("PresetModelPanel", presetModel);
+ mapDockWidget_.insert("PresetModelPanel", presetModel);
DockWidget* attribte = new DockWidget(tr("attribte"), 0);
attribte->SetDockWidgetTitleBar(new DockTitleBar(attribte));
@@ -81,7 +85,7 @@ void MainWindow::InitUI() {
//addDockWidget(pSettingUI->GetArea("PropertyBrowser"), attribte);
propertyBrowser_ = new PropertyBrowser(0);
propertyBrowser_->AttachDock(attribte);
- m_mapDockWidget.insert("PropertyBrowser", attribte);
+ mapDockWidget_.insert("PropertyBrowser", attribte);
addDockWidget(Qt::RightDockWidgetArea, attribte);
connect(modelBrowser_, &ModelBrowser::WorkSpaceChange, propertyBrowser_, &PropertyBrowser::OnWorkSpaceChange);
@@ -95,152 +99,27 @@ void MainWindow::InitUI() {
viewDock->setObjectName("Dock.MainView");
viewDock->setWidget(qtOsgViewWidget_);
addDockWidget(Qt::LeftDockWidgetArea, viewDock);
- m_mapDockWidget.insert("MainView", viewDock);
+ mapDockWidget_.insert("MainView", viewDock);
splitDockWidget(model, viewDock, Qt::Horizontal);
// 将预制模型面板与模型浏览器标签化
tabifyDockWidget(model, presetModel);
- //QString wavePath ="", speedPath = "", rdPath = "", matlabParam="";
- //if (WorkSpaceManager::Get().GetCurrent())
- //{
- // if (!WorkSpaceManager::Get().GetCurrent()->GetWavePath().isEmpty())
- // {
- // wavePath = RecourceHelper::Get().GetBasePath() + "/" + WorkSpaceManager::Get().GetCurrent()->GetWavePath();
- // }
-
- // if (!WorkSpaceManager::Get().GetCurrent()->GetReportPath().isEmpty())
- // {
- // speedPath = RecourceHelper::Get().GetBasePath() + "/" + WorkSpaceManager::Get().GetCurrent()->GetReportPath();
- // }
-
- // if (!WorkSpaceManager::Get().GetCurrent()->GetRDPath().isEmpty())
- // {
- // rdPath = RecourceHelper::Get().GetBasePath() + "/" + WorkSpaceManager::Get().GetCurrent()->GetRDPath();
- // }
-
- // if (!WorkSpaceManager::Get().GetCurrent()->GetMatlabParam().isEmpty())
- // {
- // matlabParam = RecourceHelper::Get().GetBasePath() + "/" + WorkSpaceManager::Get().GetCurrent()->GetMatlabParam();
- // }
- //}
-
- //DockWidget* fitCurveDock = new DockWidget(tr("Wave Curve"), 0);
- //fitCurveDock->SetDockWidgetTitleBar(new DockTitleBar(fitCurveDock));
- //fitCurveDock->setObjectName("Dock.WaveCurveDialog");
- //fitCurveDlg_ = new FitCurveDialog();
- //fitCurveDlg_->AttachDock(fitCurveDock);
- //m_mapDockWidget.insert("WaveCurveDialog", fitCurveDock);
- //addDockWidget(Qt::BottomDockWidgetArea, fitCurveDock);
-
- //fitCurveDlg_->InitWaveFile(wavePath);
- //DockWidget* fitLgCurveDock = new DockWidget(tr("Speed Curve"), 0);
- //fitLgCurveDock->SetDockWidgetTitleBar(new DockTitleBar(fitLgCurveDock));
- //fitLgCurveDock->setObjectName("Dock.SpeedCurveDialog");
-
- //fitYLgCurveDlg_ = new FitCurveDialog();
- //fitYLgCurveDlg_->AttachDock(fitLgCurveDock);
- //m_mapDockWidget.insert("SpeedCurveDialog", fitLgCurveDock);
- //addDockWidget(Qt::BottomDockWidgetArea, fitLgCurveDock);
- //tabifyDockWidget(fitCurveDock, fitLgCurveDock);
-
-
- //fitYLgCurveDlg_->InitReportFile(speedPath);
-
- //DockWidget* surfaceCurveDock = new DockWidget(tr("3D Curve"), 0);
- //surfaceCurveDock->SetDockWidgetTitleBar(new DockTitleBar(surfaceCurveDock));
- //surfaceCurveDock->setObjectName("Dock.3DCurveDialog");
-
- //surfaceDlg_ = new SurfaceDialog();
- //surfaceDlg_->AttachDock(surfaceCurveDock);
- //m_mapDockWidget.insert("3DCurveDialog", surfaceCurveDock);
- //addDockWidget(Qt::BottomDockWidgetArea, surfaceCurveDock);
- //tabifyDockWidget(fitCurveDock, surfaceCurveDock);
-
- //surfaceDlg_->InitRD(rdPath);
-
- //{
- // targetUITable_ = new TargetListWgt;
-
- // QStringList headerLabels;
- // headerLabels << tr("Target number") << tr("Signal-to-noise ratio")
- // << tr("Azimuth line of sight") << tr("Pitch gaze angle")
- // << tr("azimuth") << tr("Pitch angle")
- // << tr("attribute") << tr("Doppler")
- // << tr("course") << tr("Speed")
- // << tr("longitude") << tr("latitude")
- // << tr("distance") << tr("velocity")
- // << tr("Radial dimensions") << tr("Target RCS");
-
- // targetUITable_->SetHeader(headerLabels);
- // //const QString reportPath = RecourceHelper::Get().GetBasePath() + "/workspace/Report.txt";
- // //targetUITable_->InitFile(speedPath, 50);
-
- // DockWidget* dataTableDock = new DockWidget(tr("Report Table"), 0);
- // dataTableDock->SetDockWidgetTitleBar(new DockTitleBar(dataTableDock));
- // dataTableDock->setObjectName("Dock.TargetListWgt_Table");
- // // addDockWidget(pSettingUI->GetArea("TargetListWgt"), dataTableDock);
- // targetUITable_->AttachDock(dataTableDock);
- // m_mapDockWidget.insert("TargetListWgt_Table", dataTableDock);
- // addDockWidget(Qt::BottomDockWidgetArea, dataTableDock);
- // tabifyDockWidget(fitCurveDock, dataTableDock);
-
- //}
-
- //const QString lampPath = RecourceHelper::Get().GetBasePath() + "/workspace/Lamp.txt";
-
- //DockWidget* signalIndicatorLampDock = new DockWidget(tr("Signal Indicator Lamp"), 0);
- //signalIndicatorLampDock->SetDockWidgetTitleBar(new DockTitleBar(signalIndicatorLampDock));
- //signalIndicatorLampDock->setObjectName("Dock.SignalIndicatorLampUI");
- //signalIndicatorLampUI_ = new SignalIndicatorLampUI;
- //signalIndicatorLampUI_->AttachDock(signalIndicatorLampDock);
- ////signalIndicatorLampUI_->InitLamp(lampPath);
-
- //m_mapDockWidget.insert("SignalIndicatorLampUI", signalIndicatorLampDock);
- //addDockWidget(Qt::BottomDockWidgetArea, signalIndicatorLampDock);
- //tabifyDockWidget(fitCurveDock, signalIndicatorLampDock);
-
- // DockWidget* addParamSettingDock = new DockWidget(tr("ParamSetting"), 0);
- // addParamSettingDock->SetDockWidgetTitleBar(new DockTitleBar(addParamSettingDock));
- // addParamSettingDock->setObjectName("Dock.ParamSetting");
- // addParamDlg_ = new AddParamSetting(matlabParam);
- // addParamDlg_->AttachDock(addParamSettingDock);
- // m_mapDockWidget.insert("ParamSetting", addParamSettingDock);
- // addDockWidget(Qt::BottomDockWidgetArea, addParamSettingDock);
- // tabifyDockWidget(fitCurveDock, addParamSettingDock);
-
- //DockWidget* matlabDock = new DockWidget(tr("bat File"), 0);
- //matlabDock->SetDockWidgetTitleBar(new DockTitleBar(matlabDock));
- //matlabDock->setObjectName("Dock.Matlab");
- //matlabFileDlg_ = new CodeEdtUI;
- //matlabFileDlg_->AttachDock(matlabDock);
- //m_mapDockWidget.insert("Matlab", matlabDock);
- // addDockWidget(Qt::BottomDockWidgetArea, matlabDock);
- // tabifyDockWidget(fitCurveDock, matlabDock);
-
- //ui->discript->setText(tr("name: 5year 0412"));
- //ui->status->setText(tr("start: no start"));
-
- // InitDockLayout();
-
dataPanelManager_ = new DataPanelManager(this, this);
connect(&WorkSpaceManager::Get(), &WorkSpaceManager::WorkSpaceChanged,
dataPanelManager_, &DataPanelManager::OnWorkspaceChanged);
// Restore previous UI layout if available
+ LOG_INFO("MainWindow::InitUI - About to call UiLayoutManager::Restore");
UiLayoutManager::Restore(this, 1);
-
- //InitChartLayout();
+ LOG_INFO("MainWindow::InitUI - UiLayoutManager::Restore completed");
//ui->viewWidget->layout()->addWidget(qtOsgViewWidget_);
qtOsgViewWidget_->LoadDefaultScene();
- /*OsgViewer::Get().Initialize();
- OsgViewer::Get().OnFrame();*/
#if 0
- // MatlabObject* mtlb = new MatlabObject;
MatlabObject::GetInstance()->RunMatlabFile("");
#endif // 1
}
@@ -277,150 +156,4 @@ void MainWindow::slotResetWorkSpace()
rdPath = RecourceHelper::Get().GetBasePath() + "/" + WorkSpaceManager::Get().GetCurrent()->GetRDPath();
}
}
-
- //fitCurveDlg_->InitWaveFile(wavePath);
- //fitYLgCurveDlg_->InitReportFile(speedPath);
- //surfaceDlg_->InitRD(rdPath);
- //targetUITable_->InitFile(speedPath, 50);
-}
-
-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.value("Name").toString();
- QVariantList listChart = mapWgt.value("Chart").toList();
-
- QMainWindow* mainWindow_ = new QMainWindow;
- //connect(mainWindow_, &QMainWindow::tabifiedDockWidgetActivated, this, &MainWindow::OnTabifiedDockWidgetActivated);
-
- DockWidget* wgtDock = new DockWidget(strWgt, 0);
- wgtDock->SetDockWidgetTitleBar(new DockTitleBar(wgtDock));
- wgtDock->setWidget(mainWindow_);
- addDockWidget(Qt::BottomDockWidgetArea, wgtDock);
-
- for (int nJ = 0; nJ < listChart.size(); nJ++)
- {
- QVariantMap mapChart = listChart.at(nJ).toMap();
- InitChart(mapChart, mainWindow_);
- }
- }
-}
-
-QDockWidget *MainWindow::InitChart(QVariantMap mapChart, QMainWindow* mainWindow)
-{
- QString strName = mapChart.value("Name").toString();
- QString strType = mapChart.value("Type").toString();
- QString after = mapChart.value("after").toString();
- QString orientation = mapChart.value("orientation").toString();
- int nT = mapChart.value("t").toInt();
- QString strFile = mapChart.value("File").toString();
-
- DockWidget* pDock = new DockWidget(strName, 0);
-
- if (strType == "Wave" || strType == "Report")
- {
- 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();
- int yCount = mapChart.value("yCount").toInt();
- QVariantList listCurve = mapChart.value("Curve").toList();
-
- FitCurveDialog *fitCurveDlg = new FitCurveDialog();
- fitCurveDlg->AttachDock(pDock);
- fitCurveDlg->updateTitle(strName + "-" + strFile);
- fitCurveDlg->updateTitleAxis(xTitle, yTitle);
- fitCurveDlg->updateMinMaxX(xMin, xMax, xCount);
- fitCurveDlg->updateMinMaxY(yMin, yMax, yCount);
-
- if (strType == "Wave")
- {
- fitCurveDlg->updateParseWaveFile(strFile, nT, listCurve);
- }
- else if (strType == "Report")
- {
- fitCurveDlg->updateParseReportFile(strFile, nT, listCurve);
- }
- }
- else if (strType == "Table")
- {
- QString head = mapChart.value("head").toString();
- QVariantList listCurve = mapChart.value("Curve").toList();
-
- TargetListWgt *targetUITable = new TargetListWgt;
- targetUITable->AttachDock(pDock);
- targetUITable->SetHead(head);
- targetUITable->updateTitle(strName + "-" + strFile);
- targetUITable->updateParseFile(strFile, nT, listCurve);
- }
- else if (strType == "Lamp")
- {
- QString openColor = mapChart.value("openColor").toString();
- QString closeColor = mapChart.value("closeColor").toString();
- QVariantList listCurve = mapChart.value("Curve").toList();
-
- SignalIndicatorLampUI *signalIndicatorLamp = new SignalIndicatorLampUI;
- signalIndicatorLamp->AttachDock(pDock);
- signalIndicatorLamp->updateTitle(strName + "-" + strFile);
- signalIndicatorLamp->updateLampColor(openColor, closeColor);
- signalIndicatorLamp->updateParseFile(strFile, nT, listCurve);
- }
- else if (strType == "Surface")
- {
- QString xTitle = mapChart.value("xTitle").toString();
- QString yTitle = mapChart.value("yTitle").toString();
- QString zTitle = mapChart.value("zTitle").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();
- int yCount = mapChart.value("yCount").toInt();
- float zMin = mapChart.value("zMin").toFloat();
- float zMax = mapChart.value("zMax").toFloat();
- int zCount = mapChart.value("zCount").toInt();
- QVariantList listCurve = mapChart.value("Curve").toList();
-
- SurfaceDialog *surfaceDlg = new SurfaceDialog();
- surfaceDlg->AttachDock(pDock);
- surfaceDlg->updateTitle(strName + "-" + strFile);
- surfaceDlg->updateTitleAxis(xTitle, yTitle, zTitle);
- surfaceDlg->updateMinMaxX(xMin, xMax, xCount);
- surfaceDlg->updateMinMaxY(yMin, yMax, yCount);
- surfaceDlg->updateMinMaxZ(zMin, zMax, zCount);
- surfaceDlg->updateParseFile(strFile, nT, listCurve);
- }
-
- mainWindow->addDockWidget(Qt::LeftDockWidgetArea, pDock);
-
- QDockWidget* afterDock = m_mapChartWidget.value(after);
- if (afterDock)
- {
- if (orientation == QString("Horizontal"))
- {
- mainWindow->splitDockWidget(afterDock, pDock, Qt::Horizontal);
- }
- else if (orientation == QString("Vertical"))
- {
- mainWindow->splitDockWidget(afterDock, pDock, Qt::Vertical);
- }
- }
-
- m_mapChartWidget.insert(strName, pDock);
-
- return pDock;
-}
-
-QDockWidget * MainWindow::InitCurveChart(QVariantMap mapChart, QMainWindow * mainWindow)
-{
- return nullptr;
}
diff --git a/src/ui/MainWindow.h b/src/ui/MainWindow.h
index 7e6e29e3..2cdbb586 100644
--- a/src/ui/MainWindow.h
+++ b/src/ui/MainWindow.h
@@ -32,16 +32,6 @@ public:
return qtOsgViewWidget_;
}
- class FitCurveDialog* GetFitCurveDlg() const {
- return fitCurveDlg_;
- }
- class FitCurveDialog* GetFitYLgCurveDlg() const {
- return fitYLgCurveDlg_;
- }
- class SurfaceDialog* GetSurfaceDlg() const {
- return surfaceDlg_;
- }
-
DataPanelManager* GetDataPanelManager() const {
return dataPanelManager_;
}
@@ -53,10 +43,6 @@ private:
void InitUI();
void UninitUI();
- void InitChartLayout();
- QDockWidget *InitChart(QVariantMap mapChart, QMainWindow* mainWindow);
- QDockWidget *InitCurveChart(QVariantMap mapChart, QMainWindow* mainWindow);
-
private:
Ui::MainWindow* ui;
@@ -66,20 +52,11 @@ private:
class QWebEngineView* webEngineView_{ nullptr };
class OsgWidget* qtOsgViewWidget_{ nullptr };
- class FitCurveDialog* fitCurveDlg_{ nullptr };
- class FitCurveDialog* fitYLgCurveDlg_{ nullptr };
- class SurfaceDialog* surfaceDlg_{ nullptr };
- class TargetListWgt* targetUITable_{ nullptr };
- class QTabWidget* tabWidget_{ nullptr };
class SignalIndicatorLampUI* signalIndicatorLampUI_{ nullptr };
class CodeEdtUI* matlabFileDlg_{ nullptr };
class AddParamSetting* addParamDlg_{ nullptr };
DataPanelManager* dataPanelManager_{ nullptr };
- QMap m_mapDockWidget;
-
- ChartXMLMgr m_mgrChart;
-
- QMap m_mapChartWidget;
+ QMap mapDockWidget_;
};
\ No newline at end of file
diff --git a/src/ui/Panel/DataPanelManager.cpp b/src/ui/Panel/DataPanelManager.cpp
index 7657e01d..4b09dc87 100644
--- a/src/ui/Panel/DataPanelManager.cpp
+++ b/src/ui/Panel/DataPanelManager.cpp
@@ -7,6 +7,7 @@
#include "workspace/FileEntry.h"
#include "workspace/Timestep.h"
#include "common/SpdLogger.h"
+#include "utils/UiLayoutManager.h"
#include
#include
@@ -65,6 +66,8 @@ void DataPanelManager::SetWorkspace(WorkSpace* workspace)
UpdatePanelsForType(FileEntryType::Table);
UpdatePanelsForType(FileEntryType::Light);
UpdatePanelsForType(FileEntryType::Polar);
+ LOG_INFO("DataPanelManager::SetWorkspace - Reapplying UI layout after panels created");
+ UiLayoutManager::Restore(mainWindow_, 1);
} else {
ClearAllPanels();
}
@@ -199,6 +202,8 @@ DataPanel* DataPanelManager::CreateDataPanel(FileEntryType fileType, const QStri
// Add to main window
mainWindow_->addDockWidget(Qt::RightDockWidgetArea, dockWidget);
+
+ // Do not force visibility here; let UiLayoutManager restore saved state
// Create panel using factory
DataPanel* panel = DataPanelFactory::CreatePanel(fileType, index, filePath, dockWidget);
diff --git a/src/utils/UiLayoutManager.cpp b/src/utils/UiLayoutManager.cpp
index db35dd40..42cf887b 100644
--- a/src/utils/UiLayoutManager.cpp
+++ b/src/utils/UiLayoutManager.cpp
@@ -2,37 +2,122 @@
#include
#include
+#include
#include
+#include
+#include
#include "common/RecourceHelper.h"
+#include "common/SpdLogger.h"
namespace {
static inline QString layoutIniPath() {
return RecourceHelper::Get().GetBasePath() + "/config/UIState.ini";
}
+
+static inline bool ensureConfigDirectory() {
+ const QString configDir = RecourceHelper::Get().GetBasePath() + "/config";
+ QDir dir;
+ if (!dir.exists(configDir)) {
+ if (!dir.mkpath(configDir)) {
+ LOG_ERROR("Failed to create config directory: {}", configDir.toStdString());
+ return false;
+ }
+ LOG_INFO("Created config directory: {}", configDir.toStdString());
+ }
+ return true;
+}
}
void UiLayoutManager::Save(QMainWindow* mainWindow, int version) {
- if (!mainWindow) return;
+ if (!mainWindow) {
+ LOG_WARN("MainWindow is null, cannot save layout");
+ return;
+ }
+
+ if (!ensureConfigDirectory()) {
+ LOG_ERROR("Cannot create config directory, layout will not be saved");
+ return;
+ }
+
const QString iniPath = layoutIniPath();
+ LOG_INFO("Saving UI layout to: {}", iniPath.toStdString());
+
QSettings settings(iniPath, QSettings::IniFormat);
settings.setValue("MainWindow/geometry", mainWindow->saveGeometry());
settings.setValue("MainWindow/state", mainWindow->saveState(version));
+
+ // Force sync to ensure data is written to disk
+ settings.sync();
+
+ if (settings.status() != QSettings::NoError) {
+ LOG_ERROR("Failed to save UI layout settings, status: {}", static_cast(settings.status()));
+ } else {
+ LOG_INFO("UI layout saved successfully");
+ }
}
void UiLayoutManager::Restore(QMainWindow* mainWindow, int version) {
- if (!mainWindow) return;
- const QString iniPath = layoutIniPath();
- if (!QFile::exists(iniPath)) {
+ LOG_INFO("UiLayoutManager::Restore - Starting layout restoration for version {}", version);
+
+ if (!mainWindow) {
+ LOG_WARN("MainWindow is null, cannot restore layout");
return;
}
+
+ const QString iniPath = layoutIniPath();
+ LOG_INFO("UiLayoutManager::Restore - Using config file: {}", iniPath.toStdString());
+
+ if (!QFile::exists(iniPath)) {
+ LOG_INFO("Layout file does not exist: {}, using default layout", iniPath.toStdString());
+ return;
+ }
+
+ LOG_INFO("Restoring UI layout from: {}", iniPath.toStdString());
+
QSettings settings(iniPath, QSettings::IniFormat);
const QByteArray geometry = settings.value("MainWindow/geometry").toByteArray();
- if (!geometry.isEmpty()) {
- mainWindow->restoreGeometry(geometry);
- }
const QByteArray state = settings.value("MainWindow/state").toByteArray();
- if (!state.isEmpty()) {
- mainWindow->restoreState(state, version);
+
+ LOG_INFO("UiLayoutManager::Restore - Geometry data size: {} bytes", geometry.size());
+ LOG_INFO("UiLayoutManager::Restore - State data size: {} bytes", state.size());
+
+ if (!geometry.isEmpty()) {
+ bool geometryRestored = mainWindow->restoreGeometry(geometry);
+ LOG_INFO("UiLayoutManager::Restore - Geometry restoration: {}", geometryRestored ? "SUCCESS" : "FAILED");
+ } else {
+ LOG_WARN("UiLayoutManager::Restore - No geometry data found");
}
+
+ if (!state.isEmpty()) {
+ bool stateRestored = mainWindow->restoreState(state, version);
+ LOG_INFO("UiLayoutManager::Restore - State restoration: {}", stateRestored ? "SUCCESS" : "FAILED");
+
+ // Log dock widget information
+ QList dockWidgets = mainWindow->findChildren();
+ LOG_INFO("UiLayoutManager::Restore - Found {} dock widgets after restoration", dockWidgets.size());
+ for (QDockWidget* dock : dockWidgets) {
+ LOG_INFO("UiLayoutManager::Restore - DockWidget: {} - Visible: {}, Floating: {}, Area: {}",
+ dock->objectName().toStdString(),
+ dock->isVisible(),
+ dock->isFloating(),
+ static_cast(mainWindow->dockWidgetArea(dock)));
+
+ // Ensure essential dock widgets are visible after restoration
+ QString objName = dock->objectName();
+ if (objName == "Dock.ModelBrowser" ||
+ objName == "Dock.PresetModelPanel" ||
+ objName == "Dock.PropertyBrowser" ||
+ objName == "Dock.MainView") {
+ if (!dock->isVisible()) {
+ LOG_INFO("UiLayoutManager::Restore - Making essential DockWidget visible: {}", objName.toStdString());
+ dock->show();
+ }
+ }
+ }
+ } else {
+ LOG_WARN("UiLayoutManager::Restore - No state data found");
+ }
+
+ LOG_INFO("UiLayoutManager::Restore - Layout restoration completed");
}
\ No newline at end of file