DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
dbe::BatchChangeWidget Class Reference

#include <BatchChangeWidget.hpp>

Inheritance diagram for dbe::BatchChangeWidget:
[legend]
Collaboration diagram for dbe::BatchChangeWidget:
[legend]

Signals

void sig_batch_change_start ()
void sig_batch_change_stop (const QList< QPair< QString, QString > > &)

Public Member Functions

 ~BatchChangeWidget ()
 BatchChangeWidget (QWidget *parent=nullptr)
 BatchChangeWidget (bool ObjectsFromTable, QString ClassName, std::vector< dref > &Objects, QWidget *parent=nullptr)

Private Slots

void FillInfo (const QString &Name)
void MakeChanges ()
void FindMatching ()
void EnableCheckBox (QString RelationshipName)
void UpdateRelationshipFilter (int)
void UpdateRelationshipNewValues (int)

Private Member Functions

void SetController ()
void filter (std::vector< dref > &Objects, const QString &ClassName)
void keyPressEvent (QKeyEvent *event) override

Private Attributes

std::unique_ptr< dbe::Ui::BatchChangeWidget > ui
std::vector< dref > TableObjects
bool UseTable
bool ClassChanged
QString TableClass
std::unique_ptr< QTableWidget > m_filter_table

Detailed Description

Definition at line 22 of file BatchChangeWidget.hpp.

Constructor & Destructor Documentation

◆ ~BatchChangeWidget()

dbe::BatchChangeWidget::~BatchChangeWidget ( )
default

◆ BatchChangeWidget() [1/2]

dbe::BatchChangeWidget::BatchChangeWidget ( QWidget * parent = nullptr)
explicit

Definition at line 24 of file BatchChangeWidget.cpp.

25 : QWidget(parent)
26 , ui(new Ui::BatchChangeWidget)
27 , UseTable(false)
28 , ClassChanged(true)
29 , TableClass("")
30 , m_filter_table(nullptr)
31{
32 ui->setupUi(this);
33 ui->TitleLabel->setStyleSheet(
34 "QLabel { background-color:green; color:beige; font:bold14px; border-style:outset; border-width:2px;"
35 "border-radius:10px; border-color:beige; font:bold14px; min-width:10em; padding:6px}");
36 ui->FirstStepLabel->setStyleSheet("QLabel { color:#DB5816; font: bold 14px;}");
37 ui->SecondStepLabel->setStyleSheet("QLabel { color:#DE8A14; font: bold 14px;}");
38 ui->ThirdStepLabel->setStyleSheet("QLabel { color:#8DAA2E; font: bold 14px;}");
39 setWindowTitle("Batch Change");
40
42 ui->ClassCombo->addItems(ListOfClasses);
43 ui->ClassCombo->setEditable(true);
44 ui->ClassCombo->setEditText("Type/Select Classes");
45
46 ui->AttributeBox->setEnabled(false);
47 ui->RelationshipBox->setEnabled(false);
48 ui->NewAttributeGroupBox->setEnabled(false);
49 ui->NewRelationshipGroupBox->setEnabled(false);
50 ui->MatchButton->setEnabled(false);
51 ui->FilterUid->setText("*");
52 ui->AttributeValueFilter->setText("*");
53
55}
std::unique_ptr< dbe::Ui::BatchChangeWidget > ui
std::unique_ptr< QTableWidget > m_filter_table

◆ BatchChangeWidget() [2/2]

dbe::BatchChangeWidget::BatchChangeWidget ( bool ObjectsFromTable,
QString ClassName,
std::vector< dref > & Objects,
QWidget * parent = nullptr )

Definition at line 57 of file BatchChangeWidget.cpp.

61 : BatchChangeWidget(parent)
62{
63 ClassChanged = false;
64
65 TableObjects = Objects;
66 UseTable = ObjectsFromTable;
67 TableClass = ClassName;
68
69 ui->ClassCombo->setCurrentIndex(ui->ClassCombo->findText(TableClass));
70 ui->SubclassesCheckBox->setEnabled(false);
72
73 if (UseTable) {
74 setWindowTitle("Batch change - Table");
75 ui->FilterGroupBox->hide();
76 ui->Label1->hide();
77 ui->Label2->hide();
78 ui->FirstStepLabel->hide();
79 ui->SecondStepLabel->hide();
80 ui->ThirdStepLabel->hide();
81 ui->Line1->hide();
82 ui->Line2->hide();
83 ui->TitleLabel->setText("Batch Change of multiple objects - Table");
84 resize(540, 280);
85 }
86}
BatchChangeWidget(QWidget *parent=nullptr)
void FillInfo(const QString &Name)
std::vector< dref > TableObjects

Member Function Documentation

◆ EnableCheckBox

void dbe::BatchChangeWidget::EnableCheckBox ( QString RelationshipName)
privateslot

Definition at line 465 of file BatchChangeWidget.cpp.

466{
467 QString ClassName = ui->ClassCombo->currentText();
468 const dunedaq::conffwk::class_t& ClassInfo =
469 dbe::config::api::info::onclass::definition(ClassName.toStdString(), false);
470 std::vector<dunedaq::conffwk::relationship_t> RelationshipList = ClassInfo.p_relationships;
471
472 for (dunedaq::conffwk::relationship_t& i : RelationshipList) {
473 if (i.p_name == RelationshipName.toStdString()) {
474 if ((i.p_cardinality == dunedaq::conffwk::zero_or_many) || (i.p_cardinality == dunedaq::conffwk::one_or_many)) {
475 ui->AddCheckBox->setEnabled(true);
476 } else {
477 ui->AddCheckBox->setEnabled(false);
478 }
479
480 break;
481 }
482 }
483}
static dunedaq::conffwk::class_t definition(std::string const &cn, bool direct_only)
const std::vector< relationship_t > p_relationships
Definition Schema.hpp:162

◆ FillInfo

void dbe::BatchChangeWidget::FillInfo ( const QString & Name)
privateslot

Definition at line 213 of file BatchChangeWidget.cpp.

214{
215 ui->AttributeBox->setEnabled(false);
216 ui->RelationshipBox->setEnabled(false);
217 ui->NewAttributeGroupBox->setEnabled(false);
218 ui->NewRelationshipGroupBox->setEnabled(false);
219
220 const dunedaq::conffwk::class_t& ClassInfo = dbe::config::api::info::onclass::definition(Name.toStdString(), false);
221 const std::vector<dunedaq::conffwk::attribute_t> AttributeList = ClassInfo.p_attributes;
222 const std::vector<dunedaq::conffwk::relationship_t> RelationshipList = ClassInfo.p_relationships;
223
224 QStringList ValueList;
225
226 for (dunedaq::conffwk::attribute_t Attribute : AttributeList) {
227 ValueList.append(QString(Attribute.p_name.c_str()));
228 }
229
230 ui->AttributeComboBox->clear();
231 ui->NewAttributeComboBox->clear();
232 ui->AttributeComboBox->addItems(ValueList);
233 ui->NewAttributeComboBox->addItems(ValueList);
234
235 if (!AttributeList.empty() && !UseTable) {
236 ui->AttributeBox->setEnabled(true);
237 ui->NewAttributeGroupBox->setEnabled(true);
238 ui->MatchButton->setEnabled(true);
239 }
240
241 if (!AttributeList.empty() && UseTable) {
242 ui->NewAttributeGroupBox->setEnabled(true);
243 }
244
245 ValueList.clear();
246
247 for (dunedaq::conffwk::relationship_t Relationship : RelationshipList) {
248 ValueList.append(QString(Relationship.p_name.c_str()));
249 }
250
251 ui->RelationshipComboBox->clear();
252 ui->NewRelationshipComboBox->clear();
253 ui->RelationshipComboBox->addItems(ValueList);
254 ui->NewRelationshipComboBox->addItems(ValueList);
255
256 if (!RelationshipList.empty() && !UseTable) {
257 ui->RelationshipBox->setEnabled(true);
258 ui->NewRelationshipGroupBox->setEnabled(true);
259 ui->MatchButton->setEnabled(true);
260 }
261
262 if (!RelationshipList.empty() && UseTable) {
263 ui->NewRelationshipGroupBox->setEnabled(true);
264 }
265
266 if (!UseTable) {
269 ui->RelationshipValueFilter->setCurrentIndex(0);
270 ui->RelationshipEdit->setCurrentIndex(-1);
271 } else {
273 ui->RelationshipEdit->setCurrentIndex(-1);
274 }
275
276 if (ClassChanged) {
277 UseTable = false;
278 }
279
280 ClassChanged = true;
281}
const std::vector< attribute_t > p_attributes
Definition Schema.hpp:161

◆ filter()

void dbe::BatchChangeWidget::filter ( std::vector< dref > & Objects,
const QString & ClassName )
private

Filtering Attributes

Definition at line 126 of file BatchChangeWidget.cpp.

127{
128
129 dunedaq::conffwk::class_t const& cinfo = dbe::config::api::info::onclass::definition(cname.toStdString(), false);
130 std::vector<dunedaq::conffwk::attribute_t> const& attributes = cinfo.p_attributes;
131 std::vector<dunedaq::conffwk::relationship_t> const& relations = cinfo.p_relationships;
132
133 // Filtering UID
134 std::vector<dref> filtered;
135
136 if (!ui->FilterUid->text().isEmpty()) {
137 QRegExp uidfilter(ui->FilterUid->text());
138 uidfilter.setPatternSyntax(QRegExp::Wildcard);
139
140 for (dbe::dref const& it : objs) {
141
142 if (uidfilter.exactMatch(QString::fromStdString(it.ref().UID()))) {
143 filtered.push_back(it);
144 }
145 }
146
147 objs = filtered;
148 filtered.clear();
149 }
150
152 QRegExp attribute_filter(ui->AttributeValueFilter->text());
153 attribute_filter.setPatternSyntax(QRegExp::Wildcard);
154
155 std::string selected_attribute_name = ui->AttributeComboBox->currentText().toStdString();
156
157 std::vector<dunedaq::conffwk::attribute_t>::const_iterator attrdef =
158 std::find_if(std::begin(attributes),
159 std::end(attributes),
160 [&selected_attribute_name](dunedaq::conffwk::attribute_t const& attr) {
161 return attr.p_name == selected_attribute_name;
162 });
163
164 if (attrdef != std::end(attributes)) {
165 for (dbe::dref const& it : objs) {
166 QStringList values{ dbe::config::api::get::attribute::list<QStringList>(it.ref(), *attrdef) };
167
168 for (QString& v : values)
169 if (attribute_filter.exactMatch(v)) {
170 filtered.push_back(it);
171 break;
172 }
173 }
174 }
175
176 objs = filtered;
177 filtered.clear();
178
179 // Filter on Relationship
180
181 std::string selected_relation_name = ui->RelationshipComboBox->currentText().toStdString();
182
183 std::vector<dunedaq::conffwk::relationship_t>::const_iterator relationdef = std::find_if(
184 std::begin(relations), std::end(relations), [&selected_relation_name](dunedaq::conffwk::relationship_t const& rel) {
185 return rel.p_name == selected_relation_name;
186 });
187
188 if (relationdef != std::end(relations)) {
189 QRegExp relation_filter(ui->RelationshipValueFilter->currentText());
190 relation_filter.setPatternSyntax(QRegExp::Wildcard);
191
192 for (dbe::dref const& it : objs) {
193 QStringList ValueList{ dbegraph::linked::through::relation<QStringList>(it.ref(), *relationdef) };
194
195 if (ValueList.isEmpty() and
196 (ui->RelationshipValueFilter->currentText() == "*" or ui->RelationshipValueFilter->currentText() == "")) {
197 filtered.push_back(it);
198 } else {
199 for (QString const& v : ValueList)
200 if (relation_filter.exactMatch(v)) {
201 filtered.push_back(it);
202 break;
203 }
204 }
205 }
206 }
207
208 objs = filtered;
209 filtered.clear();
210}
static T list(dbe::inner::configobject::tref obj, dunedaq::conffwk::attribute_t const &attr)
QStringList relation< QStringList >(tref item, dunedaq::conffwk::relationship_t const &r)
std::vector< T > attributes(tref const &item)
std::vector< T > relations(tref const &item)
config_object_description dref

◆ FindMatching

void dbe::BatchChangeWidget::FindMatching ( )
privateslot

Definition at line 377 of file BatchChangeWidget.cpp.

378{
379 QString ClassName = ui->ClassCombo->currentText();
380 bool SubClasses = ui->SubclassesCheckBox->isChecked();
381
382 std::vector<tref> const& tmprefs = dbe::config::api::info::onclass::objects(ClassName.toStdString(), SubClasses);
383
384 std::vector<dref> candidates;
385 std::copy(tmprefs.begin(), tmprefs.end(), std::back_inserter(candidates));
386
387 if (!candidates.empty()) {
388 filter(candidates, ClassName);
389 }
390
391 if (candidates.empty()) {
392 QMessageBox::information(this, tr("Message"), tr("No objects match filter!"));
393 } else {
394 int NumberOfColumns = 1;
395 bool AttributeEnabled = false;
396 bool RelationshipEnabled = false;
397
398 if (ui->AttributeComboBox->isEnabled()) {
399 AttributeEnabled = true;
400 NumberOfColumns++;
401 }
402
403 if (ui->RelationshipComboBox->isEnabled()) {
404 RelationshipEnabled = true;
405 NumberOfColumns++;
406 }
407
408 m_filter_table = std::unique_ptr<QTableWidget>(new QTableWidget());
409 m_filter_table->setWindowTitle(tr("Objects matching filter"));
410 m_filter_table->setColumnCount(NumberOfColumns);
411 m_filter_table->setRowCount(candidates.size());
412
413 for (size_t i = 0; i < candidates.size(); i++) {
414 QTableWidgetItem* AttributeValue;
415 QTableWidgetItem* RelationshipValue;
416
417 QTableWidgetItem* ObjectUid = new QTableWidgetItem(
418 tr("%1@%2").arg(candidates.at(i).UID().c_str()).arg(candidates.at(i).class_name().c_str()));
419 m_filter_table->setItem(i, 0, ObjectUid);
420
421 if (AttributeEnabled) {
422 dunedaq::conffwk::attribute_t Attribute =
423 dbe::config::api::info::attributematch(ui->AttributeComboBox->currentText(), ClassName);
424
425 QStringList AttributeValueList{ dbe::config::api::get::attribute::list<QStringList>(candidates.at(i).ref(),
426 Attribute) };
427
428 AttributeValue = new QTableWidgetItem(AttributeValueList.join(" "));
429 m_filter_table->setItem(i, 1, AttributeValue);
430 }
431
432 if (RelationshipEnabled) {
433 dunedaq::conffwk::relationship_t Relationship =
434 config::api::info::relation::match(ui->RelationshipComboBox->currentText(), ClassName);
435
436 QStringList RelationshipList{ dbegraph::linked::through::relation<QStringList>(candidates.at(i).ref(),
437 Relationship) };
438
439 RelationshipValue = new QTableWidgetItem(RelationshipList.join(" "));
440 m_filter_table->setItem(i, 2, RelationshipValue);
441 }
442 }
443
444 QStringList Headers;
445 Headers << "Object Id";
446
447 if (AttributeEnabled) {
448 Headers << ui->AttributeComboBox->currentText();
449 }
450
451 if (RelationshipEnabled) {
452 Headers << ui->RelationshipComboBox->currentText();
453 }
454
455 m_filter_table->setHorizontalHeaderLabels(Headers);
456
457 QHeaderView* HeaderView = m_filter_table->horizontalHeader();
458 HeaderView->setStretchLastSection(true);
459 m_filter_table->resize(500, 300);
460 m_filter_table->show();
461 }
462}
void filter(std::vector< dref > &Objects, const QString &ClassName)
static std::vector< dbe::inner::configobject::tref > objects(std::string const &cname, bool const keep_inherited=true)
dunedaq::conffwk::relationship_t match(T const &, T const &)
dunedaq::conffwk::attribute_t attributematch(QString const &, QString const &)

◆ keyPressEvent()

void dbe::BatchChangeWidget::keyPressEvent ( QKeyEvent * event)
overrideprivate

Definition at line 117 of file BatchChangeWidget.cpp.

118{
119 if (event->key() == Qt::Key_Escape) {
120 close();
121 }
122 QWidget::keyPressEvent(event);
123}

◆ MakeChanges

void dbe::BatchChangeWidget::MakeChanges ( )
privateslot

Definition at line 284 of file BatchChangeWidget.cpp.

285{
286 std::vector<dref> Objects;
287
288 BOOST_SCOPE_EXIT(&Objects, this_)
289 {
290 QList<QPair<QString, QString>> objs;
291 for (const auto& o : Objects) {
292 objs.append(QPair<QString, QString>(QString::fromStdString(o.class_name()), QString::fromStdString(o.UID())));
293 }
294
295 this_->emit sig_batch_change_stop(objs);
296
297 QApplication::restoreOverrideCursor();
298 this_->ui->ChangeButton->setEnabled(true);
299 confaccessor::ref().blockSignals(false);
300 }
301 BOOST_SCOPE_EXIT_END
302
303 ui->ChangeButton->setEnabled(false);
304 QApplication::setOverrideCursor(Qt::WaitCursor);
305 confaccessor::ref().blockSignals(true);
306
307 bool SubClasses = ui->SubclassesCheckBox->isChecked();
308 QString ClassName = ui->ClassCombo->currentText();
309
310 std::unique_ptr<dbe::interface::messenger::batch_guard> batchmode(interface::messenger::qt::batchmode());
311
313
314 if (not UseTable) {
315 std::vector<tref> const& tmprefs = dbe::config::api::info::onclass::objects(ClassName.toStdString(), SubClasses);
316
317 std::copy(tmprefs.begin(), tmprefs.end(), std::back_inserter(Objects));
318
319 if (not Objects.empty()) {
320 filter(Objects, ClassName);
321 }
322 } else {
323 Objects = TableObjects;
324 }
325
326 if (Objects.empty())
327 QMessageBox::information(this, tr("Message"), tr("No objects match filter!"));
328 else {
329 const dunedaq::conffwk::class_t& ClassInfo =
330 dbe::config::api::info::onclass::definition(ClassName.toStdString(), false);
331 const std::vector<dunedaq::conffwk::attribute_t> AttributeList = ClassInfo.p_attributes;
332 const std::vector<dunedaq::conffwk::relationship_t> RelationshipList = ClassInfo.p_relationships;
333 dunedaq::conffwk::attribute_t AttributeChange;
334 dunedaq::conffwk::relationship_t RelationshipChange;
335
336 for (dunedaq::conffwk::attribute_t i : AttributeList)
337 if (i.p_name == ui->NewAttributeComboBox->currentText().toStdString()) {
338 AttributeChange = i;
339 break;
340 }
341
342 for (dunedaq::conffwk::relationship_t i : RelationshipList)
343 if (i.p_name == ui->NewRelationshipComboBox->currentText().toStdString()) {
344 RelationshipChange = i;
345 break;
346 }
347
348 QStringList AttributeChangeList;
349
350 if (!ui->AttributeEdit->text().isEmpty())
351 AttributeChangeList << ui->AttributeEdit->text();
352
353 for (auto objects_iter = Objects.begin(); objects_iter != Objects.end(); ++objects_iter) {
354 tref Object = objects_iter->ref();
355
356 QStringList RelationshipChangeList;
357
358 if (ui->ChangeAtrributeCheckBox->isChecked()) {
359 if (!AttributeChangeList.isEmpty()) {
360 dbe::config::api::set::attribute(Object, AttributeChange, AttributeChangeList);
361 }
362 }
363
364 if (ui->ChangeRelationshipCheckBox->isChecked()) {
365 if (ui->AddCheckBox->isChecked()) {
366 RelationshipChangeList = dbegraph::linked::through::relation<QStringList>(Object, RelationshipChange);
367 }
368
369 RelationshipChangeList << ui->RelationshipEdit->currentText();
370 dbe::config::api::set::relation(Object, RelationshipChange, RelationshipChangeList);
371 }
372 }
373 }
374}
void sig_batch_change_stop(const QList< QPair< QString, QString > > &)
static confaccessor & ref()
dunedaq::conffwk::ConfigObject & ref(bool check_null=true) const
static std::unique_ptr< batch_guard > batchmode()
void relation(dbe::inner::configobject::tref src, dunedaq::conffwk::relationship_t const &edge, QStringList const &targets)
void attribute(dbe::inner::configobject::tref objectref, dunedaq::conffwk::attribute_t const &attribute_info, QStringList const &attribute_values)
inner::configobject::tref tref
Definition tref.hpp:36

◆ SetController()

void dbe::BatchChangeWidget::SetController ( )
private

Definition at line 89 of file BatchChangeWidget.cpp.

90{
91 connect(ui->ClassCombo, SIGNAL(activated(QString)), this, SLOT(FillInfo(const QString&)));
92
93 connect(ui->ChangeButton, SIGNAL(clicked()), this, SLOT(MakeChanges()));
94
95 connect(ui->MatchButton, SIGNAL(clicked()), this, SLOT(FindMatching()));
96
97 connect(ui->NewRelationshipComboBox, SIGNAL(activated(QString)), this, SLOT(EnableCheckBox(QString)));
98 connect(ui->CancelButton, SIGNAL(clicked()), this, SLOT(close()));
99
100 connect(ui->RelationshipComboBox, SIGNAL(activated(int)), this, SLOT(UpdateRelationshipFilter(int)));
101
102 connect(ui->NewRelationshipComboBox, SIGNAL(activated(int)), this, SLOT(UpdateRelationshipNewValues(int)));
103
104 MainWindow* mainwin = MainWindow::findthis();
105
106 if (mainwin != nullptr) {
107 connect(this, SIGNAL(sig_batch_change_start()), mainwin, SLOT(slot_batch_change_start()), Qt::UniqueConnection);
108 connect(this,
109 SIGNAL(sig_batch_change_stop(const QList<QPair<QString, QString>>&)),
110 mainwin,
111 SLOT(slot_batch_change_stop(const QList<QPair<QString, QString>>&)),
112 Qt::UniqueConnection);
113 }
114}
void EnableCheckBox(QString RelationshipName)
static MainWindow * findthis()

◆ sig_batch_change_start

void dbe::BatchChangeWidget::sig_batch_change_start ( )
signal

◆ sig_batch_change_stop

void dbe::BatchChangeWidget::sig_batch_change_stop ( const QList< QPair< QString, QString > > & )
signal

◆ UpdateRelationshipFilter

void dbe::BatchChangeWidget::UpdateRelationshipFilter ( int )
privateslot

Definition at line 486 of file BatchChangeWidget.cpp.

487{
488 ui->RelationshipValueFilter->clear();
489 ui->RelationshipValueFilter->addItem("*");
490
491 QString ClassName = ui->ClassCombo->currentText();
492 QString RelationshipName = ui->RelationshipComboBox->currentText();
493
494 const dunedaq::conffwk::class_t& ClassInfo =
495 dbe::config::api::info::onclass::definition(ClassName.toStdString(), false);
496 std::vector<dunedaq::conffwk::relationship_t> RelationshipList = ClassInfo.p_relationships;
497
498 if (RelationshipList.size() != 0) {
499 dunedaq::conffwk::relationship_t ChosenRelationship;
500
501 for (dunedaq::conffwk::relationship_t& i : RelationshipList) {
502 if (i.p_name == RelationshipName.toStdString()) {
503 ChosenRelationship = i;
504 break;
505 }
506 }
507
508 std::vector<tref> const& Objects = dbe::config::api::info::onclass::objects(ChosenRelationship.p_type);
509
510 QStringList ObjectsUid;
511
512 for (tref const& Object : Objects) {
513 ObjectsUid.append(Object.UID().c_str());
514 }
515
516 ui->RelationshipValueFilter->addItems(ObjectsUid);
517 }
518}

◆ UpdateRelationshipNewValues

void dbe::BatchChangeWidget::UpdateRelationshipNewValues ( int )
privateslot

Definition at line 521 of file BatchChangeWidget.cpp.

522{
523 ui->RelationshipEdit->clear();
524
525 QString ClassName = ui->ClassCombo->currentText();
526 QString RelationshipName = ui->NewRelationshipComboBox->currentText();
527
528 const dunedaq::conffwk::class_t& ClassInfo =
529 dbe::config::api::info::onclass::definition(ClassName.toStdString(), false);
530 std::vector<dunedaq::conffwk::relationship_t> RelationshipList = ClassInfo.p_relationships;
531
532 if (RelationshipList.size() != 0) {
533 dunedaq::conffwk::relationship_t ChosenRelationship;
534
535 for (dunedaq::conffwk::relationship_t& i : RelationshipList) {
536 if (i.p_name == RelationshipName.toStdString()) {
537 ChosenRelationship = i;
538 break;
539 }
540 }
541
542 std::vector<tref> const& Objects = dbe::config::api::info::onclass::objects(ChosenRelationship.p_type);
543
544 QStringList ObjectsUid;
545
546 for (tref const& Object : Objects) {
547 ObjectsUid.append(Object.UID().c_str());
548 }
549
550 ui->RelationshipEdit->addItems(ObjectsUid);
551 }
552}

Member Data Documentation

◆ ClassChanged

bool dbe::BatchChangeWidget::ClassChanged
private

Definition at line 37 of file BatchChangeWidget.hpp.

◆ m_filter_table

std::unique_ptr<QTableWidget> dbe::BatchChangeWidget::m_filter_table
private

Definition at line 40 of file BatchChangeWidget.hpp.

◆ TableClass

QString dbe::BatchChangeWidget::TableClass
private

Definition at line 39 of file BatchChangeWidget.hpp.

◆ TableObjects

std::vector<dref> dbe::BatchChangeWidget::TableObjects
private

Definition at line 35 of file BatchChangeWidget.hpp.

◆ ui

std::unique_ptr<dbe::Ui::BatchChangeWidget> dbe::BatchChangeWidget::ui
private

Definition at line 34 of file BatchChangeWidget.hpp.

◆ UseTable

bool dbe::BatchChangeWidget::UseTable
private

Definition at line 37 of file BatchChangeWidget.hpp.


The documentation for this class was generated from the following files: