X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_OperationMgr.cpp;h=a8f68277b5aa2266d32b6cb4f4d6c4b33730a9d8;hb=dfdb2899a4cb4eaea4cdce45fa7c05ec0c5c807a;hp=04559839683a23f29219419d68b8b5a8652acabe;hpb=a2842944364eb110dfb81b3252e34820cce8c628;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_OperationMgr.cpp b/src/XGUI/XGUI_OperationMgr.cpp index 045598396..a8f68277b 100644 --- a/src/XGUI/XGUI_OperationMgr.cpp +++ b/src/XGUI/XGUI_OperationMgr.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2014-20xx CEA/DEN, EDF R&D --> + // File: XGUI_OperationMgr.h // Created: 20 Apr 2014 // Author: Natalia ERMOLAEVA @@ -11,10 +13,8 @@ #include XGUI_OperationMgr::XGUI_OperationMgr(QObject* theParent) - : QObject(theParent) + : QObject(theParent), myIsValidationLock(false) { - // listen to Escape signal to stop the current operation - qApp->installEventFilter(this); } XGUI_OperationMgr::~XGUI_OperationMgr() @@ -38,6 +38,25 @@ bool XGUI_OperationMgr::hasOperation() const return !myOperations.isEmpty() && (myOperations.last() != NULL); } +bool XGUI_OperationMgr::hasOperation(const QString& theId) const +{ + foreach(ModuleBase_Operation* aOp, myOperations) { + if (aOp->id() == theId) + return true; + } + return false; +} + +ModuleBase_Operation* XGUI_OperationMgr::findOperation(const QString& theId) const +{ + foreach(ModuleBase_Operation* aOp, myOperations) { + if (aOp->id() == theId) + return aOp; + } + return 0; +} + + int XGUI_OperationMgr::operationsCount() const { return myOperations.count(); @@ -68,8 +87,8 @@ bool XGUI_OperationMgr::eventFilter(QObject *theObject, QEvent *theEvent) { if (theEvent->type() == QEvent::KeyRelease) { QKeyEvent* aKeyEvent = dynamic_cast(theEvent); - if(aKeyEvent && onKeyReleased(aKeyEvent)) { - return true; + if(aKeyEvent) { + return onKeyReleased(aKeyEvent); } } return QObject::eventFilter(theObject, theEvent); @@ -77,16 +96,17 @@ bool XGUI_OperationMgr::eventFilter(QObject *theObject, QEvent *theEvent) bool XGUI_OperationMgr::startOperation(ModuleBase_Operation* theOperation) { - if (!canStartOperation(theOperation)) - return false; - + if (hasOperation()) + currentOperation()->postpone(); myOperations.append(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(started()), SLOT(onOperationStarted())); + connect(theOperation, SIGNAL(aborted()), SLOT(onOperationAborted())); + connect(theOperation, SIGNAL(committed()), SLOT(onOperationCommitted())); + connect(theOperation, SIGNAL(stopped()), SLOT(onOperationStopped())); + connect(theOperation, SIGNAL(resumed()), SLOT(onOperationResumed())); + connect(theOperation, SIGNAL(activatedByPreselection()), + SIGNAL(operationActivatedByPreselection())); theOperation->start(); onValidateOperation(); @@ -119,7 +139,7 @@ void XGUI_OperationMgr::onValidateOperation() if (!hasOperation()) return; ModuleBase_Operation* anOperation = currentOperation(); - if(anOperation) { + if(anOperation && (!myIsValidationLock)) { bool isValid = anOperation->isValid(); emit operationValidated(isValid); } @@ -139,12 +159,12 @@ void XGUI_OperationMgr::resumeOperation(ModuleBase_Operation* theOperation) theOperation->resume(); } -bool XGUI_OperationMgr::canStartOperation(ModuleBase_Operation* theOperation) +bool XGUI_OperationMgr::canStartOperation(QString theId) { bool aCanStart = true; ModuleBase_Operation* aCurrentOp = currentOperation(); if (aCurrentOp) { - if (!aCurrentOp->isGranted(theOperation)) { + if (!aCurrentOp->isGranted(theId)) { if (canAbortOperation()) { aCurrentOp->abort(); } else { @@ -187,6 +207,30 @@ bool XGUI_OperationMgr::canAbortOperation() return true; } +void XGUI_OperationMgr::onOperationStarted() +{ + ModuleBase_Operation* aSenderOperation = dynamic_cast(sender()); + emit operationStarted(aSenderOperation); +} + +void XGUI_OperationMgr::onOperationAborted() +{ + ModuleBase_Operation* aSenderOperation = dynamic_cast(sender()); + emit operationAborted(aSenderOperation); +} + +void XGUI_OperationMgr::onOperationCommitted() +{ + ModuleBase_Operation* aSenderOperation = dynamic_cast(sender()); + emit operationCommitted(aSenderOperation); +} + +void XGUI_OperationMgr::onOperationResumed() +{ + ModuleBase_Operation* aSenderOperation = dynamic_cast(sender()); + emit operationResumed(aSenderOperation); +} + void XGUI_OperationMgr::onOperationStopped() { ModuleBase_Operation* aSenderOperation = dynamic_cast(sender()); @@ -222,15 +266,9 @@ bool XGUI_OperationMgr::onKeyReleased(QKeyEvent* theEvent) ModuleBase_Operation* anOperation = currentOperation(); bool isAccepted = true; switch (theEvent->key()) { - case Qt::Key_Escape: { - onAbortOperation(); - } - break; case Qt::Key_Return: case Qt::Key_Enter: { - if(anOperation) { - anOperation->activateNextToCurrentWidget(); - } + emit keyEnterReleased(); commitOperation(); } break; @@ -238,15 +276,9 @@ bool XGUI_OperationMgr::onKeyReleased(QKeyEvent* theEvent) isAccepted = false; break; } - if(anOperation) { - anOperation->keyReleased(theEvent->key()); - } + //if(anOperation) { + // anOperation->keyReleased(theEvent->key()); + //} return isAccepted; } -void XGUI_OperationMgr::onWidgetActivated(ModuleBase_ModelWidget* theWidget) -{ - ModuleBase_Operation* anOperation = currentOperation(); - if (anOperation) - anOperation->onWidgetActivated(theWidget); -}