From e2fd9a37154e8f53807f49fb3562beb15be9bc90 Mon Sep 17 00:00:00 2001 From: jfa Date: Thu, 16 Oct 2008 13:04:24 +0000 Subject: [PATCH] IMP 0019918: Re-open popup for imported shapes. Enable for multiple selection. --- src/GEOMGUI/GeometryGUI.cxx | 31 ++++++--- src/TransformationGUI/TransformationGUI.cxx | 70 +++++++++------------ 2 files changed, 51 insertions(+), 50 deletions(-) diff --git a/src/GEOMGUI/GeometryGUI.cxx b/src/GEOMGUI/GeometryGUI.cxx index d95a7d465..0efa80e7e 100644 --- a/src/GEOMGUI/GeometryGUI.cxx +++ b/src/GEOMGUI/GeometryGUI.cxx @@ -1433,26 +1433,37 @@ LightApp_Selection* GeometryGUI::createSelection() const void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title ) { SalomeApp_Module::contextMenuPopup(client, menu, title); + SALOME_ListIO lst; getApp()->selectionMgr()->selectedObjects(lst); + if (lst.Extent() < 1) + return; - if (lst.Extent() == 1) { - Handle(SALOME_InteractiveObject) io = lst.First(); - SalomeApp_Study* appStudy = dynamic_cast(application()->activeStudy()); - _PTR(Study) study = appStudy->studyDS(); + SalomeApp_Study* appStudy = dynamic_cast(application()->activeStudy()); + _PTR(Study) study = appStudy->studyDS(); + + bool isImported = true; + SALOME_ListIteratorOfListIO anIt (lst); + for (; anIt.More() && isImported; anIt.Next()) { + Handle(SALOME_InteractiveObject) io = anIt.Value(); _PTR(SObject) aSObj = study->FindObjectID(io->getEntry()); if (aSObj) { - // Set context menu title - if (client == "OCCViewer" || client == "VTKViewer") - title = QString(aSObj->GetName().c_str()); + if (lst.Extent() == 1) { + // Set context menu title + if (client == "OCCViewer" || client == "VTKViewer") + title = QString(aSObj->GetName().c_str()); + } - // Reload imported shape CORBA::Object_var anObj = GeometryGUI::ClientSObjectToObject(aSObj); GEOM::GEOM_Object_var aGeomObj = GEOM::GEOM_Object::_narrow(anObj); - if (!CORBA::is_nil(aGeomObj) && aGeomObj->GetType() == GEOM_IMPORT) - menu->addAction(action(5029)); + if (CORBA::is_nil(aGeomObj) || aGeomObj->GetType() != GEOM_IMPORT) + isImported = false; } } + + if (isImported) { + menu->addAction(action(5029)); // Reload imported shape + } } void GeometryGUI::createPreferences() diff --git a/src/TransformationGUI/TransformationGUI.cxx b/src/TransformationGUI/TransformationGUI.cxx index cd3a8f5f4..c7f74716a 100644 --- a/src/TransformationGUI/TransformationGUI.cxx +++ b/src/TransformationGUI/TransformationGUI.cxx @@ -35,6 +35,7 @@ #include #include #include +#include #include "TransformationGUI_MultiTranslationDlg.h" // Method MULTI TRANSLATION #include "TransformationGUI_MultiRotationDlg.h" // Method MULTI ROTATION @@ -102,57 +103,46 @@ bool TransformationGUI::OnGUIEvent( int theCommandID, SUIT_Desktop* parent ) break; case 5029: // RELOAD IMPORTED SHAPE { + SalomeApp_Study* anAppStudy = dynamic_cast(app->activeStudy()); + + GEOM::GEOM_ITransformOperations_var anOp = + GeometryGUI::GetGeomGen()->GetITransformOperations(anAppStudy->id()); + if (anOp->_is_nil()) return false; + + GEOM_Displayer aDisp (anAppStudy); + SUIT_Desktop* desk = app->desktop(); + QList wnds = desk->windows(); + LightApp_SelectionMgr* aSelMgr = app->selectionMgr(); SALOME_ListIO aSelList; aSelMgr->selectedObjects(aSelList); - if (aSelList.Extent() == 1) { + + SALOME_ListIteratorOfListIO aSelIt (aSelList); + for (; aSelIt.More(); aSelIt.Next()) { + Handle(SALOME_InteractiveObject) io = aSelIt.Value(); Standard_Boolean testResult = Standard_False; - GEOM::GEOM_Object_var aGeomObj = - GEOMBase::ConvertIOinGEOMObject(aSelList.First(), testResult); + GEOM::GEOM_Object_var aGeomObj = GEOMBase::ConvertIOinGEOMObject(io, testResult); if (testResult) { - SalomeApp_Study* anAppStudy = dynamic_cast(app->activeStudy()); - GEOM::GEOM_ITransformOperations_var anOp = - GeometryGUI::GetGeomGen()->GetITransformOperations(anAppStudy->id()); - if (!anOp->_is_nil()) { - anOp->RecomputeObject(aGeomObj); - GEOM_Displayer aDisp (anAppStudy); - //aDisp.Redisplay(aSelList.First()); - //aDisp.Display(aSelList.First()); - Handle(SALOME_InteractiveObject) theIO = aSelList.First(); - SUIT_Desktop* desk = app->desktop(); - QList wnds = desk->windows(); - SUIT_ViewWindow* wnd; - QListIterator it( wnds ); - while ( it.hasNext() && (wnd = it.next()) ) - { - SUIT_ViewManager* vman = wnd->getViewManager(); - if ( vman ) - { - SUIT_ViewModel* vmodel = vman->getViewModel(); - if ( vmodel ) - { - SALOME_View* view = dynamic_cast(vmodel); - if ( view ) - { - //if (view->isVisible(theIO) || view == GetActiveView()) - if (view->isVisible(theIO)) - { - //SALOME_Prs* prs = view->CreatePrs( theIO->getEntry() ); - //if ( prs ) { - // prs->Update(&aDisp); - // view->Repaint(); - //} - aDisp.Erase(theIO, false, false, view); - aDisp.Display(theIO, true, view); - } + anOp->RecomputeObject(aGeomObj); + + SUIT_ViewWindow* wnd; + QListIterator it (wnds); + while (it.hasNext() && (wnd = it.next())) + { + if (SUIT_ViewManager* vman = wnd->getViewManager()) { + if (SUIT_ViewModel* vmodel = vman->getViewModel()) { + if (SALOME_View* view = dynamic_cast(vmodel)) { + if (view->isVisible(io)) { + aDisp.Erase(io, false, false, view); + aDisp.Display(io, true, view); } + // ? Redisplay subshapes ? } } } - // ? Redisplay subshapes ? } } - } + } // for (; aSelIt.More(); aSelIt.Next()) } break; default: