+ 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++ )
+ {
+ Handle(HYDROData_Object) anObject = aSeq.Value( anIndex );
+ if( !anObject.IsNull() )
+ {
+ anIsSelection = true;
+
+ 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<ImageComposer_FuseOperator*>( anOperator ) )
+ anIsFusedImage = true;
+ else if( dynamic_cast<ImageComposer_CutOperator*>( anOperator ) )
+ anIsCutImage = true;
+ else if( dynamic_cast<ImageComposer_CropOperator*>( 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.IsEmpty() )
+ {
+ theMenu->addAction( action( SaveVisualStateId ) );
+ theMenu->addSeparator();
+ }
+
+ if( anIsSelection && anIsMustBeUpdatedImage )