Salome HOME
Set preferences for color scale
[modules/shaper.git] / src / XGUI / XGUI_ViewerProxy.cpp
index 6105a6fb600a9df4cbfc6eb73aff2445314ab983..367b8ad86714c6f67b2f7243fbf1065354c0b850 100644 (file)
 #endif
 
 #include <ModuleBase_IViewWindow.h>
+#include <ModuleBase_Preferences.h>
 #include <GeomAPI_Shape.h>
 #include <ModelAPI_ResultConstruction.h>
 
 #include <Config_PropManager.h>
 
+#include <SUIT_ResourceMgr.h>
 #include <AIS_Shape.hxx>
 #include <StdSelect_BRepOwner.hxx>
 
 #include <QEvent>
+#include <QKeyEvent>
 
 
 #define HIGHLIGHT_COLOR Quantity_NOC_YELLOW
 
 XGUI_ViewerProxy::XGUI_ViewerProxy(XGUI_Workshop* theParent)
     : ModuleBase_IViewer(theParent),
-      myWorkshop(theParent)
+      myWorkshop(theParent), myShowHighlight(false)
 {
 }
 
@@ -175,10 +178,10 @@ void XGUI_ViewerProxy::connectToViewer()
     this, SLOT(onMouseMove(ModuleBase_IViewWindow*, QMouseEvent*)));
 
   connect(aViewer, SIGNAL(keyPress(ModuleBase_IViewWindow*, QKeyEvent*)),
-    this, SIGNAL(keyPress(ModuleBase_IViewWindow*, QKeyEvent*)));
+    this, SLOT(onKeyPress(ModuleBase_IViewWindow*, QKeyEvent*)));
 
   connect(aViewer, SIGNAL(keyRelease(ModuleBase_IViewWindow*, QKeyEvent*)),
-    this, SIGNAL(keyRelease(ModuleBase_IViewWindow*, QKeyEvent*)));
+    this, SLOT(onKeyRelease(ModuleBase_IViewWindow*, QKeyEvent*)));
 
   connect(aViewer, SIGNAL(selectionChanged()), this, SIGNAL(selectionChanged()));
 
@@ -293,17 +296,36 @@ void XGUI_ViewerProxy::onMouseDoubleClick(AppElements_ViewWindow* theWnd, QMouse
 
 void XGUI_ViewerProxy::onMouseMove(AppElements_ViewWindow* theWnd, QMouseEvent* theEvent)
 {
-  updateHighlight();
+  if (myIs2dMode) {
+    bool aHighlight2d =
+      ModuleBase_Preferences::resourceMgr()->booleanValue("Viewer", "highlighting-2d", true);
+    if (aHighlight2d || myShowHighlight)
+      updateHighlight();
+    else
+      eraseHighlight();
+  }
+  else {
+    bool aHighlight3d =
+      ModuleBase_Preferences::resourceMgr()->booleanValue("Viewer", "highlighting-3d", false);
+    if (aHighlight3d || myShowHighlight)
+      updateHighlight();
+    else
+      eraseHighlight();
+  }
   emit mouseMove(theWnd, theEvent);
 }
 
 void XGUI_ViewerProxy::onKeyPress(AppElements_ViewWindow* theWnd, QKeyEvent* theEvent)
 {
+  myShowHighlight = theEvent->key() == Qt::Key_H;
   emit keyPress(theWnd, theEvent);
 }
 
 void XGUI_ViewerProxy::onKeyRelease(AppElements_ViewWindow* theWnd, QKeyEvent* theEvent)
 {
+  if (theEvent->key() == Qt::Key_H) {
+    myShowHighlight = false;
+  }
   emit keyRelease(theWnd, theEvent);
 }
 
@@ -503,11 +525,142 @@ void XGUI_ViewerProxy::updateHighlight()
 #ifdef HAVE_SALOME
 void XGUI_ViewerProxy::onMouseMove(ModuleBase_IViewWindow* theWnd, QMouseEvent* theEvent)
 {
-  updateHighlight();
+  if (myIs2dMode) {
+    bool aHighlight2d =
+      ModuleBase_Preferences::resourceMgr()->booleanValue("Viewer", "highlighting-2d", true);
+    if (aHighlight2d || myShowHighlight)
+      updateHighlight();
+    else
+      eraseHighlight();
+  }
+  else {
+    bool aHighlight3d =
+      ModuleBase_Preferences::resourceMgr()->booleanValue("Viewer", "highlighting-3d", false);
+    if (aHighlight3d || myShowHighlight)
+      updateHighlight();
+    else
+      eraseHighlight();
+  }
   emit mouseMove(theWnd, theEvent);
 }
+
+void XGUI_ViewerProxy::onKeyPress(ModuleBase_IViewWindow* theWnd, QKeyEvent* theEvent)
+{
+  myShowHighlight = theEvent->key() == Qt::Key_H;
+  emit keyPress(theWnd, theEvent);
+}
+
+void XGUI_ViewerProxy::onKeyRelease(ModuleBase_IViewWindow* theWnd, QKeyEvent* theEvent)
+{
+  if (theEvent->key() == Qt::Key_H) {
+    myShowHighlight = false;
+  }
+  emit keyRelease(theWnd, theEvent);
+}
 #endif
 
+
+bool XGUI_ViewerProxy::isColorScaleVisible() const
+{
+#ifdef HAVE_SALOME
+  return myWorkshop->salomeConnector()->viewer()->isColorScaleVisible();
+#else
+  return myWorkshop->mainWindow()->viewer()->isColorScaleVisible();
+#endif
+}
+
+void XGUI_ViewerProxy::setColorScaleShown(bool on)
+{
+#ifdef HAVE_SALOME
+  myWorkshop->salomeConnector()->viewer()->setColorScaleShown(on);
+#else
+  myWorkshop->mainWindow()->viewer()->setColorScaleShown(on);
+#endif
+}
+
+void XGUI_ViewerProxy::setColorScalePosition(double theX, double theY)
+{
+#ifdef HAVE_SALOME
+  myWorkshop->salomeConnector()->viewer()->setColorScalePosition(theX, theY);
+#else
+  QWidget* aWindow = activeViewPort();
+  Handle(AIS_ColorScale) aColorScale = myWorkshop->mainWindow()->viewer()->colorScale();
+  aColorScale->SetPosition(aWindow->width() * theX, aWindow->height() * theY);
+#endif
+}
+
+void XGUI_ViewerProxy::setColorScaleSize(double theW, double theH)
+{
+#ifdef HAVE_SALOME
+  myWorkshop->salomeConnector()->viewer()->setColorScaleSize(theW, theH);
+#else
+  QWidget* aWindow = activeViewPort();
+  Handle(AIS_ColorScale) aColorScale = myWorkshop->mainWindow()->viewer()->colorScale();
+  aColorScale->SetSize(aWindow->width() * theW, aWindow->height() * theH);
+#endif
+}
+
+void XGUI_ViewerProxy::setColorScaleRange(double theMin, double theMax)
+{
+#ifdef HAVE_SALOME
+  myWorkshop->salomeConnector()->viewer()->setColorScaleRange(theMin, theMax);
+#else
+  Handle(AIS_ColorScale) aColorScale = myWorkshop->mainWindow()->viewer()->colorScale();
+  aColorScale->SetRange(theMin, theMax);
+#endif
+}
+
+void XGUI_ViewerProxy::setColorScaleIntervals(int theNb)
+{
+#ifdef HAVE_SALOME
+  myWorkshop->salomeConnector()->viewer()->setColorScaleIntervals(theNb);
+#else
+  Handle(AIS_ColorScale) aColorScale = myWorkshop->mainWindow()->viewer()->colorScale();
+  aColorScale->SetNumberOfIntervals(theNb);
+#endif
+}
+
+void XGUI_ViewerProxy::setColorScaleTextHeigth(int theH)
+{
+#ifdef HAVE_SALOME
+  myWorkshop->salomeConnector()->viewer()->setColorScaleTextHeigth(theH);
+#else
+  Handle(AIS_ColorScale) aColorScale = myWorkshop->mainWindow()->viewer()->colorScale();
+  aColorScale->SetTextHeight(theH);
+#endif
+}
+
+void XGUI_ViewerProxy::setColorScaleTitle(const QString& theText)
+{
+#ifdef HAVE_SALOME
+  myWorkshop->salomeConnector()->viewer()->setColorScaleTitle(theText);
+#else
+  Handle(AIS_ColorScale) aColorScale = myWorkshop->mainWindow()->viewer()->colorScale();
+  aColorScale->SetTitle(theText.toStdString().c_str());
+#endif
+}
+
+
+//******************************************************
+void XGUI_ViewerProxy::setupColorScale()
+{
+  SUIT_ResourceMgr* aResMgr = ModuleBase_Preferences::resourceMgr();
+  double aX = aResMgr->doubleValue("Viewer", "scalar_bar_x_position", 0.03);
+  double aY = aResMgr->doubleValue("Viewer", "scalar_bar_y_position", 0.35);
+  setColorScalePosition(aX, aY);
+
+  double aW = aResMgr->doubleValue("Viewer", "scalar_bar_width", 0.2);
+  double aH = aResMgr->doubleValue("Viewer", "scalar_bar_height", 0.5);
+  setColorScaleSize(aW, aH);
+
+  int aT = aResMgr->integerValue("Viewer", "scalar_bar_text_height", 14);
+  setColorScaleTextHeigth(aT);
+
+  int aN = aResMgr->integerValue("Viewer", "scalar_bar_nb_intervals", 20);
+  setColorScaleIntervals(aN);
+}
+
+
 //***************************************
 //void XGUI_ViewerProxy::Zfitall()
 //{