HAL
graphics_node.cpp
Go to the documentation of this file.
2 
4 
5 #include <QApplication>
6 #include <QFontMetricsF>
7 
8 namespace hal
9 {
12  qreal GraphicsNode::sTextFontHeight[3] = {0, 0, 0};
13 
14 
16  : GraphicsItem(type, id), mMaxTextWidth(0)
17  {
19 
20  //setFlags(QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemSendsGeometryChanges | ItemIsFocusable);
21  //setAcceptHoverEvents(true);
22  }
23 
25  {
26  QFont font = QFont("Iosevka");
27  font.setPixelSize(graph_widget_constants::sFontSize);
28 
29  for (int iline=0; iline<3; iline++)
30  {
31  sTextFont[iline] = font;
32  QFontMetricsF fmf(font);
33  sTextFontHeight[iline] = fmf.height();
34  }
35  }
36 
37  void GraphicsNode::setNodeText(const QString* lines, bool init)
38  {
39  for (int iline=0; iline<3; iline++)
40  {
41  if (lines[iline].isEmpty()) continue;
42  QFontMetricsF fmf(sTextFont[iline]);
43  mNodeText[iline] = lines[iline];
44  qreal textWidth = fmf.width(mNodeText[iline]);
45  if (init)
46  {
47  if (textWidth > mMaxTextWidth)
48  mMaxTextWidth = textWidth;
49  }
50  else
51  {
52  if (textWidth > mMaxTextWidth)
53  {
54  QString shorter = mNodeText[iline];
55  while (!mNodeText[iline].isEmpty() && textWidth > mMaxTextWidth)
56  {
57  shorter.chop(1);
58  textWidth = fmf.width(shorter + "…");
59  }
60  mNodeText[iline] = shorter + "…";
61  }
62  mTextPosition[iline].setX(mWidth / 2 - textWidth / 2);
63  }
64  }
65  }
66 
67  void GraphicsNode::initTextPosition(qreal y0, qreal spacing)
68  {
69  for (int iline=0; iline<3; iline++)
70  {
71  QFontMetricsF fmf(sTextFont[iline]);
72  qreal textWidth = fmf.width(mNodeText[iline]);
73  y0 += sTextFontHeight[iline];
74  mTextPosition[iline].setX(mWidth / 2 - textWidth / 2);
75  mTextPosition[iline].setY(y0);
76  y0 += spacing;
77  }
78  }
79 
80 
82  {
83  return QRectF(0, 0, mWidth, mHeight);
84  }
85 
87  {
88  QPainterPath path;
89  path.addRect(QRectF(0, 0, mWidth, mHeight));
90  return path;
91  }
92 
94  {
96 
97  mColor = v.mMainColor;
98  }
99 
100  qreal GraphicsNode::width() const
101  {
102  return mWidth;
103  }
104 
105  qreal GraphicsNode::height() const
106  {
107  return mHeight;
108  }
109 
111  {
112  if (mInputByNet.isEmpty()) return QList<u32>();
113  int n = mInputByNet.size();
114  QVector<u32> retval(n);
115  for (auto it=mInputByNet.constBegin(); it!=mInputByNet.constEnd(); ++it)
116  {
117  Q_ASSERT(it.value() < n);
118  retval[it.value()] = it.key();
119  }
120  return retval.toList();
121  }
122 
124  {
125  if (mOutputByNet.isEmpty()) return QList<u32>();
126  int n = mOutputByNet.size();
127  QVector<u32> retval(n);
128  for (auto it=mOutputByNet.constBegin(); it!=mOutputByNet.constEnd(); ++it)
129  {
130  Q_ASSERT(it.value() < n);
131  retval[it.value()] = it.key();
132  }
133  return retval.toList();
134  }
135 
136  int GraphicsNode::inputByNet(u32 netId) const
137  {
138  return mInputByNet.value(netId,-1);
139  }
140 
142  {
143  return mOutputByNet.value(netId,-1);
144  }
145 
147  {
148  mNodeText[0] = name;
149  }
150 }
Superclass for all graphic items used ins the GraphicsScene. It contains information about the underl...
Definition: graphics_item.h:44
void initTextPosition(qreal y0, qreal spacing)
virtual QRectF boundingRect() const override
QMultiHash< u32, int > mInputByNet
QMultiHash< u32, int > mOutputByNet
static QFont sTextFont[3]
QList< u32 > inputNets() const
virtual QPainterPath shape() const override
QString mNodeText[3]
QPointF mTextPosition[3]
qreal width() const
static qreal sTextFontHeight[3]
GraphicsNode(const ItemType type, const u32 id)
QList< u32 > outputNets() const
int outputByNet(u32 netId) const
qreal height() const
static QColor sTextColor
static void loadSettings()
virtual void setVisuals(const Visuals &v)
void setNodeText(const QString *lines, bool init)
int inputByNet(u32 netId) const
void set_name(const QString &name)
ItemType
The ItemType enum provides the enum type to classify graphic items into Modules, Gates or Nets....
Definition: gui_def.h:45
n
Definition: test.py:6
quint32 u32
PinType type
std::string name
i32 id
void setPixelSize(int pixelSize)
qreal width(const QString &text) const const
qreal height() const const
void setFlags(QGraphicsItem::GraphicsItemFlags flags)
void setVisible(bool visible)
void addRect(const QRectF &rectangle)
void setX(qreal x)
void setY(qreal y)
void chop(int n)
QList< T > toList() const const