Skip to content

Commit 44948d2

Browse files
committed
Use table selection instead of checkboxes
1 parent b7d0622 commit 44948d2

1 file changed

Lines changed: 39 additions & 40 deletions

File tree

src/TopicPublisherROS2/publisher_ros2.cpp

Lines changed: 39 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,11 @@
22

33
#include <QDebug>
44
#include <QDialog>
5-
#include <QFormLayout>
6-
#include <QCheckBox>
7-
#include <QLabel>
8-
#include <QLineEdit>
9-
#include <QHBoxLayout>
10-
#include <QVBoxLayout>
11-
#include <QDialogButtonBox>
12-
#include <QScrollArea>
5+
#include <QTableWidget>
6+
#include <QTableWidgetItem>
7+
#include <QAbstractItemView>
138
#include <QPushButton>
14-
#include <QSettings>
15-
#include <QRadioButton>
16-
#include <unordered_map>
179
#include <algorithm>
18-
#include <QMessageBox>
1910
#include <tf2_ros/qos.hpp>
2011
#include <rosbag2_cpp/types.hpp>
2112
#include <rmw/rmw.h>
@@ -157,48 +148,56 @@ void TopicPublisherROS2::filterDialog()
157148
return a.topic_name < b.topic_name;
158149
});
159150

160-
std::map<std::string, QCheckBox *> checkbox;
161-
std::map<std::string, std::pair<QLabel *, QCheckBox *>> topic_widgets;
151+
dialog->ui()->listTopics->setRowCount(sorted_topics.size());
162152

163-
for (const TopicInfo &info : sorted_topics)
153+
for (size_t i = 0; i < sorted_topics.size(); i++)
164154
{
165-
const std::string topic_name = info.topic_name;
166-
auto cb = new QCheckBox(dialog);
155+
const std::string topic_name = sorted_topics[i].topic_name;
156+
auto item = new QTableWidgetItem(QString::fromStdString(topic_name));
157+
item->setFlags(item->flags() & ~Qt::ItemIsEditable);
158+
dialog->ui()->listTopics->setItem(i, 0, item);
159+
167160
auto filter_it = _topics_to_publish.find(topic_name);
168-
if (filter_it == _topics_to_publish.end())
169-
{
170-
cb->setChecked(true);
171-
}
172-
else
161+
if (filter_it == _topics_to_publish.end() || filter_it->second)
173162
{
174-
cb->setChecked(filter_it->second);
163+
dialog->ui()->listTopics->selectRow(i);
175164
}
176-
cb->setFocusPolicy(Qt::NoFocus);
177-
auto label = new QLabel();
178-
label->setTextFormat(Qt::RichText);
179-
label->setText(QString("<a href=\"#\">%1</a>").arg(QString::fromStdString(topic_name)));
180-
label->setOpenExternalLinks(false);
181-
dialog->ui()->formLayout->addRow(label, cb);
182-
checkbox.insert(std::make_pair(topic_name, cb));
183-
topic_widgets.insert(std::make_pair(topic_name, std::make_pair(label, cb)));
184-
connect(label, &QLabel::linkActivated, [cb]()
185-
{ cb->toggle(); });
186-
connect(dialog->ui()->pushButtonSelect, &QPushButton::pressed, [cb]()
187-
{ cb->setChecked(true); });
188-
connect(dialog->ui()->pushButtonDeselect, &QPushButton::pressed, [cb]()
189-
{ cb->setChecked(false); });
190165
}
191166

192-
dialog->setTopicWidgets(topic_widgets);
167+
dialog->ui()->listTopics->sortByColumn(0, Qt::AscendingOrder);
168+
169+
connect(dialog->ui()->pushButtonSelect, &QPushButton::pressed, [dialog]()
170+
{
171+
for (int row = 0; row < dialog->ui()->listTopics->rowCount(); row++)
172+
{
173+
if (!dialog->ui()->listTopics->isRowHidden(row))
174+
{
175+
dialog->ui()->listTopics->selectRow(row);
176+
}
177+
}
178+
});
179+
connect(dialog->ui()->pushButtonDeselect, &QPushButton::pressed, dialog->ui()->listTopics,
180+
&QAbstractItemView::clearSelection);
193181

194182
dialog->exec();
195183

196184
if (dialog->result() == QDialog::Accepted)
197185
{
198186
_topics_to_publish.clear();
199-
for (const auto &it : checkbox)
187+
QModelIndexList selected_indexes = dialog->ui()->listTopics->selectionModel()->selectedIndexes();
188+
189+
for (const auto &info : sorted_topics)
190+
{
191+
_topics_to_publish.insert({info.topic_name, false});
192+
}
193+
194+
foreach (QModelIndex index, selected_indexes)
200195
{
201-
_topics_to_publish.insert({it.first, it.second->isChecked()});
196+
if (index.column() == 0)
197+
{
198+
std::string topic_name = index.data(Qt::DisplayRole).toString().toStdString();
199+
_topics_to_publish[topic_name] = true;
200+
}
202201
}
203202

204203
updatePublishers();

0 commit comments

Comments
 (0)