Salome HOME
084a200c64c4e3311e0b08434899eae58199e386
[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 //****************************************************************
17 VTKViewer_Viewer::VTKViewer_Viewer()
18 : SUIT_ViewModel(),
19 myBgColor( Qt::black )
20 {
21 }
22
23 //****************************************************************
24 VTKViewer_Viewer::~VTKViewer_Viewer() 
25 {
26 }
27
28 QColor VTKViewer_Viewer::backgroundColor() const
29 {
30   return myBgColor;
31 }
32
33 void VTKViewer_Viewer::setBackgroundColor( const QColor& c )
34 {
35   if ( c.isValid() )
36     myBgColor = c;
37 }
38
39 //****************************************************************
40 SUIT_ViewWindow* VTKViewer_Viewer::createView( SUIT_Desktop* theDesktop )
41 {
42   VTKViewer_ViewWindow* vw = new VTKViewer_ViewWindow( theDesktop, this );
43   vw->setBackgroundColor( myBgColor );
44   return vw;
45 }
46
47 //*********************************************************************
48 void VTKViewer_Viewer::setViewManager(SUIT_ViewManager* theViewManager)
49 {
50   SUIT_ViewModel::setViewManager(theViewManager);
51   connect(theViewManager, SIGNAL(mousePress(SUIT_ViewWindow*, QMouseEvent*)), 
52           this, SLOT(onMousePress(SUIT_ViewWindow*, QMouseEvent*)));
53
54   connect(theViewManager, SIGNAL(mouseMove(SUIT_ViewWindow*, QMouseEvent*)), 
55           this, SLOT(onMouseMove(SUIT_ViewWindow*, QMouseEvent*)));
56
57   connect(theViewManager, SIGNAL(mouseRelease(SUIT_ViewWindow*, QMouseEvent*)), 
58           this, SLOT(onMouseRelease(SUIT_ViewWindow*, QMouseEvent*)));
59 }
60
61 //*********************************************************************
62 void VTKViewer_Viewer::contextMenuPopup(QPopupMenu* thePopup)
63 {
64   thePopup->insertItem( tr( "MEN_DUMP_VIEW" ), this, SLOT( onDumpView() ) );
65   thePopup->insertItem( tr( "MEN_CHANGE_BACKGROUD" ), this, SLOT( onChangeBgColor() ) );
66
67   thePopup->insertSeparator();
68
69   VTKViewer_ViewWindow* aView = (VTKViewer_ViewWindow*)(myViewManager->getActiveView());
70   if ( aView && !aView->getToolBar()->isVisible() )
71     thePopup->insertItem( tr( "MEN_SHOW_TOOLBAR" ), this, SLOT( onShowToolbar() ) );
72 }
73
74 //*********************************************************************
75 void VTKViewer_Viewer::onMousePress(SUIT_ViewWindow* vw, QMouseEvent* event)
76 {
77   VTKViewer_RenderWindowInteractor* rwi = 0;
78   if ( vw && vw->inherits( "VTKViewer_ViewWindow" ) )
79     rwi = ((VTKViewer_ViewWindow*)vw)->getRWInteractor();
80   if ( !rwi )
81     return;
82
83   switch(event->button()) {
84   case LeftButton:
85     rwi->LeftButtonPressed(event) ;
86     break ;
87   case MidButton:
88     rwi->MiddleButtonPressed(event) ;
89     break ;
90   case RightButton:
91     rwi->RightButtonPressed(event) ;
92     break;
93   default:
94     break ;
95   }
96 }
97
98 //*********************************************************************
99 void VTKViewer_Viewer::onMouseMove(SUIT_ViewWindow* vw, QMouseEvent* event)
100 {
101   VTKViewer_RenderWindowInteractor* rwi = 0;
102   if ( vw && vw->inherits( "VTKViewer_ViewWindow" ) )
103     rwi = ((VTKViewer_ViewWindow*)vw)->getRWInteractor();
104   if ( rwi )
105     rwi->MouseMove( event );
106 }
107
108 //*********************************************************************
109 void VTKViewer_Viewer::onMouseRelease(SUIT_ViewWindow* vw, QMouseEvent* event)
110 {
111   VTKViewer_RenderWindowInteractor* rwi = 0;
112   if ( vw && vw->inherits( "VTKViewer_ViewWindow" ) )
113     rwi = ((VTKViewer_ViewWindow*)vw)->getRWInteractor();
114   if ( !rwi )
115     return;
116
117   switch(event->button()) {
118   case LeftButton:
119     rwi->LeftButtonReleased(event) ;
120     break ;
121   case MidButton:
122     rwi->MiddleButtonReleased(event) ;
123     break ;
124   case RightButton:
125     rwi->RightButtonReleased(event) ;
126     break;
127   default:
128     break ;
129   }
130 }
131
132 //*********************************************************************
133 void VTKViewer_Viewer::enableSelection(bool isEnabled)
134 {
135   mySelectionEnabled = isEnabled;
136   //!! To be done for view windows
137 }
138
139 //*********************************************************************
140 void VTKViewer_Viewer::enableMultiselection(bool isEnable)
141 {
142   myMultiSelectionEnabled = isEnable;
143   //!! To be done for view windows
144 }
145
146 void VTKViewer_Viewer::onDumpView()
147 {
148   VTKViewer_ViewWindow* aView = (VTKViewer_ViewWindow*)(myViewManager->getActiveView());
149   if ( aView )
150     aView->onDumpView();
151 }
152
153 //*********************************************************************
154 void VTKViewer_Viewer::onChangeBgColor()
155 {
156   VTKViewer_ViewWindow* aView = (VTKViewer_ViewWindow*)(myViewManager->getActiveView());
157   if ( !aView )
158     return;
159
160   QColor aColor = QColorDialog::getColor( aView->backgroundColor(), aView);
161   if ( aColor.isValid() )
162     aView->setBackgroundColor(aColor);
163 }
164
165 //*********************************************************************
166 void VTKViewer_Viewer::onShowToolbar() {
167   VTKViewer_ViewWindow* aView = (VTKViewer_ViewWindow*)(myViewManager->getActiveView());
168   if ( aView )
169     aView->getToolBar()->show();    
170 }