1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-08-14 13:30:48 +03:00

0031353: TDocStd_Application does not have api to set progress indicator

Add support of Message_ProgressIndicator in BinTools classes.

Add support of Message_ProgressIndicator with possibility of user break in methods of opening and saving TDocStd_Application.

Add tests of ProgressIndicator in TDocStd_Applacation.
This commit is contained in:
akaftasev
2020-03-02 15:29:34 +03:00
committed by bugmaster
parent d27293d9bf
commit 6d8f9f4a49
75 changed files with 1364 additions and 1094 deletions

View File

@@ -33,6 +33,7 @@
#include <Standard_NoSuchObject.hxx>
#include <Standard_ProgramError.hxx>
#include <UTL.hxx>
#include <Message_ProgressSentry.hxx>
IMPLEMENT_STANDARD_RTTIEXT(CDF_Application,CDM_Application)
@@ -84,21 +85,24 @@ void CDF_Application::Close(const Handle(CDM_Document)& aDocument) {
//function : Retrieve
//purpose :
//=======================================================================
Handle(CDM_Document) CDF_Application::Retrieve(const TCollection_ExtendedString& aFolder,
const TCollection_ExtendedString& aName,
const Standard_Boolean UseStorageConfiguration) {
Handle(CDM_Document) CDF_Application::Retrieve (const TCollection_ExtendedString& aFolder,
const TCollection_ExtendedString& aName,
const Standard_Boolean UseStorageConfiguration,
const Handle(Message_ProgressIndicator)& theProgress)
{
TCollection_ExtendedString nullVersion;
return Retrieve(aFolder,aName,nullVersion,UseStorageConfiguration);
return Retrieve(aFolder, aName, nullVersion, UseStorageConfiguration, theProgress);
}
//=======================================================================
//function : Retrieve
//purpose :
//=======================================================================
Handle(CDM_Document) CDF_Application::Retrieve(const TCollection_ExtendedString& aFolder,
const TCollection_ExtendedString& aName,
const TCollection_ExtendedString& aVersion,
const Standard_Boolean UseStorageConfiguration)
Handle(CDM_Document) CDF_Application::Retrieve (const TCollection_ExtendedString& aFolder,
const TCollection_ExtendedString& aName,
const TCollection_ExtendedString& aVersion,
const Standard_Boolean UseStorageConfiguration,
const Handle(Message_ProgressIndicator)& theProgress)
{
Handle(CDM_MetaData) theMetaData;
@@ -108,7 +112,8 @@ Handle(CDM_Document) CDF_Application::Retrieve(const TCollection_ExtendedString
theMetaData=theMetaDataDriver->MetaData(aFolder,aName,aVersion);
CDF_TypeOfActivation theTypeOfActivation=TypeOfActivation(theMetaData);
Handle(CDM_Document) theDocument=Retrieve(theMetaData,UseStorageConfiguration,Standard_False);
Handle(CDM_Document) theDocument = Retrieve(theMetaData, UseStorageConfiguration,
Standard_False, theProgress);
CDF_Session::CurrentSession()->Directory()->Add(theDocument);
Activate(theDocument,theTypeOfActivation);
@@ -204,15 +209,20 @@ Standard_Boolean CDF_Application::SetDefaultFolder(const Standard_ExtString aFol
//function : Retrieve
//purpose :
//=======================================================================
Handle(CDM_Document) CDF_Application::Retrieve(const Handle(CDM_MetaData)& aMetaData,const Standard_Boolean UseStorageConfiguration) {
return Retrieve(aMetaData,UseStorageConfiguration,Standard_True);
Handle(CDM_Document) CDF_Application::Retrieve(const Handle(CDM_MetaData)& aMetaData,
const Standard_Boolean UseStorageConfiguration,
const Handle(Message_ProgressIndicator)& theProgress) {
return Retrieve(aMetaData, UseStorageConfiguration, Standard_True, theProgress);
}
//=======================================================================
//function : Retrieve
//purpose :
//=======================================================================
Handle(CDM_Document) CDF_Application::Retrieve(const Handle(CDM_MetaData)& aMetaData,const Standard_Boolean UseStorageConfiguration, const Standard_Boolean IsComponent) {
Handle(CDM_Document) CDF_Application::Retrieve (const Handle(CDM_MetaData)& aMetaData,
const Standard_Boolean UseStorageConfiguration,
const Standard_Boolean IsComponent,
const Handle(Message_ProgressIndicator)& theProgress) {
Handle(CDM_Document) theDocumentToReturn;
myRetrievableStatus = PCDM_RS_DriverFailure;
@@ -265,7 +275,7 @@ Handle(CDM_Document) CDF_Application::Retrieve(const Handle(CDM_MetaData)& aMeta
try {
OCC_CATCH_SIGNALS
theReader->Read(aMetaData->FileName(),theDocument,this);
theReader->Read (aMetaData->FileName(), theDocument, this, theProgress);
}
catch (Standard_Failure const& anException) {
myRetrievableStatus = theReader->GetStatus();
@@ -320,7 +330,8 @@ CDF_TypeOfActivation CDF_Application::TypeOfActivation(const Handle(CDM_MetaData
//function : Read
//purpose :
//=======================================================================
Handle(CDM_Document) CDF_Application::Read (Standard_IStream& theIStream)
Handle(CDM_Document) CDF_Application::Read (Standard_IStream& theIStream,
const Handle(Message_ProgressIndicator)& theProgress)
{
Handle(CDM_Document) aDoc;
Handle(Storage_Data) dData;
@@ -358,8 +369,7 @@ Handle(CDM_Document) CDF_Application::Read (Standard_IStream& theIStream)
try
{
OCC_CATCH_SIGNALS
aReader->Read (theIStream, dData, aDoc, this);
aReader->Read (theIStream, dData, aDoc, this, theProgress);
}
catch (Standard_Failure const& anException)
{

View File

@@ -87,7 +87,11 @@ public:
//!
//! Since the version is not specified in this syntax, the latest wil be used.
//! A link is kept with the database through an instance of CDM_MetaData
Standard_EXPORT Handle(CDM_Document) Retrieve (const TCollection_ExtendedString& aFolder, const TCollection_ExtendedString& aName, const Standard_Boolean UseStorageConfiguration = Standard_True);
Standard_EXPORT Handle(CDM_Document) Retrieve
(const TCollection_ExtendedString& aFolder,
const TCollection_ExtendedString& aName,
const Standard_Boolean UseStorageConfiguration = Standard_True,
const Handle(Message_ProgressIndicator)& theProgress = NULL);
//! This method retrieves a document from the database.
//! If the Document references other documents which have
@@ -103,18 +107,28 @@ public:
//! Handle(CDM_Document) theDocument=myApplication->Retrieve("|user|cascade","box","2");
//! A link is kept with the database through an instance
//! of CDM_MetaData
Standard_EXPORT Handle(CDM_Document) Retrieve (const TCollection_ExtendedString& aFolder, const TCollection_ExtendedString& aName, const TCollection_ExtendedString& aVersion, const Standard_Boolean UseStorageConfiguration = Standard_True);
Standard_EXPORT Handle(CDM_Document) Retrieve
(const TCollection_ExtendedString& aFolder,
const TCollection_ExtendedString& aName,
const TCollection_ExtendedString& aVersion,
const Standard_Boolean UseStorageConfiguration = Standard_True,
const Handle(Message_ProgressIndicator)& theProgress = NULL);
Standard_EXPORT PCDM_ReaderStatus CanRetrieve (const TCollection_ExtendedString& aFolder, const TCollection_ExtendedString& aName);
Standard_EXPORT PCDM_ReaderStatus CanRetrieve (const TCollection_ExtendedString& aFolder,
const TCollection_ExtendedString& aName);
Standard_EXPORT PCDM_ReaderStatus CanRetrieve (const TCollection_ExtendedString& aFolder, const TCollection_ExtendedString& aName, const TCollection_ExtendedString& aVersion);
Standard_EXPORT PCDM_ReaderStatus CanRetrieve (const TCollection_ExtendedString& aFolder,
const TCollection_ExtendedString& aName,
const TCollection_ExtendedString& aVersion);
//! Checks status after Retrieve
PCDM_ReaderStatus GetRetrieveStatus() const { return myRetrievableStatus; }
//! Reads aDoc from standard SEEKABLE stream theIStream,
//! the stream should support SEEK fuctionality
Standard_EXPORT Handle(CDM_Document) Read (Standard_IStream& theIStream);
Standard_EXPORT Handle(CDM_Document) Read
(Standard_IStream& theIStream,
const Handle(Message_ProgressIndicator)& theProgress = NULL);
//! Returns instance of read driver for specified format.
//!
@@ -147,7 +161,8 @@ public:
//! try to retrieve a Format directly in the file or in
//! application resource by using extension. returns
//! True if found;
Standard_EXPORT Standard_Boolean Format (const TCollection_ExtendedString& aFileName, TCollection_ExtendedString& theFormat);
Standard_EXPORT Standard_Boolean Format (const TCollection_ExtendedString& aFileName,
TCollection_ExtendedString& theFormat);
Standard_EXPORT Standard_ExtString DefaultFolder();
@@ -158,15 +173,6 @@ friend class CDF_Session;
DEFINE_STANDARD_RTTIEXT(CDF_Application,CDM_Application)
protected:
Standard_EXPORT CDF_Application();
PCDM_ReaderStatus myRetrievableStatus;
NCollection_IndexedDataMap<TCollection_ExtendedString, Handle(PCDM_RetrievalDriver)> myReaders;
NCollection_IndexedDataMap<TCollection_ExtendedString, Handle(PCDM_StorageDriver)> myWriters;
private:
@@ -183,11 +189,19 @@ private:
//! retrieved and modified since the previous retrieval.
//! You do not need to call <Activate>, but you should redefine
//! this method to implement application specific behavior.
Standard_EXPORT virtual void Activate (const Handle(CDM_Document)& aDocument, const CDF_TypeOfActivation aTypeOfActivation);
Standard_EXPORT virtual void Activate (const Handle(CDM_Document)& aDocument,
const CDF_TypeOfActivation aTypeOfActivation);
Standard_EXPORT Handle(CDM_Document) Retrieve (const Handle(CDM_MetaData)& aMetaData, const Standard_Boolean UseStorageConfiguration) Standard_OVERRIDE;
Standard_EXPORT Handle(CDM_Document) Retrieve
(const Handle(CDM_MetaData)& aMetaData,
const Standard_Boolean UseStorageConfiguration,
const Handle(Message_ProgressIndicator)& theProgress = NULL) Standard_OVERRIDE;
Standard_EXPORT Handle(CDM_Document) Retrieve (const Handle(CDM_MetaData)& aMetaData, const Standard_Boolean UseStorageConfiguration, const Standard_Boolean IsComponent);
Standard_EXPORT Handle(CDM_Document) Retrieve
(const Handle(CDM_MetaData)& aMetaData,
const Standard_Boolean UseStorageConfiguration,
const Standard_Boolean IsComponent,
const Handle(Message_ProgressIndicator)& theProgress = NULL);
Standard_EXPORT Standard_Integer DocumentVersion (const Handle(CDM_MetaData)& theMetaData) Standard_OVERRIDE;
@@ -195,6 +209,14 @@ private:
Standard_EXPORT PCDM_ReaderStatus CanRetrieve (const Handle(CDM_MetaData)& aMetaData);
protected:
Standard_EXPORT CDF_Application();
PCDM_ReaderStatus myRetrievableStatus;
NCollection_IndexedDataMap<TCollection_ExtendedString, Handle(PCDM_RetrievalDriver)> myReaders;
NCollection_IndexedDataMap<TCollection_ExtendedString, Handle(PCDM_StorageDriver)> myWriters;
private:
TCollection_ExtendedString myDefaultFolder;
};

View File

@@ -145,11 +145,12 @@ CDF_StoreSetNameStatus CDF_Store::SetName(const Standard_ExtString aName)
return SetName(theName);
}
void CDF_Store::Realize() {
void CDF_Store::Realize (const Handle(Message_ProgressIndicator)& theProgress)
{
Standard_ProgramError_Raise_if(!myList->IsConsistent(),"information are missing");
Handle(CDM_MetaData) m;
myText = "";
myStatus = myList->Store(m,myText);
myStatus = myList->Store(m, myText, theProgress);
if(myStatus==PCDM_SS_OK) myPath = m->Path();
}
Standard_ExtString CDF_Store::Path() const {

View File

@@ -28,6 +28,9 @@
#include <Standard_ExtString.hxx>
#include <CDF_StoreSetNameStatus.hxx>
#include <CDF_SubComponentStatus.hxx>
#include <Message_ProgressIndicator.hxx>
class CDF_StoreList;
class CDM_Document;
class TCollection_ExtendedString;
@@ -85,7 +88,7 @@ public:
Standard_EXPORT Standard_Boolean SetPreviousVersion (const Standard_ExtString aPreviousVersion);
Standard_EXPORT void Realize();
Standard_EXPORT void Realize (const Handle(Message_ProgressIndicator)& theProgress = NULL);
//! returns the complete path of the created meta-data.
Standard_EXPORT Standard_ExtString Path() const;

View File

@@ -74,8 +74,10 @@ void CDF_StoreList::Next() {
Handle(CDM_Document) CDF_StoreList::Value() const {
return myIterator.Key();
}
PCDM_StoreStatus CDF_StoreList::Store (Handle(CDM_MetaData)& aMetaData, TCollection_ExtendedString& aStatusAssociatedText) {
PCDM_StoreStatus CDF_StoreList::Store (Handle(CDM_MetaData)& aMetaData,
TCollection_ExtendedString& aStatusAssociatedText,
const Handle(Message_ProgressIndicator)& theProgress)
{
Handle(CDF_MetaDataDriver) theMetaDataDriver = CDF_Session::CurrentSession()->MetaDataDriver();
PCDM_StoreStatus status = PCDM_SS_OK;
@@ -112,7 +114,7 @@ PCDM_StoreStatus CDF_StoreList::Store (Handle(CDM_MetaData)& aMetaData, TCollect
}
TCollection_ExtendedString theName=theMetaDataDriver->BuildFileName(theDocument);
aDocumentStorageDriver->Write(theDocument,theName);
aDocumentStorageDriver->Write(theDocument, theName, theProgress);
status = aDocumentStorageDriver->GetStoreStatus();
aMetaData = theMetaDataDriver->CreateMetaData(theDocument,theName);
theDocument->SetMetaData(aMetaData);

View File

@@ -26,6 +26,8 @@
#include <Standard_Transient.hxx>
#include <Standard_Boolean.hxx>
#include <PCDM_StoreStatus.hxx>
#include <Message_ProgressIndicator.hxx>
class CDM_Document;
class Standard_NoSuchObject;
class CDM_MetaData;
@@ -48,7 +50,9 @@ public:
//! stores each object of the storelist in the reverse
//! order of which they had been added.
Standard_EXPORT PCDM_StoreStatus Store (Handle(CDM_MetaData)& aMetaData, TCollection_ExtendedString& aStatusAssociatedText);
Standard_EXPORT PCDM_StoreStatus Store (Handle(CDM_MetaData)& aMetaData,
TCollection_ExtendedString& aStatusAssociatedText,
const Handle(Message_ProgressIndicator)& theProgress = NULL);
Standard_EXPORT void Init();