Salome HOME
NRI : Add KERNEL_ROOT_DIR in addition to SALOME_[ROOT, SITE]_DIR.
[modules/kernel.git] / src / SALOMEGUI / QAD_RightFrame.cxx
1 using namespace std;
2 //  File      : QAD_RightFrame.cxx
3 //  Created   : Thu Jun 14 14:51:52 2001
4 //  Author    : Nicolas REJNERI
5 //  Project   : SALOME
6 //  Module    : SALOMEGUI
7 //  Copyright : Open CASCADE
8 //  $Header$
9
10 #include "QAD_RightFrame.h"
11 #include "QAD_Application.h"
12 #include "QAD_Desktop.h"
13 #include "QAD_StudyFrame.h"
14 #include "QAD_Tools.h"
15 #include <qvaluelist.h>
16
17 // QT Include
18 #include <qmessagebox.h>
19
20 // Open CASCADE Include
21 #include <OSD_SharedLibrary.hxx>
22
23 /*!
24   \class QAD_RightFrame QAD_RightFrame.h
25   \brief Frame window which contains QAD_ViewFrame, QAD_PyInterp and QAD_Message.
26 */
27
28 typedef QAD_ViewFrame* View(QAD_RightFrame*);
29
30
31 /*!
32     Constructor
33 */
34 QAD_RightFrame::QAD_RightFrame(QWidget *parent, const char *name,
35                                QAD_PyInterp* interp, ViewType vt)
36   : QAD_Splitter( Qt::Vertical, parent, name )
37 {
38   this->setCompressEnabled( true );
39   myViewType  = vt;
40
41   QAD_Desktop* Desktop = QAD_Application::getDesktop();
42   int DesktopHeight = Desktop->getMainFrame()->width();
43   int DesktopWidth  = Desktop->getMainFrame()->height();
44
45   _interp = interp;
46
47   OSD_SharedLibrary SharedLib = OSD_SharedLibrary();
48   QString ComponentLib;
49   QCString dir;
50   QFileInfo fileInfo ;
51   bool found = false;
52   if (myViewType == VIEW_OCC) {
53     if ( dir = getenv("SALOME_SITE_DIR")) {
54       dir = QAD_Tools::addSlash(dir) ;
55       dir = dir + "lib" ;
56       dir = QAD_Tools::addSlash(dir) ;
57       dir = dir + "salome" ;
58       dir = QAD_Tools::addSlash(dir) ;
59 #ifdef WNT
60       dir = dir + "libOCCViewer.dll" ;
61 #else
62       dir = dir + "libOCCViewer.so" ;
63 #endif
64       MESSAGE ( " GUI library = " << dir )
65       fileInfo.setFile(dir) ;
66       if (fileInfo.exists()) {
67         ComponentLib = fileInfo.fileName();
68         found = true;
69         MESSAGE (" Found ")
70       } else
71         MESSAGE (" Not found ")
72     }
73     
74     if ( (dir = getenv("SALOME_ROOT_DIR")) && !found ) {
75       dir = QAD_Tools::addSlash(dir) ;
76       dir = dir + "lib" ;
77       dir = QAD_Tools::addSlash(dir) ;
78       dir = dir + "salome" ;
79       dir = QAD_Tools::addSlash(dir) ;
80 #ifdef WNT
81       dir = dir + "libOCCViewer.dll" ;
82 #else
83       dir = dir + "libOCCViewer.so" ;
84 #endif
85       MESSAGE ( " GUI library = " << dir )
86       fileInfo.setFile(dir) ;
87       if (fileInfo.exists()) {
88         ComponentLib = fileInfo.fileName();
89         found = true;
90         MESSAGE (" Found ")
91       } else
92         MESSAGE (" Not found ")
93     }
94     
95     if ( (dir = getenv("KERNEL_ROOT_DIR")) && !found ) {
96       dir = QAD_Tools::addSlash(dir) ;
97       dir = dir + "lib" ;
98       dir = QAD_Tools::addSlash(dir) ;
99       dir = dir + "salome" ;
100       dir = QAD_Tools::addSlash(dir) ;
101 #ifdef WNT
102       dir = dir + "libOCCViewer.dll" ;
103 #else
104       dir = dir + "libOCCViewer.so" ;
105 #endif
106       MESSAGE ( " GUI library = " << dir )
107       fileInfo.setFile(dir) ;
108       if (fileInfo.exists()) {
109         ComponentLib = fileInfo.fileName();
110         found = true;
111         MESSAGE (" Found ")
112       } else
113         MESSAGE (" Not found ")
114     }
115   } else if (myViewType == VIEW_VTK) {
116     
117     if ( dir = getenv("SALOME_SITE_DIR")) {
118       dir = QAD_Tools::addSlash(dir) ;
119       dir = dir + "lib" ;
120       dir = QAD_Tools::addSlash(dir) ;
121       dir = dir + "salome" ;
122       dir = QAD_Tools::addSlash(dir) ;
123 #ifdef WNT
124       dir = dir + "libVTKViewer.dll" ;
125 #else
126       dir = dir + "libVTKViewer.so" ;
127 #endif
128       MESSAGE ( " GUI library = " << dir );
129       fileInfo.setFile(dir) ;
130       if (fileInfo.exists()) {
131         ComponentLib = fileInfo.fileName();
132         found = true;
133         MESSAGE (" Found ");
134       } else
135         MESSAGE (" Not found ");
136     }
137         
138     if ( (dir = getenv("SALOME_ROOT_DIR")) && !found ) {
139       dir = QAD_Tools::addSlash(dir) ;
140       dir = dir + "lib" ;
141       dir = QAD_Tools::addSlash(dir) ;
142       dir = dir + "salome" ;
143       dir = QAD_Tools::addSlash(dir) ;
144 #ifdef WNT
145       dir = dir + "libVTKViewer.dll" ;
146 #else
147       dir = dir + "libVTKViewer.so" ;
148 #endif
149       MESSAGE ( " GUI library = " << dir );
150       fileInfo.setFile(dir) ;
151       if (fileInfo.exists()) {
152         ComponentLib = fileInfo.fileName();
153         found = true;
154         MESSAGE (" Found ");
155       } else
156         MESSAGE (" Not found ");
157     }
158         
159     if ( (dir = getenv("KERNEL_ROOT_DIR")) && !found ) {
160       dir = QAD_Tools::addSlash(dir) ;
161       dir = dir + "lib" ;
162       dir = QAD_Tools::addSlash(dir) ;
163       dir = dir + "salome" ;
164       dir = QAD_Tools::addSlash(dir) ;
165 #ifdef WNT
166       dir = dir + "libVTKViewer.dll" ;
167 #else
168       dir = dir + "libVTKViewer.so" ;
169 #endif
170       MESSAGE ( " GUI library = " << dir );
171       fileInfo.setFile(dir) ;
172       if (fileInfo.exists()) {
173         ComponentLib = fileInfo.fileName();
174         found = true;
175         MESSAGE (" Found ");
176       } else
177         MESSAGE (" Not found ");
178     }
179   } else if (myViewType == VIEW_GRAPHSUPERV) {
180     if ( dir = getenv("SALOME_SITE_DIR")){
181       dir = QAD_Tools::addSlash(dir) ;
182       dir = dir + "lib" ;
183       dir = QAD_Tools::addSlash(dir) ;
184       dir = dir + "salome" ;
185       dir = QAD_Tools::addSlash(dir) ;
186 #ifdef WNT
187       dir = dir + "libSUPERVGraph.dll" ;
188 #else
189       dir = dir + "libSUPERVGraph.so" ;
190 #endif
191       MESSAGE ( " GUI library = " << dir )
192       fileInfo.setFile(dir) ;
193       if (fileInfo.exists()) {
194         ComponentLib = fileInfo.fileName() ;
195         found = true;
196         MESSAGE (" Found ")
197       } else
198         MESSAGE (" Not found ")
199     }
200     
201     if ( (dir = getenv("SALOME_ROOT_DIR")) && !found ) {
202       dir = QAD_Tools::addSlash(dir) ;
203       dir = dir + "lib" ;
204       dir = QAD_Tools::addSlash(dir) ;
205       dir = dir + "salome" ;
206       dir = QAD_Tools::addSlash(dir) ;
207 #ifdef WNT
208       dir = dir + "libSUPERVGraph.dll" ;
209 #else
210       dir = dir + "libSUPERVGraph.so" ;
211 #endif
212       MESSAGE ( " GUI library = " << dir )
213       fileInfo.setFile(dir) ;
214       if (fileInfo.exists()) {
215         ComponentLib = fileInfo.fileName() ;
216         found = true;
217         MESSAGE (" Found ")
218       } else
219         MESSAGE (" Not found ")
220     }
221     
222     if ( (dir = getenv("KERNEL_ROOT_DIR")) && !found ) {
223       dir = QAD_Tools::addSlash(dir) ;
224       dir = dir + "lib" ;
225       dir = QAD_Tools::addSlash(dir) ;
226       dir = dir + "salome" ;
227       dir = QAD_Tools::addSlash(dir) ;
228 #ifdef WNT
229       dir = dir + "libSUPERVGraph.dll" ;
230 #else
231       dir = dir + "libSUPERVGraph.so" ;
232 #endif
233       MESSAGE ( " GUI library = " << dir )
234       fileInfo.setFile(dir) ;
235       if (fileInfo.exists()) {
236         ComponentLib = fileInfo.fileName() ;
237         found = true;
238         MESSAGE (" Found ")
239       } else
240         MESSAGE (" Not found ")
241     }
242   } else if (myViewType == VIEW_PLOT2D) {
243     if ( dir = getenv("SALOME_SITE_DIR")){
244       dir = QAD_Tools::addSlash(dir) ;
245       dir = dir + "lib" ;
246       dir = QAD_Tools::addSlash(dir) ;
247       dir = dir + "salome" ;
248       dir = QAD_Tools::addSlash(dir) ;
249 #ifdef WNT
250       dir = dir + "libPlot2d.dll" ;
251 #else
252       dir = dir + "libPlot2d.so" ;
253 #endif
254       MESSAGE ( " GUI library = " << dir )
255       fileInfo.setFile(dir) ;
256       if (fileInfo.exists()) {
257         ComponentLib = fileInfo.fileName() ;
258         found = true;
259         MESSAGE (" Found ")
260       } else
261         MESSAGE (" Not found ")
262     }
263     
264     if ( (dir = getenv("SALOME_ROOT_DIR")) && !found ) {
265       dir = QAD_Tools::addSlash(dir) ;
266       dir = dir + "lib" ;
267       dir = QAD_Tools::addSlash(dir) ;
268       dir = dir + "salome" ;
269       dir = QAD_Tools::addSlash(dir) ;
270 #ifdef WNT
271       dir = dir + "libPlot2d.dll" ;
272 #else
273       dir = dir + "libPlot2d.so" ;
274 #endif
275       MESSAGE ( " GUI library = " << dir )
276       fileInfo.setFile(dir) ;
277       if (fileInfo.exists()) {
278         ComponentLib = fileInfo.fileName() ;
279         found = true;
280         MESSAGE (" Found ")
281       } else
282         MESSAGE (" Not found ")
283     }
284     
285     if ( (dir = getenv("KERNEL_ROOT_DIR")) && !found ) {
286       dir = QAD_Tools::addSlash(dir) ;
287       dir = dir + "lib" ;
288       dir = QAD_Tools::addSlash(dir) ;
289       dir = dir + "salome" ;
290       dir = QAD_Tools::addSlash(dir) ;
291 #ifdef WNT
292       dir = dir + "libPlot2d.dll" ;
293 #else
294       dir = dir + "libPlot2d.so" ;
295 #endif
296       MESSAGE ( " GUI library = " << dir )
297       fileInfo.setFile(dir) ;
298       if (fileInfo.exists()) {
299         ComponentLib = fileInfo.fileName() ;
300         found = true;
301         MESSAGE (" Found ")
302       } else
303         MESSAGE (" Not found ")
304     }
305   } else {
306     QMessageBox::critical( this,
307                            tr("ERR_ERROR"),
308                            tr("undefined view type") );
309     return;
310   }
311
312   SharedLib.SetName( strdup(ComponentLib) );
313   
314   bool ok = SharedLib.DlOpen(OSD_RTLD_LAZY);
315   if (!ok) {
316     QMessageBox::critical( this,
317                            tr("ERR_ERROR"),
318                            tr( SharedLib.DlError() ) );
319     return;
320   } else {
321     OSD_Function osdF = SharedLib.DlSymb("createView");
322     if ( osdF != NULL ) {
323       View (*f1) = (QAD_ViewFrame* (*) (QAD_RightFrame*)) osdF;
324       myViewFrame = (*f1)(this);
325     } else {
326       QMessageBox::critical( this,
327                              tr("ERR_ERROR"),
328                              tr("createView undefined") );
329       return;
330     }
331   }
332
333   QValueList<int> sizes;
334
335   myViewFrame->setMinimumSize( 1, 1 );
336   vsplitter = new QAD_Splitter( Qt::Horizontal, this );
337   vsplitter->setMinimumSize( 1, 1 );
338   vsplitter->setCompressEnabled( true );
339   myPyEditor = new QAD_PyEditor(_interp, vsplitter ,"Python Interpreter");
340   myPyEditor->setMinimumSize( 1, 1 );
341   myMessage  = new QAD_Message( vsplitter ,"Message");  
342   myMessage->setMinimumSize( 1, 1 );
343
344   sizes.append( 0.48 * DesktopHeight );
345   sizes.append( 0.16 * DesktopHeight );
346   setSizes( sizes );
347   sizes.clear();
348   sizes.append( 0.25 * DesktopWidth );
349   sizes.append( 0.25 * DesktopWidth );
350   vsplitter->setSizes( sizes );
351 }
352
353 /*!
354     Destructor
355 */
356 QAD_RightFrame::~QAD_RightFrame()
357 {  
358 }
359
360 QAD_ViewFrame* QAD_RightFrame::getViewFrame() const
361 {
362   return myViewFrame;
363 }
364
365 /*!
366     Returns reference to the message window [ static ]
367 */
368 QAD_Message* QAD_RightFrame::getMessage() const
369 {
370   return myMessage;
371 }
372
373 /*!
374   Returns the Python interpreter that belongs to this study
375 */
376 QAD_PyInterp* QAD_RightFrame::get_PyInterp(void)
377 {
378   return _interp;
379 }
380
381 /*!
382     Returns reference to the Python window [ static ]
383 */
384 QAD_PyEditor* QAD_RightFrame::getPyEditor() const
385 {
386   return myPyEditor;
387 }
388
389 /*!
390     Compress views
391 */
392 void QAD_RightFrame::compressUp()
393 {
394   QSplitterPHandle* h = getHandleAfter(myViewFrame);
395   if (h)
396     h->compressBefore();
397 }
398
399 /*!
400     Uncompress views
401 */
402 void QAD_RightFrame::unCompressUp()
403 {
404   QSplitterPHandle* h = getHandleAfter(myViewFrame);
405   if (h)
406     h->unCompressBefore();
407 }
408
409 /*!
410     Compress Python Interpreter and Messages windows
411 */
412 void QAD_RightFrame::compressBottom()
413 {
414   QSplitterPHandle* h = getHandleAfter(myViewFrame);
415   if (h)
416     h->compressAfter();
417 }
418
419 /*!
420     Uncompress Python Interpreter and Messages windows
421 */
422 void QAD_RightFrame::unCompressBottom()
423 {
424   QSplitterPHandle* h = getHandleAfter(myViewFrame);
425   if (h)
426     h->unCompressAfter();
427 }
428