X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_Operation.cxx;h=442b6e7d383eea1caf424124421c8c4d7390c704;hb=81c9f5cdf82909d0aebd2c491c50fa7516cc80b7;hp=8b397f151c77e5938f4e07fef8cb5c800ed7e8b0;hpb=43fce0c79196b05197b76ba4cad50776dba86ddb;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_Operation.cxx b/src/HYDROGUI/HYDROGUI_Operation.cxx index 8b397f15..442b6e7d 100644 --- a/src/HYDROGUI/HYDROGUI_Operation.cxx +++ b/src/HYDROGUI/HYDROGUI_Operation.cxx @@ -26,6 +26,7 @@ #include "HYDROGUI_Module.h" #include "HYDROGUI_Tool.h" #include "HYDROGUI_OCCDisplayer.h" +#include "HYDROGUI_Shape.h" #include #include @@ -44,6 +45,7 @@ HYDROGUI_Operation::HYDROGUI_Operation( HYDROGUI_Module* theModule ) myModule( theModule ), myPanel( 0 ), myIsPrintErrorMessage( true ), + myIsTransactionOpened( false ), myPreviewManager( 0 ), myPreviewZLayer( -1 ) { @@ -91,13 +93,26 @@ HYDROGUI_Module* HYDROGUI_Operation::module() const /** * Returns Z layer of the operation preview. - \ returns a layer position + \ returns a layer position */ int HYDROGUI_Operation::getPreviewZLayer() const { return myPreviewZLayer; } +/** + * Update Z layer for the operation preview. + \param theLayer a layer position + */ +void HYDROGUI_Operation::updatePreviewZLayer( int theLayer ) +{ + setPreviewZLayer( theLayer ); + + HYDROGUI_Shape* aPreview = getPreviewShape(); + if ( aPreview ) + aPreview->setZLayer( getPreviewZLayer() ); +} + /** * Set Z layer for the operation preview. \param theLayer a layer position @@ -108,6 +123,14 @@ void HYDROGUI_Operation::setPreviewZLayer( int theLayer ) myPreviewZLayer = theLayer; } +/** + * Returns a shape preview of the operation + */ +HYDROGUI_Shape* HYDROGUI_Operation::getPreviewShape() const +{ + return 0; +} + /** * Return the operation preview manager */ @@ -121,13 +144,14 @@ OCCViewer_ViewManager* HYDROGUI_Operation::getPreviewManager() */ void HYDROGUI_Operation::setPreviewManager( OCCViewer_ViewManager* theManager ) { - if ( !theManager && myPreviewManager ) - module()->getOCCDisplayer()->RemoveZLayer( myPreviewManager, getPreviewZLayer() ); + //No good: preview Z layer could be used by usual presentations + //if ( !theManager && myPreviewManager ) + // module()->getOCCDisplayer()->RemoveZLayer( myPreviewManager, getPreviewZLayer() ); myPreviewManager = theManager; if ( myPreviewManager ) - setPreviewZLayer( module()->getOCCDisplayer()->AddTopZLayer( myPreviewManager ) ); + setPreviewZLayer( module()->getOCCDisplayer()->AddPreviewZLayer( myPreviewManager ) ); } void HYDROGUI_Operation::startOperation() @@ -160,26 +184,25 @@ void HYDROGUI_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() ) + if ( !anOperations.empty() ) { + if ( anOperations.top() == this ) + anOperations.pop(); + else { - HYDROGUI_Operation* anOp = aVIt.previous(); - if ( anOp == this ) - anOperations.remove( anOperations.lastIndexOf( anOp ) ); + // 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() ); + // release the preview manager with removing the added preview Z layer + setPreviewManager( 0 ); } void HYDROGUI_Operation::setDialogActive( const bool active ) @@ -210,7 +233,8 @@ void HYDROGUI_Operation::closeInputPanel() } bool HYDROGUI_Operation::processApply( int& theUpdateFlags, - QString& theErrorMsg ) + QString& theErrorMsg, + QStringList& theBrowseObjectsEntries ) { return false; } @@ -221,23 +245,35 @@ void HYDROGUI_Operation::processCancel() void HYDROGUI_Operation::startDocOperation() { - // Open transaction in the model document + // Open transaction in the model document only if it not + // already opened by other operation (intended for nested operations) if ( !doc()->IsOperation() ) + { doc()->StartOperation(); + myIsTransactionOpened = true; + } } void HYDROGUI_Operation::abortDocOperation() { - // Abort transaction in the model document - if ( doc()->IsOperation() ) + // Abort transaction in the model document only if it was + // opened by this operation (intended for nested operations) + if ( myIsTransactionOpened && doc()->IsOperation() ) + { doc()->AbortOperation(); + myIsTransactionOpened = false; + } } void HYDROGUI_Operation::commitDocOperation() { - // Commit transaction in the model document - if ( doc()->IsOperation() ) + // Commit transaction in the model document only if it was + // opened by this operation (intended for nested operations) + if ( myIsTransactionOpened && doc()->IsOperation() ) + { doc()->CommitOperation( HYDROGUI_Tool::ToExtString( getName() ) ); + myIsTransactionOpened = false; + } } Handle_HYDROData_Document HYDROGUI_Operation::doc() const @@ -255,10 +291,11 @@ void HYDROGUI_Operation::onApply() QString anErrorMsg; bool aResult = false; - + QStringList aBrowseObjectsEntries; + try { - aResult = processApply( anUpdateFlags, anErrorMsg ); + aResult = processApply( anUpdateFlags, anErrorMsg, aBrowseObjectsEntries ); } catch ( Standard_Failure ) { @@ -278,6 +315,7 @@ void HYDROGUI_Operation::onApply() module()->update( anUpdateFlags ); commitDocOperation(); commit(); + browseObjects( aBrowseObjectsEntries ); } else { @@ -342,4 +380,9 @@ QString HYDROGUI_Operation::getHelpContext() const return QString(); } - +void HYDROGUI_Operation::browseObjects( const QStringList& theBrowseObjectsEntries ) +{ + bool isApplyAndClose = true; + bool isOptimizedBrowse = true; + module()->getApp()->browseObjects( theBrowseObjectsEntries, isApplyAndClose, isOptimizedBrowse ); +}