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