X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_ActionsMgr.cpp;h=2468786c43859ced97f6586a46310ef28c820908;hb=220bd2b37119be1c65abf88a88792445cb9d99f8;hp=fd872f417f40943bbbddddd99ee8948127f39328;hpb=3395e370f75b7e2322326dbf2cf99472b14be829;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_ActionsMgr.cpp b/src/XGUI/XGUI_ActionsMgr.cpp index fd872f417..2468786c4 100644 --- a/src/XGUI/XGUI_ActionsMgr.cpp +++ b/src/XGUI/XGUI_ActionsMgr.cpp @@ -4,7 +4,9 @@ * XGUI_ActionsMgr.cpp */ +#ifndef HAVE_SALOME #include +#endif #include #include @@ -20,6 +22,7 @@ #include #include #include +#include #include @@ -60,13 +63,13 @@ void XGUI_ActionsMgr::addCommand(QAction* theCmd) return; } myActions.insert(aId, theCmd); - AppElements_Command* aXCmd = dynamic_cast(theCmd); - if (aXCmd) { - myNestedActions[aId] = aXCmd->nestedCommands(); - } else { +#ifdef HAVE_SALOME XGUI_Workshop* aWorkshop = static_cast(parent()); myNestedActions[aId] = aWorkshop->salomeConnector()->nestedActions(aId); - } +#else + AppElements_Command* aXCmd = dynamic_cast(theCmd); + myNestedActions[aId] = aXCmd->nestedCommands(); +#endif } void XGUI_ActionsMgr::addNestedCommands(const QString& theId, const QStringList& theCommands) @@ -92,26 +95,29 @@ bool XGUI_ActionsMgr::isNested(const QString& theId) const return false; } -void XGUI_ActionsMgr::update() +void XGUI_ActionsMgr::updateCommandsStatus() { + setAllEnabled(true); + XGUI_Selection* aSelection = myWorkshop->selector()->selection(); + if (aSelection->getSelected(ModuleBase_ISelection::Viewer).size() > 0) + updateOnViewSelection(); + FeaturePtr anActiveFeature = FeaturePtr(); - if (myOperationMgr->hasOperation()) { - ModuleBase_Operation* anOperation = myOperationMgr->currentOperation(); - anActiveFeature = anOperation->feature(); - if(anActiveFeature.get()) { - setAllEnabled(false); - QString aFeatureId = QString::fromStdString(anActiveFeature->getKind()); - setActionEnabled(aFeatureId, true); + ModuleBase_OperationFeature* aFOperation = dynamic_cast + (myOperationMgr->currentOperation()); + if (aFOperation) { + anActiveFeature = aFOperation->feature(); + QStringList aNested = allNestedCommands(aFOperation); + foreach(QString aAction, myActions.keys()) { + if (!aNested.contains(aAction)) + setActionEnabled(aAction, false); } - setNestedStackEnabled(anOperation); - } else { - setAllEnabled(true); + } else setNestedCommandsEnabled(false); - } - // TODO(SBH): Get defaults state of actions from XML and remove the following method + + updateByPlugins(anActiveFeature); updateByDocumentKind(); updateCheckState(); - updateByPlugins(anActiveFeature); } void XGUI_ActionsMgr::updateCheckState() @@ -138,47 +144,27 @@ void XGUI_ActionsMgr::updateOnViewSelection() if (aIdList.isEmpty()) return; + ModuleBase_Operation* theOperation = myOperationMgr->currentOperation(); //QString aFeatureId = QString::fromStdString(anActiveFeature->getKind()); XGUI_Selection* aSelection = myWorkshop->selector()->selection(); // only viewer selection is processed - if (aSelection->getSelected(ModuleBase_ISelection::Viewer).size() == 0) { - // it seems that this code is not nesessary anymore. It leads to incorrect case: - // sketch operation start, click in any place in the viewer. The result is all nested - // entities are enabled(but the sketch plane is not selected yet). Any sketch operation - // can be started but will be incorrect on preview build before it uses the sketch unset plane. - /*foreach(QString aFeatureId, aIdList) { - foreach(QString aId, nestedCommands(aFeatureId)) { - setActionEnabled(aId, true); - } - }*/ - } else { - SessionPtr aMgr = ModelAPI_Session::get(); - ModelAPI_ValidatorsFactory* aFactory = aMgr->validators(); - foreach(QString aFeatureId, aIdList) { - foreach(QString aId, nestedCommands(aFeatureId)) { - ModelAPI_ValidatorsFactory::Validators aValidators; - aFactory->validators(aId.toStdString(), aValidators); - ModelAPI_ValidatorsFactory::Validators::iterator aValidatorIt = aValidators.begin(); - for (; aValidatorIt != aValidators.end(); ++aValidatorIt) { - const ModuleBase_SelectionValidator* aSelValidator = - dynamic_cast(aFactory->validator(aValidatorIt->first)); - if (!aSelValidator) - continue; - setActionEnabled(aId, aSelValidator->isValid(aSelection, aValidatorIt->second)); - } + SessionPtr aMgr = ModelAPI_Session::get(); + ModelAPI_ValidatorsFactory* aFactory = aMgr->validators(); + foreach(QString aFeatureId, aIdList) { + foreach(QString aId, nestedCommands(aFeatureId)) { + ModelAPI_ValidatorsFactory::Validators aValidators; + aFactory->validators(aId.toStdString(), aValidators); + ModelAPI_ValidatorsFactory::Validators::iterator aValidatorIt = aValidators.begin(); + for (; aValidatorIt != aValidators.end(); ++aValidatorIt) { + const ModuleBase_SelectionValidator* aSelValidator = + dynamic_cast(aFactory->validator(aValidatorIt->first)); + if (aSelValidator) + setActionEnabled(aId, aSelValidator->isValid(aSelection, theOperation)); } } } } -void XGUI_ActionsMgr::onAcceptAllToggled(bool theState) -{ - if (!theState) { - QAction* anAcceptAllAction = operationStateAction(XGUI_ActionsMgr::AcceptAll, NULL); - anAcceptAllAction->setEnabled(theState); - } -} - QKeySequence XGUI_ActionsMgr::registerShortcut(const QKeySequence& theKeySequence) { if (theKeySequence.isEmpty()) { @@ -242,23 +228,25 @@ QAction* XGUI_ActionsMgr::operationStateAction(OperationStateActionId theId, QOb } else { switch (theId) { case Accept: - case AcceptAll: + case AcceptAll: { aResult = new QAction(QIcon(":pictures/button_ok.png"), "", theParent); - // the default value is disabled, so the next connect is used to restore this - // default state by untoggle this action - connect(this, SIGNAL(toggled(bool)), this, SLOT(onAcceptAllToggled(bool))); - break; + aResult->setToolTip("Apply"); + } + break; case Abort: case AbortAll: { aResult = new QAction(QIcon(":pictures/button_cancel.png"), "", theParent); - if(theId == Abort) { + aResult->setToolTip("Cancel"); + if (theId == Abort) { aResult->setShortcut(QKeySequence(Qt::Key_Escape)); } } break; - case Help: + case Help: { aResult = new QAction(QIcon(":pictures/button_help.png"), "", theParent); - break; + aResult->setToolTip("Help"); + } + break; default: break; } @@ -269,7 +257,7 @@ QAction* XGUI_ActionsMgr::operationStateAction(OperationStateActionId theId, QOb QAction* XGUI_ActionsMgr::action(const QString& theId) { - QAction* anAction; + QAction* anAction = 0; if(myActions.contains(theId)) { anAction = myActions.value(theId); } @@ -290,8 +278,7 @@ ActionInfo XGUI_ActionsMgr::actionInfoById(const QString& theId) void XGUI_ActionsMgr::setAllEnabled(bool isEnabled) { - foreach(QString eachAction, myActions.keys()) - { + foreach(QString eachAction, myActions.keys()) { setActionEnabled(eachAction, isEnabled); } } @@ -315,16 +302,31 @@ void XGUI_ActionsMgr::setNestedCommandsEnabled(bool theEnabled, const QString& t void XGUI_ActionsMgr::setNestedStackEnabled(ModuleBase_Operation* theOperation) { - if(!theOperation || !theOperation->feature()) + ModuleBase_OperationFeature* anOperation = dynamic_cast(theOperation); + if(!anOperation || !anOperation->feature()) return; - FeaturePtr aFeature = theOperation->feature(); + FeaturePtr aFeature = anOperation->feature(); QString aFeatureId = QString::fromStdString(aFeature->getKind()); - setActionEnabled(aFeatureId, true); + //setActionEnabled(aFeatureId, true); setNestedCommandsEnabled(true, aFeatureId); setNestedStackEnabled(myOperationMgr->previousOperation(theOperation)); } +QStringList XGUI_ActionsMgr::allNestedCommands(ModuleBase_Operation* theOperation) +{ + QStringList aFeatures; + ModuleBase_OperationFeature* anOperation = dynamic_cast(theOperation); + if(!anOperation || !anOperation->feature()) + return aFeatures; + FeaturePtr aFeature = anOperation->feature(); + QString aFeatureId = QString::fromStdString(aFeature->getKind()); + + aFeatures << myNestedActions[aFeatureId]; + aFeatures << allNestedCommands(myOperationMgr->previousOperation(theOperation)); + return aFeatures; +} + void XGUI_ActionsMgr::setActionChecked(const QString& theId, const bool theChecked) { if (myActions.contains(theId)) { @@ -338,7 +340,11 @@ void XGUI_ActionsMgr::setActionChecked(const QString& theId, const bool theCheck void XGUI_ActionsMgr::setActionEnabled(const QString& theId, const bool theEnabled) { if (myActions.contains(theId)) { - myActions[theId]->setEnabled(theEnabled); + QAction* aAction = myActions[theId]; + // Initially all actions are enabled + // If it was disabled for any reason then we can not enable it + if (aAction->isEnabled()) + aAction->setEnabled(theEnabled); } } @@ -352,16 +358,16 @@ void XGUI_ActionsMgr::updateByDocumentKind() QString aDocKind = QString::fromStdString(aStdDocKind); XGUI_Workshop* aWorkshop = static_cast(parent()); foreach(QAction* eachAction, myActions.values()) { - AppElements_Command* aCmd = dynamic_cast(eachAction); QString aCmdDocKind; - if(aCmd) { - aCmdDocKind = aCmd->documentKind(); - } else { - QString aId = eachAction->data().toString(); - if (!aId.isEmpty()) { - aCmdDocKind = aWorkshop->salomeConnector()->documentKind(aId); - } +#ifdef HAVE_SALOME + QString aId = eachAction->data().toString(); + if (!aId.isEmpty()) { + aCmdDocKind = aWorkshop->salomeConnector()->documentKind(aId); } +#else + AppElements_Command* aCmd = dynamic_cast(eachAction); + aCmdDocKind = aCmd->documentKind(); +#endif if(!aCmdDocKind.isEmpty() && aCmdDocKind != aDocKind) { eachAction->setEnabled(false); }