SLOT(onContextMenuCommand(const QString&, bool)));
myViewerProxy = new XGUI_ViewerProxy(this);
- connect(myViewerProxy, SIGNAL(selectionChanged()),
- myActionsMgr, SLOT(updateOnViewSelection()));
+ //connect(myViewerProxy, SIGNAL(selectionChanged()),
+ // myActionsMgr, SLOT(updateOnViewSelection()));
myModuleConnector = new XGUI_ModuleConnector(this);
!aWidget->getDefaultValue().empty() &&
!aWidget->isComputedDefault();
aWidget->setFeature(aFeature, isStoreValue, isUpdateFlushed);
+ if (!isStoreValue)
+ aWidget->restoreValue();
aWidget->enableFocusProcessing();
}
ModuleBase_Tools::flushUpdated(aFeature);
setViewerSelectionMode(-1);
} else if (theId == "SHOW_RESULTS_CMD") {
highlightResults(aObjects);
+ } else if (theId == "SHOW_FEATURE_CMD") {
+ highlightFeature(aObjects);
}
}
// 3. delete objects
std::set<FeaturePtr> anIgnoredFeatures;
std::set<FeaturePtr> aDirectRefFeatures, aIndirectRefFeatures;
- findReferences(anObjects, aDirectRefFeatures, aIndirectRefFeatures);
+ ModuleBase_Tools::findReferences(anObjects, aDirectRefFeatures, aIndirectRefFeatures);
bool doDeleteReferences = true;
- if (isDeleteFeatureWithReferences(anObjects, aDirectRefFeatures, aIndirectRefFeatures,
- desktop(), doDeleteReferences)) {
+ if (ModuleBase_Tools::isDeleteFeatureWithReferences(anObjects, aDirectRefFeatures,
+ aIndirectRefFeatures, desktop(), doDeleteReferences)) {
// start operation
- QString aDescription = contextMenuMgr()->action("DELETE_CMD")->text();
- aDescription += " " + aDescription.arg(XGUI_Tools::unionOfObjectNames(anObjects, ", "));
+ QString aDescription = contextMenuMgr()->action("DELETE_CMD")->text() + " %1";
+ aDescription = aDescription.arg(XGUI_Tools::unionOfObjectNames(anObjects, ", "));
ModuleBase_OperationAction* anOpAction = new ModuleBase_OperationAction(aDescription, module());
operationMgr()->startOperation(anOpAction);
if (aFeature.get()) {
std::set<FeaturePtr> alreadyProcessed;
aDirectRefFeatures.clear();
- XGUI_Tools::refsDirectToFeatureInAllDocuments(aFeature, aFeature, aFeatures,
+ ModuleBase_Tools::refsDirectToFeatureInAllDocuments(aFeature, aFeature, aFeatures,
aDirectRefFeatures, alreadyProcessed);
if (aDirectRefFeatures.empty() && !anUnusedObjects.contains(aFeature))
anUnusedObjects.append(aFeature);
}
//**************************************************************
-void XGUI_Workshop::findReferences(const QObjectPtrList& theList,
- std::set<FeaturePtr>& aDirectRefFeatures,
- std::set<FeaturePtr>& aIndirectRefFeatures)
-{
- foreach (ObjectPtr aDeletedObj, theList) {
- std::set<FeaturePtr> alreadyProcessed;
- XGUI_Tools::refsToFeatureInAllDocuments(aDeletedObj, aDeletedObj, theList, aDirectRefFeatures,
- aIndirectRefFeatures, alreadyProcessed);
- std::set<FeaturePtr> aDifference;
- std::set_difference(aIndirectRefFeatures.begin(), aIndirectRefFeatures.end(),
- aDirectRefFeatures.begin(), aDirectRefFeatures.end(),
- std::inserter(aDifference, aDifference.begin()));
- aIndirectRefFeatures = aDifference;
- }
-}
-
-bool XGUI_Workshop::isDeleteFeatureWithReferences(const QObjectPtrList& theList,
- const std::set<FeaturePtr>& aDirectRefFeatures,
- const std::set<FeaturePtr>& aIndirectRefFeatures,
- QWidget* theParent,
- bool& doDeleteReferences)
-{
- doDeleteReferences = true;
-
- QString aDirectNames, aIndirectNames;
- if (!aDirectRefFeatures.empty()) {
- QStringList aDirectRefNames;
- foreach (const FeaturePtr& aFeature, aDirectRefFeatures)
- aDirectRefNames.append(aFeature->name().c_str());
- aDirectNames = aDirectRefNames.join(", ");
-
- QStringList aIndirectRefNames;
- foreach (const FeaturePtr& aFeature, aIndirectRefFeatures)
- aIndirectRefNames.append(aFeature->name().c_str());
- aIndirectNames = aIndirectRefNames.join(", ");
- }
-
- bool aCanReplaceParameters = !aDirectRefFeatures.empty();
- QStringList aPartFeatureNames;
- foreach (ObjectPtr aObj, theList) {
- FeaturePtr aFeature = ModelAPI_Feature::feature(aObj);
- // invalid feature data means that the feature is already removed in model,
- // we needn't process it. E.g. delete of feature from create operation. The operation abort
- // will delete the operation
- if (!aFeature->data()->isValid())
- continue;
- ResultPtr aFirstResult = aFeature->firstResult();
- if (!aFirstResult.get())
- continue;
- std::string aResultGroupName = aFirstResult->groupName();
- if (aResultGroupName == ModelAPI_ResultPart::group())
- aPartFeatureNames.append(aFeature->name().c_str());
-
- if (aCanReplaceParameters && aResultGroupName != ModelAPI_ResultParameter::group())
- aCanReplaceParameters = false;
- }
- QString aPartNames = aPartFeatureNames.join(", ");
-
- QMessageBox aMessageBox(theParent);
- aMessageBox.setWindowTitle(tr("Delete features"));
- aMessageBox.setIcon(QMessageBox::Warning);
- aMessageBox.setStandardButtons(QMessageBox::No | QMessageBox::Yes);
- aMessageBox.setDefaultButton(QMessageBox::No);
-
- QString aText;
- if (!aDirectNames.isEmpty() || !aIndirectNames.isEmpty()) {
- if (aCanReplaceParameters) {
- aText = QString(tr("Selected parameters are used in the following features: %1.\nThese features will be deleted.\nOr parameters could be replaced by their values.\n")
- .arg(aDirectNames));
- if (!aIndirectNames.isEmpty())
- aText += QString(tr("(Also these features will be deleted: %1)\n")).arg(aIndirectNames);
- QPushButton *aReplaceButton = aMessageBox.addButton(tr("Replace"), QMessageBox::ActionRole);
- } else {
- aText = QString(tr("Selected features are used in the following features: %1.\nThese features will be deleted.\n")).arg(aDirectNames);
- if (!aIndirectNames.isEmpty())
- aText += QString(tr("(Also these features will be deleted: %1)\n")).arg(aIndirectNames);
- }
- }
- if (!aPartNames.isEmpty())
- aText += QString(tr("The following parts will be deleted: %1.\n")).arg(aPartNames);
-
- if (!aText.isEmpty()) {
- aText += "Would you like to continue?";
- aMessageBox.setText(aText);
- aMessageBox.exec();
- QMessageBox::ButtonRole aButtonRole = aMessageBox.buttonRole(aMessageBox.clickedButton());
-
- if (aButtonRole == QMessageBox::NoRole)
- return false;
-
- if (aButtonRole == QMessageBox::ActionRole) {
- foreach (ObjectPtr aObj, theList)
- ModelAPI_ReplaceParameterMessage::send(aObj, this);
- doDeleteReferences = false;
- }
- }
- return true;
-}
-
bool XGUI_Workshop::deleteFeatures(const QObjectPtrList& theFeatures,
const std::set<FeaturePtr>& theIgnoredFeatures)
{
std::set<FeaturePtr> aDirectRefFeatures, aIndirectRefFeatures;
- findReferences(theFeatures, aDirectRefFeatures, aIndirectRefFeatures);
+ ModuleBase_Tools::findReferences(theFeatures, aDirectRefFeatures, aIndirectRefFeatures);
return deleteFeaturesInternal(theFeatures, aDirectRefFeatures, aIndirectRefFeatures,
theIgnoredFeatures);
}
std::set<FeaturePtr> aPlacedFeatures(aFeaturesBetween.begin(), aFeaturesBetween.end());
// 2. Get all reference features to the selected object in the document
std::set<FeaturePtr> aRefFeatures;
- XGUI_Tools::refsToFeatureInFeatureDocument(aObject, aRefFeatures);
+ ModuleBase_Tools::refsToFeatureInFeatureDocument(aObject, aRefFeatures);
if (aRefFeatures.empty())
continue;
objectBrowser()->blockSignals(aBlocked);
}
}
+
+void XGUI_Workshop::highlightFeature(const QObjectPtrList& theObjects)
+{
+ ResultPtr aResult;
+ QObjectPtrList aSelList = theObjects;
+ FeaturePtr aFeature;
+ foreach(ObjectPtr aObj, theObjects) {
+ aResult = std::dynamic_pointer_cast<ModelAPI_Result>(aObj);
+ if (aResult.get()) {
+ aFeature = ModelAPI_Feature::feature(aResult);
+ if (aFeature.get()) {
+ aSelList.append(aFeature);
+ }
+ }
+ }
+ if (aSelList.count() > theObjects.count()) {
+ // if something was found
+ bool aBlocked = objectBrowser()->blockSignals(true);
+ objectBrowser()->setObjectsSelected(aSelList);
+ objectBrowser()->blockSignals(aBlocked);
+ }
+}