X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_Module.cxx;h=c355b51cc17d09b81ec638636f5c95c53e4c5e58;hb=07343abeab6a4c4d86bf836b59aff6fbe34b683a;hp=567dab1ff2faa7035bdf8c1d5b144dfe538bb209;hpb=fe02bb085711fbb88046f31bd30a4590d7263c7a;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_Module.cxx b/src/HYDROGUI/HYDROGUI_Module.cxx index 567dab1f..c355b51c 100644 --- a/src/HYDROGUI/HYDROGUI_Module.cxx +++ b/src/HYDROGUI/HYDROGUI_Module.cxx @@ -33,11 +33,19 @@ #include "HYDROGUI_Tool.h" #include "HYDROGUI_UpdateFlags.h" +#include + +#include + #include #include #include #include +#include +#include +#include + #include #include #include @@ -60,6 +68,11 @@ extern "C" HYDRO_EXPORT CAM_Module* createModule() return new HYDROGUI_Module(); } +extern "C" HYDRO_EXPORT char* getModuleVersion() +{ + return (char*)HYDRO_VERSION; +} + HYDROGUI_Module::HYDROGUI_Module() : LightApp_Module( "HYDRO" ), myDisplayer( 0 ), @@ -115,6 +128,8 @@ bool HYDROGUI_Module::deactivateModule( SUIT_Study* theStudy ) getApp()->removeViewManager( aViewManager ); myViewManagerMap.clear(); + myObjectStateMap.clear(); + setMenuShown( false ); setToolShown( false ); @@ -139,12 +154,21 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient, { HYDROGUI_DataModel* aModel = getDataModel(); + size_t aViewId = HYDROGUI_Tool::GetActiveGraphicsViewId( this ); + bool anIsSelection = false; bool anIsVisibleInSelection = false; bool anIsHiddenInSelection = false; bool anIsImage = false; + bool anIsImportedImage = false; + bool anIsCompositeImage = false; + bool anIsFusedImage = false; + bool anIsCutImage = false; + bool anIsSplittedImage = false; + bool anIsMustBeUpdatedImage = false; bool anIsPolyline = false; + bool anIsVisualState = false; HYDROData_SequenceOfObjects aSeq = HYDROGUI_Tool::GetSelectedObjects( this ); for( Standard_Integer anIndex = 1, aLength = aSeq.Length(); anIndex <= aLength; anIndex++ ) @@ -154,23 +178,69 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient, { anIsSelection = true; - bool aVisibility = anObject->GetVisibility(); + bool aVisibility = isObjectVisible( aViewId, anObject ); anIsVisibleInSelection |= aVisibility; anIsHiddenInSelection |= !aVisibility; if( anObject->GetKind() == KIND_IMAGE ) + { anIsImage = true; - - if( anObject->GetKind() == KIND_POLYLINE ) + Handle(HYDROData_Image) anImage = Handle(HYDROData_Image)::DownCast( anObject ); + if( !anImage.IsNull() ) + { + anIsImportedImage = anImage->HasTrsfPoints() && !anImage->IsSelfSplitted(); + anIsCompositeImage = anImage->NbReferences() > 0; + if( HYDROOperations_Factory* aFactory = HYDROOperations_Factory::Factory() ) + { + if( ImageComposer_Operator* anOperator = aFactory->Operator( anImage ) ) + { + if( dynamic_cast( anOperator ) ) + anIsFusedImage = true; + else if( dynamic_cast( anOperator ) ) + anIsCutImage = true; + else if( dynamic_cast( anOperator ) ) + anIsSplittedImage = true; + } + } + anIsMustBeUpdatedImage = anImage->MustBeUpdated(); + } + } + else if( anObject->GetKind() == KIND_POLYLINE ) anIsPolyline = true; + else if( anObject->GetKind() == KIND_VISUAL_STATE ) + anIsVisualState = true; } } - if( aSeq.Length() == 1 ) + if( aSeq.IsEmpty() ) + { + theMenu->addAction( action( SaveVisualStateId ) ); + theMenu->addSeparator(); + } + + if( anIsSelection && anIsMustBeUpdatedImage ) + { + theMenu->addAction( action( UpdateImageId ) ); + theMenu->addSeparator(); + } + + if( anIsSelection && aSeq.Length() == 1 ) { if( anIsImage ) { - theMenu->addAction( action( EditImageId ) ); + if( anIsImportedImage ) + theMenu->addAction( action( EditImportedImageId ) ); + else if( anIsCompositeImage ) + { + if( anIsFusedImage ) + theMenu->addAction( action( EditFusedImageId ) ); + else if( anIsCutImage ) + theMenu->addAction( action( EditCutImageId ) ); + else if( anIsSplittedImage ) + theMenu->addAction( action( EditSplittedImageId ) ); + } + + theMenu->addAction( action( ObserveImageId ) ); theMenu->addAction( action( ExportImageId ) ); theMenu->addSeparator(); } @@ -179,6 +249,12 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient, theMenu->addAction( action( EditPolylineId ) ); theMenu->addSeparator(); } + else if( anIsVisualState ) + { + theMenu->addAction( action( SaveVisualStateId ) ); + theMenu->addAction( action( LoadVisualStateId ) ); + theMenu->addSeparator(); + } } if( anIsSelection ) @@ -187,7 +263,7 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient, theMenu->addSeparator(); } - if( anIsSelection ) + if( anIsSelection && ( anIsImage || anIsPolyline ) ) { if( anIsHiddenInSelection ) theMenu->addAction( action( ShowId ) ); @@ -196,6 +272,7 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient, theMenu->addAction( action( HideId ) ); theMenu->addSeparator(); } + theMenu->addAction( action( ShowAllId ) ); theMenu->addAction( action( HideAllId ) ); theMenu->addSeparator(); @@ -212,15 +289,25 @@ void HYDROGUI_Module::update( const int flags ) // from one of the methods called below setUpdateEnabled( false ); - if( ( flags & UF_Model ) && getDataModel() ) + if( ( flags & UF_Viewer ) ) + updateGV( flags & UF_GV_Init, + flags & UF_GV_Forced ); + + if( ( flags & UF_Model ) && getDataModel() && getApp() ) + { getDataModel()->update( getStudyId() ); - if( ( flags & UF_ObjBrowser ) && getApp() ) + // Temporary workaround to prevent breaking + // the selection in the object browser. + // Note: processEvents() should be called after updateGV(), + // otherwise the application crashes from time to time. + qApp->processEvents(); getApp()->updateObjectBrowser( true ); + } - if( ( flags & UF_Viewer ) ) - updateGV( flags & UF_GV_Init, - flags & UF_GV_Forced ); + // Object browser is currently updated by using UF_Model flag + //if( ( flags & UF_ObjBrowser ) && getApp() ) + // getApp()->updateObjectBrowser( true ); if( ( flags & UF_Controls ) && getApp() ) getApp()->updateActions(); @@ -298,6 +385,38 @@ void HYDROGUI_Module::setViewManagerRole( SUIT_ViewManager* theViewManager, } } +bool HYDROGUI_Module::isObjectVisible( const int theViewId, + const Handle(HYDROData_Object)& theObject ) +{ + if( theObject.IsNull() ) + return false; + + ViewId2Name2ObjectStateMap::const_iterator anIter1 = myObjectStateMap.find( theViewId ); + if( anIter1 != myObjectStateMap.end() ) + { + const Name2ObjectStateMap& aName2ObjectStateMap = anIter1.value(); + Name2ObjectStateMap::const_iterator anIter2 = aName2ObjectStateMap.find( theObject->GetName()); + if( anIter2 != aName2ObjectStateMap.end() ) + { + const ObjectState& anObjectState = anIter2.value(); + return anObjectState.Visibility; + } + } + return false; +} + +void HYDROGUI_Module::setObjectVisible( const int theViewId, + const Handle(HYDROData_Object)& theObject, + const bool theState ) +{ + if( !theObject.IsNull() ) + { + Name2ObjectStateMap& aName2ObjectStateMap = myObjectStateMap[ theViewId ]; + ObjectState& anObjectState = aName2ObjectStateMap[ theObject->GetName() ]; + anObjectState.Visibility = theState; + } +} + CAM_DataModel* HYDROGUI_Module::createDataModel() { return new HYDROGUI_DataModel( this ); @@ -313,22 +432,22 @@ void HYDROGUI_Module::customEvent( QEvent* e ) { if( GraphicsView_Viewer* aViewer = dynamic_cast( aViewFrame->getViewer() ) ) { - SUIT_ViewManager* aViewManager = aViewer->getViewManager(); - ViewManagerRole aRole = getViewManagerRole( aViewManager ); - if( aRole == VMR_General ) - update( UF_Viewer ); - - aViewer->activateTransform( GraphicsView_Viewer::FitAll ); - if( GraphicsView_ViewPort* aViewPort = aViewer->getActiveViewPort() ) { aViewPort->setInteractionFlag( GraphicsView_ViewPort::TraceBoundingRect ); aViewPort->setInteractionFlag( GraphicsView_ViewPort::ImmediateContextMenu ); aViewPort->setInteractionFlag( GraphicsView_ViewPort::ImmediateSelection ); - // ouv: tmp + //ouv: temporarily commented //aViewPort->setViewLabelPosition( GraphicsView_ViewPort::VLP_BottomLeft, true ); } + + SUIT_ViewManager* aViewManager = aViewer->getViewManager(); + ViewManagerRole aRole = getViewManagerRole( aViewManager ); + if( aRole != VMR_TransformImage ) + update( UF_Viewer ); + + aViewer->activateTransform( GraphicsView_Viewer::FitAll ); } } } @@ -434,7 +553,7 @@ void HYDROGUI_Module::onViewPortMouseEvent( QGraphicsSceneMouseEvent* theEvent ) aViewPort->setViewLabelText( QString( "X: %1\nY: %2" ).arg( aXStr ).arg( aYStr ) ); } - else if( aRole == VMR_Mapping ) + else if( aRole == VMR_TransformImage ) aViewPort->setViewLabelText( QString( "X: %1\nY: %2" ).arg( (int)aMouseX ).arg( (int)aMouseY ) ); } }