27 #include <QHeaderView>
29 #include <QModelIndex>
30 #include <QStringList>
31 #include <QTableWidgetItem>
33 #include "../controller/AddToGroupOperation.h"
34 #include "../controller/Controller.h"
35 #include "../controller/CreateGroupOperation.h"
36 #include "../controller/DeleteGroupOperation.h"
37 #include "../controller/RemoveFromGroupOperation.h"
38 #include "../controller/SelectOperation.h"
39 #include "../scene3D/SceneObject.h"
42 #include <MemoryX/gui-plugins/SceneEditor/ui_GroupExplorerWidget.h>
46 QPointer<dialog::GroupExplorerDialog> groupEditorDialog,
51 groupEditorDialog(groupEditorDialog)
54 ui->newGroupButton->setIcon(QIcon(QString::fromStdString(
":/icons/edit-add.ico")));
57 std::shared_ptr<gui::ShortcutController> shortcutController =
control->getShortcutController();
58 QPointer<QAction> addToNewGroup(
59 new OverrideAction(
"Group Explorer: Add Selection to new group",
this));
60 this->addAction(addToNewGroup);
61 shortcutController->registerAction(addToNewGroup->text(), addToNewGroup);
66 connect(ui->newGroupButton, SIGNAL(clicked()),
this, SLOT(addSelectionToNewGroup()));
67 connect(addToNewGroup, SIGNAL(triggered()),
this, SLOT(addSelectionToNewGroup()));
70 connect(ui->groupsTableWidget,
71 SIGNAL(customContextMenuRequested(QPoint)),
73 SLOT(customContextMenuRequested(QPoint)));
76 connect(ui->groupsTableWidget,
77 SIGNAL(doubleClicked(QModelIndex)),
79 SLOT(triggerOpenGroupEditor(QModelIndex)));
80 connect(
this, SIGNAL(
groupNameClicked()),
this, SLOT(openGroupEditorDialog()));
86 SLOT(listAllGroups()));
89 connect(ui->groupsTableWidget,
90 SIGNAL(itemClicked(QTableWidgetItem*)),
92 SLOT(triggerOperation(QTableWidgetItem*)));
103 gui::GroupExplorerWidget::customContextMenuRequested(
const QPoint& position)
105 currentItem = ui->groupsTableWidget->itemAt(position);
106 QModelIndex
index = ui->groupsTableWidget->indexAt(position);
111 QMenu* menu =
new QMenu(
this);
112 menu->addAction(tr(
"Add selection to group"),
this, SLOT(addSelectionToGroup()));
113 menu->addAction(tr(
"Add group to selection"),
this, SLOT(addGroupToSelection()));
114 menu->addAction(tr(
"Remove group"),
this, SLOT(groupRemoveClicked()));
115 menu->addAction(tr(
"Show in Group Editor..."),
this, SLOT(openGroupEditorDialog()));
116 menu->popup(ui->groupsTableWidget->viewport()->mapToGlobal(position));
121 gui::GroupExplorerWidget::addSelectionToGroup()
123 if (currentItem != NULL)
125 std::string groupName = currentItem->text().toStdString();
126 createAddToGroupOperations(groupName);
131 gui::GroupExplorerWidget::addGroupToSelection()
133 if (currentItem != NULL)
135 std::string groupName = currentItem->text().toStdString();
136 std::vector<scene3D::SceneObjectPtr> objectsInGroup;
141 controller->getScene()->getGroupManager()->getGroupById(groupName)->getAllObjects();
142 std::shared_ptr<std::vector<controller::OperationPtr>> operations(
143 new std::vector<controller::OperationPtr>());
146 for (std::size_t i = 0; i < objectsInGroup.size(); ++i)
151 objectsInGroup[i]->getObjectId()));
152 operations->push_back(operation);
164 gui::GroupExplorerWidget::groupRemoveClicked()
166 if (currentItem != NULL)
170 std::string groupName = currentItem->text().toStdString();
172 if (!
controller->getScene()->getGroupManager()->getGroupById(groupName))
177 std::shared_ptr<std::vector<controller::OperationPtr>> operations(
178 new std::vector<controller::OperationPtr>());
182 ->getGroupById(groupName)
189 object->getObjectId()));
190 operations->push_back(operation);
195 operations->push_back(operation);
204 gui::GroupExplorerWidget::triggerOperation(QTableWidgetItem* item)
206 ui->groupsTableWidget->setCurrentItem(item);
207 currentItem = ui->groupsTableWidget->item(ui->groupsTableWidget->currentRow(), 0);
209 if (currentItem != NULL)
212 if (item->column() == 1)
214 emit addToGroupClicked();
217 else if (item->column() == 2)
219 emit addToSelectionClicked();
225 gui::GroupExplorerWidget::triggerOpenGroupEditor(QModelIndex
index)
227 if (
index.column() == 0)
229 emit groupNameClicked();
234 gui::GroupExplorerWidget::createAddToGroupOperations(std::string groupName)
236 std::vector<scene3D::SceneObjectPtr> selectedObjects;
240 selectedObjects =
controller->getScene()->getSelectionManager()->getAllSelected();
241 std::shared_ptr<std::vector<controller::OperationPtr>> operations(
242 new std::vector<controller::OperationPtr>());
245 for (std::size_t i = 0; i < selectedObjects.size(); ++i)
251 selectedObjects[i]->getObjectId()));
252 operations->push_back(operation);
263 gui::GroupExplorerWidget::openGroupEditorDialog()
265 if (groupEditorDialog)
267 groupEditorDialog->setCurrentGroup(currentItem->text());
268 groupEditorDialog->exec();
273 gui::GroupExplorerWidget::listAllGroups()
275 ui->groupsTableWidget->clear();
277 std::vector<scene3D::SceneGroupPtr> allGroups;
281 allGroups =
controller->getScene()->getGroupManager()->getAllGroups();
284 ui->groupsTableWidget->setColumnCount(3);
285 ui->groupsTableWidget->setRowCount(allGroups.size());
289 for (std::size_t i = 0; i < allGroups.size(); ++i)
292 QString groupName = QString::fromStdString(group->getGroupId());
293 QTableWidgetItem* item =
new QTableWidgetItem(groupName);
294 QTableWidgetItem* addIcon =
295 new QTableWidgetItem(QIcon(QString::fromStdString(
":/icons/edit-add.ico")),
"");
296 QTableWidgetItem* selectIcon =
297 new QTableWidgetItem(QIcon(QString::fromStdString(
":/images/Select.png")),
"");
298 addIcon->setToolTip(tr(
"Add selection to group"));
299 selectIcon->setToolTip(tr(
"Add group to selection"));
300 ui->groupsTableWidget->setItem(
index, 0, item);
301 ui->groupsTableWidget->setItem(
index, 1, addIcon);
302 ui->groupsTableWidget->setItem(
index, 2, selectIcon);
307 QHeaderView* headerView = ui->groupsTableWidget->horizontalHeader();
308 headerView->setResizeMode(headerView->logicalIndexAt(0, 0), QHeaderView::Stretch);
309 headerView->setResizeMode(headerView->logicalIndexAt(1, 0), QHeaderView::Fixed);
310 headerView->setResizeMode(headerView->logicalIndexAt(2, 0), QHeaderView::Fixed);
311 headerView->resizeSection(1, 20);
312 headerView->resizeSection(2, 20);
316 gui::GroupExplorerWidget::addSelectionToNewGroup()
325 }
while (
controller->getScene()->getGroupManager()->getGroupById(
326 tr(
"New Group ").toStdString() +
std::to_string(nameIndex)) != NULL);
328 std::string groupName = tr(
"New Group ").toStdString() +
std::to_string(nameIndex);
331 std::shared_ptr<std::vector<controller::OperationPtr>> operations(
332 new std::vector<controller::OperationPtr>());
335 operations->push_back(operation);
340 createAddToGroupOperations(groupName);
347 ui->retranslateUi(
this);