[qet] [970] Lors du deplacement d'un champ de texte rattache a un element, ce dernier est desormais mis en valeur par un halo bleute. |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/qet Archives
]
- To: qet@xxxxxxxxxxxxxxxxxxx
- Subject: [qet] [970] Lors du deplacement d'un champ de texte rattache a un element, ce dernier est desormais mis en valeur par un halo bleute.
- From: subversion@xxxxxxxxxxxxx
- Date: Sun, 25 Apr 2010 14:13:00 +0200
Revision: 970
Author: xavier
Date: 2010-04-25 14:12:59 +0200 (Sun, 25 Apr 2010)
Log Message:
-----------
Lors du deplacement d'un champ de texte rattache a un element, ce dernier est desormais mis en valeur par un halo bleute.
Modified Paths:
--------------
branches/0.3/sources/element.cpp
branches/0.3/sources/element.h
branches/0.3/sources/elementtextitem.cpp
branches/0.3/sources/elementtextitem.h
Modified: branches/0.3/sources/element.cpp
===================================================================
--- branches/0.3/sources/element.cpp 2010-04-25 11:20:09 UTC (rev 969)
+++ branches/0.3/sources/element.cpp 2010-04-25 12:12:59 UTC (rev 970)
@@ -29,7 +29,8 @@
Element::Element(QGraphicsItem *parent, Diagram *scene) :
QObject(),
QGraphicsItem(parent, scene),
- internal_connections(false)
+ internal_connections(false),
+ must_highlight_(false)
{
setZValue(10);
}
@@ -41,6 +42,21 @@
}
/**
+ @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
@param painter Le QPainter utilise pour dessiner l'elment
@param options Les options de style a prendre en compte
@@ -64,6 +80,8 @@
}
}
#endif
+ if (must_highlight_) drawHighlight(painter, options);
+
// Dessin de l'element lui-meme
paint(painter, options);
@@ -227,6 +245,32 @@
}
/**
+ 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.
*/
void Element::updatePixmap() {
Modified: branches/0.3/sources/element.h
===================================================================
--- branches/0.3/sources/element.h 2010-04-25 11:20:09 UTC (rev 969)
+++ branches/0.3/sources/element.h 2010-04-25 12:12:59 UTC (rev 970)
@@ -87,6 +87,8 @@
virtual QString name() const = 0;
Diagram *diagram() const;
+ virtual bool isHighlighted() const;
+ virtual void setHighlighted(bool);
void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *);
QRectF boundingRect() const;
QSize setSize(int, int);
@@ -126,7 +128,9 @@
private:
bool internal_connections;
+ bool must_highlight_;
void drawSelection(QPainter *, const QStyleOptionGraphicsItem *);
+ void drawHighlight(QPainter *, const QStyleOptionGraphicsItem *);
void updatePixmap();
};
Modified: branches/0.3/sources/elementtextitem.cpp
===================================================================
--- branches/0.3/sources/elementtextitem.cpp 2010-04-25 11:20:09 UTC (rev 969)
+++ branches/0.3/sources/elementtextitem.cpp 2010-04-25 12:12:59 UTC (rev 970)
@@ -29,7 +29,8 @@
DiagramTextItem(parent_element, parent_diagram),
parent_element_(parent_element),
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
// cela nous convient, on ne touche pas a ces flags
@@ -48,7 +49,8 @@
DiagramTextItem(text, parent_element, parent_diagram),
parent_element_(parent_element),
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
// cela nous convient, on ne touche pas a ces flags
@@ -243,14 +245,24 @@
QPointF parent_movement = mapMovementToParent(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()) {
+ 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);
}
} else e -> ignore();
@@ -262,6 +274,17 @@
*/
void ElementTextItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *e) {
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())) {
diagram_ptr -> undoStack().push(
new MoveElementsTextsCommand(
Modified: branches/0.3/sources/elementtextitem.h
===================================================================
--- branches/0.3/sources/elementtextitem.h 2010-04-25 11:20:09 UTC (rev 969)
+++ branches/0.3/sources/elementtextitem.h 2010-04-25 12:12:59 UTC (rev 970)
@@ -47,6 +47,7 @@
QPointF original_position;
QPointF known_position_;
qreal original_rotation_angle_;
+ bool first_move_;
// methodes
public: