X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_Workshop.cpp;h=0a1b1570ca901a64d408103893edbf3050ec8f3b;hb=e65bf14e2ff3cf853884bf8998fadcece6e3b34c;hp=e55494d77bb45f26be0bba2d24ba54841c36a34f;hpb=dc7d4d86b58b81684abc9b5a2be8ec30f210c2da;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_Workshop.cpp b/src/XGUI/XGUI_Workshop.cpp index e55494d77..0a1b1570c 100755 --- a/src/XGUI/XGUI_Workshop.cpp +++ b/src/XGUI/XGUI_Workshop.cpp @@ -50,6 +50,7 @@ #include #include #include +#include #ifndef HAVE_SALOME #include @@ -174,6 +175,7 @@ XGUI_Workshop::XGUI_Workshop(XGUI_SalomeConnector* theConnector) myModule(NULL), mySalomeConnector(theConnector), myPropertyPanel(0), + myInspectionPanel(0), myFacesPanel(0), myObjectBrowser(0), myDisplayer(0) @@ -536,8 +538,8 @@ void XGUI_Workshop::onAcceptPlusActionClicked() ModuleBase_OperationFeature* aFOperation = dynamic_cast (anOperationMgr->currentOperation()); if (aFOperation) { - myOperationMgr->commitOperation(); - module()->launchOperation(aFOperation->id(), false); + if (myOperationMgr->commitOperation()) + module()->launchOperation(aFOperation->id(), false); } } } @@ -1035,12 +1037,14 @@ bool XGUI_Workshop::onSaveAs() void XGUI_Workshop::onUndo(int theTimes) { processUndoRedo(ActionUndo, theTimes); + myObjectBrowser->updateAllIndexes(1); } //****************************************************** void XGUI_Workshop::onRedo(int theTimes) { processUndoRedo(ActionRedo, theTimes); + myObjectBrowser->updateAllIndexes(1); } //****************************************************** @@ -1092,6 +1096,8 @@ void XGUI_Workshop::processUndoRedo(const ModuleBase_ActionType theActionType, i // unblock the viewer update functionality and make update on purpose myDisplayer->enableUpdateViewer(isUpdateEnabled); myDisplayer->updateViewer(); + // Clear messages in status bar from previous operations if exists + setStatusBarMessage(""); } //****************************************************** @@ -1339,6 +1345,11 @@ void XGUI_Workshop::createDockWidgets() Qt::BottomDockWidgetArea); connect(myFacesPanel, SIGNAL(closed()), myFacesPanel, SLOT(onClosed())); + myInspectionPanel = new XGUI_InspectionPanel(aDesktop, mySelector); + myInspectionPanel->setAllowedAreas(Qt::LeftDockWidgetArea | + Qt::RightDockWidgetArea); + aDesktop->addDockWidget(Qt::RightDockWidgetArea, myInspectionPanel); + aDesktop->addDockWidget( #ifdef HAVE_SALOME Qt::RightDockWidgetArea, @@ -1655,7 +1666,7 @@ bool XGUI_Workshop::prepareForDisplay(const std::set& theObjects) con int anAnswer = QMessageBox::question( desktop(), tr("Show object"), tr("'%1'\n are hidden by %2:\nRemove objects from the panel to be displayed?") - .arg(aHiddenObjectNames.join(' ,')).arg(facesPanel()->windowTitle()), + .arg(aHiddenObjectNames.join(", ")).arg(facesPanel()->windowTitle()), QMessageBox::Yes | QMessageBox::No, QMessageBox::No); bool aToBeDisplayed = anAnswer == QMessageBox::Yes; @@ -1921,7 +1932,6 @@ void XGUI_Workshop::moveObjects() //************************************************************** bool XGUI_Workshop::deleteFeatures(const QObjectPtrList& theObjects) { - std::map > aReferences; std::set aFeatures; ModuleBase_Tools::convertToFeatures(theObjects, aFeatures); @@ -2025,6 +2035,17 @@ bool XGUI_Workshop::canMoveFeature() QObjectPtrList::const_iterator anIt = aObjects.begin(), aLast = aObjects.end(); for (; anIt != aLast && aCanMove; anIt++) { ObjectPtr aObject = *anIt; + if (!aObject.get() || !aObject->data().get() || !aObject->data()->isValid()) { + aCanMove = false; + break; + } + FeaturePtr aFeat = std::dynamic_pointer_cast(aObject); + // only groups can be moved to the end for now (#2451) + if (aFeat.get() && aFeat->getKind() != "Group") { + aCanMove = false; + break; + } + // 1. Get features placed between selected and current in the document std::list aFeaturesBetween = toCurrentFeatures(aObject); // if aFeaturesBetween is empty it means wrong order or aObject is the current feature @@ -2589,6 +2610,7 @@ void XGUI_Workshop::highlightResults(const QObjectPtrList& theObjects) { FeaturePtr aFeature; QObjectPtrList aSelList = theObjects; + QObjectPtrList aNewSel; bool aHasHidden = false; foreach(ObjectPtr aObj, theObjects) { aFeature = std::dynamic_pointer_cast(aObj); @@ -2599,6 +2621,7 @@ void XGUI_Workshop::highlightResults(const QObjectPtrList& theObjects) for(aIt = aResults.cbegin(); aIt != aResults.cend(); aIt++) { aHasHidden |= (*aIt)->isConcealed(); aSelList.append(*aIt); + aNewSel.append(*aIt); } } } @@ -2607,6 +2630,7 @@ void XGUI_Workshop::highlightResults(const QObjectPtrList& theObjects) bool aBlocked = objectBrowser()->blockSignals(true); objectBrowser()->setObjectsSelected(aSelList); objectBrowser()->blockSignals(aBlocked); + objectBrowser()->ensureVisible(aNewSel.first()); } if (aHasHidden) QMessageBox::information(desktop(), tr("Find results"), @@ -2618,6 +2642,7 @@ void XGUI_Workshop::highlightFeature(const QObjectPtrList& theObjects) { ResultPtr aResult; QObjectPtrList aSelList = theObjects; + QObjectPtrList aNewSel; FeaturePtr aFeature; foreach(ObjectPtr aObj, theObjects) { aResult = std::dynamic_pointer_cast(aObj); @@ -2625,6 +2650,7 @@ void XGUI_Workshop::highlightFeature(const QObjectPtrList& theObjects) aFeature = ModelAPI_Feature::feature(aResult); if (aFeature.get()) { aSelList.append(aFeature); + aNewSel.append(aFeature); } } } @@ -2633,6 +2659,7 @@ void XGUI_Workshop::highlightFeature(const QObjectPtrList& theObjects) bool aBlocked = objectBrowser()->blockSignals(true); objectBrowser()->setObjectsSelected(aSelList); objectBrowser()->blockSignals(aBlocked); + objectBrowser()->ensureVisible(aNewSel.first()); } } @@ -2675,10 +2702,14 @@ void XGUI_Workshop::insertToFolder(bool isBefore) QString aDescription = contextMenuMgr()->action( isBefore ? "ADD_TO_FOLDER_BEFORE_CMD" : "ADD_TO_FOLDER_AFTER_CMD")->text(); + QMap aStates = myObjectBrowser->getFoldersState(aDoc); + aMgr->startOperation(aDescription.toStdString()); aDoc->moveToFolder(aFeatures, aFolder); aMgr->finishOperation(); + myObjectBrowser->setFoldersState(aStates); + updateCommandStatus(); } @@ -2691,13 +2722,16 @@ void XGUI_Workshop::moveOutFolder(bool isBefore) SessionPtr aMgr = ModelAPI_Session::get(); DocumentPtr aDoc = aMgr->activeDocument(); - QString aDescription = contextMenuMgr()->action( isBefore ? "ADD_OUT_FOLDER_BEFORE_CMD" : "ADD_OUT_FOLDER_AFTER_CMD")->text(); + QMap aStates = myObjectBrowser->getFoldersState(aDoc); + aMgr->startOperation(aDescription.toStdString()); aDoc->removeFromFolder(aFeatures, isBefore); aMgr->finishOperation(); + myObjectBrowser->setFoldersState(aStates); + updateCommandStatus(); }