X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_ExportCalculationOp.cxx;h=77978ee51bc52b9902ac70383030e6603f3f16eb;hb=58bb6b7459bebeeb089c9ed486c4683a8bae7288;hp=6344eddd19da49c5dd25dd4c461ee7edf77fab56;hpb=90d1e986c0e567fe8892f11e0532ec6cf40a5b8b;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_ExportCalculationOp.cxx b/src/HYDROGUI/HYDROGUI_ExportCalculationOp.cxx index 6344eddd..77978ee5 100644 --- a/src/HYDROGUI/HYDROGUI_ExportCalculationOp.cxx +++ b/src/HYDROGUI/HYDROGUI_ExportCalculationOp.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 @@ -24,18 +20,14 @@ #include "HYDROGUI_DataModel.h" #include "HYDROGUI_Module.h" -#include "HYDROGUI_Tool.h" +#include "HYDROGUI_Tool2.h" #include #include -#include #include -#include -#include - #include #include @@ -72,7 +64,8 @@ void HYDROGUI_ExportCalculationOp::commitOperation() } bool HYDROGUI_ExportCalculationOp::processApply( int& theUpdateFlags, - QString& theErrorMsg ) + QString& theErrorMsg, + QStringList& theBrowseObjectsEntries) { // Get the selected calculation case Handle(HYDROData_CalculationCase) aCalculation = @@ -80,64 +73,30 @@ bool HYDROGUI_ExportCalculationOp::processApply( int& theUpdateFlags, HYDROGUI_Tool::GetSelectedObject( module() ) ); if ( aCalculation.IsNull() ) { - theErrorMsg = tr( "EXPORT_FAILED" ); + theErrorMsg = tr( "NULL_DATA_OBJECT" ); return false; } - QString anErrorMsg; - bool anIsOk = false; - - TopoDS_Shell aShell = aCalculation->GetShell(); - - if ( !aShell.IsNull() ) { - // TODO move this code to anothe place? - std::ostringstream aStreamShape; - // Write TopoDS_Shape in ASCII format to the stream - BRepTools::Write( aShell, aStreamShape ); - // Returns the number of bytes that have been stored in the stream's buffer. - int aSize = aStreamShape.str().size(); - // Allocate octect buffer of required size - CORBA::Octet* anOctetBuf = SALOMEDS::TMPFile::allocbuf( aSize ); - // Copy ostrstream content to the octect buffer - memcpy( anOctetBuf, aStreamShape.str().c_str(), aSize ); - // Create TMPFile - SALOMEDS::TMPFile_var aSeqFile = new SALOMEDS::TMPFile( aSize, aSize, anOctetBuf, 1 ); - - // Get active study - SalomeApp_Study* aStudy = - dynamic_cast( module()->getApp()->activeStudy() ); - - // Restore shape from the stream and get the GEOM object - GEOM::GEOM_Gen_var aGeomEngine = GeometryGUI::GetGeomGen(); // TODO: get GEOM engine in another way? - GEOM::GEOM_IInsertOperations_var anInsOp = aGeomEngine->GetIInsertOperations( module()->getStudyId() ); - GEOM::GEOM_Object_var aGeomObj = anInsOp->RestoreShape( aSeqFile ); - - // Puplish the GEOM object - if ( !aGeomObj->_is_nil() ) { - QString aName = GEOMBase::GetDefaultName( tr( "OBJ_PREFIX" ) + aCalculation->GetName() ); - - SALOMEDS::Study_var aDSStudy = GeometryGUI::ClientStudyToStudy( aStudy->studyDS() ); - SALOMEDS::SObject_var aResultSO = - aGeomEngine->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), - aGeomObj, qPrintable( aName ) ); - if ( !aResultSO->_is_nil() ) { - theUpdateFlags = UF_ObjBrowser; - anIsOk = true; - } - } - } else { - anErrorMsg = tr( "RESULT_SHAPE_NULL" ); - } + bool isOk = false; - if ( !anIsOk ) { - theErrorMsg = tr( "EXPORT_FAILED" ); + // Get active study + SalomeApp_Study* aStudy = + dynamic_cast( module()->getApp()->activeStudy() ); - if( !anErrorMsg.isEmpty() ) { - theErrorMsg.prepend( anErrorMsg + "\n" ); + // Export + myStatMess.clear(); + QString anErrorMsg; + if ( aStudy ) { + SALOMEDS::Study_var aDSStudy = GeometryGUI::ClientStudyToStudy( aStudy->studyDS() ); + GEOM::GEOM_Gen_var aGeomEngine = GeometryGUI::GetGeomGen(); + QString anEntry; + if ( aCalculation->Export( aGeomEngine, aDSStudy, anEntry, theErrorMsg, myStatMess ) ) { + theUpdateFlags = UF_ObjBrowser; + isOk = true; } } - return anIsOk; + return isOk; } void HYDROGUI_ExportCalculationOp::onApply() @@ -148,9 +107,10 @@ void HYDROGUI_ExportCalculationOp::onApply() QString anErrorMsg; bool aResult = false; - + QStringList aBrowseObjectsEntries; + try { - aResult = processApply( anUpdateFlags, anErrorMsg ); + aResult = processApply( anUpdateFlags, anErrorMsg, aBrowseObjectsEntries ); } catch ( Standard_Failure ) { @@ -168,21 +128,28 @@ void HYDROGUI_ExportCalculationOp::onApply() if ( aResult ) { module()->update( anUpdateFlags ); commit(); + browseObjects( aBrowseObjectsEntries ); // Show message box SUIT_MessageBox::information( module()->getApp()->desktop(), tr( "EXPORT_STATUS" ), - tr( "EXPORT_FINISHED") ); + tr( "EXPORT_FINISHED") + "\n" + getStatMess() ); } else { abort(); - QString aMsg = tr( "EXPORT_FAILED" ); - /* TODO: improve error processing - if( !anErrorMsg.isEmpty() ) - aMsg.prepend( anErrorMsg + "\n" ); - */ + + if ( anErrorMsg.isEmpty() ) + anErrorMsg = tr( "EXPORT_DATA_FAILED" ); + + anErrorMsg.prepend( tr( "EXPORT_FAILED" ) + "\n" ); + SUIT_MessageBox::critical( module()->getApp()->desktop(), tr( "EXPORT_STATUS" ), - aMsg ); + anErrorMsg ); } -} \ No newline at end of file +} + +QString HYDROGUI_ExportCalculationOp::getStatMess() +{ + return myStatMess; +}