X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_Workshop.cpp;h=646a41bfa8c070f70a6f183e566d8db0c59b2cb1;hb=9d2e6d9c21e4f16817ca5b572847fe323f6ef32a;hp=387594ec062f8d5e3c8642b4417c489a2f6a3883;hpb=fccb11b890bf75fde316cd0dbc911fa001368062;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_Workshop.cpp b/src/XGUI/XGUI_Workshop.cpp index 387594ec0..646a41bfa 100644 --- a/src/XGUI/XGUI_Workshop.cpp +++ b/src/XGUI/XGUI_Workshop.cpp @@ -94,44 +94,6 @@ //#define DEBUG_FEATURE_CREATED //#define DEBUG_FEATURE_REDISPLAY -QMap XGUI_Workshop::myIcons; - - -QIcon XGUI_Workshop::featureIcon(const FeaturePtr& theFeature) -{ - QIcon anIcon; - - std::string aKind = theFeature->getKind(); - QString aId(aKind.c_str()); - if (!myIcons.contains(aId)) - return anIcon; - - QString anIconString = myIcons[aId]; - - ModelAPI_ExecState aState = theFeature->data()->execState(); - switch(aState) { - case ModelAPI_StateDone: - case ModelAPI_StateNothing: { - anIcon = QIcon(anIconString); - } - break; - case ModelAPI_StateMustBeUpdated: { - anIcon = ModuleBase_Tools::lighter(anIconString); - } - break; - case ModelAPI_StateExecFailed: { - anIcon = ModuleBase_Tools::composite(":pictures/exec_state_failed.png", anIconString); - } - break; - case ModelAPI_StateInvalidArgument: { - anIcon = ModuleBase_Tools::composite(":pictures/exec_state_invalid_parameters.png", - anIconString); - } - break; - default: break; - } - return anIcon; -} XGUI_Workshop::XGUI_Workshop(XGUI_SalomeConnector* theConnector) : QObject(), @@ -201,12 +163,8 @@ void XGUI_Workshop::startApplication() aLoop->registerListener(this, Events_Loop::eventByName(EVENT_OBJECT_UPDATED)); aLoop->registerListener(this, Events_Loop::eventByName(EVENT_OBJECT_CREATED)); aLoop->registerListener(this, Events_Loop::eventByName(EVENT_OBJECT_TO_REDISPLAY)); - aLoop->registerListener(this, Events_Loop::eventByName(EVENT_OBJECT_DELETED)); aLoop->registerListener(this, Events_LongOp::eventID()); aLoop->registerListener(this, Events_Loop::eventByName(EVENT_PLUGIN_LOADED)); - aLoop->registerListener(this, Events_Loop::eventByName(EVENT_DOCUMENT_CHANGED)); - aLoop->registerListener(this, Events_Loop::eventByName(EVENT_OBJECT_TOSHOW)); - aLoop->registerListener(this, Events_Loop::eventByName(EVENT_OBJECT_TOHIDE)); aLoop->registerListener(this, Events_Loop::eventByName(EVENT_SELFILTER_LOADED)); aLoop->registerListener(this, Events_Loop::eventByName(EVENT_UPDATE_VIEWER_BLOCKED)); @@ -382,34 +340,12 @@ void XGUI_Workshop::processEvent(const std::shared_ptr& theMessa std::shared_ptr anUpdateMsg = std::dynamic_pointer_cast(theMessage); onFeatureUpdatedMsg(anUpdateMsg); - } else if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_OBJECT_DELETED)) { - std::shared_ptr aDelMsg = - std::dynamic_pointer_cast(theMessage); - onObjectDeletedMsg(aDelMsg); } else if (theMessage->eventID() == Events_LongOp::eventID()) { if (Events_LongOp::isPerformed()) { QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); } else { QApplication::restoreOverrideCursor(); } - } else if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_OBJECT_TOSHOW)) { - std::shared_ptr anUpdateMsg = - std::dynamic_pointer_cast(theMessage); - const std::set& aObjList = anUpdateMsg->objects(); - QObjectPtrList aList; - std::set::const_iterator aIt; - for (aIt = aObjList.cbegin(); aIt != aObjList.cend(); ++aIt) - aList.append(*aIt); - showObjects(aList, true); - } else if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_OBJECT_TOHIDE)) { - std::shared_ptr anUpdateMsg = - std::dynamic_pointer_cast(theMessage); - const std::set& aObjList = anUpdateMsg->objects(); - QObjectPtrList aList; - std::set::const_iterator aIt; - for (aIt = aObjList.cbegin(); aIt != aObjList.cend(); ++aIt) - aList.append(*aIt); - showObjects(aList, false); } //An operation passed by message. Start it, process and commit. else if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_OPERATION_LAUNCHED)) { @@ -425,30 +361,7 @@ void XGUI_Workshop::processEvent(const std::shared_ptr& theMessa updateCommandStatus(); } } - } else if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_DOCUMENT_CHANGED)) { - myActionsMgr->update(); - // Find and Activate active part - if (myPartActivating) - return; - SessionPtr aMgr = ModelAPI_Session::get(); - DocumentPtr aActiveDoc = aMgr->activeDocument(); - DocumentPtr aDoc = aMgr->moduleDocument(); - if (aActiveDoc == aDoc) { - activatePart(ResultPartPtr()); - return; - } - std::string aGrpName = ModelAPI_ResultPart::group(); - for (int i = 0; i < aDoc->size(aGrpName); i++) { - ResultPartPtr aPart = std::dynamic_pointer_cast(aDoc->object(aGrpName, i)); - if (aPart->partDoc() == aActiveDoc) { - activatePart(aPart); // Activate a part which corresponds to active Doc - return; - } - } - // If not found then activate global document - activatePart(ResultPartPtr()); - - } + } else if (theMessage->eventID() == Events_Loop::eventByName(EVENT_SELFILTER_LOADED)) { std::shared_ptr aMsg = std::dynamic_pointer_cast(theMessage); @@ -510,8 +423,8 @@ void XGUI_Workshop::onFeatureUpdatedMsg(const std::shared_ptronValidateOperation(); - if (myObjectBrowser) - myObjectBrowser->processEvent(theMsg); + //if (myObjectBrowser) + // myObjectBrowser->processEvent(theMsg); } //****************************************************** @@ -533,7 +446,8 @@ void XGUI_Workshop::onFeatureRedisplayMsg(const std::shared_ptrdata() || !aObj->data()->isValid(); + bool aHide = !aObj->data() || !aObj->data()->isValid() || + aObj->isDisabled() || (!aObj->isDisplayed()); if (!aHide) { // check that this is not hidden result ResultPtr aRes = std::dynamic_pointer_cast(aObj); aHide = aRes && aRes->isConcealed(); @@ -554,21 +468,23 @@ void XGUI_Workshop::onFeatureRedisplayMsg(const std::shared_ptrredisplay(aObj, false); - if (myOperationMgr->hasOperation()) { - ModuleBase_Operation* aOperation = myOperationMgr->currentOperation(); - if (!aOperation->isEditOperation() && - aOperation->hasObject(aObj) && myDisplayer->isActive(aObj)) + //if (myOperationMgr->hasOperation()) { + // ModuleBase_Operation* aOperation = myOperationMgr->currentOperation(); + // if (!aOperation->isEditOperation() && + // aOperation->hasObject(aObj) && myDisplayer->isActive(aObj)) + if (!myModule->canActivateSelection(aObj)) { + if (myDisplayer->isActive(aObj)) myDisplayer->deactivate(aObj); } } else { // display object if the current operation has it - ModuleBase_Operation* aOperation = myOperationMgr->currentOperation(); - if (aOperation && aOperation->hasObject(aObj)) { - ModuleBase_Operation* aOperation = myOperationMgr->currentOperation(); - #ifdef DEBUG_FEATURE_REDISPLAY - QString anObjInfo = ModuleBase_Tools::objectInfo((aObj)); - qDebug(QString(" display object = %1").arg(anObjInfo).toStdString().c_str()); - #endif - if (displayObject(aObj)) { + if (displayObject(aObj)) { + //ModuleBase_Operation* aOperation = myOperationMgr->currentOperation(); + //if (aOperation && aOperation->hasObject(aObj)) { + if (!myModule->canActivateSelection(aObj)) { + #ifdef DEBUG_FEATURE_REDISPLAY + QString anObjInfo = ModuleBase_Tools::objectInfo((aObj)); + qDebug(QString(" display object = %1").arg(anObjInfo).toStdString().c_str()); + #endif // Deactivate object of current operation from selection if (myDisplayer->isActive(aObj)) myDisplayer->deactivate(aObj); @@ -600,19 +516,21 @@ void XGUI_Workshop::onFeatureCreatedMsg(const std::shared_ptrdata() || !anObject->data()->isValid()) - continue; - //ResultPartPtr aPart = std::dynamic_pointer_cast(*aIt); - //if (aPart) { - //aHasPart = true; - // If a feature is created from the aplication's python console - // it doesn't stored in the operation mgr and doesn't displayed - //} else { - isDisplayed = displayObject(*aIt); - //} - } - if (myObjectBrowser) - myObjectBrowser->processEvent(theMsg); + // we should not display disabled objects + bool aHide = !anObject->data() || !anObject->data()->isValid() || + anObject->isDisabled() || (!anObject->isDisplayed()); + if (!aHide) { + // setDisplayed has to be called in order to synchronize internal state of the object + // with list of displayed objects + if (myModule->canDisplayObject(anObject)) { + anObject->setDisplayed(true); + isDisplayed = displayObject(*aIt); + } else + anObject->setDisplayed(false); + } + } + //if (myObjectBrowser) + // myObjectBrowser->processEvent(theMsg); if (isDisplayed) myDisplayer->updateViewer(); //if (aHasPart) { // TODO: Avoid activate last part on loading of document @@ -620,14 +538,6 @@ void XGUI_Workshop::onFeatureCreatedMsg(const std::shared_ptr& theMsg) -{ - if (myObjectBrowser) - myObjectBrowser->processEvent(theMsg); - //std::set aFeatures = theMsg->objects(); -} - //****************************************************** void XGUI_Workshop::onOperationStarted(ModuleBase_Operation* theOperation) { @@ -761,8 +671,6 @@ void XGUI_Workshop::addFeature(const std::shared_ptr& the } ActionInfo aFeatureInfo; aFeatureInfo.initFrom(theMessage); - // Remember features icons - myIcons[QString::fromStdString(theMessage->id())] = aFeatureInfo.iconFile; QString aWchName = QString::fromStdString(theMessage->workbenchId()); QStringList aNestedFeatures = @@ -924,7 +832,6 @@ void XGUI_Workshop::onOpen() } else if (anAnswer == QMessageBox::Cancel) { return; } - aSession->closeAll(); myCurrentDir = ""; } @@ -940,9 +847,10 @@ void XGUI_Workshop::onOpen() } QApplication::setOverrideCursor(Qt::WaitCursor); myIsLoadingData = true; + aSession->closeAll(); aSession->load(myCurrentDir.toLatin1().constData()); myObjectBrowser->rebuildDataTree(); - displayAllResults(); + //displayAllResults(); updateCommandStatus(); myIsLoadingData = false; QApplication::restoreOverrideCursor(); @@ -1215,8 +1123,8 @@ QDockWidget* XGUI_Workshop::createObjectBrowser(QWidget* theParent) aObjDock->setStyleSheet( "::title { position: relative; padding-left: 5px; text-align: left center }"); myObjectBrowser = new XGUI_ObjectsBrowser(aObjDock); - connect(myObjectBrowser, SIGNAL(activePartChanged(ObjectPtr)), this, - SLOT(changeCurrentDocument(ObjectPtr))); + myObjectBrowser->setDataModel(myModule->dataModel()); + myModule->customizeObjectBrowser(myObjectBrowser); aObjDock->setWidget(myObjectBrowser); myContextMenuMgr->connectObjectBrowser(); @@ -1299,23 +1207,6 @@ void XGUI_Workshop::onFeatureTriggered() } } -//****************************************************** -void XGUI_Workshop::changeCurrentDocument(ObjectPtr theObj) -{ - SessionPtr aMgr = ModelAPI_Session::get(); - if (theObj) { - ResultPartPtr aPart = std::dynamic_pointer_cast(theObj); - if (aPart) { - DocumentPtr aPartDoc = aPart->partDoc(); - if (aPartDoc) { - aMgr->setActiveDocument(aPartDoc); - return; - } - } - } - aMgr->setActiveDocument(aMgr->moduleDocument()); -} - //****************************************************** void XGUI_Workshop::salomeViewerSelectionChanged() { @@ -1332,12 +1223,7 @@ ModuleBase_IViewer* XGUI_Workshop::salomeViewer() const void XGUI_Workshop::onContextMenuCommand(const QString& theId, bool isChecked) { QObjectPtrList aObjects = mySelector->selection()->selectedObjects(); - if ((theId == "ACTIVATE_PART_CMD") && (aObjects.size() > 0)) { - ResultPartPtr aPart = std::dynamic_pointer_cast(aObjects.first()); - activatePart(aPart); - } else if (theId == "DEACTIVATE_PART_CMD") - activatePart(ResultPartPtr()); - else if (theId == "DELETE_CMD") + if (theId == "DELETE_CMD") deleteObjects(); else if (theId == "COLOR_CMD") changeColor(aObjects); @@ -1351,49 +1237,14 @@ void XGUI_Workshop::onContextMenuCommand(const QString& theId, bool isChecked) setDisplayMode(aObjects, XGUI_Displayer::Shading); else if (theId == "WIREFRAME_CMD") setDisplayMode(aObjects, XGUI_Displayer::Wireframe); - else if (theId == "HIDEALL_CMD") - myDisplayer->eraseAll(); - else if (theId == "EDIT_CMD") { - FeaturePtr aFeature = std::dynamic_pointer_cast(aObjects.first()); - if (aFeature == NULL) { - ResultParameterPtr aParam = - std::dynamic_pointer_cast(aObjects.first()); - if (aParam.get() != NULL) { - aFeature = ModelAPI_Feature::feature(aParam); - } - } - if (aFeature.get() != NULL) - myModule->editFeature(aFeature); + else if (theId == "HIDEALL_CMD") { + QObjectPtrList aList = myDisplayer->displayedObjects(); + foreach (ObjectPtr aObj, aList) + aObj->setDisplayed(false); + Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_OBJECT_TO_REDISPLAY)); } } -//************************************************************** -void XGUI_Workshop::activatePart(ResultPartPtr theFeature) -{ - if (!myPartActivating) { - myPartActivating = true; - if (theFeature) - theFeature->activate(); - changeCurrentDocument(theFeature); - myObjectBrowser->activatePart(theFeature); - myPartActivating = false; - } - updateCommandStatus(); -} - -//************************************************************** -//void XGUI_Workshop::activateLastPart() -//{ -// SessionPtr aMgr = ModelAPI_Session::get(); -// DocumentPtr aDoc = aMgr->moduleDocument(); -// std::string aGrpName = ModelAPI_ResultPart::group(); -// ObjectPtr aLastPart = aDoc->object(aGrpName, aDoc->size(aGrpName) - 1); -// ResultPartPtr aPart = std::dynamic_pointer_cast(aLastPart); -// if (aPart) { -// activatePart(aPart); -// } -//} - //************************************************************** void XGUI_Workshop::deleteObjects() { @@ -1410,7 +1261,7 @@ void XGUI_Workshop::deleteObjects() bool hasResult = false; bool hasFeature = false; bool hasParameter = false; - XGUI_Tools::checkObjects(anObjects, hasResult, hasFeature, hasParameter); + ModuleBase_Tools::checkObjects(anObjects, hasResult, hasFeature, hasParameter); if (!(hasFeature || hasParameter)) return; @@ -1419,7 +1270,7 @@ void XGUI_Workshop::deleteObjects() aDescription += tr(" %1"); QStringList aObjectNames; foreach (ObjectPtr aObj, anObjects) { - if (!aObj->data().get()) + if (!aObj->data()->isValid()) continue; aObjectNames << QString::fromStdString(aObj->data()->name()); } @@ -1645,21 +1496,29 @@ void XGUI_Workshop::changeColor(const QObjectPtrList& theObjects) //************************************************************** void XGUI_Workshop::showObjects(const QObjectPtrList& theList, bool isVisible) { - foreach (ObjectPtr aObj, theList) - { + foreach (ObjectPtr aObj, theList) { if (isVisible) { - displayObject(aObj); + aObj->setDisplayed(true); + //displayObject(aObj); } else { - myDisplayer->erase(aObj, false); + aObj->setDisplayed(false); + //myDisplayer->erase(aObj, false); } } - myDisplayer->updateViewer(); + Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_OBJECT_TO_REDISPLAY)); + //myDisplayer->updateViewer(); } //************************************************************** void XGUI_Workshop::showOnlyObjects(const QObjectPtrList& theList) { - myDisplayer->showOnly(theList); + QObjectPtrList aList = myDisplayer->displayedObjects(); + foreach (ObjectPtr aObj, aList) + aObj->setDisplayed(false); + foreach (ObjectPtr aObj, theList) + aObj->setDisplayed(true); + Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_OBJECT_TO_REDISPLAY)); + } @@ -1696,8 +1555,10 @@ void XGUI_Workshop::displayDocumentResults(DocumentPtr theDoc) //************************************************************** void XGUI_Workshop::displayGroupResults(DocumentPtr theDoc, std::string theGroup) { - for (int i = 0; i < theDoc->size(theGroup); i++) - displayObject(theDoc->object(theGroup, i)); + for (int i = 0; i < theDoc->size(theGroup); i++) + theDoc->object(theGroup, i)->setDisplayed(true); + //displayObject(theDoc->object(theGroup, i)); + Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_OBJECT_TO_REDISPLAY)); } //************************************************************** @@ -1724,7 +1585,6 @@ void XGUI_Workshop::closeDocument() SessionPtr aMgr = ModelAPI_Session::get(); aMgr->closeAll(); - objectBrowser()->clearContent(); } //**************************************************************