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()->viewPort()->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()->viewPort()->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, SIGNAL(viewCreated(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 AppElements_Viewer* aViewer = myWorkshop->mainWindow()->viewer();
154 bool isViewPort = theObject == aViewer->activeViewWindow()->viewPort();
157 if (theEvent->type() == QEvent::Enter) {
158 emit enterViewPort();
160 else if (theEvent->type() == QEvent::Leave) {
161 emit leaveViewPort();
164 return ModuleBase_IViewer::eventFilter(theObject, theEvent);
167 void XGUI_ViewerProxy::onTryCloseView(AppElements_ViewWindow* theWnd)
169 emit tryCloseView(theWnd);
172 void XGUI_ViewerProxy::onDeleteView(AppElements_ViewWindow* theWnd)
174 emit deleteView(theWnd);
177 void XGUI_ViewerProxy::onViewCreated(AppElements_ViewWindow* theWnd)
179 theWnd->viewPort()->installEventFilter(this);
181 emit viewCreated(theWnd);
184 void XGUI_ViewerProxy::onActivated(AppElements_ViewWindow* theWnd)
186 emit activated(theWnd);
189 void XGUI_ViewerProxy::onMousePress(AppElements_ViewWindow* theWnd, QMouseEvent* theEvent)
191 emit mousePress(theWnd, theEvent);
194 void XGUI_ViewerProxy::onMouseRelease(AppElements_ViewWindow* theWnd, QMouseEvent* theEvent)
196 emit mouseRelease(theWnd, theEvent);
199 void XGUI_ViewerProxy::onMouseDoubleClick(AppElements_ViewWindow* theWnd, QMouseEvent* theEvent)
201 emit mouseDoubleClick(theWnd, theEvent);
204 void XGUI_ViewerProxy::onMouseMove(AppElements_ViewWindow* theWnd, QMouseEvent* theEvent)
206 emit mouseMove(theWnd, theEvent);
209 void XGUI_ViewerProxy::onKeyPress(AppElements_ViewWindow* theWnd, QKeyEvent* theEvent)
211 emit keyPress(theWnd, theEvent);
214 void XGUI_ViewerProxy::onKeyRelease(AppElements_ViewWindow* theWnd, QKeyEvent* theEvent)
216 emit keyRelease(theWnd, theEvent);
221 //***************************************
222 void XGUI_ViewerProxy::enableSelection(bool isEnabled)
224 if (myWorkshop->isSalomeMode()) {
225 myWorkshop->salomeConnector()->viewer()->enableSelection(isEnabled);
227 myWorkshop->mainWindow()->viewer()->setSelectionEnabled(isEnabled);
231 //***************************************
232 bool XGUI_ViewerProxy::isSelectionEnabled() const
234 if (myWorkshop->isSalomeMode()) {
235 return myWorkshop->salomeConnector()->viewer()->isSelectionEnabled();
237 return myWorkshop->mainWindow()->viewer()->isSelectionEnabled();
241 //***************************************
242 void XGUI_ViewerProxy::enableMultiselection(bool isEnable)
244 if (myWorkshop->isSalomeMode()) {
245 myWorkshop->salomeConnector()->viewer()->enableMultiselection(isEnable);
247 myWorkshop->mainWindow()->viewer()->setMultiSelectionEnabled(isEnable);
251 //***************************************
252 bool XGUI_ViewerProxy::isMultiSelectionEnabled() const
254 if (myWorkshop->isSalomeMode()) {
255 return myWorkshop->salomeConnector()->viewer()->isMultiSelectionEnabled();
257 return myWorkshop->mainWindow()->viewer()->isMultiSelectionEnabled();
261 //***************************************
262 void XGUI_ViewerProxy::addSelectionFilter(const Handle(SelectMgr_Filter)& theFilter)
264 myWorkshop->displayer()->addSelectionFilter(theFilter);
267 //***************************************
268 void XGUI_ViewerProxy::removeSelectionFilter(const Handle(SelectMgr_Filter)& theFilter)
270 myWorkshop->displayer()->removeSelectionFilter(theFilter);
273 //***************************************
274 void XGUI_ViewerProxy::clearSelectionFilters()
276 myWorkshop->displayer()->removeFilters();
279 //***************************************
280 void XGUI_ViewerProxy::update()
282 myWorkshop->displayer()->updateViewer();
285 //***************************************
286 bool XGUI_ViewerProxy::canDragByMouse() const
288 if (myWorkshop->isSalomeMode()) {
289 ModuleBase_IViewer* aViewer = myWorkshop->salomeConnector()->viewer();
290 return aViewer->canDragByMouse();