X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_Module.cxx;h=c21abdfc7e6d1919df266a149ed60ac297ff0233;hb=07c29bb9bda552734178a94c59e6c3cd6881b754;hp=cb44e201a2f68800dadb181659b0e57dfb2aad4e;hpb=36051bc477f005ec469ec5a9334211948a579f26;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_Module.cxx b/src/HYDROGUI/HYDROGUI_Module.cxx index cb44e201..c21abdfc 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,6 +40,7 @@ #include "HYDROGUI_SetColorOp.h" #include "HYDROGUI_ImportGeomObjectOp.h" #include "HYDROGUI_ShowHideOp.h" +#include "HYDROGUI_Overview.h" #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,12 +213,19 @@ bool HYDROGUI_Module::activateModule( SUIT_Study* theStudy ) ViewManagerList anOCCViewManagers; anApp->viewManagers( OCCViewer_Viewer::Type(), anOCCViewManagers ); - foreach ( const SUIT_ViewManager* aViewManager, anOCCViewManagers ) { + + foreach ( const 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* ) ) ); + + foreach( SUIT_ViewWindow* aViewWindow, aViewManager->getViews() ) + { OCCViewer_ViewFrame* aViewFrame = dynamic_cast( aViewWindow ); - if ( aViewFrame && aViewFrame->getViewPort() ) { + if ( aViewFrame && aViewFrame->getViewPort() ) + { aViewFrame->getViewPort()->installEventFilter( this ); } } @@ -286,12 +298,28 @@ bool HYDROGUI_Module::deactivateModule( SUIT_Study* 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 +351,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 +366,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 +427,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 +451,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,8 +487,8 @@ 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; @@ -475,7 +503,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; } @@ -517,8 +545,9 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient, case KIND_STRICKLER_TABLE: theMenu->addAction( action( ImportStricklerTableFromFileId ) ); break; - case KIND_LAND_COVER: - theMenu->addAction( action( CreateLandCoverId ) ); + case KIND_LAND_COVER_MAP: + theMenu->addAction( action( CreateLandCoverMapId ) ); + theMenu->addAction( action( ImportLandCoverMapId ) ); break; case KIND_CALCULATION: theMenu->addAction( action( CreateCalculationId ) ); @@ -541,6 +570,14 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient, } 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 ) @@ -569,8 +606,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 ) ); @@ -665,14 +702,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 ) @@ -682,19 +727,32 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient, theMenu->addSeparator(); } + if ( anIsStream || anIsChannel || anIsDigue || anIsObstacle ) + { + theMenu->addAction( action( PolylineExtractionId ) ); + theMenu->addSeparator(); + } + // Add set color action for geometrical objects if ( anIsObjectCanBeColored ) { theMenu->addAction( action( SetColorId ) ); theMenu->addSeparator(); } + + // Add transparency action for land cover map objects + if ( anIsLandCoverMap ) + { + theMenu->addAction( action( SetTransparencyId ) ); + theMenu->addSeparator(); + } } else if ( anAllAreProfiles ) { 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 @@ -714,7 +772,7 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient, anIsImmersibleZone || anIsZone || anIsRegion || anIsBathymetry || anIsObstacle || anIsStream || anIsChannel || anIsDigue || anIsDummyObject3D || - anIsValidProfile || anIsGroup || anIsLandCover ) + anIsValidProfile || anIsGroup || anIsLandCoverMap ) { if( anIsHiddenInSelection ) theMenu->addAction( action( ShowId ) ); @@ -762,16 +820,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() @@ -808,6 +890,59 @@ 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" ) + { + + 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 + LightApp_Module::preferencesChanged( theSection, thePref ); } QCursor HYDROGUI_Module::getPrefEditCursor() const @@ -1053,15 +1188,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(); } } @@ -1346,6 +1484,11 @@ void HYDROGUI_Module::updateVTKZRange( const int theViewId, double theRange[] ) } /////////////////// END OF VTKPrs PROCESSING +void HYDROGUI_Module::clearCache() +{ + myObjectStateMap.clear(); +} + CAM_DataModel* HYDROGUI_Module::createDataModel() { return new HYDROGUI_DataModel( this ); @@ -1434,10 +1577,15 @@ void HYDROGUI_Module::onViewManagerAdded( SUIT_ViewManager* theViewManager ) } else if( theViewManager->getType() == OCCViewer_Viewer::Type() ) { + OCCViewer_ViewManager* mgr = dynamic_cast( theViewManager ); + mgr->setChainedOperations( true );//TODO: via preferences + 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() ) { @@ -1497,6 +1645,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* ) ) ); @@ -1777,7 +1926,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 @@ -1828,3 +1977,16 @@ 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 ); +}