Salome HOME
Merge from OCC_development_generic_2006
[modules/visu.git] / src / VVTK / VVTK_ViewModel.cxx
1 #include <qpopupmenu.h>
2 #include <qcolordialog.h>
3
4 #include "VVTK_ViewModel.h"
5 #include "VVTK_ViewWindow.h"
6
7 #include "SVTK_View.h"
8 #include "SVTK_MainWindow.h"
9 #include "SVTK_RenderWindowInteractor.h"
10
11 #include "VTKViewer_ViewModel.h"
12
13 //==========================================================
14 VVTK_Viewer
15 ::VVTK_Viewer()
16 {
17   myTrihedronSize = 105;
18 }
19
20 VVTK_Viewer
21 ::~VVTK_Viewer() 
22 {}
23
24
25 //==========================================================
26 void
27 VVTK_Viewer
28 ::setViewManager(SUIT_ViewManager* theViewManager)
29 {
30   SUIT_ViewModel::setViewManager(theViewManager);
31
32   if ( !theViewManager )
33     return;
34
35   connect(theViewManager, SIGNAL(mousePress(SUIT_ViewWindow*, QMouseEvent*)), 
36           this, SLOT(onMousePress(SUIT_ViewWindow*, QMouseEvent*)));
37   
38   connect(theViewManager, SIGNAL(mouseMove(SUIT_ViewWindow*, QMouseEvent*)), 
39           this, SLOT(onMouseMove(SUIT_ViewWindow*, QMouseEvent*)));
40   
41   connect(theViewManager, SIGNAL(mouseRelease(SUIT_ViewWindow*, QMouseEvent*)), 
42           this, SLOT(onMouseRelease(SUIT_ViewWindow*, QMouseEvent*)));
43 }
44
45
46 //==========================================================
47 SUIT_ViewWindow* 
48 VVTK_Viewer
49 ::createView( SUIT_Desktop* theDesktop )
50 {
51   TViewWindow* aViewWindow = new TViewWindow(theDesktop);
52   aViewWindow->Initialize(this);
53     
54   aViewWindow->setBackgroundColor( backgroundColor() );
55   aViewWindow->SetTrihedronSize( trihedronSize() );
56
57   return aViewWindow;
58 }
59
60
61 //==========================================================
62 void
63 VVTK_Viewer
64 ::contextMenuPopup( QPopupMenu* thePopup )
65 {
66   thePopup->insertItem( VTKViewer_Viewer::tr( "MEN_DUMP_VIEW" ), this, SLOT( onDumpView() ) );
67   thePopup->insertItem( VTKViewer_Viewer::tr( "MEN_CHANGE_BACKGROUD" ), this, SLOT( onChangeBgColor() ) );
68
69   thePopup->insertSeparator();
70
71   if(TViewWindow* aView = dynamic_cast<TViewWindow*>(myViewManager->getActiveView())){
72     if ( !aView->getMainWindow()->getToolBar()->isVisible() ){
73       thePopup->insertItem( VTKViewer_Viewer::tr( "MEN_SHOW_TOOLBAR" ), this, SLOT( onShowToolbar() ) );
74     }
75   }
76 }
77
78
79 //==========================================================
80 void 
81 VVTK_Viewer
82 ::Repaint()
83 {
84   QPtrVector<SUIT_ViewWindow> aViews = myViewManager->getViews();
85   for(int i = 0, iEnd = aViews.size(); i < iEnd; i++){
86     if(TViewWindow* aView = dynamic_cast<TViewWindow*>(aViews.at(i))){
87       aView->getMainWindow()->Repaint();
88     }
89   }
90 }
91
92
93 //==========================================================
94 bool
95 VVTK_Viewer
96 ::isVisible( const Handle(SALOME_InteractiveObject)& io )
97 {
98   QPtrVector<SUIT_ViewWindow> aViews = myViewManager->getViews();
99   for(int i = 0, iEnd = aViews.size(); i < iEnd; i++)
100     if(SUIT_ViewWindow* aViewWindow = aViews.at(i))
101       if(TViewWindow* aView = dynamic_cast<TViewWindow*>(aViewWindow))
102         if(!aView->getView()->isVisible( io ))
103           return false;
104
105   return true;
106 }
107
108
109 //==========================================================
110 void
111 VVTK_Viewer
112 ::onMousePress(SUIT_ViewWindow* vw, QMouseEvent* event)
113 {}
114
115 void 
116 VVTK_Viewer
117 ::onMouseMove(SUIT_ViewWindow* vw, QMouseEvent* event)
118 {}
119
120 void 
121 VVTK_Viewer
122 ::onMouseRelease(SUIT_ViewWindow* vw, QMouseEvent* event)
123 {}
124
125
126 //==========================================================
127 QColor
128 VVTK_Viewer
129 ::backgroundColor() const
130 {
131   return myBgColor;
132 }
133
134 void
135 VVTK_Viewer
136 ::setBackgroundColor( const QColor& theColor )
137 {
138   if ( !theColor.isValid() )
139     return;
140
141   QPtrVector<SUIT_ViewWindow> aViews = myViewManager->getViews();
142   for(int i = 0, iEnd = aViews.size(); i < iEnd; i++){
143     if(SUIT_ViewWindow* aViewWindow = aViews.at(i)){
144       if(TViewWindow* aView = dynamic_cast<TViewWindow*>(aViewWindow)){
145         aView->setBackgroundColor(theColor);
146       }
147     }
148   }
149
150   myBgColor = theColor;
151 }
152
153 //==========================================================
154 int
155 VVTK_Viewer
156 ::trihedronSize() const
157 {
158   return myTrihedronSize;
159 }
160
161 void 
162 VVTK_Viewer
163 ::setTrihedronSize( const int theSize )
164 {
165   myTrihedronSize = theSize;
166   if(SUIT_ViewManager* aViewManager = getViewManager()){
167     QPtrVector<SUIT_ViewWindow> aViews = aViewManager->getViews();
168     for ( int i = 0; i < aViews.count(); i++ ){
169       if(TViewWindow* aView = dynamic_cast<TViewWindow*>(aViews.at( i ))){
170         aView->getMainWindow()->SetTrihedronSize( theSize );
171       }
172     }
173   }
174 }
175
176 //==========================================================
177 void 
178 VVTK_Viewer
179 ::onDumpView()
180 {
181   if(SUIT_ViewWindow* aView = myViewManager->getActiveView())
182     aView->onDumpView();
183 }
184
185 //==========================================================
186 void
187 VVTK_Viewer
188 ::onChangeBgColor()
189 {
190   if(SUIT_ViewWindow* aView = myViewManager->getActiveView()){
191     QColor aColor = QColorDialog::getColor( backgroundColor(), aView);
192     setBackgroundColor(aColor);
193   }
194 }
195
196 //==========================================================
197 void
198 VVTK_Viewer
199 ::onShowToolbar() 
200 {
201   QPtrVector<SUIT_ViewWindow> aViews = myViewManager->getViews();
202   for(int i = 0, iEnd = aViews.size(); i < iEnd; i++){
203     if(TViewWindow* aView = dynamic_cast<TViewWindow*>(aViews.at(i))){
204       aView->getMainWindow()->getToolBar()->show();
205     }
206   }
207 }
208