Salome HOME
Merge branch 'master' into Dev_1.1.0
[modules/shaper.git] / src / XGUI / XGUI_ViewerProxy.cpp
1 // Copyright (C) 2014-20xx CEA/DEN, EDF R&D -->
2
3 #include "XGUI_ViewerProxy.h"
4 #include "XGUI_Workshop.h"
5 #include "XGUI_SalomeConnector.h"
6 #include "XGUI_Displayer.h"
7
8 #include <AppElements_MainWindow.h>
9 #include <AppElements_ViewPort.h>
10 #include <AppElements_ViewWindow.h>
11 #include <AppElements_Viewer.h>
12
13 #include <QEvent>
14
15 XGUI_ViewerProxy::XGUI_ViewerProxy(XGUI_Workshop* theParent)
16     : ModuleBase_IViewer(theParent),
17       myWorkshop(theParent)
18 {
19 }
20
21 Handle(AIS_InteractiveContext) XGUI_ViewerProxy::AISContext() const
22 {
23   if (myWorkshop->isSalomeMode()) {
24     return myWorkshop->salomeConnector()->viewer()->AISContext();
25   } else {
26     return myWorkshop->mainWindow()->viewer()->AISContext();
27   }
28 }
29
30 Handle(V3d_Viewer) XGUI_ViewerProxy::v3dViewer() const
31 {
32   if (myWorkshop->isSalomeMode()) {
33     return myWorkshop->salomeConnector()->viewer()->v3dViewer();
34   } else {
35     return myWorkshop->mainWindow()->viewer()->v3dViewer();
36   }
37 }
38
39 Handle(V3d_View) XGUI_ViewerProxy::activeView() const
40 {
41   if (myWorkshop->isSalomeMode()) {
42     return myWorkshop->salomeConnector()->viewer()->activeView();
43   } else {
44     AppElements_Viewer* aViewer = myWorkshop->mainWindow()->viewer();
45     return (aViewer->activeViewWindow()) ? aViewer->activeViewWindow()->viewPortApp()->getView() :
46     Handle(V3d_View)();
47   }
48 }
49
50 void XGUI_ViewerProxy::setViewProjection(double theX, double theY, double theZ)
51 {
52   Handle(V3d_View) aView3d = activeView();
53   if (!aView3d.IsNull()) {
54     aView3d->SetProj(theX, theY, theZ);
55     aView3d->FitAll(0.01, true);
56     aView3d->SetZSize(0.);
57   }
58 }
59
60 void XGUI_ViewerProxy::fitAll()
61 {
62   if (myWorkshop->isSalomeMode()) {
63     myWorkshop->salomeConnector()->viewer()->fitAll();
64   } else {
65     AppElements_Viewer* aViewer = myWorkshop->mainWindow()->viewer();
66     if (aViewer->activeViewWindow())
67       aViewer->activeViewWindow()->viewPortApp()->fitAll();
68   }
69 }
70
71 void XGUI_ViewerProxy::connectToViewer()
72 {
73   if (myWorkshop->isSalomeMode()) {
74     ModuleBase_IViewer* aViewer = myWorkshop->salomeConnector()->viewer();
75
76     connect(aViewer, SIGNAL(lastViewClosed()), this, SIGNAL(lastViewClosed()));
77     connect(aViewer, SIGNAL(tryCloseView(ModuleBase_IViewWindow*)), 
78       this, SIGNAL(tryCloseView(ModuleBase_IViewWindow*)));
79
80     connect(aViewer, SIGNAL(deleteView(ModuleBase_IViewWindow*)), 
81       this, SIGNAL(deleteView(ModuleBase_IViewWindow*)));
82
83     connect(aViewer, SIGNAL(viewCreated(ModuleBase_IViewWindow*)), 
84       this, SLOT(onViewCreated(ModuleBase_IViewWindow*)));
85
86     connect(aViewer, SIGNAL(activated(ModuleBase_IViewWindow*)), 
87       this, SIGNAL(activated(ModuleBase_IViewWindow*)));
88
89     connect(aViewer, SIGNAL(mousePress(ModuleBase_IViewWindow*, QMouseEvent*)), 
90       this, SIGNAL(mousePress(ModuleBase_IViewWindow*, QMouseEvent*)));
91
92     connect(aViewer, SIGNAL(mouseRelease(ModuleBase_IViewWindow*, QMouseEvent*)), 
93       this, SIGNAL(mouseRelease(ModuleBase_IViewWindow*, QMouseEvent*)));
94
95     connect(aViewer, SIGNAL(mouseDoubleClick(ModuleBase_IViewWindow*, QMouseEvent*)), this,
96             SIGNAL(mouseDoubleClick(ModuleBase_IViewWindow*, QMouseEvent*)));
97
98     connect(aViewer, SIGNAL(mouseMove(ModuleBase_IViewWindow*, QMouseEvent*)), 
99       this, SIGNAL(mouseMove(ModuleBase_IViewWindow*, QMouseEvent*)));
100
101     connect(aViewer, SIGNAL(keyPress(ModuleBase_IViewWindow*, QKeyEvent*)), 
102       this, SIGNAL(keyPress(ModuleBase_IViewWindow*, QKeyEvent*)));
103
104     connect(aViewer, SIGNAL(keyRelease(ModuleBase_IViewWindow*, QKeyEvent*)), 
105       this, SIGNAL(keyRelease(ModuleBase_IViewWindow*, QKeyEvent*)));
106
107     connect(aViewer, SIGNAL(selectionChanged()), this, SIGNAL(selectionChanged()));
108     connect(aViewer, SIGNAL(contextMenuRequested(QContextMenuEvent*)), this,
109             SIGNAL(contextMenuRequested(QContextMenuEvent*)));
110   } else {
111     AppElements_Viewer* aViewer = myWorkshop->mainWindow()->viewer();
112
113     connect(aViewer, SIGNAL(lastViewClosed()), this, SIGNAL(lastViewClosed()));
114
115     connect(aViewer, SIGNAL(tryCloseView(AppElements_ViewWindow*)), 
116             this, SLOT(onTryCloseView(AppElements_ViewWindow*)));
117
118     connect(aViewer, SIGNAL(deleteView(AppElements_ViewWindow*)), 
119             this, SLOT(onDeleteView(AppElements_ViewWindow*)));
120
121     connect(aViewer, SIGNAL(viewCreated(AppElements_ViewWindow*)), 
122             this, SLOT(onViewCreated(AppElements_ViewWindow*)));
123
124     connect(aViewer, SIGNAL(activated(AppElements_ViewWindow*)), 
125             this, SLOT(onActivated(AppElements_ViewWindow*)));
126
127     connect(aViewer, SIGNAL(mousePress(AppElements_ViewWindow*, QMouseEvent*)), this,
128             SLOT(onMousePress(AppElements_ViewWindow*, QMouseEvent*)));
129
130     connect(aViewer, SIGNAL(mouseRelease(AppElements_ViewWindow*, QMouseEvent*)), this,
131             SLOT(onMouseRelease(AppElements_ViewWindow*, QMouseEvent*)));
132
133     connect(aViewer, SIGNAL(mouseDoubleClick(AppElements_ViewWindow*, QMouseEvent*)), this,
134             SLOT(onMouseDoubleClick(AppElements_ViewWindow*, QMouseEvent*)));
135
136     connect(aViewer, SIGNAL(mouseMove(AppElements_ViewWindow*, QMouseEvent*)), this,
137             SLOT(onMouseMove(AppElements_ViewWindow*, QMouseEvent*)));
138
139     connect(aViewer, SIGNAL(keyPress(AppElements_ViewWindow*, QKeyEvent*)), this,
140             SLOT(onKeyPress(AppElements_ViewWindow*, QKeyEvent*)));
141
142     connect(aViewer, SIGNAL(keyRelease(AppElements_ViewWindow*, QKeyEvent*)), this,
143             SLOT(onKeyRelease(AppElements_ViewWindow*, QKeyEvent*)));
144
145     connect(aViewer, SIGNAL(selectionChanged()), this, SIGNAL(selectionChanged()));
146     connect(aViewer, SIGNAL(contextMenuRequested(QContextMenuEvent*)), this,
147             SIGNAL(contextMenuRequested(QContextMenuEvent*)));
148   }
149 }
150
151 bool XGUI_ViewerProxy::eventFilter(QObject *theObject, QEvent *theEvent)
152 {
153   if (theEvent->type() == QEvent::Enter) {
154     emit enterViewPort();
155   }
156   else if (theEvent->type() == QEvent::Leave) {
157     emit leaveViewPort();
158   }
159   return ModuleBase_IViewer::eventFilter(theObject, theEvent);
160 }
161
162 void XGUI_ViewerProxy::onTryCloseView(AppElements_ViewWindow* theWnd)
163 {
164   emit tryCloseView(theWnd);
165 }
166
167 void XGUI_ViewerProxy::onDeleteView(AppElements_ViewWindow* theWnd)
168 {
169   emit deleteView(theWnd);
170 }
171
172 void XGUI_ViewerProxy::onViewCreated(ModuleBase_IViewWindow* theWnd)
173 {
174   theWnd->viewPort()->installEventFilter(this);
175
176   emit viewCreated(theWnd);
177 }
178
179 void XGUI_ViewerProxy::onViewCreated(AppElements_ViewWindow* theWnd)
180 {
181   theWnd->viewPort()->installEventFilter(this);
182
183   emit viewCreated(theWnd);
184 }
185
186 void XGUI_ViewerProxy::onActivated(AppElements_ViewWindow* theWnd)
187 {
188   emit activated(theWnd);
189 }
190
191 void XGUI_ViewerProxy::onMousePress(AppElements_ViewWindow* theWnd, QMouseEvent* theEvent)
192 {
193   emit mousePress(theWnd, theEvent);
194 }
195
196 void XGUI_ViewerProxy::onMouseRelease(AppElements_ViewWindow* theWnd, QMouseEvent* theEvent)
197 {
198   emit mouseRelease(theWnd, theEvent);
199 }
200
201 void XGUI_ViewerProxy::onMouseDoubleClick(AppElements_ViewWindow* theWnd, QMouseEvent* theEvent)
202 {
203   emit mouseDoubleClick(theWnd, theEvent);
204 }
205
206 void XGUI_ViewerProxy::onMouseMove(AppElements_ViewWindow* theWnd, QMouseEvent* theEvent)
207 {
208   emit mouseMove(theWnd, theEvent);
209 }
210
211 void XGUI_ViewerProxy::onKeyPress(AppElements_ViewWindow* theWnd, QKeyEvent* theEvent)
212 {
213   emit keyPress(theWnd, theEvent);
214 }
215
216 void XGUI_ViewerProxy::onKeyRelease(AppElements_ViewWindow* theWnd, QKeyEvent* theEvent)
217 {
218   emit keyRelease(theWnd, theEvent);
219 }
220
221
222
223 //***************************************
224 void XGUI_ViewerProxy::enableSelection(bool isEnabled)
225 {
226   if (myWorkshop->isSalomeMode()) {
227     myWorkshop->salomeConnector()->viewer()->enableSelection(isEnabled);
228   } else {
229     myWorkshop->mainWindow()->viewer()->setSelectionEnabled(isEnabled);
230   }
231 }
232
233 //***************************************
234 bool XGUI_ViewerProxy::isSelectionEnabled() const
235 {
236   if (myWorkshop->isSalomeMode()) {
237     return myWorkshop->salomeConnector()->viewer()->isSelectionEnabled();
238   } else {
239     return myWorkshop->mainWindow()->viewer()->isSelectionEnabled();
240   }
241 }
242
243 //***************************************
244 void XGUI_ViewerProxy::enableMultiselection(bool isEnable)
245 {
246   if (myWorkshop->isSalomeMode()) {
247     myWorkshop->salomeConnector()->viewer()->enableMultiselection(isEnable);
248   } else {
249     myWorkshop->mainWindow()->viewer()->setMultiSelectionEnabled(isEnable);
250   }
251 }
252
253 //***************************************
254 bool XGUI_ViewerProxy::isMultiSelectionEnabled() const
255 {
256   if (myWorkshop->isSalomeMode()) {
257     return myWorkshop->salomeConnector()->viewer()->isMultiSelectionEnabled();
258   } else {
259     return myWorkshop->mainWindow()->viewer()->isMultiSelectionEnabled();
260   }
261 }
262
263 //***************************************
264 void XGUI_ViewerProxy::addSelectionFilter(const Handle(SelectMgr_Filter)& theFilter)
265 {
266   myWorkshop->displayer()->addSelectionFilter(theFilter);
267 }
268
269 //***************************************
270 void XGUI_ViewerProxy::removeSelectionFilter(const Handle(SelectMgr_Filter)& theFilter)
271 {
272   myWorkshop->displayer()->removeSelectionFilter(theFilter);
273 }
274
275 //***************************************
276 void XGUI_ViewerProxy::clearSelectionFilters()
277 {
278   myWorkshop->displayer()->removeFilters();
279 }
280
281 //***************************************
282 void XGUI_ViewerProxy::update()
283 {
284   myWorkshop->displayer()->updateViewer();
285 }
286
287 //***************************************
288 bool XGUI_ViewerProxy::canDragByMouse() const
289 {
290   if (myWorkshop->isSalomeMode()) {
291     ModuleBase_IViewer* aViewer = myWorkshop->salomeConnector()->viewer();
292     return aViewer->canDragByMouse();
293   } else {
294     return true;
295   }
296 }