X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_Module.cxx;h=c355b51cc17d09b81ec638636f5c95c53e4c5e58;hb=07343abeab6a4c4d86bf836b59aff6fbe34b683a;hp=7d2197a1c64f54c60400a1b7255a0a459dc6f4c1;hpb=94ce56d6f7ffc055c2409af2c48d1278fe42d90e;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_Module.cxx b/src/HYDROGUI/HYDROGUI_Module.cxx index 7d2197a1..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 ); @@ -146,6 +161,12 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient, 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; @@ -157,12 +178,33 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient, { anIsSelection = true; - bool aVisibility = anObject->IsVisible( aViewId ); + bool aVisibility = isObjectVisible( aViewId, anObject ); anIsVisibleInSelection |= aVisibility; anIsHiddenInSelection |= !aVisibility; if( anObject->GetKind() == KIND_IMAGE ) + { anIsImage = true; + 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 ) @@ -175,11 +217,29 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient, theMenu->addAction( action( SaveVisualStateId ) ); theMenu->addSeparator(); } - else if( anIsSelection && aSeq.Length() == 1 ) + + 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(); @@ -229,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(); @@ -315,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 ); @@ -330,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 ); } } }