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