Il est desormais possible de deplacer les champs de texte des conducteurs.

Leur deplacement est limite aux alentours du trajet de leur conducteur parent,
Reorganisation du code pour tout ce qui est relatif aux deplacements d'items sur les schemas.


git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/branches/0.3@987 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
xavier
2010-05-08 21:24:43 +00:00
parent 89cb80855a
commit c8732714b8
25 changed files with 1177 additions and 287 deletions

View File

@@ -218,6 +218,18 @@ void ElementTextItem::applyRotation(const qreal &angle) {
QGraphicsTextItem::setTransform(rotation, true);
}
/**
Gere le clic sur le champ de texte
@param e Objet decrivant l'evenement souris
*/
void ElementTextItem::mousePressEvent(QGraphicsSceneMouseEvent *e) {
first_move_ = true;
if (e -> modifiers() & Qt::ControlModifier) {
setSelected(!isSelected());
}
DiagramTextItem::mousePressEvent(e);
}
/**
Gere les mouvements de souris lies au champ de texte
@param e Objet decrivant l'evenement souris
@@ -246,13 +258,17 @@ void ElementTextItem::mouseMoveEvent(QGraphicsSceneMouseEvent *e) {
QPointF parent_movement = mapMovementToParent(movement);
setPos(pos() + parent_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;
Diagram *diagram_ptr = diagram();
if (diagram_ptr) {
if (first_move_) {
// on signale le debut d'un deplacement d'ElementTextItems au schema parent
int moved_texts_count = diagram_ptr -> beginMoveElementTexts(this);
// s'il n'y a qu'un seul texte deplace, on met en valeur l'element parent
if (moved_texts_count == 1 && parent_element_) {
parent_element_ -> setHighlighted(true);
parent_element_ -> update();
}
}
/*
@@ -264,9 +280,13 @@ void ElementTextItem::mouseMoveEvent(QGraphicsSceneMouseEvent *e) {
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 -> continueMoveElementTexts(scene_effective_movement);
}
} else e -> ignore();
if (first_move_) {
first_move_ = false;
}
}
/**
@@ -276,28 +296,14 @@ void ElementTextItem::mouseMoveEvent(QGraphicsSceneMouseEvent *e) {
*/
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_) {
// on arrete de mettre en valeur l'element parent
if (parent_element_) {
if (parent_element_ -> isHighlighted()) {
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(
diagram_ptr,
diagram_ptr -> elementTextsToMove(),
diagram_ptr -> current_movement
)
);
diagram_ptr -> current_movement = QPointF();
}
diagram_ptr -> invalidateMovedElements();
diagram_ptr -> endMoveElementTexts();
}
if (!(e -> modifiers() & Qt::ControlModifier)) {
QGraphicsTextItem::mouseReleaseEvent(e);