X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_Operation.cxx;h=8b397f151c77e5938f4e07fef8cb5c800ed7e8b0;hb=43fce0c79196b05197b76ba4cad50776dba86ddb;hp=1f308ea385607a04eaca1ef28e51ddbceb4d92a0;hpb=8c70d5cb1e04edf503afb50caf735fa1c4f45b25;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_Operation.cxx b/src/HYDROGUI/HYDROGUI_Operation.cxx index 1f308ea3..8b397f15 100644 --- a/src/HYDROGUI/HYDROGUI_Operation.cxx +++ b/src/HYDROGUI/HYDROGUI_Operation.cxx @@ -25,6 +25,7 @@ #include "HYDROGUI_InputPanel.h" #include "HYDROGUI_Module.h" #include "HYDROGUI_Tool.h" +#include "HYDROGUI_OCCDisplayer.h" #include #include @@ -41,8 +42,15 @@ HYDROGUI_Operation::HYDROGUI_Operation( HYDROGUI_Module* theModule ) : LightApp_Operation(), myModule( theModule ), - myPanel( 0 ) + myPanel( 0 ), + myIsPrintErrorMessage( true ), + myPreviewManager( 0 ), + myPreviewZLayer( -1 ) { + connect( this, SIGNAL( helpContextModule( const QString&, const QString&, + const QString& ) ), + theModule->application(), SLOT( onHelpContextModule( const QString&, + const QString&, const QString& ) ) ); } HYDROGUI_Operation::~HYDROGUI_Operation() @@ -66,6 +74,7 @@ HYDROGUI_InputPanel* HYDROGUI_Operation::inputPanel() const ( ( 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; } @@ -80,9 +89,51 @@ HYDROGUI_Module* HYDROGUI_Operation::module() const return myModule; } +/** + * Returns Z layer of the operation preview. + \ returns a layer position + */ +int HYDROGUI_Operation::getPreviewZLayer() const +{ + return myPreviewZLayer; +} + +/** + * Set Z layer for the operation preview. + \param theLayer a layer position + */ +void HYDROGUI_Operation::setPreviewZLayer( int theLayer ) +{ + if ( theLayer != myPreviewZLayer ) + myPreviewZLayer = theLayer; +} + +/** + * Return the operation preview manager + */ +OCCViewer_ViewManager* HYDROGUI_Operation::getPreviewManager() +{ + return myPreviewManager; +} + +/** + * Set the preview manager + */ +void HYDROGUI_Operation::setPreviewManager( OCCViewer_ViewManager* theManager ) +{ + if ( !theManager && myPreviewManager ) + module()->getOCCDisplayer()->RemoveZLayer( myPreviewManager, getPreviewZLayer() ); + + myPreviewManager = theManager; + + if ( myPreviewManager ) + setPreviewZLayer( module()->getOCCDisplayer()->AddTopZLayer( myPreviewManager ) ); +} + void HYDROGUI_Operation::startOperation() { LightApp_Operation::startOperation(); + myModule->getActiveOperations().push( this ); if( inputPanel() ) { @@ -103,6 +154,34 @@ void HYDROGUI_Operation::commitOperation() closeInputPanel(); } +void HYDROGUI_Operation::stopOperation() +{ + LightApp_Operation::stopOperation(); + + // pop the operation from the cached map of active operations + QStack& anOperations = myModule->getActiveOperations(); + if ( anOperations.top() == this ) + { + anOperations.pop(); + } + else { + // find in the stack the current operation and remove it from the stack + QVectorIterator aVIt( anOperations ); + aVIt.toBack(); + aVIt.previous(); // skip the top show/hide operation + while ( aVIt.hasPrevious() ) + { + HYDROGUI_Operation* anOp = aVIt.previous(); + if ( anOp == this ) + anOperations.remove( anOperations.lastIndexOf( anOp ) ); + } + } + + // removes the Z layer, created for the operation preview + if ( myPreviewManager && getPreviewZLayer() >= 0 ) + module()->getOCCDisplayer()->RemoveZLayer( myPreviewManager, getPreviewZLayer() ); +} + void HYDROGUI_Operation::setDialogActive( const bool active ) { LightApp_Operation::setDialogActive( active ); @@ -202,14 +281,38 @@ void HYDROGUI_Operation::onApply() } else { - abortDocOperation(); + // Abort document opeartion only if requested + if ( isToAbortOnApply() ) + abortDocOperation(); + + printErrorMessage( anErrorMsg ); + + // If the operation has no input panel - do abort + if ( !inputPanel() ) { + abort(); + } + } +} + +void HYDROGUI_Operation::setPrintErrorMessage( const bool theIsPrint ) +{ + myIsPrintErrorMessage = theIsPrint; +} + +void HYDROGUI_Operation::printErrorMessage( const QString& theErrorMsg ) +{ + if ( myIsPrintErrorMessage ) + { QString aMsg = tr( "INPUT_VALID_DATA" ); - if( !anErrorMsg.isEmpty() ) - aMsg.prepend( anErrorMsg + "\n" ); + if( !theErrorMsg.isEmpty() ) + aMsg.prepend( theErrorMsg + "\n" ); SUIT_MessageBox::critical( module()->getApp()->desktop(), tr( "INSUFFICIENT_INPUT_DATA" ), - aMsg ); + aMsg ); + } + + myIsPrintErrorMessage = true; } void HYDROGUI_Operation::onCancel() @@ -217,3 +320,26 @@ 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(); +} + +