+void XGUI_OperationMgr::onOperationTriggered(bool theState)
+{
+ ModuleBase_Operation* aSenderOperation = dynamic_cast<ModuleBase_Operation*>(sender());
+ if (aSenderOperation && !theState) {
+ ModuleBase_Operation* aCurrentOperation = currentOperation();
+ if (aSenderOperation == aCurrentOperation)
+ aCurrentOperation->abort();
+ else {
+ // it is possible to trigger upper operation(e.g. sketch, current is sketch line)
+ // all operation from the current to triggered should also be aborted
+ while(hasOperation()) {
+ ModuleBase_Operation* aCurrentOperation = currentOperation();
+ aCurrentOperation->abort();
+ if(aSenderOperation == aCurrentOperation)
+ break;
+ }
+ }
+ }
+}
+