#include <ModuleBase_IViewer.h>
#include "ModuleBase_OperationDescription.h"
#include "ModuleBase_OperationFeature.h"
+#include "ModuleBase_Tools.h"
#include "ModelAPI_CompositeFeature.h"
#include "ModelAPI_Session.h"
#include <QApplication>
#include <QKeyEvent>
+//#define DEBUG_CURRENT_FEATURE
+
XGUI_OperationMgr::XGUI_OperationMgr(QObject* theParent,
ModuleBase_IWorkshop* theWorkshop)
: QObject(theParent), myIsApplyEnabled(false), myWorkshop(theWorkshop)
QListIterator<ModuleBase_Operation*> anIt(myOperations);
anIt.toBack();
ModuleBase_Operation* aPreviousOperation = 0;
- while (anIt.hasPrevious()) {
+ while (anIt.hasPrevious() && !isGranted) {
ModuleBase_Operation* anOp = anIt.previous();
if (anOp)
isGranted = anOp->isGranted(theId);
// is disabled, sketch entity is disabled as extrusion cut is created earliest then sketch.
// As a result the sketch disappears from the viewer. However after commit it is displayed back.
aFOperation->setPreviousCurrentFeature(aDoc->currentFeature(false));
+
+#ifdef DEBUG_CURRENT_FEATURE
+ FeaturePtr aFeature = aFOperation->feature();
+ QString aKind = aFeature ? aFeature->getKind().c_str() : "";
+ qDebug(QString("onBeforeOperationStarted(), edit operation = %1, feature = %2")
+ .arg(aFOperation->isEditOperation())
+ .arg(ModuleBase_Tools::objectInfo(aFeature)).toStdString().c_str());
+
+ qDebug(QString("\tdocument->currentFeature(false) = %1").arg(
+ ModuleBase_Tools::objectInfo(ModelAPI_Session::get()->activeDocument()->currentFeature(false))).toStdString().c_str());
+#endif
+
if (aFOperation->isEditOperation()) // it should be performed by the feature edit only
// in create operation, the current feature is changed by addFeature()
aDoc->setCurrentFeature(aFOperation->feature(), false);
+
+#ifdef DEBUG_CURRENT_FEATURE
+ qDebug("\tdocument->setCurrentFeature");
+ qDebug(QString("\tdocument->currentFeature(false) = %1").arg(
+ ModuleBase_Tools::objectInfo(ModelAPI_Session::get()->activeDocument()->currentFeature(false))).toStdString().c_str());
+#endif
}
}
/// Restore the previous current feature
ModuleBase_OperationFeature* aFOperation = dynamic_cast<ModuleBase_OperationFeature*>(aCurrentOperation);
if (aFOperation) {
+#ifdef DEBUG_CURRENT_FEATURE
+ QString aKind = aFOperation->feature()->getKind().c_str();
+ qDebug(QString("onBeforeOperationCommitted(), edit operation = %1, feature = %2")
+ .arg(aFOperation->isEditOperation())
+ .arg(ModuleBase_Tools::objectInfo(aFOperation->feature())).toStdString().c_str());
+
+ qDebug(QString("\tdocument->currentFeature(false) = %1").arg(
+ ModuleBase_Tools::objectInfo(ModelAPI_Session::get()->activeDocument()->currentFeature(false))).toStdString().c_str());
+#endif
+
if (aFOperation->isEditOperation()) {
/// Restore the previous current feature
setCurrentFeature(aFOperation->previousCurrentFeature());
if (myOperations.front() != aFOperation)
setCurrentFeature(aFOperation->previousCurrentFeature());
}
+#ifdef DEBUG_CURRENT_FEATURE
+ qDebug("\tdocument->setCurrentFeature");
+ qDebug(QString("\tdocument->currentFeature(false) = %1").arg(
+ ModuleBase_Tools::objectInfo(ModelAPI_Session::get()->activeDocument()->currentFeature(false))).toStdString().c_str());
+#endif
}
}
ModuleBase_IPropertyPanel* aPanel = aOperation->propertyPanel();
ModuleBase_ModelWidget* aActiveWgt = aPanel->activeWidget();
if (!aActiveWgt || !aActiveWgt->processEnter()) {
- if (!myWorkshop->module()->processEnter(aActiveWgt->attributeID())) {
+ if (!myWorkshop->module()->processEnter(aActiveWgt ? aActiveWgt->attributeID() : "")) {
ModuleBase_OperationFeature* aFOperation = dynamic_cast<ModuleBase_OperationFeature*>(currentOperation());
if (!aFOperation || myWorkshop->module()->getFeatureError(aFOperation->feature(), false).isEmpty()) {
emit keyEnterReleased();