-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
+// Copyright (C) 2007-2023 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
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// 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
+// 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/
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
+
#include "SUIT_Study.h"
#include "SUIT_Desktop.h"
#include "SUIT_DataObject.h"
#include "SUIT_MessageBox.h"
#include "SUIT_Application.h"
-#include <qvaluevector.h>
/*!\class SUIT_Study
* Support study management. Object management. Operation management.
SUIT_Study::SUIT_Study( SUIT_Application* app )
: QObject(),
myApp( app ),
+myName( "" ),
myIsSaved( false ),
myIsModified( false ),
-myName( "" ),
myBlockChangeState( false )
{
static int _id = 0;
myId = ++_id;
myRoot = new SUIT_DataObject();
- myOperations.setAutoDelete( false );
- myOperations.setAutoDelete( false );
}
/*!Destructor.*/
*/
SUIT_Operation* SUIT_Study::activeOperation() const
{
- return myOperations.count() > 0 ? myOperations.getLast() : 0;
+ return myOperations.count() > 0 ? myOperations.last() : 0;
}
/*!
- *\retval TRUE - if study saved, else FALSE.
+ *\retval \c true - if study saved, else \c false.
*/
bool SUIT_Study::isSaved() const
{
}
/*!
- *\retval TRUE - if study modified, else FALSE.
+ *\retval \c true - if study modified, else \c false.
*/
bool SUIT_Study::isModified() const
{
/*!
*Close document. NOT IMPLEMENTED.
*/
-void SUIT_Study::closeDocument(bool permanently)
+void SUIT_Study::closeDocument(bool /*permanently*/)
{
}
-void SUIT_Study::createDocument()
+/*!
+ Custom document initialization to be performed \n
+ within onNewDoc() handler can be put here
+*/
+bool SUIT_Study::createDocument( const QString& )
{
- /*! Custom document initialization to be performed \n
- * within onNewDoc() handler can be put here
- */
+ return true;
}
/*!
- * Open document. Sets file name. return true.
+ * Open document. Sets file name. return \c true.
*/
bool SUIT_Study::openDocument( const QString& fileName )
{
}
/*!
- *\retval TRUE - if document saved successful, else FALSE.
+ *\retval \c true - if document saved successful, else \c false.
*/
bool SUIT_Study::saveDocument()
{
void SUIT_Study::abortAllOperations()
{
myBlockChangeState = true;
- for( SUIT_Operation* op = myOperations.first(); op; op = myOperations.next() )
- op->abort();
+ while ( !myOperations.isEmpty() ) {
+ Operations::iterator it = myOperations.begin();
+ (*it)->abort();
+ }
myBlockChangeState = false;
myOperations.clear();
}
myIsModified = on;
}
+/*!
+ Set study modified to \a on.
+ */
+void SUIT_Study::Modified()
+{
+ setIsModified( true );
+ sendChangesNotification();
+}
+
/*!
Set root object.
*/
return 0;
Operations tmpOps( myOperations );
- SUIT_Operation* anOp = 0;
- for ( anOp = tmpOps.last(); anOp; anOp = tmpOps.prev() )
+ for ( Operations::const_iterator it = tmpOps.end(); it != tmpOps.begin(); )
{
+ it--;
+ SUIT_Operation* anOp = *it;
if ( anOp != 0 && anOp!= theOp && !anOp->isValid( theOp ) )
return anOp;
}
/*!
* \brief Starts operation
* \param theOp - operation to be started
- * \param toCheck - if parameters is equal TRUE then checking performed whether
+ * \param toCheck - if parameters is equal \c true then checking performed whether
* all already started operations allow to start this operation above them (default
- * value is TRUE
- * \return TRUE if operation is started, FALSE otherwise
+ * value is \c true
+ * \return \c true if operation is started, \c false otherwise
*
* Verifies whether theOp operation can be started above already started ones (if toCheck
-* parameter is equal TRUE) and starts it
+* parameter is equal \c true) and starts it
*/
bool SUIT_Study::start( SUIT_Operation* theOp, const bool toCheck )
{
- if ( !theOp || myOperations.find( theOp ) >= 0 )
+ if ( !theOp || myOperations.contains( theOp ) )
return false;
theOp->setExecStatus( SUIT_Operation::Rejected );
if ( toCheck )
{
- while( SUIT_Operation* anOp = blockingOperation( theOp ) )
+ while ( SUIT_Operation* anOp = blockingOperation( theOp ) )
{
- int anAnsw = SUIT_MessageBox::warn2( application()->desktop(),
- tr( "OPERATION_LAUNCH" ), tr( "PREVIOUS_NOT_FINISHED" ),
- tr( "CONTINUE" ), tr( "CANCEL" ), 0, 1, 1 );
+ int anAnsw = SUIT_MessageBox::question( application()->desktop(),
+ tr( "OPERATION_LAUNCH" ), tr( "PREVIOUS_NOT_FINISHED" ),
+ tr( "CONTINUE" ), tr( "CANCEL" ) );
if ( anAnsw == 1 )
return false;
/*!
* \brief Aborts operation
* \param theOp - operation to be aborted
- * \return TRUE if operation is aborted successfully
+ * \return \c true if operation is aborted successfully
*
* Verifies whether operation already started and aborts it in this case (sets execution
* status to Rejected and stops operation)
*/
bool SUIT_Study::abort( SUIT_Operation* theOp )
{
- if ( !theOp || myOperations.find( theOp ) == -1 )
+ if ( !theOp || !myOperations.contains( theOp ) )
return false;
theOp->setExecStatus( SUIT_Operation::Rejected );
/*!
* \brief Commits operation
* \param theOp - operation to be committed
- * \return TRUE if operation is committed successfully
+ * \return \c true if operation is committed successfully
*
* Verifies whether operation already started and commits it in this case (sets execution
* status to Accepted and stops operation)
*/
bool SUIT_Study::commit( SUIT_Operation* theOp )
{
- if ( !theOp || myOperations.find( theOp ) == -1 )
+ if ( !theOp || !myOperations.contains( theOp ) )
return false;
theOp->setExecStatus( SUIT_Operation::Accepted );
/*!
* \brief Commits operation
* \param theOp - operation to be committed
- * \return TRUE if operation is suspended successfully
+ * \return \c true if operation is suspended successfully
*
* Verifies whether operation already started and suspends it in this case. Operations
* ususlly are suspended to start other one above them.
*/
bool SUIT_Study::suspend( SUIT_Operation* theOp )
{
- if ( !theOp || myOperations.find( theOp ) == -1 || theOp->state() == SUIT_Operation::Suspended )
+ if ( !theOp || !myOperations.contains( theOp ) || theOp->state() == SUIT_Operation::Suspended )
return false;
theOp->setState( SUIT_Operation::Suspended );
/*!
* \brief Resumes operation
* \param theOp - operation to be resumed
- * \return TRUE if operation is aborted successfully
+ * \return \c true if operation is aborted successfully
*
* Verifies whether operation already started but suspended and resumesit in this case.
*/
bool SUIT_Study::resume( SUIT_Operation* theOp )
{
- if ( !theOp || myOperations.find( theOp ) == -1 ||
+ if ( !theOp || !myOperations.contains( theOp ) ||
theOp->state() == SUIT_Operation::Running ||
blockingOperation( theOp ) != 0 )
return false;
// Move operation at the end of list in order to sort it in the order of activation.
// As result active operation is a last operation of list, operation which was active
// before currently active operation is located before it and so on
- myOperations.remove( theOp );
+ myOperations.removeAll( theOp );
myOperations.append( theOp );
emit theOp->resumed( theOp );
void SUIT_Study::stop( SUIT_Operation* theOp )
{
theOp->setState( SUIT_Operation::Waiting );
- myOperations.remove( theOp );
+ myOperations.removeAll( theOp );
// get last operation which can be resumed
- SUIT_Operation* anOp, *aResultOp = 0;
- for ( anOp = myOperations.last(); anOp; anOp = myOperations.prev() )
+ SUIT_Operation* aResultOp = 0;
+
+ QListIterator<SUIT_Operation*> it (myOperations);
+ it.toBack();
+ while( it.hasPrevious() )
{
+ SUIT_Operation* anOp = it.previous();
if ( anOp && anOp != theOp && blockingOperation( anOp ) == 0 )
{
aResultOp = anOp;
* \brief Get all started operations
* \return List of all started operations
*/
-const QPtrList<SUIT_Operation>& SUIT_Study::operations() const
+const QList<SUIT_Operation*>& SUIT_Study::operations() const
{
return myOperations;
}
}
/*!
- * \brief Returns TRUE if transaction is opened.
+ * \brief Returns \c true if transaction is opened.
*/
bool SUIT_Study::hasTransaction() const
{
return false;
}
+
+/*!
+ * \brief Restores the study state.
+ */
+void SUIT_Study::restoreState(int /*savePoint*/)
+{
+}