Salome HOME
Porting to Mandrake 10.1 and new products:
[modules/kernel.git] / src / SALOMEGUI / QAD_ViewFrame.cxx
1 //  SALOME SALOMEGUI : implementation of desktop and GUI kernel
2 //
3 //  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 //  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
5 // 
6 //  This library is free software; you can redistribute it and/or 
7 //  modify it under the terms of the GNU Lesser General Public 
8 //  License as published by the Free Software Foundation; either 
9 //  version 2.1 of the License. 
10 // 
11 //  This library is distributed in the hope that it will be useful, 
12 //  but WITHOUT ANY WARRANTY; without even the implied warranty of 
13 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
14 //  Lesser General Public License for more details. 
15 // 
16 //  You should have received a copy of the GNU Lesser General Public 
17 //  License along with this library; if not, write to the Free Software 
18 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
19 // 
20 //  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
21 //
22 //
23 //
24 //  File   : QAD_ViewFrame.cxx
25 //  Author : Nicolas REJNERI
26 //  Module : SALOME
27 //  $Header$
28
29 #include "QAD.h"
30 #include "QAD_ViewFrame.h"
31 #include "QAD_Application.h"
32 #include "QAD_Desktop.h"
33 #include "QAD_FileDlg.h"
34 #include "QAD_MessageBox.h"
35 #include "QAD_Tools.h"
36 #include <qapplication.h>
37 #include <qimage.h>
38 #include "utilities.h"
39
40 using namespace std;
41
42 /*!
43     Constructor
44 */
45 QAD_ViewFrame::QAD_ViewFrame(QWidget* parent, const QString& title) 
46   : QMainWindow (parent, title, 0)
47 {
48 }
49
50 /*!
51     Constructor
52 */
53 QAD_ViewFrame::QAD_ViewFrame( QWidget* parent ) 
54   : QMainWindow (parent, "",0)
55 {
56 }
57
58 /*!
59     Destructor
60 */
61 QAD_ViewFrame::~QAD_ViewFrame()
62 {
63   cleanup();
64 }
65
66 /*!
67     Cleanup viewframe 
68 */
69 void QAD_ViewFrame::cleanup()
70 {
71
72
73 /*
74    Dumps 3d-Viewer contents into image file
75    File format is defined by file's extension; supported formats : PNG, BMP, GIF, JPG
76 */
77 void QAD_ViewFrame::onViewDump()
78 {
79   if (!getViewWidget())
80     return;
81   QApplication::setOverrideCursor( Qt::waitCursor );
82   QPixmap px = QPixmap::grabWindow(getViewWidget()->winId());
83   QApplication::restoreOverrideCursor();
84   
85   QString fileName = QAD_FileDlg::getFileName(QAD_Application::getDesktop(),
86                                               QString::null,
87                                               tr("OCC_IMAGE_FILES"),
88                                               tr("INF_APP_DUMP_VIEW"),
89                                               false);
90   if (!fileName.isNull()) {
91     QApplication::setOverrideCursor( Qt::waitCursor );
92     QString fmt = QAD_Tools::getFileExtensionFromPath(fileName).upper();
93     if (fmt.isEmpty())
94       fmt = QString("BMP"); // default format
95     if (fmt == "JPG")
96       fmt = "JPEG";
97     bool bOk = px.save(fileName, fmt.latin1());
98     QApplication::restoreOverrideCursor();
99     if (!bOk) {
100       QAD_MessageBox::error1(QAD_Application::getDesktop(),
101                              tr("ERR_ERROR"),
102                              tr("ERR_DOC_CANT_SAVE_FILE"), 
103                              tr("BUT_OK"));
104     }
105   }
106 }
107
108 #define DUMP_EVENT QEvent::User + 123
109 /*!
110    This method is used to dump the viewer contents to the image file
111    from the context popup menu (uses event mechanizm to assure redrawing
112    the viewer contents before dumping by sending custom event)
113 */
114 void QAD_ViewFrame::onProcessViewDump() 
115 {
116   qApp->postEvent( this, new QPaintEvent( QRect( 0, 0, width(), height() ), TRUE ) );
117   qApp->postEvent( this, new QCustomEvent( DUMP_EVENT ) );
118 }
119
120 /*!
121   Processes the custom event sent by onProcessViewDump() method to
122   call onViewDump() slot: dumping the view contents to the image file
123   (see desription for onProcessViewDump() method above)
124 */
125 bool QAD_ViewFrame::event ( QEvent* e )
126 {
127   if ( e->type() == DUMP_EVENT ) {
128     onViewDump();
129     return TRUE;
130   }
131   return QMainWindow::event( e );
132 }