#include "HYDROGUI_Tool.h"
#include "HYDROGUI_UpdateFlags.h"
+#include <HYDROData_Image.h>
+
#include <GraphicsView_ViewFrame.h>
#include <GraphicsView_ViewManager.h>
#include <GraphicsView_ViewPort.h>
getApp()->removeViewManager( aViewManager );
myViewManagerMap.clear();
+ myObjectStateMap.clear();
+
setMenuShown( false );
setToolShown( false );
{
HYDROGUI_DataModel* aModel = getDataModel();
- int aViewId = HYDROGUI_Tool::GetActiveGraphicsViewId( this );
+ size_t aViewId = HYDROGUI_Tool::GetActiveGraphicsViewId( this );
bool anIsSelection = false;
bool anIsVisibleInSelection = false;
bool anIsHiddenInSelection = false;
bool anIsImage = false;
+ bool anIsCompositeImage = false;
+ bool anIsMustBeUpdatedImage = false;
bool anIsPolyline = false;
bool anIsVisualState = false;
{
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() )
+ {
+ anIsCompositeImage = anImage->NbReferences() > 0;
+ anIsMustBeUpdatedImage = anImage->MustBeUpdated();
+ }
+ }
else if( anObject->GetKind() == KIND_POLYLINE )
anIsPolyline = true;
else if( anObject->GetKind() == KIND_VISUAL_STATE )
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 ) );
+ theMenu->addAction( action( anIsCompositeImage ? EditCompositeImageId : EditImportedImageId ) );
theMenu->addAction( action( ObserveImageId ) );
theMenu->addAction( action( ExportImageId ) );
theMenu->addSeparator();
// 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();
}
}
+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 );
{
if( GraphicsView_Viewer* aViewer = dynamic_cast<GraphicsView_Viewer*>( 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 );
}
}
}