X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FGEOMBase%2FGEOMBase_Helper.cxx;h=fe51c488fd99f95035a985c9d5f75f2aa5e6d24f;hb=611ec94e27c211452a3098d014709d519b954e51;hp=5bb5d91e811bdd473f0322e8af9203919f48919f;hpb=d3dd282390888d7dc091ba2c2ffe7923bd7458e6;p=modules%2Fgeom.git diff --git a/src/GEOMBase/GEOMBase_Helper.cxx b/src/GEOMBase/GEOMBase_Helper.cxx index 5bb5d91e8..fe51c488f 100755 --- a/src/GEOMBase/GEOMBase_Helper.cxx +++ b/src/GEOMBase/GEOMBase_Helper.cxx @@ -1,23 +1,23 @@ // GEOM GEOMGUI : GUI for Geometry component // // Copyright (C) 2004 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// 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. -// -// 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.org +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// 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. +// +// 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 // // // @@ -26,39 +26,51 @@ // Module : GEOM // $Header$ +#include + #include "GEOMBase_Helper.h" #include "GEOMBase.h" #include "GEOM_Operation.h" #include "GeometryGUI.h" #include "GEOM_Displayer.h" #include "GEOMImpl_Types.hxx" -#include "QAD_Study.h" -#include "QAD_Application.h" -#include "QAD_Desktop.h" -#include "QAD_MessageBox.h" -#include "QAD_ViewFrame.h" -#include "QAD_RightFrame.h" -#include "QAD_WaitCursor.h" -#include "SALOMEGUI_QtCatchCorbaException.hxx" + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include #include #include using namespace std; +#include + + //================================================================ // Function : getActiveView -// Purpose : Get active study frame, returns 0 if no open study frame +// Purpose : Get active view window, returns 0 if no open study frame //================================================================ -static QAD_ViewFrame* getActiveView() +static SUIT_ViewWindow* getActiveView() { - QAD_Study* activeStudy = QAD_Application::getDesktop()->getActiveStudy(); - if ( activeStudy ) { - QAD_StudyFrame* sf = activeStudy->getActiveStudyFrame(); - if ( sf ) { - return sf->getRightFrame()->getViewFrame(); - } - } + SUIT_Study* activeStudy = SUIT_Session::session()->activeApplication()->activeStudy(); + if ( activeStudy ) + return SUIT_Session::session()->activeApplication()->desktop()->activeWindow(); + return 0; } @@ -69,25 +81,27 @@ static QAD_ViewFrame* getActiveView() //================================================================ GEOM::GEOM_Gen_ptr GEOMBase_Helper::getGeomEngine() { - Engines::Component_var comp = QAD_Application::getDesktop()->getEngine("FactoryServer", "GEOM"); - return GEOM::GEOM_Gen::_narrow(comp); + return GeometryGUI::GetGeomGen(); } //================================================================ // Function : GEOMBase_Helper // Purpose : //================================================================ -GEOMBase_Helper::GEOMBase_Helper() - : myViewFrame( 0 ), myDisplayer( 0 ), myCommand( 0 ), isPreview( false ) +GEOMBase_Helper::GEOMBase_Helper( SUIT_Desktop* desktop ) + : myDesktop( desktop ), myViewWindow( 0 ), myDisplayer( 0 ), myCommand( 0 ), isPreview( false ) { } //================================================================ // Function : ~GEOMBase_Helper -// Purpose : +// Purpose : //================================================================ GEOMBase_Helper::~GEOMBase_Helper() { + if ( !SUIT_Session::session()->activeApplication()->desktop() ) + return; + if ( myPreview.size() ) erasePreview(); if ( hasCommand() ) @@ -95,12 +109,13 @@ GEOMBase_Helper::~GEOMBase_Helper() globalSelection( GEOM_ALLOBJECTS, true ); - delete myDisplayer; + if (myDisplayer) + delete myDisplayer; } //================================================================ // Function : display -// Purpose : +// Purpose : //================================================================ void GEOMBase_Helper::display( const ObjectList& objList, const bool updateView ) { @@ -133,7 +148,7 @@ void GEOMBase_Helper::display( GEOM::GEOM_Object_ptr object, const bool updateVi //================================================================ // Function : erase -// Purpose : +// Purpose : //================================================================ void GEOMBase_Helper::erase( const ObjectList& objList, const bool updateView ) { @@ -147,7 +162,7 @@ void GEOMBase_Helper::erase( const ObjectList& objList, const bool updateView ) //================================================================ // Function : erase -// Purpose : +// Purpose : //================================================================ void GEOMBase_Helper::erase( GEOM::GEOM_Object_ptr object, const bool updateView ) { @@ -160,9 +175,9 @@ void GEOMBase_Helper::erase( GEOM::GEOM_Object_ptr object, const bool updateView //================================================================ // Function : redisplay -// Purpose : +// Purpose : //================================================================ -void GEOMBase_Helper::redisplay( const ObjectList& objList, +void GEOMBase_Helper::redisplay( const ObjectList& objList, const bool withChildren, const bool updateView ) { @@ -176,9 +191,9 @@ void GEOMBase_Helper::redisplay( const ObjectList& objList, //================================================================ // Function : redisplay -// Purpose : +// Purpose : //================================================================ -void GEOMBase_Helper::redisplay( GEOM::GEOM_Object_ptr object, +void GEOMBase_Helper::redisplay( GEOM::GEOM_Object_ptr object, const bool withChildren, const bool updateView ) { @@ -187,23 +202,26 @@ void GEOMBase_Helper::redisplay( GEOM::GEOM_Object_ptr object, // Default color will be used getDisplayer()->UnsetColor(); getDisplayer()->UnsetWidth(); - + // Enable activisation of selection getDisplayer()->SetToActivate( true ); - + string entry = getEntry( object ); - getDisplayer()->Redisplay( new SALOME_InteractiveObject( entry.c_str(), "GEOM", strdup( GEOMBase::GetName( object ) ) ), false ); + getDisplayer()->Redisplay(new SALOME_InteractiveObject + (entry.c_str(), "GEOM", strdup(GEOMBase::GetName(object))), false); } - + if ( withChildren ) { - QAD_Study* aDoc = getStudy(); - if ( aDoc && !CORBA::is_nil( aDoc->getStudyDocument() ) ) { - SALOMEDS::Study_var aStudy = aDoc->getStudyDocument(); - SALOMEDS::SObject_var aSObj = aStudy->FindObjectIOR( GeometryGUI::GetORB()->object_to_string( object ) ); - if ( !CORBA::is_nil( aSObj ) ) { - SALOMEDS::ChildIterator_var anIt = aStudy->NewChildIterator( aSObj ); + SalomeApp_Study* aDoc = getStudy(); + if ( aDoc && aDoc->studyDS() ) { + _PTR(Study) aStudy = aDoc->studyDS(); + CORBA::String_var objStr = SalomeApp_Application::orb()->object_to_string(object); + _PTR(SObject) aSObj (aStudy->FindObjectIOR(string(objStr.in()))); + if ( aSObj ) { + _PTR(ChildIterator) anIt ( aStudy->NewChildIterator( aSObj ) ); for ( anIt->InitEx( true ); anIt->More(); anIt->Next() ) { - GEOM::GEOM_Object_var aChild = GEOM::GEOM_Object::_narrow( anIt->Value()->GetObject() ); + GEOM::GEOM_Object_var aChild = GEOM::GEOM_Object::_narrow + (GeometryGUI::ClientSObjectToObject(anIt->Value())); if ( !CORBA::is_nil( aChild ) ) { if ( !aChild->_is_nil() ) { string entry = getEntry( aChild ); @@ -212,10 +230,10 @@ void GEOMBase_Helper::redisplay( GEOM::GEOM_Object_ptr object, } } } - } + } } } - + if ( updateView ) getDisplayer()->UpdateViewer(); } @@ -229,22 +247,22 @@ void GEOMBase_Helper::displayPreview( const bool activate, const bool toRemoveFromEngine, const double lineWidth ) { - isPreview = true; + isPreview = true; QString msg; if ( !isValid( msg ) ) { erasePreview( update ); - isPreview = false; + isPreview = false; return; } erasePreview( false ); try { - QAD_WaitCursor wc; + SUIT_OverrideCursor wc; ObjectList objects; if ( !execute( objects ) || !getOperation()->IsDone() ) { - wc.stop(); + wc.suspend(); } else { for ( ObjectList::iterator it = objects.begin(); it != objects.end(); ++it ) @@ -256,7 +274,7 @@ void GEOMBase_Helper::displayPreview( const bool activate, } } catch( const SALOME::SALOME_Exception& e ) { - QtCatchCorbaException( e ); + SalomeApp_Tools::QtCatchCorbaException( e ); } isPreview = false; @@ -271,7 +289,7 @@ void GEOMBase_Helper::displayPreview( const bool activate, //================================================================ void GEOMBase_Helper::displayPreview( GEOM::GEOM_Object_ptr object, const bool append, - const bool activate, + const bool activate, const bool update, const double lineWidth ) { @@ -285,8 +303,9 @@ void GEOMBase_Helper::displayPreview( GEOM::GEOM_Object_ptr object, getDisplayer()->SetToActivate( activate ); // Make a reference to GEOM_Object - getDisplayer()->SetName( GeometryGUI::GetORB()->object_to_string( object ) ); - + CORBA::String_var objStr = SalomeApp_Application::orb()->object_to_string( object ); + getDisplayer()->SetName( objStr.in() ); + // Build prs SALOME_Prs* aPrs = getDisplayer()->BuildPrs( object ); if ( aPrs == 0 || aPrs->IsNull() ) @@ -313,34 +332,52 @@ void GEOMBase_Helper::displayPreview( const SALOME_Prs* prs, erasePreview( false ); // remember current view frame to make correct erase preview later - myViewFrame = getActiveView(); + myViewWindow = getActiveView(); - if ( myViewFrame == 0 ) + if ( myViewWindow == 0 ) return; // Display prs - ( (SALOME_View*)myViewFrame )->Display( prs ); + SUIT_ViewManager* aViewManager = myViewWindow->getViewManager(); + if ( aViewManager->getType() == OCCViewer_Viewer::Type() || + aViewManager->getType() == SVTK_Viewer::Type() ) + { + SUIT_ViewModel* aViewModel = aViewManager->getViewModel(); + SALOME_View* aView = dynamic_cast(aViewModel); + if (aView) + aView->Display( prs ); + } // Add prs to the preview list myPreview.push_back( (SALOME_Prs*)prs ); // Update viewer if ( update ) - myViewFrame->Repaint(); + getDisplayer()->UpdateViewer(); } //================================================================ // Function : erasePreview -// Purpose : +// Purpose : //================================================================ void GEOMBase_Helper::erasePreview( const bool update ) { // check view frame where the preview was displayed - bool vfOK = checkViewFrame() && myViewFrame; + bool vfOK = checkViewWindow() && myViewWindow; // Iterate through presentations and delete them for ( PrsList::iterator anIter = myPreview.begin(); anIter != myPreview.end(); ++anIter ) { if ( vfOK ) - ( (SALOME_View*)myViewFrame )->Erase( *anIter, true ); + { + SUIT_ViewManager* aViewManager = myViewWindow->getViewManager(); + if ( aViewManager->getType() == OCCViewer_Viewer::Type() || + aViewManager->getType() == SVTK_Viewer::Type() ) + { + SUIT_ViewModel* aViewModel = aViewManager->getViewModel(); + SALOME_View* aView = dynamic_cast(aViewModel); + if (aView) + aView->Erase( *anIter, true ); + } + } delete *anIter; } myPreview.clear(); @@ -357,29 +394,31 @@ void GEOMBase_Helper::erasePreview( const bool update ) //================================================================ void GEOMBase_Helper::activate( const int theType ) { - SALOMEDS::Study_var aStudy = getStudy()->getStudyDocument(); - SALOMEDS::SComponent_var aGeom = aStudy->FindComponent( "GEOM" ); - if ( aGeom->_is_nil() ) + if (!getStudy()) return; + _PTR(Study) aStudy = getStudy()->studyDS(); + _PTR(SComponent) aGeom ( aStudy->FindComponent( "GEOM" ) ); + if ( !aGeom ) return; SALOME_ListIO aList; - SALOMEDS::ChildIterator_var anIter = aStudy->NewChildIterator( aGeom ); + _PTR(ChildIterator) anIter ( aStudy->NewChildIterator( aGeom ) ); for ( ; anIter->More(); anIter->Next() ) { - SALOMEDS::SObject_var aSO = anIter->Value(); - if ( !aSO->_is_nil() ) + _PTR(SObject) aSO ( anIter->Value() ); + if ( aSO ) { - SALOMEDS::SObject_var aRefSO; + _PTR(SObject) aRefSO; if ( !aSO->ReferencedObject( aRefSO ) ) { - GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow( aSO->GetObject() ); + GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow + (GeometryGUI::ClientSObjectToObject(aSO)); if ( !anObj->_is_nil() && anObj->GetType() == theType ) - aList.Append( new SALOME_InteractiveObject( aSO->GetID(), "GEOM", aSO->GetName()) ); + aList.Append( new SALOME_InteractiveObject( aSO->GetID().c_str(), "GEOM", aSO->GetName().c_str()) ); } } } - myDisplayer->LocalSelection( aList, 0 ); + getDisplayer()->LocalSelection( aList, 0 ); } //================================================================ @@ -390,7 +429,7 @@ void GEOMBase_Helper::activate( const int theType ) void GEOMBase_Helper::localSelection( const ObjectList& theObjs, const int theMode ) { SALOME_ListIO aListOfIO; - + ObjectList::const_iterator anIter = theObjs.begin(); for ( ; anIter != theObjs.end(); ++anIter ) { @@ -403,7 +442,7 @@ void GEOMBase_Helper::localSelection( const ObjectList& theObjs, const int theMo aEntry.c_str(), "GEOM", strdup( GEOMBase::GetName( anObj ) ) ) ); } - myDisplayer->LocalSelection( aListOfIO, theMode ); + getDisplayer()->LocalSelection( aListOfIO, theMode ); } //================================================================ @@ -415,7 +454,7 @@ void GEOMBase_Helper::localSelection( GEOM::GEOM_Object_ptr obj, const int mode { // If object is null local selection for all objects is activated if ( obj->_is_nil() ) { - myDisplayer->LocalSelection( Handle(SALOME_InteractiveObject)(), mode ); + getDisplayer()->LocalSelection( Handle(SALOME_InteractiveObject)(), mode ); return; } @@ -432,7 +471,7 @@ void GEOMBase_Helper::localSelection( GEOM::GEOM_Object_ptr obj, const int mode //================================================================ void GEOMBase_Helper::globalSelection( const int theMode, const bool update ) { - myDisplayer->GlobalSelection( theMode, update ); + getDisplayer()->GlobalSelection( theMode, update ); } //================================================================ @@ -443,7 +482,7 @@ void GEOMBase_Helper::globalSelection( const int theMode, const bool update ) void GEOMBase_Helper::globalSelection( const TColStd_MapOfInteger& theModes, const bool update ) { - myDisplayer->GlobalSelection( theModes, update ); + getDisplayer()->GlobalSelection( theModes, update ); } //================================================================ @@ -455,13 +494,14 @@ void GEOMBase_Helper::addInStudy( GEOM::GEOM_Object_ptr theObj, const char* theN if ( !hasCommand() ) return; - SALOMEDS::Study_var aStudy = getStudy()->getStudyDocument(); - if ( aStudy->_is_nil() || theObj->_is_nil() ) + _PTR(Study) aStudy = getStudy()->studyDS(); + if ( !aStudy || theObj->_is_nil() ) return; GEOM::GEOM_Object_ptr aFatherObj = getFather( theObj ); - GeometryGUI::GetGeomGUI()->GetGeomGen()->AddInStudy( aStudy, theObj, theName, aFatherObj ); + getGeomEngine()->AddInStudy(GeometryGUI::ClientStudyToStudy(aStudy), + theObj, theName, aFatherObj); } //================================================================ @@ -470,7 +510,14 @@ void GEOMBase_Helper::addInStudy( GEOM::GEOM_Object_ptr theObj, const char* theN //================================================================ void GEOMBase_Helper::updateObjBrowser() const { - getStudy()->updateObjBrowser(); + SalomeApp_Application* app = dynamic_cast(SUIT_Session::session()->activeApplication()); + if (app) { + CAM_Module* module = app->module( "Geometry" ); + SalomeApp_Module* appMod = dynamic_cast( module ); + if ( appMod ) { + appMod->updateObjBrowser( true ); + } + } } //================================================================ @@ -490,34 +537,49 @@ int GEOMBase_Helper::getStudyId() const { int anId = -1; if ( getStudy() ) - anId = getStudy()->getStudyId(); + anId = getStudy()->id(); return anId; } //================================================================ // Function : getStudy -// Purpose : Returns the active study. It is recommended to use +// Purpose : Returns the active study. It is recommended to use // this method instead of direct desktop->getActiveStudy() calls //================================================================ -QAD_Study* GEOMBase_Helper::getStudy() const +SalomeApp_Study* GEOMBase_Helper::getStudy() const { - // Probably, it would be better to rememeber the active study in helper... - return QAD_Application::getDesktop()->getActiveStudy(); + SUIT_Desktop* aDesktop = getDesktop(); + if (!aDesktop) + return 0; + + QPtrList anAppList = SUIT_Session::session()->applications(); + + SUIT_Application* anApp = 0; + for ( QPtrListIterator it( anAppList ); it.current() ; ++it ) + { + anApp = it.current(); + if ( anApp->desktop() == aDesktop ) + break; + } + + return dynamic_cast(anApp->activeStudy()); } //================================================================ // Function : getEntry -// Purpose : +// Purpose : //================================================================ char* GEOMBase_Helper::getEntry( GEOM::GEOM_Object_ptr object ) const { - QAD_Study* study = getStudy(); + SalomeApp_Study* study = getStudy(); if ( study ) { - string IOR = GEOMBase::GetIORFromObject( object); + char * objIOR = GEOMBase::GetIORFromObject( object ); + string IOR( objIOR ); + free( objIOR ); if ( IOR != "" ) { - SALOMEDS::SObject_var SO = study->getStudyDocument()->FindObjectIOR( IOR.c_str() ); - if ( !SO->_is_nil() ) { - return SO->GetID(); + _PTR(SObject) SO ( study->studyDS()->FindObjectIOR( IOR ) ); + if ( SO ) { + return TCollection_AsciiString((char*)SO->GetID().c_str()).ToCString(); } } } @@ -526,70 +588,70 @@ char* GEOMBase_Helper::getEntry( GEOM::GEOM_Object_ptr object ) const //================================================================ // Function : getDisplayer -// Purpose : +// Purpose : //================================================================ GEOM_Displayer* GEOMBase_Helper::getDisplayer() { if ( !myDisplayer ) - myDisplayer = new GEOM_Displayer(); + myDisplayer = new GEOM_Displayer( getStudy() ); return myDisplayer; } //================================================================ // Function : clearShapeBuffer -// Purpose : +// Purpose : //================================================================ void GEOMBase_Helper::clearShapeBuffer( GEOM::GEOM_Object_ptr theObj ) { if ( CORBA::is_nil( theObj ) ) return; - string IOR = GeometryGUI::GetORB()->object_to_string( theObj ); - TCollection_AsciiString asciiIOR( strdup( IOR.c_str() ) ); - GeometryGUI::GetGeomGUI()->GetShapeReader().RemoveShapeFromBuffer( asciiIOR ); + CORBA::String_var IOR = SalomeApp_Application::orb()->object_to_string( theObj ); + TCollection_AsciiString asciiIOR( (char *)IOR.in() ); + GEOM_Client().RemoveShapeFromBuffer( asciiIOR ); - if ( !getStudy() || CORBA::is_nil( getStudy()->getStudyDocument() ) ) + if ( !getStudy() || !getStudy()->studyDS() ) return; - SALOMEDS::Study_var aStudy = getStudy()->getStudyDocument(); - SALOMEDS::SObject_var aSObj = aStudy->FindObjectIOR( IOR.c_str() ); - if ( CORBA::is_nil( aSObj ) ) + _PTR(Study) aStudy = getStudy()->studyDS(); + _PTR(SObject) aSObj ( aStudy->FindObjectIOR( string( IOR ) ) ); + if ( !aSObj ) return; - SALOMEDS::ChildIterator_var anIt = aStudy->NewChildIterator( aSObj ); + _PTR(ChildIterator) anIt ( aStudy->NewChildIterator( aSObj ) ); for ( anIt->InitEx( true ); anIt->More(); anIt->Next() ) { - SALOMEDS::GenericAttribute_var anAttr; + _PTR(GenericAttribute) anAttr; if ( anIt->Value()->FindAttribute(anAttr, "AttributeIOR") ) { - SALOMEDS::AttributeIOR_var anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr); - TCollection_AsciiString asciiIOR( anIOR->Value() ); - GeometryGUI::GetGeomGUI()->GetShapeReader().RemoveShapeFromBuffer( asciiIOR ); + _PTR(AttributeIOR) anIOR ( anAttr ); + TCollection_AsciiString asciiIOR( (char*)anIOR->Value().c_str() ); + GEOM_Client().RemoveShapeFromBuffer( asciiIOR ); } } } //================================================================ // Function : openCommand -// Purpose : +// Purpose : //================================================================ -bool GEOMBase_Helper::openCommand() +bool GEOMBase_Helper::openCommand() { bool res = false; if ( !getStudy() || hasCommand() ) return res; - + GEOM::GEOM_IOperations_var anOp = GEOM::GEOM_IOperations::_narrow( getOperation() ); if ( !anOp->_is_nil() ) { - myCommand = new GEOM_Operation( getStudy(), anOp.in() ); + myCommand = new GEOM_Operation( SUIT_Session::session()->activeApplication(), anOp.in() ); myCommand->start(); res = true; } - + return res; } //================================================================ // Function : abortCommand -// Purpose : +// Purpose : //================================================================ bool GEOMBase_Helper::abortCommand() { @@ -598,28 +660,28 @@ bool GEOMBase_Helper::abortCommand() myCommand->abort(); myCommand = 0; - - return true; + + return true; } //================================================================ // Function : commitCommand -// Purpose : +// Purpose : //================================================================ bool GEOMBase_Helper::commitCommand( const char* ) { if ( !hasCommand() ) return false; - myCommand->finish(); + myCommand->commit(); myCommand = 0; - return true; + return true; } //================================================================ // Function : hasCommand -// Purpose : +// Purpose : //================================================================ bool GEOMBase_Helper::hasCommand() const { @@ -628,7 +690,7 @@ bool GEOMBase_Helper::hasCommand() const //================================================================ // Function : getOperation -// Purpose : +// Purpose : //================================================================ GEOM::GEOM_IOperations_ptr GEOMBase_Helper::getOperation() { @@ -641,41 +703,40 @@ GEOM::GEOM_IOperations_ptr GEOMBase_Helper::getOperation() //================================================================ -// Function : checkViewFrame -// Purpose : +// Function : checkViewWindow +// Purpose : //================================================================ -bool GEOMBase_Helper::checkViewFrame() +bool GEOMBase_Helper::checkViewWindow() { - if ( myViewFrame ){ - QListIterator it( QAD_Application::getDesktop()->getActiveApp()->getStudies() ); - for ( ; it.current(); ++it ) { - QListIterator it1( it.current()->getStudyFrames() ); - for ( ; it1.current(); ++it1 ) { - if ( myViewFrame == it1.current()->getRightFrame()->getViewFrame() ) + if ( myViewWindow ){ + QPtrList aViewWindowsList = SUIT_Session::session()->activeApplication()->desktop()->windows(); + for ( QPtrListIterator it( aViewWindowsList ); it.current(); ++it ) + { + if ( myViewWindow == it.current() ) return true; } - } } - myViewFrame = 0; + myViewWindow = 0; return false; } //================================================================ // Function : onAccept // Purpose : This method should be called from dialog's slots onOk() and onApply() -// It perfroms user input validation, then it +// It perfroms user input validation, then it // performs a proper operation and manages transactions, etc. //================================================================ bool GEOMBase_Helper::onAccept( const bool publish, const bool useTransaction ) { - QAD_Study* aDoc = QAD_Application::getDesktop()->getActiveStudy(); - SALOMEDS::Study_var aStudy = aDoc->getStudyDocument(); + SalomeApp_Study* appStudy = dynamic_cast( SUIT_Session::session()->activeApplication()->activeStudy() ); + if ( !appStudy ) return false; + _PTR(Study) aStudy = appStudy->studyDS(); - bool aLocked = aStudy->GetProperties()->IsLocked(); + bool aLocked = (_PTR(AttributeStudyProperties) (aStudy->GetProperties()))->IsLocked(); if ( aLocked ) { MESSAGE("GEOMBase_Helper::onAccept - ActiveStudy is locked"); - QAD_MessageBox::warn1 ( (QWidget*)QAD_Application::getDesktop(), - QObject::tr("WRN_WARNING"), + SUIT_MessageBox::warn1 ( (QWidget*)SUIT_Session::session()->activeApplication()->desktop(), + QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED"), QObject::tr("BUT_OK") ); return false; @@ -691,24 +752,32 @@ bool GEOMBase_Helper::onAccept( const bool publish, const bool useTransaction ) try { if ( ( !publish && !useTransaction ) || openCommand() ) { - QAD_WaitCursor wc; - QAD_Application::getDesktop()->putInfo( "" ); + SUIT_OverrideCursor wc; + SUIT_Session::session()->activeApplication()->putInfo( "" ); ObjectList objects; if ( !execute( objects ) || !getOperation()->IsDone() ) { - wc.stop(); + wc.suspend(); abortCommand(); showError(); } else { const int nbObjs = objects.size(); bool withChildren = false; + int aNumber = 1; for ( ObjectList::iterator it = objects.begin(); it != objects.end(); ++it ) { if ( publish ) { - QString aName(""); - if ( nbObjs > 1 ) - aName = strlen( getNewObjectName() ) ? GEOMBase::GetDefaultName( getNewObjectName() ) : GEOMBase::GetDefaultName( getPrefix( *it ) ); - else { - aName = getNewObjectName(); + QString aName = getNewObjectName(); + if ( nbObjs > 1 ) { + if (aName.isEmpty()) + aName = getPrefix(*it); + if (nbObjs <= 30) { + // Try to find a unique name + aName = GEOMBase::GetDefaultName(aName); + } else { + // Don't check name uniqueness in case of numerous objects + aName = aName + "_" + QString::number(aNumber++); + } + } else { // PAL6521: use a prefix, if some dialog box doesn't reimplement getNewObjectName() if ( aName.isEmpty() ) aName = GEOMBase::GetDefaultName( getPrefix( *it ) ); @@ -717,7 +786,7 @@ bool GEOMBase_Helper::onAccept( const bool publish, const bool useTransaction ) withChildren = false; display( *it, false ); } - else { // asv : fix of PAL6454. If publish==false, then the original shape was modified, and need to be re-cached in GEOM_Client + else { // asv : fix of PAL6454. If publish==false, then the original shape was modified, and need to be re-cached in GEOM_Client // before redisplay clearShapeBuffer( *it ); withChildren = true; @@ -728,7 +797,7 @@ bool GEOMBase_Helper::onAccept( const bool publish, const bool useTransaction ) if ( nbObjs ) { commitCommand(); updateObjBrowser(); - QAD_Application::getDesktop()->putInfo( QObject::tr("GEOM_PRP_DONE") ); + SUIT_Session::session()->activeApplication()->putInfo( QObject::tr("GEOM_PRP_DONE") ); } else abortCommand(); @@ -736,7 +805,7 @@ bool GEOMBase_Helper::onAccept( const bool publish, const bool useTransaction ) } } catch( const SALOME::SALOME_Exception& e ) { - QtCatchCorbaException( e ); + SalomeApp_Tools::QtCatchCorbaException( e ); abortCommand(); } @@ -759,10 +828,10 @@ void GEOMBase_Helper::showError() if ( msg.isEmpty() ) msg = QObject::tr( "GEOM_PRP_ABORT" ); - QAD_MessageBox::error1( QAD_Application::getDesktop(), - QObject::tr( "GEOM_ERROR_STATUS" ), - msg, - QObject::tr( "BUT_OK" ) ); + SUIT_MessageBox::error1( SUIT_Session::session()->activeApplication()->desktop(), + QObject::tr( "GEOM_ERROR_STATUS" ), + msg, + QObject::tr( "BUT_OK" ) ); } //================================================================ @@ -774,7 +843,7 @@ void GEOMBase_Helper::showError( const QString& msg ) QString str( QObject::tr( "GEOM_INCORRECT_INPUT" ) ); if ( !msg.isEmpty() ) str += "\n" + msg; - QAD_MessageBox::error1( QAD_Application::getDesktop(), QObject::tr( "GEOM_ERROR" ), str, QObject::tr( "BUT_OK" ) ); + SUIT_MessageBox::error1(SUIT_Session::session()->activeApplication()->desktop(), QObject::tr( "GEOM_ERROR" ), str, QObject::tr( "BUT_OK" ) ); } ////////////////////////////////////////////////////////////////// @@ -802,8 +871,8 @@ bool GEOMBase_Helper::isValid( QString& ) //================================================================ // Function : execute -// Purpose : This method is called by onAccept(). -// It should perform the required operation and put all new or modified objects into +// Purpose : This method is called by onAccept(). +// It should perform the required operation and put all new or modified objects into // argument.Should return if some error occurs during its execution. //================================================================ bool GEOMBase_Helper::execute( ObjectList& objects ) @@ -843,9 +912,9 @@ QString GEOMBase_Helper::getPrefix( GEOM::GEOM_Object_ptr theObj ) const TopoDS_Shape aShape; if ( !GEOMBase::GetShape( theObj, aShape ) ) return ""; - + long aType = aShape.ShapeType(); - + switch ( aType ) { case TopAbs_VERTEX : return QObject::tr( "GEOM_VERTEX" ); @@ -860,4 +929,59 @@ QString GEOMBase_Helper::getPrefix( GEOM::GEOM_Object_ptr theObj ) const } } +//================================================================ +// Function : selectedIO +// Purpose : Return the list of selected SALOME_InteractiveObject's +//================================================================ +const SALOME_ListIO& GEOMBase_Helper::selectedIO() +{ + mySelected.Clear(); + + SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); + if ( app ) { + LightApp_SelectionMgr* aSelMgr = app->selectionMgr(); + if ( aSelMgr ) + aSelMgr->selectedObjects( mySelected ); + } + + return mySelected; +} + +//================================================================ +// Function : IObjectCount +// Purpose : Return the number of selected objects +//================================================================ +int GEOMBase_Helper::IObjectCount() +{ + return selectedIO().Extent(); +} + +//================================================================ +// Function : firstIObject +// Purpose : Return the first selected object in the selected object list +//================================================================ +Handle(SALOME_InteractiveObject) GEOMBase_Helper::firstIObject() +{ + const SALOME_ListIO& aList = selectedIO(); + return aList.Extent() > 0 ? aList.First() : Handle(SALOME_InteractiveObject)(); +} + +//================================================================ +// Function : lastIObject +// Purpose : Return the last selected object in the selected object list +//================================================================ +Handle(SALOME_InteractiveObject) GEOMBase_Helper::lastIObject() +{ + const SALOME_ListIO& aList = selectedIO(); + return aList.Extent() > 0 ? aList.Last() : Handle(SALOME_InteractiveObject)(); +} + +//================================================================ +// Function : getDesktop +// Purpose : Returns myDesktop field. Initialized in constructor, usually as dynamic_cast(parentWidget()) +//================================================================ +SUIT_Desktop* GEOMBase_Helper::getDesktop() const +{ + return myDesktop; +}