Salome HOME
refs #75 - reported by Hervé Legrand: sketch - color of planes displayed in 3D viewer...
[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   } else {
99     XGUI_Viewer* aViewer = myWorkshop->mainWindow()->viewer();
100
101     connect(aViewer, SIGNAL(lastViewClosed()),
102             this, SIGNAL(lastViewClosed()));
103     connect(aViewer, SIGNAL(tryCloseView(XGUI_ViewWindow*)),
104             this, SIGNAL(tryCloseView()));
105     connect(aViewer, SIGNAL(deleteView(XGUI_ViewWindow*)),
106             this, SIGNAL(deleteView()));
107     connect(aViewer, SIGNAL(viewCreated(XGUI_ViewWindow*)),
108             this, SIGNAL(viewCreated()));
109     connect(aViewer, SIGNAL(activated(XGUI_ViewWindow*)),
110             this, SIGNAL(activated()));
111
112     connect(aViewer, SIGNAL(mousePress(XGUI_ViewWindow*, QMouseEvent*)),
113             this, SLOT(onMousePress(XGUI_ViewWindow*, QMouseEvent*)));
114     connect(aViewer, SIGNAL(mouseRelease(XGUI_ViewWindow*, QMouseEvent*)),
115             this, SLOT(onMouseRelease(XGUI_ViewWindow*, QMouseEvent*)));
116     connect(aViewer, SIGNAL(mouseDoubleClick(XGUI_ViewWindow*, QMouseEvent*)),
117             this, SLOT(onMouseDoubleClick(XGUI_ViewWindow*, QMouseEvent*)));
118     connect(aViewer, SIGNAL(mouseMove(XGUI_ViewWindow*, QMouseEvent*)),
119             this, SLOT(onMouseMove(XGUI_ViewWindow*, QMouseEvent*)));
120     connect(aViewer, SIGNAL(keyPress(XGUI_ViewWindow*, QKeyEvent*)),
121             this, SLOT(onKeyPress(XGUI_ViewWindow*, QKeyEvent*)));
122     connect(aViewer, SIGNAL(keyRelease(XGUI_ViewWindow*, QKeyEvent*)),
123             this, SLOT(onKeyRelease(XGUI_ViewWindow*, QKeyEvent*)));
124   }
125 }
126
127 void XGUI_ViewerProxy::onMousePress(XGUI_ViewWindow*, QMouseEvent* theEvent)
128 {
129   emit mousePress(theEvent);
130 }
131
132 void XGUI_ViewerProxy::onMouseRelease(XGUI_ViewWindow*, QMouseEvent* theEvent)
133 {
134   emit mouseRelease(theEvent);
135 }
136
137 void XGUI_ViewerProxy::onMouseDoubleClick(XGUI_ViewWindow*, QMouseEvent* theEvent)
138 {
139   emit mouseDoubleClick(theEvent);
140 }
141
142 void XGUI_ViewerProxy::onMouseMove(XGUI_ViewWindow*, QMouseEvent* theEvent)
143 {
144   emit mouseMove(theEvent);
145 }
146
147 void XGUI_ViewerProxy::onKeyPress(XGUI_ViewWindow*, QKeyEvent* theEvent)
148 {
149   emit keyPress(theEvent);
150 }
151
152 void XGUI_ViewerProxy::onKeyRelease(XGUI_ViewWindow*, QKeyEvent* theEvent)
153 {
154   emit keyRelease(theEvent);
155 }
156
157 //***************************************
158 void XGUI_ViewerProxy::enableSelection(bool isEnabled)
159 {
160   if (myWorkshop->isSalomeMode()) {
161     myWorkshop->salomeConnector()->viewer()->enableSelection(isEnabled);
162   } else {
163     myWorkshop->mainWindow()->viewer()->setSelectionEnabled(isEnabled);
164   }
165 }
166
167 //***************************************
168 bool XGUI_ViewerProxy::isSelectionEnabled() const
169 {
170   if (myWorkshop->isSalomeMode()) {
171     return myWorkshop->salomeConnector()->viewer()->isSelectionEnabled();
172   } else {
173     return myWorkshop->mainWindow()->viewer()->isSelectionEnabled();
174   }
175 }
176
177 //***************************************
178 void XGUI_ViewerProxy::enableMultiselection(bool isEnable)
179 {
180   if (myWorkshop->isSalomeMode()) {
181     myWorkshop->salomeConnector()->viewer()->enableMultiselection(isEnable);
182   } else {
183     myWorkshop->mainWindow()->viewer()->setMultiSelectionEnabled(isEnable);
184   }
185 }
186
187 //***************************************
188 bool XGUI_ViewerProxy::isMultiSelectionEnabled() const
189 {
190   if (myWorkshop->isSalomeMode()) {
191     return myWorkshop->salomeConnector()->viewer()->isMultiSelectionEnabled();
192   } else {
193     return myWorkshop->mainWindow()->viewer()->isMultiSelectionEnabled();
194   }
195 }