Salome HOME
a0e154a810081dc0e782f0e2a8affe82965c0165
[modules/gui.git] / src / SUIT / SUIT_ViewWindow.cxx
1 // Copyright (C) 2005  OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
2 // 
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either 
6 // version 2.1 of the License.
7 // 
8 // This library is distributed in the hope that it will be useful 
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of 
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
11 // Lesser General Public License for more details.
12 //
13 // You should have received a copy of the GNU Lesser General Public  
14 // License along with this library; if not, write to the Free Software 
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
16 //
17 // See http://www.salome-platform.org/
18 //
19 // SUIT_ViewWindow.cxx: implementation of the SUIT_ViewWindow class.
20 //
21
22 #include "SUIT_ViewWindow.h"
23 #include "SUIT_Desktop.h"
24 #include "SUIT_Application.h"
25 #include "SUIT_Study.h"
26 #include "SUIT_ViewManager.h"
27 #include "SUIT_Tools.h"
28 #include "SUIT_MessageBox.h"
29 #include <qhbox.h>
30 #include <qpopupmenu.h>
31 #include <qapplication.h>
32 #include <qimage.h>
33
34 /*!\class SUIT_ViewWindow
35  * Class provide view window.
36  */
37
38 /*! Dump view custom event*/
39 const int DUMP_EVENT = QEvent::User + 123;
40
41 /*! Constructor.*/
42 SUIT_ViewWindow::SUIT_ViewWindow(SUIT_Desktop* theDesktop)
43 : QMainWindow( theDesktop, "SUIT_ViewWindow", Qt::WDestructiveClose )
44 {
45   myDesktop = theDesktop;
46
47   if ( myDesktop->icon() )
48     setIcon( *myDesktop->icon() );
49 }
50
51 /*! Destructor.*/
52 SUIT_ViewWindow::~SUIT_ViewWindow()
53 {
54 }
55
56 /*!
57   Sets new view manager for window
58   \param theManager - new view manager
59 */
60 void SUIT_ViewWindow::setViewManager( SUIT_ViewManager* theManager )
61 {
62   myManager = theManager;
63 }
64
65 /*!
66   \return view manager of window
67 */
68 SUIT_ViewManager* SUIT_ViewWindow::getViewManager() const
69 {
70   return myManager;
71 }
72
73 /*!
74   \return QImage, containing all scene rendering in window
75 */
76 QImage SUIT_ViewWindow::dumpView()
77 {
78   return QImage();
79 }
80
81 /*!
82   Saves scene rendering in window to file
83   \param fileName - name of file
84   \param format - string contains name of format (for example, "BMP"(default) or "JPEG", "JPG")
85 */
86 bool SUIT_ViewWindow::dumpViewToFormat( const QString& fileName, const QString& format )
87 {
88   QImage img = dumpView();
89   if( img.isNull() )
90     return false; 
91
92   QString fmt = format;
93   if( fmt.isEmpty() )
94     fmt = QString( "BMP" ); // default format
95   else if( fmt == "JPG" )
96     fmt = "JPEG";
97
98   QApplication::setOverrideCursor( Qt::waitCursor );
99   bool res = img.save( fileName, fmt.latin1() );
100   QApplication::restoreOverrideCursor();
101   return res;
102 }
103
104 /*! Close event \a theEvent.
105 */
106 void SUIT_ViewWindow::closeEvent(QCloseEvent* theEvent)
107 {
108   QMainWindow::closeEvent( theEvent );
109   emit closing( this );
110 }
111
112 /*! Context menu requested for event \a e.
113 */
114 void SUIT_ViewWindow::contextMenuEvent ( QContextMenuEvent * e )
115 {
116   if ( e->reason() != QContextMenuEvent::Mouse )
117     emit contextMenuRequested( e );
118 }
119
120 /*! Post events on dump view.
121 */
122 void SUIT_ViewWindow::onDumpView()
123 {
124   qApp->postEvent( this, new QPaintEvent( QRect( 0, 0, width(), height() ), TRUE ) );
125   qApp->postEvent( this, new QCustomEvent( DUMP_EVENT ) );
126 }
127
128 /*!
129   \return filters for image files
130 */
131 QString SUIT_ViewWindow::filter() const
132 {
133   return tr( "TLT_IMAGE_FILES" );
134 }
135
136 /*! Reaction view window on event \a e.
137 */
138 bool SUIT_ViewWindow::event( QEvent* e )
139 {
140   if ( e->type() == DUMP_EVENT )
141   {
142     bool bOk = false;
143     if ( myManager && myManager->study() && myManager->study()->application() )
144     {
145       // get file name
146       SUIT_Application* app = myManager->study()->application();
147       QString fileName = app->getFileName( false, QString::null, filter(), tr( "TLT_DUMP_VIEW" ), 0 );
148       if( !fileName.isEmpty() )
149       {
150         QString fmt = SUIT_Tools::extension( fileName ).upper();
151         bOk = dumpViewToFormat( fileName, fmt );
152       }
153       else
154       {
155         bOk = true; // cancelled
156       }
157     }
158     if ( !bOk ) {
159       SUIT_MessageBox::error1( this, tr( "ERROR" ), tr( "ERR_CANT_DUMP_VIEW" ), tr( "BUT_OK" ) );
160     }
161     return TRUE;
162   }
163   return QMainWindow::event( e );
164 }
165
166 /*! Called by SUIT_Accel::onActivated() when a key accelerator was activated and this window was active
167 */
168 bool SUIT_ViewWindow::onAccelAction( int _action )
169 {
170   return action( _action );
171 }
172
173 /*! action  handle standard action (zoom, pan) or custom action.  to be redefined in successors.
174 */
175 bool SUIT_ViewWindow::action( const int  )
176 {
177   return true;
178 }
179
180 /*!
181   \return string containing visual parameters of window
182 */
183 QString   SUIT_ViewWindow::getVisualParameters()
184 {
185   return "empty";
186 }
187
188 /*!
189   Sets visual parameters of window by its string representation
190   \param parameters - string with visual parameters
191 */ 
192 void SUIT_ViewWindow::setVisualParameters( const QString& parameters )
193 {
194 }