X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_OperationMgr.cpp;h=88e625e36297aa367d362e2d540796259eb35786;hb=8779c4b3e4b51839580503650d9d78bd83e669a5;hp=7dca8e3c18700f6a101581e3ad8fafbe5c104e3c;hpb=426a1cf07dfee0bbb58dcd399787a89a4992fa72;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_OperationMgr.cpp b/src/XGUI/XGUI_OperationMgr.cpp index 7dca8e3c1..88e625e36 100644 --- a/src/XGUI/XGUI_OperationMgr.cpp +++ b/src/XGUI/XGUI_OperationMgr.cpp @@ -13,7 +13,7 @@ #include XGUI_OperationMgr::XGUI_OperationMgr(QObject* theParent) -: QObject(theParent) + : QObject(theParent) { // listen to Escape signal to stop the current operation qApp->installEventFilter(this); @@ -48,8 +48,8 @@ bool XGUI_OperationMgr::startOperation(ModuleBase_Operation* theOperation) connect(theOperation, SIGNAL(stopped()), this, SLOT(onOperationStopped())); connect(theOperation, SIGNAL(started()), this, SIGNAL(operationStarted())); connect(theOperation, SIGNAL(resumed()), this, SIGNAL(operationResumed())); - connect(theOperation, SIGNAL(activateNextWidget(ModuleBase_ModelWidget*)), - this, SIGNAL(activateNextWidget(ModuleBase_ModelWidget*))); + connect(theOperation, SIGNAL(activateNextWidget(ModuleBase_ModelWidget*)), this, + SIGNAL(activateNextWidget(ModuleBase_ModelWidget*))); theOperation->start(); validateCurrentOperation(); @@ -60,7 +60,7 @@ bool XGUI_OperationMgr::abortOperation() { ModuleBase_Operation* aCurrentOp = currentOperation(); if (!aCurrentOp || !canStopOperation()) - return false; + return false; aCurrentOp->abort(); return true; @@ -69,7 +69,8 @@ bool XGUI_OperationMgr::abortOperation() QStringList XGUI_OperationMgr::operationList() { QStringList result; - foreach(ModuleBase_Operation* eachOperation, myOperations) { + foreach(ModuleBase_Operation* eachOperation, myOperations) + { result << eachOperation->id(); } return result; @@ -83,26 +84,14 @@ void XGUI_OperationMgr::validateOperation(ModuleBase_Operation* theOperation) //Get validators for the Id PluginManagerPtr aMgr = ModelAPI_PluginManager::get(); ModelAPI_ValidatorsFactory* aFactory = aMgr->validators(); - std::list aValidators; - aFactory->validators(anOperationId.toStdString(), aValidators); - // - std::list::iterator it = aValidators.begin(); - bool isValid = true; - for(; it != aValidators.end(); it++) { - const ModelAPI_FeatureValidator* aFeatureValidator = - dynamic_cast(*it); - if (!aFeatureValidator) continue; - if (!aFeatureValidator->isValid(aFeature)) { - isValid = false; - break; - } - } + + bool isValid = aFactory->validate(aFeature); emit operationValidated(isValid); } void XGUI_OperationMgr::validateCurrentOperation() { - if(!hasOperation()) + if (!hasOperation()) return; ModuleBase_Operation* anOperation = currentOperation(); validateOperation(currentOperation()); @@ -111,7 +100,7 @@ void XGUI_OperationMgr::validateCurrentOperation() bool XGUI_OperationMgr::eventFilter(QObject *theObject, QEvent *theEvent) { if (theEvent->type() == QEvent::KeyRelease) { - QKeyEvent* aKeyEvent = (QKeyEvent*)theEvent; + QKeyEvent* aKeyEvent = (QKeyEvent*) theEvent; if (aKeyEvent && aKeyEvent->key() == Qt::Key_Escape) { // TODO: this is Escape button processing when the property panel has empty content, // but the operation should be stopped by the Enter has been clicked @@ -131,12 +120,15 @@ bool XGUI_OperationMgr::canStartOperation(ModuleBase_Operation* theOperation) { bool aCanStart = true; ModuleBase_Operation* aCurrentOp = currentOperation(); - if (aCurrentOp && !theOperation->isGranted(aCurrentOp)) - { - if (canStopOperation()) { - aCurrentOp->abort(); - } else { - aCanStart = false; + if (aCurrentOp) { + if (!theOperation->isGranted()) { + if (!aCurrentOp->isValid(theOperation)) { + if (canStopOperation()) { + aCurrentOp->abort(); + } else { + aCanStart = false; + } + } } } return aCanStart; @@ -147,9 +139,10 @@ bool XGUI_OperationMgr::canStopOperation() ModuleBase_Operation* anOperation = currentOperation(); if (anOperation) { if (anOperation->isModified()) { - int anAnswer = QMessageBox::question(qApp->activeWindow(), tr("Operation launch"), - tr("Previous operation is not finished and will be aborted"), - QMessageBox::Ok, QMessageBox::Cancel); + int anAnswer = QMessageBox::question( + qApp->activeWindow(), tr("Operation launch"), + tr("Previous operation is not finished and will be aborted"), QMessageBox::Ok, + QMessageBox::Cancel); return anAnswer == QMessageBox::Ok; } } @@ -174,10 +167,11 @@ bool XGUI_OperationMgr::canAbortOperation() { ModuleBase_Operation* anOperation = currentOperation(); if (anOperation && anOperation->isModified()) { - int anAnswer = QMessageBox::question(qApp->activeWindow(), tr("Cancel operation"), - tr("Operation %1 will be cancelled. Continue?").arg(anOperation->id()), - QMessageBox::Yes, QMessageBox::No); - return anAnswer == QMessageBox::Yes; + int anAnswer = QMessageBox::question( + qApp->activeWindow(), tr("Cancel operation"), + tr("Operation %1 will be cancelled. Continue?").arg(anOperation->id()), QMessageBox::Yes, + QMessageBox::No); + return anAnswer == QMessageBox::Yes; } return true; } @@ -186,7 +180,7 @@ void XGUI_OperationMgr::onOperationStopped() { ModuleBase_Operation* aSenderOperation = dynamic_cast(sender()); ModuleBase_Operation* anOperation = currentOperation(); - if (!aSenderOperation || !anOperation || aSenderOperation != anOperation ) + if (!aSenderOperation || !anOperation || aSenderOperation != anOperation) return; myOperations.removeAll(anOperation); @@ -198,16 +192,17 @@ void XGUI_OperationMgr::onOperationStopped() ModuleBase_Operation* aResultOp = 0; QListIterator anIt(myOperations); anIt.toBack(); - while(anIt.hasPrevious()) - { + while (anIt.hasPrevious()) { ModuleBase_Operation* anOp = anIt.previous(); if (anOp) { aResultOp = anOp; break; } } - if (aResultOp) + if (aResultOp) { resumeOperation(aResultOp); + validateCurrentOperation(); + } } void XGUI_OperationMgr::onKeyReleased(const std::string& theName, QKeyEvent* theEvent)