mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2025-09-13 20:23:04 +02:00
Merge branch 'qelectrotech:master' into master
This commit is contained in:
commit
a61d70e40e
@ -126,30 +126,28 @@ void ElementsMover::continueMovement(const QPointF &movement)
|
||||
| dc::Images
|
||||
| dc::Shapes
|
||||
| dc::ElementTextFields
|
||||
| dc::TextGroup
|
||||
| dc::ConductorsToMove))
|
||||
| dc::TextGroup))
|
||||
{
|
||||
if (qgi == m_movement_driver)
|
||||
continue;
|
||||
qgi->setPos(qgi->pos() + movement);
|
||||
}
|
||||
|
||||
// Move some conductors
|
||||
QVector<Conductor *>list_conductors;
|
||||
for(auto *con : m_moved_content.m_conductors_to_move){
|
||||
list_conductors << con;
|
||||
}
|
||||
|
||||
// update conductors 'conductors_to_move'
|
||||
for(auto *cond : list_conductors){
|
||||
cond->updatePath();
|
||||
if(cond->textItem()->wasMovedByUser() == true)
|
||||
cond->textItem()->setPos(cond->textItem()->pos()+movement);
|
||||
}
|
||||
|
||||
// update conductors 'conductors_to_update'
|
||||
for (auto &conductor : m_moved_content.m_conductors_to_update)
|
||||
{
|
||||
#if TODO_LIST
|
||||
#pragma message("@TODO fix this problem correctly, probably we must see conductor class.")
|
||||
#endif
|
||||
//Due to a weird behavior, we must ensure that the position of the conductor is (0,0).
|
||||
//If not, in some unknown case the function QGraphicsScene::itemsBoundingRect() return a rectangle
|
||||
//that take into account the pos() of the conductor, even if the bounding rect returned by the conductor is not in the pos().
|
||||
//For the user this situation appears when the top right of the folio is not at the top right of the graphicsview,
|
||||
//but displaced to the right and/or bottom.
|
||||
|
||||
//@TODO fix this problem correctly, probably we must see conductor class.
|
||||
// if (c->pos() != QPointF(0,0)) { //<- they work, but the conductor text return to its original pos when the pos is set by user and not auto
|
||||
// c->setPos(0,0); // because set the pos to 0,0 so text move to, and after call updatePath but because text pos is user defined
|
||||
// } // we don't move it.
|
||||
conductor->updatePath();
|
||||
}
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>872</width>
|
||||
<height>471</height>
|
||||
<height>556</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
@ -17,7 +17,7 @@
|
||||
<item>
|
||||
<widget class="QTabWidget" name="tabWidget">
|
||||
<property name="currentIndex">
|
||||
<number>5</number>
|
||||
<number>1</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="tab_3">
|
||||
<attribute name="title">
|
||||
@ -170,9 +170,18 @@
|
||||
<property name="specialValueText">
|
||||
<string>Désactivé</string>
|
||||
</property>
|
||||
<property name="accelerated">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="suffix">
|
||||
<string comment="minute"> min</string>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>200</number>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<number>10</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
|
@ -22,6 +22,7 @@
|
||||
|
||||
#include "../qetgraphicsitem/conductor.h"
|
||||
#include "../qetgraphicsitem/elementtextitemgroup.h"
|
||||
#include "../qetgraphicsitem/conductortextitem.h"
|
||||
|
||||
#include "../diagram.h"
|
||||
|
||||
@ -65,6 +66,7 @@ void MoveGraphicsItemCommand::undo()
|
||||
m_diagram->showMe();
|
||||
m_anim_group.setDirection(QAnimationGroup::Forward);
|
||||
m_anim_group.start();
|
||||
updateConductors(false);
|
||||
}
|
||||
QUndoCommand::undo();
|
||||
}
|
||||
@ -87,6 +89,7 @@ void MoveGraphicsItemCommand::redo()
|
||||
{
|
||||
m_anim_group.setDirection(QAnimationGroup::Backward);
|
||||
m_anim_group.start();
|
||||
updateConductors(true);
|
||||
}
|
||||
}
|
||||
QUndoCommand::redo();
|
||||
@ -137,19 +140,6 @@ void MoveGraphicsItemCommand::move(const QPointF &movement)
|
||||
qgi->setPos(qgi->pos() + movement);
|
||||
}
|
||||
}
|
||||
|
||||
//Move some conductors
|
||||
for (const auto &conductor : qAsConst(m_content.m_conductors_to_move)) {
|
||||
setupAnimation(conductor,
|
||||
"pos",
|
||||
conductor->pos(),
|
||||
conductor->pos() + movement);
|
||||
}
|
||||
|
||||
//Recalculate the path of other conductors
|
||||
for (const auto &conductor : qAsConst(m_content.m_conductors_to_update)) {
|
||||
setupAnimation(conductor, "animPath", 1, 1);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -167,9 +157,34 @@ void MoveGraphicsItemCommand::setupAnimation(QObject *target,
|
||||
const QVariant &end)
|
||||
{
|
||||
QPropertyAnimation *animation{new QPropertyAnimation(target, property_name)};
|
||||
animation->setDuration(300);
|
||||
// duration must be set to 0, otherwise the conductors will not be updated
|
||||
animation->setDuration(0);
|
||||
animation->setStartValue(start);
|
||||
animation->setEndValue(end);
|
||||
animation->setEasingCurve(QEasingCurve::OutQuad);
|
||||
m_anim_group.addAnimation(animation);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief MoveGraphicsItemCommand::connectConductors
|
||||
* @param is_redo
|
||||
*/
|
||||
void MoveGraphicsItemCommand::updateConductors(bool is_redo)
|
||||
{
|
||||
//Recalculate the path of 'conductors_to_move'
|
||||
for (const auto &conductor : qAsConst(m_content.m_conductors_to_move)) {
|
||||
conductor->updatePath();
|
||||
if(conductor->textItem()->wasMovedByUser() == true){
|
||||
if(is_redo)
|
||||
conductor->textItem()->setPos(conductor->textItem()->pos() + m_movement);
|
||||
else
|
||||
conductor->textItem()->setPos(conductor->textItem()->pos() - m_movement);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Recalculate the path of 'conductors_to_update'
|
||||
for (const auto &conductor : qAsConst(m_content.m_conductors_to_update)) {
|
||||
conductor->updatePath();
|
||||
}
|
||||
}
|
||||
|
@ -49,6 +49,7 @@ class MoveGraphicsItemCommand : public QUndoCommand
|
||||
|
||||
private:
|
||||
void move(const QPointF &movement);
|
||||
void updateConductors(bool is_redo = false);
|
||||
void setupAnimation(QObject *target,
|
||||
const QByteArray &property_name,
|
||||
const QVariant &start,
|
||||
|
Loading…
x
Reference in New Issue
Block a user