- if (!aRefNames.empty()) {
- QString aNames = aRefNames.join(", ");
- aDescription += aNames.prepend(" ");
-
- QMainWindow* aDesktop = aWorkshop->desktop();
- QMessageBox::StandardButton aRes = QMessageBox::warning(
- aDesktop, tr("Delete features"),
- QString(tr("Selected features are used in the following features: %1.\
- These features will be deleted also. Would you like to continue?")).arg(aNames),
- QMessageBox::No | QMessageBox::Yes, QMessageBox::No);
- if (aRes != QMessageBox::Yes)
- return;
+ } else if (aSelected == 0) {
+ // if there is no selection then it means that upper label is selected
+ QModelIndexList aIndexes = myWorkshop->selection()->selectedIndexes();
+ if (aIndexes.size() == 0) // it means that selection happens in top label outside of tree view
+ theMenu->addAction(aActivatePartSetAction);
+ aActivatePartSetAction->setEnabled((aMgr->activeDocument() != aMgr->moduleDocument()));
+ }
+ bool aNotDeactivate = (myWorkshop->currentOperation() == 0);
+ if (!aNotDeactivate) {
+ aActivatePartAction->setEnabled(false);
+ aActivatePartSetAction->setEnabled(false);
+ }
+}
+
+void PartSet_Module::processEvent(const std::shared_ptr<Events_Message>& theMessage)
+{
+ if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_DOCUMENT_CHANGED)) {
+ // Do not change activation of parts if an operation active
+ static QStringList aAllowActivationList;
+ if (aAllowActivationList.isEmpty())
+ aAllowActivationList <<
+ QString(PartSetPlugin_Part::ID().c_str()) <<
+ QString(PartSetPlugin_Duplicate::ID().c_str()) <<
+ QString(PartSetPlugin_Remove::ID().c_str());
+ if (myWorkshop->currentOperation() &&
+ (!aAllowActivationList.contains(myWorkshop->currentOperation()->id())))
+ return;
+ XGUI_ModuleConnector* aConnector = dynamic_cast<XGUI_ModuleConnector*>(myWorkshop);
+ XGUI_Workshop* aWorkshop = aConnector->workshop();
+ XGUI_DataTree* aTreeView = aWorkshop->objectBrowser()->treeView();
+ QLineEdit* aLabel = aWorkshop->objectBrowser()->activeDocLabel();
+ QPalette aPalet = aLabel->palette();
+
+ SessionPtr aMgr = ModelAPI_Session::get();
+ DocumentPtr aActiveDoc = aMgr->activeDocument();
+#ifdef ModuleDataModel
+ QModelIndex aOldIndex = myDataModel->activePartTree();
+ DocumentPtr aDoc = aMgr->moduleDocument();
+ if (aActiveDoc == aDoc) {
+ if (aOldIndex.isValid())
+ aTreeView->setExpanded(aOldIndex, false);
+ myDataModel->deactivatePart();
+ aPalet.setColor(QPalette::Text, QColor(0, 72, 140));
+ } else {
+ std::string aGrpName = ModelAPI_ResultPart::group();
+ for (int i = 0; i < aDoc->size(aGrpName); i++) {
+ ResultPartPtr aPart = std::dynamic_pointer_cast<ModelAPI_ResultPart>(aDoc->object(aGrpName, i));
+ if (aPart->partDoc() == aActiveDoc) {
+ QModelIndex aIndex = myDataModel->partIndex(aPart);
+ if (myDataModel->activatePart(aIndex)) {
+ if (aOldIndex.isValid())
+ aTreeView->setExpanded(aOldIndex, false);
+ aTreeView->setExpanded(myDataModel->activePartTree(), true);
+ aPalet.setColor(QPalette::Text, Qt::black);
+ }
+ break;
+ }
+ }
+ }
+#else
+ if (aActivePartIndex.isValid())
+ aTreeView->setExpanded(aActivePartIndex, false);
+ XGUI_DataModel* aDataModel = aWorkshop->objectBrowser()->dataModel();
+ aActivePartIndex = aDataModel->documentRootIndex(aActiveDoc);
+ if (aActivePartIndex.isValid())
+ aTreeView->setExpanded(aActivePartIndex, true);
+#endif
+ aLabel->setPalette(aPalet);
+ aWorkshop->updateCommandStatus();
+
+ // Update displayed objects in order to update active color
+ XGUI_Displayer* aDisplayer = aWorkshop->displayer();
+ QObjectPtrList aObjects = aDisplayer->displayedObjects();
+ bool aHidden;
+ foreach(ObjectPtr aObj, aObjects) {
+ //TODO: replace by redisplay event.
+ aHidden = !aObj->data() || !aObj->data()->isValid() ||
+ aObj->isDisabled() || (!aObj->isDisplayed());
+ if (!aHidden)
+ aDisplayer->redisplay(aObj, false);