Salome HOME
b762a6a5e0e7119cfa13d965f0828cee2b0ca461
[modules/gui.git] / src / VTKViewer / VTKViewer_ViewModel.cxx
1 #include "VTKViewer_ViewModel.h"
2 #include "VTKViewer_ViewWindow.h"
3 #include "VTKViewer_ViewManager.h"
4 #include "VTKViewer_RenderWindowInteractor.h"
5
6 #include "SUIT_ViewWindow.h"
7 #include "SUIT_Desktop.h"
8 #include "SUIT_Session.h"
9
10 #include <qpainter.h>
11 #include <qapplication.h>
12 #include <qcolordialog.h>
13 #include <qpalette.h>
14 #include <qpopupmenu.h>
15
16 /*!Constructor.Sets background color to black.*/
17 VTKViewer_Viewer::VTKViewer_Viewer()
18 : SUIT_ViewModel(),
19 myBgColor( Qt::black )
20 {
21 }
22
23 /*!Destructor.*/
24 VTKViewer_Viewer::~VTKViewer_Viewer() 
25 {
26 }
27
28 /*!Gets background color.*/
29 QColor VTKViewer_Viewer::backgroundColor() const
30 {
31   return myBgColor;
32 }
33
34 /*!Sets background color.*/
35 void VTKViewer_Viewer::setBackgroundColor( const QColor& c )
36 {
37   if ( c.isValid() )
38     myBgColor = c;
39 }
40
41 /*!Create new instance of VTKViewer_ViewWindow, sets background color and return pointer to it.*/
42 SUIT_ViewWindow* VTKViewer_Viewer::createView( SUIT_Desktop* theDesktop )
43 {
44   VTKViewer_ViewWindow* vw = new VTKViewer_ViewWindow( theDesktop, this );
45   vw->setBackgroundColor( myBgColor );
46   return vw;
47 }
48
49 /*!Sets view manager and connect slots.*/
50 void VTKViewer_Viewer::setViewManager(SUIT_ViewManager* theViewManager)
51 {
52   SUIT_ViewModel::setViewManager(theViewManager);
53   connect(theViewManager, SIGNAL(mousePress(SUIT_ViewWindow*, QMouseEvent*)), 
54           this, SLOT(onMousePress(SUIT_ViewWindow*, QMouseEvent*)));
55
56   connect(theViewManager, SIGNAL(mouseMove(SUIT_ViewWindow*, QMouseEvent*)), 
57           this, SLOT(onMouseMove(SUIT_ViewWindow*, QMouseEvent*)));
58
59   connect(theViewManager, SIGNAL(mouseRelease(SUIT_ViewWindow*, QMouseEvent*)), 
60           this, SLOT(onMouseRelease(SUIT_ViewWindow*, QMouseEvent*)));
61 }
62
63 /*!Insert context into popup menu.*/
64 void VTKViewer_Viewer::contextMenuPopup(QPopupMenu* thePopup)
65 {
66   thePopup->insertItem( tr( "MEN_DUMP_VIEW" ), this, SLOT( onDumpView() ) );
67   thePopup->insertItem( tr( "MEN_CHANGE_BACKGROUD" ), this, SLOT( onChangeBgColor() ) );
68
69   thePopup->insertSeparator();
70
71   VTKViewer_ViewWindow* aView = (VTKViewer_ViewWindow*)(myViewManager->getActiveView());
72   if ( aView && !aView->getToolBar()->isVisible() )
73     thePopup->insertItem( tr( "MEN_SHOW_TOOLBAR" ), this, SLOT( onShowToolbar() ) );
74 }
75
76 /*!On mouse press event.*/
77 void VTKViewer_Viewer::onMousePress(SUIT_ViewWindow* vw, QMouseEvent* event)
78 {
79   VTKViewer_RenderWindowInteractor* rwi = 0;
80   if ( vw && vw->inherits( "VTKViewer_ViewWindow" ) )
81     rwi = ((VTKViewer_ViewWindow*)vw)->getRWInteractor();
82   if ( !rwi )
83     return;
84
85   switch(event->button()) {
86   case LeftButton:
87     rwi->LeftButtonPressed(event) ;
88     break ;
89   case MidButton:
90     rwi->MiddleButtonPressed(event) ;
91     break ;
92   case RightButton:
93     rwi->RightButtonPressed(event) ;
94     break;
95   default:
96     break ;
97   }
98 }
99
100 /*!On mouse move event.*/
101 void VTKViewer_Viewer::onMouseMove(SUIT_ViewWindow* vw, QMouseEvent* event)
102 {
103   VTKViewer_RenderWindowInteractor* rwi = 0;
104   if ( vw && vw->inherits( "VTKViewer_ViewWindow" ) )
105     rwi = ((VTKViewer_ViewWindow*)vw)->getRWInteractor();
106   if ( rwi )
107     rwi->MouseMove( event );
108 }
109
110 /*!On mouse release event.*/
111 void VTKViewer_Viewer::onMouseRelease(SUIT_ViewWindow* vw, QMouseEvent* event)
112 {
113   VTKViewer_RenderWindowInteractor* rwi = 0;
114   if ( vw && vw->inherits( "VTKViewer_ViewWindow" ) )
115     rwi = ((VTKViewer_ViewWindow*)vw)->getRWInteractor();
116   if ( !rwi )
117     return;
118
119   switch(event->button()) {
120   case LeftButton:
121     rwi->LeftButtonReleased(event) ;
122     break ;
123   case MidButton:
124     rwi->MiddleButtonReleased(event) ;
125     break ;
126   case RightButton:
127     rwi->RightButtonReleased(event) ;
128     break;
129   default:
130     break ;
131   }
132 }
133
134 /*!Sets flag to enable selection \a isEnable.*/
135 void VTKViewer_Viewer::enableSelection(bool isEnabled)
136 {
137   mySelectionEnabled = isEnabled;
138   //!! To be done for view windows
139 }
140
141 /*!Sets flag to multi selection enable \a isEnable.*/
142 void VTKViewer_Viewer::enableMultiselection(bool isEnable)
143 {
144   myMultiSelectionEnabled = isEnable;
145   //!! To be done for view windows
146 }
147
148 /*!On dump view event.*/
149 void VTKViewer_Viewer::onDumpView()
150 {
151   VTKViewer_ViewWindow* aView = (VTKViewer_ViewWindow*)(myViewManager->getActiveView());
152   if ( aView )
153     aView->onDumpView();
154 }
155
156 /*!On change back ground color event.*/
157 void VTKViewer_Viewer::onChangeBgColor()
158 {
159   VTKViewer_ViewWindow* aView = (VTKViewer_ViewWindow*)(myViewManager->getActiveView());
160   if ( !aView )
161     return;
162
163   QColor aColor = QColorDialog::getColor( aView->backgroundColor(), aView);
164   if ( aColor.isValid() )
165     aView->setBackgroundColor(aColor);
166 }
167
168 /*!On show tool bar event.*/
169 void VTKViewer_Viewer::onShowToolbar() {
170   VTKViewer_ViewWindow* aView = (VTKViewer_ViewWindow*)(myViewManager->getActiveView());
171   if ( aView )
172     aView->getToolBar()->show();    
173 }