-// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-//
+// Copyright (C) 2007-2020 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/ or email : webmaster.salome@opencascade.com
//
+
#include "CAF_Study.h"
#include "CAF_Tools.h"
-#include "CAF_Operation.h"
#include "CAF_Application.h"
#include <SUIT_Desktop.h>
#include <SUIT_MessageBox.h>
#include <SUIT_Application.h>
-#include <qdir.h>
+#include <QDir>
#include <TDF_Delta.hxx>
#include <TDF_ListIteratorOfDeltaList.hxx>
-
+#include <TColStd_SequenceOfAsciiString.hxx>
#include <Standard_Failure.hxx>
#include <Standard_ErrorHandler.hxx>
/*!
- Constructor
+ \class CAF_Study
+ \brief Represents study for using in CAF module.
+
+ A study contains reference to OCAF std document and allows using OCAF services.
+ Provides necessary functionality for OCC transactions management.
+*/
+
+/*!
+ \brief Constructor.
+ \param theApp application
*/
CAF_Study::CAF_Study(SUIT_Application* theApp)
: SUIT_Study( theApp ),
-myModifiedCnt( 0 )
+ myModifiedCnt( 0 )
{
}
/*!
- Constructor
+ \brief Constructor.
+ \param theApp application
+ \param aStdDoc OCAF document
*/
CAF_Study::CAF_Study(SUIT_Application* theApp, Handle (TDocStd_Document)& aStdDoc)
: SUIT_Study( theApp ),
-myStdDoc( aStdDoc ),
-myModifiedCnt( 0 )
+ myStdDoc( aStdDoc ),
+ myModifiedCnt( 0 )
{
}
/*!
- Destructor
+ \brief Destructor.
*/
CAF_Study::~CAF_Study()
{
}
/*!
- \return OCAF document
+ \brief Get OCAF document.
+ \return handle to the OCAF document object
*/
Handle(TDocStd_Document) CAF_Study::stdDoc() const
{
}
/*!
- Sets new OCAF document
- \param aStdDoc - new OCAF document
+ \brief Set OCAF document.
+ \param aStdDoc new OCAF document
*/
void CAF_Study::setStdDoc( Handle(TDocStd_Document)& aStdDoc )
{
}
/*!
- Custom document initialization
+ \brief Customize document initialization.
+ \param doc study name
+ \return \c true on success and \c false on error
*/
-void CAF_Study::createDocument()
+bool CAF_Study::createDocument( const QString& doc )
{
- SUIT_Study::createDocument();
+ bool res = SUIT_Study::createDocument( doc );
CAF_Application* app = cafApplication();
- if ( app && !app->stdApp().IsNull() )
+ if ( res && app && !app->stdApp().IsNull() )
{
try {
-#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
OCC_CATCH_SIGNALS;
-#endif
- TColStd_SequenceOfExtendedString formats;
- app->stdApp()->Formats( formats );
+ TColStd_SequenceOfAsciiString formats;
+ app->stdApp()->WritingFormats( formats );
+ if ( formats.IsEmpty() )
+ app->stdApp()->ReadingFormats( formats );
if ( !formats.IsEmpty() )
app->stdApp()->NewDocument( formats.First(), myStdDoc );
}
catch ( Standard_Failure ) {
+ res = false;
}
}
+ return res;
}
/*!
- Close document
+ \brief Close document.
+ \param permanently if \c true, a document is closed permanently
*/
-void CAF_Study::closeDocument( bool permanent )
+void CAF_Study::closeDocument( bool permanently )
{
Handle(TDocStd_Application) app = stdApp();
if ( !app.IsNull() && !stdDoc().IsNull() )
app->Close( stdDoc() );
- SUIT_Study::closeDocument( permanent );
+ SUIT_Study::closeDocument( permanently );
}
/*!
- Open document
- \param fname - name of file
+ \brief Open document.
+ \param fname study file name
+ \return \c true on success and \c false if document cannot be opened
*/
bool CAF_Study::openDocument( const QString& fname )
{
bool status = false;
try {
-#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
OCC_CATCH_SIGNALS;
-#endif
- status = app->Open( CAF_Tools::toExtString( fname ), myStdDoc ) == CDF_RS_OK;
+ status = app->Open( CAF_Tools::toExtString( fname ), myStdDoc ) == PCDM_RS_OK;
}
catch ( Standard_Failure ) {
status = false;
}
/*!
- Save document with other name
- \param fname - name of file
+ \brief Save document with other name.
+ \param fname study file name
*/
bool CAF_Study::saveDocumentAs( const QString& fname )
{
bool save = false;
if ( !stdDoc().IsNull() && stdDoc()->IsSaved() )
{
- QString path = QDir::convertSeparators( CAF_Tools::toQString( stdDoc()->GetPath() ) );
- save = path == QDir::convertSeparators( fname );
+ QString path = QDir::toNativeSeparators( CAF_Tools::toQString( stdDoc()->GetPath() ) );
+ save = path == QDir::toNativeSeparators( fname );
}
bool status = false;
try {
-#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
OCC_CATCH_SIGNALS;
-#endif
if ( save )
- status = app->Save( stdDoc() ) == CDF_SS_OK;
+ status = app->Save( stdDoc() ) == PCDM_SS_OK;
else
{
TCollection_ExtendedString format, path( CAF_Tools::toExtString( fname ) );
if ( format.Length() )
stdDoc()->ChangeStorageFormat( format );
- status = app->SaveAs( stdDoc(), path ) == CDF_SS_OK;
+ status = app->SaveAs( stdDoc(), path ) == PCDM_SS_OK;
}
}
catch ( Standard_Failure ) {
}
/*!
- Open OCAF transaction
+ \brief Open OCAF transaction.
+ \return \c true if transaction is opened successfully
*/
bool CAF_Study::openTransaction()
{
bool res = true;
try {
-#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
OCC_CATCH_SIGNALS;
-#endif
if ( myStdDoc->HasOpenCommand() )
myStdDoc->AbortCommand();
}
/*!
- Abort OCAF transaction
+ \brief Abort OCAF transaction.
+ \return \c true if transaction is aborted successfully
*/
bool CAF_Study::abortTransaction()
{
bool res = true;
try {
-#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
OCC_CATCH_SIGNALS;
-#endif
myStdDoc->AbortCommand();
update();
}
}
/*!
- Commit OCAF transaction
+ \brief Commit OCAF transaction
+ \return \c true if transaction is committed successfully
*/
bool CAF_Study::commitTransaction( const QString& name )
{
bool res = true;
try {
-#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
OCC_CATCH_SIGNALS;
-#endif
myStdDoc->CommitCommand();
if ( canUndo() )
}
/*!
- \return true, if there is opened OCAF transaction
+ \brief Check if there is any transaction opened.
+ \return \c true if there is opened OCAF transaction
*/
bool CAF_Study::hasTransaction() const
{
}
/*!
- \return whether the document was saved in file. [ public ]
+ \brief Check if the study is saved.
+ \return \c true if the document has been saved to file
*/
bool CAF_Study::isSaved() const
{
}
/*!
- \return whether the document is modified. [ public ]
+ \brief Check if the study is modified.
+ \return \c true if the document has been modified
*/
bool CAF_Study::isModified() const
{
}
/*!
- Increments modification count. If 'undoable' is 'true', this modification
- can be rolled back by 'undoModified' otherwise the document will be marked
- as 'modiifed' until saved. [ protected ]
+ \brief Increment modifications count.
+
+ If \a undoable is \c true, this modification can be rolled back by
+ undoModified(), otherwise the document will be marked as \c modified
+ until it is saved.
+
+ \param undoable if \c true the operation is undoable
+ \sa undoModified(), clearModified()
*/
void CAF_Study::doModified( bool undoable )
{
- if ( myStdDoc.IsNull() )
+ if ( myStdDoc.IsNull() )
return;
- myModifiedCnt++;
+ myModifiedCnt++;
- /* Assumed that number of available undos / redos is NOT changed dynamically */
- if ( !undoable )
+ /* Assumed that number of available undos / redos is NOT changed dynamically */
+ if ( !undoable )
myModifiedCnt += myStdDoc->GetAvailableUndos();
}
/*!
- Decrements modification count. [ protected ]
+ \brief Decrement modifications count.
+ \sa doModified(), clearModified()
*/
void CAF_Study::undoModified()
{
}
/*!
- Clears modification count. [ public ]
+ \brief Clear modifications count.
+ \sa doModified(), undoModified()
*/
void CAF_Study::clearModified()
{
}
/*!
- Undoes the last command. [ public ]
+ \brief Undo the last command.
+ \return \c true on success and \c false on error
*/
bool CAF_Study::undo()
{
return false;
try {
-#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
OCC_CATCH_SIGNALS;
-#endif
myStdDoc->Undo();
undoModified(); /* decrement modification counter */
}
catch ( Standard_Failure ) {
- SUIT_MessageBox::error1(application()->desktop(), tr( "ERR_ERROR" ),
- tr( "ERR_DOC_UNDO" ), tr ( "BUT_OK" ));
+ SUIT_MessageBox::critical(application()->desktop(), tr( "ERR_ERROR" ),
+ tr( "ERR_DOC_UNDO" ));
return false;
}
return true;
}
/*!
- Redoes the last undo. [ public ]
+ \brief Redo the last undo.
+ \return \c true on success and \c false on error
*/
bool CAF_Study::redo()
{
return false;
try {
-#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
OCC_CATCH_SIGNALS;
-#endif
myStdDoc->Redo();
doModified(); /* increment modification counter */
}
catch ( Standard_Failure ) {
- SUIT_MessageBox::error1( application()->desktop(), tr( "ERR_ERROR" ),
- tr( "ERR_DOC_REDO" ), tr ( "BUT_OK" ) );
+ SUIT_MessageBox::critical( application()->desktop(), tr( "ERR_ERROR" ),
+ tr( "ERR_DOC_REDO" ) );
return false;
}
return true;
}
/*!
- \return true if possible to perform 'undo' command. [ public ]
+ \brief Check if it is possible to undo last command.
+ \return \c true if undo is avaiable
*/
bool CAF_Study::canUndo() const
{
}
/*!
- \return true if possible to perform 'redo' command. [ public ]
+ \brief Check if it is possible to redo last undo.
+ \return \c true if redo is avaiable
*/
bool CAF_Study::canRedo() const
{
}
/*!
- \return the list of names of 'undo' actions available. [ public ]
+ \brief Get names of available undo commands.
+ \return list of commands names
*/
QStringList CAF_Study::undoNames() const
{
}
/*!
- \return the list of names of 'redo' actions available. [ public ]
+ \brief Get names of available redo commands.
+ \return list of commands names
*/
QStringList CAF_Study::redoNames() const
{
}
/*!
- \return the standard OCAF application from owner application. [ protected ]
+ \brief Get OCAF application.
+ \return handle to the OCAF application object
*/
Handle(TDocStd_Application) CAF_Study::stdApp() const
{
}
/*!
- \return the application casted to type CAF_Application. [ protected ]
+ \brief Get application.
+ \return application object (CAF_Application)
*/
CAF_Application* CAF_Study::cafApplication() const
{
- return ::qt_cast<CAF_Application*>( application() );
+ return qobject_cast<CAF_Application*>( application() );
}