Salome HOME
Issue #2981: Update color of text on color bar
[modules/shaper.git] / src / XGUI / XGUI_ViewerProxy.cpp
1 // Copyright (C) 2014-2019  CEA/DEN, EDF R&D
2 //
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License, or (at your option) any later version.
7 //
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11 // Lesser General Public License for more details.
12 //
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
16 //
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18 //
19
20 #include "XGUI_ViewerProxy.h"
21 #include "XGUI_Workshop.h"
22 #include "XGUI_SalomeConnector.h"
23 #include "XGUI_Displayer.h"
24
25 #ifndef HAVE_SALOME
26   #include <AppElements_MainWindow.h>
27   #include <AppElements_ViewPort.h>
28   #include <AppElements_ViewWindow.h>
29   #include <AppElements_Viewer.h>
30 #endif
31
32 #include <ModuleBase_IViewWindow.h>
33 #include <ModuleBase_Preferences.h>
34 #include <GeomAPI_Shape.h>
35 #include <ModelAPI_ResultConstruction.h>
36
37 #include <Config_PropManager.h>
38
39 #include <SUIT_ResourceMgr.h>
40 #include <AIS_Shape.hxx>
41 #include <StdSelect_BRepOwner.hxx>
42
43 #include <QEvent>
44 #include <QKeyEvent>
45
46
47 #define HIGHLIGHT_COLOR Quantity_NOC_YELLOW
48
49 XGUI_ViewerProxy::XGUI_ViewerProxy(XGUI_Workshop* theParent)
50     : ModuleBase_IViewer(theParent),
51       myWorkshop(theParent)
52 {
53 }
54
55 void XGUI_ViewerProxy::connectViewProxy()
56 {
57 #ifdef HAVE_SALOME
58   connect(myWorkshop->salomeConnector()->viewer(), SIGNAL(trihedronVisibilityChanged(bool)),
59          SIGNAL(trihedronVisibilityChanged(bool)));
60 #else
61   connect(myWorkshop->mainWindow()->viewer(), SIGNAL(trihedronVisibilityChanged(bool)),
62          SIGNAL(trihedronVisibilityChanged(bool)));
63 #endif
64 }
65
66 Handle(AIS_InteractiveContext) XGUI_ViewerProxy::AISContext() const
67 {
68   Handle(AIS_InteractiveContext) aContext;
69 #ifdef HAVE_SALOME
70   aContext = myWorkshop->salomeConnector()->viewer()->AISContext();
71 #else
72   aContext = myWorkshop->mainWindow()->viewer()->AISContext();
73 #endif
74   return aContext;
75 }
76
77 Handle(AIS_Trihedron) XGUI_ViewerProxy::trihedron() const
78 {
79 #ifdef HAVE_SALOME
80   return myWorkshop->salomeConnector()->viewer()->trihedron();
81 #else
82   return myWorkshop->mainWindow()->viewer()->trihedron();
83 #endif
84 }
85
86 Handle(V3d_Viewer) XGUI_ViewerProxy::v3dViewer() const
87 {
88 #ifdef HAVE_SALOME
89   return myWorkshop->salomeConnector()->viewer()->v3dViewer();
90 #else
91   return myWorkshop->mainWindow()->viewer()->v3dViewer();
92 #endif
93 }
94
95 Handle(V3d_View) XGUI_ViewerProxy::activeView() const
96 {
97 #ifdef HAVE_SALOME
98   return myWorkshop->salomeConnector()->viewer()->activeView();
99 #else
100   AppElements_Viewer* aViewer = myWorkshop->mainWindow()->viewer();
101   return (aViewer->activeViewWindow()) ?
102     aViewer->activeViewWindow()->viewPortApp()->getView() :
103     Handle(V3d_View)();
104 #endif
105 }
106
107 QWidget* XGUI_ViewerProxy::activeViewPort() const
108 {
109 #ifdef HAVE_SALOME
110   return myWorkshop->salomeConnector()->viewer()->activeViewPort();
111 #else
112   AppElements_Viewer* aViewer = myWorkshop->mainWindow()->viewer();
113   return (aViewer->activeViewWindow()) ?
114          aViewer->activeViewWindow()->viewPortApp(): 0;
115 #endif
116 }
117
118 void XGUI_ViewerProxy::setViewProjection(double theX, double theY, double theZ, double theTwist)
119 {
120   Handle(V3d_View) aView3d = activeView();
121   if (!aView3d.IsNull()) {
122     aView3d->SetProj(theX, theY, theZ);
123     aView3d->SetTwist( theTwist );
124     aView3d->FitAll(0.01, false);
125     aView3d->SetZSize(0.);
126     if (aView3d->Depth() < 0.1)
127       aView3d->DepthFitAll();
128   }
129 }
130
131 void XGUI_ViewerProxy::fitAll()
132 {
133 #ifdef HAVE_SALOME
134   myWorkshop->salomeConnector()->viewer()->fitAll();
135 #else
136   AppElements_Viewer* aViewer = myWorkshop->mainWindow()->viewer();
137   if (aViewer->activeViewWindow())
138     aViewer->activeViewWindow()->viewPortApp()->fitAll();
139 #endif
140 }
141
142 void XGUI_ViewerProxy::eraseAll()
143 {
144 #ifdef HAVE_SALOME
145   myWorkshop->salomeConnector()->viewer()->eraseAll();
146 #else
147 #endif
148 }
149
150 void XGUI_ViewerProxy::connectToViewer()
151 {
152 #ifdef HAVE_SALOME
153   ModuleBase_IViewer* aViewer = myWorkshop->salomeConnector()->viewer();
154
155   connect(aViewer, SIGNAL(lastViewClosed()), this, SIGNAL(lastViewClosed()));
156   connect(aViewer, SIGNAL(tryCloseView(ModuleBase_IViewWindow*)),
157     this, SIGNAL(tryCloseView(ModuleBase_IViewWindow*)));
158
159   connect(aViewer, SIGNAL(deleteView(ModuleBase_IViewWindow*)),
160     this, SIGNAL(deleteView(ModuleBase_IViewWindow*)));
161
162   connect(aViewer, SIGNAL(viewCreated(ModuleBase_IViewWindow*)),
163     this, SLOT(onViewCreated(ModuleBase_IViewWindow*)));
164
165   connect(aViewer, SIGNAL(activated(ModuleBase_IViewWindow*)),
166     this, SIGNAL(activated(ModuleBase_IViewWindow*)));
167
168   connect(aViewer, SIGNAL(mousePress(ModuleBase_IViewWindow*, QMouseEvent*)),
169     this, SIGNAL(mousePress(ModuleBase_IViewWindow*, QMouseEvent*)));
170
171   connect(aViewer, SIGNAL(mouseRelease(ModuleBase_IViewWindow*, QMouseEvent*)),
172     this, SIGNAL(mouseRelease(ModuleBase_IViewWindow*, QMouseEvent*)));
173
174   connect(aViewer, SIGNAL(mouseDoubleClick(ModuleBase_IViewWindow*, QMouseEvent*)), this,
175           SIGNAL(mouseDoubleClick(ModuleBase_IViewWindow*, QMouseEvent*)));
176
177   connect(aViewer, SIGNAL(mouseMove(ModuleBase_IViewWindow*, QMouseEvent*)),
178     this, SLOT(onMouseMove(ModuleBase_IViewWindow*, QMouseEvent*)));
179
180   connect(aViewer, SIGNAL(keyPress(ModuleBase_IViewWindow*, QKeyEvent*)),
181     this, SLOT(onKeyPress(ModuleBase_IViewWindow*, QKeyEvent*)));
182
183   connect(aViewer, SIGNAL(keyRelease(ModuleBase_IViewWindow*, QKeyEvent*)),
184     this, SLOT(onKeyRelease(ModuleBase_IViewWindow*, QKeyEvent*)));
185
186   connect(aViewer, SIGNAL(selectionChanged()), this, SIGNAL(selectionChanged()));
187
188   connect(aViewer, SIGNAL(viewTransformed(int)), this, SIGNAL(viewTransformed(int)));
189
190   connect(aViewer, SIGNAL(contextMenuRequested(QContextMenuEvent*)), this,
191           SIGNAL(contextMenuRequested(QContextMenuEvent*)));
192
193 #else
194   AppElements_Viewer* aViewer = myWorkshop->mainWindow()->viewer();
195
196   connect(aViewer, SIGNAL(lastViewClosed()), this, SIGNAL(lastViewClosed()));
197
198   connect(aViewer, SIGNAL(tryCloseView(AppElements_ViewWindow*)),
199           this, SLOT(onTryCloseView(AppElements_ViewWindow*)));
200
201   connect(aViewer, SIGNAL(deleteView(AppElements_ViewWindow*)),
202           this, SLOT(onDeleteView(AppElements_ViewWindow*)));
203
204   connect(aViewer, SIGNAL(viewCreated(AppElements_ViewWindow*)),
205           this, SLOT(onViewCreated(AppElements_ViewWindow*)));
206
207   connect(aViewer, SIGNAL(activated(AppElements_ViewWindow*)),
208           this, SLOT(onActivated(AppElements_ViewWindow*)));
209
210   connect(aViewer, SIGNAL(mousePress(AppElements_ViewWindow*, QMouseEvent*)), this,
211           SLOT(onMousePress(AppElements_ViewWindow*, QMouseEvent*)));
212
213   connect(aViewer, SIGNAL(mouseRelease(AppElements_ViewWindow*, QMouseEvent*)), this,
214           SLOT(onMouseRelease(AppElements_ViewWindow*, QMouseEvent*)));
215
216   connect(aViewer, SIGNAL(mouseDoubleClick(AppElements_ViewWindow*, QMouseEvent*)), this,
217           SLOT(onMouseDoubleClick(AppElements_ViewWindow*, QMouseEvent*)));
218
219   connect(aViewer, SIGNAL(mouseMove(AppElements_ViewWindow*, QMouseEvent*)), this,
220           SLOT(onMouseMove(AppElements_ViewWindow*, QMouseEvent*)));
221
222   connect(aViewer, SIGNAL(keyPress(AppElements_ViewWindow*, QKeyEvent*)), this,
223           SLOT(onKeyPress(AppElements_ViewWindow*, QKeyEvent*)));
224
225   connect(aViewer, SIGNAL(keyRelease(AppElements_ViewWindow*, QKeyEvent*)), this,
226           SLOT(onKeyRelease(AppElements_ViewWindow*, QKeyEvent*)));
227
228   connect(aViewer, SIGNAL(selectionChanged()), this, SIGNAL(selectionChanged()));
229   connect(aViewer, SIGNAL(contextMenuRequested(QContextMenuEvent*)), this,
230           SIGNAL(contextMenuRequested(QContextMenuEvent*)));
231 #endif
232 }
233
234 bool XGUI_ViewerProxy::eventFilter(QObject *theObject, QEvent *theEvent)
235 {
236   if (theEvent->type() == QEvent::Enter) {
237     emit enterViewPort();
238   }
239   else if (theEvent->type() == QEvent::Leave) {
240     emit leaveViewPort();
241   }
242   return ModuleBase_IViewer::eventFilter(theObject, theEvent);
243 }
244
245 void XGUI_ViewerProxy::onViewCreated(ModuleBase_IViewWindow* theWnd)
246 {
247   theWnd->viewPort()->installEventFilter(this);
248   myWindowScale.insert (theWnd->v3dView(), theWnd->v3dView()->Camera()->Scale());
249   emit viewCreated(theWnd);
250 }
251
252 #ifndef HAVE_SALOME
253 void XGUI_ViewerProxy::onTryCloseView(AppElements_ViewWindow* theWnd)
254 {
255   emit tryCloseView(theWnd);
256 }
257
258 void XGUI_ViewerProxy::onDeleteView(AppElements_ViewWindow* theWnd)
259 {
260   if (myWindowScale.contains(theWnd->v3dView()))
261     myWindowScale.remove (theWnd->v3dView());
262   emit deleteView(theWnd);
263 }
264
265 void XGUI_ViewerProxy::onViewCreated(AppElements_ViewWindow* theWnd)
266 {
267   theWnd->viewPort()->installEventFilter(this);
268
269   connect(theWnd, SIGNAL(vpTransformationFinished(AppElements_ViewWindow::OperationType)),
270     this, SLOT(onViewTransformed(AppElements_ViewWindow::OperationType)));
271
272   myWindowScale.insert (theWnd->v3dView(), theWnd->v3dView()->Camera()->Scale());
273
274   emit viewCreated(theWnd);
275 }
276
277 void XGUI_ViewerProxy::onActivated(AppElements_ViewWindow* theWnd)
278 {
279   emit activated(theWnd);
280 }
281
282 void XGUI_ViewerProxy::onMousePress(AppElements_ViewWindow* theWnd, QMouseEvent* theEvent)
283 {
284   emit mousePress(theWnd, theEvent);
285 }
286
287 void XGUI_ViewerProxy::onMouseRelease(AppElements_ViewWindow* theWnd, QMouseEvent* theEvent)
288 {
289   emit mouseRelease(theWnd, theEvent);
290 }
291
292 void XGUI_ViewerProxy::onMouseDoubleClick(AppElements_ViewWindow* theWnd, QMouseEvent* theEvent)
293 {
294   emit mouseDoubleClick(theWnd, theEvent);
295 }
296
297 void XGUI_ViewerProxy::onMouseMove(AppElements_ViewWindow* theWnd, QMouseEvent* theEvent)
298 {
299   if (myIs2dMode) {
300     bool aHighlight2d =
301       ModuleBase_Preferences::resourceMgr()->booleanValue("Viewer", "highlighting-2d", true);
302     if (aHighlight2d || myShowHighlight)
303       updateHighlight();
304     else
305       eraseHighlight();
306   }
307   else {
308     bool aHighlight3d =
309       ModuleBase_Preferences::resourceMgr()->booleanValue("Viewer", "highlighting-3d", false);
310     if (aHighlight3d || myShowHighlight)
311       updateHighlight();
312     else
313       eraseHighlight();
314   }
315   emit mouseMove(theWnd, theEvent);
316 }
317
318 void XGUI_ViewerProxy::onKeyPress(AppElements_ViewWindow* theWnd, QKeyEvent* theEvent)
319 {
320   myShowHighlight = theEvent->key() == Qt::Key_H;
321   emit keyPress(theWnd, theEvent);
322 }
323
324 void XGUI_ViewerProxy::onKeyRelease(AppElements_ViewWindow* theWnd, QKeyEvent* theEvent)
325 {
326   if (theEvent->key() == Qt::Key_H) {
327     myShowHighlight = false;
328   }
329   emit keyRelease(theWnd, theEvent);
330 }
331
332 void XGUI_ViewerProxy::onViewTransformed(AppElements_ViewWindow::OperationType theType)
333 {
334   emit viewTransformed((int) theType);
335 }
336
337 #endif
338
339
340 //***************************************
341 void XGUI_ViewerProxy::enableSelection(bool isEnabled)
342 {
343 #ifdef HAVE_SALOME
344   myWorkshop->salomeConnector()->viewer()->enableSelection(isEnabled);
345 #else
346   myWorkshop->mainWindow()->viewer()->setSelectionEnabled(isEnabled);
347 #endif
348 }
349
350 //***************************************
351 bool XGUI_ViewerProxy::isSelectionEnabled() const
352 {
353 #ifdef HAVE_SALOME
354   return myWorkshop->salomeConnector()->viewer()->isSelectionEnabled();
355 #else
356   return myWorkshop->mainWindow()->viewer()->isSelectionEnabled();
357 #endif
358 }
359
360 //***************************************
361 void XGUI_ViewerProxy::enableMultiselection(bool isEnable)
362 {
363 #ifdef HAVE_SALOME
364   myWorkshop->salomeConnector()->viewer()->enableMultiselection(isEnable);
365 #else
366   myWorkshop->mainWindow()->viewer()->setMultiSelectionEnabled(isEnable);
367 #endif
368 }
369
370 //***************************************
371 bool XGUI_ViewerProxy::isMultiSelectionEnabled() const
372 {
373 #ifdef HAVE_SALOME
374   return myWorkshop->salomeConnector()->viewer()->isMultiSelectionEnabled();
375 #else
376   return myWorkshop->mainWindow()->viewer()->isMultiSelectionEnabled();
377 #endif
378 }
379
380 //***************************************
381 bool XGUI_ViewerProxy::enableDrawMode(bool isEnabled)
382 {
383 #ifdef HAVE_SALOME
384   return myWorkshop->salomeConnector()->viewer()->enableDrawMode(isEnabled);
385 #else
386   return myWorkshop->mainWindow()->viewer()->enableDrawMode(isEnabled);
387 #endif
388 }
389
390 //***************************************
391 void XGUI_ViewerProxy::addSelectionFilter(const Handle(SelectMgr_Filter)& theFilter)
392 {
393   myWorkshop->displayer()->addSelectionFilter(theFilter);
394 }
395
396 //***************************************
397 void XGUI_ViewerProxy::removeSelectionFilter(const Handle(SelectMgr_Filter)& theFilter)
398 {
399   myWorkshop->displayer()->removeSelectionFilter(theFilter);
400 }
401
402 //***************************************
403 bool XGUI_ViewerProxy::hasSelectionFilter(const Handle(SelectMgr_Filter)& theFilter)
404 {
405   return myWorkshop->displayer()->hasSelectionFilter(theFilter);
406 }
407
408 //***************************************
409 void XGUI_ViewerProxy::clearSelectionFilters()
410 {
411   myWorkshop->displayer()->removeFilters();
412 }
413
414 //***************************************
415 void XGUI_ViewerProxy::update()
416 {
417   myWorkshop->displayer()->updateViewer();
418 }
419
420 //***************************************
421 bool XGUI_ViewerProxy::canDragByMouse() const
422 {
423   if (myWorkshop->isSalomeMode()) {
424     ModuleBase_IViewer* aViewer = myWorkshop->salomeConnector()->viewer();
425     return aViewer->canDragByMouse();
426   } else {
427     return true;
428   }
429 }
430
431 //***************************************
432 void XGUI_ViewerProxy::displayHighlight(FeaturePtr theFeature, const TopoDS_Shape& theIgnoreShape)
433 {
434   Handle(AIS_InteractiveContext) aContext = AISContext();
435
436   double aDeflection;
437   if (myResult->groupName() == ModelAPI_ResultConstruction::group()) {
438     //FeaturePtr aFeature = ModelAPI_Feature::feature(myResult);
439     if (theFeature.get()) {
440       std::list<ResultPtr> aResults = theFeature->results();
441       std::list<ResultPtr>::const_iterator aIt;
442       ResultPtr aRes;
443       Handle(AIS_Shape) aAis;
444       for (aIt = aResults.cbegin(); aIt != aResults.cend(); aIt++) {
445         aRes = (*aIt);
446         TopoDS_Shape aTShape = aRes->shape()->impl<TopoDS_Shape>();
447         if (!aTShape.IsSame(theIgnoreShape)) {
448           aAis = new AIS_Shape(aTShape);
449           aAis->SetColor(HIGHLIGHT_COLOR);
450           aAis->SetZLayer(Graphic3d_ZLayerId_Top); //Graphic3d_ZLayerId_Topmost
451           aDeflection = Config_PropManager::real("Visualization", "construction_deflection");
452           aAis->Attributes()->SetDeviationCoefficient(aDeflection);
453           myHighlights.Append(aAis);
454           aContext->Display(aAis, false);
455           aContext->Deactivate(aAis);
456         }
457       }
458     }
459   }
460   else {
461     TopoDS_Shape aTShape = myResult->shape()->impl<TopoDS_Shape>();
462     Handle(AIS_Shape) aAis = new AIS_Shape(aTShape);
463     aAis->SetColor(HIGHLIGHT_COLOR);
464     aAis->SetZLayer(Graphic3d_ZLayerId_Top); //Graphic3d_ZLayerId_Topmost
465     aDeflection = Config_PropManager::real("Visualization", "body_deflection");
466     aAis->Attributes()->SetDeviationCoefficient(aDeflection);
467     myHighlights.Append(aAis);
468     aContext->Display(aAis, false);
469     aContext->Deactivate(aAis);
470   }
471 }
472
473 void XGUI_ViewerProxy::eraseHighlight()
474 {
475   Handle(AIS_InteractiveContext) aContext = AISContext();
476   Handle(AIS_InteractiveObject) anAISIO;
477   AIS_ListIteratorOfListOfInteractive aLIt;
478   for (aLIt.Initialize(myHighlights); aLIt.More(); aLIt.Next()) {
479     anAISIO = aLIt.Value();
480     aContext->Remove(anAISIO, false);
481   }
482   myHighlights.Clear();
483 }
484
485 void XGUI_ViewerProxy::updateHighlight()
486 {
487   Handle(AIS_InteractiveContext) aContext = AISContext();
488   if (!aContext.IsNull()) {
489     Handle(StdSelect_BRepOwner) aOwner;
490     Handle(AIS_InteractiveObject) anIO;
491     bool isDisplayed = false;
492     TopoDS_Shape aShape, aShp;
493     ResultPtr aRes;
494     XGUI_Displayer* aDisplayer = myWorkshop->displayer();
495     for (aContext->InitDetected(); aContext->MoreDetected(); aContext->NextDetected()) {
496       aOwner = Handle(StdSelect_BRepOwner)::DownCast(aContext->DetectedOwner());
497       if ((!aOwner.IsNull()) && aOwner->HasShape()) {
498         aShape = aOwner->Shape();
499         anIO = Handle(AIS_InteractiveObject)::DownCast(aOwner->Selectable());
500         aRes = std::dynamic_pointer_cast<ModelAPI_Result>(aDisplayer->getObject(anIO));
501         if (aRes.get() && (aRes != myResult)) {
502           eraseHighlight();
503           FeaturePtr aFeature = ModelAPI_Feature::feature(aRes);
504           aShp = aRes->shape()->impl<TopoDS_Shape>();
505           if ((aFeature->results().size() > 1) || (!aShp.IsSame(aShape))) {
506             myResult = aRes;
507             displayHighlight(aFeature, aShape);
508           }
509           else {
510             myResult = ResultPtr();
511           }
512           aContext->UpdateCurrentViewer();
513         }
514         isDisplayed = aRes.get();
515       }
516     }
517     if (!isDisplayed) {
518       eraseHighlight();
519       aContext->UpdateCurrentViewer();
520       myResult = ResultPtr();
521     }
522   }
523 }
524
525 #ifdef HAVE_SALOME
526 void XGUI_ViewerProxy::onMouseMove(ModuleBase_IViewWindow* theWnd, QMouseEvent* theEvent)
527 {
528   if (myIs2dMode) {
529     bool aHighlight2d =
530       ModuleBase_Preferences::resourceMgr()->booleanValue("Viewer", "highlighting-2d", true);
531     if (aHighlight2d || myShowHighlight)
532       updateHighlight();
533     else
534       eraseHighlight();
535   }
536   else {
537     bool aHighlight3d =
538       ModuleBase_Preferences::resourceMgr()->booleanValue("Viewer", "highlighting-3d", false);
539     if (aHighlight3d || myShowHighlight)
540       updateHighlight();
541     else
542       eraseHighlight();
543   }
544   emit mouseMove(theWnd, theEvent);
545 }
546
547 void XGUI_ViewerProxy::onKeyPress(ModuleBase_IViewWindow* theWnd, QKeyEvent* theEvent)
548 {
549   myShowHighlight = theEvent->key() == Qt::Key_H;
550   emit keyPress(theWnd, theEvent);
551 }
552
553 void XGUI_ViewerProxy::onKeyRelease(ModuleBase_IViewWindow* theWnd, QKeyEvent* theEvent)
554 {
555   if (theEvent->key() == Qt::Key_H) {
556     myShowHighlight = false;
557   }
558   emit keyRelease(theWnd, theEvent);
559 }
560 #endif
561
562
563 bool XGUI_ViewerProxy::isColorScaleVisible() const
564 {
565 #ifdef HAVE_SALOME
566   return myWorkshop->salomeConnector()->viewer()->isColorScaleVisible();
567 #else
568   return myWorkshop->mainWindow()->viewer()->isColorScaleVisible();
569 #endif
570 }
571
572 void XGUI_ViewerProxy::setColorScaleShown(bool on)
573 {
574 #ifdef HAVE_SALOME
575   myWorkshop->salomeConnector()->viewer()->setColorScaleShown(on);
576 #else
577   myWorkshop->mainWindow()->viewer()->setColorScaleShown(on);
578 #endif
579 }
580
581 void XGUI_ViewerProxy::setColorScalePosition(double theX, double theY)
582 {
583 #ifdef HAVE_SALOME
584   myWorkshop->salomeConnector()->viewer()->setColorScalePosition(theX, theY);
585 #else
586   QWidget* aWindow = activeViewPort();
587   Handle(AIS_ColorScale) aColorScale = myWorkshop->mainWindow()->viewer()->colorScale();
588   aColorScale->SetPosition(aWindow->width() * theX, aWindow->height() * theY);
589 #endif
590 }
591
592 void XGUI_ViewerProxy::setColorScaleSize(double theW, double theH)
593 {
594 #ifdef HAVE_SALOME
595   myWorkshop->salomeConnector()->viewer()->setColorScaleSize(theW, theH);
596 #else
597   QWidget* aWindow = activeViewPort();
598   Handle(AIS_ColorScale) aColorScale = myWorkshop->mainWindow()->viewer()->colorScale();
599   aColorScale->SetSize(aWindow->width() * theW, aWindow->height() * theH);
600 #endif
601 }
602
603 void XGUI_ViewerProxy::setColorScaleRange(double theMin, double theMax)
604 {
605 #ifdef HAVE_SALOME
606   myWorkshop->salomeConnector()->viewer()->setColorScaleRange(theMin, theMax);
607 #else
608   Handle(AIS_ColorScale) aColorScale = myWorkshop->mainWindow()->viewer()->colorScale();
609   aColorScale->SetRange(theMin, theMax);
610 #endif
611 }
612
613 void XGUI_ViewerProxy::setColorScaleIntervals(int theNb)
614 {
615 #ifdef HAVE_SALOME
616   myWorkshop->salomeConnector()->viewer()->setColorScaleIntervals(theNb);
617 #else
618   Handle(AIS_ColorScale) aColorScale = myWorkshop->mainWindow()->viewer()->colorScale();
619   aColorScale->SetNumberOfIntervals(theNb);
620 #endif
621 }
622
623 void XGUI_ViewerProxy::setColorScaleTextColor(const QColor& theColor)
624 {
625 #ifdef HAVE_SALOME
626   myWorkshop->salomeConnector()->viewer()->setColorScaleTextColor(theColor);
627 #else
628   Handle(AIS_ColorScale) aColorScale = myWorkshop->mainWindow()->viewer()->colorScale();
629   Quantity_Color aColor(theColor.redF(), theColor.greenF(), theColor.blueF(), Quantity_TOC_RGB);
630   aColorScale->SetColor(aColor);
631 #endif
632 }
633
634
635 void XGUI_ViewerProxy::setColorScaleTextHeigth(int theH)
636 {
637 #ifdef HAVE_SALOME
638   myWorkshop->salomeConnector()->viewer()->setColorScaleTextHeigth(theH);
639 #else
640   Handle(AIS_ColorScale) aColorScale = myWorkshop->mainWindow()->viewer()->colorScale();
641   aColorScale->SetTextHeight(theH);
642 #endif
643 }
644
645 void XGUI_ViewerProxy::setColorScaleTitle(const QString& theText)
646 {
647 #ifdef HAVE_SALOME
648   myWorkshop->salomeConnector()->viewer()->setColorScaleTitle(theText);
649 #else
650   Handle(AIS_ColorScale) aColorScale = myWorkshop->mainWindow()->viewer()->colorScale();
651   aColorScale->SetTitle(theText.toStdString().c_str());
652 #endif
653 }
654
655
656 //******************************************************
657 void XGUI_ViewerProxy::setupColorScale()
658 {
659   SUIT_ResourceMgr* aResMgr = ModuleBase_Preferences::resourceMgr();
660   double aX = aResMgr->doubleValue("Viewer", "scalar_bar_x_position", 0.03);
661   double aY = aResMgr->doubleValue("Viewer", "scalar_bar_y_position", 0.35);
662   setColorScalePosition(aX, aY);
663
664   double aW = aResMgr->doubleValue("Viewer", "scalar_bar_width", 0.2);
665   double aH = aResMgr->doubleValue("Viewer", "scalar_bar_height", 0.5);
666   setColorScaleSize(aW, aH);
667
668   QColor aColor = aResMgr->colorValue("Viewer", "scalar_bar_text_color", Qt::black);
669   setColorScaleTextColor(aColor);
670
671   int aT = aResMgr->integerValue("Viewer", "scalar_bar_text_height", 14);
672   setColorScaleTextHeigth(aT);
673
674   int aN = aResMgr->integerValue("Viewer", "scalar_bar_nb_intervals", 20);
675   setColorScaleIntervals(aN);
676 }
677
678
679 //***************************************
680 //void XGUI_ViewerProxy::Zfitall()
681 //{
682 //#ifdef HAVE_SALOME
683 //  myWorkshop->salomeConnector()->viewer()->Zfitall();
684 //#else
685 //  AppElements_Viewer* aViewer = myWorkshop->mainWindow()->viewer();
686 //  AppElements_ViewWindow* aView = aViewer->activeViewWindow();
687 //  if (aView) {
688 //    Handle(V3d_View) aView3d = aView->v3dView();
689 //    aView3d->ZFitAll();
690 //    if (aView3d->Depth() < 0.1)
691 //      aView3d->DepthFitAll();
692 //  }
693 //#endif
694 //}