X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_ImportGeomObjectOp.cxx;h=02df17e1b99d7e5f7480746f0672c13c8c2e0642;hb=343c9561e2046ef5cab4368dbac8c30e829b6b56;hp=344f8cad83345a0d3efadd30b5214e1418ac8919;hpb=0a9ef3eeee0bcca20637a13af42af8d4918f5dd1;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_ImportGeomObjectOp.cxx b/src/HYDROGUI/HYDROGUI_ImportGeomObjectOp.cxx index 344f8cad..02df17e1 100644 --- a/src/HYDROGUI/HYDROGUI_ImportGeomObjectOp.cxx +++ b/src/HYDROGUI/HYDROGUI_ImportGeomObjectOp.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 @@ -23,10 +19,11 @@ #include "HYDROGUI_ImportGeomObjectOp.h" #include "HYDROGUI_GeomObjectDlg.h" - +#include "HYDROGUI_DataObject.h" #include "HYDROGUI_DataModel.h" #include "HYDROGUI_Module.h" #include "HYDROGUI_Tool.h" +#include "HYDROGUI_Tool2.h" #include "HYDROGUI_UpdateFlags.h" #include @@ -40,12 +37,19 @@ #include #include +#include +#include + +#include + HYDROGUI_ImportGeomObjectOp::HYDROGUI_ImportGeomObjectOp( HYDROGUI_Module* theModule, const int theOpType, - const bool theIsToShowPanel ) + const int theGEOMOp ) : HYDROGUI_Operation( theModule ), - myOpType ( theOpType ), - myIsToShowPanel ( theIsToShowPanel ) + myOpType( theOpType ), + myGEOMOp( theGEOMOp ), + myGEOMOpName( "" ), + myIsToShowPanel( true ) { if ( myOpType == ImportSelectedAsPolyline ) { setName( tr( "IMPORT_GEOM_OBJECT_AS_POLYLINE" ) ); @@ -60,13 +64,10 @@ HYDROGUI_ImportGeomObjectOp::~HYDROGUI_ImportGeomObjectOp() void HYDROGUI_ImportGeomObjectOp::startOperation() { - HYDROGUI_Operation::startOperation(); - // Get GEOM objects to import myGeomObjects.clear(); - if ( myOpType == ImportCreatedAsObstacle ) { - myGeomObjects = module()->GetGeomObjectsToImport(); - } else if ( myOpType == ImportSelectedAsObstacle ) { + + if ( myOpType == ImportSelectedAsObstacle ) { myGeomObjects = HYDROGUI_Tool::GetSelectedGeomObjects( module(), getObstacleTypes() ); } else if ( myOpType == ImportSelectedAsPolyline ) { @@ -74,9 +75,14 @@ void HYDROGUI_ImportGeomObjectOp::startOperation() HYDROGUI_Tool::GetSelectedGeomObjects( module(), getPolylineTypes() ); } + // Do not show the panel if more than one GEOM objects are selected + myIsToShowPanel = myIsToShowPanel && ( myGeomObjects.count() <= 1 ); + + HYDROGUI_Operation::startOperation(); + HYDROGUI_GeomObjectDlg* aPanel = 0; - if ( myGeomObjects.count() == 1 ) { + if ( myIsToShowPanel ) { // Get panel aPanel = ::qobject_cast( inputPanel() ); @@ -85,15 +91,7 @@ void HYDROGUI_ImportGeomObjectOp::startOperation() aPanel->reset(); // Set default name - SalomeApp_Study* aStudy = - dynamic_cast( module()->getApp()->activeStudy() ); - if ( aStudy ) { - QString anEntry = myGeomObjects.first(); - _PTR(SObject) aSObject( aStudy->studyDS()->FindObjectID( qPrintable(anEntry) ) ); - if ( aSObject ) { - aPanel->setDefaultName( QString::fromStdString(aSObject->GetName()) ); - } - } + updateDefaultName(); // Pass the existing object names to the panel QStringList anExistingNames; @@ -111,20 +109,41 @@ void HYDROGUI_ImportGeomObjectOp::startOperation() if ( !aPanel ) { onApply(); } + + // Activate GEOM module operation in case of the corresponding operation type + if ( myOpType == ImportCreatedAsObstacle && myGEOMOp > 0 ) { + LightApp_Application* anApp = module()->getApp(); + if ( anApp ) { + connect( anApp, SIGNAL( operationFinished( const QString&, const QString&, const QStringList& ) ), + this, SLOT( onExternalOperationFinished( const QString&, const QString&, const QStringList& ) ) ); + + module()->getApp()->activateOperation( "Geometry", myGEOMOp ); + } + } } void HYDROGUI_ImportGeomObjectOp::abortOperation() { + LightApp_Application* anApp = module()->getApp(); + if ( anApp ) { + anApp->disconnect( this ); + } + + closeExternalOperationDlg(); + HYDROGUI_Operation::abortOperation(); } void HYDROGUI_ImportGeomObjectOp::commitOperation() { + closeExternalOperationDlg(); + HYDROGUI_Operation::commitOperation(); } bool HYDROGUI_ImportGeomObjectOp::processApply( int& theUpdateFlags, - QString& theErrorMsg ) + QString& theErrorMsg, + QStringList& theBrowseObjectsEntries ) { // Get active SalomeApp_Study SalomeApp_Study* aStudy = @@ -133,6 +152,12 @@ bool HYDROGUI_ImportGeomObjectOp::processApply( int& theUpdateFlags, return false; } + // Check that GEOM objects list is not empty + if ( myGeomObjects.isEmpty() ) { + theErrorMsg = tr( "NO_GEOM_OBJECT_TO_IMPORT" ); + return false; + } + QString anObjectName; Handle(HYDROData_Entity) anObjectToEdit; ObjectKind anObjectKind = @@ -184,14 +209,16 @@ bool HYDROGUI_ImportGeomObjectOp::processApply( int& theUpdateFlags, if ( anObjectToEdit.IsNull() ) { if ( myOpType == ImportCreatedAsObstacle || myOpType == ImportSelectedAsObstacle ) { - anObject = - Handle(HYDROData_Obstacle)::DownCast( doc()->CreateObject(KIND_OBSTACLE) ); + anObject = doc()->CreateObject( KIND_OBSTACLE ); Handle(HYDROData_Obstacle) anObstacle = Handle(HYDROData_Obstacle)::DownCast( anObject ); - anObstacle->SetFillingColor( HYDROData_Obstacle::DefaultFillingColor() ); - anObstacle->SetBorderColor( HYDROData_Obstacle::DefaultBorderColor() ); + anObstacle->SetFillingColor( anObstacle->DefaultFillingColor() ); + anObstacle->SetBorderColor( anObstacle->DefaultBorderColor() ); + anObstacle->SetGeomObjectEntry( anEntry.toLatin1().constData() ); } else if ( myOpType == ImportSelectedAsPolyline ) { - anObject = - Handle(HYDROData_PolylineXY)::DownCast( doc()->CreateObject(KIND_POLYLINEXY) ); + anObject = doc()->CreateObject( KIND_POLYLINEXY ); + Handle(HYDROData_PolylineXY) aPolylineObj = Handle(HYDROData_PolylineXY)::DownCast( anObject ); + aPolylineObj->SetWireColor( HYDROData_PolylineXY::DefaultWireColor() ); + aPolylineObj->SetGeomObjectEntry( anEntry.toLatin1().constData() ); } } else { anObject = anObjectToEdit; @@ -216,14 +243,28 @@ bool HYDROGUI_ImportGeomObjectOp::processApply( int& theUpdateFlags, anIsOk = true; } else if ( myOpType == ImportSelectedAsPolyline ) { Handle(HYDROData_PolylineXY) aPolyline = Handle(HYDROData_PolylineXY)::DownCast( anObject ); - // TODO ISSUE #228: set the shape ("aShape") to the polyline - // anIsOk = aPolyline->setShape( aShape ); + anIsOk = aPolyline->ImportShape( aShape ); + + /* TODO: check it before start operation + if ( anIsOk && !aPolyline->IsEditable() ) + { + anIsOk = SUIT_MessageBox::question( module()->getApp()->desktop(), + tr( "POLYLINE_IS_UNRECOGNIZED_TLT" ), + tr( "POLYLINE_IS_UNRECOGNIZED_MSG" ), + QMessageBox::Yes | QMessageBox::No, + QMessageBox::No ) == QMessageBox::Yes; + setPrintErrorMessage( anIsOk ); + } + */ } // Check operation status if ( anIsOk ) { anObject->Update(); - theUpdateFlags = UF_Model | UF_OCCViewer | UF_OCC_Forced; + module()->setIsToUpdate( anObject ); + QString aHydroObjEntry = HYDROGUI_DataObject::dataObjectEntry( anObject ); + theBrowseObjectsEntries.append( aHydroObjEntry ); + theUpdateFlags = UF_Model | UF_OCCViewer | UF_OCC_Forced | UF_VTKViewer; } } } @@ -244,6 +285,74 @@ HYDROGUI_InputPanel* HYDROGUI_ImportGeomObjectOp::createInputPanel() const return aPanel; } +void HYDROGUI_ImportGeomObjectOp::updateDefaultName() +{ + // Get panel + HYDROGUI_GeomObjectDlg* aPanel = ::qobject_cast( inputPanel() ); + if ( !aPanel ) { + return; + } + + // Set the current GEOM object name to the panel + if ( myGeomObjects.count() == 1 ) { + SalomeApp_Study* aStudy = + dynamic_cast( module()->getApp()->activeStudy() ); + if ( aStudy ) { + QString anEntry = myGeomObjects.first(); + _PTR(SObject) aSObject( aStudy->studyDS()->FindObjectID( qPrintable(anEntry) ) ); + if ( aSObject ) { + aPanel->setDefaultName( QString::fromStdString(aSObject->GetName()) ); + } + } + } +} + +/** + * Called when the operation perfomed by another module is finished. + * \param theModuleName the name of the module which perfomed the operation + * \param theOperationName the operation name + * \param theEntryList the list of the created objects entries + */ +void HYDROGUI_ImportGeomObjectOp::onExternalOperationFinished( + const QString& theModuleName, const QString& theOperationName, + const QStringList& theEntryList ) +{ + // Process "Geometry" module operations with non-empty list of created objects only + if ( theModuleName != "Geometry" || theEntryList.isEmpty() ) { + return; + } + + // Store the operation name + myGEOMOpName = theOperationName; + + // Store the geom objects entries list + myGeomObjects = theEntryList; + + // Update the default name of the HYDRO object + updateDefaultName(); + + // Close the dialog corresponding to the external operation + closeExternalOperationDlg(); +} + +void HYDROGUI_ImportGeomObjectOp::closeExternalOperationDlg() +{ + if ( myGEOMOpName.isEmpty() ) { + return; + } + + SUIT_Desktop* aDesktop = module()->getApp()->desktop(); + if ( aDesktop ) { + QList aDialogs = aDesktop->findChildren(); + foreach ( QDialog* aDlg, aDialogs ) { + if ( typeid(*aDlg).name() == myGEOMOpName ) { + aDlg->close(); + break; + } + } + } +} + QList HYDROGUI_ImportGeomObjectOp::getObstacleTypes() { QList aTypes;