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 // TODO: Connect to ViewTransformation signal
113 AppElements_Viewer* aViewer = myWorkshop->mainWindow()->viewer();
115 connect(aViewer, SIGNAL(lastViewClosed()), this, SIGNAL(lastViewClosed()));
117 connect(aViewer, SIGNAL(tryCloseView(AppElements_ViewWindow*)),
118 this, SLOT(onTryCloseView(AppElements_ViewWindow*)));
120 connect(aViewer, SIGNAL(deleteView(AppElements_ViewWindow*)),
121 this, SLOT(onDeleteView(AppElements_ViewWindow*)));
123 connect(aViewer, SIGNAL(viewCreated(AppElements_ViewWindow*)),
124 this, SLOT(onViewCreated(AppElements_ViewWindow*)));
126 connect(aViewer, SIGNAL(activated(AppElements_ViewWindow*)),
127 this, SLOT(onActivated(AppElements_ViewWindow*)));
129 connect(aViewer, SIGNAL(mousePress(AppElements_ViewWindow*, QMouseEvent*)), this,
130 SLOT(onMousePress(AppElements_ViewWindow*, QMouseEvent*)));
132 connect(aViewer, SIGNAL(mouseRelease(AppElements_ViewWindow*, QMouseEvent*)), this,
133 SLOT(onMouseRelease(AppElements_ViewWindow*, QMouseEvent*)));
135 connect(aViewer, SIGNAL(mouseDoubleClick(AppElements_ViewWindow*, QMouseEvent*)), this,
136 SLOT(onMouseDoubleClick(AppElements_ViewWindow*, QMouseEvent*)));
138 connect(aViewer, SIGNAL(mouseMove(AppElements_ViewWindow*, QMouseEvent*)), this,
139 SLOT(onMouseMove(AppElements_ViewWindow*, QMouseEvent*)));
141 connect(aViewer, SIGNAL(keyPress(AppElements_ViewWindow*, QKeyEvent*)), this,
142 SLOT(onKeyPress(AppElements_ViewWindow*, QKeyEvent*)));
144 connect(aViewer, SIGNAL(keyRelease(AppElements_ViewWindow*, QKeyEvent*)), this,
145 SLOT(onKeyRelease(AppElements_ViewWindow*, QKeyEvent*)));
147 connect(aViewer, SIGNAL(selectionChanged()), this, SIGNAL(selectionChanged()));
148 connect(aViewer, SIGNAL(contextMenuRequested(QContextMenuEvent*)), this,
149 SIGNAL(contextMenuRequested(QContextMenuEvent*)));
153 bool XGUI_ViewerProxy::eventFilter(QObject *theObject, QEvent *theEvent)
155 if (theEvent->type() == QEvent::Enter) {
156 emit enterViewPort();
158 else if (theEvent->type() == QEvent::Leave) {
159 emit leaveViewPort();
161 return ModuleBase_IViewer::eventFilter(theObject, theEvent);
164 void XGUI_ViewerProxy::onTryCloseView(AppElements_ViewWindow* theWnd)
166 emit tryCloseView(theWnd);
169 void XGUI_ViewerProxy::onDeleteView(AppElements_ViewWindow* theWnd)
171 emit deleteView(theWnd);
174 void XGUI_ViewerProxy::onViewCreated(ModuleBase_IViewWindow* theWnd)
176 theWnd->viewPort()->installEventFilter(this);
178 emit viewCreated(theWnd);
181 void XGUI_ViewerProxy::onViewCreated(AppElements_ViewWindow* theWnd)
183 theWnd->viewPort()->installEventFilter(this);
185 connect(theWnd, SIGNAL(vpTransformationFinished(AppElements_ViewWindow::OperationType)),
186 this, SLOT(onViewTransformed(AppElements_ViewWindow::OperationType)));
188 emit viewCreated(theWnd);
191 void XGUI_ViewerProxy::onActivated(AppElements_ViewWindow* theWnd)
193 emit activated(theWnd);
196 void XGUI_ViewerProxy::onMousePress(AppElements_ViewWindow* theWnd, QMouseEvent* theEvent)
198 emit mousePress(theWnd, theEvent);
201 void XGUI_ViewerProxy::onMouseRelease(AppElements_ViewWindow* theWnd, QMouseEvent* theEvent)
203 emit mouseRelease(theWnd, theEvent);
206 void XGUI_ViewerProxy::onMouseDoubleClick(AppElements_ViewWindow* theWnd, QMouseEvent* theEvent)
208 emit mouseDoubleClick(theWnd, theEvent);
211 void XGUI_ViewerProxy::onMouseMove(AppElements_ViewWindow* theWnd, QMouseEvent* theEvent)
213 emit mouseMove(theWnd, theEvent);
216 void XGUI_ViewerProxy::onKeyPress(AppElements_ViewWindow* theWnd, QKeyEvent* theEvent)
218 emit keyPress(theWnd, theEvent);
221 void XGUI_ViewerProxy::onKeyRelease(AppElements_ViewWindow* theWnd, QKeyEvent* theEvent)
223 emit keyRelease(theWnd, theEvent);
228 //***************************************
229 void XGUI_ViewerProxy::enableSelection(bool isEnabled)
231 if (myWorkshop->isSalomeMode()) {
232 myWorkshop->salomeConnector()->viewer()->enableSelection(isEnabled);
234 myWorkshop->mainWindow()->viewer()->setSelectionEnabled(isEnabled);
238 //***************************************
239 bool XGUI_ViewerProxy::isSelectionEnabled() const
241 if (myWorkshop->isSalomeMode()) {
242 return myWorkshop->salomeConnector()->viewer()->isSelectionEnabled();
244 return myWorkshop->mainWindow()->viewer()->isSelectionEnabled();
248 //***************************************
249 void XGUI_ViewerProxy::enableMultiselection(bool isEnable)
251 if (myWorkshop->isSalomeMode()) {
252 myWorkshop->salomeConnector()->viewer()->enableMultiselection(isEnable);
254 myWorkshop->mainWindow()->viewer()->setMultiSelectionEnabled(isEnable);
258 //***************************************
259 bool XGUI_ViewerProxy::isMultiSelectionEnabled() const
261 if (myWorkshop->isSalomeMode()) {
262 return myWorkshop->salomeConnector()->viewer()->isMultiSelectionEnabled();
264 return myWorkshop->mainWindow()->viewer()->isMultiSelectionEnabled();
268 //***************************************
269 void XGUI_ViewerProxy::addSelectionFilter(const Handle(SelectMgr_Filter)& theFilter)
271 myWorkshop->displayer()->addSelectionFilter(theFilter);
274 //***************************************
275 void XGUI_ViewerProxy::removeSelectionFilter(const Handle(SelectMgr_Filter)& theFilter)
277 myWorkshop->displayer()->removeSelectionFilter(theFilter);
280 //***************************************
281 void XGUI_ViewerProxy::clearSelectionFilters()
283 myWorkshop->displayer()->removeFilters();
286 //***************************************
287 void XGUI_ViewerProxy::update()
289 myWorkshop->displayer()->updateViewer();
292 //***************************************
293 bool XGUI_ViewerProxy::canDragByMouse() const
295 if (myWorkshop->isSalomeMode()) {
296 ModuleBase_IViewer* aViewer = myWorkshop->salomeConnector()->viewer();
297 return aViewer->canDragByMouse();
303 void XGUI_ViewerProxy::onViewTransformed(AppElements_ViewWindow::OperationType theType)
305 emit viewTransformed((int) theType);