1 // Copyright (C) 2014-20xx CEA/DEN, EDF R&D -->
3 #include "XGUI_ViewerProxy.h"
4 #include "XGUI_Workshop.h"
5 #include "XGUI_SalomeConnector.h"
6 #include "XGUI_Displayer.h"
8 #include <AppElements_MainWindow.h>
9 #include <AppElements_ViewPort.h>
10 #include <AppElements_ViewWindow.h>
11 #include <AppElements_Viewer.h>
15 XGUI_ViewerProxy::XGUI_ViewerProxy(XGUI_Workshop* theParent)
16 : ModuleBase_IViewer(theParent),
21 Handle(AIS_InteractiveContext) XGUI_ViewerProxy::AISContext() const
23 if (myWorkshop->isSalomeMode()) {
24 return myWorkshop->salomeConnector()->viewer()->AISContext();
26 return myWorkshop->mainWindow()->viewer()->AISContext();
30 Handle(V3d_Viewer) XGUI_ViewerProxy::v3dViewer() const
32 if (myWorkshop->isSalomeMode()) {
33 return myWorkshop->salomeConnector()->viewer()->v3dViewer();
35 return myWorkshop->mainWindow()->viewer()->v3dViewer();
39 Handle(V3d_View) XGUI_ViewerProxy::activeView() const
41 if (myWorkshop->isSalomeMode()) {
42 return myWorkshop->salomeConnector()->viewer()->activeView();
44 AppElements_Viewer* aViewer = myWorkshop->mainWindow()->viewer();
45 return (aViewer->activeViewWindow()) ? aViewer->activeViewWindow()->viewPortApp()->getView() :
50 void XGUI_ViewerProxy::setViewProjection(double theX, double theY, double theZ)
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.);
60 void XGUI_ViewerProxy::fitAll()
62 if (myWorkshop->isSalomeMode()) {
63 myWorkshop->salomeConnector()->viewer()->fitAll();
65 AppElements_Viewer* aViewer = myWorkshop->mainWindow()->viewer();
66 if (aViewer->activeViewWindow())
67 aViewer->activeViewWindow()->viewPortApp()->fitAll();
71 void XGUI_ViewerProxy::connectToViewer()
73 if (myWorkshop->isSalomeMode()) {
74 ModuleBase_IViewer* aViewer = myWorkshop->salomeConnector()->viewer();
76 connect(aViewer, SIGNAL(lastViewClosed()), this, SIGNAL(lastViewClosed()));
77 connect(aViewer, SIGNAL(tryCloseView(ModuleBase_IViewWindow*)),
78 this, SIGNAL(tryCloseView(ModuleBase_IViewWindow*)));
80 connect(aViewer, SIGNAL(deleteView(ModuleBase_IViewWindow*)),
81 this, SIGNAL(deleteView(ModuleBase_IViewWindow*)));
83 connect(aViewer, SIGNAL(viewCreated(ModuleBase_IViewWindow*)),
84 this, SLOT(onViewCreated(ModuleBase_IViewWindow*)));
86 connect(aViewer, SIGNAL(activated(ModuleBase_IViewWindow*)),
87 this, SIGNAL(activated(ModuleBase_IViewWindow*)));
89 connect(aViewer, SIGNAL(mousePress(ModuleBase_IViewWindow*, QMouseEvent*)),
90 this, SIGNAL(mousePress(ModuleBase_IViewWindow*, QMouseEvent*)));
92 connect(aViewer, SIGNAL(mouseRelease(ModuleBase_IViewWindow*, QMouseEvent*)),
93 this, SIGNAL(mouseRelease(ModuleBase_IViewWindow*, QMouseEvent*)));
95 connect(aViewer, SIGNAL(mouseDoubleClick(ModuleBase_IViewWindow*, QMouseEvent*)), this,
96 SIGNAL(mouseDoubleClick(ModuleBase_IViewWindow*, QMouseEvent*)));
98 connect(aViewer, SIGNAL(mouseMove(ModuleBase_IViewWindow*, QMouseEvent*)),
99 this, SIGNAL(mouseMove(ModuleBase_IViewWindow*, QMouseEvent*)));
101 connect(aViewer, SIGNAL(keyPress(ModuleBase_IViewWindow*, QKeyEvent*)),
102 this, SIGNAL(keyPress(ModuleBase_IViewWindow*, QKeyEvent*)));
104 connect(aViewer, SIGNAL(keyRelease(ModuleBase_IViewWindow*, QKeyEvent*)),
105 this, SIGNAL(keyRelease(ModuleBase_IViewWindow*, QKeyEvent*)));
107 connect(aViewer, SIGNAL(selectionChanged()), this, SIGNAL(selectionChanged()));
108 connect(aViewer, SIGNAL(contextMenuRequested(QContextMenuEvent*)), this,
109 SIGNAL(contextMenuRequested(QContextMenuEvent*)));
111 AppElements_Viewer* aViewer = myWorkshop->mainWindow()->viewer();
113 connect(aViewer, SIGNAL(lastViewClosed()), this, SIGNAL(lastViewClosed()));
115 connect(aViewer, SIGNAL(tryCloseView(AppElements_ViewWindow*)),
116 this, SLOT(onTryCloseView(AppElements_ViewWindow*)));
118 connect(aViewer, SIGNAL(deleteView(AppElements_ViewWindow*)),
119 this, SLOT(onDeleteView(AppElements_ViewWindow*)));
121 connect(aViewer, SIGNAL(viewCreated(AppElements_ViewWindow*)),
122 this, SLOT(onViewCreated(AppElements_ViewWindow*)));
124 connect(aViewer, SIGNAL(activated(AppElements_ViewWindow*)),
125 this, SLOT(onActivated(AppElements_ViewWindow*)));
127 connect(aViewer, SIGNAL(mousePress(AppElements_ViewWindow*, QMouseEvent*)), this,
128 SLOT(onMousePress(AppElements_ViewWindow*, QMouseEvent*)));
130 connect(aViewer, SIGNAL(mouseRelease(AppElements_ViewWindow*, QMouseEvent*)), this,
131 SLOT(onMouseRelease(AppElements_ViewWindow*, QMouseEvent*)));
133 connect(aViewer, SIGNAL(mouseDoubleClick(AppElements_ViewWindow*, QMouseEvent*)), this,
134 SLOT(onMouseDoubleClick(AppElements_ViewWindow*, QMouseEvent*)));
136 connect(aViewer, SIGNAL(mouseMove(AppElements_ViewWindow*, QMouseEvent*)), this,
137 SLOT(onMouseMove(AppElements_ViewWindow*, QMouseEvent*)));
139 connect(aViewer, SIGNAL(keyPress(AppElements_ViewWindow*, QKeyEvent*)), this,
140 SLOT(onKeyPress(AppElements_ViewWindow*, QKeyEvent*)));
142 connect(aViewer, SIGNAL(keyRelease(AppElements_ViewWindow*, QKeyEvent*)), this,
143 SLOT(onKeyRelease(AppElements_ViewWindow*, QKeyEvent*)));
145 connect(aViewer, SIGNAL(selectionChanged()), this, SIGNAL(selectionChanged()));
146 connect(aViewer, SIGNAL(contextMenuRequested(QContextMenuEvent*)), this,
147 SIGNAL(contextMenuRequested(QContextMenuEvent*)));
151 bool XGUI_ViewerProxy::eventFilter(QObject *theObject, QEvent *theEvent)
153 if (theEvent->type() == QEvent::Enter) {
154 emit enterViewPort();
156 else if (theEvent->type() == QEvent::Leave) {
157 emit leaveViewPort();
159 return ModuleBase_IViewer::eventFilter(theObject, theEvent);
162 void XGUI_ViewerProxy::onTryCloseView(AppElements_ViewWindow* theWnd)
164 emit tryCloseView(theWnd);
167 void XGUI_ViewerProxy::onDeleteView(AppElements_ViewWindow* theWnd)
169 emit deleteView(theWnd);
172 void XGUI_ViewerProxy::onViewCreated(ModuleBase_IViewWindow* theWnd)
174 theWnd->viewPort()->installEventFilter(this);
176 emit viewCreated(theWnd);
179 void XGUI_ViewerProxy::onViewCreated(AppElements_ViewWindow* theWnd)
181 theWnd->viewPort()->installEventFilter(this);
183 emit viewCreated(theWnd);
186 void XGUI_ViewerProxy::onActivated(AppElements_ViewWindow* theWnd)
188 emit activated(theWnd);
191 void XGUI_ViewerProxy::onMousePress(AppElements_ViewWindow* theWnd, QMouseEvent* theEvent)
193 emit mousePress(theWnd, theEvent);
196 void XGUI_ViewerProxy::onMouseRelease(AppElements_ViewWindow* theWnd, QMouseEvent* theEvent)
198 emit mouseRelease(theWnd, theEvent);
201 void XGUI_ViewerProxy::onMouseDoubleClick(AppElements_ViewWindow* theWnd, QMouseEvent* theEvent)
203 emit mouseDoubleClick(theWnd, theEvent);
206 void XGUI_ViewerProxy::onMouseMove(AppElements_ViewWindow* theWnd, QMouseEvent* theEvent)
208 emit mouseMove(theWnd, theEvent);
211 void XGUI_ViewerProxy::onKeyPress(AppElements_ViewWindow* theWnd, QKeyEvent* theEvent)
213 emit keyPress(theWnd, theEvent);
216 void XGUI_ViewerProxy::onKeyRelease(AppElements_ViewWindow* theWnd, QKeyEvent* theEvent)
218 emit keyRelease(theWnd, theEvent);
223 //***************************************
224 void XGUI_ViewerProxy::enableSelection(bool isEnabled)
226 if (myWorkshop->isSalomeMode()) {
227 myWorkshop->salomeConnector()->viewer()->enableSelection(isEnabled);
229 myWorkshop->mainWindow()->viewer()->setSelectionEnabled(isEnabled);
233 //***************************************
234 bool XGUI_ViewerProxy::isSelectionEnabled() const
236 if (myWorkshop->isSalomeMode()) {
237 return myWorkshop->salomeConnector()->viewer()->isSelectionEnabled();
239 return myWorkshop->mainWindow()->viewer()->isSelectionEnabled();
243 //***************************************
244 void XGUI_ViewerProxy::enableMultiselection(bool isEnable)
246 if (myWorkshop->isSalomeMode()) {
247 myWorkshop->salomeConnector()->viewer()->enableMultiselection(isEnable);
249 myWorkshop->mainWindow()->viewer()->setMultiSelectionEnabled(isEnable);
253 //***************************************
254 bool XGUI_ViewerProxy::isMultiSelectionEnabled() const
256 if (myWorkshop->isSalomeMode()) {
257 return myWorkshop->salomeConnector()->viewer()->isMultiSelectionEnabled();
259 return myWorkshop->mainWindow()->viewer()->isMultiSelectionEnabled();
263 //***************************************
264 void XGUI_ViewerProxy::addSelectionFilter(const Handle(SelectMgr_Filter)& theFilter)
266 myWorkshop->displayer()->addSelectionFilter(theFilter);
269 //***************************************
270 void XGUI_ViewerProxy::removeSelectionFilter(const Handle(SelectMgr_Filter)& theFilter)
272 myWorkshop->displayer()->removeSelectionFilter(theFilter);
275 //***************************************
276 void XGUI_ViewerProxy::clearSelectionFilters()
278 myWorkshop->displayer()->removeFilters();
281 //***************************************
282 void XGUI_ViewerProxy::update()
284 myWorkshop->displayer()->updateViewer();
287 //***************************************
288 bool XGUI_ViewerProxy::canDragByMouse() const
290 if (myWorkshop->isSalomeMode()) {
291 ModuleBase_IViewer* aViewer = myWorkshop->salomeConnector()->viewer();
292 return aViewer->canDragByMouse();