0032429: Coding - Warnings during compilation on macosx arm64 with option BUILD_Inspe...
[occt.git] / tools / TInspector / TInspector_Preferences.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/TInspector_Preferences.hxx>
17
18 #include <Standard_WarningsDisable.hxx>
19 #include <QDir>
20 #include <QDomDocument>
21 #include <QDomElement>
22 #include <QDomNode>
23 #include <QFile>
24 #include <QTextStream>
25 #include <Standard_WarningsRestore.hxx>
26
27 // =======================================================================
28 // function : GetPreferences
29 // purpose :
30 // =======================================================================
31 void TInspector_Preferences::GetPreferences (const TCollection_AsciiString& thePluginName,
32                                              TInspectorAPI_PreferencesDataMap& theItem)
33 {
34   if (!myIsLoadedPreferences)
35   {
36     loadPreferences();
37     myIsLoadedPreferences = Standard_True;
38   }
39   myLoadedPreferences.Find (thePluginName, theItem);
40 }
41
42 // =======================================================================
43 // function : StorePreferences
44 // purpose :
45 // =======================================================================
46 void TInspector_Preferences::StorePreferences()
47 {
48   if (myLoadedPreferences.IsEmpty())
49     return;
50
51   QString aFileName = QString (GetDirectory().ToCString()) + QDir::separator() + PreferencesFileName();
52   QFile aFile(aFileName);
53   if (!aFile.open (QFile::WriteOnly))
54     return;
55
56   QDomDocument aDomDocument (documentKey());
57   QDomComment aComment = aDomDocument.createComment("\nThis file is automatically created by TInspector application.\nChanges made in this file can be lost.\n");
58   aDomDocument.appendChild (aComment);
59   QDomElement aRootElement = aDomDocument.createElement (documentKey());
60   aDomDocument.appendChild (aRootElement);
61
62   for (NCollection_DataMap<TCollection_AsciiString, TInspectorAPI_PreferencesDataMap>::Iterator aPrefsIt (myLoadedPreferences);
63     aPrefsIt.More(); aPrefsIt.Next())
64   {
65     QDomElement aPluginElement = aDomDocument.createElement (pluginKey());
66     aPluginElement.setAttribute (nameKey(), aPrefsIt.Key().ToCString());
67     aRootElement.appendChild (aPluginElement);
68
69     const TInspectorAPI_PreferencesDataMap& aPluginMap = aPrefsIt.Value();
70     for (TInspectorAPI_IteratorOfPreferencesDataMap aPluginPrefsIt (aPluginMap); aPluginPrefsIt.More(); aPluginPrefsIt.Next())
71     {
72       QDomElement aParameterElement = aDomDocument.createElement (parameterKey());
73       aParameterElement.setAttribute (nameKey(), aPluginPrefsIt.Key().ToCString());
74       aParameterElement.setAttribute (valueKey(), aPluginPrefsIt.Value().ToCString());
75       aPluginElement.appendChild (aParameterElement);
76     }
77   }
78
79   QTextStream aTextStream (&aFile);
80   QStringList aDocumentStr = aDomDocument.toString().split ("\n");
81   for (QStringList::ConstIterator aContentIt = aDocumentStr.begin(); aContentIt != aDocumentStr.end(); ++aContentIt)
82   {
83     aTextStream << *aContentIt << '\n';
84   }
85   aFile.close();
86 }
87
88 // =======================================================================
89 // function : RemovePreferences
90 // purpose :
91 // =======================================================================
92 void TInspector_Preferences::RemovePreferences()
93 {
94   QString aFileName = QString (GetDirectory().ToCString()) + QDir::separator() + PreferencesFileName();
95   QDir aDir (GetDirectory().ToCString());
96   if (aDir.exists (aFileName))
97     aDir.remove (aFileName);
98   reset();
99 }
100
101 // =======================================================================
102 // function : loadPreferences
103 // purpose :
104 // =======================================================================
105 void TInspector_Preferences::loadPreferences()
106 {
107   QString aFileName = QString (GetDirectory().ToCString()) + QDir::separator() + PreferencesFileName();
108   QFile aFile (aFileName);
109   if (!aFile.open (QFile::ReadOnly))
110     return;
111
112   QDomDocument aDomDocument;
113   bool aResult = aDomDocument.setContent (&aFile);
114   aFile.close();
115   if (!aResult)
116     return;
117
118   QDomElement aRootElement = aDomDocument.documentElement();
119   if (aRootElement.isNull() || aRootElement.tagName() != documentKey())
120     return;
121
122   QDomNode aPluginNode = aRootElement.firstChild();
123   while (!aPluginNode.isNull())
124   {
125     if (aPluginNode.isElement())
126     {
127       QDomElement aPluginElement = aPluginNode.toElement();
128       if (aPluginElement.tagName() == pluginKey() && aPluginElement.hasAttribute (nameKey()))
129       {
130         TInspectorAPI_PreferencesDataMap anItem;
131         readPluginItem (aPluginElement, anItem);
132         myLoadedPreferences.Bind (aPluginElement.attribute (nameKey()).toStdString().c_str(), anItem);
133       }
134     }
135     aPluginNode = aPluginNode.nextSibling();
136   }
137 }
138
139 // =======================================================================
140 // function : readPluginItem
141 // purpose :
142 // =======================================================================
143 void TInspector_Preferences::readPluginItem (const QDomElement thePluginElement, TInspectorAPI_PreferencesDataMap& theItem)
144 {
145   QDomNode aParameterNode = thePluginElement.firstChild();
146   while (!aParameterNode.isNull())
147   {
148     if (aParameterNode.isElement())
149     {
150       QDomElement aParameterElement = aParameterNode.toElement();
151       if (aParameterElement.tagName() == parameterKey() &&
152           aParameterElement.hasAttribute (nameKey()) && aParameterElement.hasAttribute (valueKey()))
153       {
154         theItem.Bind (aParameterElement.attribute (nameKey()).toStdString().c_str(),
155                       aParameterElement.attribute (valueKey()).toStdString().c_str());
156       }
157     }
158     aParameterNode = aParameterNode.nextSibling();
159   }
160 }