[traff_assessment_tool] Introduce status line for traffic panel

Signed-off-by: mvglasow <michael -at- vonglasow.com>
This commit is contained in:
mvglasow
2025-10-21 21:13:26 +03:00
parent ae23afd72e
commit 3c9eeb9a75
6 changed files with 45 additions and 24 deletions

View File

@@ -3,6 +3,7 @@
#include "traff_assessment_tool/map_widget.hpp"
#include "traff_assessment_tool/points_controller_delegate_base.hpp"
#include "traff_assessment_tool/traffic_drawer_delegate_base.hpp"
#include "traff_assessment_tool/traffic_model.hpp"
#include "traff_assessment_tool/traffic_panel.hpp"
#include "traff_assessment_tool/trafficmodeinitdlg.h"
@@ -317,7 +318,7 @@ void MainWindow::CreateTrafficPanel()
{
if (!m_trafficModel)
{
m_trafficModel = new TrafficModel(m_framework, *this);
m_trafficModel = new TrafficModel(m_framework);
connect(m_mapWidget, &MapWidget::TrafficMarkupClick,
m_trafficModel, &TrafficModel::OnClick);
@@ -332,17 +333,14 @@ void MainWindow::CreateTrafficPanel()
m_dockWidget = new QDockWidget(tr("Messages"), this);
addDockWidget(Qt::DockWidgetArea::RightDockWidgetArea, m_dockWidget);
m_dockWidget->setWidget(new TrafficPanel(m_trafficModel, m_dockWidget));
m_trafficPanel = new TrafficPanel(m_trafficModel, m_dockWidget);
m_dockWidget->setWidget(m_trafficPanel);
m_trafficModel->SetTrafficPanel(m_trafficPanel);
m_dockWidget->adjustSize();
m_dockWidget->setMinimumWidth(400);
m_progressBar = new QProgressBar(m_dockWidget);
m_progressBar->setMinimum(0);
m_progressBar->setMaximum(0);
}
m_dockWidget->setTitleBarWidget(m_progressBar);
m_trafficPanel->SetStatus(true);
m_dockWidget->show();
}
@@ -353,9 +351,6 @@ void MainWindow::DestroyTrafficPanel()
delete m_dockWidget;
m_dockWidget = nullptr;
delete m_progressBar;
m_progressBar = nullptr;
delete m_trafficModel;
m_trafficModel = nullptr;

View File

@@ -2,10 +2,11 @@
#include "base/string_utils.hpp"
#include "traff_assessment_tool/traffic_panel.hpp"
#include <string>
#include <QMainWindow>
#include <QProgressBar>
class Framework;
class QHBoxLayout;
@@ -32,7 +33,6 @@ class MainWindow : public QMainWindow
public:
explicit MainWindow(Framework & framework);
QDockWidget * GetDockWidget() { return m_dockWidget; }
private:
void CreateTrafficPanel();
@@ -60,7 +60,7 @@ private:
traffxml::TrafficModel * m_trafficModel = nullptr;
QDockWidget * m_dockWidget = nullptr;
QProgressBar * m_progressBar = nullptr;
TrafficPanel * m_trafficPanel = nullptr;
#ifdef openlr_obsolete
QAction * m_goldifyMatchedPathAction = nullptr;

View File

@@ -13,7 +13,6 @@
#include "base/assert.hpp"
#include "base/scope_guard.hpp"
#include <QDockWidget>
#include <QItemSelection>
#include <QMessageBox>
@@ -299,14 +298,12 @@ QVariant GetDescription(TraffMessage const & message)
// TrafficModel -------------------------------------------------------------------------------------
TrafficModel::TrafficModel(Framework & framework,
MainWindow & mainWindow,
QObject * parent)
: QAbstractTableModel(parent)
, m_framework(framework)
, m_dataSource(framework.GetDataSource())
, m_drawerDelegate(std::make_unique<TrafficDrawerDelegate>(framework))
, m_pointsDelegate(std::make_unique<PointsControllerDelegate>(framework))
, m_mainWindow(mainWindow)
{
framework.GetTrafficManager().SetTrafficUpdateCallbackFn([this, &framework](bool final) {
/*
@@ -331,9 +328,9 @@ TrafficModel::TrafficModel(Framework & framework,
editSession.ClearGroup(UserMark::Type::COLORED);
editSession.SetIsVisible(UserMark::Type::COLORED, false);
// restore QDockWidget title
if (final && m_mainWindow.GetDockWidget())
m_mainWindow.GetDockWidget()->setTitleBarWidget(nullptr);
// restore status bar
if (final)
m_trafficPanel->SetStatus(false, m_messages.size());
LOG(LINFO, ("Messages:", m_messages.size()));
});

View File

@@ -6,6 +6,7 @@
#include "segment_correspondence.hpp"
#endif
#include "traffic_drawer_delegate_base.hpp"
#include "traffic_panel.hpp"
#ifdef openlr_obsolete
#include "openlr/decoded_path.hpp"
@@ -71,10 +72,10 @@ class TrafficModel : public QAbstractTableModel
public:
// TODO(mgsergio): Check we are on the right mwm. I.e. right mwm version and everything.
TrafficModel(Framework & framework,
MainWindow & mainWindow,
QObject * parent = Q_NULLPTR);
bool SaveSampleAs(std::string const & fileName) const;
void SetTrafficPanel(TrafficPanel * panel) { m_trafficPanel = panel; }
int rowCount(const QModelIndex & parent = QModelIndex()) const Q_DECL_OVERRIDE;
int columnCount(const QModelIndex & parent = QModelIndex()) const Q_DECL_OVERRIDE;
@@ -123,7 +124,7 @@ private:
Framework & m_framework;
DataSource const & m_dataSource;
MainWindow & m_mainWindow;
TrafficPanel * m_trafficPanel = nullptr;
#ifdef openlr_obsolete
std::vector<SegmentCorrespondence> m_segments;
// Non-owning pointer to an element of m_segments.

View File

@@ -52,6 +52,13 @@ TrafficPanel::TrafficPanel(QAbstractItemModel * trafficModel, QWidget * parent)
auto * layout = new QVBoxLayout();
layout->addWidget(m_table);
m_progressBar = new QProgressBar();
m_progressBar->setMinimum(0);
m_progressBar->setMaximum(0);
layout->addWidget(m_progressBar);
m_status = new QLabel("0 messages");
layout->addWidget(m_status);
m_progressBar->hide();
setLayout(layout);
// Select first segment by default;
@@ -59,6 +66,22 @@ TrafficPanel::TrafficPanel(QAbstractItemModel * trafficModel, QWidget * parent)
m_table->selectionModel()->select(index, QItemSelectionModel::Select);
}
void TrafficPanel::SetStatus(bool inProgress, std::optional<size_t> messageCount)
{
if (inProgress)
{
m_status->hide();
m_progressBar->show();
}
else
{
if (messageCount)
m_status->setText(QString("Messages: %1").arg(messageCount.value()));
m_progressBar->hide();
m_status->show();
}
}
void TrafficPanel::CreateTable(QAbstractItemModel * trafficModel)
{
m_table = new QTableView();

View File

@@ -1,5 +1,7 @@
#pragma once
#include <QLabel>
#include <QProgressBar>
#include <QtWidgets/QStyledItemDelegate>
class QAbstractItemModel;
@@ -34,6 +36,7 @@ class TrafficPanel : public QWidget
public:
explicit TrafficPanel(QAbstractItemModel * trafficModel, QWidget * parent);
void SetStatus(bool inProgress, std::optional<size_t> messageCount = std::nullopt);
private:
void CreateTable(QAbstractItemModel * trafficModel);
@@ -46,5 +49,7 @@ public slots:
private:
QTableView * m_table = Q_NULLPTR;
QProgressBar * m_progressBar = Q_NULLPTR;
QLabel * m_status = Q_NULLPTR;
};
} // namespace traffxml