X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_Operation.cxx;h=52fbcd1739a140a21570c64536dbfa19d6a2e97e;hb=de7cf9bb0a7a41d6487013c87f4a54d0664cd303;hp=9bdf11e031f00ae0908c53a7286c1df6894fbcdd;hpb=0b4df27e9f347d6187dbf30bacf80b45c21813d4;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_Operation.cxx b/src/HYDROGUI/HYDROGUI_Operation.cxx index 9bdf11e0..52fbcd17 100644 --- a/src/HYDROGUI/HYDROGUI_Operation.cxx +++ b/src/HYDROGUI/HYDROGUI_Operation.cxx @@ -36,6 +36,8 @@ #include #include +#include + HYDROGUI_Operation::HYDROGUI_Operation( HYDROGUI_Module* theModule ) : LightApp_Operation(), myModule( theModule ), @@ -82,8 +84,6 @@ void HYDROGUI_Operation::startOperation() { LightApp_Operation::startOperation(); - doc()->StartOperation(); - if( inputPanel() ) { myModule->getApp()->desktop()->addDockWidget( Qt::RightDockWidgetArea, inputPanel() ); @@ -93,22 +93,26 @@ void HYDROGUI_Operation::startOperation() void HYDROGUI_Operation::abortOperation() { - doc()->AbortOperation(); - LightApp_Operation::abortOperation(); - - if( inputPanel() ) - inputPanel()->hide(); + closeInputPanel(); } void HYDROGUI_Operation::commitOperation() { - doc()->CommitOperation( HYDROGUI_Tool::ToExtString( getName() ) ); - LightApp_Operation::commitOperation(); + closeInputPanel(); +} - if( inputPanel() ) - inputPanel()->hide(); +void HYDROGUI_Operation::setDialogActive( const bool active ) +{ + LightApp_Operation::setDialogActive( active ); + if( myPanel ) + { + if( active ) + { + myPanel->show(); + } + } } HYDROGUI_InputPanel* HYDROGUI_Operation::createInputPanel() const @@ -116,6 +120,16 @@ HYDROGUI_InputPanel* HYDROGUI_Operation::createInputPanel() const return NULL; } +void HYDROGUI_Operation::closeInputPanel() +{ + if( myPanel ) + { + myModule->getApp()->desktop()->removeDockWidget( myPanel ); + delete myPanel; + myPanel = 0; + } +} + bool HYDROGUI_Operation::processApply( int& theUpdateFlags, QString& theErrorMsg ) { @@ -126,6 +140,24 @@ void HYDROGUI_Operation::processCancel() { } +void HYDROGUI_Operation::startDocOperation() +{ + // Open transaction in the model document + doc()->StartOperation(); +} + +void HYDROGUI_Operation::abortDocOperation() +{ + // Abort transaction in the model document + doc()->AbortOperation(); +} + +void HYDROGUI_Operation::commitDocOperation() +{ + // Commit transaction in the model document + doc()->CommitOperation( HYDROGUI_Tool::ToExtString( getName() ) ); +} + Handle_HYDROData_Document HYDROGUI_Operation::doc() const { return HYDROData_Document::Document( myModule->getStudyId() ); @@ -133,15 +165,41 @@ Handle_HYDROData_Document HYDROGUI_Operation::doc() const void HYDROGUI_Operation::onApply() { + QApplication::setOverrideCursor( Qt::WaitCursor ); + + startDocOperation(); + int anUpdateFlags = 0; QString anErrorMsg; - if( processApply( anUpdateFlags, anErrorMsg ) ) + + bool aResult = false; + + try + { + aResult = processApply( anUpdateFlags, anErrorMsg ); + } + catch ( Standard_Failure ) + { + Handle(Standard_Failure) aFailure = Standard_Failure::Caught(); + anErrorMsg = aFailure->GetMessageString(); + aResult = false; + } + catch ( ... ) + { + aResult = false; + } + + QApplication::restoreOverrideCursor(); + + if ( aResult ) { module()->update( anUpdateFlags ); + commitDocOperation(); commit(); } else { + abortDocOperation(); QString aMsg = tr( "INPUT_VALID_DATA" ); if( !anErrorMsg.isEmpty() ) aMsg.prepend( anErrorMsg + "\n" );