0031037: Foundation Classes - add class Message_PrinterSystemLog for printing message...
[occt.git] / samples / qt / Common / src / MDIWindow.cxx
1 #include "MDIWindow.h"
2
3 #include "View.h"
4 #include "DocumentCommon.h"
5 #include "ApplicationCommon.h"
6
7 #include <Standard_WarningsDisable.hxx>
8 #include <QFrame>
9 #include <QToolBar>
10 #include <QFileDialog>
11 #include <QMessageBox>
12 #include <QApplication>
13 #include <QDir>
14 #include <QFile>
15 #include <QFileInfo>
16 #include <QMainWindow> 
17 #include <QVBoxLayout>
18 #include <Standard_WarningsRestore.hxx>
19
20 MDIWindow::MDIWindow(View* aView,
21                      DocumentCommon* aDocument, 
22                      QWidget* parent, 
23                      Qt::WindowFlags wflags )
24 : QMainWindow( parent, wflags )
25 {
26   myView = aView;
27   myDocument = aDocument;
28 }
29
30 MDIWindow::MDIWindow( DocumentCommon* aDocument, QWidget* parent, Qt::WindowFlags wflags)
31 : QMainWindow( parent, wflags )
32 {
33   QFrame *vb = new QFrame( this );
34
35   QVBoxLayout *layout = new QVBoxLayout( vb );
36   layout->setMargin( 0 );
37
38   vb->setFrameStyle( QFrame::StyledPanel | QFrame::Sunken );
39
40   setCentralWidget( vb );
41
42   myDocument = aDocument;
43   myView = new View (myDocument->getContext(), vb);
44   layout->addWidget (myView);
45
46   connect( myView, SIGNAL( selectionChanged() ),
47            this,   SIGNAL( selectionChanged() ) );
48
49   createViewActions();
50   createRaytraceActions();
51
52   resize( sizeHint() );
53
54   setFocusPolicy( Qt::StrongFocus );
55 }
56
57 MDIWindow::~MDIWindow()
58 {
59 }
60
61 DocumentCommon* MDIWindow::getDocument()
62 {
63   return myDocument;
64 }
65
66 void MDIWindow::closeEvent(QCloseEvent* )
67 {
68   emit sendCloseView(this);
69 }
70
71 void MDIWindow::fitAll()
72 {
73   myView->fitAll();
74 }
75
76 void MDIWindow::createViewActions()
77 {
78   // populate a tool bar with some actions
79   QToolBar* aToolBar = addToolBar( tr( "View Operations" ) );
80   
81   QList<QAction*>* aList = myView->getViewActions();
82   aToolBar->addActions( *aList );
83
84   aToolBar->toggleViewAction()->setVisible(false);
85   aList->at(View::ViewHlrOffId)->setChecked( true );
86 }
87
88 void MDIWindow::createRaytraceActions()
89 {
90   // populate a tool bar with some actions
91   QToolBar* aToolBar = addToolBar( tr( "Ray-tracing Options" ) );
92   
93   QList<QAction*>* aList = myView->getRaytraceActions();
94   aToolBar->addActions( *aList );
95
96   aToolBar->toggleViewAction()->setVisible (true);
97   aList->at (View::ToolRaytracingId)->setChecked (false);
98   aList->at (View::ToolShadowsId)->setChecked (true);
99   aList->at (View::ToolReflectionsId)->setChecked (false);
100   aList->at (View::ToolAntialiasingId)->setChecked (false);
101 }
102
103 void MDIWindow::onWindowActivated ()
104 {
105   getDocument()->getApplication()->onSelectionChanged();
106 }
107
108 void MDIWindow::dump()
109 {
110   QString filter = "Images Files (*.bmp *.ppm *.png *.jpg *.tiff *.tga *.gif *.exr)";
111   QFileDialog fd ( 0 );
112   fd.setModal( true );
113   fd.setNameFilter ( filter );
114   fd.setWindowTitle( QObject::tr("INF_APP_EXPORT") );
115   fd.setFileMode( QFileDialog::AnyFile );
116   int ret = fd.exec(); 
117
118   /* update the desktop after the dialog is closed */
119   qApp->processEvents();
120
121   QStringList fileNames;
122   fileNames = fd.selectedFiles();
123
124   QString file ( (ret == QDialog::Accepted && !fileNames.isEmpty() )? fileNames[0] : QString::null);
125   if ( !file.isNull() )
126   {
127     QApplication::setOverrideCursor( Qt::WaitCursor );
128     if ( !QFileInfo( file ).completeSuffix().length() )
129       file += QString( ".bmp" );
130
131     const TCollection_AsciiString anUtf8Path (file.toUtf8().data());
132
133     bool res = myView->dump( anUtf8Path.ToCString() );
134     QApplication::restoreOverrideCursor();                
135     if ( !res )
136     {
137       QWidgetList list = qApp->allWidgets();
138       QWidget* mainWidget = NULL;
139       for( int i = 0; i < list.size(); ++i )
140       {
141         if( qobject_cast<ApplicationCommonWindow*>( list.at( i ) ) )
142         mainWidget = qobject_cast<ApplicationCommonWindow*>( list.at( i ) );
143       }
144
145       QMessageBox::information ( mainWidget, QObject::tr("TIT_ERROR"), QObject::tr("INF_ERROR"), QObject::tr("BTN_OK"),
146                                  QString::null, QString::null, 0, 0 );
147       qApp->processEvents();
148     }
149   }
150 }
151
152 QSize MDIWindow::sizeHint() const
153 {
154   return QSize( 450, 300 );
155 }