X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_Module.cxx;h=03a78832368f51deb1616c17644940f9052df243;hb=6eed8444c3fc377ad0bf2fdd536ffc4657dad034;hp=0de17dd44bae6ae28c799c1f9de0416b57e382ed;hpb=849f125b49a415b2f1432d5e0681e875a92fb27d;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_Module.cxx b/src/HYDROGUI/HYDROGUI_Module.cxx index 0de17dd4..03a78832 100644 --- a/src/HYDROGUI/HYDROGUI_Module.cxx +++ b/src/HYDROGUI/HYDROGUI_Module.cxx @@ -30,6 +30,7 @@ #include "HYDROGUI_Operations.h" #include "HYDROGUI_PrsImage.h" #include "HYDROGUI_Tool.h" +#include "HYDROGUI_Tool2.h" #include "HYDROGUI_UpdateFlags.h" #include "HYDROGUI_Shape.h" #include "HYDROGUI_VTKPrs.h" @@ -39,7 +40,8 @@ #include "HYDROGUI_SetColorOp.h" #include "HYDROGUI_ImportGeomObjectOp.h" #include "HYDROGUI_ShowHideOp.h" - +#include "HYDROGUI_Overview.h" +#include #include #include #include @@ -47,6 +49,8 @@ #include #include #include +#include +#include #include @@ -119,7 +123,8 @@ HYDROGUI_Module::HYDROGUI_Module() : LightApp_Module( "HYDRO" ), myDisplayer( 0 ), myOCCDisplayer( 0 ), - myIsUpdateEnabled( true ) + myIsUpdateEnabled( true ), + myOverview( 0 ) { } @@ -208,17 +213,34 @@ bool HYDROGUI_Module::activateModule( SUIT_Study* theStudy ) ViewManagerList anOCCViewManagers; anApp->viewManagers( OCCViewer_Viewer::Type(), anOCCViewManagers ); - foreach ( const SUIT_ViewManager* aViewManager, anOCCViewManagers ) { + + foreach ( SUIT_ViewManager* aViewManager, anOCCViewManagers ) + { connect( aViewManager, SIGNAL( mouseMove( SUIT_ViewWindow*, QMouseEvent* ) ), this, SLOT( onMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) ); - foreach( SUIT_ViewWindow* aViewWindow, aViewManager->getViews() ) { + connect( aViewManager, SIGNAL( activated( SUIT_ViewManager* ) ), + this, SLOT( onViewActivated( SUIT_ViewManager* ) ) ); + + OCCViewer_ViewManager* occ_mgr = dynamic_cast( aViewManager ); + if( occ_mgr ) + { + occ_mgr->setChainedOperations( true );//TODO: via preferences + } + + foreach( SUIT_ViewWindow* aViewWindow, aViewManager->getViews() ) + { OCCViewer_ViewFrame* aViewFrame = dynamic_cast( aViewWindow ); - if ( aViewFrame && aViewFrame->getViewPort() ) { + if ( aViewFrame && aViewFrame->getViewPort() ) + { aViewFrame->getViewPort()->installEventFilter( this ); } } } + preferencesChanged( "HYDRO", "zoom_shutoff" ); + + preferencesChanged( "HYDRO", "chained_panning" ); + // Load GEOM data SalomeApp_Study* aStudy = dynamic_cast( getApp()->activeStudy() ); @@ -234,6 +256,7 @@ bool HYDROGUI_Module::activateModule( SUIT_Study* theStudy ) } } + // SUIT_DataBrowser* ob = getApp()->objectBrowser(); // SUIT_AbstractModel* treeModel = dynamic_cast( ob->model() ); // treeModel->setAppropriate( SUIT_DataObject::VisibilityId, Qtx::Toggled ); @@ -253,9 +276,17 @@ bool HYDROGUI_Module::deactivateModule( SUIT_Study* theStudy ) ViewManagerList anOCCViewManagers; getApp()->viewManagers( OCCViewer_Viewer::Type(), anOCCViewManagers ); - foreach ( const SUIT_ViewManager* aViewManager, anOCCViewManagers ) { + foreach ( SUIT_ViewManager* aViewManager, anOCCViewManagers ) + { disconnect( aViewManager, SIGNAL( mouseMove( SUIT_ViewWindow*, QMouseEvent* ) ), this, SLOT( onMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) ); + + OCCViewer_ViewManager* occ_mgr = dynamic_cast( aViewManager ); + if( occ_mgr ) + { + occ_mgr->setChainedOperations( false ); + setAutoZoom( occ_mgr, true ); + } } /* Issues ## 68, 88. @@ -281,17 +312,36 @@ bool HYDROGUI_Module::deactivateModule( SUIT_Study* theStudy ) HYDROGUI_Tool::setOCCActionShown( this, OCCViewer_ViewWindow::MaximizedId, true ); myActiveOperationMap.clear(); + + myViewManagerMap.clear(); + return LightApp_Module::deactivateModule( theStudy ); } void HYDROGUI_Module::windows( QMap& theMap ) const { + static bool inWindows = false; + if( inWindows ) + return; + 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 ); + theMap.insert( OverviewWindow, Qt::LeftDockWidgetArea ); + + inWindows = true; + LightApp_Application* app = getApp(); + if( app && app->getWindow( OverviewWindow )==0 ) + { + const_cast( this )->myOverview = + new HYDROGUI_Overview( tr( "OVERVIEW" ), 0, app->desktop() ); + app->insertDockWindow( OverviewWindow, myOverview ); + app->placeDockWindow( OverviewWindow, Qt::LeftDockWidgetArea ); + } + inWindows = false; } void HYDROGUI_Module::viewManagers( QStringList& theTypesList ) const @@ -323,7 +373,7 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient, bool anIsImageHasRefs = false; bool anIsFusedImage = false; bool anIsCutImage = false; - bool anIsSplittedImage = false; + bool anIsSplitImage = false; bool anIsMustObjectBeUpdated = false; bool anIsPolyline = false; bool anIsPolyline3D = false; @@ -338,7 +388,7 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient, bool anIsZone = false; bool anIsObstacle = false; bool anIsStricklerTable = false; - bool anIsLandCover = false; + bool anIsLandCoverMap = false; bool anIsStream = false; bool anIsChannel = false; bool anIsDigue = false; @@ -399,7 +449,7 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient, anIsVisibleInSelection |= aVisibility; anIsHiddenInSelection |= !aVisibility; - if ( anObject->CanBeUpdated() && anObject->IsMustBeUpdated() ) + if ( anObject->CanBeUpdated() && anObject->IsMustBeUpdated( HYDROData_Entity::Geom_All ) ) { anIsMustObjectBeUpdated = true; } @@ -423,7 +473,7 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient, else if( anOperatorName == ImageComposer_CutOperator::Type() ) anIsCutImage = true; else if( anOperatorName == ImageComposer_CropOperator::Type() ) - anIsSplittedImage = true; + anIsSplitImage = true; } } } @@ -459,15 +509,15 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient, anIsObstacle = true; else if( anObjectKind == KIND_STRICKLER_TABLE ) anIsStricklerTable = true; - else if( anObjectKind == KIND_LAND_COVER ) - anIsLandCover = true; + else if( anObjectKind == KIND_LAND_COVER_MAP ) + anIsLandCoverMap = true; else if( anObjectKind == KIND_STREAM ) { anIsStream = true; Handle(HYDROData_Stream) aStream = Handle(HYDROData_Stream)::DownCast( anObject ); if ( !aStream.IsNull() ) - isStreamHasBottom = !aStream->GetBottomPolyline().IsNull(); + isStreamHasBottom = !aStream->GetBottomPolyline().IsNull(); } else if( anObjectKind == KIND_CHANNEL ) anIsChannel = true; @@ -475,7 +525,7 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient, anIsDigue = true; else if( anObjectKind == KIND_DUMMY_3D ) anIsDummyObject3D = true; - else if( anObjectKind == KIND_SHAPES_GROUP || anObjectKind == KIND_SPLITTED_GROUP ) + else if( anObjectKind == KIND_SHAPES_GROUP || anObjectKind == KIND_SPLIT_GROUP ) anIsGroup = true; } @@ -485,7 +535,7 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient, // Check if all selected objects are profiles anAllAreProfiles = ( aNbOfSelectedProfiles > 0 ) && - ( aNbOfSelectedProfiles == aSeq.Length() ); + ( aNbOfSelectedProfiles == aSeq.Length() ); // check the selected partitions if( !anIsSelectedDataObjects && anIsObjectBrowser ) @@ -495,51 +545,61 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient, { switch( aSelectedPartition ) { - case KIND_IMAGE: - theMenu->addAction( action( ImportImageId ) ); - break; - case KIND_BATHYMETRY: - theMenu->addAction( action( ImportBathymetryId ) ); - break; - case KIND_ARTIFICIAL_OBJECT: - theMenu->addAction( action( CreateChannelId ) ); - theMenu->addAction( action( CreateDigueId ) ); - break; - case KIND_NATURAL_OBJECT: - theMenu->addAction( action( CreateImmersibleZoneId ) ); - theMenu->addAction( action( CreateStreamId ) ); - break; - case KIND_OBSTACLE: - theMenu->addAction( action( ImportObstacleFromFileId ) ); - theMenu->addAction( action( CreateBoxId ) ); - theMenu->addAction( action( CreateCylinderId ) ); - break; - case KIND_STRICKLER_TABLE: - theMenu->addAction( action( ImportStricklerTableFromFileId ) ); - break; - case KIND_LAND_COVER: - theMenu->addAction( action( CreateLandCoverId ) ); - break; - case KIND_CALCULATION: - theMenu->addAction( action( CreateCalculationId ) ); - break; - case KIND_POLYLINEXY: - theMenu->addAction( action( CreatePolylineId ) ); - break; - case KIND_POLYLINE: - theMenu->addAction( action( CreatePolyline3DId ) ); - break; - case KIND_PROFILE: - theMenu->addAction( action( CreateProfileId ) ); - theMenu->addAction( action( ImportProfilesId ) ); - theMenu->addAction( action( AllGeoreferencementId ) ); - break; - case KIND_VISUAL_STATE: - theMenu->addAction( action( SaveVisualStateId ) ); - break; + case KIND_IMAGE: + theMenu->addAction( action( ImportImageId ) ); + break; + case KIND_BATHYMETRY: + theMenu->addAction( action( ImportBathymetryId ) ); + break; + case KIND_ARTIFICIAL_OBJECT: + theMenu->addAction( action( CreateChannelId ) ); + theMenu->addAction( action( CreateDigueId ) ); + break; + case KIND_NATURAL_OBJECT: + theMenu->addAction( action( CreateImmersibleZoneId ) ); + theMenu->addAction( action( CreateStreamId ) ); + break; + case KIND_OBSTACLE: + theMenu->addAction( action( ImportObstacleFromFileId ) ); + theMenu->addAction( action( CreateBoxId ) ); + theMenu->addAction( action( CreateCylinderId ) ); + break; + case KIND_STRICKLER_TABLE: + theMenu->addAction( action( ImportStricklerTableFromFileId ) ); + break; + case KIND_LAND_COVER_MAP: + theMenu->addAction( action( CreateLandCoverMapId ) ); + theMenu->addAction( action( ImportLandCoverMapId ) ); + break; + case KIND_CALCULATION: + theMenu->addAction( action( CreateCalculationId ) ); + break; + case KIND_POLYLINEXY: + theMenu->addAction( action( ImportPolylineId ) ); + theMenu->addAction( action( CreatePolylineId ) ); + break; + case KIND_POLYLINE: + theMenu->addAction( action( CreatePolyline3DId ) ); + break; + case KIND_PROFILE: + theMenu->addAction( action( CreateProfileId ) ); + theMenu->addAction( action( ImportProfilesId ) ); + theMenu->addAction( action( AllGeoreferencementId ) ); + break; + case KIND_VISUAL_STATE: + theMenu->addAction( action( SaveVisualStateId ) ); + break; } theMenu->addSeparator(); } + else + { + Handle(HYDROData_CalculationCase) aCalcCase; + QString outStr; + HYDROGUI_Tool::IsSelectedPartOfCalcCase(this, aCalcCase, outStr); + if (outStr == HYDROGUI_DataModel::partitionName( KIND_REGION )) + theMenu->addAction( action( RegenerateRegionColorsId ) ); + } } if( anIsSelectedDataObjects ) @@ -568,8 +628,8 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient, theMenu->addAction( action( EditFusedImageId ) ); else if( anIsCutImage ) theMenu->addAction( action( EditCutImageId ) ); - else if( anIsSplittedImage ) - theMenu->addAction( action( EditSplittedImageId ) ); + else if( anIsSplitImage ) + theMenu->addAction( action( EditSplitImageId ) ); } //RKV: BUG#98: theMenu->addAction( action( ObserveImageId ) ); @@ -599,6 +659,9 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient, { theMenu->addAction( action( EditPolylineId ) ); theMenu->addSeparator(); + theMenu->addAction( action( SplitPolylinesId ) ); + theMenu->addAction( action( MergePolylinesId ) ); + theMenu->addSeparator(); } else if( anIsPolyline3D ) { @@ -627,8 +690,8 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient, theMenu->addAction( action( EditStreamId ) ); if ( action( RiverBottomContextId ) ) { - theMenu->addAction( action( RiverBottomContextId ) ); - action( RiverBottomContextId )->setEnabled( !isStreamHasBottom ); + theMenu->addAction( action( RiverBottomContextId ) ); + action( RiverBottomContextId )->setEnabled( !isStreamHasBottom ); } theMenu->addAction( action( ProfileInterpolateId ) ); theMenu->addSeparator(); @@ -661,14 +724,22 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient, HYDROGUI_DataObject::dataObjectEntry( getLandCoverColoringTable( anActiveViewId ) ); bool isUsed = aCurrentTable == HYDROGUI_DataObject::dataObjectEntry( aTable ); - if ( !isUsed && !getObjectShapes( anActiveViewId, KIND_LAND_COVER ).isEmpty() ) { + if ( !isUsed && !getObjectShapes( anActiveViewId, KIND_LAND_COVER_MAP ).isEmpty() ) { theMenu->addAction( action( LandCoverScalarMapModeOnId ) ); theMenu->addSeparator(); } } - else if( anIsLandCover ) + else if( anIsLandCoverMap ) { - theMenu->addAction( action( EditLandCoverId ) ); + theMenu->addAction( action( AddLandCoverId ) ); + theMenu->addAction( action( RemoveLandCoverId ) ); + theMenu->addSeparator(); + theMenu->addAction( action( SplitLandCoverId ) ); + theMenu->addAction( action( MergeLandCoverId ) ); + theMenu->addAction( action( ChangeLandCoverTypeId ) ); + theMenu->addSeparator(); + // + theMenu->addAction( action( ExportToShapeFileID ) ); theMenu->addSeparator(); } else if( anIsVisualState && anIsObjectBrowser ) @@ -677,6 +748,8 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient, theMenu->addAction( action( LoadVisualStateId ) ); theMenu->addSeparator(); } + else if (anIsZone) + theMenu->addAction( action( ZoneSetColorId ) ); if ( anIsStream || anIsChannel || anIsDigue || anIsObstacle ) { @@ -690,13 +763,23 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient, theMenu->addAction( action( SetColorId ) ); theMenu->addSeparator(); } - } else if ( anAllAreProfiles ) { + + // Add transparency action for land cover map objects + if ( anIsLandCoverMap ) + { + theMenu->addAction( action( SetTransparencyId ) ); + theMenu->addSeparator(); + } + } + else if ( anAllAreProfiles ) + { + theMenu->addAction( action( EditProfileId ) ); theMenu->addAction( action( SelectedGeoreferencementId ) ); theMenu->addSeparator(); } - bool anIsPoly = anIsPolyline || anIsPolyline3D; - if ((anIsPoly && !anIsLandCover) || (!anIsPoly && anIsLandCover)) + bool isPoly = anIsPolyline || anIsPolyline3D; + if (isPoly && !anIsLandCoverMap) theMenu->addAction( action( ExportToShapeFileID ) ); // Add copy action @@ -713,10 +796,10 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient, theMenu->addSeparator(); if( anIsImage || anIsPolyline || anIsPolyline3D || - anIsImmersibleZone || anIsZone || anIsRegion || - anIsBathymetry || anIsObstacle || anIsStream || - anIsChannel || anIsDigue || anIsDummyObject3D || - anIsValidProfile || anIsGroup || anIsLandCover ) + anIsImmersibleZone || anIsZone || anIsRegion || + anIsBathymetry || anIsObstacle || anIsStream || + anIsChannel || anIsDigue || anIsDummyObject3D || + anIsValidProfile || anIsGroup || anIsLandCoverMap ) { if( anIsHiddenInSelection ) theMenu->addAction( action( ShowId ) ); @@ -750,7 +833,7 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient, theMenu->addAction( action( HideAllId ) ); theMenu->addSeparator(); } - + if ( anIsOCCView || anIsVTKView ) { theMenu->addSeparator(); @@ -764,16 +847,40 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient, { if( aSeq.Size() > 0 ) { - Handle( HYDROData_Object ) anObject = Handle( HYDROData_Object )::DownCast( aSeq.First() ); + Handle( HYDROData_Entity ) aFirstEnt = aSeq.First(); + Handle(HYDROData_Object) anObject; + Handle(HYDROData_ArtificialObject) anAObject = Handle( HYDROData_ArtificialObject )::DownCast(aFirstEnt); + Handle(HYDROData_NaturalObject) aNObject = Handle( HYDROData_NaturalObject )::DownCast(aFirstEnt); + + if (!anAObject.IsNull()) + anObject = anAObject; + if (!aNObject.IsNull()) + anObject = aNObject; + if( !anObject.IsNull() ) { theMenu->addSeparator(); - theMenu->addAction( action( SubmersibleId ) ); - action( SubmersibleId )->setCheckable( true ); - action( SubmersibleId )->setChecked( anObject->IsSubmersible() ); + bool IsSubmersible = anObject->IsSubmersible(); + if (!IsSubmersible) + { + theMenu->addAction( action( SubmersibleId ) ); + action( SubmersibleId )->setCheckable(true); + action( SubmersibleId )->setChecked(true); + } + else + { + theMenu->addAction( action( UnSubmersibleId ) ); + action( UnSubmersibleId )->setCheckable(true); + action( UnSubmersibleId )->setChecked(true); + } } } } + + theMenu->addSeparator(); + QAction* a = action( ShowHideArrows ); + a->setText( arrowsVisible() ? tr( "HIDE_ARROWS" ) : tr( "SHOW_ARROWS" ) ); + theMenu->addAction( a ); } void HYDROGUI_Module::createPreferences() @@ -803,6 +910,10 @@ void HYDROGUI_Module::createPreferences() addPreference( tr( "PREF_VIEWER_AUTO_FITALL" ), viewerGroup, LightApp_Preferences::Bool, "HYDRO", "auto_fit_all" ); + addPreference( tr( "PREF_VIEWER_ZOOM_SHUTOFF" ), viewerGroup, LightApp_Preferences::Bool, "HYDRO", "zoom_shutoff" ); + + addPreference( tr( "PREF_VIEWER_CHAINED_PANNING" ), viewerGroup, LightApp_Preferences::Bool, "HYDRO", "chained_panning" ); + int StricklerTableGroup = addPreference( tr( "PREF_GROUP_STRICKLER_TABLE" ), genTab ); int defaultStricklerCoef = addPreference( tr( "PREF_DEFAULT_STRICKLER_COEFFICIENT" ), StricklerTableGroup, LightApp_Preferences::DblSpin, "preferences", "default_strickler_coefficient" ); @@ -810,19 +921,85 @@ void HYDROGUI_Module::createPreferences() setPreferenceProperty( defaultStricklerCoef, "min", 0.00 ); setPreferenceProperty( defaultStricklerCoef, "max", 1000000.00 ); setPreferenceProperty( defaultStricklerCoef, "step", 0.01 ); + + int polylinesGroup = addPreference( tr( "PREF_GROUP_POLYLINES" ), genTab ); + int polylineArrow = addPreference( tr( "PREF_POLYLINE_ARROW" ), polylinesGroup, + LightApp_Preferences::Selector, "polyline", "arrow_type" ); + + QList arrow_types; + arrow_types.append( tr( "No" ) ); + arrow_types.append( tr( "Triangle" ) ); + arrow_types.append( tr( "Cone" ) ); + setPreferenceProperty( polylineArrow, "strings", arrow_types ); + + QList indices; + indices.append( 0 ); + indices.append( 1 ); + indices.append( 2 ); + setPreferenceProperty( polylineArrow, "indexes", indices ); + setPreferenceProperty( polylineArrow, "ids", indices ); + + int polylineSize = addPreference( tr( "PREF_POLYLINE_ARROW_SIZE" ), polylinesGroup, + LightApp_Preferences::IntSpin, "polyline", "arrow_size" ); } void HYDROGUI_Module::preferencesChanged( const QString& theSection, const QString& thePref ) { + SUIT_ResourceMgr* resMgr = application()->resourceMgr(); if ( theSection == "preferences" && thePref == "default_strickler_coefficient" ) { - SUIT_ResourceMgr* resMgr = application()->resourceMgr(); + Handle(HYDROData_Document) aDoc = HYDROData_Document::Document( application()->activeStudy()->id() ); if ( resMgr && !aDoc.IsNull() ) aDoc->SetDefaultStricklerCoefficient( resMgr->doubleValue( theSection, thePref, 0 ) ); } + else if( theSection == "polyline" ) + { + int aType = -1; + int aSize = -1; + if( resMgr ) + { + resMgr->value( "polyline", "arrow_type", aType ); + resMgr->value( "polyline", "arrow_size", aSize ); + } + //Update polylines + ViewManagerMap::const_iterator it = myViewManagerMap.begin(), last = myViewManagerMap.end(); + for( ; it!=last; it++ ) + { + int aViewerId = it.key(); + OCCViewer_ViewManager* aMgr = dynamic_cast( it.value().first ); + if( aMgr ) + getOCCDisplayer()->UpdatePolylines( aViewerId, aType, aSize ); + } + } + else if (theSection == "HYDRO" && thePref == "zoom_shutoff") + { + bool aZoomShutoff = resMgr->booleanValue( "HYDRO", "zoom_shutoff" ); + setAutoZoomToAllViewManagers(!aZoomShutoff); + } + else if (theSection == "HYDRO" && thePref == "chained_panning") + { + bool aChainedPan = resMgr->booleanValue( "HYDRO", "chained_panning" ); + if (!aChainedPan) + resetViewState(); + ViewManagerList aViewManagers = getApp()->viewManagers(); + foreach (SUIT_ViewManager* aVMgr, aViewManagers) + { + OCCViewer_ViewManager* anOCCViewMgr = dynamic_cast( aVMgr ); + if (anOCCViewMgr) + anOCCViewMgr->setChainedOperations( aChainedPan ); + } + + QList docW = getApp()->desktop()->findChildren(); + foreach (QDockWidget* qw, docW) + { + HYDROGUI_ProfileDlg* pdlg = dynamic_cast(qw); + if (pdlg) + pdlg->viewManager()->setChainedOperations(aChainedPan); + } + } else - LightApp_Module::preferencesChanged( theSection, thePref ); + LightApp_Module::preferencesChanged( theSection, thePref ); } QCursor HYDROGUI_Module::getPrefEditCursor() const @@ -897,6 +1074,10 @@ void HYDROGUI_Module::update( const int flags ) setUpdateEnabled( true ); + preferencesChanged( "HYDRO", "zoom_shutoff" ); + + preferencesChanged( "HYDRO", "chained_panning" ); + QApplication::restoreOverrideCursor(); } @@ -1068,15 +1249,18 @@ void HYDROGUI_Module::setObjectVisible( const int theViewId, if ( hydroObject ) { SUIT_AbstractModel* treeModel = dynamic_cast( getApp()->objectBrowser()->model() ); - QString id = hydroObject->text( hydroObject->customData( Qtx::IdType ).toInt() ); - Qtx::VisibilityState visState = treeModel->visibilityState( id ); - if ( visState != Qtx::UnpresentableState ) + if ( treeModel ) + { + QString id = hydroObject->text( hydroObject->customData( Qtx::IdType ).toInt() ); + Qtx::VisibilityState visState = treeModel->visibilityState( id ); + if ( visState != Qtx::UnpresentableState ) treeModel->setVisibilityState( id, theState ? Qtx::ShownState : Qtx::HiddenState ); + } } if ( theObject->GetKind() == KIND_BATHYMETRY && theState ) { setLandCoversScalarMapModeOff( theViewId ); - } else if ( theObject->GetKind() == KIND_LAND_COVER && theState ) { + } else if ( theObject->GetKind() == KIND_LAND_COVER_MAP && theState ) { getOCCDisplayer()->SetToUpdateColorScale(); } } @@ -1454,10 +1638,15 @@ void HYDROGUI_Module::onViewManagerAdded( SUIT_ViewManager* theViewManager ) } else if( theViewManager->getType() == OCCViewer_Viewer::Type() ) { + OCCViewer_ViewManager* mgr = dynamic_cast( theViewManager ); + //mgr->setChainedOperations( true ); + connect( theViewManager, SIGNAL( viewCreated( SUIT_ViewWindow* ) ), this, SLOT( onViewCreated( SUIT_ViewWindow* ) ) ); connect( theViewManager, SIGNAL( mouseMove( SUIT_ViewWindow*, QMouseEvent* ) ), this, SLOT( onMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) ); + connect( theViewManager, SIGNAL( activated( SUIT_ViewManager* ) ), + this, SLOT( onViewActivated( SUIT_ViewManager* ) ) ); } else if( theViewManager->getType() == SVTK_Viewer::Type() ) { @@ -1517,6 +1706,7 @@ void HYDROGUI_Module::onViewCreated( SUIT_ViewWindow* theViewWindow ) aViewFrame->installEventFilter( this ); GraphicsView_ViewPort* aViewPort = aViewFrame->getViewPort(); + aViewPort->setInteractionFlag( GraphicsView_ViewPort::GlobalWheelScaling ); connect( aViewPort, SIGNAL( vpMouseEvent( QGraphicsSceneMouseEvent* ) ), this, SLOT( onViewPortMouseEvent( QGraphicsSceneMouseEvent* ) ) ); @@ -1529,7 +1719,6 @@ void HYDROGUI_Module::onViewCreated( SUIT_ViewWindow* theViewWindow ) aViewFrame->onTopView(); HYDROGUI_Tool::setOCCActionShown( aViewFrame, OCCViewer_ViewWindow::MaximizedId, false ); - OCCViewer_ViewPort3d* aViewPort = aViewFrame->getViewPort(); if ( aViewPort ) { aViewPort->installEventFilter( this ); @@ -1616,6 +1805,7 @@ void HYDROGUI_Module::updateViewer( HYDROGUI_AbstractDisplayer* theDisplayer, while( anIdIter.hasNext() ) { theDisplayer->UpdateAll( anIdIter.next(), theIsInit, theIsForced, theDoFitAll ); + myOverview->setTopView(); } } @@ -1797,7 +1987,7 @@ void HYDROGUI_Module::onObjectClicked( SUIT_DataObject* theObject, int theColumn setObjectVisible( HYDROGUI_Tool::GetActiveViewId( this ), hydroObject->modelObject(), vis ); - update( UF_OCCViewer | ( visState == Qtx::ShownState ? UF_FitAll : 0 ) ); + update( UF_OCCViewer | UF_VTKViewer | ( visState == Qtx::ShownState ? UF_FitAll : 0 ) ); } Handle(HYDROData_StricklerTable) HYDROGUI_Module::getLandCoverColoringTable( const int theViewId ) const @@ -1848,3 +2038,51 @@ void HYDROGUI_Module::setObjectRemoved( const Handle(HYDROData_Entity)& theObjec } } } + +void HYDROGUI_Module::onViewActivated( SUIT_ViewManager* theMgr ) +{ + if( !theMgr ) + return; + + SUIT_ViewWindow* wnd = theMgr->getActiveView(); + OCCViewer_ViewFrame* occwnd = dynamic_cast( wnd ); + if( !occwnd ) + return; + + myOverview->setMainView( occwnd ); +} + +void HYDROGUI_Module::setAutoZoomToAllViewManagers(bool bAutoZoom) +{ + ViewManagerList aViewManagers = getApp()->viewManagers(); + foreach (SUIT_ViewManager* aVMgr, aViewManagers) + setAutoZoom(aVMgr, bAutoZoom); +} + +void HYDROGUI_Module::setAutoZoom(SUIT_ViewManager* aVMgr, bool bAutoZoom) +{ + if (!aVMgr) + return; + QVector aViews = aVMgr->getViews(); + foreach (SUIT_ViewWindow* aView, aViews) + { + if (aView) + { + OCCViewer_ViewFrame* anOCCViewFrame = dynamic_cast( aView ); + if (anOCCViewFrame) + { + anOCCViewFrame->setAutomaticZoom(bAutoZoom); + for (int i = OCCViewer_ViewFrame::MAIN_VIEW; i<=OCCViewer_ViewFrame::TOP_RIGHT; i++) + { + OCCViewer_ViewWindow* aV = anOCCViewFrame->getView(i); + if (aV) + aV->setAutomaticZoom(bAutoZoom); + } + } + OCCViewer_ViewWindow* anOCCViewWindow = dynamic_cast( aView ); + if (anOCCViewWindow) + anOCCViewWindow->setAutomaticZoom(bAutoZoom); + } + } +} +