0029195: OCAF - ensure thread safety for different documents.
[occt.git] / tools / DFBrowserPane / DFBrowserPane_TDocStdOwner.cxx
1 // Created on: 2017-06-16
2 // Created by: Natalia ERMOLAEVA
3 // Copyright (c) 2017 OPEN CASCADE SAS
4 //
5 // This file is part of Open CASCADE Technology software library.
6 //
7 // This library is free software; you can redistribute it and/or modify it under
8 // the terms of the GNU Lesser General Public License version 2.1 as published
9 // by the Free Software Foundation, with special exception defined in the file
10 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
11 // distribution for complete text of the license and disclaimer of any warranty.
12 //
13 // Alternatively, this file may be used under the terms of Open CASCADE
14 // commercial license or contractual agreement. 
15
16 #include <inspector/DFBrowserPane_TDocStdOwner.hxx>
17
18 #include <inspector/DFBrowserPane_AttributePaneModel.hxx>
19 #include <inspector/DFBrowserPane_TableView.hxx>
20 #include <inspector/DFBrowserPane_Tools.hxx>
21
22 #include <TDocStd_Document.hxx>
23 #include <TDocStd_Owner.hxx>
24 #include <TDF_Delta.hxx>
25 #include <TDF_ListIteratorOfDeltaList.hxx>
26
27 #include <Standard_WarningsDisable.hxx>
28 #include <QGridLayout>
29 #include <QGroupBox>
30 #include <QTableView>
31 #include <QVariant>
32 #include <QWidget>
33 #include <Standard_WarningsRestore.hxx>
34
35 // =======================================================================
36 // function : Constructor
37 // purpose :
38 // =======================================================================
39 DFBrowserPane_TDocStdOwner::DFBrowserPane_TDocStdOwner()
40  : DFBrowserPane_AttributePane()
41 {
42 }
43
44 // =======================================================================
45 // function : GetValues
46 // purpose :
47 // =======================================================================
48 void DFBrowserPane_TDocStdOwner::GetValues (const Handle(TDF_Attribute)& theAttribute, QList<QVariant>& theValues)
49 {
50   Handle(TDocStd_Owner) anAttribute = Handle(TDocStd_Owner)::DownCast (theAttribute);
51   if (anAttribute.IsNull())
52     return;
53
54   Handle(TDocStd_Document) aDocument = anAttribute->GetDocument();
55   if (aDocument.IsNull())
56     return;
57
58   TCollection_AsciiString aDocumentInfo = Standard_Dump::GetPointerInfo (aDocument).ToCString();
59   TColStd_SequenceOfExtendedString anExtensions;
60   aDocument->Extensions(anExtensions);
61   TCollection_AsciiString aSeparationStr = "---------------------------";
62   theValues << aSeparationStr.ToCString() << aSeparationStr.ToCString()
63             << STANDARD_TYPE (CDM_Document)->Name() << aDocumentInfo.ToCString()
64             << aSeparationStr.ToCString() << aSeparationStr.ToCString()
65             << "StorageFormat" << DFBrowserPane_Tools::ToString (aDocument->StorageFormat())
66             << "Extensions" << convertToString (anExtensions)
67             << "FromReferencesNumber" << QString::number (aDocument->FromReferencesNumber())
68             << "ToReferencesNumber" << QString::number (aDocument->ToReferencesNumber())
69             << "IsReadOnly" << DFBrowserPane_Tools::BoolToStr (aDocument->IsReadOnly())
70             << "Modifications" << QString::number (aDocument->Modifications());
71
72   TColStd_SequenceOfExtendedString aComments;
73   aDocument->Extensions(aComments);
74   // if the document application is empty, Application() sents an exception, it is called in LoadResources() of:
75   // FindFileExtension, FindDescription and others, so we need the check for it
76   bool isDocumentOpened = aDocument->IsOpened();
77
78   // CDM_Document methods
79   theValues << "Comments" << convertToString (aComments)
80    //         << "Presentation" << DFBrowserPane_Tools::ToString (aDocument->Presentation())
81             << "IsStored" << DFBrowserPane_Tools::BoolToStr (aDocument->IsStored())
82             << "StorageVersion" << QString::number (aDocument->StorageVersion())
83             << "Folder" << (aDocument->IsStored() ? DFBrowserPane_Tools::ToString (aDocument->Folder()) : "")
84             << "HasRequestedFolder" << DFBrowserPane_Tools::BoolToStr (aDocument->HasRequestedFolder())
85             << "RequestedFolder" << (aDocument->HasRequestedFolder() ? DFBrowserPane_Tools::ToString (aDocument->RequestedFolder()) : "")
86             << "RequestedName" << DFBrowserPane_Tools::ToString (aDocument->RequestedName())
87             << "HasRequestedPreviousVersion" << DFBrowserPane_Tools::BoolToStr (aDocument->HasRequestedPreviousVersion())
88             << "RequestedPreviousVersion" << (aDocument->HasRequestedPreviousVersion() ?
89                                               DFBrowserPane_Tools::ToString (aDocument->RequestedPreviousVersion()) : "")
90             << "RequestedComment" << DFBrowserPane_Tools::ToString (aDocument->RequestedComment())
91             << "FindFileExtension" << (isDocumentOpened ? DFBrowserPane_Tools::BoolToStr (aDocument->FindFileExtension()) : "")
92             << "FileExtension" << (isDocumentOpened ? DFBrowserPane_Tools::ToString (aDocument->FileExtension()) : "")
93             << "FindDescription" << (isDocumentOpened ? DFBrowserPane_Tools::BoolToStr (aDocument->FindDescription()) : "")
94             << "Description" << (isDocumentOpened ? DFBrowserPane_Tools::ToString (aDocument->Description()) : "")
95             << "IsModified" << DFBrowserPane_Tools::BoolToStr (aDocument->IsModified())
96             << "IsOpened" << DFBrowserPane_Tools::BoolToStr (aDocument->IsOpened())
97             << "CanClose" << DFBrowserPane_Tools::ToName(DB_CDM_CAN_CLOSE_STATUS, aDocument->CanClose()).ToCString()
98             << "ReferenceCounter" << QString::number (aDocument->ReferenceCounter());
99
100   // TDocStd_Document methods
101   TCollection_AsciiString aDocumentDataInfo = !aDocument->GetData().IsNull()
102     ? Standard_Dump::GetPointerInfo (aDocument->GetData()).ToCString() : "";
103   theValues << aSeparationStr.ToCString() << aSeparationStr.ToCString()
104             << STANDARD_TYPE (TDocStd_Document)->Name() << ""
105             << aSeparationStr.ToCString() << aSeparationStr.ToCString()
106             << "IsSaved" << DFBrowserPane_Tools::BoolToStr (aDocument->IsSaved())
107             << "IsChanged" << DFBrowserPane_Tools::BoolToStr (aDocument->IsChanged())
108             << "GetSavedTime" << QString::number (aDocument->GetSavedTime())
109             << "GetName" << (aDocument->IsSaved() ? DFBrowserPane_Tools::ToString (aDocument->GetName()) : "")
110             << "GetPath" << (aDocument->IsSaved() ? DFBrowserPane_Tools::ToString (aDocument->GetPath()) : "")
111             << "GetData" << aDocumentDataInfo.ToCString()
112             << "Main" << DFBrowserPane_Tools::GetEntry (aDocument->Main()).ToCString()
113             << "IsEmpty" << DFBrowserPane_Tools::BoolToStr (aDocument->IsEmpty())
114             << "IsValid" << DFBrowserPane_Tools::BoolToStr (aDocument->IsValid())
115             << "HasOpenCommand" << DFBrowserPane_Tools::BoolToStr (aDocument->HasOpenCommand())
116             << "GetUndoLimit" << QString::number (aDocument->GetUndoLimit())
117             << "GetAvailableUndos" << QString::number (aDocument->GetAvailableUndos())
118             << "GetUndos" << convertToString (aDocument->GetUndos())
119             << "GetAvailableRedos" << QString::number (aDocument->GetAvailableRedos())
120             << "GetRedos" << convertToString (aDocument->GetRedos())
121             << "EmptyLabelsSavingMode" << DFBrowserPane_Tools::BoolToStr (aDocument->EmptyLabelsSavingMode())
122             << "IsNestedTransactionMode" << DFBrowserPane_Tools::BoolToStr (aDocument->IsNestedTransactionMode())
123             << "ModificationMode" << DFBrowserPane_Tools::BoolToStr (aDocument->ModificationMode());
124 }
125
126 // =======================================================================
127 // function : GetShortAttributeInfo
128 // purpose :
129 // =======================================================================
130 void DFBrowserPane_TDocStdOwner::GetShortAttributeInfo (const Handle(TDF_Attribute)& theAttribute,
131                                                         QList<QVariant>& theValues)
132 {
133   Handle(TDocStd_Owner) anAttribute = Handle(TDocStd_Owner)::DownCast (theAttribute);
134   if (anAttribute.IsNull())
135     return;
136
137   Handle(TDocStd_Document) aDocument = anAttribute->GetDocument();
138   if (aDocument.IsNull())
139     return;
140
141   theValues.append (DFBrowserPane_Tools::ToString (aDocument->StorageFormat()));
142 }
143
144 // =======================================================================
145 // function : convertToString
146 // purpose :
147 // =======================================================================
148 QString DFBrowserPane_TDocStdOwner::convertToString (const TDF_DeltaList& theDeltaList)
149 {
150   QStringList aNames;
151
152   for (TDF_ListIteratorOfDeltaList aDeltaIt (theDeltaList); aDeltaIt.More(); aDeltaIt.Next())
153   {
154     QString aName = DFBrowserPane_Tools::ToString (aDeltaIt.Value()->Name());
155     aNames.append (aName.isEmpty() ? "-" : aName);
156   }
157   return QString ("[%1]").arg (aNames.join (";"));
158 }
159
160 // =======================================================================
161 // function : convertToString
162 // purpose :
163 // =======================================================================
164 QString DFBrowserPane_TDocStdOwner::convertToString (const TColStd_SequenceOfExtendedString& theExtensions)
165 {
166   QStringList aNames;
167   for (Standard_Integer anExtensionId = 1, aNumber = theExtensions.Length(); anExtensionId <= aNumber; anExtensionId++)
168     aNames.append (DFBrowserPane_Tools::ToString (theExtensions(anExtensionId)));
169
170   return QString ("[%1]").arg (aNames.join (";"));
171 }