1 // File: Model_Document.cxx
2 // Created: 28 Dec 2011
3 // Author: Mikhail PONIKAROV
6 #include <Model_Document.hxx>
8 #include <TDataStd_Integer.hxx>
10 IMPLEMENT_STANDARD_HANDLE(Model_Document,MMgt_TShared)
11 IMPLEMENT_STANDARD_RTTIEXT(Model_Document,MMgt_TShared)
13 static const int UNDO_LIMIT = 10; // number of possible undo operations in the module
15 static const int TAG_GENERAL = 1; // general properties tag
16 static const int TAG_OBJECTS = 2; // tag of the objects sub-tree (Root for Model_ObjectsMgr)
17 static const int TAG_HISTORY = 3; // tag of the history sub-tree (Root for Model_History)
18 static const int TAG_ISOTOPES = 4; // tag of the isotopes sub-tree (Root for MaterialMC_Isotope)
22 bool Model_Document::Load(const char* theFileName)
24 bool myIsError = Standard_False;
26 TCollection_ExtendedString aPath ((const Standard_CString)theFileName);
27 PCDM_ReaderStatus aStatus = (PCDM_ReaderStatus) -1;
30 Handle(TDocStd_Document) aDoc = this;
31 aStatus = Model_Application::GetApplication()->Open(aPath, aDoc);
33 catch (Standard_Failure)
35 myIsError = aStatus != PCDM_RS_OK;
40 case PCDM_RS_UnknownDocument: cout<<"OCAFApp_Appl_RUnknownDocument"<<endl; break;
41 case PCDM_RS_AlreadyRetrieved: cout<<"OCAFApp_Appl_RAlreadyRetrieved"<<endl; break;
42 case PCDM_RS_AlreadyRetrievedAndModified: cout<<"OCAFApp_Appl_RAlreadyRetrievedAndModified"<<endl; break;
43 case PCDM_RS_NoDriver: cout<<"OCAFApp_Appl_RNoDriver"<<endl; break;
44 case PCDM_RS_UnknownFileDriver: cout<<"OCAFApp_Appl_RNoDriver"<<endl; break;
45 case PCDM_RS_OpenError: cout<<"OCAFApp_Appl_ROpenError"<<endl; break;
46 case PCDM_RS_NoVersion: cout<<"OCAFApp_Appl_RNoVersion"<<endl; break;
47 case PCDM_RS_NoModel: cout<<"OCAFApp_Appl_RNoModel"<<endl; break;
48 case PCDM_RS_NoDocument: cout<<"OCAFApp_Appl_RNoDocument"<<endl; break;
49 case PCDM_RS_FormatFailure: cout<<"OCAFApp_Appl_RFormatFailure"<<endl; break;
50 case PCDM_RS_TypeNotFoundInSchema: cout<<"OCAFApp_Appl_RTypeNotFound"<<endl; break;
51 case PCDM_RS_UnrecognizedFileFormat: cout<<"OCAFApp_Appl_RBadFileFormat"<<endl; break;
52 case PCDM_RS_MakeFailure: cout<<"OCAFApp_Appl_RMakeFailure"<<endl; break;
53 case PCDM_RS_PermissionDenied: cout<<"OCAFApp_Appl_RPermissionDenied"<<endl; break;
54 case PCDM_RS_DriverFailure: cout<<"OCAFApp_Appl_RDriverFailure"<<endl; break;
55 default: cout<<"OCAFApp_Appl_RUnknownFail"<<endl; break;
58 SetUndoLimit(UNDO_LIMIT);
63 bool Model_Document::Save(const char* theFileName)
65 bool myIsError = true;
67 TCollection_ExtendedString aPath ((const Standard_CString)theFileName);
68 PCDM_StoreStatus aStatus;
70 Handle(TDocStd_Document) aDoc = this;
71 aStatus = Model_Application::GetApplication()->SaveAs (aDoc, aPath);
73 catch (Standard_Failure) {
74 Handle(Standard_Failure) aFail = Standard_Failure::Caught();
75 cout<<"OCAFApp_Engine:save Error: "<<aFail->GetMessageString()<<endl;
78 myIsError = aStatus != PCDM_SS_OK;
83 case PCDM_SS_DriverFailure:
84 cout<<"OCAFApp_Appl_SDriverFailure"<<endl;
86 case PCDM_SS_WriteFailure:
87 cout<<"OCAFApp_Appl_SWriteFailure"<<endl;
91 cout<<"OCAFApp_Appl_SUnknownFailure"<<endl;
95 myTransactionsAfterSave = 0;
96 Standard::Purge(); // Release free memory
101 void Model_Document::Close()
103 TDocStd_Document::Close();
106 void Model_Document::StartOperation()
108 TDocStd_Document::NewCommand();
111 void Model_Document::FinishOperation()
113 TDocStd_Document::CommitCommand();
114 myTransactionsAfterSave++;
117 void Model_Document::AbortOperation()
119 TDocStd_Document::AbortCommand();
122 bool Model_Document::IsOperation()
124 return TDocStd_Document::HasOpenCommand() == Standard_True;
127 bool Model_Document::IsModified()
129 return myTransactionsAfterSave != 0;
132 bool Model_Document::CanUndo()
134 return TDocStd_Document::GetAvailableUndos() > 0;
137 void Model_Document::Undo()
139 TDocStd_Document::Undo();
140 myTransactionsAfterSave--;
143 bool Model_Document::CanRedo()
145 return TDocStd_Document::GetAvailableRedos() > 0;
148 void Model_Document::Redo()
150 TDocStd_Document::Redo();
151 myTransactionsAfterSave++;
154 Model_Document::Model_Document(const TCollection_ExtendedString& theStorageFormat)
155 : TDocStd_Document(theStorageFormat)
157 SetUndoLimit(UNDO_LIMIT);
158 myTransactionsAfterSave = 0;
161 Model_Document::~Model_Document()