-// Copyright (C) 2014-2019 CEA/DEN, EDF R&D
+// Copyright (C) 2014-2023 CEA, EDF
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
#include <ModuleBase_ISelection.h>
#include <ModuleBase_Operation.h>
-#include <ModuleBase_OperationAction.h>
#include <ModuleBase_OperationFeature.h>
#include <ModuleBase_ViewerPrs.h>
+#include <ModuleBase_IViewer.h>
#include <ModuleBase_Tools.h>
#include <XGUI_ModuleConnector.h>
#include <XGUI_DataModel.h>
#include <XGUI_OperationMgr.h>
#include <XGUI_ObjectsBrowser.h>
+#include <XGUI_Tools.h>
+#include <XGUI_ViewerProxy.h>
#include <Events_Loop.h>
#include <ModelAPI_Events.h>
#include <ModelAPI_Session.h>
#include <ModelAPI_ResultParameter.h>
-#include <ModelAPI_ResultConstruction.h>
#include <QMainWindow>
#include <QAction>
#include <QMenu>
#include <QEvent>
+#include <QApplication>
#include <TopoDS.hxx>
#include <BRep_Tool.hxx>
aAction = ModuleBase_Tools::createAction(QIcon(":icons/edit.png"), tr("Edit..."), aParent,
this, SLOT(onEdit(bool)));
myActions["EDIT_CMD"] = aAction;
+
+ aAction = ModuleBase_Tools::createAction(QIcon(":icons/activate.png"), tr("Load all parts"),
+ aParent, this, SLOT(onActivateAllParts()));
+ myActions["ACTIVATE_ALL_PARTS_CMD"] = aAction;
}
// Find coincident in these coordinates
ObjectPtr aObj = aPrsList.first()->object();
- FeaturePtr aFeature = ModelAPI_Feature::feature(aObj);
- FeaturePtr aCoincident = PartSet_Tools::findFirstCoincidence(aFeature, aSelPnt);
+ FeaturePtr aCoincident =
+ PartSet_Tools::findFirstCoincidence(ModelAPI_Feature::feature(aObj), aSelPnt);
// If we have coincidence then add Detach menu
if (aCoincident.get() != NULL) {
QList<FeaturePtr> aCoins;
theMenuActions[anIndex++] = aSubMenu->menuAction();
QAction* aAction;
int i = 0;
- foreach (FeaturePtr aCoins, myCoinsideLines) {
- QString anItemText = aCoins->data()->name().c_str();
+ foreach (FeaturePtr aCoinsL, myCoinsideLines) {
+ QString anItemText = QString::fromStdWString(aCoinsL->data()->name());
#ifdef _DEBUG
if (anIsAttributes[i])
anItemText += " [attribute]";
theStdActions["SHOW_CMD"]->setEnabled(false);
theStdActions["HIDE_CMD"]->setEnabled(false);
theStdActions["HIDEALL_CMD"]->setEnabled(false);
-
- ModuleBase_ISelection* aSelection = myModule->workshop()->selection();
- QList<ModuleBase_ViewerPrsPtr> aPrsList = aSelection->getSelected(ModuleBase_ISelection::Viewer);
- ResultConstructionPtr aResult;
- bool canBeDeleted = true;
- foreach(ModuleBase_ViewerPrsPtr aPrs, aPrsList) {
- aResult = std::dynamic_pointer_cast<ModelAPI_ResultConstruction>(aPrs->object());
- if (aResult.get() != NULL) {
- FeaturePtr aFeature = ModelAPI_Feature::feature(aPrs->object());
- canBeDeleted = !(!(aFeature->isInHistory()) && aResult->isInfinite());
- if (!canBeDeleted)
- break;
- }
- }
- theStdActions["DELETE_CMD"]->setEnabled(canBeDeleted);
}
}
std::shared_ptr<GeomAPI_Pnt2d> aPnt = PartSet_Tools::getCoincedencePoint(aConstrFeature);
if (aPnt.get() == NULL)
return;
- gp_Pnt aP = aPnt->impl<gp_Pnt>();
if (theRefPnt->isEqual(aPnt) && (!theOutList.contains(aConstrFeature))) {
theOutList.append(aConstrFeature);
}
if (aToDelFeatures.size() > 0) {
XGUI_ModuleConnector* aConnector = dynamic_cast<XGUI_ModuleConnector*>(myModule->workshop());
XGUI_Workshop* aWorkshop = aConnector->workshop();
- ModuleBase_Operation* anOperation = myModule->workshop()->currentOperation();
- ModuleBase_OperationAction* anOpAction = new ModuleBase_OperationAction(
- tr("Detach %1").arg(aLine->data()->name().c_str()), myModule);
- bool isSketchOp = PartSet_SketcherMgr::isSketchOperation(anOperation);
+ ModuleBase_Operation* anOpAction = new ModuleBase_Operation(tr("Detach %1").arg(
+ QString::fromStdWString(aLine->data()->name())), myModule);
XGUI_OperationMgr* anOpMgr = aConnector->workshop()->operationMgr();
// the active nested sketch operation should be aborted unconditionally
// the Delete action should be additionally granted for the Sketch operation
QAction* anAction = action("AUXILIARY_CMD");
//SessionPtr aMgr = ModelAPI_Session::get();
- ModuleBase_OperationAction* anOpAction = 0;
+ ModuleBase_Operation* anOpAction = 0;
XGUI_ModuleConnector* aConnector = dynamic_cast<XGUI_ModuleConnector*>(myModule->workshop());
XGUI_OperationMgr* anOpMgr = aConnector->workshop()->operationMgr();
if (isUseTransaction) {
- anOpAction = new ModuleBase_OperationAction(anAction->text(), myModule);
- bool isSketchOp = PartSet_SketcherMgr::isSketchOperation(anOperation);
+ anOpAction = new ModuleBase_Operation(anAction->text(), myModule);
bool isCommitted;
if (!anOpMgr->canStartOperation(anOpAction->id(), isCommitted))
anOpMgr->startOperation(anOpAction);
}
+ static const Events_ID anVisualEvent = Events_Loop::eventByName(EVENT_VISUAL_ATTRIBUTES);
if (anObjects.size() > 0) {
QObjectPtrList::const_iterator anIt = anObjects.begin(), aLast = anObjects.end();
for (; anIt != aLast; anIt++) {
aSketchFeature->data()->attribute(anAttribute));
if (anAuxiliaryAttr)
anAuxiliaryAttr->setValue(isChecked);
+ ModelAPI_EventCreator::get()->sendUpdated(aSketchFeature, anVisualEvent);
}
}
}
anOpMgr->commitOperation();
Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_OBJECT_UPDATED));
+ Events_Loop::loop()->flush(anVisualEvent);
}
bool PartSet_MenuMgr::canSetAuxiliary(bool& theValue) const
void PartSet_MenuMgr::activatePart(ResultPartPtr thePart) const
{
bool isFirstLoad = !thePart->partDoc().get();
+ ModuleBase_Tools::blockUpdateViewer(true);
thePart->activate();
if (isFirstLoad) {
XGUI_Workshop* aWorkshop = myModule->getWorkshop();
XGUI_ObjectsBrowser* aObjBrowser = aWorkshop->objectBrowser();
+ ModuleBase_Tools::setDisplaying(thePart);
+ Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_OBJECT_TO_REDISPLAY));
+ aObjBrowser->onSelectionChanged();
DocumentPtr aDoc = thePart->partDoc();
std::list<bool> aStates;
aDoc->restoreNodesState(aStates);
aObjBrowser->setStateForDoc(aDoc, aStates);
}
+ ModuleBase_Tools::blockUpdateViewer(false);
+}
+
+void PartSet_MenuMgr::onActivateAllParts()
+{
+ SessionPtr aMgr = ModelAPI_Session::get();
+ if (aMgr->isOperation())
+ return;
+
+ DocumentPtr aDoc = aMgr->moduleDocument();
+ int aNbParts = aDoc->size(ModelAPI_ResultPart::group());
+ QList<ResultPartPtr> aPartsToLoad;
+ for (int i = 0; i < aNbParts; i++) {
+ ObjectPtr aObj = aDoc->object(ModelAPI_ResultPart::group(), i);
+ ResultPartPtr aPartRes = std::dynamic_pointer_cast<ModelAPI_ResultPart>(aObj);
+ if (!aPartRes->partDoc().get())
+ aPartsToLoad.append(aPartRes);
+ }
+ if (!aPartsToLoad.isEmpty()) {
+ QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
+ aMgr->startOperation("All Parts loading");
+ foreach(ResultPartPtr aPartRes, aPartsToLoad) {
+ aPartRes->loadPart();
+ }
+ aMgr->finishOperation();
+
+ XGUI_Workshop* aWorkshop = myModule->getWorkshop();
+ XGUI_ObjectsBrowser* aObjBrowser = aWorkshop->objectBrowser();
+ aObjBrowser->update();
+ aWorkshop->viewer()->update();
+ aWorkshop->updateCommandStatus();
+ QApplication::restoreOverrideCursor();
+ }
}
void PartSet_MenuMgr::onActivatePartSet(bool)
if (isNewTransaction)
aMgr->startOperation("Activation");
aMgr->setActiveDocument(aMgr->moduleDocument());
- if (isNewTransaction) aMgr->finishOperation();
+ if (isNewTransaction)
+ aMgr->finishOperation();
myModule->workshop()->updateCommandStatus();
+ myModule->workshop()->viewer()->update();
}
void PartSet_MenuMgr::grantedOperationIds(ModuleBase_Operation* theOperation,