26 #include <QInputDialog>
28 #include <QStandardItem>
30 #include "../../controller/CreateGroupOperation.h"
31 #include "../../controller/DeleteGroupOperation.h"
32 #include "../../controller/RemoveFromGroupOperation.h"
33 #include "../../controller/RenameGroupOperation.h"
34 #include "../../scene3D/SceneGroupManager.h"
35 #include <Inventor/SbRotation.h>
36 #include <Inventor/nodes/SoCone.h>
37 #include <Inventor/nodes/SoSeparator.h>
38 #include <MemoryX/gui-plugins/SceneEditor/ui_GroupExplorerDialog.h>
46 viewer.reset(
new SoQtExaminerViewer(ui->viewInSceneWidget));
47 viewer->setDecoration(
false);
48 viewer->setHeadlight(
true);
49 viewer->setBackgroundColor(SbColor(100 / 255.0f, 100 / 255.0f, 100 / 255.0f));
50 viewer->setSceneGraph(
new SoSeparator());
52 connect(ui->buttonBox, SIGNAL(rejected()),
this, SLOT(close()));
54 ui->groupListWidget, SIGNAL(clicked(QModelIndex)),
this, SLOT(groupClicked(QModelIndex)));
56 ui->objectListWidget, SIGNAL(clicked(QModelIndex)),
this, SLOT(objectClicked(QModelIndex)));
57 connect(ui->objectListWidget, SIGNAL(itemSelectionChanged()),
this, SLOT(checkButtons()));
58 connect(ui->addGroupButton, SIGNAL(clicked()),
this, SLOT(groupAddClicked()));
59 connect(ui->deleteGroupButton, SIGNAL(clicked()),
this, SLOT(groupRemoveClicked()));
60 connect(ui->changeNameButton, SIGNAL(clicked()),
this, SLOT(groupRenameClicked()));
61 connect(ui->deleteObjectButton, SIGNAL(clicked()),
this, SLOT(objectRemoveClicked()));
62 connect(ui->groupNameLineEdit, SIGNAL(textChanged(QString)),
this, SLOT(checkButtons()));
72 gui::dialog::GroupExplorerDialog::showEvent(QShowEvent* event)
81 gui::dialog::GroupExplorerDialog::groupClicked(QModelIndex
index)
83 if (ui->groupListWidget->currentItem()->text() != activeGroup)
88 activeGroup = ui->groupListWidget->currentItem()->text();
96 gui::dialog::GroupExplorerDialog::objectClicked(QModelIndex
index)
98 activeObject = ui->objectListWidget->currentItem()->toolTip();
105 gui::dialog::GroupExplorerDialog::groupAddClicked()
114 }
while (
controller->getScene()->getGroupManager()->getGroupById(
115 tr(
"New Group ").toStdString() +
std::to_string(nameIndex)) != NULL);
117 std::string groupName = tr(
"New Group ").toStdString() +
std::to_string(nameIndex);
119 std::shared_ptr<std::vector<controller::OperationPtr>> operations(
120 new std::vector<controller::OperationPtr>());
124 operations->push_back(operation);
129 activeGroup = QString::fromStdString(groupName);
137 ui->groupNameLineEdit->setFocus();
138 ui->groupNameLineEdit->selectAll();
139 ui->changeNameButton->setDefault(
true);
144 gui::dialog::GroupExplorerDialog::groupRemoveClicked()
148 if (!
controller->getScene()->getGroupManager()->getGroupById(activeGroup.toStdString()))
153 std::shared_ptr<std::vector<controller::OperationPtr>> operations(
154 new std::vector<controller::OperationPtr>());
158 ->getGroupById(activeGroup.toStdString())
164 activeGroup.toStdString(),
165 object->getObjectId()));
166 operations->push_back(operation);
171 operations->push_back(operation);
187 gui::dialog::GroupExplorerDialog::objectRemoveClicked()
191 QList<QListWidgetItem*> allItemsToDelete = ui->objectListWidget->selectedItems();
192 std::shared_ptr<std::vector<controller::OperationPtr>> operations(
193 new std::vector<controller::OperationPtr>());
195 for (QList<QListWidgetItem*>::iterator it = allItemsToDelete.begin();
196 it != allItemsToDelete.end();
202 activeGroup.toStdString(),
203 (*it)->toolTip().toStdString()));
204 operations->push_back(operation);
220 gui::dialog::GroupExplorerDialog::groupRenameClicked()
224 std::shared_ptr<std::vector<controller::OperationPtr>> operations(
225 new std::vector<controller::OperationPtr>());
230 activeGroup.toStdString(),
231 ui->groupNameLineEdit->text().toStdString()));
232 operations->push_back(operation);
237 activeGroup = ui->groupNameLineEdit->text();
249 if (
controller->getScene()->getGroupManager()->getGroupById(groupId.toStdString()))
251 activeGroup = groupId;
260 ui->groupListWidget->setFocus();
265 gui::dialog::GroupExplorerDialog::reloadGroups()
270 ui->groupListWidget->clear();
271 allGroups =
controller->getScene()->getGroupManager()->getAllGroups();
273 for (std::vector<scene3D::SceneGroupPtr>::iterator it = allGroups.begin();
274 it != allGroups.end();
277 ui->groupListWidget->addItem(QString::fromStdString((*it)->getGroupId()));
280 if (!activeGroup.isNull() && !activeGroup.isEmpty())
283 ui->groupListWidget->setCurrentItem(
284 ui->groupListWidget->findItems(activeGroup, Qt::MatchFixedString).first());
290 gui::dialog::GroupExplorerDialog::reloadObjects()
295 ui->objectListWidget->clear();
297 controller->getScene()->getGroupManager()->getGroupById(activeGroup.toStdString());
299 if (clickedGroup != NULL)
301 std::vector<scene3D::SceneObjectPtr> allObjects = clickedGroup->getAllObjects();
303 for (std::vector<scene3D::SceneObjectPtr>::iterator it = allObjects.begin();
304 it != allObjects.end();
307 std::string objectId = (*it)->getObjectId();
308 std::string classId = (*it)->getClassId();
309 QListWidgetItem* item =
new QListWidgetItem(QString::fromStdString(classId));
310 item->setToolTip(QString::fromStdString(objectId));
311 ui->objectListWidget->insertItem(ui->objectListWidget->count(), item);
315 ui->groupNameLineEdit->setText(activeGroup);
320 gui::dialog::GroupExplorerDialog::reloadProperties()
325 ui->propertiesTableWidget->clear();
326 ui->propertiesTableWidget->reset();
327 viewer->setSceneGraph(
new SoSeparator());
329 controller->getScene()->getObjectManager()->getObjectById(activeObject.toStdString());
333 std::map<std::string, std::string> attributes = sceneObject->getAllAttributes();
335 ui->propertiesTableWidget->setRowCount(3);
336 ui->propertiesTableWidget->setItem(0, 0,
new QTableWidgetItem(tr(
"Object ID")));
337 ui->propertiesTableWidget->setItem(
338 0, 1,
new QTableWidgetItem(QString::fromStdString(sceneObject->getObjectId())));
339 ui->propertiesTableWidget->setItem(1, 0,
new QTableWidgetItem(tr(
"Class ID")));
340 ui->propertiesTableWidget->setItem(
341 1, 1,
new QTableWidgetItem(QString::fromStdString(sceneObject->getClassId())));
342 ui->propertiesTableWidget->setItem(2, 0,
new QTableWidgetItem(tr(
"Collection ID")));
343 ui->propertiesTableWidget->setItem(
344 2, 1,
new QTableWidgetItem(QString::fromStdString(sceneObject->getCollection())));
349 for (std::map<std::string, std::string>::iterator it = attributes.begin();
350 it != attributes.end();
353 row = ui->propertiesTableWidget->rowCount();
354 QTableWidgetItem* key =
new QTableWidgetItem(QString::fromStdString(it->first));
355 QTableWidgetItem*
value =
new QTableWidgetItem(QString::fromStdString(it->second));
356 ui->propertiesTableWidget->insertRow(row);
357 ui->propertiesTableWidget->setItem(row, 0, key);
358 ui->propertiesTableWidget->setItem(row, 1,
value);
359 ui->propertiesTableWidget->resizeRowToContents(row);
362 ui->propertiesTableWidget->resizeColumnToContents(1);
366 ->getPriorKnowlegdeController()
367 ->getObjectClassPtr(sceneObject->getClassId(), sceneObject->getCollection()));
373 gui::dialog::GroupExplorerDialog::checkButtons()
377 ui->changeNameButton->setEnabled(
378 !(ui->groupNameLineEdit->text().isEmpty() ||
379 ui->groupNameLineEdit->text() == activeGroup ||
380 controller->getScene()->getGroupManager()->getGroupById(
381 ui->groupNameLineEdit->text().toStdString()) != NULL));
382 ui->deleteGroupButton->setEnabled(activeGroup !=
"");
383 ui->deleteObjectButton->setEnabled(activeObject !=
"");
384 ui->groupNameLineEdit->setEnabled(activeGroup !=
"");
394 SoNode* visualisation =
395 controller->getMemoryXController()->getPriorKnowlegdeController()->getCoinVisualisation(
400 controller->getScene()->getPreviewGenerator()->createAnimatedPreview(visualisation);
402 viewer->setSceneGraph(root);
403 viewer->getCamera()->viewAll(root, viewer->getViewportRegion());
410 this->ui->retranslateUi(
this);