Skip to content

Commit 4a93e52

Browse files
author
Fleury
committed
[feature][UI] Show recorded bag file and remaining disk space size in record widget
1 parent 94ff9fe commit 4a93e52

4 files changed

Lines changed: 78 additions & 13 deletions

File tree

src/ui/interactive/ControlBagWidget.cpp

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -42,19 +42,19 @@ ControlBagWidget::ControlBagWidget(Parameters::SelectableBagTopicParameters& par
4242
buttonLayout->addWidget(stopButton);
4343
buttonLayout->setAlignment(stopButton, Qt::AlignLeft);
4444

45-
auto* const upperLayout = new QVBoxLayout;
46-
upperLayout->addStretch();
47-
upperLayout->addWidget(headerPixmapLabel);
48-
upperLayout->addWidget(headerLabel);
49-
upperLayout->addSpacing(40);
50-
upperLayout->addLayout(m_controlsLayout);
51-
upperLayout->addSpacing(10);
52-
upperLayout->addWidget(m_loggerListWidget);
53-
upperLayout->setContentsMargins(20, 20, 20, 20);
54-
upperLayout->addStretch();
45+
m_upperLayout = new QVBoxLayout;
46+
m_upperLayout->addStretch();
47+
m_upperLayout->addWidget(headerPixmapLabel);
48+
m_upperLayout->addWidget(headerLabel);
49+
m_upperLayout->addSpacing(40);
50+
m_upperLayout->addLayout(m_controlsLayout);
51+
m_upperLayout->addSpacing(10);
52+
m_upperLayout->addWidget(m_loggerListWidget);
53+
m_upperLayout->setContentsMargins(20, 20, 20, 20);
54+
m_upperLayout->addStretch();
5555

5656
auto* const mainLayout = new QVBoxLayout;
57-
mainLayout->addLayout(upperLayout);
57+
mainLayout->addLayout(m_upperLayout);
5858
mainLayout->addLayout(buttonLayout);
5959
setLayout(mainLayout);
6060

src/ui/interactive/ControlBagWidget.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
class QHBoxLayout;
1010
class QListWidget;
11+
class QVBoxLayout;
1112

1213
// Widget used to control playing a bag file.
1314
class ControlBagWidget : public QWidget
@@ -46,6 +47,7 @@ protected slots:
4647

4748
protected:
4849
QPointer<QHBoxLayout> m_controlsLayout;
50+
QPointer<QVBoxLayout> m_upperLayout;
4951
QPointer<QToolButton> m_playPauseButton;
5052
QPointer<QListWidget> m_loggerListWidget;
5153

src/ui/interactive/ControlRecordBagWidget.cpp

Lines changed: 52 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,35 @@
11
#include "ControlRecordBagWidget.hpp"
22

3+
#include "UtilsGeneral.hpp"
4+
35
#include <QHBoxLayout>
6+
#include <QLabel>
47
#include <QListWidget>
8+
#include <QTimer>
9+
10+
#include <filesystem>
511

612
ControlRecordBagWidget::ControlRecordBagWidget(Parameters::RecordBagParameters& parameters, QWidget* parent)
7-
: ControlBagWidget(parameters, "Started recording Bag File\n", ":/icons/tools/record_bag_", true, parent)
13+
: ControlBagWidget(parameters, "Started recording Bag File\n", ":/icons/tools/record_bag_", true, parent), m_parameters(parameters)
814
{
915
m_controlsLayout->addWidget(m_playPauseButton);
1016
m_controlsLayout->addStretch();
1117

12-
m_bagRecorder = std::make_unique<BagRecorder>(parameters);
18+
m_bagSizeLabel = new QLabel("");
19+
m_availableDiskSpaceLabel = new QLabel("");
20+
21+
auto font = m_bagSizeLabel->font();
22+
font.setBold(true);
23+
m_bagSizeLabel->setFont(font);
24+
m_availableDiskSpaceLabel->setFont(font);
25+
26+
m_upperLayout->insertSpacing(7, 20);
27+
m_upperLayout->insertWidget(8, m_bagSizeLabel);
28+
m_upperLayout->insertWidget(9, m_availableDiskSpaceLabel);
29+
m_upperLayout->setAlignment(m_bagSizeLabel, Qt::AlignHCenter);
30+
m_upperLayout->setAlignment(m_availableDiskSpaceLabel, Qt::AlignHCenter);
31+
32+
m_bagRecorder = std::make_unique<BagRecorder>(m_parameters);
1333
// Simulate the first few terminal info messages displayed when calling ros2 bag play
1434
addRecordBagLoggerEntry("Press SPACE for pausing/resuming");
1535
addRecordBagLoggerEntry("Listening for topics...");
@@ -26,4 +46,34 @@ ControlRecordBagWidget::ControlRecordBagWidget(Parameters::RecordBagParameters&
2646
connect(m_bagRecorder.get(), &BagRecorder::allTopicsSubscribed, this, [this] {
2747
addRecordBagLoggerEntry("All requested topics are subscribed. Stopping discovery...");
2848
});
49+
50+
m_loggerListWidget->setFocus();
51+
52+
auto* const timer = new QTimer(this);
53+
connect(timer, &QTimer::timeout, this, &ControlRecordBagWidget::updateSpaceInfoLabel);
54+
timer->start(1000);
55+
}
56+
57+
58+
void
59+
ControlRecordBagWidget::updateSpaceInfoLabel()
60+
{
61+
float bagFileSpace = 0;
62+
63+
std::error_code errorCode;
64+
for (const auto& entry : std::filesystem::recursive_directory_iterator(m_parameters.sourceDirectory.toStdString(),
65+
std::filesystem::directory_options::skip_permission_denied, errorCode)) {
66+
if (!std::filesystem::is_regular_file(entry, errorCode)) {
67+
continue;
68+
}
69+
bagFileSpace += static_cast<float>(std::filesystem::file_size(entry, errorCode));
70+
}
71+
72+
const auto sizeIndicator = bagFileSpace < Utils::General::GIGABYTE_IN_BYTES? " MB" : " GB";
73+
bagFileSpace /= bagFileSpace < Utils::General::GIGABYTE_IN_BYTES ? static_cast<float>(MEGABYTE_IN_BYTES)
74+
: static_cast<float>(Utils::General::GIGABYTE_IN_BYTES);
75+
m_bagSizeLabel->setText("Recorded Bag File Size: " + QString::number(bagFileSpace) + sizeIndicator);
76+
77+
const auto remainingSpace = Utils::General::getAvailableDriveSpace(m_parameters.sourceDirectory);
78+
m_availableDiskSpaceLabel->setText("Available Disk Space: " + QString::number(remainingSpace) + "GB");
2979
}

src/ui/interactive/ControlRecordBagWidget.hpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,11 @@
55
#include "Parameters.hpp"
66
#include "UtilsROS.hpp"
77

8+
#include <QPointer>
89
#include <QWidget>
910

11+
class QLabel;
12+
1013
// Widget used to control playing a bag file.
1114
class ControlRecordBagWidget : public ControlBagWidget
1215
{
@@ -17,6 +20,9 @@ class ControlRecordBagWidget : public ControlBagWidget
1720
QWidget* parent = 0);
1821

1922
private:
23+
void
24+
updateSpaceInfoLabel();
25+
2026
void
2127
handleBagControlInstance() override
2228
{
@@ -31,4 +37,11 @@ class ControlRecordBagWidget : public ControlBagWidget
3137

3238
private:
3339
std::unique_ptr<BagRecorder> m_bagRecorder;
40+
41+
QPointer<QLabel> m_bagSizeLabel;
42+
QPointer<QLabel> m_availableDiskSpaceLabel;
43+
44+
const Parameters::RecordBagParameters& m_parameters;
45+
46+
static constexpr long MEGABYTE_IN_BYTES = 1048576;
3447
};

0 commit comments

Comments
 (0)