X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_Operation.cxx;h=bdbd6fa05ffd1c86b4ea310a681dbf3f63b3ac1a;hb=a1431f03eac1d1aed4203d0568d987c41ce939b3;hp=5b1a90e94bd024c39fb09ccf75e9bf8a3fba0694;hpb=ea51c1575cfdc7e3ad0b8cc1db55d9d83626b12d;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_Operation.cxx b/src/HYDROGUI/HYDROGUI_Operation.cxx index 5b1a90e9..bdbd6fa0 100644 --- a/src/HYDROGUI/HYDROGUI_Operation.cxx +++ b/src/HYDROGUI/HYDROGUI_Operation.cxx @@ -33,13 +33,21 @@ #include #include +#include #include +#include + HYDROGUI_Operation::HYDROGUI_Operation( HYDROGUI_Module* theModule ) : LightApp_Operation(), myModule( theModule ), - myPanel( 0 ) + myPanel( 0 ), + myIsPrintErrorMessage( true ) { + connect( this, SIGNAL( helpContextModule( const QString&, const QString&, + const QString& ) ), + theModule->application(), SLOT( onHelpContextModule( const QString&, + const QString&, const QString& ) ) ); } HYDROGUI_Operation::~HYDROGUI_Operation() @@ -56,6 +64,18 @@ const QString& HYDROGUI_Operation::getName() const return myName; } +HYDROGUI_InputPanel* HYDROGUI_Operation::inputPanel() const +{ + if( !myPanel ) + { + ( ( HYDROGUI_Operation* )this )->myPanel = createInputPanel(); + connect( myPanel, SIGNAL( panelApply() ), this, SLOT( onApply() ) ); + connect( myPanel, SIGNAL( panelCancel() ), this, SLOT( onCancel() ) ); + connect( myPanel, SIGNAL( panelHelp() ), this, SLOT( onHelp() ) ); + } + return myPanel; +} + SUIT_SelectionMgr* HYDROGUI_Operation::selectionMgr() const { return myModule->getApp()->selectionMgr(); @@ -70,69 +90,180 @@ void HYDROGUI_Operation::startOperation() { LightApp_Operation::startOperation(); - doc()->StartOperation(); - if( inputPanel() ) { - inputPanel()->show(); myModule->getApp()->desktop()->addDockWidget( Qt::RightDockWidgetArea, inputPanel() ); + inputPanel()->show(); } } 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::inputPanel() const +HYDROGUI_InputPanel* HYDROGUI_Operation::createInputPanel() const { - if( !myPanel ) + return NULL; +} + +void HYDROGUI_Operation::closeInputPanel() +{ + if( myPanel ) { - ( ( HYDROGUI_Operation* )this )->myPanel = createInputPanel(); - connect( myPanel, SIGNAL( panelApply() ), this, SLOT( onApply() ) ); - connect( myPanel, SIGNAL( panelCancel() ), this, SLOT( onCancel() ) ); + myModule->getApp()->desktop()->removeDockWidget( myPanel ); + delete myPanel; + myPanel = 0; } - return myPanel; +} + +bool HYDROGUI_Operation::processApply( int& theUpdateFlags, + QString& theErrorMsg ) +{ + return false; +} + +void HYDROGUI_Operation::processCancel() +{ +} + +void HYDROGUI_Operation::startDocOperation() +{ + // Open transaction in the model document + if ( !doc()->IsOperation() ) + doc()->StartOperation(); +} + +void HYDROGUI_Operation::abortDocOperation() +{ + // Abort transaction in the model document + if ( doc()->IsOperation() ) + doc()->AbortOperation(); +} + +void HYDROGUI_Operation::commitDocOperation() +{ + // Commit transaction in the model document + if ( doc()->IsOperation() ) + doc()->CommitOperation( HYDROGUI_Tool::ToExtString( getName() ) ); } Handle_HYDROData_Document HYDROGUI_Operation::doc() const { - int aStudyId = myModule->application()->activeStudy()->id(); - return HYDROData_Document::Document( aStudyId ); + return HYDROData_Document::Document( myModule->getStudyId() ); } void HYDROGUI_Operation::onApply() { - commit(); + QApplication::setOverrideCursor( Qt::WaitCursor ); + + startDocOperation(); + + int anUpdateFlags = 0; + QString 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(); + printErrorMessage( anErrorMsg ); + + // If the operation has no input panel - do abort + if ( !inputPanel() ) { + abort(); + } + } } -void HYDROGUI_Operation::onCancel() +void HYDROGUI_Operation::setPrintErrorMessage( const bool theIsPrint ) { - abort(); + myIsPrintErrorMessage = theIsPrint; } -Handle_HYDROData_Object HYDROGUI_Operation::FindObjectByName( const QString& theName, int theKind ) const +void HYDROGUI_Operation::printErrorMessage( const QString& theErrorMsg ) { - HYDROData_Iterator anIt( doc(), theKind ); - for( ; anIt.More(); anIt.Next() ) + if ( myIsPrintErrorMessage ) { - if( anIt.Current()->GetName() == theName ) - return anIt.Current(); + QString aMsg = tr( "INPUT_VALID_DATA" ); + if( !theErrorMsg.isEmpty() ) + aMsg.prepend( theErrorMsg + "\n" ); + SUIT_MessageBox::critical( module()->getApp()->desktop(), + tr( "INSUFFICIENT_INPUT_DATA" ), + aMsg ); + } - return Handle_HYDROData_Object(); + + myIsPrintErrorMessage = true; } + +void HYDROGUI_Operation::onCancel() +{ + processCancel(); + abort(); +} + +void HYDROGUI_Operation::onHelp() +{ + emit helpContextModule( getHelpComponent(), getHelpFile(), getHelpContext() ); +} + +QString HYDROGUI_Operation::getHelpComponent() const +{ + return module()->moduleName(); +} + +QString HYDROGUI_Operation::getHelpFile() const +{ + QString aFileName = ((myName.isEmpty())? operationName() : myName); + return aFileName.replace(QRegExp("\\s"), "_").append(".html"); +} + +QString HYDROGUI_Operation::getHelpContext() const +{ + return QString(); +} + +