mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-04-09 07:59:59 +02:00
Lors du deplacement d'un champ de texte rattache a un element, ce dernier est desormais mis en valeur par un halo bleute.
git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/branches/0.3@970 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
@@ -29,7 +29,8 @@
|
|||||||
Element::Element(QGraphicsItem *parent, Diagram *scene) :
|
Element::Element(QGraphicsItem *parent, Diagram *scene) :
|
||||||
QObject(),
|
QObject(),
|
||||||
QGraphicsItem(parent, scene),
|
QGraphicsItem(parent, scene),
|
||||||
internal_connections(false)
|
internal_connections(false),
|
||||||
|
must_highlight_(false)
|
||||||
{
|
{
|
||||||
setZValue(10);
|
setZValue(10);
|
||||||
}
|
}
|
||||||
@@ -40,6 +41,21 @@ Element::Element(QGraphicsItem *parent, Diagram *scene) :
|
|||||||
Element::~Element() {
|
Element::~Element() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
@return true si l'element est mis en evidence
|
||||||
|
*/
|
||||||
|
bool Element::isHighlighted() const {
|
||||||
|
return(must_highlight_);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
@param hl true pour mettre l'element en evidence, false sinon
|
||||||
|
*/
|
||||||
|
void Element::setHighlighted(bool hl) {
|
||||||
|
must_highlight_ = hl;
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Methode principale de dessin de l'element
|
Methode principale de dessin de l'element
|
||||||
@param painter Le QPainter utilise pour dessiner l'elment
|
@param painter Le QPainter utilise pour dessiner l'elment
|
||||||
@@ -64,6 +80,8 @@ void Element::paint(QPainter *painter, const QStyleOptionGraphicsItem *options,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
if (must_highlight_) drawHighlight(painter, options);
|
||||||
|
|
||||||
// Dessin de l'element lui-meme
|
// Dessin de l'element lui-meme
|
||||||
paint(painter, options);
|
paint(painter, options);
|
||||||
|
|
||||||
@@ -226,6 +244,32 @@ void Element::drawSelection(QPainter *painter, const QStyleOptionGraphicsItem *o
|
|||||||
painter -> restore();
|
painter -> restore();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Dessine le cadre de selection de l'element de maniere systematiquement non antialiasee.
|
||||||
|
@param painter Le QPainter a utiliser pour dessiner les bornes.
|
||||||
|
@param options Les options de style a prendre en compte
|
||||||
|
*/
|
||||||
|
void Element::drawHighlight(QPainter *painter, const QStyleOptionGraphicsItem *options) {
|
||||||
|
Q_UNUSED(options);
|
||||||
|
painter -> save();
|
||||||
|
|
||||||
|
qreal gradient_radius = qMin(boundingRect().width(), boundingRect().height()) / 2.0;
|
||||||
|
QRadialGradient gradient(
|
||||||
|
boundingRect().center(),
|
||||||
|
gradient_radius,
|
||||||
|
boundingRect().center()
|
||||||
|
);
|
||||||
|
gradient.setColorAt(0.0, QColor::fromRgb(69, 137, 255, 255));
|
||||||
|
gradient.setColorAt(1.0, QColor::fromRgb(69, 137, 255, 0));
|
||||||
|
QBrush brush(gradient);
|
||||||
|
|
||||||
|
painter -> setPen(Qt::NoPen);
|
||||||
|
painter -> setBrush(brush);
|
||||||
|
// Le dessin se fait a partir du rectangle delimitant
|
||||||
|
painter -> drawRoundRect(boundingRect().adjusted(1, 1, -1, -1), 10, 10);
|
||||||
|
painter -> restore();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Fonction initialisant et dessinant la pixmap de l'element.
|
Fonction initialisant et dessinant la pixmap de l'element.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -87,6 +87,8 @@ class Element : public QObject, public QGraphicsItem {
|
|||||||
virtual QString name() const = 0;
|
virtual QString name() const = 0;
|
||||||
Diagram *diagram() const;
|
Diagram *diagram() const;
|
||||||
|
|
||||||
|
virtual bool isHighlighted() const;
|
||||||
|
virtual void setHighlighted(bool);
|
||||||
void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *);
|
void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *);
|
||||||
QRectF boundingRect() const;
|
QRectF boundingRect() const;
|
||||||
QSize setSize(int, int);
|
QSize setSize(int, int);
|
||||||
@@ -126,7 +128,9 @@ class Element : public QObject, public QGraphicsItem {
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
bool internal_connections;
|
bool internal_connections;
|
||||||
|
bool must_highlight_;
|
||||||
void drawSelection(QPainter *, const QStyleOptionGraphicsItem *);
|
void drawSelection(QPainter *, const QStyleOptionGraphicsItem *);
|
||||||
|
void drawHighlight(QPainter *, const QStyleOptionGraphicsItem *);
|
||||||
void updatePixmap();
|
void updatePixmap();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -29,7 +29,8 @@ ElementTextItem::ElementTextItem(Element *parent_element, Diagram *parent_diagra
|
|||||||
DiagramTextItem(parent_element, parent_diagram),
|
DiagramTextItem(parent_element, parent_diagram),
|
||||||
parent_element_(parent_element),
|
parent_element_(parent_element),
|
||||||
follow_parent_rotations(false),
|
follow_parent_rotations(false),
|
||||||
original_rotation_angle_(0.0)
|
original_rotation_angle_(0.0),
|
||||||
|
first_move_(true)
|
||||||
{
|
{
|
||||||
// par defaut, les DiagramTextItem sont Selectable et Movable
|
// par defaut, les DiagramTextItem sont Selectable et Movable
|
||||||
// cela nous convient, on ne touche pas a ces flags
|
// cela nous convient, on ne touche pas a ces flags
|
||||||
@@ -48,7 +49,8 @@ ElementTextItem::ElementTextItem(const QString &text, Element *parent_element, D
|
|||||||
DiagramTextItem(text, parent_element, parent_diagram),
|
DiagramTextItem(text, parent_element, parent_diagram),
|
||||||
parent_element_(parent_element),
|
parent_element_(parent_element),
|
||||||
follow_parent_rotations(false),
|
follow_parent_rotations(false),
|
||||||
original_rotation_angle_(0.0)
|
original_rotation_angle_(0.0),
|
||||||
|
first_move_(true)
|
||||||
{
|
{
|
||||||
// par defaut, les DiagramTextItem sont Selectable et Movable
|
// par defaut, les DiagramTextItem sont Selectable et Movable
|
||||||
// cela nous convient, on ne touche pas a ces flags
|
// cela nous convient, on ne touche pas a ces flags
|
||||||
@@ -243,14 +245,24 @@ void ElementTextItem::mouseMoveEvent(QGraphicsSceneMouseEvent *e) {
|
|||||||
QPointF parent_movement = mapMovementToParent(movement);
|
QPointF parent_movement = mapMovementToParent(movement);
|
||||||
setPos(pos() + parent_movement);
|
setPos(pos() + parent_movement);
|
||||||
|
|
||||||
/*
|
|
||||||
Comme setPos() n'est pas oblige d'appliquer exactement la valeur
|
|
||||||
qu'on lui fournit, on calcule le mouvement reellement applique.
|
|
||||||
*/
|
|
||||||
QPointF effective_movement = pos() - old_pos;
|
|
||||||
QPointF scene_effective_movement = mapMovementToScene(mapMovementFromParent(effective_movement));
|
|
||||||
|
|
||||||
if (Diagram *diagram_ptr = diagram()) {
|
if (Diagram *diagram_ptr = diagram()) {
|
||||||
|
int moved_texts_count = diagram_ptr -> elementTextsToMove().count();
|
||||||
|
// s'il n'y a qu'un seul texte deplace, on met en valeur l'element parent
|
||||||
|
if (moved_texts_count == 1 && parent_element_ && first_move_) {
|
||||||
|
parent_element_ -> setHighlighted(true);
|
||||||
|
parent_element_ -> update();
|
||||||
|
first_move_ = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Comme setPos() n'est pas oblige d'appliquer exactement la
|
||||||
|
valeur qu'on lui fournit, on calcule le mouvement reellement
|
||||||
|
applique.
|
||||||
|
*/
|
||||||
|
QPointF effective_movement = pos() - old_pos;
|
||||||
|
QPointF scene_effective_movement = mapMovementToScene(mapMovementFromParent(effective_movement));
|
||||||
|
|
||||||
|
// on applique le mouvement subi aux autres textes a deplacer
|
||||||
diagram_ptr -> moveElementsTexts(scene_effective_movement, this);
|
diagram_ptr -> moveElementsTexts(scene_effective_movement, this);
|
||||||
}
|
}
|
||||||
} else e -> ignore();
|
} else e -> ignore();
|
||||||
@@ -262,6 +274,17 @@ void ElementTextItem::mouseMoveEvent(QGraphicsSceneMouseEvent *e) {
|
|||||||
*/
|
*/
|
||||||
void ElementTextItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *e) {
|
void ElementTextItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *e) {
|
||||||
if (Diagram *diagram_ptr = diagram()) {
|
if (Diagram *diagram_ptr = diagram()) {
|
||||||
|
int moved_texts_count = diagram_ptr -> elementTextsToMove().count();
|
||||||
|
|
||||||
|
// s'il n'y a qu'un seul texte deplace, on arrete de mettre en valeur l'element parent
|
||||||
|
if (moved_texts_count == 1) {
|
||||||
|
first_move_ = true;
|
||||||
|
if (parent_element_) {
|
||||||
|
parent_element_ -> setHighlighted(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// on cree un objet d'annulation correspondant au deplacement qui s'acheve
|
||||||
if ((flags() & QGraphicsItem::ItemIsMovable) && (!diagram_ptr -> current_movement.isNull())) {
|
if ((flags() & QGraphicsItem::ItemIsMovable) && (!diagram_ptr -> current_movement.isNull())) {
|
||||||
diagram_ptr -> undoStack().push(
|
diagram_ptr -> undoStack().push(
|
||||||
new MoveElementsTextsCommand(
|
new MoveElementsTextsCommand(
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ class ElementTextItem : public DiagramTextItem {
|
|||||||
QPointF original_position;
|
QPointF original_position;
|
||||||
QPointF known_position_;
|
QPointF known_position_;
|
||||||
qreal original_rotation_angle_;
|
qreal original_rotation_angle_;
|
||||||
|
bool first_move_;
|
||||||
|
|
||||||
// methodes
|
// methodes
|
||||||
public:
|
public:
|
||||||
|
|||||||
Reference in New Issue
Block a user