mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2025-09-13 20:23:04 +02:00
Fix wrong behavior when move a text item group, with rotation different than 0
git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@5223 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
parent
b626a1344e
commit
8e74d88e65
@ -1480,13 +1480,9 @@ int Diagram::beginMoveElementTexts(QGraphicsItem *driver_item) {
|
|||||||
return(m_element_texts_mover -> beginMovement(this, driver_item));
|
return(m_element_texts_mover -> beginMovement(this, driver_item));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
void Diagram::continueMoveElementTexts(QGraphicsSceneMouseEvent *event)
|
||||||
Prend en compte un mouvement composant un deplacement d'ElementTextItems
|
{
|
||||||
@param movement mouvement a ajouter au deplacement en cours
|
m_element_texts_mover->continueMovement(event);
|
||||||
@see ElementTextsMover
|
|
||||||
*/
|
|
||||||
void Diagram::continueMoveElementTexts(const QPointF &movement) {
|
|
||||||
m_element_texts_mover -> continueMovement(movement);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -194,7 +194,7 @@ class Diagram : public QGraphicsScene
|
|||||||
void continueMoveElements(const QPointF &);
|
void continueMoveElements(const QPointF &);
|
||||||
void endMoveElements();
|
void endMoveElements();
|
||||||
int beginMoveElementTexts(QGraphicsItem * = nullptr);
|
int beginMoveElementTexts(QGraphicsItem * = nullptr);
|
||||||
void continueMoveElementTexts(const QPointF &);
|
void continueMoveElementTexts(QGraphicsSceneMouseEvent *event);
|
||||||
void endMoveElementTexts();
|
void endMoveElementTexts();
|
||||||
bool usesElement(const ElementsLocation &);
|
bool usesElement(const ElementsLocation &);
|
||||||
bool usesTitleBlockTemplate(const QString &);
|
bool usesTitleBlockTemplate(const QString &);
|
||||||
|
@ -51,20 +51,8 @@ int ElementTextsMover::beginMovement(Diagram *diagram, QGraphicsItem *driver_ite
|
|||||||
|
|
||||||
m_diagram = diagram;
|
m_diagram = diagram;
|
||||||
m_movement_driver = driver_item;
|
m_movement_driver = driver_item;
|
||||||
m_last_pos = driver_item->pos();
|
|
||||||
m_items_hash.clear();
|
m_items_hash.clear();
|
||||||
m_text_count = m_group_count =0;
|
m_text_count = m_group_count =0;
|
||||||
// m_texts_hash.clear();
|
|
||||||
// m_grps_hash.clear();
|
|
||||||
|
|
||||||
// for(QGraphicsItem *item : diagram->selectedItems())
|
|
||||||
// {
|
|
||||||
// if (item->type() == ElementTextItem::Type || item->type() == DynamicElementTextItem::Type)
|
|
||||||
// {
|
|
||||||
// DiagramTextItem *dti = static_cast<DiagramTextItem *> (item);
|
|
||||||
// m_texts_hash.insert(dti, dti->pos());
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
for(QGraphicsItem *item : diagram->selectedItems())
|
for(QGraphicsItem *item : diagram->selectedItems())
|
||||||
{
|
{
|
||||||
@ -83,8 +71,6 @@ int ElementTextsMover::beginMovement(Diagram *diagram, QGraphicsItem *driver_ite
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// if (!m_texts_hash.size())
|
|
||||||
// return(-1);
|
|
||||||
|
|
||||||
if(m_items_hash.isEmpty())
|
if(m_items_hash.isEmpty())
|
||||||
return -1;
|
return -1;
|
||||||
@ -92,40 +78,27 @@ int ElementTextsMover::beginMovement(Diagram *diagram, QGraphicsItem *driver_ite
|
|||||||
m_movement_running = true;
|
m_movement_running = true;
|
||||||
|
|
||||||
return m_items_hash.size();
|
return m_items_hash.size();
|
||||||
|
|
||||||
// return(m_texts_hash.size());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
void ElementTextsMover::continueMovement(QGraphicsSceneMouseEvent *event)
|
||||||
* @brief ElementTextsMover::continueMovement
|
|
||||||
* Add @movement to the current movement
|
|
||||||
* The movement must be in scene coordinate.
|
|
||||||
* @param movement
|
|
||||||
*/
|
|
||||||
void ElementTextsMover::continueMovement(const QPointF &movement)
|
|
||||||
{
|
{
|
||||||
if (!m_movement_running || movement.isNull())
|
if(!m_movement_running)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
QPointF move = m_movement_driver->pos() - m_last_pos;
|
|
||||||
m_last_pos = m_movement_driver->pos();
|
|
||||||
|
|
||||||
for(QGraphicsItem *qgi : m_items_hash.keys())
|
for(QGraphicsItem *qgi : m_items_hash.keys())
|
||||||
{
|
{
|
||||||
if(qgi == m_movement_driver)
|
if(qgi == m_movement_driver)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
qgi->setPos(qgi->pos() + move);
|
QPointF current_parent_pos;
|
||||||
|
QPointF button_down_parent_pos;
|
||||||
|
|
||||||
|
current_parent_pos = qgi->mapToParent(qgi->mapFromScene(event->scenePos()));
|
||||||
|
button_down_parent_pos = qgi->mapToParent(qgi->mapFromScene(event->buttonDownScenePos(Qt::LeftButton)));
|
||||||
|
|
||||||
|
QPointF new_pos = m_items_hash.value(qgi) + current_parent_pos - button_down_parent_pos;
|
||||||
|
event->modifiers() == Qt::ControlModifier ? qgi->setPos(new_pos) : qgi->setPos(Diagram::snapToGrid(new_pos));
|
||||||
}
|
}
|
||||||
|
|
||||||
// for(DiagramTextItem *text_item : m_texts_hash.keys())
|
|
||||||
// {
|
|
||||||
// if (text_item == m_movement_driver)
|
|
||||||
// continue;
|
|
||||||
|
|
||||||
// QPointF applied_movement = text_item->mapMovementToParent(text_item->mapMovementFromScene(movement));
|
|
||||||
// text_item->setPos(text_item->pos() + applied_movement);
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -134,24 +107,6 @@ void ElementTextsMover::continueMovement(const QPointF &movement)
|
|||||||
*/
|
*/
|
||||||
void ElementTextsMover::endMovement()
|
void ElementTextsMover::endMovement()
|
||||||
{
|
{
|
||||||
// //No movement running, or no text to move
|
|
||||||
// if (!m_movement_running || m_texts_hash.isEmpty())
|
|
||||||
// return;
|
|
||||||
|
|
||||||
// //Movement is null
|
|
||||||
// DiagramTextItem *dti = m_texts_hash.keys().first();
|
|
||||||
// if (dti->pos() == m_texts_hash.value(dti))
|
|
||||||
// return;
|
|
||||||
|
|
||||||
// QUndoCommand *undo = new QUndoCommand(m_texts_hash.size() == 1 ? QString(QObject::tr("Déplacer un texte d'élément")) :
|
|
||||||
// QString(QObject::tr("Déplacer %1 textes d'élément").arg(m_texts_hash.size())));
|
|
||||||
|
|
||||||
// for (DiagramTextItem *dti : m_texts_hash.keys())
|
|
||||||
// {
|
|
||||||
// QPropertyUndoCommand *child_undo = new QPropertyUndoCommand(dti, "pos", m_texts_hash.value(dti), dti->pos(), undo);
|
|
||||||
// child_undo->enableAnimation();
|
|
||||||
// }
|
|
||||||
|
|
||||||
//No movement or no items to move
|
//No movement or no items to move
|
||||||
if(!m_movement_running || m_items_hash.isEmpty())
|
if(!m_movement_running || m_items_hash.isEmpty())
|
||||||
return;
|
return;
|
||||||
|
@ -25,6 +25,7 @@ class QGraphicsItem;
|
|||||||
class DiagramTextItem;
|
class DiagramTextItem;
|
||||||
class Diagram;
|
class Diagram;
|
||||||
class QGraphicsItemGroup;
|
class QGraphicsItemGroup;
|
||||||
|
class QGraphicsSceneMouseEvent;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This class manages the interactive movement of element text items on a
|
This class manages the interactive movement of element text items on a
|
||||||
@ -40,7 +41,7 @@ class ElementTextsMover
|
|||||||
public:
|
public:
|
||||||
bool isReady() const;
|
bool isReady() const;
|
||||||
int beginMovement(Diagram *diagram, QGraphicsItem *driver_item = nullptr);
|
int beginMovement(Diagram *diagram, QGraphicsItem *driver_item = nullptr);
|
||||||
void continueMovement(const QPointF &);
|
void continueMovement(QGraphicsSceneMouseEvent *event);
|
||||||
void endMovement();
|
void endMovement();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -53,7 +54,6 @@ class ElementTextsMover
|
|||||||
QHash <DiagramTextItem *, QPointF> m_texts_hash;
|
QHash <DiagramTextItem *, QPointF> m_texts_hash;
|
||||||
QHash <QGraphicsItemGroup *, QPointF> m_grps_hash;
|
QHash <QGraphicsItemGroup *, QPointF> m_grps_hash;
|
||||||
QHash <QGraphicsItem *, QPointF> m_items_hash;
|
QHash <QGraphicsItem *, QPointF> m_items_hash;
|
||||||
QPointF m_last_pos;
|
|
||||||
int m_text_count = 0,
|
int m_text_count = 0,
|
||||||
m_group_count = 0;
|
m_group_count = 0;
|
||||||
};
|
};
|
||||||
|
@ -502,31 +502,31 @@ void DynamicElementTextItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
|
|||||||
*/
|
*/
|
||||||
void DynamicElementTextItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
|
void DynamicElementTextItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
|
||||||
{
|
{
|
||||||
if(event->buttons() & Qt::LeftButton)
|
if((event->buttons() & Qt::LeftButton) && (flags() & ItemIsMovable))
|
||||||
{
|
{
|
||||||
QPointF old_pos = pos(); //The old pos
|
if(diagram() && m_first_move)
|
||||||
QPointF movement = event->pos() - event->buttonDownPos(Qt::LeftButton); //The movement since the button down pos
|
diagram()->beginMoveElementTexts(this);
|
||||||
QPointF new_pos = pos() + mapMovementToParent(movement); //The new pos with this event
|
|
||||||
|
if(m_first_move)
|
||||||
|
{
|
||||||
|
m_initial_position = pos();
|
||||||
|
if(parentElement())
|
||||||
|
parentElement()->setHighlighted(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
QPointF current_parent_pos;
|
||||||
|
QPointF button_down_parent_pos;
|
||||||
|
current_parent_pos = mapToParent(mapFromScene(event->scenePos()));
|
||||||
|
button_down_parent_pos = mapToParent(mapFromScene(event->buttonDownScenePos(Qt::LeftButton)));
|
||||||
|
|
||||||
|
QPointF new_pos = m_initial_position + current_parent_pos - button_down_parent_pos;
|
||||||
event->modifiers() == Qt::ControlModifier ? setPos(new_pos) : setPos(Diagram::snapToGrid(new_pos));
|
event->modifiers() == Qt::ControlModifier ? setPos(new_pos) : setPos(Diagram::snapToGrid(new_pos));
|
||||||
|
|
||||||
if(m_parent_element && m_parent_element->diagram())
|
if(diagram())
|
||||||
{
|
diagram()->continueMoveElementTexts(event);
|
||||||
Diagram *diagram = m_parent_element->diagram();
|
} else {
|
||||||
|
|
||||||
if(m_first_move)
|
|
||||||
{
|
|
||||||
if(diagram->beginMoveElementTexts(this) == 1)
|
|
||||||
m_parent_element->setHighlighted(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
//Because setPos() can be snaped to grid or not, we calcule the real movement
|
|
||||||
QPointF effective_movement = pos() - old_pos;
|
|
||||||
QPointF scene_effective_movement = mapMovementToScene(mapMovementFromParent(effective_movement));
|
|
||||||
diagram->continueMoveElementTexts(scene_effective_movement);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
event->ignore();
|
event->ignore();
|
||||||
|
}
|
||||||
|
|
||||||
if(m_first_move)
|
if(m_first_move)
|
||||||
m_first_move = false;
|
m_first_move = false;
|
||||||
|
@ -152,6 +152,7 @@ class DynamicElementTextItem : public DiagramTextItem
|
|||||||
CrossRefItem *m_Xref_item = nullptr;
|
CrossRefItem *m_Xref_item = nullptr;
|
||||||
QGraphicsTextItem *m_slave_Xref_item = nullptr;
|
QGraphicsTextItem *m_slave_Xref_item = nullptr;
|
||||||
qreal m_text_width = -1;
|
qreal m_text_width = -1;
|
||||||
|
QPointF m_initial_position;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // DYNAMICELEMENTTEXTITEM_H
|
#endif // DYNAMICELEMENTTEXTITEM_H
|
||||||
|
@ -272,7 +272,7 @@ void ElementTextItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) {
|
|||||||
QPointF scene_effective_movement = mapMovementToScene(mapMovementFromParent(effective_movement));
|
QPointF scene_effective_movement = mapMovementToScene(mapMovementFromParent(effective_movement));
|
||||||
|
|
||||||
// on applique le mouvement subi aux autres textes a deplacer
|
// on applique le mouvement subi aux autres textes a deplacer
|
||||||
diagram_ptr -> continueMoveElementTexts(scene_effective_movement);
|
diagram_ptr -> continueMoveElementTexts(event);
|
||||||
}
|
}
|
||||||
} else event -> ignore();
|
} else event -> ignore();
|
||||||
|
|
||||||
|
@ -394,28 +394,31 @@ void ElementTextItemGroup::mousePressEvent(QGraphicsSceneMouseEvent *event)
|
|||||||
*/
|
*/
|
||||||
void ElementTextItemGroup::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
|
void ElementTextItemGroup::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
|
||||||
{
|
{
|
||||||
if(isSelected() && event->buttons() & Qt::LeftButton)
|
if((event->buttons() & Qt::LeftButton) && (flags() & ItemIsMovable))
|
||||||
{
|
{
|
||||||
if(diagram() && m_first_move)
|
if(diagram() && m_first_move)
|
||||||
diagram()->beginMoveElementTexts(this);
|
diagram()->beginMoveElementTexts(this);
|
||||||
|
|
||||||
QPointF old_pos = pos();
|
|
||||||
if(m_first_move)
|
if(m_first_move)
|
||||||
{
|
{
|
||||||
m_mouse_to_origin_movement = old_pos - event->buttonDownScenePos(Qt::LeftButton);
|
m_initial_position = pos();
|
||||||
if(parentElement())
|
if(parentElement())
|
||||||
parentElement()->setHighlighted(true);
|
parentElement()->setHighlighted(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
QPointF expected_pos = event->scenePos() + m_mouse_to_origin_movement;
|
QPointF current_parent_pos;
|
||||||
event->modifiers() == Qt::ControlModifier ? setPos(expected_pos) : setPos(Diagram::snapToGrid(expected_pos));
|
QPointF button_down_parent_pos;
|
||||||
|
current_parent_pos = mapToParent(mapFromScene(event->scenePos()));
|
||||||
|
button_down_parent_pos = mapToParent(mapFromScene(event->buttonDownScenePos(Qt::LeftButton)));
|
||||||
|
|
||||||
|
QPointF new_pos = m_initial_position + current_parent_pos - button_down_parent_pos;
|
||||||
|
event->modifiers() == Qt::ControlModifier ? setPos(new_pos) : setPos(Diagram::snapToGrid(new_pos));
|
||||||
|
|
||||||
QPointF effective_movement = pos() - old_pos;
|
|
||||||
if(diagram())
|
if(diagram())
|
||||||
diagram()->continueMoveElementTexts(effective_movement);
|
diagram()->continueMoveElementTexts(event);
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
event->ignore();
|
event->ignore();
|
||||||
|
}
|
||||||
|
|
||||||
if(m_first_move)
|
if(m_first_move)
|
||||||
m_first_move = false;
|
m_first_move = false;
|
||||||
|
@ -91,7 +91,7 @@ class ElementTextItemGroup : public QObject, public QGraphicsItemGroup
|
|||||||
Qt::Alignment m_alignment = Qt::AlignJustify;
|
Qt::Alignment m_alignment = Qt::AlignJustify;
|
||||||
QString m_name;
|
QString m_name;
|
||||||
bool m_first_move = true;
|
bool m_first_move = true;
|
||||||
QPointF m_mouse_to_origin_movement;
|
QPointF m_initial_position;
|
||||||
int m_vertical_adjustment = 0;
|
int m_vertical_adjustment = 0;
|
||||||
CrossRefItem *m_Xref_item = nullptr;
|
CrossRefItem *m_Xref_item = nullptr;
|
||||||
Element *m_parent_element = nullptr;
|
Element *m_parent_element = nullptr;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user