]> AND Private Git Repository - blast.git/blobdiff - InterfaceItem.cpp
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
finalized analysis with clkconvert + started testbench gen.
[blast.git] / InterfaceItem.cpp
index 10158d7bd7a97a78fb4b3ce1d8e06d6d4559fee6..7ee68c628f967731aafc5b4e5f27f961ba89a908 100644 (file)
@@ -4,6 +4,7 @@
 #include "GroupInterface.h"
 #include "FunctionalInterface.h"
 #include "BoxItem.h"
+#include "ReferenceInterface.h"
 
 int InterfaceItem::counter = 0;
 
@@ -11,7 +12,7 @@ InterfaceItem::InterfaceItem(double _position,
                              int _orientation,
                              ConnectedInterface *_refInter,
                              AbstractBoxItem* _owner,
-                             Parameters* _params) {
+                             Parameters* _params, bool forceVisible) {
   positionRatio = _position;
   orientation = _orientation;
   refInter = _refInter;
@@ -24,7 +25,7 @@ InterfaceItem::InterfaceItem(double _position,
   nameWidth = fmName.width(refInter->getName());
   nameHeight = fmName.height();
   // by default, only data interface are visible
-  if (refInter->getPurpose() == AbstractInterface::Data) {
+  if ((forceVisible) || (refInter->getPurpose() == AbstractInterface::Data)) {
     visible = true;
   }
   else {
@@ -45,6 +46,15 @@ QString InterfaceItem::getName() {
   return refInter->getName();
 }
 
+QString InterfaceItem::getReferenceName() {
+  if (!refInter->isFunctionalInterface()) {
+    return "no_refname_for_groupiface";
+  }
+  FunctionalInterface* iface = AI_TO_FUN(refInter);
+  ReferenceInterface* refIface = iface->getReference();
+  return refIface->getName();
+}
+
 void InterfaceItem::updateName(QString name) {  
   QFontMetrics fmName(params->defaultIfaceFont);
   nameWidth = fmName.width(refInter->getName());
@@ -98,7 +108,7 @@ void InterfaceItem::paint(QPainter *painter) {
       if(owner->isBoxItem()) {
         painter->setPen(QPen(Qt::black,1));
       }
-      else if(owner->isSourceItem()) {
+      else if(owner->isStimuliItem()) {
         painter->setPen(QPen(Qt::darkCyan,1));
       }
     }
@@ -118,16 +128,29 @@ void InterfaceItem::paint(QPainter *painter) {
     }
 
     // draw arrows
-    if(refInter->getDirection() == AbstractInterface::Input) {
-      painter->drawPath(params->inArrow);
+    if ( (refInter->getPurpose() == AbstractInterface::Clock) || (refInter->getPurpose() == AbstractInterface::Reset)) {
+      painter->drawPath(params->clkrstArrow);
+    }
+    else if(refInter->getDirection() == AbstractInterface::Input) {
+      painter->drawPath(params->dataArrowIn);
     }
     else if(refInter->getDirection() == AbstractInterface::Output) {
-      painter->drawPath(params->outArrow);
+      painter->drawPath(params->dataArrowOut);
     } else if(refInter->getDirection() == AbstractInterface::InOut) {
-      painter->drawPath(params->inArrow);
-      painter->drawPath(params->outArrow);
+      painter->drawPath(params->dataArrowIn);
+      painter->drawPath(params->dataArrowOut);
+    }
+
+    // paint modifier box if needed
+    ConnectedInterface* connIface = AI_TO_CON(refInter->getAssociatedIface());
+    if ((connIface != NULL) && (connIface->getInputModifier() != NULL)) {
+      painter->save();
+      painter->translate(params->arrowWidth+params->arrowLineLength,0);
+      painter->drawRect(0,-5,10,10);
+      painter->restore();
     }
 
+
     // draw names
     if(selected) {
       painter->setPen(QPen(Qt::red,2));
@@ -152,7 +175,7 @@ void InterfaceItem::paint(QPainter *painter) {
       if(owner->isGroupItem()){
         painter->drawText(-(w+params->arrowWidth+params->arrowLineLength),-h/2,w,h,Qt::AlignLeft | Qt::TextWordWrap, refInter->getName());
       }
-      else if((owner->isBoxItem()) || (owner->isSourceItem())){
+      else if((owner->isBoxItem()) || (owner->isStimuliItem())){
         painter->drawText(0,-h/2,w,h,Qt::AlignRight | Qt::TextWordWrap, refInter->getName());
       }
     }
@@ -161,10 +184,12 @@ void InterfaceItem::paint(QPainter *painter) {
       if(owner->isGroupItem()) {
         painter->drawText(params->arrowWidth+params->arrowLineLength,-h/2,w,h,Qt::AlignRight | Qt::TextWordWrap, refInter->getName());
       }
-      else if((owner->isBoxItem()) || (owner->isSourceItem())){     
+      else if((owner->isBoxItem()) || (owner->isStimuliItem())){     
         painter->drawText(-w,-h/2,w,h,Qt::AlignLeft | Qt::TextWordWrap, refInter->getName());
       }
-    }    
+    }
+
+
 
     painter->restore();
   }