Salome HOME
Issue #20 Menu buttons' behavior correct
[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())?
41       aViewer->activeViewWindow()->viewPort()->getView():
42       Handle(V3d_View)();
43   }
44 }
45  
46 void XGUI_ViewerProxy::setViewProjection(double theX, double theY, double theZ)
47 {
48   Handle(V3d_View) aView3d = activeView();
49   if ( !aView3d.IsNull() ) {
50     aView3d->SetProj(theX, theY, theZ);
51     aView3d->FitAll( 0.01, true, true );
52     aView3d->SetZSize(0.);
53   }
54 }
55
56 void XGUI_ViewerProxy::fitAll()
57 {
58   if (myWorkshop->isSalomeMode()) {
59     myWorkshop->salomeConnector()->viewer()->fitAll();
60   }
61   else {
62     XGUI_Viewer* aViewer = myWorkshop->mainWindow()->viewer();
63     if (aViewer->activeViewWindow())
64       aViewer->activeViewWindow()->viewPort()->fitAll();
65   }
66 }
67
68 void XGUI_ViewerProxy::connectToViewer()
69 {
70   if (myWorkshop->isSalomeMode()) {
71     XGUI_SalomeViewer* aViewer = myWorkshop->salomeConnector()->viewer();
72
73     connect(aViewer, SIGNAL(lastViewClosed()),
74             this, SIGNAL(lastViewClosed()));
75     connect(aViewer, SIGNAL(tryCloseView()),
76             this, SIGNAL(tryCloseView()));
77     connect(aViewer, SIGNAL(deleteView()),
78             this, SIGNAL(deleteView()));
79     connect(aViewer, SIGNAL(viewCreated()),
80             this, SIGNAL(viewCreated()));
81     connect(aViewer, SIGNAL(activated()),
82             this, SIGNAL(activated()));
83
84     connect(aViewer, SIGNAL(mousePress(QMouseEvent*)),
85             this, SIGNAL(mousePress(QMouseEvent*)));
86
87     connect(aViewer, SIGNAL(mouseRelease(QMouseEvent*)),
88             this, SIGNAL(mouseRelease(QMouseEvent*)));
89     
90     connect(aViewer, SIGNAL(mouseDoubleClick(QMouseEvent*)),
91             this, SIGNAL(mouseDoubleClick(QMouseEvent*)));
92     
93     connect(aViewer, SIGNAL(mouseMove(QMouseEvent*)),
94             this, SIGNAL(mouseMove(QMouseEvent*)));
95     
96     connect(aViewer, SIGNAL(keyPress(QKeyEvent*)),
97             this, SIGNAL(keyPress(QKeyEvent*)));
98     
99     connect(aViewer, SIGNAL(keyRelease(QKeyEvent*)),
100             this, SIGNAL(keyRelease(QKeyEvent*)));
101
102     connect(aViewer, SIGNAL(selectionChanged()), this, SIGNAL(selectionChanged()));
103     connect(aViewer, SIGNAL(contextMenuRequested(QContextMenuEvent*)), 
104             this, SIGNAL(contextMenuRequested(QContextMenuEvent*)));
105
106   } else {
107     XGUI_Viewer* aViewer = myWorkshop->mainWindow()->viewer();
108
109     connect(aViewer, SIGNAL(lastViewClosed()),
110             this, SIGNAL(lastViewClosed()));
111     connect(aViewer, SIGNAL(tryCloseView(XGUI_ViewWindow*)),
112             this, SIGNAL(tryCloseView()));
113     connect(aViewer, SIGNAL(deleteView(XGUI_ViewWindow*)),
114             this, SIGNAL(deleteView()));
115     connect(aViewer, SIGNAL(viewCreated(XGUI_ViewWindow*)),
116             this, SIGNAL(viewCreated()));
117     connect(aViewer, SIGNAL(activated(XGUI_ViewWindow*)),
118             this, SIGNAL(activated()));
119
120     connect(aViewer, SIGNAL(mousePress(XGUI_ViewWindow*, QMouseEvent*)),
121             this, SLOT(onMousePress(XGUI_ViewWindow*, QMouseEvent*)));
122     connect(aViewer, SIGNAL(mouseRelease(XGUI_ViewWindow*, QMouseEvent*)),
123             this, SLOT(onMouseRelease(XGUI_ViewWindow*, QMouseEvent*)));
124     connect(aViewer, SIGNAL(mouseDoubleClick(XGUI_ViewWindow*, QMouseEvent*)),
125             this, SLOT(onMouseDoubleClick(XGUI_ViewWindow*, QMouseEvent*)));
126     connect(aViewer, SIGNAL(mouseMove(XGUI_ViewWindow*, QMouseEvent*)),
127             this, SLOT(onMouseMove(XGUI_ViewWindow*, QMouseEvent*)));
128     connect(aViewer, SIGNAL(keyPress(XGUI_ViewWindow*, QKeyEvent*)),
129             this, SLOT(onKeyPress(XGUI_ViewWindow*, QKeyEvent*)));
130     connect(aViewer, SIGNAL(keyRelease(XGUI_ViewWindow*, QKeyEvent*)),
131             this, SLOT(onKeyRelease(XGUI_ViewWindow*, QKeyEvent*)));
132
133     connect(aViewer, SIGNAL(selectionChanged()), this, SIGNAL(selectionChanged()));
134     connect(aViewer, SIGNAL(contextMenuRequested(QContextMenuEvent*)), 
135             this, SIGNAL(contextMenuRequested(QContextMenuEvent*)));
136   }
137 }
138
139 void XGUI_ViewerProxy::onMousePress(XGUI_ViewWindow*, QMouseEvent* theEvent)
140 {
141   emit mousePress(theEvent);
142 }
143
144 void XGUI_ViewerProxy::onMouseRelease(XGUI_ViewWindow*, QMouseEvent* theEvent)
145 {
146   emit mouseRelease(theEvent);
147 }
148
149 void XGUI_ViewerProxy::onMouseDoubleClick(XGUI_ViewWindow*, QMouseEvent* theEvent)
150 {
151   emit mouseDoubleClick(theEvent);
152 }
153
154 void XGUI_ViewerProxy::onMouseMove(XGUI_ViewWindow*, QMouseEvent* theEvent)
155 {
156   emit mouseMove(theEvent);
157 }
158
159 void XGUI_ViewerProxy::onKeyPress(XGUI_ViewWindow*, QKeyEvent* theEvent)
160 {
161   emit keyPress(theEvent);
162 }
163
164 void XGUI_ViewerProxy::onKeyRelease(XGUI_ViewWindow*, QKeyEvent* theEvent)
165 {
166   emit keyRelease(theEvent);
167 }
168
169 //***************************************
170 void XGUI_ViewerProxy::enableSelection(bool isEnabled)
171 {
172   if (myWorkshop->isSalomeMode()) {
173     myWorkshop->salomeConnector()->viewer()->enableSelection(isEnabled);
174   } else {
175     myWorkshop->mainWindow()->viewer()->setSelectionEnabled(isEnabled);
176   }
177 }
178
179 //***************************************
180 bool XGUI_ViewerProxy::isSelectionEnabled() const
181 {
182   if (myWorkshop->isSalomeMode()) {
183     return myWorkshop->salomeConnector()->viewer()->isSelectionEnabled();
184   } else {
185     return myWorkshop->mainWindow()->viewer()->isSelectionEnabled();
186   }
187 }
188
189 //***************************************
190 void XGUI_ViewerProxy::enableMultiselection(bool isEnable)
191 {
192   if (myWorkshop->isSalomeMode()) {
193     myWorkshop->salomeConnector()->viewer()->enableMultiselection(isEnable);
194   } else {
195     myWorkshop->mainWindow()->viewer()->setMultiSelectionEnabled(isEnable);
196   }
197 }
198
199 //***************************************
200 bool XGUI_ViewerProxy::isMultiSelectionEnabled() const
201 {
202   if (myWorkshop->isSalomeMode()) {
203     return myWorkshop->salomeConnector()->viewer()->isMultiSelectionEnabled();
204   } else {
205     return myWorkshop->mainWindow()->viewer()->isMultiSelectionEnabled();
206   }
207 }