diff --git a/conducteur.cpp b/conducteur.cpp index 5ffac6300..d01d3af1e 100644 --- a/conducteur.cpp +++ b/conducteur.cpp @@ -25,6 +25,7 @@ Conducteur::Conducteur(Borne *p1, Borne* p2, Element *parent, QGraphicsScene *sc setPen(t); // calcul du rendu du conducteur calculeConducteur(); + setFlags(QGraphicsItem::ItemIsSelectable); } /** @@ -48,14 +49,6 @@ void Conducteur::update(qreal x, qreal y, qreal width, qreal height) { QGraphicsPathItem::update(x, y, width, height); } -/** - Destructeur du Conducteur. Avant d'etre detruit, le conducteur se decroche des bornes - auxquelles il est lie. -*/ -/*Conducteur::~Conducteur() { - -}*/ - /** Met a jour le QPainterPath constituant le conducteur pour obtenir un conducteur uniquement compose de droites reliant les deux bornes. @@ -125,12 +118,30 @@ void Conducteur::calculeConducteur() { @param qsogi Les options de style pour le conducteur @param qw Le QWidget sur lequel on dessine */ -void Conducteur::paint(QPainter *qp, const QStyleOptionGraphicsItem *qsogi, QWidget *qw) { +void Conducteur::paint(QPainter *qp, const QStyleOptionGraphicsItem */*qsogi*/, QWidget */*qw*/) { qp -> save(); qp -> setRenderHint(QPainter::Antialiasing, false); qp -> setRenderHint(QPainter::TextAntialiasing, false); qp -> setRenderHint(QPainter::SmoothPixmapTransform, false); - QGraphicsPathItem::paint(qp, qsogi, qw); + + // recupere le QPen et la QBrush du QPainter + QPen pen = qp -> pen(); + QBrush brush = qp -> brush(); + + // attributs par defaut + pen.setJoinStyle(Qt::MiterJoin); + pen.setCapStyle(Qt::SquareCap); + pen.setColor(isSelected() ? Qt::red : Qt::black); + pen.setStyle(Qt::SolidLine); + pen.setWidthF(1.0); + brush.setStyle(Qt::NoBrush); + + // affectation du QPen et de la QBrush modifies au QPainter + qp -> setPen(pen); + qp -> setBrush(brush); + + qp -> drawPath(path()); + //QGraphicsPathItem::paint(qp, qsogi, qw); qp -> restore(); } diff --git a/schemavue.cpp b/schemavue.cpp index 9387e9a7d..c00a963ac 100644 --- a/schemavue.cpp +++ b/schemavue.cpp @@ -81,19 +81,27 @@ void SchemaVue::selectInvert() { Supprime les composants selectionnes */ void SchemaVue::supprimer() { - QList garbage_elmt; - QList garbage_conducteurs; - // useless but careful : creating two lists : one for wires, one for elements + QList garbage_elmt; + QList garbage_conducteurs; + + // creation de deux listes : une pour les conducteurs, une pour les elements foreach (QGraphicsItem *qgi, scene -> selectedItems()) { - if (!garbage_elmt.contains(qgi)) garbage_elmt.append(qgi); - // pour chaque enfant de l'element - foreach (QGraphicsItem *child, qgi -> children()) { - // si cet enfant est une borne - if (Borne *p = qgraphicsitem_cast(child)) { - // alors chaque conducteur de la borne est recense - foreach (Conducteur *f, p -> conducteurs()) { - if (!garbage_conducteurs.contains(f)) garbage_conducteurs.append(f); + // pour chaque qgi selectionne, il s'agit soit d'un element soit d'un conducteur + if (qgraphicsitem_cast(qgi)) { + // s'il s'agit d'un conducteur, on le met dans la liste des conducteurs + if (!garbage_conducteurs.contains(qgi)) garbage_conducteurs.append(qgi); + } else if (qgraphicsitem_cast(qgi)) { + // s'il s'agit d'un element, on veille a enlever ses conducteurs + if (!garbage_elmt.contains(qgi)) garbage_elmt.append(qgi); + // pour chaque enfant de l'element + foreach (QGraphicsItem *child, qgi -> children()) { + // si cet enfant est une borne + if (Borne *p = qgraphicsitem_cast(child)) { + // alors chaque conducteur de la borne est recense + foreach (Conducteur *f, p -> conducteurs()) { + if (!garbage_conducteurs.contains(f)) garbage_conducteurs.append(f); + } } } }