#include "ModuleBase_IWorkshop.h"
#include "ModuleBase_IModule.h"
+#include "ModelAPI_CompositeFeature.h"
+#include "ModelAPI_Session.h"
+
#include <QMessageBox>
#include <QApplication>
#include <QKeyEvent>
bool XGUI_OperationMgr::commitAllOperations()
{
+ bool isCompositeCommitted = false;
while (hasOperation()) {
+ ModuleBase_Operation* anOperation = currentOperation();
if (isApplyEnabled()) {
onCommitOperation();
} else {
- currentOperation()->abort();
+ anOperation->abort();
}
+ FeaturePtr aFeature = anOperation->feature();
+ CompositeFeaturePtr aComposite =
+ std::dynamic_pointer_cast<ModelAPI_CompositeFeature>(aFeature);
+ isCompositeCommitted = aComposite.get();
+ if (isCompositeCommitted)
+ break;
}
return true;
}
return myIsApplyEnabled;
}
+bool XGUI_OperationMgr::isParentOperationValid() const
+{
+ bool isValid = false;
+ // the enable state of the parent operation of the nested one is defined by the rules that
+ // firstly there are nested operations and secondly the parent operation is valid
+ ModuleBase_Operation* aPrevOp;
+ Operations::const_iterator anIt = myOperations.end();
+ if (anIt != myOperations.begin()) { // there are items in the operations list
+ --anIt;
+ aPrevOp = *anIt; // the last top operation, the operation which is started
+ if (anIt != myOperations.begin()) { // find the operation where the started operation is nested
+ --anIt;
+ aPrevOp = *anIt;
+ }
+ }
+ return aPrevOp && aPrevOp->isValid();
+}
+
bool XGUI_OperationMgr::canStopOperation()
{
ModuleBase_Operation* anOperation = currentOperation();
{
ModuleBase_Operation* aSenderOperation = dynamic_cast<ModuleBase_Operation*>(sender());
- // the enable state of the parent operation of the nested one is defined by the rules that
- // firstly there are nested operations and secondly the parent operation is valid
- ModuleBase_Operation* aPrevOp;
- Operations::const_iterator anIt = myOperations.end();
- if (anIt != myOperations.begin()) { // there are items in the operations list
- --anIt;
- aPrevOp = *anIt; // the last top operation, the operation which is started
- if (anIt != myOperations.begin()) { // find the operation where the started operation is nested
- --anIt;
- aPrevOp = *anIt;
- }
- }
- bool isNestedOk = (myOperations.count() >= 1) && aPrevOp->isValid();
- emit nestedStateChanged(isNestedOk);
+ bool aParentValid = isParentOperationValid();
+ // in order to apply is enabled only if there are modifications in the model
+ // e.g. sketch can be applyed only if at least one nested element modification is finished
+ bool aCanUndo = ModelAPI_Session::get()->canUndo();
+ emit nestedStateChanged(aParentValid && aCanUndo);
+
emit operationStarted(aSenderOperation);
}
void XGUI_OperationMgr::onOperationCommitted()
{
ModuleBase_Operation* aSenderOperation = dynamic_cast<ModuleBase_Operation*>(sender());
- emit nestedStateChanged(myOperations.count() >= 1);
+ // in order to apply is enabled only if there are modifications in the model
+ // e.g. sketch can be applyed only if at least one nested element create is finished
+ bool aCanUndo = ModelAPI_Session::get()->canUndo();
+ emit nestedStateChanged(myOperations.count() >= 1 && aCanUndo);
emit operationCommitted(aSenderOperation);
}
for (int i = 0; i < theTimes; ++i) {
aMgr->undo();
}
- updateCommandStatus();
+ updateCompositeActionState();
+}
+
+//******************************************************
+void XGUI_Workshop::updateCompositeActionState()
+{
+ // in order to apply is enabled only if there are modifications in the model
+ // e.g. sketch can be applyed only if at least one nested element create is finished
+ bool aCanUndo = ModelAPI_Session::get()->canUndo();
+ bool aParentValid = operationMgr()->isParentOperationValid();
+
+ QAction* aAcceptAllAct = myActionsMgr->operationStateAction(XGUI_ActionsMgr::AcceptAll);
+ aAcceptAllAct->setEnabled(aParentValid && aCanUndo);
}
//******************************************************