#include "HYDROGUI_GVSelector.h"
#include "HYDROGUI_InputPanel.h"
#include "HYDROGUI_ObjSelector.h"
+#include "HYDROGUI_OCCDisplayer.h"
+#include "HYDROGUI_OCCSelector.h"
#include "HYDROGUI_Operations.h"
#include "HYDROGUI_PrsImage.h"
#include "HYDROGUI_Tool.h"
#include "HYDROGUI_UpdateFlags.h"
+#include "HYDROGUI_Shape.h"
#include <HYDROData_Image.h>
+#include <HYDROData_Lambert93.h>
-#include <HYDROOperations_Factory.h>
+#include <HYDROData_OperationsFactory.h>
#include <GraphicsView_ViewFrame.h>
#include <GraphicsView_ViewManager.h>
#include <ImageComposer_FuseOperator.h>
#include <LightApp_Application.h>
+#include <LightApp_DataOwner.h>
#include <LightApp_GVSelector.h>
#include <LightApp_SelectionMgr.h>
#include <LightApp_UpdateFlags.h>
+#include <OCCViewer_ViewFrame.h>
+#include <OCCViewer_ViewManager.h>
+#include <OCCViewer_ViewModel.h>
+
#include <SALOME_Event.h>
+#include <SUIT_Desktop.h>
#include <SUIT_Study.h>
#include <SUIT_ViewManager.h>
HYDROGUI_Module::HYDROGUI_Module()
: LightApp_Module( "HYDRO" ),
myDisplayer( 0 ),
+ myOCCDisplayer( 0 ),
myIsUpdateEnabled( true )
{
}
setToolShown( false );
myDisplayer = new HYDROGUI_Displayer( this );
+ myOCCDisplayer = new HYDROGUI_OCCDisplayer( this );
}
bool HYDROGUI_Module::activateModule( SUIT_Study* theStudy )
{
bool aRes = LightApp_Module::activateModule( theStudy );
+ LightApp_Application* anApp = getApp();
+ SUIT_Desktop* aDesktop = anApp->desktop();
+
+ getApp()->setEditEnabled( false ); // hide SalomeApp copy/paste actions
+
setMenuShown( true );
setToolShown( true );
+#ifndef DISABLE_PYCONSOLE
+ aDesktop->tabifyDockWidget( HYDROGUI_Tool::WindowDock( anApp->getWindow( LightApp_Application::WT_PyConsole ) ),
+ HYDROGUI_Tool::WindowDock( anApp->getWindow( LightApp_Application::WT_LogWindow ) ) );
+#endif
+
update( UF_All );
updateCommandsStatus();
myViewManagerMap.clear();
myObjectStateMap.clear();
+ myShapesMap.clear();
+
+ // clear the data model's list of copying objects
+ HYDROGUI_DataModel::changeCopyingObjects( HYDROData_SequenceOfObjects() );
setMenuShown( false );
setToolShown( false );
+ getApp()->setEditEnabled( true ); // show SalomeApp copy/paste actions
+
return LightApp_Module::deactivateModule( theStudy );
}
{
theMap.clear();
theMap.insert( LightApp_Application::WT_LogWindow, Qt::BottomDockWidgetArea );
+#ifndef DISABLE_PYCONSOLE
+ theMap.insert( LightApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
+#endif
theMap.insert( LightApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
}
void HYDROGUI_Module::viewManagers( QStringList& theTypesList ) const
{
- theTypesList << GraphicsView_Viewer::Type();
+ theTypesList << OCCViewer_Viewer::Type() << GraphicsView_Viewer::Type();
}
void HYDROGUI_Module::contextMenuPopup( const QString& theClient,
{
HYDROGUI_DataModel* aModel = getDataModel();
- size_t aViewId = HYDROGUI_Tool::GetActiveGraphicsViewId( this );
+ bool anIsObjectBrowser = theClient == "ObjectBrowser";
+ bool anIsGraphicsView = theClient == GraphicsView_Viewer::Type();
+ bool anIsOCCView = theClient == OCCViewer_Viewer::Type();
+ if( !anIsObjectBrowser && !anIsGraphicsView && !anIsOCCView )
+ return;
- bool anIsSelection = false;
+ size_t anActiveViewId = HYDROGUI_Tool::GetActiveViewId( this );
+
+ bool anIsSelectedDataObjects = false;
bool anIsVisibleInSelection = false;
bool anIsHiddenInSelection = false;
bool anIsMustBeUpdatedImage = false;
bool anIsPolyline = false;
bool anIsCalculation = false;
+ bool anIsImmersibleZone = false;
bool anIsVisualState = false;
+ // check the selected data model objects
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 );
+ Handle(HYDROData_Entity) anObject = aSeq.Value( anIndex );
if( !anObject.IsNull() )
{
- anIsSelection = true;
+ anIsSelectedDataObjects = true;
- bool aVisibility = isObjectVisible( aViewId, anObject );
+ bool aVisibility = isObjectVisible( anActiveViewId, anObject );
anIsVisibleInSelection |= aVisibility;
anIsHiddenInSelection |= !aVisibility;
{
anIsImportedImage = anImage->HasTrsfPoints() && !anImage->IsSelfSplitted();
anIsCompositeImage = anImage->NbReferences() > 0;
- if( HYDROOperations_Factory* aFactory = HYDROOperations_Factory::Factory() )
+ if( HYDROData_OperationsFactory* aFactory = HYDROData_OperationsFactory::Factory() )
{
if( ImageComposer_Operator* anOperator = aFactory->Operator( anImage ) )
{
- if( dynamic_cast<ImageComposer_FuseOperator*>( anOperator ) )
+ QString anOperatorName = anOperator->name();
+ if( anOperatorName == ImageComposer_FuseOperator::Type() )
anIsFusedImage = true;
- else if( dynamic_cast<ImageComposer_CutOperator*>( anOperator ) )
+ else if( anOperatorName == ImageComposer_CutOperator::Type() )
anIsCutImage = true;
- else if( dynamic_cast<ImageComposer_CropOperator*>( anOperator ) )
+ else if( anOperatorName == ImageComposer_CropOperator::Type() )
anIsSplittedImage = true;
}
}
anIsPolyline = true;
else if( anObject->GetKind() == KIND_CALCULATION )
anIsCalculation = true;
+ else if( anObject->GetKind() == KIND_IMMERSIBLE_ZONE )
+ anIsImmersibleZone = true;
else if( anObject->GetKind() == KIND_VISUAL_STATE )
anIsVisualState = true;
}
}
- if( aSeq.IsEmpty() )
+ // check the selected partitions
+ if( !anIsSelectedDataObjects && anIsObjectBrowser )
{
- theMenu->addAction( action( SaveVisualStateId ) );
- theMenu->addSeparator();
+ ObjectKind aSelectedPartition = HYDROGUI_Tool::GetSelectedPartition( this );
+ if( aSelectedPartition != KIND_UNKNOWN )
+ {
+ switch( aSelectedPartition )
+ {
+ case KIND_IMAGE:
+ theMenu->addAction( action( ImportImageId ) );
+ break;
+ case KIND_POLYLINE:
+ theMenu->addAction( action( CreatePolylineId ) );
+ break;
+ case KIND_VISUAL_STATE:
+ theMenu->addAction( action( SaveVisualStateId ) );
+ break;
+ case KIND_BATHYMETRY:
+ theMenu->addAction( action( ImportBathymetryId ) );
+ break;
+ case KIND_CALCULATION:
+ theMenu->addAction( action( CreateCalculationId ) );
+ break;
+ case KIND_IMMERSIBLE_ZONE:
+ theMenu->addAction( action( CreateImmersibleZoneId ) );
+ break;
+ }
+ theMenu->addSeparator();
+ }
}
- if( anIsSelection && anIsMustBeUpdatedImage )
+ if( anIsSelectedDataObjects && anIsMustBeUpdatedImage )
{
theMenu->addAction( action( UpdateImageId ) );
theMenu->addSeparator();
}
- if( anIsSelection && aSeq.Length() == 1 )
+ if( anIsSelectedDataObjects && aSeq.Length() == 1 )
{
if( anIsImage )
{
theMenu->addAction( action( ObserveImageId ) );
theMenu->addAction( action( ExportImageId ) );
theMenu->addSeparator();
+
+ theMenu->addAction( action( FuseImagesId ) );
+ theMenu->addAction( action( CutImagesId ) );
+ theMenu->addAction( action( SplitImageId ) );
+ theMenu->addSeparator();
}
else if( anIsPolyline )
{
theMenu->addAction( action( EditCalculationId ) );
theMenu->addSeparator();
}
- else if( anIsVisualState )
+ else if( anIsImmersibleZone )
+ {
+ theMenu->addAction( action( EditImmersibleZoneId ) );
+ theMenu->addSeparator();
+ }
+ else if( anIsVisualState && anIsObjectBrowser )
{
theMenu->addAction( action( SaveVisualStateId ) );
theMenu->addAction( action( LoadVisualStateId ) );
}
}
- if( anIsSelection )
+ if( anIsSelectedDataObjects )
{
theMenu->addAction( action( DeleteId ) );
theMenu->addSeparator();
}
- if( anIsSelection && ( anIsImage || anIsPolyline ) )
+ if( anIsSelectedDataObjects && ( anIsImage || anIsPolyline || anIsImmersibleZone ) )
{
if( anIsHiddenInSelection )
theMenu->addAction( action( ShowId ) );
theMenu->addSeparator();
}
- theMenu->addAction( action( ShowAllId ) );
- theMenu->addAction( action( HideAllId ) );
- theMenu->addSeparator();
+ if( anIsObjectBrowser || anIsGraphicsView || anIsOCCView )
+ {
+ theMenu->addAction( action( ShowAllId ) );
+ theMenu->addAction( action( HideAllId ) );
+ theMenu->addSeparator();
+ }
}
void HYDROGUI_Module::update( const int flags )
// from one of the methods called below
setUpdateEnabled( false );
+ // store selected objects
+ QStringList aSelectedEntries = storeSelection();
+
if( ( flags & UF_Viewer ) )
updateGV( flags & UF_GV_Init,
flags & UF_GV_Forced );
+ if( ( flags & UF_OCCViewer ) )
+ updateOCCViewer( flags & UF_OCC_Init,
+ flags & UF_OCC_Forced );
+
if( ( flags & UF_Model ) && getDataModel() && getApp() )
{
getDataModel()->update( getStudyId() );
// the selection in the object browser.
// Note: processEvents() should be called after updateGV(),
// otherwise the application crashes from time to time.
- qApp->processEvents();
+ //RKV: qApp->processEvents();
getApp()->updateObjectBrowser( true );
}
if( ( flags & UF_Controls ) && getApp() )
getApp()->updateActions();
+ // restore selected objects
+ restoreSelection( aSelectedEntries );
+
setUpdateEnabled( true );
QApplication::restoreOverrideCursor();
updateUndoRedoControls();
- // to do
- //action( ... )->setEnabled( ... );
+ action( CopyId )->setEnabled( getDataModel()->canCopy() );
+ action( PasteId )->setEnabled( getDataModel()->canPaste() );
+}
+
+void HYDROGUI_Module::selectionChanged()
+{
+ LightApp_Module::selectionChanged();
+ updateCommandsStatus();
}
HYDROGUI_DataModel* HYDROGUI_Module::getDataModel() const
return myDisplayer;
}
+HYDROGUI_OCCDisplayer* HYDROGUI_Module::getOCCDisplayer() const
+{
+ return myOCCDisplayer;
+}
+
GraphicsView_Viewer* HYDROGUI_Module::getViewer( const int theId ) const
{
if( myViewManagerMap.contains( theId ) )
return NULL;
}
+OCCViewer_Viewer* HYDROGUI_Module::getOCCViewer( const int theId ) const
+{
+ if( myViewManagerMap.contains( theId ) )
+ {
+ ViewManagerInfo anInfo = myViewManagerMap[ theId ];
+ OCCViewer_ViewManager* aViewManager =
+ ::qobject_cast<OCCViewer_ViewManager*>( anInfo.first );
+ if( aViewManager )
+ return aViewManager->getOCCViewer();
+ }
+ return NULL;
+}
+
int HYDROGUI_Module::getViewManagerId( SUIT_ViewManager* theViewManager )
{
ViewManagerMapIterator anIter( myViewManagerMap );
}
bool HYDROGUI_Module::isObjectVisible( const int theViewId,
- const Handle(HYDROData_Object)& theObject )
+ const Handle(HYDROData_Entity)& theObject ) const
{
if( theObject.IsNull() )
return false;
}
void HYDROGUI_Module::setObjectVisible( const int theViewId,
- const Handle(HYDROData_Object)& theObject,
+ const Handle(HYDROData_Entity)& theObject,
const bool theState )
{
if( !theObject.IsNull() )
}
}
+HYDROGUI_Shape* HYDROGUI_Module::getObjectShape( const int theViewId,
+ const Handle(HYDROData_Entity)& theObject ) const
+{
+ HYDROGUI_Shape* aResShape = NULL;
+ if( theObject.IsNull() )
+ return aResShape;
+
+ if ( myShapesMap.contains( theViewId ) )
+ {
+ const ListOfShapes& aViewShapes = myShapesMap.value( theViewId );
+ foreach ( HYDROGUI_Shape* aShape, aViewShapes )
+ {
+ if ( !aShape || !IsEqual( aShape->getObject(), theObject ) )
+ continue;
+
+ aResShape = aShape;
+ break;
+ }
+ }
+
+ return aResShape;
+}
+
+void HYDROGUI_Module::setObjectShape( const int theViewId,
+ const Handle(HYDROData_Entity)& theObject,
+ HYDROGUI_Shape* theShape )
+{
+ if( theObject.IsNull() )
+ return;
+
+ ListOfShapes& aViewShapes = myShapesMap[ theViewId ];
+ aViewShapes.append( theShape );
+}
+
+void HYDROGUI_Module::removeObjectShape( const int theViewId,
+ const Handle(HYDROData_Entity)& theObject )
+{
+ if ( !myShapesMap.contains( theViewId ) )
+ return;
+
+ ListOfShapes& aViewShapes = myShapesMap[ theViewId ];
+ for ( int i = 0; i < aViewShapes.length(); )
+ {
+ HYDROGUI_Shape* aShape = aViewShapes.at( i );
+ if ( aShape && IsEqual( aShape->getObject(), theObject ) )
+ {
+ delete aShape;
+ aViewShapes.removeAt( i );
+ continue;
+ }
+
+ ++i;
+ }
+}
+
+void HYDROGUI_Module::removeViewShapes( const int theViewId )
+{
+ if ( !myShapesMap.contains( theViewId ) )
+ return;
+
+ const ListOfShapes& aViewShapes = myShapesMap.value( theViewId );
+ for ( int i = 0, n = aViewShapes.length(); i < n; ++i )
+ {
+ HYDROGUI_Shape* aShape = aViewShapes.at( i );
+ if ( aShape )
+ delete aShape;
+ }
+
+ myShapesMap.remove( theViewId );
+}
+
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( GraphicsView_ViewPort* aViewPort = aViewer->getActiveViewPort() )
{
+ if( aRole != VMR_TransformImage && aRole != VMR_ReferenceImage )
+ aViewPort->scale( 1, -1 ); // invert the Y axis direction from down to up
+
aViewPort->setInteractionFlag( GraphicsView_ViewPort::TraceBoundingRect );
aViewPort->setInteractionFlag( GraphicsView_ViewPort::ImmediateContextMenu );
aViewPort->setInteractionFlag( GraphicsView_ViewPort::ImmediateSelection );
//aViewPort->setViewLabelPosition( GraphicsView_ViewPort::VLP_BottomLeft, true );
}
- SUIT_ViewManager* aViewManager = aViewer->getViewManager();
- ViewManagerRole aRole = getViewManagerRole( aViewManager );
if( aRole != VMR_TransformImage )
update( UF_Viewer );
if( theViewManager->getType() == GraphicsView_Viewer::Type() )
{
- createSelector( theViewManager ); // replace the default selector
-
+ connect( theViewManager, SIGNAL( viewCreated( SUIT_ViewWindow* ) ),
+ this, SLOT( onViewCreated( SUIT_ViewWindow* ) ) );
+ }
+ else if( theViewManager->getType() == OCCViewer_Viewer::Type() )
+ {
connect( theViewManager, SIGNAL( viewCreated( SUIT_ViewWindow* ) ),
this, SLOT( onViewCreated( SUIT_ViewWindow* ) ) );
}
+ createSelector( theViewManager ); // replace the default selector
+
ViewManagerInfo anInfo( theViewManager, VMR_General );
myViewManagerMap.insert( ViewManagerId++, anInfo );
}
int anId = getViewManagerId( theViewManager );
if( anId != -1 )
+ {
+ OCCViewer_ViewManager* anOCCViewManager =
+ ::qobject_cast<OCCViewer_ViewManager*>( myViewManagerMap[ anId ].first );
+ if ( anOCCViewManager )
+ {
+ OCCViewer_Viewer* anOCCViewer = anOCCViewManager->getOCCViewer();
+ if ( anOCCViewer )
+ removeViewShapes( (size_t)anOCCViewer );
+ }
+
myViewManagerMap.remove( anId );
+ }
}
void HYDROGUI_Module::onViewCreated( SUIT_ViewWindow* theViewWindow )
connect( aViewPort, SIGNAL( vpMouseEvent( QGraphicsSceneMouseEvent* ) ),
this, SLOT( onViewPortMouseEvent( QGraphicsSceneMouseEvent* ) ) );
- return;
+ }
+ }
+ else if( theViewWindow && theViewWindow->inherits( "OCCViewer_ViewFrame" ) )
+ {
+ if( OCCViewer_ViewFrame* aViewFrame = dynamic_cast<OCCViewer_ViewFrame*>( theViewWindow ) )
+ {
+ aViewFrame->onTopView();
}
}
}
void HYDROGUI_Module::onViewPortMouseEvent( QGraphicsSceneMouseEvent* theEvent )
{
+ /* ouv: currently unused
if( GraphicsView_ViewPort* aViewPort = qobject_cast<GraphicsView_ViewPort*>( sender() ) )
{
SUIT_ViewManager* aViewManager = 0;
int aXDeg = 0, aYDeg = 0;
int aXMin = 0, aYMin = 0;
double aXSec = 0, aYSec = 0;
- HYDROGUI_Tool::DoubleToLambert( aMouseX, aXDeg, aXMin, aXSec );
- HYDROGUI_Tool::DoubleToLambert( aMouseY, aYDeg, aYMin, aYSec );
+ HYDROData_Lambert93::secToDMS( aMouseX, aXDeg, aXMin, aXSec );
+ HYDROData_Lambert93::secToDMS( aMouseY, aYDeg, aYMin, aYSec );
QString aDegSymbol( QChar( 0x00B0 ) );
QString aXStr = QString( "%1%2 %3' %4\"" ).arg( aXDeg ).arg( aDegSymbol ).arg( aXMin ).arg( aXSec );
else if( aRole == VMR_TransformImage )
aViewPort->setViewLabelText( QString( "X: %1\nY: %2" ).arg( (int)aMouseX ).arg( (int)aMouseY ) );
}
+ */
}
void HYDROGUI_Module::updateGV( const bool theIsInit,
// currently, all views are updated
ViewManagerMapIterator anIter( myViewManagerMap );
while( anIter.hasNext() )
- {
- int anId = anIter.next().key();
+ {
+ GraphicsView_ViewManager* aViewManager =
+ dynamic_cast<GraphicsView_ViewManager*>( anIter.next().value().first );
+ if ( !aViewManager )
+ continue;
+
+ int anId = anIter.key();
aViewManagerIdList.append( anId );
}
getDisplayer()->UpdateAll( anIdIter.next(), theIsInit, theIsForced );
}
+void HYDROGUI_Module::updateOCCViewer( const bool theIsInit,
+ const bool theIsForced )
+{
+ HYDROGUI_OCCDisplayer* anOCCDisplayer = getOCCDisplayer();
+ if( !anOCCDisplayer )
+ return;
+
+ QList<int> aViewManagerIdList;
+
+ // currently, all views are updated
+ ViewManagerMapIterator anIter( myViewManagerMap );
+ while( anIter.hasNext() )
+ {
+ OCCViewer_ViewManager* aViewManager =
+ ::qobject_cast<OCCViewer_ViewManager*>( anIter.next().value().first );
+ if ( !aViewManager )
+ continue;
+
+ int anId = anIter.key();
+ aViewManagerIdList.append( anId );
+ }
+
+ QListIterator<int> anIdIter( aViewManagerIdList );
+ while( anIdIter.hasNext() )
+ anOCCDisplayer->UpdateAll( anIdIter.next(), theIsInit, theIsForced );
+}
+
void HYDROGUI_Module::createSelector( SUIT_ViewManager* theViewManager )
{
if( !theViewManager )
return;
QString aViewType = theViewManager->getType();
- if( aViewType != GraphicsView_Viewer::Type() )
- return;
-
- GraphicsView_ViewManager* aViewManager =
- dynamic_cast<GraphicsView_ViewManager*>( theViewManager );
- if( !aViewManager )
+ if( aViewType != GraphicsView_Viewer::Type() &&
+ aViewType != OCCViewer_Viewer::Type())
return;
QList<SUIT_Selector*> aSelectorList;
for( anIter = aSelectorList.begin(); anIter != anIterEnd; anIter++ )
{
SUIT_Selector* aSelector = *anIter;
- if( aSelector && !dynamic_cast<HYDROGUI_GVSelector*>( aSelector ) )
+ if( aSelector && ( !dynamic_cast<HYDROGUI_GVSelector*>( aSelector ) &&
+ !dynamic_cast<HYDROGUI_OCCSelector*>( aSelector ) ) )
aSelector->setEnabled( false );
}
- new HYDROGUI_GVSelector( this, aViewManager->getViewer(), aSelectionMgr );
+ if ( aViewType == GraphicsView_Viewer::Type() )
+ {
+ GraphicsView_ViewManager* aViewManager =
+ ::qobject_cast<GraphicsView_ViewManager*>( theViewManager );
+ if( aViewManager )
+ new HYDROGUI_GVSelector( this, aViewManager->getViewer(), aSelectionMgr );
+ }
+ else if ( aViewType == OCCViewer_Viewer::Type() )
+ {
+ OCCViewer_ViewManager* aViewManager =
+ ::qobject_cast<OCCViewer_ViewManager*>( theViewManager );
+ if( aViewManager )
+ new HYDROGUI_OCCSelector( this, aViewManager->getOCCViewer(), aSelectionMgr );
+ }
}
bool HYDROGUI_Module::setUpdateEnabled( const bool theState )
{
return myIsUpdateEnabled;
}
+
+QStringList HYDROGUI_Module::storeSelection() const
+{
+ QStringList anEntryList;
+ if( LightApp_SelectionMgr* aSelectionMgr = getApp()->selectionMgr() )
+ {
+ SUIT_DataOwnerPtrList aList( true );
+ aSelectionMgr->selected( aList );
+
+ SUIT_DataOwnerPtrList::iterator anIter;
+ for( anIter = aList.begin(); anIter != aList.end(); anIter++ )
+ {
+ const LightApp_DataOwner* anOwner =
+ dynamic_cast<const LightApp_DataOwner*>( (*anIter).operator->() );
+ if( anOwner )
+ anEntryList.append( anOwner->entry() );
+ }
+ }
+ return anEntryList;
+}
+
+void HYDROGUI_Module::restoreSelection( const QStringList& theEntryList )
+{
+ if( LightApp_SelectionMgr* aSelectionMgr = getApp()->selectionMgr() )
+ {
+ SUIT_DataOwnerPtrList aList( true );
+ for( int anIndex = 0, aSize = theEntryList.size(); anIndex < aSize; anIndex++ )
+ aList.append( SUIT_DataOwnerPtr( new LightApp_DataOwner( theEntryList[ anIndex ] ) ) );
+ aSelectionMgr->setSelected( aList );
+ }
+}