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));
|
||||
}
|
||||
|
||||
/**
|
||||
Prend en compte un mouvement composant un deplacement d'ElementTextItems
|
||||
@param movement mouvement a ajouter au deplacement en cours
|
||||
@see ElementTextsMover
|
||||
*/
|
||||
void Diagram::continueMoveElementTexts(const QPointF &movement) {
|
||||
m_element_texts_mover -> continueMovement(movement);
|
||||
void Diagram::continueMoveElementTexts(QGraphicsSceneMouseEvent *event)
|
||||
{
|
||||
m_element_texts_mover->continueMovement(event);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -194,7 +194,7 @@ class Diagram : public QGraphicsScene
|
||||
void continueMoveElements(const QPointF &);
|
||||
void endMoveElements();
|
||||
int beginMoveElementTexts(QGraphicsItem * = nullptr);
|
||||
void continueMoveElementTexts(const QPointF &);
|
||||
void continueMoveElementTexts(QGraphicsSceneMouseEvent *event);
|
||||
void endMoveElementTexts();
|
||||
bool usesElement(const ElementsLocation &);
|
||||
bool usesTitleBlockTemplate(const QString &);
|
||||
|
@ -51,20 +51,8 @@ int ElementTextsMover::beginMovement(Diagram *diagram, QGraphicsItem *driver_ite
|
||||
|
||||
m_diagram = diagram;
|
||||
m_movement_driver = driver_item;
|
||||
m_last_pos = driver_item->pos();
|
||||
m_items_hash.clear();
|
||||
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())
|
||||
{
|
||||
@ -83,8 +71,6 @@ int ElementTextsMover::beginMovement(Diagram *diagram, QGraphicsItem *driver_ite
|
||||
}
|
||||
}
|
||||
|
||||
// if (!m_texts_hash.size())
|
||||
// return(-1);
|
||||
|
||||
if(m_items_hash.isEmpty())
|
||||
return -1;
|
||||
@ -92,40 +78,27 @@ int ElementTextsMover::beginMovement(Diagram *diagram, QGraphicsItem *driver_ite
|
||||
m_movement_running = true;
|
||||
|
||||
return m_items_hash.size();
|
||||
|
||||
// return(m_texts_hash.size());
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief ElementTextsMover::continueMovement
|
||||
* Add @movement to the current movement
|
||||
* The movement must be in scene coordinate.
|
||||
* @param movement
|
||||
*/
|
||||
void ElementTextsMover::continueMovement(const QPointF &movement)
|
||||
void ElementTextsMover::continueMovement(QGraphicsSceneMouseEvent *event)
|
||||
{
|
||||
if (!m_movement_running || movement.isNull())
|
||||
if(!m_movement_running)
|
||||
return;
|
||||
|
||||
QPointF move = m_movement_driver->pos() - m_last_pos;
|
||||
m_last_pos = m_movement_driver->pos();
|
||||
|
||||
for(QGraphicsItem *qgi : m_items_hash.keys())
|
||||
{
|
||||
if(qgi == m_movement_driver)
|
||||
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()
|
||||
{
|
||||
// //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
|
||||
if(!m_movement_running || m_items_hash.isEmpty())
|
||||
return;
|
||||
|
@ -25,6 +25,7 @@ class QGraphicsItem;
|
||||
class DiagramTextItem;
|
||||
class Diagram;
|
||||
class QGraphicsItemGroup;
|
||||
class QGraphicsSceneMouseEvent;
|
||||
|
||||
/**
|
||||
This class manages the interactive movement of element text items on a
|
||||
@ -40,7 +41,7 @@ class ElementTextsMover
|
||||
public:
|
||||
bool isReady() const;
|
||||
int beginMovement(Diagram *diagram, QGraphicsItem *driver_item = nullptr);
|
||||
void continueMovement(const QPointF &);
|
||||
void continueMovement(QGraphicsSceneMouseEvent *event);
|
||||
void endMovement();
|
||||
|
||||
private:
|
||||
@ -53,7 +54,6 @@ class ElementTextsMover
|
||||
QHash <DiagramTextItem *, QPointF> m_texts_hash;
|
||||
QHash <QGraphicsItemGroup *, QPointF> m_grps_hash;
|
||||
QHash <QGraphicsItem *, QPointF> m_items_hash;
|
||||
QPointF m_last_pos;
|
||||
int m_text_count = 0,
|
||||
m_group_count = 0;
|
||||
};
|
||||
|
@ -502,31 +502,31 @@ void DynamicElementTextItem::mousePressEvent(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
|
||||
QPointF movement = event->pos() - event->buttonDownPos(Qt::LeftButton); //The movement since the button down pos
|
||||
QPointF new_pos = pos() + mapMovementToParent(movement); //The new pos with this event
|
||||
if(diagram() && m_first_move)
|
||||
diagram()->beginMoveElementTexts(this);
|
||||
|
||||
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));
|
||||
|
||||
if(m_parent_element && m_parent_element->diagram())
|
||||
{
|
||||
Diagram *diagram = m_parent_element->diagram();
|
||||
|
||||
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
|
||||
if(diagram())
|
||||
diagram()->continueMoveElementTexts(event);
|
||||
} else {
|
||||
event->ignore();
|
||||
}
|
||||
|
||||
if(m_first_move)
|
||||
m_first_move = false;
|
||||
|
@ -152,6 +152,7 @@ class DynamicElementTextItem : public DiagramTextItem
|
||||
CrossRefItem *m_Xref_item = nullptr;
|
||||
QGraphicsTextItem *m_slave_Xref_item = nullptr;
|
||||
qreal m_text_width = -1;
|
||||
QPointF m_initial_position;
|
||||
};
|
||||
|
||||
#endif // DYNAMICELEMENTTEXTITEM_H
|
||||
|
@ -272,7 +272,7 @@ void ElementTextItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) {
|
||||
QPointF scene_effective_movement = mapMovementToScene(mapMovementFromParent(effective_movement));
|
||||
|
||||
// on applique le mouvement subi aux autres textes a deplacer
|
||||
diagram_ptr -> continueMoveElementTexts(scene_effective_movement);
|
||||
diagram_ptr -> continueMoveElementTexts(event);
|
||||
}
|
||||
} else event -> ignore();
|
||||
|
||||
|
@ -394,28 +394,31 @@ void ElementTextItemGroup::mousePressEvent(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)
|
||||
diagram()->beginMoveElementTexts(this);
|
||||
|
||||
QPointF old_pos = pos();
|
||||
if(m_first_move)
|
||||
{
|
||||
m_mouse_to_origin_movement = old_pos - event->buttonDownScenePos(Qt::LeftButton);
|
||||
m_initial_position = pos();
|
||||
if(parentElement())
|
||||
parentElement()->setHighlighted(true);
|
||||
}
|
||||
|
||||
QPointF expected_pos = event->scenePos() + m_mouse_to_origin_movement;
|
||||
event->modifiers() == Qt::ControlModifier ? setPos(expected_pos) : setPos(Diagram::snapToGrid(expected_pos));
|
||||
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));
|
||||
|
||||
QPointF effective_movement = pos() - old_pos;
|
||||
if(diagram())
|
||||
diagram()->continueMoveElementTexts(effective_movement);
|
||||
}
|
||||
else
|
||||
diagram()->continueMoveElementTexts(event);
|
||||
} else {
|
||||
event->ignore();
|
||||
}
|
||||
|
||||
if(m_first_move)
|
||||
m_first_move = false;
|
||||
|
@ -91,7 +91,7 @@ class ElementTextItemGroup : public QObject, public QGraphicsItemGroup
|
||||
Qt::Alignment m_alignment = Qt::AlignJustify;
|
||||
QString m_name;
|
||||
bool m_first_move = true;
|
||||
QPointF m_mouse_to_origin_movement;
|
||||
QPointF m_initial_position;
|
||||
int m_vertical_adjustment = 0;
|
||||
CrossRefItem *m_Xref_item = nullptr;
|
||||
Element *m_parent_element = nullptr;
|
||||
|
Loading…
x
Reference in New Issue
Block a user