start work to define if conductor text item was moved by user or not

git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@2229 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
blacksun
2013-06-09 19:09:27 +00:00
parent c3aedf2a16
commit d91d60aed2
4 changed files with 50 additions and 3 deletions

View File

@@ -1113,6 +1113,7 @@ ConductorSegment *Conductor::middleSegment() {
void Conductor::calculateTextItemPosition() { void Conductor::calculateTextItemPosition() {
if (!text_item) return; if (!text_item) return;
//position
if (text_item -> wasMovedByUser()) { if (text_item -> wasMovedByUser()) {
// le champ de texte a ete deplace par l'utilisateur : // le champ de texte a ete deplace par l'utilisateur :
// on verifie qu'il est encore a proximite du conducteur // on verifie qu'il est encore a proximite du conducteur
@@ -1124,8 +1125,11 @@ void Conductor::calculateTextItemPosition() {
} else { } else {
// positionnement automatique basique // positionnement automatique basique
text_item -> setPos(middleSegment() -> middle()); text_item -> setPos(middleSegment() -> middle());
middleSegment() -> isVertical()? text_item -> setRotationAngle(properties_.verti_rotate_text): //rotation
text_item -> setRotationAngle(properties_.horiz_rotate_text); if (!text_item -> wasRotateByUser()) {
middleSegment() -> isVertical()? text_item -> setRotationAngle(properties_.verti_rotate_text):
text_item -> setRotationAngle(properties_.horiz_rotate_text);
}
} }
} }

View File

@@ -28,6 +28,7 @@ ConductorTextItem::ConductorTextItem(Conductor *parent_conductor, Diagram *paren
DiagramTextItem(parent_conductor, parent_diagram), DiagramTextItem(parent_conductor, parent_diagram),
parent_conductor_(parent_conductor), parent_conductor_(parent_conductor),
moved_by_user_(false), moved_by_user_(false),
rotate_by_user_(false),
first_move_(true) first_move_(true)
{ {
// par defaut, les DiagramTextItem sont Selectable et Movable // par defaut, les DiagramTextItem sont Selectable et Movable
@@ -44,6 +45,7 @@ ConductorTextItem::ConductorTextItem(const QString &text, Conductor *parent_cond
DiagramTextItem(text, parent_conductor, parent_diagram), DiagramTextItem(text, parent_conductor, parent_diagram),
parent_conductor_(parent_conductor), parent_conductor_(parent_conductor),
moved_by_user_(false), moved_by_user_(false),
rotate_by_user_(false),
first_move_(true) first_move_(true)
{ {
// par defaut, les DiagramTextItem sont Selectable et Movable // par defaut, les DiagramTextItem sont Selectable et Movable
@@ -107,6 +109,14 @@ bool ConductorTextItem::wasMovedByUser() const {
return(moved_by_user_); return(moved_by_user_);
} }
/**
* @brief ConductorTextItem::wasRotateByUser
* @return true if text was explicit moved by user else false
*/
bool ConductorTextItem::wasRotateByUser() const {
return(rotate_by_user_);
}
/** /**
@param moved_by_user true pour que la position du texte soit consideree @param moved_by_user true pour que la position du texte soit consideree
comme ayant ete definie par l'utilisateur (et donc soit sauvegardee), false comme ayant ete definie par l'utilisateur (et donc soit sauvegardee), false
@@ -122,6 +132,21 @@ void ConductorTextItem::forceMovedByUser(bool moved_by_user) {
} }
/**
* @brief ConductorTextItem::forceRotateByUser
* @param rotate_by_user true pour que la rotation du texte soit consideree
comme ayant ete definie par l'utilisateur (et donc soit sauvegardee), false
pour remettre le texte a sont angle originelle
*/
void ConductorTextItem::forceRotateByUser(bool rotate_by_user) {
if (rotate_by_user == rotate_by_user_) return;
rotate_by_user_ = rotate_by_user;
if (!rotate_by_user && parent_conductor_) {
parent_conductor_ -> adjustTextItemPosition();
}
}
/** /**
Gere les clics de souris lies au champ de texte Gere les clics de souris lies au champ de texte
@param e Objet decrivant l'evenement souris @param e Objet decrivant l'evenement souris

View File

@@ -48,7 +48,9 @@ class ConductorTextItem : public DiagramTextItem {
public: public:
virtual int type() const { return Type; } virtual int type() const { return Type; }
virtual bool wasMovedByUser() const; virtual bool wasMovedByUser() const;
virtual bool wasRotateByUser() const;
virtual void forceMovedByUser(bool); virtual void forceMovedByUser(bool);
virtual void forceRotateByUser(bool);
protected: protected:
virtual void mousePressEvent(QGraphicsSceneMouseEvent *); virtual void mousePressEvent(QGraphicsSceneMouseEvent *);
@@ -59,6 +61,7 @@ class ConductorTextItem : public DiagramTextItem {
private: private:
Conductor *parent_conductor_; Conductor *parent_conductor_;
bool moved_by_user_; bool moved_by_user_;
bool rotate_by_user_;
QPointF before_mov_pos_; QPointF before_mov_pos_;
bool first_move_; bool first_move_;
QPointF mouse_to_origin_movement_; QPointF mouse_to_origin_movement_;

View File

@@ -601,7 +601,18 @@ void RotateElementsCommand::undo() {
rotateElement(e, elements_to_rotate[e]); rotateElement(e, elements_to_rotate[e]);
} }
foreach(DiagramTextItem *dti, texts_to_rotate) { foreach(DiagramTextItem *dti, texts_to_rotate) {
dti -> rotateBy(-applied_rotation_angle_); //ConductorTextItem have got a default rotation propertie
//so we apply specific undo method for him
if (ConductorTextItem *cti = qgraphicsitem_cast<ConductorTextItem *>(dti)) {
cti -> forceRotateByUser(previous_rotate_by_user_);
//previous_rotate_by_user is false mean the rotation is propertie rotation
if (previous_rotate_by_user_ == false) {cti -> parentConductor() ->adjustTextItemPosition();}
else {cti -> rotateBy(-applied_rotation_angle_);}
}
//this isn't a ConductorTextItem
else {
dti -> rotateBy(-applied_rotation_angle_);
}
} }
} }
@@ -611,6 +622,10 @@ void RotateElementsCommand::redo() {
rotateElement(e, e -> orientation().next()); rotateElement(e, e -> orientation().next());
} }
foreach(DiagramTextItem *dti, texts_to_rotate) { foreach(DiagramTextItem *dti, texts_to_rotate) {
if (ConductorTextItem *cti = qgraphicsitem_cast<ConductorTextItem *>(dti)) {
previous_rotate_by_user_ = cti -> wasRotateByUser();
cti -> forceRotateByUser(true);
}
dti -> rotateBy(applied_rotation_angle_); dti -> rotateBy(applied_rotation_angle_);
} }
} }