Salome HOME
Fix for IPAL10509 : Color of nodes is lost: was yellow - now is like background.
[modules/superv.git] / src / SUPERVGUI / SUPERVGUI_CanvasNodePrs.cxx
index cda5aaf2762d5a9c2a1a7a0b7d841b54bb277b4f..d82abd2a81bec413dc67b51a4faebf7120ff500c 100644 (file)
@@ -11,6 +11,9 @@ using namespace std;
 #include "SUPERVGUI_CanvasNode.h"
 #include "SUPERVGUI_CanvasPort.h"
 #include "SUPERVGUI_Canvas.h"
+#include "SUPERVGUI_CanvasCellNodePrs.h"
+
+#include "SUIT_ResourceMgr.h"
 
 //#define CHECKTIME
 
@@ -27,10 +30,12 @@ using namespace std;
 //=====================================================================
 // Node presentation
 //=====================================================================
-SUPERVGUI_CanvasNodePrs::SUPERVGUI_CanvasNodePrs(QCanvas* theCanvas, 
-                                                SUPERVGUI_CanvasNode* theNode):
+SUPERVGUI_CanvasNodePrs::SUPERVGUI_CanvasNodePrs( SUIT_ResourceMgr* mgr, QCanvas* theCanvas, 
+                                                 SUPERVGUI_CanvasNode* theNode,
+                                                 bool theCellPrs):
   QCanvasPolygonalItem(theCanvas),
-  myNode(theNode)
+  myNode(theNode),
+  myMgr( mgr )
 {
   Trace("SUPERVGUI_CanvasNodePrs::SUPERVGUI_CanvasNodePrs");
   myWidth = LABEL_WIDTH;
@@ -46,25 +51,34 @@ SUPERVGUI_CanvasNodePrs::SUPERVGUI_CanvasNodePrs(QCanvas* theCanvas,
 
   myLabelVisible = true;
   myPortVisible = true;
+  myCellPrs = theCellPrs;
 
-  myColor = MAIN_BACK;
+  myColor = mgr->colorValue( "SUPERVGraph", "NodeBody", DEF_MAIN_BACK );
 
-  // create in/out connection points prs
-  myPointIn = new SUPERVGUI_CanvasHookPrs(theCanvas, this, true);
-  myPointOut = new SUPERVGUI_CanvasHookPrs(theCanvas, this, false);
+  if (!myCellPrs) {
+    // create in/out connection points prs
+    myPointIn = new SUPERVGUI_CanvasHookPrs(theCanvas, this, true);
+    myPointOut = new SUPERVGUI_CanvasHookPrs(theCanvas, this, false);
 
-  setZ(0);
-  setState(myNode->getEngine()->State());
-  updatePorts();
+    setZ(0);
+    setState(myNode->getEngine()->State());
+    updatePorts();
+  }
 }
 
 
 SUPERVGUI_CanvasNodePrs::~SUPERVGUI_CanvasNodePrs() 
 {
-  Trace("SUPERVGUI_CanvasNodePrs::~SUPERVGUI_CanvasNodePrs");
-  if (myPointIn) delete myPointIn;
-  if (myPointOut) delete myPointOut;
-  hide();
+  if ( !myCellPrs ) {
+    if ( myPointIn ) {
+      delete myPointIn;
+      myPointIn = 0;
+    }
+    if ( myPointOut ) {
+      delete myPointOut;
+      myPointOut = 0;
+    }
+  }
 }
 
 int SUPERVGUI_CanvasNodePrs::rtti() const
@@ -199,8 +213,10 @@ void SUPERVGUI_CanvasNodePrs::moveBy(double dx, double dy)
     }
   }
 
-  myPointIn->moveBy(dx, dy);
-  myPointOut->moveBy(dx, dy);
+  if (!myCellPrs) {
+    myPointIn->moveBy(dx, dy);
+    myPointOut->moveBy(dx, dy);
+  }
 }
 
 void SUPERVGUI_CanvasNodePrs::setZ(double z)
@@ -257,7 +273,7 @@ void SUPERVGUI_CanvasNodePrs::setLabelVisible(bool b)
 
   myLabelVisible = b;
   updatePorts();
-  if (!isPortVisible()) updatePoints();
+  if (!isPortVisible() && !myCellPrs) updatePoints();
 
   if (aDisp) {
     show();
@@ -272,16 +288,20 @@ void SUPERVGUI_CanvasNodePrs::setPortVisible(bool b)
 
   myPortVisible = b;
   if (b) {
-    myPointIn->hide();
-    myPointOut->hide();
+    if (!myCellPrs) {
+      myPointIn->hide();
+      myPointOut->hide();
+    }
 
     updateGates();
   }
   else {
-    updatePoints();
-
-    myPointIn->show();
-    myPointOut->show();
+    if (!myCellPrs) {
+      updatePoints();
+      
+      myPointIn->show();
+      myPointOut->show();
+    }
   }
 
   const QObjectList* list = myNode->children();
@@ -511,7 +531,30 @@ void drawText(QPainter& thePainter, const QString& theText,
   int flags = theHAlign | Qt::AlignVCenter;
   QRect r(theRect.x() + TEXT_MARGIN, theRect.y(), 
          theRect.width() - 2*TEXT_MARGIN, theRect.height());
-  thePainter.drawText(r, flags, theText);
+
+  QWMatrix aMat = thePainter.worldMatrix();
+  if (aMat.m11() != 1.0) { 
+    // for scaled picture only
+    QRect r1 = aMat.mapRect(r);
+    QFont saved = thePainter.font();
+    QFont f(saved);
+    if (f.pointSize() == -1) {
+      f.setPixelSize((int)(f.pixelSize()*aMat.m11()));
+    }
+    else {
+      f.setPointSize((int)(f.pointSize()*aMat.m11()));
+    }
+    thePainter.save();
+    QWMatrix m;
+    thePainter.setWorldMatrix(m);
+    thePainter.setFont(f);
+    thePainter.drawText(r1, flags, theText);
+    thePainter.setFont(saved);
+    thePainter.restore();
+  }
+  else {
+    thePainter.drawText(r, flags, theText);
+  }
 }
 
 void SUPERVGUI_CanvasNodePrs::draw(QPainter& thePainter) 
@@ -555,7 +598,7 @@ void SUPERVGUI_CanvasNodePrs::drawFrame(QPainter& thePainter)
 void SUPERVGUI_CanvasNodePrs::drawTitle(QPainter& thePainter) 
 {
   QBrush saved = thePainter.brush();
-  QBrush br(MAIN_TITLE);
+  QBrush br( myMgr->colorValue( "SUPERVGraph", "Title", DEF_MAIN_TITLE ) );
   thePainter.setBrush(br);
   drawTitleShape(thePainter);
   thePainter.setBrush(saved);
@@ -644,7 +687,7 @@ void SUPERVGUI_CanvasNodePrs::drawGate(QPainter& thePainter)
   QRect r = getGateRect();
   //  r.setHeight(r.height()+1);
   thePainter.drawRect(r);
-  int x0 = (r.left() + r.right())/2;
+  //int x0 = (r.left() + r.right())/2;
   //  thePainter.drawLine(x0, r.top(), x0, r.bottom());
 
   const QObjectList* list = myNode->children();
@@ -700,9 +743,14 @@ void SUPERVGUI_CanvasNodePrs::setState(SUPERV::GraphState theState)
     myStatusColor = red;
     break;
 
+  case SUPERV::LoadingState:
+    myStatus = "Loading";
+    myStatusColor = QColor(56,255,56);
+    break;
+
   default:
     myStatus = "No Status";
-    myStatusColor = MAIN_BACK;
+    myStatusColor = myMgr->colorValue( "SUPERVGraph", "NodeBody", DEF_MAIN_BACK );
     break;
   }
 
@@ -931,7 +979,7 @@ void SUPERVGUI_CanvasHookPrs::init(QCanvas* theCanvas)
 SUPERVGUI_CanvasHookPrs::~SUPERVGUI_CanvasHookPrs()
 {
   hide();
-  if (myLine) {
+  if ( myLine ) {
     delete myLine;
     myLine = 0;
   }
@@ -940,9 +988,9 @@ SUPERVGUI_CanvasHookPrs::~SUPERVGUI_CanvasHookPrs()
 QObject* SUPERVGUI_CanvasHookPrs::getObject() const
 {
   QObject* anObj = 0;
-  if (myNodePrs)
+  if ( myNodePrs )
     anObj = myNodePrs->getNode();
-  else if (myPortPrs)
+  else if ( myPortPrs )
     anObj = myPortPrs->getPort();
   return anObj;
 }