-// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2015 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
// 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
#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 <LightApp_Application.h>
#include <LightApp_UpdateFlags.h>
+#include <SUIT_Desktop.h>
+#include <SUIT_MessageBox.h>
+
+#include <QDialog>
+
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" ) );
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 ) {
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<HYDROGUI_GeomObjectDlg*>( inputPanel() );
aPanel->reset();
// Set default name
- SalomeApp_Study* aStudy =
- dynamic_cast<SalomeApp_Study*>( 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;
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 =
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 =
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->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;
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;
}
}
}
return aPanel;
}
+void HYDROGUI_ImportGeomObjectOp::updateDefaultName()
+{
+ // Get panel
+ HYDROGUI_GeomObjectDlg* aPanel = ::qobject_cast<HYDROGUI_GeomObjectDlg*>( inputPanel() );
+ if ( !aPanel ) {
+ return;
+ }
+
+ // Set the current GEOM object name to the panel
+ if ( myGeomObjects.count() == 1 ) {
+ SalomeApp_Study* aStudy =
+ dynamic_cast<SalomeApp_Study*>( 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<QDialog*> aDialogs = aDesktop->findChildren<QDialog*>();
+ foreach ( QDialog* aDlg, aDialogs ) {
+ if ( typeid(*aDlg).name() == myGEOMOpName ) {
+ aDlg->close();
+ break;
+ }
+ }
+ }
+}
+
QList<GEOM::shape_type> HYDROGUI_ImportGeomObjectOp::getObstacleTypes()
{
QList<GEOM::shape_type> aTypes;