Esempio n. 1
0
/*!\func
 * calc size
 * \params no
 * \return no
 */
void EdgeAssotiation::adjust()
{
	if (!sourceNode() || !destNode())
		return;
	prepareGeometryChange();
	sourcePoint = sourceNode()->pos() + QPointF(sourceNode()->boundingRect().width()/2, sourceNode()->boundingRect().height()/2);
	destPoint = destNode()->pos() + QPointF(destNode()->boundingRect().width()/2, destNode()->boundingRect().height()/2);
	middlePoint = QPointF(destPoint.x(),sourcePoint.y());
}
Esempio n. 2
0
/*!\func
 * draw edge
 * \params no
 * \return no
 */
void EdgeAssotiation::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *)
{
	if (!sourceNode() || !destNode())
		return;
	QColor color (Qt::black);
	switch (getState()) {
	case OFF:
		color = Qt::gray;
		break;
	case OK:
		color = Qt::green;
		break;
	case WARNING:
	default:
		color = Qt::red;
	}
	painter->setPen(QPen(color, 1, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
	float width = destNode()->boundingRect().width();
	float height = destNode()->boundingRect().height();
	QRectF rect(destNode()->pos().x() , destNode()->pos().y(), width, height);
	width = sourceNode()->boundingRect().width();
	height = sourceNode()->boundingRect().height();
	QRectF rects(sourceNode()->pos().x(), sourceNode()->pos().y(), width, height);
	painter->setBrush(color);
	painter->drawLine(destPoint, middlePoint);
	painter->drawLine(middlePoint, sourcePoint);
	painter->setPen(Qt::SolidLine);
	if(rect.contains(middlePoint))
	{//arrow enter in node by left or right
		int sign = destPoint.x() > sourcePoint.x() ? 1 : -1;
		//QMessageBox::information(0,"","arrow enter in node by left or right");
		QPointF destArrowP1 = QPointF(middlePoint.x() - sign*rect.width()/2, middlePoint.y());
		QPointF destArrowP2 = QPointF(middlePoint.x() - sign*(rect.width()/2 + arrowSize), middlePoint.y()-arrowSize/2);
		QPointF destArrowP3 = QPointF(middlePoint.x() - sign*(rect.width()/2 + arrowSize), middlePoint.y()+arrowSize/2);
		painter->setBrush(color);
		painter->drawPolygon(QPolygonF() << destArrowP3 << destArrowP1 << destArrowP2);
	}
	else
	{//arrow enter in node by top or bottom
		int sign = destPoint.y() > sourcePoint.y() ? 1 : -1;
		//QMessageBox::information(0,"","arrow enter in node by left or right");
		QPointF destArrowP1 = QPointF(destPoint.x(), destPoint.y()-sign*rect.height()/2);
		QPointF destArrowP2 = QPointF(destPoint.x()-arrowSize/2, destPoint.y() - sign*(rect.height()/2 + arrowSize));
		QPointF destArrowP3 = QPointF(destPoint.x()+arrowSize/2, destPoint.y() - sign*(rect.height()/2 + arrowSize));
		painter->setBrush(color);
		painter->drawPolygon(QPolygonF() << destArrowP3 << destArrowP1 << destArrowP2);
	}
	if(rects.contains(middlePoint))
		name->setPos((sourcePoint + destPoint)/2);
	else
	{
		if(sourcePoint.x() < destPoint.x())
			name->setPos(sourcePoint + QPointF(sourceNode()->boundingRect().width()/2,-name->boundingRect().height()));
		else
			name->setPos(sourcePoint + QPointF(-name->boundingRect().width()-sourceNode()->boundingRect().width()/2,-name->boundingRect().height()));
	}
}
Esempio n. 3
0
/*! \func
 * figure
 * \param no
 * \return no
 */
QPainterPath Edge::shape() const
{
	QPainterPath path;
	path.moveTo(destNode()->pos() + QPointF(2,2));
	path.lineTo(sourceNode()->pos() + QPointF(2,2));
	path.lineTo(sourceNode()->pos() + QPointF(-2,-2));
	path.lineTo(destNode()->pos() + QPointF(-2,-2));
	return path;
}
Esempio n. 4
0
GraphicEdge::~GraphicEdge()
{
  MainWindow* mw = dynamic_cast<MainWindow*>(graph->parent());
  mw->net->remove_edge(net_edge);

  sourceNode()->removeEdge(this);
  destNode()->removeEdge(this);
}
Esempio n. 5
0
void Edge2d::adjust()
{
    if (!source || !dest)
        return;

    QLineF line(mapFromItem(source, sourceNode()->getRadius(), sourceNode()->getRadius()),
                mapFromItem(dest, destNode()->getRadius(), destNode()->getRadius()));
    //line centre source à centre dest
    qreal length = line.length();
    prepareGeometryChange();

    //cas ou les 2 nodes se chevauchent, on n'afficher pas l'edge
    if (length > qreal(sourceNode()->getRadius() + destNode()->getRadius())) {
      //  QPointF edgeOffsetSource((line.dx() * sqrt(2) * sourceNode()->getRadius()*2) / length, (line.dy() * 12) / length);
        //QPointF edgeOffsetDest((line.dx() * 25) / length, (line.dy() * 25) / length);
        sourcePoint = line.p1();// + edgeOffsetSource;
        destPoint = line.p2();// - edgeOffsetDest;
    } else {
        sourcePoint = destPoint = line.p1();
    }
}
Esempio n. 6
0
/*! \func
 * rect
 * \params no
 * \return no
 */
QRectF EdgeAssotiation::boundingRect() const
{
	if (!sourceNode() || !destNode())
		return QRectF();
	if(sourcePoint == destPoint)
	{
		return QRectF(destPoint.x() - 28, destPoint.y() - 28, 30, 30);
	}
	QPointF leftTop(qMin(sourcePoint.x(), destPoint.x())-arrowSize, qMin(sourcePoint.y(), destPoint.y())-arrowSize);
	QSizeF size(abs(sourcePoint.x() - destPoint.x())+2*arrowSize, abs(sourcePoint.y() - destPoint.y())+2*arrowSize);
	return QRectF(leftTop, size);
}
Esempio n. 7
0
/*! \func
 * draw all
 * \param
 * - painter - painter device
 * \return no
 */
void Edge::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *)
{
	static const double Pi = 3.14159265358979323846264338327950288419717;
	static double TwoPi = 2.0 * Pi;

	if (!source || !dest)
		return;
	QColor color (Qt::black);
	switch (state) {
	case OFF:
		color = Qt::gray;
		break;
	case OK:
		color = Qt::green;
		break;
	case WARNING:
	default:
		color = Qt::red;
	}

	// Draw the line itself
	if(sourceNode()->getId() == destNode()->getId())
	{
		painter->setPen(QPen(color, 1, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
		painter->drawEllipse(destPoint.x() - 28, destPoint.y() - 28, 30, 30);
		painter->setPen(Qt::black);
		//painter->drawText(destPoint+QPoint(-28,-14), name);
	}
	else
	{
		QLineF line(sourcePoint, destPoint);
		painter->setPen(QPen(color, 1, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
		painter->drawLine(line);
		// Draw the arrows if there's enough room
		double angle = ::acos(line.dx() / line.length());
		if (line.dy() >= 0)
			angle = TwoPi - angle;
		QPointF destArrowP1 = destPoint + QPointF(sin(angle - Pi / 3) * arrowSize,
							  cos(angle - Pi / 3) * arrowSize);
		QPointF destArrowP2 = destPoint + QPointF(sin(angle - Pi + Pi / 3) * arrowSize,
							  cos(angle - Pi + Pi / 3) * arrowSize);
		QPointF destArrowP3 = destPoint + QPointF(sin(angle + Pi / 2) * arrowSize,
							  cos(angle + Pi / 2) * arrowSize);
		painter->setBrush(color);
		painter->drawPolygon(QPolygonF() << destArrowP3 << destArrowP1 << destArrowP2);
		painter->setPen(Qt::black);
		//painter->drawText((destPoint + sourcePoint)/2, name);
		name->setPos((destPoint + sourcePoint)/2);
	}
}
Esempio n. 8
0
status_t copy_attributes(const entry_ref& source, const entry_ref& dest)
{
	status_t err;
	unsigned char* buffer;
	buffer = new unsigned char[BUFFERLEN];

	BNode srcNode(&source);
	if ((err = srcNode.InitCheck()) != B_NO_ERROR)
		return err;

	BNode destNode(&dest);
	if ((err = destNode.InitCheck()) != B_NO_ERROR)
		return err;


	char attrName[B_ATTR_NAME_LENGTH];
	srcNode.RewindAttrs();
	while ((err = srcNode.GetNextAttrName(attrName)) == B_NO_ERROR) {
		attr_info info;

		if ((err = srcNode.GetAttrInfo(attrName, &info)) != B_NO_ERROR)
			return err;

		ssize_t nRead;
		off_t offset = 0;
		while ((offset < info.size) && ((nRead = srcNode.ReadAttr(attrName, info.type, offset, buffer, BUFFERLEN)) > 0)) {
			err = destNode.WriteAttr(attrName, info.type, offset, buffer, nRead);
			if (err < 0)
				return err;

			offset += nRead;
		}
	}

	delete buffer;

	return B_OK;
}
Esempio n. 9
0
//! remove
void Edge::Remove()
{
	hide();
	sourceNode()->delEdge(this);
	destNode()->delEdge(this);
}