0029571: Samples: build qt samples together with OCCT
[occt.git] / samples / qt / Common / src / ApplicationCommon.cxx
1 #include "ApplicationCommon.h"
2
3 #include "DocumentCommon.h"
4 #include "View.h"
5
6 #include <QFrame>
7 #include <QVBoxLayout>
8 #include <QMenuBar>
9 #include <QStatusBar>
10 #include <QMdiArea>
11 #include <QMdiSubWindow>
12 #include <QMessageBox>
13 #include <QApplication>
14 #include <QSignalMapper>
15
16 #include <Graphic3d_GraphicDriver.hxx>
17 #include <OpenGl_GraphicDriver.hxx>
18 #include <OSD_Environment.hxx>
19
20 #include <stdlib.h>
21
22 static ApplicationCommonWindow* stApp = 0;
23 static QMdiArea* stWs = 0;
24
25 ApplicationCommonWindow::ApplicationCommonWindow()
26 : QMainWindow( 0 ),
27 myNbDocuments( 0 ),
28 myIsDocuments(false),
29 myStdToolBar( 0 ),
30 myCasCadeBar( 0 ),
31 myFilePopup( 0 ),
32 myWindowPopup( 0 ),
33 myFileSeparator(NULL)
34 {
35   stApp = this;
36
37   // create and define the central widget
38   QFrame* vb = new QFrame( this );
39
40   QVBoxLayout *layout = new QVBoxLayout( vb );
41   layout->setMargin( 0 );
42
43   vb->setFrameStyle( QFrame::StyledPanel | QFrame::Sunken );
44   stWs = new QMdiArea( vb );
45   layout->addWidget( stWs );
46   setCentralWidget( vb );
47
48   createStandardOperations();
49   createCasCadeOperations();
50
51   statusBar()->showMessage( QObject::tr("INF_READY"), 5000 );
52   resize( 1000, 700 );
53 }
54
55 ApplicationCommonWindow::~ApplicationCommonWindow()
56 {
57 }
58
59 void ApplicationCommonWindow::createStandardOperations()
60 {
61   QPixmap newIcon, helpIcon, closeIcon;
62
63   QString dir = getResourceDir() + QString( "/" );
64
65   newIcon = QPixmap( dir + QObject::tr("ICON_NEW") );
66   helpIcon = QPixmap( dir + QObject::tr("ICON_HELP") );
67   closeIcon = QPixmap( dir + QObject::tr("ICON_CLOSE") );
68
69   QAction * fileNewAction, * fileCloseAction, * filePrefUseVBOAction,
70           * fileQuitAction, * viewToolAction, * viewStatusAction, * helpAboutAction;
71
72   fileNewAction = new QAction( newIcon, QObject::tr("MNU_NEW"), this );
73   fileNewAction->setToolTip( QObject::tr("TBR_NEW") );
74   fileNewAction->setStatusTip( QObject::tr("TBR_NEW") );
75   fileNewAction->setShortcut( QObject::tr("CTRL+N") );
76   connect( fileNewAction, SIGNAL( triggered() ) , this, SLOT( onNewDoc() ) );
77   myStdActions.insert( FileNewId, fileNewAction );
78
79   fileCloseAction = new QAction( closeIcon, QObject::tr("MNU_CLOSE"), this );
80   fileCloseAction->setToolTip( QObject::tr("TBR_CLOSE") );
81   fileCloseAction->setStatusTip( QObject::tr("TBR_CLOSE") );
82   fileCloseAction->setShortcut( QObject::tr("CTRL+W") );
83   connect( fileCloseAction, SIGNAL( triggered() ) , this, SLOT( onCloseWindow() ) );
84   myStdActions.insert( FileCloseId, fileCloseAction );
85
86   filePrefUseVBOAction = new QAction( QObject::tr("MNU_USE_VBO"), this );
87   filePrefUseVBOAction->setToolTip( QObject::tr("TBR_USE_VBO") );
88   filePrefUseVBOAction->setStatusTip( QObject::tr("TBR_USE_VBO") );
89   filePrefUseVBOAction->setCheckable( true );
90   filePrefUseVBOAction->setChecked( true );
91   connect( filePrefUseVBOAction, SIGNAL( triggered() ) , this, SLOT( onUseVBO() ) );
92   myStdActions.insert( FilePrefUseVBOId, filePrefUseVBOAction );
93
94   fileQuitAction = new QAction( QObject::tr("MNU_QUIT"), this );
95   fileQuitAction->setToolTip( QObject::tr("TBR_QUIT") );
96   fileQuitAction->setStatusTip( QObject::tr("TBR_QUIT") );
97   fileQuitAction->setShortcut( QObject::tr("CTRL+Q") );
98   connect( fileQuitAction, SIGNAL( triggered() ) , qApp, SLOT( closeAllWindows() ) );
99   myStdActions.insert( FileQuitId, fileQuitAction );
100
101   viewToolAction = new QAction( QObject::tr("MNU_TOOL_BAR"), this );
102   viewToolAction->setToolTip( QObject::tr("TBR_TOOL_BAR") );
103   viewToolAction->setStatusTip( QObject::tr("TBR_TOOL_BAR") );
104   connect( viewToolAction, SIGNAL( triggered() ) , this, SLOT( onViewToolBar() ));
105   viewToolAction->setCheckable( true );
106   viewToolAction->setChecked( true );
107   myStdActions.insert( ViewToolId, viewToolAction );
108
109   viewStatusAction = new QAction( QObject::tr("MNU_STATUS_BAR"), this );
110   viewStatusAction->setToolTip( QObject::tr("TBR_STATUS_BAR") );
111   viewStatusAction->setStatusTip( QObject::tr("TBR_STATUS_BAR") );
112   connect( viewStatusAction, SIGNAL( triggered() ), this, SLOT( onViewStatusBar() ));
113   viewStatusAction->setCheckable( true );
114   viewStatusAction->setChecked( true );
115   myStdActions.insert( ViewStatusId, viewStatusAction );
116
117   helpAboutAction = new QAction( helpIcon, QObject::tr("MNU_ABOUT"), this );
118   helpAboutAction->setToolTip( QObject::tr( "TBR_ABOUT" ) );
119   helpAboutAction->setStatusTip( QObject::tr( "TBR_ABOUT" ) );
120   helpAboutAction->setShortcut( QObject::tr( "F1" ) );
121   connect( helpAboutAction, SIGNAL( triggered() ) , this, SLOT( onAbout() ) );
122   myStdActions.insert( HelpAboutId, helpAboutAction );
123
124   // create preferences menu
125   QMenu* aPrefMenu = new QMenu( QObject::tr("MNU_PREFERENCES") );
126   aPrefMenu->addAction( filePrefUseVBOAction );
127
128   // populate a menu with all actions
129   myFilePopup = new QMenu( this );
130   myFilePopup = menuBar()->addMenu( QObject::tr("MNU_FILE") );
131   myFilePopup->addAction( fileNewAction );
132   myFilePopup->addAction( fileCloseAction );
133   myFileSeparator = myFilePopup->addSeparator();
134   myFilePopup->addMenu( aPrefMenu );
135   myFileSeparator = myFilePopup->addSeparator();
136   myFilePopup->addAction( fileQuitAction );
137
138   // add a view menu
139   QMenu * view = new QMenu( this );
140
141   view = menuBar()->addMenu( QObject::tr("MNU_VIEW") );
142   view->addAction( viewToolAction );
143   view->addAction( viewStatusAction );
144
145   // add a help menu
146   QMenu * help = new QMenu( this );
147   menuBar()->addSeparator();
148   help = menuBar()->addMenu( QObject::tr("MNU_HELP") );
149   help->addAction( helpAboutAction );
150
151   // populate a tool bar with some actions
152   myStdToolBar = addToolBar( tr( "File Operations" ) );
153   myStdToolBar->addAction( fileNewAction );
154   myStdToolBar->addAction( helpAboutAction );
155
156   myStdActions.at(FileCloseId)->setEnabled(myDocuments.count() > 0);
157
158   myStdActions.at(FilePrefUseVBOId)->setEnabled( true );
159 }
160
161 void ApplicationCommonWindow::createCasCadeOperations()
162 {
163   createWindowPopup();
164
165   // populate a tool bar with some actions
166   myCasCadeBar = addToolBar( tr( "Shape Operations" ) );
167
168   QString dir = ApplicationCommonWindow::getResourceDir() + QString( "/" );
169   QAction* a;
170
171   a = new QAction( QPixmap( dir+QObject::tr("ICON_TOOL_WIRE") ), QObject::tr("MNU_TOOL_WIRE"), this );
172   a->setToolTip( QObject::tr("TBR_TOOL_WIRE") );
173   a->setStatusTip( QObject::tr("TBR_TOOL_WIRE") );
174   connect( a, SIGNAL( triggered() ) , this, SLOT( onToolAction() ) );
175   myToolActions.insert( ToolWireframeId, a );
176
177   a = new QAction( QPixmap( dir+QObject::tr("ICON_TOOL_SHAD") ), QObject::tr("MNU_TOOL_SHAD"), this );
178   a->setToolTip( QObject::tr("TBR_TOOL_SHAD") );
179   a->setStatusTip( QObject::tr("TBR_TOOL_SHAD") );
180   connect( a, SIGNAL( triggered() ) , this, SLOT( onToolAction() ) );
181   myToolActions.insert( ToolShadingId, a );
182
183   a = new QAction( QPixmap( dir+QObject::tr("ICON_TOOL_COLOR") ), QObject::tr("MNU_TOOL_COLOR"), this );
184   a->setToolTip( QObject::tr("TBR_TOOL_COLOR") );
185   a->setStatusTip( QObject::tr("TBR_TOOL_COLOR") );
186   connect( a, SIGNAL( triggered() ) , this, SLOT( onToolAction() ) );
187   myToolActions.insert( ToolColorId, a );
188
189   a = new QAction( QPixmap( dir+QObject::tr("ICON_TOOL_MATER") ), QObject::tr("MNU_TOOL_MATER"), this );
190   a->setToolTip( QObject::tr("TBR_TOOL_MATER") );
191   a->setStatusTip( QObject::tr("TBR_TOOL_MATER") );
192   connect( a, SIGNAL( triggered() ) , this, SLOT( onToolAction() ) );
193   myToolActions.insert( ToolMaterialId, a );
194
195   a = new QAction( QPixmap( dir+QObject::tr("ICON_TOOL_TRANS") ), QObject::tr("MNU_TOOL_TRANS"), this );
196   a->setToolTip( QObject::tr("TBR_TOOL_TRANS") );
197   a->setStatusTip( QObject::tr("TBR_TOOL_TRANS") );
198   connect( a, SIGNAL( triggered() ) , this, SLOT( onToolAction() ) );
199   myToolActions.insert( ToolTransparencyId, a );
200
201   a = new QAction( QPixmap( dir+QObject::tr("ICON_TOOL_DEL") ), QObject::tr("MNU_TOOL_DEL"), this );
202   a->setToolTip( QObject::tr("TBR_TOOL_DEL") );
203   a->setStatusTip( QObject::tr("TBR_TOOL_DEL") );
204   connect( a, SIGNAL( triggered() ) , this, SLOT( onToolAction() ) );
205   myToolActions.insert( ToolDeleteId, a );
206
207   QSignalMapper* sm = new QSignalMapper( this );
208   connect( sm, SIGNAL( mapped( int ) ), this, SLOT( onSetMaterial( int ) ) );
209
210   a = new QAction( QObject::tr("MNU_BRASS"), this );
211   a->setToolTip( QObject::tr("TBR_BRASS") );
212   a->setStatusTip( QObject::tr("TBR_BRASS") );
213   sm->setMapping( a,(int)Graphic3d_NOM_BRASS );
214   connect( a, SIGNAL( triggered() ), sm, SLOT( map() ) );
215   myMaterialActions.insert( Graphic3d_NOM_BRASS, a );
216
217   a = new QAction( QObject::tr("MNU_BRONZE"), this );
218   a->setToolTip( QObject::tr("TBR_BRONZE") );
219   a->setStatusTip( QObject::tr("TBR_BRONZE") );
220   sm->setMapping( a, ( int )Graphic3d_NOM_BRONZE );
221   connect( a, SIGNAL( triggered() ), sm, SLOT( map() ) );
222   myMaterialActions.insert( Graphic3d_NOM_BRONZE, a );
223
224   a = new QAction( QObject::tr("MNU_COPPER"), this );
225   a->setToolTip( QObject::tr("TBR_COPPER") );
226   a->setStatusTip( QObject::tr("TBR_COPER") );
227   sm->setMapping( a, ( int )Graphic3d_NOM_COPPER );
228   connect( a, SIGNAL( triggered() ), sm, SLOT( map() ) );
229   myMaterialActions.insert( Graphic3d_NOM_COPPER, a );
230
231   a = new QAction( QObject::tr("MNU_GOLD"), this );
232   a->setToolTip( QObject::tr("TBR_GOLD") );
233   a->setStatusTip( QObject::tr("TBR_GOLD") );
234   sm->setMapping( a, ( int )Graphic3d_NOM_GOLD );
235   connect( a, SIGNAL( triggered() ), sm, SLOT( map() ) );
236   myMaterialActions.insert( Graphic3d_NOM_GOLD, a );
237
238   a = new QAction( QObject::tr("MNU_PEWTER"), this );
239   a->setToolTip( QObject::tr("TBR_PEWTER") );
240   a->setStatusTip( QObject::tr("TBR_PEWTER") );
241   sm->setMapping( a, ( int )Graphic3d_NOM_PEWTER );
242   connect( a, SIGNAL( triggered() ), sm, SLOT( map() ) );
243   myMaterialActions.insert( Graphic3d_NOM_PEWTER, a );
244
245   a = new QAction( QObject::tr("MNU_PLASTER"), this );
246   a->setToolTip( QObject::tr("TBR_PLASTER") );
247   a->setStatusTip( QObject::tr("TBR_PLASTER") );
248   sm->setMapping( a, ( int )Graphic3d_NOM_PLASTER );
249   connect( a, SIGNAL( triggered() ), sm, SLOT( map() ) );
250   myMaterialActions.insert( Graphic3d_NOM_PLASTER, a );
251
252   a = new QAction( QObject::tr("MNU_PLASTIC"), this );
253   a->setToolTip( QObject::tr("TBR_PLASTIC") );
254   a->setStatusTip( QObject::tr("TBR_PLASTIC") );
255   sm->setMapping( a, ( int )Graphic3d_NOM_PLASTIC );
256   connect( a, SIGNAL( triggered() ), sm, SLOT( map() ) );
257   myMaterialActions.insert( Graphic3d_NOM_PLASTIC, a );
258
259   a = new QAction( QObject::tr("MNU_SILVER"), this );
260   a->setToolTip( QObject::tr("TBR_SILVER") );
261   a->setStatusTip( QObject::tr("TBR_SILVER") );
262   sm->setMapping( a, ( int )Graphic3d_NOM_SILVER );
263   connect( a, SIGNAL( triggered() ), sm, SLOT( map() ) );
264   myMaterialActions.insert( Graphic3d_NOM_SILVER, a );
265
266   for ( int i = 0; i < myToolActions.size(); i++ )
267     myCasCadeBar->addAction( myToolActions.at( i ) );
268   myCasCadeBar->hide();
269 }
270
271 QList<QAction*>* ApplicationCommonWindow::getToolActions()
272 {
273     return &myToolActions;
274 }
275
276 QList<QAction*>* ApplicationCommonWindow::getMaterialActions()
277 {
278     return &myMaterialActions;
279 }
280
281 void ApplicationCommonWindow::createWindowPopup()
282 {
283     if ( !myWindowPopup )
284     {
285       myWindowPopup = new QMenu( QObject::tr( "MNU_WINDOW" ), this );
286       connect( myWindowPopup, SIGNAL( aboutToShow() ),
287              this, SLOT( windowsMenuAboutToShow() ) );
288     }
289 }
290
291 void ApplicationCommonWindow::windowsMenuAboutToShow()
292 {
293   myWindowPopup->clear();
294   QAction* a;
295
296   QString dir = getResourceDir() + QString( "/" );
297
298   a = new QAction( QPixmap( dir + QObject::tr( "ICON_WINDOW_NEW3D" ) ), QObject::tr( "MNU_WINDOW_NEW3D" ), this );
299   a->setToolTip( QObject::tr( "TBR_WINDOW_NEW3D" ) );
300   a->setStatusTip( QObject::tr( "TBR_WINDOW_NEW3D" ) );
301   connect( a, SIGNAL( triggered() ), this, SLOT( onCreateNewView() ) );
302   myWindowPopup->addAction( a );
303
304   a = new QAction( QPixmap( dir + QObject::tr( "ICON_WINDOW_CASCADE" ) ), QObject::tr( "MNU_WINDOW_CASCADE" ), this );
305   a->setToolTip( QObject::tr( "TBR_WINDOW_CASCADE" ) );
306   a->setStatusTip( QObject::tr( "TBR_WINDOW_CASCADE" ) );
307   connect( a, SIGNAL( triggered() ), stWs, SLOT( cascade() ) );
308   myWindowPopup->addAction( a );
309
310   a = new QAction( QPixmap( dir + QObject::tr( "ICON_WINDOW_TILE" ) ), QObject::tr( "MNU_WINDOW_TILE" ), this );
311   a->setToolTip( QObject::tr( "TBR_WINDOW_TILE" ) );
312   a->setStatusTip( QObject::tr( "TBR_WINDOW_TILE" ) );
313   connect( a, SIGNAL( triggered() ), stWs, SLOT( tile() ) );
314   myWindowPopup->addAction( a );
315
316   myWindowPopup->addSeparator();
317   QList<QMdiSubWindow *> windows = stWs->subWindowList();
318   for (int i = 0; i < windows.count(); ++i)
319   {
320     QAction* aAction = new QAction( windows.at(i)->windowTitle(), this );
321     aAction->setCheckable( true );
322     aAction->setData( i );
323     myWindowPopup->addAction( aAction );
324     connect( aAction, SIGNAL( toggled( bool ) ), this, SLOT( windowsMenuActivated( bool ) ) );
325     aAction->setChecked( stWs->activeSubWindow() == windows.at(i) );
326   }
327 }
328
329 void ApplicationCommonWindow::windowsMenuActivated( bool checked )
330 {
331   QAction* aSender = qobject_cast<QAction*>( sender() );
332   if ( !aSender )
333     return;
334   QWidget * w = stWs->subWindowList().at( aSender->data().toInt() );
335   if ( w && checked )
336     w->setFocus();
337 }
338
339 QMdiArea * ApplicationCommonWindow::getWorkspace()
340 {
341   return stWs;
342 }
343
344 ApplicationCommonWindow* ApplicationCommonWindow::getApplication()
345 {
346   return stApp;
347 }
348
349 void ApplicationCommonWindow::updateFileActions()
350 {
351   if (!myDocuments.isEmpty())
352   {
353     return;
354   }
355
356   if ( !myIsDocuments )
357   {
358     QAction* fileQuitAction = NULL;
359     QAction* windowAction = NULL;
360     QList<QAction *> aListActions = myFilePopup->actions();
361     for ( int i = 0; i < aListActions.size(); i++ )
362     {
363       if( aListActions.at( i )->text() == QObject::tr("MNU_QUIT") )
364       {
365         fileQuitAction = aListActions.at( i );
366         break;
367       }
368     }
369         
370     if( !fileQuitAction )
371       return;
372       
373     myIsDocuments = true;
374     myCasCadeBar->show();
375
376     QList<QAction *> aListMenuActions = menuBar()->actions();
377     for ( int i = 0; i < aListMenuActions.size(); i++ )
378     {
379       if( aListMenuActions.at( i )->text() == QObject::tr("MNU_HELP") )
380       {
381           windowAction= aListMenuActions.at( i );
382           break;
383       }
384     }
385
386     if( !windowAction )
387       return;
388
389     menuBar()->insertMenu( windowAction, myWindowPopup );
390   }
391   else
392   {
393     myIsDocuments = false;
394     myCasCadeBar->hide();
395     menuBar()->removeAction( myWindowPopup->menuAction() );
396   }
397 }
398
399 DocumentCommon* ApplicationCommonWindow::createNewDocument()
400 {
401   return new DocumentCommon( ++myNbDocuments, this );
402 }
403
404 int& ApplicationCommonWindow::getNbDocument()
405 {
406   return myNbDocuments;
407 }
408
409 DocumentCommon* ApplicationCommonWindow::onNewDoc()
410 {
411   updateFileActions();
412   
413   DocumentCommon* aDoc = createNewDocument();
414   aDoc->onCreateNewView();
415   onSelectionChanged();
416   
417   connect (aDoc, SIGNAL (sendCloseDocument (DocumentCommon*) ),
418            this, SLOT (onCloseDocument (DocumentCommon*)));
419   connect (stWs, SIGNAL (windowActivated (QWidget*)),
420            this, SLOT (onWindowActivated (QWidget*)));
421   connect (aDoc, SIGNAL (selectionChanged()),
422            this, SLOT (onSelectionChanged()));
423   
424   myDocuments.append (aDoc);
425   myStdActions.at (FileCloseId)->setEnabled (myDocuments.count() > 0);
426   
427   return aDoc;
428 }
429
430 void ApplicationCommonWindow::onCloseWindow()
431 {
432     stWs->activeSubWindow()->close();
433 }
434
435 void ApplicationCommonWindow::onUseVBO()
436 {
437   MDIWindow* aWindow = qobject_cast<MDIWindow*> (stWs->activeSubWindow()->widget());
438     
439   if (NULL == aWindow)
440     return;
441
442   Handle(AIS_InteractiveContext) aContextAIS = aWindow->getDocument()->getContext();
443
444   if (aContextAIS.IsNull())
445     return;
446
447   Handle(OpenGl_GraphicDriver) aDriver =
448     Handle(OpenGl_GraphicDriver)::DownCast (aContextAIS->CurrentViewer()->Driver());
449
450   if (!aDriver.IsNull())
451   {
452     aDriver->ChangeOptions().vboDisable = Standard_True;
453   }
454 }
455
456 void ApplicationCommonWindow::onCloseDocument(DocumentCommon* theDoc)
457 {
458   myDocuments.removeAll( theDoc );
459   theDoc->removeViews();
460   delete theDoc;
461   updateFileActions();
462   myStdActions.at(FileCloseId)->setEnabled(myDocuments.count() > 0);
463 }
464
465 void ApplicationCommonWindow::onViewToolBar()
466 {
467   bool show = myStdActions.at( ViewToolId )->isChecked();
468   if ( show == myStdToolBar->isVisible() )
469     return;
470   if ( show )
471     myStdToolBar->show();
472   else
473     myStdToolBar->hide();
474 }
475
476 void ApplicationCommonWindow::onViewStatusBar()
477 {
478   bool show = myStdActions.at( ViewStatusId )->isChecked();
479   if ( show == statusBar()->isVisible() )
480     return;
481   if ( show )
482     statusBar()->show();
483   else
484     statusBar()->hide();
485 }
486
487 void ApplicationCommonWindow::onAbout()
488 {
489   QMessageBox::information( this, QObject::tr( "TIT_ABOUT" ), QObject::tr( "INF_ABOUT" ), QObject::tr("BTN_OK" ),
490                             QString::null, QString::null, 0, 0 );
491 }
492
493 void ApplicationCommonWindow::onCreateNewView()
494 {
495   MDIWindow* window = qobject_cast< MDIWindow* >( stWs->activeSubWindow()->widget() );
496   window->getDocument()->onCreateNewView();
497 }
498
499 void ApplicationCommonWindow::onWindowActivated ( QWidget * w )
500 {
501   if (w == NULL)
502   {
503     return;
504   }
505   
506   MDIWindow* window = qobject_cast< MDIWindow* >(w);
507
508   window->onWindowActivated();
509 }
510
511 void ApplicationCommonWindow::onToolAction()
512 {
513   QAction* sentBy = (QAction*) sender();
514   QMdiArea* ws = ApplicationCommonWindow::getWorkspace();
515   DocumentCommon* doc = qobject_cast<MDIWindow*>( ws->activeSubWindow()->widget() )->getDocument();
516
517   if( sentBy == myToolActions.at( ToolWireframeId ) )
518     doc->onWireframe();
519
520   if( sentBy == myToolActions.at( ToolShadingId ) )
521     doc->onShading();
522
523   if( sentBy == myToolActions.at( ToolColorId ) )
524     doc->onColor();
525
526   if( sentBy == myToolActions.at( ToolMaterialId ) )
527     doc->onMaterial();
528
529   if( sentBy == myToolActions.at( ToolTransparencyId ) )
530     doc->onTransparency();
531
532   if( sentBy == myToolActions.at( ToolDeleteId ) )
533     doc->onDelete();
534 }
535
536 void ApplicationCommonWindow::onSelectionChanged()
537 {
538   QMdiArea* ws = ApplicationCommonWindow::getWorkspace();
539     DocumentCommon* doc;
540
541   if( !qobject_cast<MDIWindow*>( ws->activeSubWindow()->widget() ) )
542     return;
543
544   doc = ( qobject_cast<MDIWindow*>( ws->activeSubWindow()->widget() ) )->getDocument();
545   Handle(AIS_InteractiveContext) context = doc->getContext();
546
547   bool OneOrMoreInShading = false;
548   bool OneOrMoreInWireframe = false;
549   int numSel = context->NbSelected();
550   if ( numSel )
551   {
552     for ( context->InitSelected(); context->MoreSelected(); context->NextSelected() )
553     {
554       if ( context->IsDisplayed( context->SelectedInteractive(), 1 ) )
555         OneOrMoreInShading = true;
556       if ( context->IsDisplayed( context->SelectedInteractive(), 0 ) )
557         OneOrMoreInWireframe = true;
558     }
559     myToolActions.at( ToolWireframeId )->setEnabled( OneOrMoreInShading );
560     myToolActions.at( ToolShadingId )->setEnabled( OneOrMoreInWireframe );
561     myToolActions.at( ToolColorId )->setEnabled( true );
562     myToolActions.at( ToolMaterialId )->setEnabled( true );
563     myToolActions.at( ToolTransparencyId )->setEnabled( OneOrMoreInShading );
564     myToolActions.at( ToolDeleteId )->setEnabled( true );
565   }
566   else
567   {
568     myToolActions.at( ToolWireframeId )->setEnabled( false );
569     myToolActions.at( ToolShadingId )->setEnabled( false );
570     myToolActions.at( ToolColorId )->setEnabled( false );
571     myToolActions.at( ToolMaterialId )->setEnabled( false );
572     myToolActions.at( ToolTransparencyId )->setEnabled( false );
573     myToolActions.at( ToolDeleteId )->setEnabled( false );
574   }
575 }
576
577 void ApplicationCommonWindow::onSetMaterial( int theMaterial )
578 {
579     QMdiArea* ws = getWorkspace();
580     DocumentCommon* doc = qobject_cast<MDIWindow*>( ws->activeSubWindow()->widget() )->getDocument();
581     doc->onMaterial( theMaterial );
582 }
583
584 QString ApplicationCommonWindow::getResourceDir()
585 {
586   static QString aResourceDir =
587     QString (OSD_Environment ("CSF_ResourcesDefaults").Value().ToCString());
588   if (aResourceDir.isEmpty())
589     aResourceDir = QString (OSD_Environment ("CSF_OCCTResourcePath").Value().ToCString()) + "/samples";
590
591   return aResourceDir;
592 }
593
594 void ApplicationCommonWindow::resizeEvent( QResizeEvent* e )
595 {
596     QMainWindow::resizeEvent( e );
597     statusBar()->setSizeGripEnabled( !isMaximized() );
598 }
599
600 bool ApplicationCommonWindow::isDocument()
601 {
602   return myIsDocuments;
603 }
604
605 QMenu* ApplicationCommonWindow::getFilePopup()
606 {
607   return myFilePopup;
608 }
609
610 QAction* ApplicationCommonWindow::getFileSeparator()
611 {
612   return myFileSeparator;
613 }
614
615 QToolBar* ApplicationCommonWindow::getCasCadeBar()
616 {
617   return myCasCadeBar;
618 }