7 #include <QTableWidget>
8 #include <QTableWidgetItem>
11 #include <QMessageBox>
12 #include <QAbstractItemView>
15 #include "ui_dialog_select_ros_topics.h"
20 , ui(new
Ui::dialogSelectRosTopics)
21 , _default_selected_topics(config.topics)
22 , _select_all(QKeySequence(Qt::CTRL + Qt::Key_A), this)
23 , _deselect_all(QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_A), this)
25 auto flags = this->windowFlags();
26 this->setWindowFlags(flags | Qt::WindowStaysOnTopHint);
37 ui->radioMaxDiscard->setChecked(
true);
41 ui->radioMaxClamp->setChecked(
true);
45 labels.push_back(
"Topic name");
46 labels.push_back(
"Datatype");
48 ui->listRosTopics->setHorizontalHeaderLabels(labels);
49 ui->listRosTopics->verticalHeader()->setVisible(
false);
53 if (
ui->listRosTopics->rowCount() == 1)
55 ui->listRosTopics->selectRow(0);
57 ui->listRosTopics->setFocus();
62 connect(&
_select_all, &QShortcut::activated,
ui->listRosTopics, [
this]() {
63 for (int row = 0; row < ui->listRosTopics->rowCount(); row++)
65 if (!ui->listRosTopics->isRowHidden(row) && !ui->listRosTopics->item(row, 0)->isSelected())
67 ui->listRosTopics->selectRow(row);
72 connect(&_deselect_all, &QShortcut::activated, ui->listRosTopics, &QAbstractItemView::clearSelection);
74 on_spinBoxArraySize_valueChanged(ui->spinBoxArraySize->value());
77 restoreGeometry(settings.value(
"DialogSelectRosTopics.geometry").toByteArray());
83 std::set<QString> newly_added;
86 for (
const auto&
it : topic_list)
88 const QString& topic_name =
it.first;
92 for (
int r = 0; r <
ui->listRosTopics->rowCount(); r++)
94 const QTableWidgetItem* item =
ui->listRosTopics->item(r, 0);
95 if (item->text() == topic_name)
104 int new_row =
ui->listRosTopics->rowCount();
105 ui->listRosTopics->setRowCount(new_row + 1);
108 ui->listRosTopics->setItem(new_row, 1,
new QTableWidgetItem(
type_name));
109 ui->listRosTopics->setItem(new_row, 0,
new QTableWidgetItem(topic_name));
110 newly_added.insert(topic_name);
114 if (newly_added.size() > 1)
116 ui->listRosTopics->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch);
117 ui->listRosTopics->horizontalHeader()->setSectionResizeMode(1, QHeaderView::ResizeToContents);
118 ui->listRosTopics->sortByColumn(0, Qt::AscendingOrder);
121 QModelIndexList selection =
ui->listRosTopics->selectionModel()->selectedRows();
123 for (
int row = 0; row <
ui->listRosTopics->rowCount(); row++)
125 const QTableWidgetItem* item =
ui->listRosTopics->item(row, 0);
126 QString topic_name = item->text();
130 bool selected =
false;
131 for (
const auto& selected_item : selection)
133 if (selected_item.row() == row)
141 ui->listRosTopics->selectRow(row);
150 settings.setValue(
"DialogSelectRosTopics.geometry", saveGeometry());
169 QModelIndexList selected_indexes =
ui->listRosTopics->selectionModel()->selectedIndexes();
170 QString selected_topics;
172 foreach (QModelIndex
index, selected_indexes)
174 if (
index.column() == 0)
177 selected_topics.append(
_topic_list.back()).append(
" ");
184 QModelIndexList indexes =
ui->listRosTopics->selectionModel()->selectedIndexes();
186 ui->buttonBox->setEnabled(indexes.size() > 0);
192 msgBox.setWindowTitle(
"Help");
193 msgBox.setText(
"Maximum Size of Arrays:\n\n"
194 "If the size of an Arrays is larger than this maximum value, the entire array is skipped.\n\n"
195 "This parameter is used to prevent the user from loading HUGE arrays, "
196 "such as images, pointclouds, maps, etc.\n"
197 "The term 'array' refers to the array in a message field,\n\n"
198 " See http://wiki.ros.org/msg.\n\n"
199 "This is NOT about the duration of a time series!\n\n"
200 "MOTIVATION: pretend that a user tries to load a RGB image, which probably contains "
201 "a few millions pixels.\n"
202 "Plotjuggler would naively create a single time series for each pixel of the image! "
203 "That makes no sense, of course, and it would probably freeze your system.\n");
209 QStringList spaced_items = search_string.split(
' ');
211 for (
int row = 0; row <
ui->listRosTopics->rowCount(); row++)
213 auto item =
ui->listRosTopics->item(row, 0);
214 QString
name = item->text();
218 for (
const auto& item : spaced_items)
220 if (!
name.contains(item))
226 ui->listRosTopics->setRowHidden(row, toHide);