0029571: Samples: build qt samples together with OCCT
[occt.git] / samples / tools / TInspectorEXE / src / 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 #if QT_VERSION > 0x050000
78   TCollection_AsciiString aPlugindsDirName = OSD_Environment ("QTDIR").Value();
79   if (!aPlugindsDirName.IsEmpty())
80     QApplication::addLibraryPath (QString (aPlugindsDirName.ToCString()) + "/plugins");
81 #endif
82   QApplication anApp (argc, argv);
83
84   std::set<TCollection_AsciiString> aPlugins;
85   for (int anArgId = 1; anArgId < argc; anArgId++ )
86   {
87     if (!strcmp (argv[anArgId], "dfbrowser"))
88       aPlugins.insert ("TKDFBrowser");
89
90     if (!strcmp (argv[anArgId], "shapeview"))
91       aPlugins.insert ("TKShapeView");
92
93     if (!strcmp (argv[anArgId], "vinspector"))
94       aPlugins.insert ("TKVInspector");
95   }
96   NCollection_List<Handle(Standard_Transient)> aParameters;
97
98   // Create tool communicator
99   TInspector_Communicator* aCommunicator = TInspectorEXE_OpenFileDialog::Communicator();
100   if (!aCommunicator)
101   {
102     std::cout << "Communicator can not be created" << std::endl;
103     return 0;
104   }
105
106   TInspectorEXE_OpenButton* aButtonControl = new TInspectorEXE_OpenButton (0);
107   TCollection_AsciiString anActivatedPluginName;
108   if (aPlugins.empty())
109   {
110     aPlugins.insert("TKDFBrowser");
111     aPlugins.insert("TKShapeView");
112     aPlugins.insert("TKVInspector");
113
114     anActivatedPluginName = "TKDFBrowser";
115   }
116   else
117     anActivatedPluginName = *aPlugins.rbegin();
118
119   for (std::set<TCollection_AsciiString>::const_iterator aPluginIt = aPlugins.begin(); aPluginIt != aPlugins.end(); aPluginIt++)
120   {
121     TCollection_AsciiString aName = *aPluginIt;
122     aCommunicator->RegisterPlugin (aName);
123     aCommunicator->Init (aName, aParameters);
124     setPluginSampleDirectory (aName, aCommunicator, aButtonControl);
125   }
126   aCommunicator->Activate (anActivatedPluginName);
127
128   aCommunicator->SetVisible (true);
129   aCommunicator->SetOpenButton (aButtonControl->StartButton());
130
131   return anApp.exec();
132 }