From 1ea0b7c853357e0dc9aac9ac3b315566f41cb925 Mon Sep 17 00:00:00 2001 From: Kay Date: Fri, 16 Sep 2022 14:31:12 +1200 Subject: [PATCH] Enable to create group from other groups --- .../model/scaffoldcreatormodel.py | 23 +++++ .../scaffoldcreator/qt/creategroupdialog.ui | 96 +++++++++++++++++++ .../scaffoldcreator/view/creategroupdialog.py | 51 ++++++++++ .../view/scaffoldcreatorwidget.py | 15 ++- .../view/ui_creategroupdialog.py | 55 +++++++++++ 5 files changed, 239 insertions(+), 1 deletion(-) create mode 100644 mapclientplugins/scaffoldcreator/qt/creategroupdialog.ui create mode 100644 mapclientplugins/scaffoldcreator/view/creategroupdialog.py create mode 100644 mapclientplugins/scaffoldcreator/view/ui_creategroupdialog.py diff --git a/mapclientplugins/scaffoldcreator/model/scaffoldcreatormodel.py b/mapclientplugins/scaffoldcreator/model/scaffoldcreatormodel.py index c3ffc64..b65d774 100644 --- a/mapclientplugins/scaffoldcreator/model/scaffoldcreatormodel.py +++ b/mapclientplugins/scaffoldcreator/model/scaffoldcreatormodel.py @@ -389,6 +389,29 @@ def setCurrentAnnotationGroupByName(self, annotationGroupName): annotationGroup = findAnnotationGroupByName(self.getAnnotationGroups(), annotationGroupName) self.setCurrentAnnotationGroup(annotationGroup) + def addGroupToCurrentAnnotationGroup(self, annotationGroup): + """ + Set annotationGroup as current and replace the selection with its objects. + :param annotationGroup: AnnotationGroup to select. + """ + fieldmodule = self._region.getFieldmodule() + with ChangeManager(fieldmodule): + scene = self._region.getScene() + selectionGroup = get_scene_selection_group(scene) + if annotationGroup: + if not selectionGroup: + selectionGroup = create_scene_selection_group(scene) + group = annotationGroup.getGroup() + group_add_group_elements(selectionGroup, group, group_get_highest_dimension(group)) + else: + if selectionGroup: + selectionGroup.clear() + scene.setSelectionField(Field()) + + def addGroupToCurrentAnnotationGroupByName(self, annotationGroupName): + annotationGroup = findAnnotationGroupByName(self.getAnnotationGroups(), annotationGroupName) + self.addGroupToCurrentAnnotationGroup(annotationGroup) + def _setScaffoldType(self, scaffoldType): if len(self._scaffoldPackages) == 1: # root scaffoldPackage diff --git a/mapclientplugins/scaffoldcreator/qt/creategroupdialog.ui b/mapclientplugins/scaffoldcreator/qt/creategroupdialog.ui new file mode 100644 index 0000000..421f71b --- /dev/null +++ b/mapclientplugins/scaffoldcreator/qt/creategroupdialog.ui @@ -0,0 +1,96 @@ + + + CreateGroupDialog + + + + 0 + 0 + 461 + 325 + + + + Create Group Dialog + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + + + QFormLayout::AllNonFixedFieldsGrow + + + + + + + + + + + + + + buttonBox + accepted() + CreateGroupDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + CreateGroupDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/mapclientplugins/scaffoldcreator/view/creategroupdialog.py b/mapclientplugins/scaffoldcreator/view/creategroupdialog.py new file mode 100644 index 0000000..2680e19 --- /dev/null +++ b/mapclientplugins/scaffoldcreator/view/creategroupdialog.py @@ -0,0 +1,51 @@ +from PySide2 import QtCore, QtWidgets +from mapclientplugins.scaffoldcreator.view.ui_creategroupdialog import Ui_CreateGroupDialog + +class CreateGroupDialog(QtWidgets.QDialog): + """ + CreateGroup dialog to present the user with the options to create group. + """ + + def __init__(self, grouplist, parent=None): + QtWidgets.QDialog.__init__(self, parent) + + self._ui = Ui_CreateGroupDialog() + self._ui.setupUi(self) + + self._groupList = grouplist + self._selectedGroupList = [] + self._parent = parent + + self._makeConnections() + + def _makeConnections(self): + # self._parent._refreshComboBoxNames( + # self._ui.annotationGroup_comboBox, + # ['-'] + [annotationGroup.getName() for annotationGroup in self._groupList], + # '-') + self._buildSelectedGroupList() + + + def _buildSelectedGroupList(self): + """ + Fill the group list widget with the list of groups + """ + if self._ui.selectedGroup_listWidget is not None: + self._ui.selectedGroup_listWidget.clear() # Must clear or holds on to steps references + for group in self._groupList: + item = QtWidgets.QListWidgetItem(group.getName()) + item.setFlags(item.flags() | QtCore.Qt.ItemIsUserCheckable) + item.setCheckState(QtCore.Qt.Unchecked) + self._ui.selectedGroup_listWidget.addItem(item) + + def getSelectedGroupList(self): + for index in range(self._ui.selectedGroup_listWidget.count()): + if self._ui.selectedGroup_listWidget.item(index).checkState() == QtCore.Qt.Checked: + self._selectedGroupList.append(self._ui.selectedGroup_listWidget.item(index).text()) + return self._selectedGroupList + + def accept(self): + """ + Override the accept method + """ + QtWidgets.QDialog.accept(self) diff --git a/mapclientplugins/scaffoldcreator/view/scaffoldcreatorwidget.py b/mapclientplugins/scaffoldcreator/view/scaffoldcreatorwidget.py index 072648a..94a9d00 100644 --- a/mapclientplugins/scaffoldcreator/view/scaffoldcreatorwidget.py +++ b/mapclientplugins/scaffoldcreator/view/scaffoldcreatorwidget.py @@ -8,6 +8,7 @@ from mapclientplugins.scaffoldcreator.view.ui_scaffoldcreatorwidget import Ui_ScaffoldCreatorWidget from mapclientplugins.scaffoldcreator.view.functionoptionsdialog import FunctionOptionsDialog +from mapclientplugins.scaffoldcreator.view.creategroupdialog import CreateGroupDialog from opencmiss.maths.vectorops import dot, magnitude, mult, normalize, sub from opencmiss.utils.zinc.field import fieldIsManagedCoordinates from scaffoldmaker.scaffoldpackage import ScaffoldPackage @@ -275,6 +276,18 @@ def _annotationGroupChanged(self, index): self._refreshCurrentAnnotationGroupSettings() def _annotationGroupNewButtonClicked(self): + reply = QtWidgets.QMessageBox.question( + self, 'Confirm action', + 'Add other groups?', + QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No, QtWidgets.QMessageBox.No) + if reply == QtWidgets.QMessageBox.Yes: + groupList = [] + annotationGroups = self._scaffold_model.getAnnotationGroups() + dlg = CreateGroupDialog(annotationGroups, self) + if dlg.exec_(): + groupList = dlg.getSelectedGroupList() + for i in groupList: + self._scaffold_model.addGroupToCurrentAnnotationGroupByName(i) self._scaffold_model.createUserAnnotationGroup() self._refreshAnnotationGroups() self._refreshCurrentAnnotationGroupSettings() @@ -297,7 +310,7 @@ def _annotationGroupRedefineButtonClicked(self): def _annotationGroupDeleteButtonClicked(self): annotationGroup = self._scaffold_model.getCurrentAnnotationGroup() - if annotationGroup: + if annotationGroup: reply = QtWidgets.QMessageBox.question( self, 'Confirm action', 'Delete annotation group \'' + annotationGroup.getName() + '\'?', diff --git a/mapclientplugins/scaffoldcreator/view/ui_creategroupdialog.py b/mapclientplugins/scaffoldcreator/view/ui_creategroupdialog.py new file mode 100644 index 0000000..9cd8258 --- /dev/null +++ b/mapclientplugins/scaffoldcreator/view/ui_creategroupdialog.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- + +################################################################################ +## Form generated from reading UI file 'creategroupdialog.ui' +## +## Created by: Qt User Interface Compiler version 5.15.2 +## +## WARNING! All changes made in this file will be lost when recompiling UI file! +################################################################################ + +from PySide2.QtCore import * +from PySide2.QtGui import * +from PySide2.QtWidgets import * + + +class Ui_CreateGroupDialog(object): + def setupUi(self, CreateGroupDialog): + if not CreateGroupDialog.objectName(): + CreateGroupDialog.setObjectName(u"CreateGroupDialog") + CreateGroupDialog.resize(461, 325) + self.gridLayout = QGridLayout(CreateGroupDialog) + self.gridLayout.setObjectName(u"gridLayout") + self.buttonBox = QDialogButtonBox(CreateGroupDialog) + self.buttonBox.setObjectName(u"buttonBox") + self.buttonBox.setOrientation(Qt.Horizontal) + self.buttonBox.setStandardButtons(QDialogButtonBox.Cancel|QDialogButtonBox.Ok) + + self.gridLayout.addWidget(self.buttonBox, 2, 0, 1, 1) + + self.configGroupBox = QGroupBox(CreateGroupDialog) + self.configGroupBox.setObjectName(u"configGroupBox") + self.formLayout = QFormLayout(self.configGroupBox) + self.formLayout.setObjectName(u"formLayout") + self.formLayout.setFieldGrowthPolicy(QFormLayout.AllNonFixedFieldsGrow) + self.selectedGroup_listWidget = QListWidget(self.configGroupBox) + self.selectedGroup_listWidget.setObjectName(u"selectedGroup_listWidget") + + self.formLayout.setWidget(1, QFormLayout.FieldRole, self.selectedGroup_listWidget) + + + self.gridLayout.addWidget(self.configGroupBox, 1, 0, 1, 1) + + + self.retranslateUi(CreateGroupDialog) + self.buttonBox.accepted.connect(CreateGroupDialog.accept) + self.buttonBox.rejected.connect(CreateGroupDialog.reject) + + QMetaObject.connectSlotsByName(CreateGroupDialog) + # setupUi + + def retranslateUi(self, CreateGroupDialog): + CreateGroupDialog.setWindowTitle(QCoreApplication.translate("CreateGroupDialog", u"Create Group Dialog", None)) + self.configGroupBox.setTitle("") + # retranslateUi +