modify color change to pannel

This commit is contained in:
brige 2025-11-09 22:08:13 +08:00
parent 6389e530b4
commit c8b53ec674
3 changed files with 128 additions and 77 deletions

View File

@ -2,6 +2,9 @@
#include "ui/DockWidget.h" #include "ui/DockWidget.h"
#include "ui/DockTitleBar.h" #include "ui/DockTitleBar.h"
#include "common/SpdLogger.h" #include "common/SpdLogger.h"
#include "workspace/WorkSpaceManager.h"
#include "workspace/WorkSpace.h"
#include "workspace/Timestep.h"
#include <QHBoxLayout> #include <QHBoxLayout>
#include <QFileInfo> #include <QFileInfo>
#include <QMessageBox> #include <QMessageBox>
@ -40,7 +43,7 @@ void LightPanel::RefreshPanel()
OnDataPanelUpdated(fileEntry); OnDataPanelUpdated(fileEntry);
} }
LOG_INFO("Refreshed TablePanel {}", GetIndex()); LOG_INFO("Refreshed LightPanel {}", GetIndex());
} }
void LightPanel::InitUI() void LightPanel::InitUI()
@ -69,32 +72,20 @@ void LightPanel::OnDataPanelUpdated(FileEntryLight* fileEntry)
QString strFile = fileEntry->GetPath() + "/" + fileEntry->GetFileName(); QString strFile = fileEntry->GetPath() + "/" + fileEntry->GetFileName();
FileEntryLight::LightRowProperties listCurve = fileEntry->GetLightProperties(); FileEntryLight::LightRowProperties listCurve = fileEntry->GetLightProperties();
updateParseFile(strFile, propChart.timeParam, listCurve); updateParseFile(strFile, propChart.timeParam, listCurve);
// 颜色或数据更新后,按当前时间重新应用灯样式,确保即时可见
WorkSpace* ws = WorkSpaceManager::Get().GetCurrent();
if (ws) {
Timestep* ts = ws->GetTimestep();
if (ts) {
applyLampStylesForTime(ts->GetCurrent());
}
}
} }
void LightPanel::OnTimeChanged(double time) void LightPanel::OnTimeChanged(double time)
{ {
if (m_dataLamp.size() > 0) applyLampStylesForTime(time);
{
QMap< double, QVariantMap >::const_iterator ite = m_dataLamp.lowerBound(time);
if (ite == m_dataLamp.end())
{
ite--;
}
QVariantMap mapData = ite.value();
for (QVariantMap::Iterator it = mapData.begin(); it != mapData.end(); it++)
{
QString strKey = it.key();
int nState = it.value().toFloat();
SignalLabel* pLampLab = m_mapLamp.value(strKey);
if (pLampLab)
{
QString strStyle = m_lampColor.value(nState);
pLampLab->setStyleSheet(strStyle);
}
}
}
} }
void LightPanel::updateTitle(const QString & title) void LightPanel::updateTitle(const QString & title)
@ -109,7 +100,7 @@ void LightPanel::updateParseFile(const QString & strFile, int nT, FileEntryLight
{ {
if (strFile.isEmpty()) if (strFile.isEmpty())
{ {
QMessageBox::information(nullptr, QString::fromLocal8Bit("提示"), QString::fromLocal8Bit("请检查数据文件路径!")); QMessageBox::information(nullptr, QString::fromLocal8Bit("<EFBFBD><EFBFBD>ʾ"), QString::fromLocal8Bit("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
return; return;
} }
@ -195,6 +186,32 @@ void LightPanel::updateLampColor(const QString & strOpenColor, const QString & s
} }
} }
void LightPanel::applyLampStylesForTime(double time)
{
if (m_dataLamp.isEmpty()) {
return;
}
auto ite = m_dataLamp.lowerBound(time);
if (ite == m_dataLamp.end()) {
ite--;
}
const QVariantMap mapData = ite.value();
for (auto it = mapData.constBegin(); it != mapData.constEnd(); ++it)
{
const QString strKey = it.key();
const int nState = it.value().toFloat();
SignalLabel* pLampLab = m_mapLamp.value(strKey);
if (pLampLab)
{
const QString strStyle = m_lampColor.value(nState);
pLampLab->setStyleSheet(strStyle);
}
}
}
void LightPanel::clearLightPanel() void LightPanel::clearLightPanel()
{ {
if (auto* layout = qobject_cast<QGridLayout*>(this->layout())) if (auto* layout = qobject_cast<QGridLayout*>(this->layout()))

View File

@ -63,6 +63,7 @@ private:
void updateTitle(const QString& title); void updateTitle(const QString& title);
void updateParseFile(const QString& strFile, int nT, FileEntryLight::LightRowProperties listCurve); void updateParseFile(const QString& strFile, int nT, FileEntryLight::LightRowProperties listCurve);
void updateLampColor(const QString& strOpenColor, const QString& strCloseColor); void updateLampColor(const QString& strOpenColor, const QString& strCloseColor);
void applyLampStylesForTime(double time);
void clearLightPanel(); void clearLightPanel();

View File

@ -1,6 +1,9 @@
#include "ui/Panel/TablePanel.h" #include "ui/Panel/TablePanel.h"
#include "ui/DockWidget.h" #include "ui/DockWidget.h"
#include "ui/DockTitleBar.h" #include "ui/DockTitleBar.h"
#include "workspace/WorkSpaceManager.h"
#include "workspace/WorkSpace.h"
#include "workspace/Timestep.h"
#include "common/SpdLogger.h" #include "common/SpdLogger.h"
#include <QHBoxLayout> #include <QHBoxLayout>
#include <QFileInfo> #include <QFileInfo>
@ -91,6 +94,23 @@ void TablePanel::OnDataPanelUpdated(FileEntryTable* fileEntry)
QString strFile = fileEntry->GetPath() + "/" + fileEntry->GetFileName(); QString strFile = fileEntry->GetPath() + "/" + fileEntry->GetFileName();
FileEntryTable::TableProperties listCurve = fileEntry->GetTableProperties(); FileEntryTable::TableProperties listCurve = fileEntry->GetTableProperties();
updateParseFile(strFile, propChart.timeParam, listCurve); updateParseFile(strFile, propChart.timeParam, listCurve);
// After parsing new data and settings, immediately refresh the table to current time
// so color changes from PropertyBrowser reflect in the UI right away
WorkSpace* ws = WorkSpaceManager::Get().GetCurrent();
if (ws) {
Timestep* ts = ws->GetTimestep();
if (ts) {
updateTable(ts->GetCurrent());
return;
}
}
// Fallback: render the latest snapshot if no workspace/timestep
if (!m_dataTable.isEmpty()) {
auto it = m_dataTable.end();
--it;
updateTable(it.key());
}
} }
void TablePanel::OnTimeChanged(double time) void TablePanel::OnTimeChanged(double time)
@ -118,7 +138,7 @@ void TablePanel::updateParseFile(const QString & strFile, int nT, FileEntryTable
{ {
if (strFile.isEmpty()) if (strFile.isEmpty())
{ {
QMessageBox::information(nullptr, QString::fromLocal8Bit("提示"), QString::fromLocal8Bit("请检查数据文件路径!")); QMessageBox::information(nullptr, QString::fromLocal8Bit("<EFBFBD><EFBFBD>ʾ"), QString::fromLocal8Bit("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
return; return;
} }
@ -212,6 +232,19 @@ void TablePanel::updateTable(double t)
QTableWidgetItem *item = new QTableWidgetItem(strVal); QTableWidgetItem *item = new QTableWidgetItem(strVal);
item->setTextAlignment(Qt::AlignCenter); item->setTextAlignment(Qt::AlignCenter);
m_pTableWidget->setItem(nRow, nI, item); m_pTableWidget->setItem(nRow, nI, item);
// Apply color linkage: use FileEntryTable::TableProperty color for this row
if (m_tableSetting.contains(nRow)) {
const QColor rowColor = m_tableSetting.value(nRow).second;
if (rowColor.isValid()) {
// Prefer foreground text color to mirror curve color, keep readability
item->setForeground(QBrush(rowColor));
// Optionally add a subtle background tint to improve visibility
QColor bg = rowColor;
bg.setAlpha(40);
item->setBackground(QBrush(bg));
}
}
} }
} }
} }