X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_Workshop.cpp;h=653b8b2f4f1d626193ceebc928565af4a74e4c29;hb=56aad276ca5f59258c71ae83e7087017732a9959;hp=aff1c707a70c6907a297cabbcca8426b99e8a549;hpb=89fa8a170b13e1defce5279ff4b03032c6cbb9cc;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_Workshop.cpp b/src/XGUI/XGUI_Workshop.cpp index aff1c707a..653b8b2f4 100755 --- a/src/XGUI/XGUI_Workshop.cpp +++ b/src/XGUI/XGUI_Workshop.cpp @@ -1,6 +1,23 @@ -// Copyright (C) 2014-20xx CEA/DEN, EDF R&D --> +// Copyright (C) 2014-2017 CEA/DEN, EDF R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or +// email : webmaster.salome@opencascade.com +// -//#include "XGUI_Constants.h" #include "XGUI_Workshop.h" #include "XGUI_ActionsMgr.h" @@ -47,6 +64,7 @@ #include #include #include +#include #include #include #include @@ -58,7 +76,6 @@ #include #include -#include #include #include #include @@ -80,12 +97,19 @@ #include #include #include -#include #include #include +#include +#include #include +#include +#ifdef BEFORE_TRIHEDRON_PATCH +#include +#include +#endif + #include #include #include @@ -103,16 +127,14 @@ #include -#ifdef VINSPECTOR -#include -#include -static bool VInspector_FirstCall = true; -#endif - -#ifdef DFBROWSER +#ifdef TINSPECTOR #include -#include -static bool DFBrowser_FirstCall = true; +#include +#include +#include +static TInspector_Communicator* MyTCommunicator; +static Handle(VInspector_CallBack) MyVCallBack; + #endif #ifdef _DEBUG @@ -231,16 +253,8 @@ XGUI_Workshop::XGUI_Workshop(XGUI_SalomeConnector* theConnector) ModelAPI_ResultConstruction::DEFAULT_COLOR()); Config_PropManager::registerProp("Visualization", "result_part_color", "Part color", Config_Prop::Color, ModelAPI_ResultPart::DEFAULT_COLOR()); - - Config_PropManager::registerProp("Visualization", "body_deflection", - "Body deflection coefficient", - Config_Prop::Double, - ModelAPI_ResultBody::DEFAULT_DEFLECTION()); - - Config_PropManager::registerProp("Visualization", "construction_deflection", - "Construction deflection coefficient", - Config_Prop::Double, - ModelAPI_ResultConstruction::DEFAULT_DEFLECTION()); + Config_PropManager::registerProp("Visualization", "result_field_color", "Field color", + Config_Prop::Color, ModelAPI_ResultField::DEFAULT_COLOR()); if (ModuleBase_Preferences::resourceMgr()->booleanValue("Viewer", "face-selection", true)) myViewerSelMode.append(TopAbs_FACE); @@ -334,6 +348,24 @@ void XGUI_Workshop::deactivateModule() XGUI_Displayer* aDisplayer = displayer(); QObjectPtrList aDisplayed = aDisplayer->displayedObjects(); aDisplayer->deactivateObjects(aDisplayed, true); + Handle(AIS_InteractiveContext) aContext = viewer()->AISContext(); + Handle(AIS_Trihedron) aTrihedron = Handle(AIS_Trihedron)::DownCast(aDisplayer->getTrihedron()); + /// deactivate trihedron in selection modes + TColStd_ListOfInteger aTColModes; + aContext->ActivatedModes(aTrihedron, aTColModes); + TColStd_ListIteratorOfListOfInteger itr( aTColModes ); + for (; itr.More(); itr.Next() ) { + Standard_Integer aMode = itr.Value(); + aContext->Deactivate(aTrihedron, aMode); + } +#ifdef BEFORE_TRIHEDRON_PATCH + /// Trihedron problem: objects stayed in the viewer, should be removed manually + /// otherwise in SALOME happens crash by HideAll in the viewer + aContext->Remove(aTrihedron->Position(), true); + aContext->Remove(aTrihedron->Axis(), true); + aContext->Remove(aTrihedron->XAxis(), true); + aContext->Remove(aTrihedron->YAxis(), true); +#endif myOperationMgr->deactivate(); } @@ -571,14 +603,25 @@ void XGUI_Workshop::fillPropertyPanel(ModuleBase_Operation* theOperation) ModuleBase_Tools::flushUpdated(aFeature); // update visible state of Preview button + std::shared_ptr aFeatureInfo; #ifdef HAVE_SALOME - bool anIsAutoPreview = - mySalomeConnector->featureInfo(aFeatureKind.c_str())->isAutoPreview(); + aFeatureInfo = mySalomeConnector->featureInfo(aFeatureKind.c_str()); #else AppElements_MainMenu* aMenuBar = mainWindow()->menuObject(); AppElements_Command* aCommand = aMenuBar->feature(aFeatureKind.c_str()); - bool anIsAutoPreview = aCommand && aCommand->featureMessage()->isAutoPreview(); + if (aCommand) + aFeatureInfo = aCommand->featureMessage(); #endif + bool anIsAutoPreview = true; + if (aFeatureInfo.get()) + anIsAutoPreview = aFeatureInfo->isAutoPreview(); + else { + std::string aXmlCfg, aDescription; + module()->getXMLRepresentation(aFeatureKind, aXmlCfg, aDescription); + ModuleBase_WidgetFactory aFactory(aXmlCfg, moduleConnector()); + anIsAutoPreview = aFactory.widgetAPI()->getBooleanAttribute(FEATURE_AUTO_PREVIEW, true); + } + if (!anIsAutoPreview) { myPropertyPanel->findButton(PROP_PANEL_PREVIEW)->setVisible(true); // send signal about preview should not be computed automatically, click on preview @@ -792,6 +835,7 @@ void XGUI_Workshop::openDirectory(const QString& theDirectory) } QApplication::setOverrideCursor(Qt::WaitCursor); + module()->closeDocument(); SessionPtr aSession = ModelAPI_Session::get(); aSession->closeAll(); aSession->load(myCurrentDir.toLatin1().constData()); @@ -1248,7 +1292,6 @@ void XGUI_Workshop::showPropertyPanel() // in order to operation manager could process key events of the panel. // otherwise they are ignored. It happens only if the same(activateWindow) is // not happened by property panel activation(e.g. resume operation of Sketch) - ModuleBase_Tools::activateWindow(myPropertyPanel, "XGUI_Workshop::showPropertyPanel()"); ModuleBase_Tools::setFocus(myPropertyPanel, "XGUI_Workshop::showPropertyPanel()"); } @@ -1268,7 +1311,6 @@ void XGUI_Workshop::hidePropertyPanel() // are processed by this console. For example Undo actions. // It is possible that this code is to be moved to SHAPER package QMainWindow* aDesktop = desktop(); - ModuleBase_Tools::activateWindow(aDesktop, "XGUI_Workshop::hidePropertyPanel()"); ModuleBase_Tools::setFocus(aDesktop, "XGUI_Workshop::showPropertyPanel()"); } @@ -1315,12 +1357,16 @@ void XGUI_Workshop::onContextMenuCommand(const QString& theId, bool isChecked) else if (theId == "SHOW_CMD") { showObjects(aObjects, true); mySelector->updateSelectionBy(ModuleBase_ISelection::Browser); + updateCommandStatus(); } - else if (theId == "HIDE_CMD") + else if (theId == "HIDE_CMD") { showObjects(aObjects, false); + updateCommandStatus(); + } else if (theId == "SHOW_ONLY_CMD") { showOnlyObjects(aObjects); mySelector->updateSelectionBy(ModuleBase_ISelection::Browser); + updateCommandStatus(); } else if (theId == "SHADING_CMD") setDisplayMode(aObjects, XGUI_Displayer::Shading); @@ -1333,6 +1379,11 @@ void XGUI_Workshop::onContextMenuCommand(const QString& theId, bool isChecked) aObj->setDisplayed(false); } Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_OBJECT_TO_REDISPLAY)); +#ifdef HAVE_SALOME + //issue #2159 Hide all incomplete behavior + viewer()->eraseAll(); +#endif + updateCommandStatus(); } else if (theId == "SELECT_VERTEX_CMD") { setViewerSelectionMode(TopAbs_VERTEX); } else if (theId == "SELECT_EDGE_CMD") { @@ -1349,30 +1400,38 @@ void XGUI_Workshop::onContextMenuCommand(const QString& theId, bool isChecked) } else if (theId == "SHOW_FEATURE_CMD") { highlightFeature(aObjects); } -#ifdef VINSPECTOR - else if (theId == "VINSPECTOR_VIEW") { - if (VInspector_FirstCall) { - VInspectorAPI_Communicator* aCommunicator = VInspectorAPI_PluginMgr::activateVInspector( - "VInspector.dll", viewer()->AISContext()); - displayer()->setCallBack(aCommunicator->getCallBack()); - #ifndef HAVE_SALOME - AppElements_Viewer* aViewer = mainWindow()->viewer(); - if (aViewer) - aViewer->setCallBack(aCommunicator->getCallBack()); - #endif - VInspector_FirstCall = false; - } - } -#endif -#ifdef DFBROWSER - else if (theId == "DFBROWSER_VIEW") { - if (DFBrowser_FirstCall) { - Handle(CDF_Application) anApplication = CDF_Session::CurrentSession()->CurrentApplication(); - - DFBrowserAPI_Communicator* aCommunicator = - DFBrowserAPI_Communicator::loadPluginLibrary("DFBrowser.dll"); - aCommunicator->setApplication(anApplication); - DFBrowser_FirstCall = false; +#ifdef TINSPECTOR + else if (theId == "TINSPECTOR_VIEW") { + Handle(CDF_Application) anApplication = CDF_Session::CurrentSession()->CurrentApplication(); + if (!anApplication.IsNull()) + { + if (!MyTCommunicator) + { + MyTCommunicator = new TInspector_Communicator(); + + NCollection_List aParameters; + aParameters.Append(anApplication); + Handle(AIS_InteractiveContext) aContext = viewer()->AISContext(); + if (!aContext.IsNull()) + aParameters.Append(aContext); + + MyVCallBack = new VInspector_CallBack(); + myDisplayer->setCallBack(MyVCallBack); + #ifndef HAVE_SALOME + AppElements_Viewer* aViewer = mainWindow()->viewer(); + if (aViewer) + aViewer->setCallBack(MyVCallBack); + #endif + aParameters.Append(MyVCallBack); + + MyTCommunicator->RegisterPlugin("SMBrowser"); // custom plugin to view ModelAPI + + MyTCommunicator->Init(aParameters); + MyTCommunicator->Activate("SMBrowser"); // to have button in TInspector + MyTCommunicator->Activate("TKVInspector"); // to have filled callback by model + MyTCommunicator->Activate("TKDFBrowser"); + } + MyTCommunicator->SetVisible(true); } } #endif @@ -1420,7 +1479,9 @@ void XGUI_Workshop::deleteObjects() bool hasFeature = false; bool hasParameter = false; bool hasCompositeOwner = false; - ModuleBase_Tools::checkObjects(anObjects, hasResult, hasFeature, hasParameter, hasCompositeOwner); + bool hasResultInHistory = false; + ModuleBase_Tools::checkObjects(anObjects, hasResult, hasFeature, hasParameter, hasCompositeOwner, + hasResultInHistory); if (!(hasFeature || hasParameter)) return; @@ -1977,17 +2038,7 @@ for (int i = 0; i < aDoc->size(aGroupName); i++) { \ void XGUI_Workshop::showObjects(const QObjectPtrList& theList, bool isVisible) { foreach (ObjectPtr aObj, theList) { - /* - ResultPartPtr aPartRes = std::dynamic_pointer_cast(aObj); - if (aPartRes) { - DocumentPtr aDoc = aPartRes->partDoc(); - SET_DISPLAY_GROUP(ModelAPI_ResultBody::group(), isVisible) - SET_DISPLAY_GROUP(ModelAPI_ResultConstruction::group(), isVisible) - SET_DISPLAY_GROUP(ModelAPI_ResultGroup::group(), isVisible) - } else { - */ - aObj->setDisplayed(isVisible); - //} + aObj->setDisplayed(isVisible); } Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_OBJECT_TO_REDISPLAY)); } @@ -2001,23 +2052,16 @@ void XGUI_Workshop::showOnlyObjects(const QObjectPtrList& theList) if (module()->canEraseObject(aObj)) aObj->setDisplayed(false); } +#ifdef HAVE_SALOME + //issue #2159 Hide all incomplete behavior + viewer()->eraseAll(); +#endif // Show only objects from the list foreach (ObjectPtr aObj, theList) { - /* - ResultPartPtr aPartRes = std::dynamic_pointer_cast(aObj); - if (aPartRes) { - DocumentPtr aDoc = aPartRes->partDoc(); - SET_DISPLAY_GROUP(ModelAPI_ResultBody::group(), true) - SET_DISPLAY_GROUP(ModelAPI_ResultConstruction::group(), true) - SET_DISPLAY_GROUP(ModelAPI_ResultGroup::group(), true) - } else { - */ - aObj->setDisplayed(true); - //} + aObj->setDisplayed(true); } Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_OBJECT_TO_REDISPLAY)); - } @@ -2072,7 +2116,7 @@ void XGUI_Workshop::closeDocument() anOperation->abort(); anOperation = operationMgr()->currentOperation(); } - myDisplayer->closeLocalContexts(); + //myDisplayer->closeLocalContexts(); myDisplayer->eraseAll(); objectBrowser()->clearContent(); @@ -2141,12 +2185,16 @@ void XGUI_Workshop::setStatusBarMessage(const QString& theMessage) void XGUI_Workshop::synchronizeViewer() { SessionPtr aMgr = ModelAPI_Session::get(); - DocumentPtr aDoc = aMgr->activeDocument(); + QList aDocs; + aDocs.append(aMgr->activeDocument()); + aDocs.append(aMgr->moduleDocument()); - synchronizeGroupInViewer(aDoc, ModelAPI_ResultConstruction::group(), false); - synchronizeGroupInViewer(aDoc, ModelAPI_ResultBody::group(), false); - synchronizeGroupInViewer(aDoc, ModelAPI_ResultPart::group(), false); - synchronizeGroupInViewer(aDoc, ModelAPI_ResultGroup::group(), false); + foreach(DocumentPtr aDoc, aDocs) { + synchronizeGroupInViewer(aDoc, ModelAPI_ResultConstruction::group(), false); + synchronizeGroupInViewer(aDoc, ModelAPI_ResultBody::group(), false); + synchronizeGroupInViewer(aDoc, ModelAPI_ResultPart::group(), false); + synchronizeGroupInViewer(aDoc, ModelAPI_ResultGroup::group(), false); + } } void XGUI_Workshop::synchronizeGroupInViewer(const DocumentPtr& theDoc,