X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_Operations.cxx;h=0a96e7986f8f9afffa28f14b8c0a29c913bfe757;hb=d6e19029f8b41f295db878e9aecf451c2edda4af;hp=568da59282584e205d9e46cf2472548fca07dcad;hpb=d6aeef5b61d85b44493cd5d93ed9870cc513e68f;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_Operations.cxx b/src/HYDROGUI/HYDROGUI_Operations.cxx index 568da592..0a96e798 100644 --- a/src/HYDROGUI/HYDROGUI_Operations.cxx +++ b/src/HYDROGUI/HYDROGUI_Operations.cxx @@ -1,12 +1,8 @@ -// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// +// Copyright (C) 2014-2015 EDF-R&D // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either -// version 2.1 of the License. +// version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -22,58 +18,333 @@ #include "HYDROGUI_Operations.h" +#include "HYDROGUI_CopyPasteOp.h" +#include "HYDROGUI_CalculationOp.h" +#include "HYDROGUI_ChannelOp.h" #include "HYDROGUI_DataModel.h" +#include "HYDROGUI_CopyPastePositionOp.h" +#include "HYDROGUI_DeleteOp.h" +#include "HYDROGUI_DigueOp.h" +#include "HYDROGUI_ExportImageOp.h" +#include "HYDROGUI_ExportFileOp.h" #include "HYDROGUI_ImportImageOp.h" +#include "HYDROGUI_ImportPolylineOp.h" +#include "HYDROGUI_ImportBathymetryOp.h" +#include "HYDROGUI_ImmersibleZoneOp.h" #include "HYDROGUI_Module.h" +#include "HYDROGUI_ObserveImageOp.h" +#include "HYDROGUI_PolylineOp.h" +#include "HYDROGUI_Poly3DOp.h" +#include "HYDROGUI_ProfileOp.h" +#include "HYDROGUI_RemoveImageRefsOp.h" +#include "HYDROGUI_ShowHideOp.h" +#include "HYDROGUI_StreamOp.h" #include "HYDROGUI_TwoImagesOp.h" +#include "HYDROGUI_UpdateFlags.h" +#include "HYDROGUI_UpdateObjectOp.h" +#include "HYDROGUI_VisualStateOp.h" +#include "HYDROGUI_ImmersibleZoneOp.h" +#include "HYDROGUI_ImportGeomObjectOp.h" +#include "HYDROGUI_ImportObstacleFromFileOp.h" +#include "HYDROGUI_TranslateObstacleOp.h" +#include "HYDROGUI_ExportCalculationOp.h" +#include "HYDROGUI_ImportProfilesOp.h" +#include "HYDROGUI_GeoreferencementOp.h" +#include "HYDROGUI_SetColorOp.h" +#include "HYDROGUI_BathymetryBoundsOp.h" +#include "HYDROGUI_Tool.h" +#include "HYDROGUI_ZLevelsOp.h" +#include "HYDROGUI_LocalCSOp.h" +#include "HYDROGUI_RiverBottomOp.h" +#include "HYDROGUI_ProfileInterpolateOp.h" +#include "HYDROGUI_SubmersibleOp.h" +#include "HYDROGUI_StricklerTableOp.h" +#include "HYDROGUI_DuplicateOp.h" +#include "HYDROGUI_LandCoverOp.h" #include -#include +#include +#include + +#include +#include +#include + +#include + +#include #include +#include +#include + #include #include +#include +#include #include -#include +#include -QAction* HYDROGUI_Module::CreateAction( const int theId, const QString& theSuffix, const QString& theImg, +QAction* HYDROGUI_Module::createAction( const int theId, const QString& theSuffix, const QString& theImg, const int theKey, const bool isToggle, const QString& theSlot ) { QString aSlot = theSlot; if( aSlot.isEmpty() ) aSlot = SLOT( onOperation() ); - SUIT_ResourceMgr* aMgr = application()->resourceMgr(); + SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr(); std::string anImg = theImg.toStdString(); - QPixmap aPixmap = theImg.isEmpty() ? QPixmap() : aMgr->loadPixmap( "HYDROGUI", tr( anImg.c_str() ) ); + QPixmap aPixmap = theImg.isEmpty() ? QPixmap() : aResMgr->loadPixmap( "HYDRO", tr( anImg.c_str() ) ); std::string aMenu = ( "MEN_" + theSuffix ).toStdString(); std::string aDesktop = ( "DSK_" + theSuffix ).toStdString(); std::string aToolbar = ( "STB_" + theSuffix ).toStdString(); std::string aSlotStr = aSlot.toStdString(); - return LightApp_Module::createAction( theId, tr( aMenu.c_str() ), aPixmap, - tr( aDesktop.c_str() ), tr( aToolbar.c_str() ), + return LightApp_Module::createAction( theId, tr( aDesktop.c_str() ), aPixmap, + tr( aMenu.c_str() ), tr( aToolbar.c_str() ), theKey, application()->desktop(), isToggle, this, aSlotStr.c_str() ); } -void HYDROGUI_Module::CreateActions() +void HYDROGUI_Module::createActions() { - CreateAction( ImportImageId, "IMPORT_IMAGE", "", Qt::CTRL + Qt::Key_I ); + createAction( SaveVisualStateId, "SAVE_VISUAL_STATE" ); + createAction( LoadVisualStateId, "LOAD_VISUAL_STATE" ); + + createAction( CopyId, "COPY", "", Qt::CTRL + Qt::Key_C ); + createAction( PasteId, "PASTE", "", Qt::CTRL + Qt::Key_V ); + + createAction( UpdateObjectId, "UPDATE_OBJECT" ); + createAction( ForcedUpdateObjectId, "FORCED_UPDATE_OBJECT" ); + + createAction( ImportImageId, "IMPORT_IMAGE", "IMPORT_IMAGE_ICO", Qt::CTRL + Qt::Key_I ); + createAction( EditImportedImageId, "EDIT_IMPORTED_IMAGE", "EDIT_IMPORTED_IMAGE_ICO" ); + createAction( ObserveImageId, "OBSERVE_IMAGE", "OBSERVE_IMAGE_ICO" ); + createAction( ExportImageId, "EXPORT_IMAGE", "EXPORT_IMAGE_ICO" ); + createAction( RemoveImageRefsId, "REMOVE_IMAGE_REFERENCE", "REMOVE_IMAGE_REFERENCE_ICO" ); + + createAction( ImportPolylineId, "IMPORT_POLYLINE", "IMPORT_POLYLINE_ICO" ); + + createAction( CreatePolylineId, "CREATE_POLYLINE", "CREATE_POLYLINE_ICO" ); + createAction( EditPolylineId, "EDIT_POLYLINE", "EDIT_POLYLINE_ICO" ); + + createAction( CreatePolyline3DId, "CREATE_POLYLINE_3D", "CREATE_POLYLINE_3D_ICO" ); + createAction( EditPolyline3DId, "EDIT_POLYLINE_3D", "EDIT_POLYLINE_3D_ICO" ); + + createAction( CreateProfileId, "CREATE_PROFILE", "CREATE_PROFILE_ICO" ); + createAction( ImportProfilesId, "IMPORT_PROFILES", "IMPORT_PROFILES_ICO" ); + createAction( EditProfileId, "EDIT_PROFILE", "EDIT_PROFILE_ICO" ); + createAction( AllGeoreferencementId, "GEOREFERENCEMENT", "GEOREFERENCEMENT_ICO" ); + createAction( SelectedGeoreferencementId, "GEOREFERENCEMENT", "GEOREFERENCEMENT_ICO" ); + + createAction( ImportBathymetryId, "IMPORT_BATHYMETRY", "IMPORT_BATHYMETRY_ICO", Qt::CTRL + Qt::Key_B ); + createAction( EditImportedBathymetryId, "EDIT_IMPORTED_BATHYMETRY", "EDIT_IMPORTED_BATHYMETRY_ICO" ); + createAction( BathymetryBoundsId, "BATHYMETRY_BOUNDS", "BATHYMETRY_BOUNDS_ICO" ); + + createAction( CreateImmersibleZoneId, "CREATE_IMMERSIBLE_ZONE", "CREATE_IMMERSIBLE_ZONE_ICO" ); + createAction( EditImmersibleZoneId, "EDIT_IMMERSIBLE_ZONE", "EDIT_IMMERSIBLE_ZONE_ICO" ); + + createAction( CreateStreamId, "CREATE_STREAM", "CREATE_STREAM_ICO" ); + createAction( EditStreamId, "EDIT_STREAM", "EDIT_STREAM_ICO" ); + + createAction( CreateChannelId, "CREATE_CHANNEL", "CREATE_CHANNEL_ICO" ); + createAction( EditChannelId, "EDIT_CHANNEL", "EDIT_CHANNEL_ICO" ); + + createAction( CreateDigueId, "CREATE_DIGUE", "CREATE_DIGUE_ICO" ); + createAction( EditDigueId, "EDIT_DIGUE", "EDIT_DIGUE_ICO" ); + + createAction( ImportStricklerTableFromFileId, "IMPORT_STRICKLER_TABLE", "IMPORT_STRICKLER_TABLE_ICO" ); + createAction( ExportStricklerTableFromFileId, "EXPORT_STRICKLER_TABLE", "EXPORT_STRICKLER_TABLE_ICO" ); + createAction( EditStricklerTableId, "EDIT_STRICKLER_TABLE", "EDIT_STRICKLER_TABLE_ICO" ); + createAction( DuplicateStricklerTableId, "DUPLICATE_STRICKLER_TABLE", "DUPLICATE_STRICKLER_TABLE_ICO" ); + + createAction( CreateLandCoverId, "CREATE_LAND_COVER", "CREATE_LAND_COVER_ICO" ); + createAction( EditLandCoverId, "EDIT_LAND_COVER", "EDIT_LAND_COVER_ICO" ); + + createAction( ImportObstacleFromFileId, "IMPORT_OBSTACLE_FROM_FILE", "IMPORT_OBSTACLE_FROM_FILE_ICO" ); + createAction( ImportGeomObjectAsObstacleId, "IMPORT_GEOM_OBJECT_AS_OBSTACLE", "IMPORT_GEOM_OBJECT_ICO" ); + createAction( ImportGeomObjectAsPolylineId, "IMPORT_GEOM_OBJECT_AS_POLYLINE", "IMPORT_GEOM_OBJECT_ICO" ); + createAction( CreateBoxId, "CREATE_BOX", "CREATE_BOX_ICO" ); + createAction( CreateCylinderId, "CREATE_CYLINDER", "CREATE_CYLINDER_ICO" ); + createAction( TranslateObstacleId, "TRANSLATE_OBSTACLE" ); + + createAction( CreateCalculationId, "CREATE_CALCULATION", "CREATE_CALCULATION_ICO" ); + createAction( EditCalculationId, "EDIT_CALCULATION", "EDIT_CALCULATION_ICO" ); + createAction( ExportCalculationId, "EXPORT_CALCULATION", "EXPORT_CALCULATION_ICO" ); + + createAction( FuseImagesId, "FUSE_IMAGES", "FUSE_IMAGES_ICO" ); + createAction( EditFusedImageId, "EDIT_FUSED_IMAGE", "EDIT_FUSED_IMAGE_ICO" ); + + createAction( CutImagesId, "CUT_IMAGES", "CUT_IMAGES_ICO" ); + createAction( EditCutImageId, "EDIT_CUT_IMAGE", "EDIT_CUT_IMAGE_ICO" ); + + createAction( SplitImageId, "SPLIT_IMAGE", "SPLIT_IMAGE_ICO" ); + createAction( EditSplittedImageId, "EDIT_SPLITTED_IMAGE", "EDIT_SPLITTED_IMAGE_ICO" ); + + createAction( CopyViewerPositionId, "COPY_VIEWER_POSITION", "" ); + + createAction( DeleteId, "DELETE", "", Qt::Key_Delete, false, + SLOT( onDelete() ) ); + + createAction( SetColorId, "COLOR" ); + createAction( SetZLevelId, "ZLEVEL" ); + createAction( EditLocalCSId, "EDIT_LOCAL_CS" ); + + createAction( ShowId, "SHOW" ); + createAction( ShowOnlyId, "SHOW_ONLY" ); + createAction( ShowAllId, "SHOW_ALL" ); + createAction( HideId, "HIDE" ); + createAction( HideAllId, "HIDE_ALL" ); + + createAction( RiverBottomId, "CREATE_STREAM_BOTTOM", "CREATE_STREAM_BOTTOM_ICO" ); + createAction( RiverBottomContextId, "CREATE_STREAM_BOTTOM", "CREATE_STREAM_BOTTOM_ICO" ); + createAction( ProfileInterpolateId, "PROFILE_INTERPOLATE", "PROFILE_INTERPOLATE_ICO" ); + + createAction( SubmersibleId, "SUBMERSIBLE", "SUBMERSIBLE_ICO" ); + createAction( ExportPolylineId, "EXPORT_POLYLINE", "EXPORT_POLYLINE_ICO" ); + } -void HYDROGUI_Module::CreateMenus() +void HYDROGUI_Module::createMenus() { - int aHydroMenuIndex = 6; // Edit menu id == 5, View menu id == 10 - int aHydroId = createMenu( tr( "MEN_DESK_HYDRO" ), -1, -1, aHydroMenuIndex ); + int aFileMenu = createMenu( tr( "MEN_DESK_FILE" ), -1, -1, 0 ); + int aCustomPos = 5; // to insert custom actions after "Save as" and before "Preferences" + createMenu( SaveVisualStateId, aFileMenu, aCustomPos ); + createMenu( separator(), aFileMenu, -1, aCustomPos ); + + int anEditMenu = createMenu( tr( "MEN_DESK_EDIT" ), -1, -1, 5 ); + createMenu( UndoId, anEditMenu ); + createMenu( RedoId, anEditMenu ); + createMenu( separator(), anEditMenu ); + createMenu( CopyId, anEditMenu ); + createMenu( PasteId, anEditMenu ); + + int aHydroMenu = 6; // Edit menu id == 5, View menu id == 10 + int aHydroId = createMenu( tr( "MEN_DESK_HYDRO" ), -1, -1, aHydroMenu ); createMenu( ImportImageId, aHydroId, -1, -1 ); + createMenu( ImportPolylineId, aHydroId, -1, -1 ); + createMenu( ImportBathymetryId, aHydroId, -1, -1 ); + createMenu( ImportStricklerTableFromFileId, aHydroId, -1, -1 ); + createMenu( CreatePolylineId, aHydroId, -1, -1 ); + createMenu( CreatePolyline3DId, aHydroId, -1, -1 ); + createMenu( CreateImmersibleZoneId, aHydroId, -1, -1 ); + createMenu( CreateChannelId, aHydroId, -1, -1 ); + createMenu( CreateDigueId, aHydroId, -1, -1 ); + createMenu( CreateLandCoverId, aHydroId, -1, -1 ); + + int aNewProfileId = createMenu( tr( "MEN_DESK_PROFILE" ), aHydroId, -1 ); + createMenu( CreateProfileId, aNewProfileId, -1, -1 ); + createMenu( ImportProfilesId, aNewProfileId, -1, -1 ); + createMenu( AllGeoreferencementId, aNewProfileId, -1, -1 ); + + int aStreamMenuId = createMenu( tr( "MEN_DESK_STREAM" ), aHydroId, -1 ); + createMenu( CreateStreamId, aStreamMenuId, -1, -1 ); + createMenu( RiverBottomId, aStreamMenuId, -1, -1 ); + createMenu( ProfileInterpolateId, aStreamMenuId, -1, -1 ); + + int anObstacleMenuId = createMenu( tr( "MEN_DESK_OBSTACLE" ), aHydroId, -1 ); + createMenu( ImportObstacleFromFileId, anObstacleMenuId, -1, -1 ); + createMenu( CreateBoxId, anObstacleMenuId, -1, -1 ); + createMenu( CreateCylinderId, anObstacleMenuId, -1, -1 ); + + createMenu( CreateCalculationId, aHydroId, -1, -1 ); + createMenu( separator(), aHydroId ); + createMenu( EditLocalCSId, aHydroId, -1, -1 ); + createMenu( separator(), aHydroId ); + createMenu( FuseImagesId, aHydroId, -1, -1 ); + createMenu( CutImagesId, aHydroId, -1, -1 ); + createMenu( SplitImageId, aHydroId, -1, -1 ); + createMenu( separator(), aHydroId ); +} + +void HYDROGUI_Module::createPopups() +{ +} + +void HYDROGUI_Module::createToolbars() +{ + int aToolBar = createTool( tr( "MEN_DESK_HYDRO" ) ); + createTool( UndoId, aToolBar ); + createTool( RedoId, aToolBar ); + + createTool( separator(), aToolBar ); + createTool( ImportImageId, aToolBar ); + createTool( ImportPolylineId, aToolBar ); + createTool( ImportBathymetryId, aToolBar ); + createTool( CreatePolylineId, aToolBar ); + createTool( CreatePolyline3DId, aToolBar ); + + createTool( separator(), aToolBar ); + createTool( CreateProfileId, aToolBar ); + createTool( ImportProfilesId, aToolBar ); + createTool( AllGeoreferencementId, aToolBar ); + + createTool( separator(), aToolBar ); + createTool( CreateChannelId, aToolBar ); + createTool( CreateDigueId, aToolBar ); + + createTool( separator(), aToolBar ); + createTool( CreateImmersibleZoneId, aToolBar ); + createTool( CreateStreamId, aToolBar ); + + createTool( separator(), aToolBar ); + createTool( ImportObstacleFromFileId, aToolBar ); + createTool( CreateBoxId, aToolBar ); + createTool( CreateCylinderId, aToolBar ); + + createTool( separator(), aToolBar ); + createTool( ImportStricklerTableFromFileId, aToolBar ); + + createTool( separator(), aToolBar ); + createTool( CreateLandCoverId, aToolBar ); + + createTool( separator(), aToolBar ); + createTool( CreateCalculationId, aToolBar ); + + createTool( separator(), aToolBar ); + createTool( FuseImagesId, aToolBar ); + createTool( CutImagesId, aToolBar ); + createTool( SplitImageId, aToolBar ); } -void HYDROGUI_Module::CreatePopups() +void HYDROGUI_Module::createUndoRedoActions() { + SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr(); + + QtxListAction* anEditUndo = new QtxListAction( tr( "MEN_UNDO" ), + aResMgr->loadPixmap( "HYDRO", tr( "UNDO_ICO" ) ), tr( "DSK_UNDO" ), + Qt::CTRL + Qt::Key_Z, application()->desktop() ); + + QtxListAction* anEditRedo = new QtxListAction( tr( "MEN_REDO" ), + aResMgr->loadPixmap( "HYDRO", tr( "REDO_ICO" ) ), tr( "DSK_REDO" ), + Qt::CTRL + Qt::Key_Y, application()->desktop() ); + + registerAction( UndoId, anEditUndo ); + registerAction( RedoId, anEditRedo ); + + anEditUndo->setComment( tr( "STB_UNDO" ) ); + anEditRedo->setComment( tr( "STB_REDO" ) ); + + connect( anEditUndo, SIGNAL( triggered( int ) ), this, SLOT( onUndo( int ) ) ); + connect( anEditRedo, SIGNAL( triggered( int ) ), this, SLOT( onRedo( int ) ) ); } -void HYDROGUI_Module::CreateToolbars() +void HYDROGUI_Module::updateUndoRedoControls() { + HYDROGUI_DataModel* aModel = getDataModel(); + + QtxListAction* aUndoAction = (QtxListAction*)action( UndoId ); + QtxListAction* aRedoAction = (QtxListAction*)action( RedoId ); + + bool aCanUndo = aModel->canUndo(); + bool aCanRedo = aModel->canRedo(); + + if( aCanUndo ) + aUndoAction->addNames( aModel->undoNames() ); + aUndoAction->setEnabled( aCanUndo ); + + if( aCanRedo ) + aRedoAction->addNames( aModel->redoNames() ); + aRedoAction->setEnabled( aCanRedo ); } void HYDROGUI_Module::onOperation() @@ -82,34 +353,60 @@ void HYDROGUI_Module::onOperation() int anId = actionId( anAction ); if( anId >= 0 ) startOperation( anId ); +} - // tmp - if( anId == ImportImageId ) +void HYDROGUI_Module::onDelete() +{ + SUIT_Operation* anOp = application()->activeStudy()->activeOperation(); + HYDROGUI_PolylineOp* aPolylineOp = dynamic_cast( anOp ); + if ( aPolylineOp && aPolylineOp->deleteEnabled() ) + aPolylineOp->deleteSelected(); + else + startOperation( DeleteId ); +} + +bool HYDROGUI_Module::onUndo( int theNumActions ) +{ + QApplication::setOverrideCursor( Qt::WaitCursor ); + bool anIsOk = true; + HYDROGUI_DataModel* aModel = getDataModel(); + if( aModel ) { - QString aFileName = QFileDialog::getOpenFileName(); - if( !aFileName.isEmpty() ) + while( theNumActions > 0 ) { - int aStudyId = getStudyId(); - Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( aStudyId ); - if( !aDocument.IsNull() ) + if( !aModel->undo() ) { - Handle(HYDROData_Image) anImageObj = - Handle(HYDROData_Image)::DownCast( aDocument->CreateObject( KIND_IMAGE ) ); - if( !anImageObj.IsNull() ) - { - static int ImageId = 0; - anImageObj->SetName( QString( "Image_%1" ).arg( QString::number( ++ImageId ) ) ); - - QImage anImage( aFileName ); - QTransform aTransform; - anImageObj->SetImage( anImage ); - anImageObj->SetTrsf( aTransform ); + anIsOk = false; + break; + } + theNumActions--; + } + update( UF_All ); + } + QApplication::restoreOverrideCursor(); + return anIsOk; +} - getModel()->updateModel(); - } +bool HYDROGUI_Module::onRedo( int theNumActions ) +{ + QApplication::setOverrideCursor( Qt::WaitCursor ); + bool anIsOk = true; + HYDROGUI_DataModel* aModel = getDataModel(); + if( aModel ) + { + while( theNumActions > 0 ) + { + if( !aModel->redo() ) + { + anIsOk = false; + break; } + theNumActions--; } + update( UF_All ); } + QApplication::restoreOverrideCursor(); + return anIsOk; } LightApp_Operation* HYDROGUI_Module::createOperation( const int theId ) const @@ -118,14 +415,163 @@ LightApp_Operation* HYDROGUI_Module::createOperation( const int theId ) const HYDROGUI_Module* aModule = const_cast( this ); switch( theId ) { + case SaveVisualStateId: + case LoadVisualStateId: + anOp = new HYDROGUI_VisualStateOp( aModule, theId == LoadVisualStateId ); + break; + case CopyId: + case PasteId: + anOp = new HYDROGUI_CopyPasteOp( aModule, theId == PasteId ); + break; case ImportImageId: - anOp = new HYDROGUI_ImportImageOp( aModule ); + case EditImportedImageId: + anOp = new HYDROGUI_ImportImageOp( aModule, theId == EditImportedImageId ); + break; + case ImportPolylineId: + anOp = new HYDROGUI_ImportPolylineOp( aModule/*, theId == EditImportedPolylineId*/ ); + break; + case ObserveImageId: + anOp = new HYDROGUI_ObserveImageOp( aModule ); + break; + case ExportImageId: + anOp = new HYDROGUI_ExportImageOp( aModule ); + break; + case UpdateObjectId: + case ForcedUpdateObjectId: + anOp = new HYDROGUI_UpdateObjectOp( aModule, theId == ForcedUpdateObjectId ); + break; + case ExportPolylineId: + anOp = new HYDROGUI_ExportFileOp( aModule ); + break; + case RemoveImageRefsId: + anOp = new HYDROGUI_RemoveImageRefsOp( aModule ); + break; + case CreatePolyline3DId: + case EditPolyline3DId: + anOp = new HYDROGUI_Poly3DOp( aModule, theId == EditPolyline3DId ); + break; + case CreatePolylineId: + case EditPolylineId: + anOp = new HYDROGUI_PolylineOp( aModule, theId == EditPolylineId ); + break; + case CreateProfileId: + case EditProfileId: + anOp = new HYDROGUI_ProfileOp( aModule, theId == EditProfileId ); + break; + case ProfileInterpolateId: + anOp = new HYDROGUI_ProfileInterpolateOp( aModule ); + break; + case ImportProfilesId: + anOp = new HYDROGUI_ImportProfilesOp( aModule ) ; + break; + case AllGeoreferencementId: + anOp = new HYDROGUI_GeoreferencementOp( aModule, HYDROGUI_GeoreferencementOp::All ) ; + break; + case SelectedGeoreferencementId: + anOp = new HYDROGUI_GeoreferencementOp( aModule, HYDROGUI_GeoreferencementOp::Selected ) ; + break; + case ImportBathymetryId: + case EditImportedBathymetryId: + anOp = new HYDROGUI_ImportBathymetryOp( aModule, theId == EditImportedBathymetryId ); + break; + case BathymetryBoundsId: + anOp = new HYDROGUI_BathymetryBoundsOp( aModule ); + break; + case CreateImmersibleZoneId: + case EditImmersibleZoneId: + anOp = new HYDROGUI_ImmersibleZoneOp( aModule, theId == EditImmersibleZoneId ); + break; + case CreateStreamId: + case EditStreamId: + anOp = new HYDROGUI_StreamOp( aModule, theId == EditStreamId ); + break; + case CreateChannelId: + case EditChannelId: + anOp = new HYDROGUI_ChannelOp( aModule, theId == EditChannelId ); + break; + case CreateDigueId: + case EditDigueId: + anOp = new HYDROGUI_DigueOp( aModule, theId == EditDigueId ); + break; + case ImportStricklerTableFromFileId: + case ExportStricklerTableFromFileId: + case EditStricklerTableId: + anOp = new HYDROGUI_StricklerTableOp( aModule, theId ); + break; + case CreateLandCoverId: + case EditLandCoverId: + anOp = new HYDROGUI_LandCoverOp( aModule, theId == EditLandCoverId ); + break; + case DuplicateStricklerTableId: + anOp = new HYDROGUI_DuplicateOp( aModule ); + break; + case CreateCalculationId: + case EditCalculationId: + anOp = new HYDROGUI_CalculationOp( aModule, theId == EditCalculationId ); + break; + case ExportCalculationId: + anOp = new HYDROGUI_ExportCalculationOp( aModule ); + break; + case FuseImagesId: + case EditFusedImageId: + anOp = new HYDROGUI_TwoImagesOp( aModule, HYDROGUI_TwoImagesOp::Fuse, theId == EditFusedImageId ); + break; + case CutImagesId: + case EditCutImageId: + anOp = new HYDROGUI_TwoImagesOp( aModule, HYDROGUI_TwoImagesOp::Cut, theId == EditCutImageId ); break; - case FuseId: - anOp = new HYDROGUI_TwoImagesOp( aModule, tr( "FUSE_OP" ) ); + case SplitImageId: + case EditSplittedImageId: + anOp = new HYDROGUI_TwoImagesOp( aModule, HYDROGUI_TwoImagesOp::Split, theId == EditSplittedImageId ); break; - case CutId: - anOp = new HYDROGUI_TwoImagesOp( aModule, tr( "CUT_OP" ) ); + case ImportObstacleFromFileId: + anOp = new HYDROGUI_ImportObstacleFromFileOp( aModule ); + break; + case ImportGeomObjectAsObstacleId: + anOp = new HYDROGUI_ImportGeomObjectOp( aModule, HYDROGUI_ImportGeomObjectOp::ImportSelectedAsObstacle ); + break; + case ImportGeomObjectAsPolylineId: + anOp = new HYDROGUI_ImportGeomObjectOp( aModule, HYDROGUI_ImportGeomObjectOp::ImportSelectedAsPolyline ); + break; + case CreateBoxId: + anOp = new HYDROGUI_ImportGeomObjectOp( aModule, + HYDROGUI_ImportGeomObjectOp::ImportCreatedAsObstacle, GEOMOp::OpBox ); + break; + case CreateCylinderId: + anOp = new HYDROGUI_ImportGeomObjectOp( aModule, + HYDROGUI_ImportGeomObjectOp::ImportCreatedAsObstacle, GEOMOp::OpCylinder ); + break; + case TranslateObstacleId: + anOp = new HYDROGUI_TranslateObstacleOp( aModule ); + break; + case CopyViewerPositionId: + anOp = new HYDROGUI_CopyPastePositionOp( aModule, false ); + break; + case DeleteId: + anOp = new HYDROGUI_DeleteOp( aModule ); + break; + case SetColorId: + anOp = new HYDROGUI_SetColorOp( aModule ); + break; + case SetZLevelId: + anOp = new HYDROGUI_ZLevelsOp( aModule ); + break; + case EditLocalCSId: + anOp = new HYDROGUI_LocalCSOp( aModule ); + break; + case RiverBottomId: + case RiverBottomContextId: + anOp = new HYDROGUI_RiverBottomOp( aModule ); + break; + case ShowId: + case ShowOnlyId: + case ShowAllId: + case HideId: + case HideAllId: + anOp = new HYDROGUI_ShowHideOp( aModule, theId ); + break; + case SubmersibleId: + anOp = new HYDROGUI_SubmersibleOp( aModule ); break; } @@ -134,3 +580,67 @@ LightApp_Operation* HYDROGUI_Module::createOperation( const int theId ) const return anOp; } + +bool HYDROGUI_Module::reusableOperation( const int id ) +{ + if ( id == ImportGeomObjectAsObstacleId || + id == ImportGeomObjectAsPolylineId ) { + return false; + } + + return LightApp_Module::reusableOperation( id ); +} + +/** + * Returns true if the object with the given entry can be renamed. + * @param theEntry the object entry + */ +bool HYDROGUI_Module::renameAllowed( const QString& theEntry ) const +{ + // Allow to rename all HYDRO objects + Handle(HYDROData_Entity) anEntity = getDataModel()->objectByEntry( theEntry ); + return !anEntity.IsNull(); +} +/** + * Returns true if the object with the given entry is renamed. + * @param theEntry the object entry + * @param theName the new name + */ +bool HYDROGUI_Module::renameObject( const QString& theEntry, const QString& theName ) +{ + Handle(HYDROData_Entity) anEntity = getDataModel()->objectByEntry( theEntry ); + bool aRes = false; + if ( !anEntity.IsNull() ) + { + HYDROGUI_DataModel* aModel = getDataModel(); + if( aModel ) + { + if( anEntity->GetName() != theName ) + { + // check that there are no other objects with the same name in the document + Handle(HYDROData_Entity) anObject = HYDROGUI_Tool::FindObjectByName( this, theName ); + if ( anObject.IsNull() ) + { + SUIT_Operation* anOp = application()->activeStudy()->activeOperation(); + if ( anOp && anOp->inherits( "HYDROGUI_CalculationOp" ) ) + { + anEntity->SetName( theName ); + aRes = true; + } + else + { + aRes = aModel->rename( anEntity, theName ); + } + } + else + { + // Inform the user that the name is already used + QString aTitle = QObject::tr( "INSUFFICIENT_INPUT_DATA" ); + QString aMessage = QObject::tr( "OBJECT_EXISTS_IN_DOCUMENT" ).arg( theName ); + SUIT_MessageBox::critical( getApp()->desktop(), aTitle, aMessage ); + } + } + } + } + return aRes; +}