0029748: Samples - Inspector tool - use recently opened files in TInspectorEXE
[occt.git] / tools / TInspectorEXE / TInspectorEXE.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
17 #include <inspector/TInspectorEXE_OpenFileDialog.hxx>
18
19 #include <inspector/TInspector_Communicator.hxx>
20
21 #include <OSD_Environment.hxx>
22
23 #include <Standard_WarningsDisable.hxx>
24 #include <QAction>
25 #include <QApplication>
26 #include <QDir>
27 #include <QMainWindow>
28 #include <QToolBar>
29 #include <Standard_WarningsRestore.hxx>
30
31 #include <set>
32
33 // =======================================================================
34 // function : fileNameInDataDir
35 // purpose :
36 // =======================================================================
37 TCollection_AsciiString fileNameInDataDir (const TCollection_AsciiString& theEnvironmentDir,
38                                            const TCollection_AsciiString& theName)
39 {
40   OSD_Environment anEnvironment (theEnvironmentDir);
41   
42   TCollection_AsciiString aFileName = anEnvironment.Value();
43   aFileName += TCollection_AsciiString ("/") + theName;
44
45   return aFileName;
46 }
47
48 // =======================================================================
49 // function : setPluginSampleDirectory
50 // purpose :
51 // =======================================================================
52 void setPluginSampleDirectory (const TCollection_AsciiString& theName, TInspector_Communicator* theCommunicator,
53                                TInspectorEXE_OpenButton* theButtonControl)
54 {
55   QStringList aRecentlyOpenedFiles;
56   TInspectorEXE_OpenFileDialog::GetPluginRecentlyOpenedFiles (theName, theCommunicator, aRecentlyOpenedFiles);
57   TCollection_AsciiString aFileName, anAdditionalFileName;
58   if (!aRecentlyOpenedFiles.isEmpty())
59     aFileName = TCollection_AsciiString (aRecentlyOpenedFiles.last().toUtf8().data());
60   if (aFileName.IsEmpty())
61   {
62     if (theName.IsEqual ("TKDFBrowser"))
63       aFileName = fileNameInDataDir ("CSF_OCCTDataPath", "step/screw.step");
64     else if (theName.IsEqual ("TKShapeView"))
65       aFileName = fileNameInDataDir ("CSF_OCCTDataPath", "occ/hammer.brep");
66     else if (theName.IsEqual ("TKVInspector"))
67     {
68       aFileName = fileNameInDataDir ("CSF_OCCTDataPath", "occ/face1.brep");
69       anAdditionalFileName = fileNameInDataDir ("CSF_OCCTDataPath", "occ/face2.brep");
70     }
71     aRecentlyOpenedFiles.append (aFileName.ToCString());
72     if (!anAdditionalFileName.IsEmpty())
73       aRecentlyOpenedFiles.append (anAdditionalFileName.ToCString());
74   }
75   theCommunicator->OpenFile (theName, aFileName.ToCString());
76   if (!anAdditionalFileName.IsEmpty())
77     theCommunicator->OpenFile (theName, anAdditionalFileName);
78
79   theButtonControl->SetPluginRecentlyOpenedFiles (theName, aRecentlyOpenedFiles);
80 }
81
82 // =======================================================================
83 // function : main
84 // purpose :
85 // =======================================================================
86 int main (int argc, char** argv)
87 {
88 #if QT_VERSION > 0x050000
89   TCollection_AsciiString aPlugindsDirName = OSD_Environment ("QTDIR").Value();
90   if (!aPlugindsDirName.IsEmpty())
91     QApplication::addLibraryPath (QString (aPlugindsDirName.ToCString()) + "/plugins");
92 #endif
93   QApplication anApp (argc, argv);
94
95   std::set<TCollection_AsciiString> aPlugins;
96   for (int anArgId = 1; anArgId < argc; anArgId++ )
97   {
98     if (!strcmp (argv[anArgId], "dfbrowser"))
99       aPlugins.insert ("TKDFBrowser");
100
101     if (!strcmp (argv[anArgId], "shapeview"))
102       aPlugins.insert ("TKShapeView");
103
104     if (!strcmp (argv[anArgId], "vinspector"))
105       aPlugins.insert ("TKVInspector");
106   }
107   NCollection_List<Handle(Standard_Transient)> aParameters;
108
109   // Create tool communicator
110   TInspector_Communicator* aCommunicator = TInspectorEXE_OpenFileDialog::Communicator();
111   if (!aCommunicator)
112   {
113     std::cout << "Communicator can not be created" << std::endl;
114     return 0;
115   }
116
117   TInspectorEXE_OpenButton* aButtonControl = new TInspectorEXE_OpenButton (0);
118   TCollection_AsciiString anActivatedPluginName;
119   if (aPlugins.empty())
120   {
121     aPlugins.insert("TKDFBrowser");
122     aPlugins.insert("TKShapeView");
123     aPlugins.insert("TKVInspector");
124
125     anActivatedPluginName = "TKDFBrowser";
126   }
127   else
128     anActivatedPluginName = *aPlugins.rbegin();
129
130   for (std::set<TCollection_AsciiString>::const_iterator aPluginIt = aPlugins.begin(); aPluginIt != aPlugins.end(); aPluginIt++)
131   {
132     TCollection_AsciiString aName = *aPluginIt;
133     aCommunicator->RegisterPlugin (aName);
134     aCommunicator->Init (aName, aParameters);
135     setPluginSampleDirectory (aName, aCommunicator, aButtonControl);
136   }
137   aCommunicator->Activate (anActivatedPluginName);
138
139   aCommunicator->SetVisible (true);
140   aCommunicator->SetOpenButton (aButtonControl->StartButton());
141
142   return anApp.exec();
143 }