dialog_mcap.cpp
Go to the documentation of this file.
1 #include "dialog_mcap.h"
2 #include "ui_dialog_mcap.h"
3 
4 #include <QSettings>
5 #include <QDialogButtonBox>
6 #include <QPushButton>
7 #include <QElapsedTimer>
8 
9 const QString DialogMCAP::prefix = "DialogLoadMCAP::";
10 
11 DialogMCAP::DialogMCAP(const std::unordered_map<int, mcap::ChannelPtr>& channels,
12  const std::unordered_map<int, mcap::SchemaPtr>& schemas,
13  std::optional<mcap::LoadParams> default_parameters,
14  QWidget* parent)
15  : QDialog(parent), ui(new Ui::dialog_mcap)
16 {
17  ui->setupUi(this);
18 
19  ui->tableWidget->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch);
20  ui->tableWidget->horizontalHeader()->setSectionResizeMode(
21  1, QHeaderView::ResizeToContents);
22  ui->tableWidget->horizontalHeader()->setSectionResizeMode(
23  2, QHeaderView::ResizeToContents);
24 
25  ui->tableWidget->setRowCount(channels.size());
26 
27  QSettings settings;
28  restoreGeometry(settings.value(prefix + "geometry").toByteArray());
29 
30  mcap::LoadParams params;
31  if (!default_parameters)
32  {
33  params.selected_topics = settings.value(prefix + "selected").toStringList();
34  params.clamp_large_arrays = settings.value(prefix + "clamp", true).toBool();
35  params.max_array_size = settings.value(prefix + "max_array", 500).toInt();
36  params.use_timestamp = settings.value(prefix + "use_timestamp", false).toBool();
37  params.use_mcap_log_time =
38  settings.value(prefix + "use_mcap_log_time", false).toBool();
39  }
40  else
41  {
42  params = *default_parameters;
43  }
44 
45  if (params.clamp_large_arrays)
46  {
47  ui->radioClamp->setChecked(true);
48  }
49  else
50  {
51  ui->radioSkip->setChecked(true);
52  }
53  ui->spinBox->setValue(params.max_array_size);
54  ui->checkBoxUseTimestamp->setChecked(params.use_timestamp);
55  if (params.use_mcap_log_time)
56  {
57  ui->radioLogTime->setChecked(true);
58  }
59  else
60  {
61  ui->radioPubTime->setChecked(true);
62  }
63 
64  int row = 0;
65  for (const auto& [id, channel] : channels)
66  {
67  auto topic = QString::fromStdString(channel->topic);
68  auto const& schema = schemas.at(channel->schemaId);
69 
70  ui->tableWidget->setItem(row, 0, new QTableWidgetItem(topic));
71  ui->tableWidget->setItem(row, 1,
72  new QTableWidgetItem(QString::fromStdString(schema->name)));
73  ui->tableWidget->setItem(
74  row, 2, new QTableWidgetItem(QString::fromStdString(schema->encoding)));
75 
76  if (params.selected_topics.contains(topic))
77  {
78  ui->tableWidget->selectRow(row);
79  }
80  row++;
81  }
82  ui->tableWidget->sortByColumn(0, Qt::SortOrder::DescendingOrder);
83 }
84 
86 {
87  delete ui;
88 }
89 
91 {
92  mcap::LoadParams params;
93  params.max_array_size = ui->spinBox->value();
94  params.clamp_large_arrays = ui->radioClamp->isChecked();
95  params.use_timestamp = ui->checkBoxUseTimestamp->isChecked();
96  params.use_mcap_log_time = ui->radioLogTime->isChecked();
97 
98  QItemSelectionModel* select = ui->tableWidget->selectionModel();
99  QStringList selected_topics;
100  for (QModelIndex index : select->selectedRows())
101  {
102  params.selected_topics.push_back(ui->tableWidget->item(index.row(), 0)->text());
103  }
104  return params;
105 }
106 
108 {
109  bool enabled = !ui->tableWidget->selectionModel()->selectedRows().empty();
110  ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(enabled);
111 }
112 
114 {
115  QSettings settings;
116  settings.setValue(prefix + "geometry", saveGeometry());
117 
118  bool clamp_checked = ui->radioClamp->isChecked();
119  int max_array = ui->spinBox->value();
120  bool use_timestamp = ui->checkBoxUseTimestamp->isChecked();
121  bool use_mcap_log_time = ui->radioLogTime->isChecked();
122 
123  settings.setValue(prefix + "clamp", clamp_checked);
124  settings.setValue(prefix + "max_array", max_array);
125  settings.setValue(prefix + "use_timestamp", use_timestamp);
126  settings.setValue(prefix + "use_mcap_log_time", use_mcap_log_time);
127 
128  QItemSelectionModel* select = ui->tableWidget->selectionModel();
129  QStringList selected_topics;
130  for (QModelIndex index : select->selectedRows())
131  {
132  selected_topics.push_back(ui->tableWidget->item(index.row(), 0)->text());
133  }
134  settings.setValue(prefix + "selected", selected_topics);
135 
136  QDialog::accept();
137 }
DialogMCAP::DialogMCAP
DialogMCAP(const std::unordered_map< int, mcap::ChannelPtr > &channels, const std::unordered_map< int, mcap::SchemaPtr > &schemas, std::optional< mcap::LoadParams > default_parameters, QWidget *parent=nullptr)
Definition: dialog_mcap.cpp:11
DialogMCAP::~DialogMCAP
~DialogMCAP()
Definition: dialog_mcap.cpp:85
sol::function_detail::select
void select(lua_State *L, Fx &&fx, Args &&... args)
Definition: sol.hpp:19973
mcap::LoadParams
Definition: dataload_params.h:8
dialog_mcap.h
DialogMCAP::ui
Ui::dialog_mcap * ui
Definition: dialog_mcap.h:32
mcap::LoadParams::max_array_size
unsigned max_array_size
Definition: dataload_params.h:11
mcap::LoadParams::clamp_large_arrays
bool clamp_large_arrays
Definition: dataload_params.h:12
start_test_publisher.topic
topic
Definition: start_test_publisher.py:22
Ui
Definition: cheatsheet_dialog.h:6
DialogMCAP::accept
void accept() override
Definition: dialog_mcap.cpp:113
DialogMCAP::getParams
mcap::LoadParams getParams() const
Definition: dialog_mcap.cpp:90
DialogMCAP::prefix
static const QString prefix
Definition: dialog_mcap.h:34
mcap::LoadParams::selected_topics
QStringList selected_topics
Definition: dataload_params.h:10
mcap::LoadParams::use_timestamp
bool use_timestamp
Definition: dataload_params.h:13
DialogMCAP::on_tableWidget_itemSelectionChanged
void on_tableWidget_itemSelectionChanged()
Definition: dialog_mcap.cpp:107
mcap::LoadParams::use_mcap_log_time
bool use_mcap_log_time
Definition: dataload_params.h:14


plotjuggler
Author(s): Davide Faconti
autogenerated on Sun Jan 26 2025 03:23:23