Salome HOME
Merge branch 'master' of newgeom:newgeom
[modules/shaper.git] / src / XGUI / XGUI_ViewerProxy.cpp
1 #include "XGUI_ViewerProxy.h"
2 #include "XGUI_Workshop.h"
3 #include "XGUI_MainWindow.h"
4 #include "XGUI_ViewPort.h"
5 #include "XGUI_ViewWindow.h"
6 #include "XGUI_Viewer.h"
7 #include "XGUI_SalomeConnector.h"
8
9
10 XGUI_ViewerProxy::XGUI_ViewerProxy(XGUI_Workshop* theParent)
11 : XGUI_SalomeViewer(theParent), myWorkshop(theParent)
12 {
13 }
14
15
16 Handle(AIS_InteractiveContext) XGUI_ViewerProxy::AISContext() const
17 {
18   if (myWorkshop->isSalomeMode()) {
19     return myWorkshop->salomeConnector()->viewer()->AISContext();
20   } else {
21     return myWorkshop->mainWindow()->viewer()->AISContext();
22   }
23 }
24
25 Handle(V3d_Viewer) XGUI_ViewerProxy::v3dViewer() const
26 {
27   if (myWorkshop->isSalomeMode()) {
28     return myWorkshop->salomeConnector()->viewer()->v3dViewer();
29   } else {
30     return myWorkshop->mainWindow()->viewer()->v3dViewer();
31   }
32 }
33
34 Handle(V3d_View) XGUI_ViewerProxy::activeView() const
35 {
36   if (myWorkshop->isSalomeMode()) {
37     return myWorkshop->salomeConnector()->viewer()->activeView();
38   } else {
39     XGUI_Viewer* aViewer = myWorkshop->mainWindow()->viewer();
40     return aViewer->activeViewWindow()->viewPort()->getView();
41   }
42 }
43  
44 void XGUI_ViewerProxy::setViewProjection(double theX, double theY, double theZ)
45 {
46   Handle(V3d_View) aView3d = activeView();
47   if ( !aView3d.IsNull() ) {
48     aView3d->SetProj(theX, theY, theZ);
49     aView3d->FitAll( 0.01, true, true );
50     aView3d->SetZSize(0.);
51   }
52 }
53
54 void XGUI_ViewerProxy::fitAll()
55 {
56   if (myWorkshop->isSalomeMode()) {
57     myWorkshop->salomeConnector()->viewer()->fitAll();
58   }
59   else {
60     XGUI_Viewer* aViewer = myWorkshop->mainWindow()->viewer();
61     aViewer->activeViewWindow()->viewPort()->fitAll();
62   }
63 }
64
65 void XGUI_ViewerProxy::connectToViewer()
66 {
67   if (myWorkshop->isSalomeMode()) {
68     XGUI_SalomeViewer* aViewer = myWorkshop->salomeConnector()->viewer();
69
70     connect(aViewer, SIGNAL(lastViewClosed()),
71             this, SIGNAL(lastViewClosed()));
72     connect(aViewer, SIGNAL(tryCloseView()),
73             this, SIGNAL(tryCloseView()));
74     connect(aViewer, SIGNAL(deleteView()),
75             this, SIGNAL(deleteView()));
76     connect(aViewer, SIGNAL(viewCreated()),
77             this, SIGNAL(viewCreated()));
78     connect(aViewer, SIGNAL(activated()),
79             this, SIGNAL(activated()));
80
81     connect(aViewer, SIGNAL(mousePress(QMouseEvent*)),
82             this, SIGNAL(mousePress(QMouseEvent*)));
83
84     connect(aViewer, SIGNAL(mouseRelease(QMouseEvent*)),
85             this, SIGNAL(mouseRelease(QMouseEvent*)));
86     
87     connect(aViewer, SIGNAL(mouseDoubleClick(QMouseEvent*)),
88             this, SIGNAL(mouseDoubleClick(QMouseEvent*)));
89     
90     connect(aViewer, SIGNAL(mouseMove(QMouseEvent*)),
91             this, SIGNAL(mouseMove(QMouseEvent*)));
92     
93     connect(aViewer, SIGNAL(keyPress(QKeyEvent*)),
94             this, SIGNAL(keyPress(QKeyEvent*)));
95     
96     connect(aViewer, SIGNAL(keyRelease(QKeyEvent*)),
97             this, SIGNAL(keyRelease(QKeyEvent*)));
98
99     connect(aViewer, SIGNAL(selectionChanged()), this, SIGNAL(selectionChanged()));
100     connect(aViewer, SIGNAL(contextMenuRequested(QContextMenuEvent*)), 
101             this, SIGNAL(contextMenuRequested(QContextMenuEvent*)));
102
103   } else {
104     XGUI_Viewer* aViewer = myWorkshop->mainWindow()->viewer();
105
106     connect(aViewer, SIGNAL(lastViewClosed()),
107             this, SIGNAL(lastViewClosed()));
108     connect(aViewer, SIGNAL(tryCloseView(XGUI_ViewWindow*)),
109             this, SIGNAL(tryCloseView()));
110     connect(aViewer, SIGNAL(deleteView(XGUI_ViewWindow*)),
111             this, SIGNAL(deleteView()));
112     connect(aViewer, SIGNAL(viewCreated(XGUI_ViewWindow*)),
113             this, SIGNAL(viewCreated()));
114     connect(aViewer, SIGNAL(activated(XGUI_ViewWindow*)),
115             this, SIGNAL(activated()));
116
117     connect(aViewer, SIGNAL(mousePress(XGUI_ViewWindow*, QMouseEvent*)),
118             this, SLOT(onMousePress(XGUI_ViewWindow*, QMouseEvent*)));
119     connect(aViewer, SIGNAL(mouseRelease(XGUI_ViewWindow*, QMouseEvent*)),
120             this, SLOT(onMouseRelease(XGUI_ViewWindow*, QMouseEvent*)));
121     connect(aViewer, SIGNAL(mouseDoubleClick(XGUI_ViewWindow*, QMouseEvent*)),
122             this, SLOT(onMouseDoubleClick(XGUI_ViewWindow*, QMouseEvent*)));
123     connect(aViewer, SIGNAL(mouseMove(XGUI_ViewWindow*, QMouseEvent*)),
124             this, SLOT(onMouseMove(XGUI_ViewWindow*, QMouseEvent*)));
125     connect(aViewer, SIGNAL(keyPress(XGUI_ViewWindow*, QKeyEvent*)),
126             this, SLOT(onKeyPress(XGUI_ViewWindow*, QKeyEvent*)));
127     connect(aViewer, SIGNAL(keyRelease(XGUI_ViewWindow*, QKeyEvent*)),
128             this, SLOT(onKeyRelease(XGUI_ViewWindow*, QKeyEvent*)));
129
130     connect(aViewer, SIGNAL(selectionChanged()), this, SIGNAL(selectionChanged()));
131     connect(aViewer, SIGNAL(contextMenuRequested(QContextMenuEvent*)), 
132             this, SIGNAL(contextMenuRequested(QContextMenuEvent*)));
133   }
134 }
135
136 void XGUI_ViewerProxy::onMousePress(XGUI_ViewWindow*, QMouseEvent* theEvent)
137 {
138   emit mousePress(theEvent);
139 }
140
141 void XGUI_ViewerProxy::onMouseRelease(XGUI_ViewWindow*, QMouseEvent* theEvent)
142 {
143   emit mouseRelease(theEvent);
144 }
145
146 void XGUI_ViewerProxy::onMouseDoubleClick(XGUI_ViewWindow*, QMouseEvent* theEvent)
147 {
148   emit mouseDoubleClick(theEvent);
149 }
150
151 void XGUI_ViewerProxy::onMouseMove(XGUI_ViewWindow*, QMouseEvent* theEvent)
152 {
153   emit mouseMove(theEvent);
154 }
155
156 void XGUI_ViewerProxy::onKeyPress(XGUI_ViewWindow*, QKeyEvent* theEvent)
157 {
158   emit keyPress(theEvent);
159 }
160
161 void XGUI_ViewerProxy::onKeyRelease(XGUI_ViewWindow*, QKeyEvent* theEvent)
162 {
163   emit keyRelease(theEvent);
164 }
165
166 //***************************************
167 void XGUI_ViewerProxy::enableSelection(bool isEnabled)
168 {
169   if (myWorkshop->isSalomeMode()) {
170     myWorkshop->salomeConnector()->viewer()->enableSelection(isEnabled);
171   } else {
172     myWorkshop->mainWindow()->viewer()->setSelectionEnabled(isEnabled);
173   }
174 }
175
176 //***************************************
177 bool XGUI_ViewerProxy::isSelectionEnabled() const
178 {
179   if (myWorkshop->isSalomeMode()) {
180     return myWorkshop->salomeConnector()->viewer()->isSelectionEnabled();
181   } else {
182     return myWorkshop->mainWindow()->viewer()->isSelectionEnabled();
183   }
184 }
185
186 //***************************************
187 void XGUI_ViewerProxy::enableMultiselection(bool isEnable)
188 {
189   if (myWorkshop->isSalomeMode()) {
190     myWorkshop->salomeConnector()->viewer()->enableMultiselection(isEnable);
191   } else {
192     myWorkshop->mainWindow()->viewer()->setMultiSelectionEnabled(isEnable);
193   }
194 }
195
196 //***************************************
197 bool XGUI_ViewerProxy::isMultiSelectionEnabled() const
198 {
199   if (myWorkshop->isSalomeMode()) {
200     return myWorkshop->salomeConnector()->viewer()->isMultiSelectionEnabled();
201   } else {
202     return myWorkshop->mainWindow()->viewer()->isMultiSelectionEnabled();
203   }
204 }