ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
ecvEntitySelectionDlg.cpp
Go to the documentation of this file.
1 // ----------------------------------------------------------------------------
2 // - CloudViewer: www.cloudViewer.org -
3 // ----------------------------------------------------------------------------
4 // Copyright (c) 2018-2024 www.cloudViewer.org
5 // SPDX-License-Identifier: MIT
6 // ----------------------------------------------------------------------------
7 
9 
10 // ui
11 #include <ui_entitySelectionDlg.h>
12 
13 // Qt
14 #include <QDialog>
15 #include <QListWidgetItem>
16 
18  const ccHObject::Container& entities,
19  bool multiSelectionEnabled,
20  int defaultSelectedIndex /*=0*/,
21  QWidget* parent /*=0*/,
22  QString labelStr /*=QString()*/)
23  : QDialog(parent, Qt::Tool), m_ui(new Ui_EntitySelectionDialog) {
24  m_ui->setupUi(this);
25 
26  // multi-selection mode
27  if (multiSelectionEnabled) {
28  m_ui->label->setText(tr("Select one or several entities:"));
29  m_ui->listWidget->setSelectionMode(
30  QAbstractItemView::ExtendedSelection);
31  connect(m_ui->selectAllPushButton, &QPushButton::clicked, this,
33  connect(m_ui->selectNonePushButton, &QPushButton::clicked, this,
35  } else {
36  m_ui->selectAllPushButton->setVisible(false);
37  m_ui->selectNonePushButton->setVisible(false);
38  }
39 
40  for (size_t i = 0; i < entities.size(); ++i) {
41  // add one line per entity in the combo-box
42  m_ui->listWidget->insertItem(
43  static_cast<int>(i),
44  new QListWidgetItem(QString("[ID %1] %2")
45  .arg(entities[i]->getUniqueID())
46  .arg(entities[i]->getName())));
47  }
48 
49  // default selection
50  if (defaultSelectedIndex >= 0 &&
51  static_cast<size_t>(defaultSelectedIndex) < entities.size()) {
52  m_ui->listWidget->item(defaultSelectedIndex)->setSelected(true);
53  }
54 
55  // custom lalel
56  if (!labelStr.isNull()) {
57  m_ui->label->setText(labelStr);
58  }
59 }
60 
62  if (m_ui) {
63  delete m_ui;
64  m_ui = nullptr;
65  }
66 }
67 
68 void ecvEntitySelectionDialog::selectAll() { m_ui->listWidget->selectAll(); }
69 
71  m_ui->listWidget->clearSelection();
72 }
73 
75  // get selected items
76  QList<QListWidgetItem*> list = m_ui->listWidget->selectedItems();
77  return list.empty() ? -1 : m_ui->listWidget->row(list.front());
78 }
79 
81  std::vector<int>& indexes) const {
82  // get selected items
83  QList<QListWidgetItem*> list = m_ui->listWidget->selectedItems();
84 
85  try {
86  indexes.resize(static_cast<size_t>(list.size()));
87  } catch (const std::bad_alloc&) {
88  // not enough memory?!
89  return;
90  }
91 
92  for (int i = 0; i < list.size(); ++i) {
93  indexes[i] = m_ui->listWidget->row(list[i]);
94  }
95 }
96 
98  int selectedIndex /*=0*/,
99  QWidget* parent /*=0*/,
100  QString label /*=QString()*/) {
101  ecvEntitySelectionDialog epDlg(entities, false, selectedIndex, parent,
102  label);
103  if (!epDlg.exec()) {
104  return -1;
105  }
106 
107  return epDlg.getSelectedIndex();
108 }
109 
111  const ccHObject::Container& entities,
112  std::vector<int>& selectedIndexes,
113  QWidget* parent /*=0*/,
114  QString label /*=QString()*/) {
115  selectedIndexes.clear();
116 
117  ecvEntitySelectionDialog epDlg(entities, true, -1, parent, label);
118  if (!epDlg.exec()) {
119  return false;
120  }
121 
122  epDlg.getSelectedIndexes(selectedIndexes);
123  return true;
124 }
std::vector< ccHObject * > Container
Standard instances container (for children, etc.)
Definition: ecvHObject.h:337
Dialog to select one or multiple entities.
void selectNone()
Selects all entities.
Ui_EntitySelectionDialog * m_ui
Associated ui.
static int SelectEntity(const ccHObject::Container &entities, int defaultSelectedIndex=0, QWidget *parent=0, QString label=QString())
Static shortcut: unique selection mode.
int getSelectedIndex() const
Returns the selected index (unique selection mode)
ecvEntitySelectionDialog(const ccHObject::Container &entities, bool multiSelectionEnabled, int defaultSelectedIndex=0, QWidget *parent=0, QString label=QString())
Default constructor.
virtual ~ecvEntitySelectionDialog()
Destructor.
static bool SelectEntities(const ccHObject::Container &entities, std::vector< int > &indexes, QWidget *parent=0, QString label=QString())
Static shortcut: multi-selection mode.
void selectAll()
Selects all entities.
void getSelectedIndexes(std::vector< int > &indexes) const
Returns the selected indexes (multi-selection mode)