X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_Operation.cxx;h=52fbcd1739a140a21570c64536dbfa19d6a2e97e;hb=5cae7e874afd2fc1b6f61023e8ebd33a933db3c7;hp=3b74134f0574b26fa0fda0a142bb02ed8013dd04;hpb=c66fbd26a75a044039dc2b2f8dea2249582deabc;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_Operation.cxx b/src/HYDROGUI/HYDROGUI_Operation.cxx index 3b74134f..52fbcd17 100644 --- a/src/HYDROGUI/HYDROGUI_Operation.cxx +++ b/src/HYDROGUI/HYDROGUI_Operation.cxx @@ -1,16 +1,47 @@ +// 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 +// +// 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. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#include "HYDROGUI_Operation.h" + +#include "HYDROGUI_InputPanel.h" +#include "HYDROGUI_Module.h" +#include "HYDROGUI_Tool.h" -#include -#include -#include #include #include + #include #include + #include +#include #include +#include + HYDROGUI_Operation::HYDROGUI_Operation( HYDROGUI_Module* theModule ) -: LightApp_Operation(), myModule( theModule ), myPanel( 0 ) +: LightApp_Operation(), + myModule( theModule ), + myPanel( 0 ) { } @@ -18,6 +49,27 @@ HYDROGUI_Operation::~HYDROGUI_Operation() { } +void HYDROGUI_Operation::setName( const QString& theName ) +{ + myName = theName; +} + +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() ) ); + } + return myPanel; +} + SUIT_SelectionMgr* HYDROGUI_Operation::selectionMgr() const { return myModule->getApp()->selectionMgr(); @@ -30,50 +82,135 @@ HYDROGUI_Module* HYDROGUI_Operation::module() const void HYDROGUI_Operation::startOperation() { - doc()->StartOperation(); + LightApp_Operation::startOperation(); if( inputPanel() ) { - connect( inputPanel(), SIGNAL( panelApply() ), this, SLOT( OnApply() ) ); - connect( inputPanel(), SIGNAL( panelCancel() ), this, SLOT( OnCancel() ) ); - - inputPanel()->show(); myModule->getApp()->desktop()->addDockWidget( Qt::RightDockWidgetArea, inputPanel() ); + inputPanel()->show(); } } -HYDROGUI_InputPanel* HYDROGUI_Operation::inputPanel() const +void HYDROGUI_Operation::abortOperation() { - if( !myPanel ) - ( ( HYDROGUI_Operation* )this )->myPanel = createInputPanel(); - return myPanel; + LightApp_Operation::abortOperation(); + closeInputPanel(); } -Handle_HYDROData_Document HYDROGUI_Operation::doc() const +void HYDROGUI_Operation::commitOperation() { - int aStudyId = myModule->application()->activeStudy()->id(); - return HYDROData_Document::Document( aStudyId ); + LightApp_Operation::commitOperation(); + closeInputPanel(); } -void HYDROGUI_Operation::OnApply() +void HYDROGUI_Operation::setDialogActive( const bool active ) { - doc()->CommitOperation(); - inputPanel()->hide(); + LightApp_Operation::setDialogActive( active ); + if( myPanel ) + { + if( active ) + { + myPanel->show(); + } + } } -void HYDROGUI_Operation::OnCancel() +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 ) +{ + return false; +} + +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(); - inputPanel()->hide(); } -Handle_HYDROData_Object HYDROGUI_Operation::FindObjectByName( const QString& theName, int theKind ) const +void HYDROGUI_Operation::commitDocOperation() { - HYDROData_Iterator anIt( doc(), theKind ); - for( ; anIt.More(); anIt.Next() ) + // 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() ); +} + +void HYDROGUI_Operation::onApply() +{ + 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 ( ... ) { - if( anIt.Current()->GetName() == theName ) - return anIt.Current(); + aResult = false; } - return Handle_HYDROData_Object(); + + QApplication::restoreOverrideCursor(); + + if ( aResult ) + { + module()->update( anUpdateFlags ); + commitDocOperation(); + commit(); + } + else + { + abortDocOperation(); + QString aMsg = tr( "INPUT_VALID_DATA" ); + if( !anErrorMsg.isEmpty() ) + aMsg.prepend( anErrorMsg + "\n" ); + SUIT_MessageBox::critical( module()->getApp()->desktop(), + tr( "INSUFFICIENT_INPUT_DATA" ), + aMsg ); + } +} + +void HYDROGUI_Operation::onCancel() +{ + processCancel(); + abort(); }