mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2025-12-19 14:50:53 +01:00
Element text item with are now converted to dynamic element text item.
From now, the class ElementTextItem is not anymore use in qet. Every texts in a diagram are DynamicElementTextItem. the Xref item was adapted to dynamic text. Previously, the comment and location, displayed as a "static text" below the "old text" tagged "label" are now automaticaly converted to DynamicElementTextItem, so visually, these texts stay unchanged git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@5216 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
@@ -915,14 +915,15 @@ bool Diagram::fromXml(QDomElement &document, QPointF position, bool consider_inf
|
|||||||
nvel_elmt = new GhostElement(element_location);
|
nvel_elmt = new GhostElement(element_location);
|
||||||
}
|
}
|
||||||
|
|
||||||
// charge les caracteristiques de l'element
|
|
||||||
if (nvel_elmt -> fromXml(element_xml, table_adr_id, handle_inputs_rotation)) {
|
|
||||||
// ajout de l'element au schema et a la liste des elements ajoutes
|
|
||||||
addItem(nvel_elmt);
|
addItem(nvel_elmt);
|
||||||
added_elements << nvel_elmt;
|
//Loading fail, remove item from the diagram
|
||||||
} else {
|
if (!nvel_elmt->fromXml(element_xml, table_adr_id, handle_inputs_rotation))
|
||||||
|
{
|
||||||
|
removeItem(nvel_elmt);
|
||||||
delete nvel_elmt;
|
delete nvel_elmt;
|
||||||
qDebug() << "Diagram::fromXml() : Le chargement des parametres d'un element a echoue";
|
qDebug() << "Diagram::fromXml() : Le chargement des parametres d'un element a echoue";
|
||||||
|
} else {
|
||||||
|
added_elements << nvel_elmt;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ void CommentItem::autoPos()
|
|||||||
{
|
{
|
||||||
if (m_text_parent)
|
if (m_text_parent)
|
||||||
centerToParentBottom(this);
|
centerToParentBottom(this);
|
||||||
else
|
else if (m_element->diagram())
|
||||||
{
|
{
|
||||||
XRefProperties xrp = m_element->diagram()->project()->defaultXRefProperties(m_element->kindInformations()["type"].toString());
|
XRefProperties xrp = m_element->diagram()->project()->defaultXRefProperties(m_element->kindInformations()["type"].toString());
|
||||||
centerToBottomDiagram(this, m_element, xrp.offset());
|
centerToBottomDiagram(this, m_element, xrp.offset());
|
||||||
|
|||||||
@@ -23,6 +23,8 @@
|
|||||||
#include "diagram.h"
|
#include "diagram.h"
|
||||||
#include "qgraphicsitemutility.h"
|
#include "qgraphicsitemutility.h"
|
||||||
#include "assignvariables.h"
|
#include "assignvariables.h"
|
||||||
|
#include "dynamicelementtextitem.h"
|
||||||
|
#include "elementtextitemgroup.h"
|
||||||
|
|
||||||
//define the height of the header.
|
//define the height of the header.
|
||||||
static int header = 5;
|
static int header = 5;
|
||||||
@@ -31,38 +33,34 @@ static int cross_min_heigth = 33;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief CrossRefItem::CrossRefItem
|
* @brief CrossRefItem::CrossRefItem
|
||||||
* Default constructor
|
* @param elmt : element to display the cross ref
|
||||||
* @param elmt element to display the cross ref and also parent item.
|
|
||||||
* elmt must be in a diagram
|
|
||||||
*/
|
|
||||||
/**
|
|
||||||
* @brief CrossRefItem::CrossRefItem
|
|
||||||
* @param elmt
|
|
||||||
*/
|
*/
|
||||||
CrossRefItem::CrossRefItem(Element *elmt) :
|
CrossRefItem::CrossRefItem(Element *elmt) :
|
||||||
QGraphicsObject(elmt),
|
QGraphicsObject(elmt),
|
||||||
m_element(elmt)
|
m_element(elmt)
|
||||||
{
|
{init();}
|
||||||
Q_ASSERT_X(elmt->diagram(), "CrossRefItem constructor", "Parent element is not in a diagram");
|
|
||||||
|
|
||||||
m_properties = elmt->diagram()->project()->defaultXRefProperties(elmt->kindInformations()["type"].toString());
|
/**
|
||||||
setAcceptHoverEvents(true);
|
* @brief CrossRefItem::CrossRefItem
|
||||||
|
* @param elmt : element to display the cross ref
|
||||||
|
* @param text : If the Xref must be displayed under a text, the text.
|
||||||
|
*/
|
||||||
|
CrossRefItem::CrossRefItem(Element *elmt, DynamicElementTextItem *text) :
|
||||||
|
QGraphicsObject(text),
|
||||||
|
m_element (elmt),
|
||||||
|
m_text(text)
|
||||||
|
{init();}
|
||||||
|
|
||||||
QETProject *project = elmt->diagram()->project();
|
/**
|
||||||
connect(project, &QETProject::projectDiagramsOrderChanged, this, &CrossRefItem::updateLabel);
|
* @brief CrossRefItem::CrossRefItem
|
||||||
connect(project, &QETProject::diagramRemoved, this, &CrossRefItem::updateLabel);
|
* @param elmt : element to display the cross ref
|
||||||
connect(project, &QETProject::XRefPropertiesChanged, this, &CrossRefItem::updateProperties);
|
* @param group : If the Xref must be displayed under a group, the group.
|
||||||
|
*/
|
||||||
//set specific behavior related to the parent item.
|
CrossRefItem::CrossRefItem(Element *elmt, ElementTextItemGroup *group) :
|
||||||
if(m_properties.snapTo() == XRefProperties::Bottom)
|
QGraphicsObject(group),
|
||||||
{
|
m_element(elmt),
|
||||||
connect(elmt, SIGNAL(yChanged()), this, SLOT(autoPos()));
|
m_group(group)
|
||||||
connect(elmt, SIGNAL(rotationChanged()), this, SLOT(autoPos()));
|
{init();}
|
||||||
} else {
|
|
||||||
setTextParent();
|
|
||||||
}
|
|
||||||
updateLabel();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief CrossRefItem::~CrossRefItem
|
* @brief CrossRefItem::~CrossRefItem
|
||||||
@@ -70,6 +68,61 @@ CrossRefItem::CrossRefItem(Element *elmt) :
|
|||||||
*/
|
*/
|
||||||
CrossRefItem::~CrossRefItem() {}
|
CrossRefItem::~CrossRefItem() {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief CrossRefItem::init
|
||||||
|
* init this Xref
|
||||||
|
*/
|
||||||
|
void CrossRefItem::init()
|
||||||
|
{
|
||||||
|
if(!m_element->diagram())
|
||||||
|
{
|
||||||
|
qDebug() << "CrossRefItem constructor", "element is not in a diagram";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
QETProject *project = m_element->diagram()->project();
|
||||||
|
connect(project, &QETProject::XRefPropertiesChanged, this, &CrossRefItem::updateProperties);
|
||||||
|
|
||||||
|
m_properties = m_element->diagram()->project()->defaultXRefProperties(m_element->kindInformations()["type"].toString());
|
||||||
|
setAcceptHoverEvents(true);
|
||||||
|
|
||||||
|
setUpConnection();
|
||||||
|
linkedChanged();
|
||||||
|
updateLabel();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief CrossRefItem::setUpConnection
|
||||||
|
* Set up several connection to keep up to date the Xref
|
||||||
|
*/
|
||||||
|
void CrossRefItem::setUpConnection()
|
||||||
|
{
|
||||||
|
for(QMetaObject::Connection c : m_update_connection)
|
||||||
|
disconnect(c);
|
||||||
|
|
||||||
|
m_update_connection.clear();
|
||||||
|
QETProject *project = m_element->diagram()->project();
|
||||||
|
bool set=false;
|
||||||
|
|
||||||
|
if(m_properties.snapTo() == XRefProperties::Label && (m_text || m_group)) //Snap to label and parent is a text or a group
|
||||||
|
set=true;
|
||||||
|
else if(m_properties.snapTo() == XRefProperties::Bottom && !m_text && !m_group) //Snap to bottom of element and parent is the element itself
|
||||||
|
{
|
||||||
|
m_update_connection << connect(m_element, SIGNAL(yChanged()), this, SLOT(autoPos()));
|
||||||
|
m_update_connection << connect(m_element, SIGNAL(rotationChanged()), this, SLOT(autoPos()));
|
||||||
|
set=true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(set)
|
||||||
|
{
|
||||||
|
m_update_connection << connect(project, &QETProject::projectDiagramsOrderChanged, this, &CrossRefItem::updateLabel);
|
||||||
|
m_update_connection << connect(project, &QETProject::diagramRemoved, this, &CrossRefItem::updateLabel);
|
||||||
|
m_update_connection << connect(m_element, &Element::linkedElementChanged, this, &CrossRefItem::linkedChanged);
|
||||||
|
linkedChanged();
|
||||||
|
updateLabel();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief CrossRefItem::boundingRect
|
* @brief CrossRefItem::boundingRect
|
||||||
* @return the bounding rect of this item
|
* @return the bounding rect of this item
|
||||||
@@ -118,22 +171,14 @@ void CrossRefItem::updateProperties()
|
|||||||
|
|
||||||
if (m_properties != xrp)
|
if (m_properties != xrp)
|
||||||
{
|
{
|
||||||
if (m_properties.snapTo() != xrp.snapTo())
|
|
||||||
{
|
|
||||||
if (xrp.snapTo() == XRefProperties::Bottom)
|
|
||||||
{
|
|
||||||
setParentItem(m_element);
|
|
||||||
connect(m_element, SIGNAL(yChanged()), this, SLOT(autoPos()));
|
|
||||||
connect(m_element, SIGNAL(rotationChanged()), this, SLOT(autoPos()));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
setTextParent();
|
|
||||||
disconnect(m_element, SIGNAL(yChanged()), this, SLOT(autoPos()));
|
|
||||||
disconnect(m_element, SIGNAL(rotationChanged()), this, SLOT(autoPos()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
m_properties = xrp;
|
m_properties = xrp;
|
||||||
|
hide();
|
||||||
|
if(m_properties.snapTo() == XRefProperties::Label && (m_text || m_group)) //Snap to label and parent is text or group
|
||||||
|
show();
|
||||||
|
else if((m_properties.snapTo() == XRefProperties::Bottom && !m_text && !m_group)) //Snap to bottom of element is the parent
|
||||||
|
show();
|
||||||
|
|
||||||
|
setUpConnection();
|
||||||
updateLabel();
|
updateLabel();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -168,11 +213,12 @@ void CrossRefItem::updateLabel()
|
|||||||
drawAsContacts(qp);
|
drawAsContacts(qp);
|
||||||
}
|
}
|
||||||
|
|
||||||
AddExtraInfo(qp, "comment");
|
// AddExtraInfo(qp, "comment");
|
||||||
AddExtraInfo(qp, "location");
|
// AddExtraInfo(qp, "location");
|
||||||
qp.end();
|
qp.end();
|
||||||
|
|
||||||
autoPos();
|
autoPos();
|
||||||
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -187,6 +233,34 @@ void CrossRefItem::autoPos() {
|
|||||||
centerToParentBottom(this);
|
centerToParentBottom(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CrossRefItem::sceneEvent(QEvent *event)
|
||||||
|
{
|
||||||
|
//By default when a QGraphicsItem is a child of a QGraphicsItemGroup
|
||||||
|
//all events are forwarded to group.
|
||||||
|
//We override it, when this Xref is in a group
|
||||||
|
if(m_group)
|
||||||
|
{
|
||||||
|
switch (event->type())
|
||||||
|
{
|
||||||
|
case QEvent::GraphicsSceneHoverEnter:
|
||||||
|
hoverEnterEvent(static_cast<QGraphicsSceneHoverEvent *>(event));
|
||||||
|
break;
|
||||||
|
case QEvent::GraphicsSceneHoverMove:
|
||||||
|
hoverMoveEvent(static_cast<QGraphicsSceneHoverEvent *>(event));
|
||||||
|
break;
|
||||||
|
case QEvent::GraphicsSceneHoverLeave:
|
||||||
|
hoverLeaveEvent(static_cast<QGraphicsSceneHoverEvent *>(event));
|
||||||
|
break;
|
||||||
|
case QEvent::GraphicsSceneMouseDoubleClick:
|
||||||
|
mouseDoubleClickEvent(static_cast<QGraphicsSceneMouseEvent *>(event));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return QGraphicsObject::sceneEvent(event);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief CrossRefItem::paint
|
* @brief CrossRefItem::paint
|
||||||
* Paint this item
|
* Paint this item
|
||||||
@@ -293,6 +367,25 @@ void CrossRefItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
|
|||||||
QGraphicsObject::hoverLeaveEvent(event);
|
QGraphicsObject::hoverLeaveEvent(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CrossRefItem::linkedChanged()
|
||||||
|
{
|
||||||
|
for(QMetaObject::Connection c : m_slave_connection)
|
||||||
|
disconnect(c);
|
||||||
|
|
||||||
|
m_slave_connection.clear();
|
||||||
|
|
||||||
|
if(!isVisible())
|
||||||
|
return;
|
||||||
|
|
||||||
|
for(Element *elmt : m_element->linkedElements())
|
||||||
|
{
|
||||||
|
m_slave_connection << connect(elmt, &Element::xChanged, this, &CrossRefItem::updateLabel);
|
||||||
|
m_slave_connection << connect(elmt, &Element::yChanged, this, &CrossRefItem::updateLabel);
|
||||||
|
}
|
||||||
|
|
||||||
|
updateLabel();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief CrossRefItem::buildHeaderContact
|
* @brief CrossRefItem::buildHeaderContact
|
||||||
* Draw the QPicture of m_hdr_no_ctc and m_hdr_nc_ctc
|
* Draw the QPicture of m_hdr_no_ctc and m_hdr_nc_ctc
|
||||||
@@ -718,17 +811,6 @@ void CrossRefItem::AddExtraInfo(QPainter &painter, QString type)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief CrossRefItem::setTextParent
|
|
||||||
* Set the text field tagged "label" of m_element
|
|
||||||
* parent of this item
|
|
||||||
*/
|
|
||||||
void CrossRefItem::setTextParent() {
|
|
||||||
ElementTextItem *eti = m_element->taggedText("label");
|
|
||||||
if (eti) setParentItem(eti);
|
|
||||||
else qDebug() << "CrossRefItem,no text tagged 'label' found to set has parent";
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief CrossRefItem::NOElements
|
* @brief CrossRefItem::NOElements
|
||||||
* @return The linked elements of @m_element wich are open or switch contact.
|
* @return The linked elements of @m_element wich are open or switch contact.
|
||||||
|
|||||||
@@ -23,6 +23,8 @@
|
|||||||
#include <QPicture>
|
#include <QPicture>
|
||||||
|
|
||||||
class Element;
|
class Element;
|
||||||
|
class DynamicElementTextItem;
|
||||||
|
class ElementTextItemGroup;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief The CrossRefItem class
|
* @brief The CrossRefItem class
|
||||||
@@ -42,8 +44,14 @@ class CrossRefItem : public QGraphicsObject
|
|||||||
//Methods
|
//Methods
|
||||||
public:
|
public:
|
||||||
explicit CrossRefItem(Element *elmt);
|
explicit CrossRefItem(Element *elmt);
|
||||||
|
explicit CrossRefItem(Element *elmt, DynamicElementTextItem *text);
|
||||||
|
explicit CrossRefItem(Element *elmt, ElementTextItemGroup *group);
|
||||||
~CrossRefItem() override;
|
~CrossRefItem() override;
|
||||||
|
private:
|
||||||
|
void init();
|
||||||
|
void setUpConnection();
|
||||||
|
|
||||||
|
public:
|
||||||
enum { Type = UserType + 1009 };
|
enum { Type = UserType + 1009 };
|
||||||
int type() const override { return Type; }
|
int type() const override { return Type; }
|
||||||
|
|
||||||
@@ -68,6 +76,7 @@ class CrossRefItem : public QGraphicsObject
|
|||||||
void autoPos ();
|
void autoPos ();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
bool sceneEvent(QEvent *event) override;
|
||||||
void paint (QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
|
void paint (QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
|
||||||
void mouseDoubleClickEvent (QGraphicsSceneMouseEvent * event ) override;
|
void mouseDoubleClickEvent (QGraphicsSceneMouseEvent * event ) override;
|
||||||
void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override;
|
void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override;
|
||||||
@@ -75,6 +84,7 @@ class CrossRefItem : public QGraphicsObject
|
|||||||
void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override;
|
void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void linkedChanged();
|
||||||
void buildHeaderContact ();
|
void buildHeaderContact ();
|
||||||
void setUpCrossBoundingRect (QPainter &painter);
|
void setUpCrossBoundingRect (QPainter &painter);
|
||||||
void drawAsCross (QPainter &painter);
|
void drawAsCross (QPainter &painter);
|
||||||
@@ -82,7 +92,6 @@ class CrossRefItem : public QGraphicsObject
|
|||||||
QRectF drawContact (QPainter &painter, int flags, Element *elmt);
|
QRectF drawContact (QPainter &painter, int flags, Element *elmt);
|
||||||
void fillCrossRef (QPainter &painter);
|
void fillCrossRef (QPainter &painter);
|
||||||
void AddExtraInfo (QPainter &painter, QString);
|
void AddExtraInfo (QPainter &painter, QString);
|
||||||
void setTextParent ();
|
|
||||||
QList<Element *> NOElements() const;
|
QList<Element *> NOElements() const;
|
||||||
QList<Element *> NCElements() const;
|
QList<Element *> NCElements() const;
|
||||||
|
|
||||||
@@ -96,7 +105,10 @@ class CrossRefItem : public QGraphicsObject
|
|||||||
int m_drawed_contacts;
|
int m_drawed_contacts;
|
||||||
QMap <Element *, QRectF> m_hovered_contacts_map;
|
QMap <Element *, QRectF> m_hovered_contacts_map;
|
||||||
Element *m_hovered_contact = nullptr;
|
Element *m_hovered_contact = nullptr;
|
||||||
|
DynamicElementTextItem *m_text = nullptr;
|
||||||
|
ElementTextItemGroup *m_group = nullptr;
|
||||||
|
QList <QMetaObject::Connection> m_slave_connection;
|
||||||
|
QList <QMetaObject::Connection> m_update_connection;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // CROSSREFITEM_H
|
#endif // CROSSREFITEM_H
|
||||||
|
|||||||
@@ -737,33 +737,33 @@ bool CustomElement::parseInput(QDomElement &dom_element) {
|
|||||||
!QET::attributeIsAnInteger(dom_element, "size", &size)
|
!QET::attributeIsAnInteger(dom_element, "size", &size)
|
||||||
) return(false);
|
) return(false);
|
||||||
|
|
||||||
//The text have a tagg, we create an element text item
|
// //The text have a tagg, we create an element text item
|
||||||
if (dom_element.attribute("tagg", "none") != "none")
|
// if (dom_element.attribute("tagg", "none") != "none")
|
||||||
{
|
// {
|
||||||
ElementTextItem *eti = new ElementTextItem(dom_element.attribute("text"), this);
|
// ElementTextItem *eti = new ElementTextItem(dom_element.attribute("text"), this);
|
||||||
eti -> setFont(QETApp::diagramTextsFont(size));
|
// eti -> setFont(QETApp::diagramTextsFont(size));
|
||||||
eti -> setTagg(dom_element.attribute("tagg", "other"));
|
// eti -> setTagg(dom_element.attribute("tagg", "other"));
|
||||||
m_element_informations.addValue(dom_element.attribute("tagg", "other"), dom_element.attribute("text"));
|
// m_element_informations.addValue(dom_element.attribute("tagg", "other"), dom_element.attribute("text"));
|
||||||
|
|
||||||
// position the text field
|
// // position the text field
|
||||||
eti -> setOriginalPos(QPointF(pos_x, pos_y));
|
// eti -> setOriginalPos(QPointF(pos_x, pos_y));
|
||||||
eti -> setPos(pos_x, pos_y);
|
// eti -> setPos(pos_x, pos_y);
|
||||||
|
|
||||||
// rotation of the text field
|
// // rotation of the text field
|
||||||
qreal original_rotation_angle = 0.0;
|
// qreal original_rotation_angle = 0.0;
|
||||||
QET::attributeIsAReal(dom_element, "rotation", &original_rotation_angle);
|
// QET::attributeIsAReal(dom_element, "rotation", &original_rotation_angle);
|
||||||
eti -> setOriginalRotationAngle(original_rotation_angle);
|
// eti -> setOriginalRotationAngle(original_rotation_angle);
|
||||||
eti -> setRotationAngle(original_rotation_angle);
|
// eti -> setRotationAngle(original_rotation_angle);
|
||||||
|
|
||||||
// behavior when the parent element is rotated
|
// // behavior when the parent element is rotated
|
||||||
eti -> setFollowParentRotations(dom_element.attribute("rotate") == "true");
|
// eti -> setFollowParentRotations(dom_element.attribute("rotate") == "true");
|
||||||
|
|
||||||
m_texts << eti;
|
// m_texts << eti;
|
||||||
|
|
||||||
connect(eti, &ElementTextItem::diagramTextChanged, this, &Element::textItemChanged);
|
// connect(eti, &ElementTextItem::diagramTextChanged, this, &Element::textItemChanged);
|
||||||
|
|
||||||
return(eti);
|
// return(eti);
|
||||||
}
|
// }
|
||||||
//The text haven't got a tagg, so we convert it to a dynamic text item
|
//The text haven't got a tagg, so we convert it to a dynamic text item
|
||||||
//and store it to m_converted_text_from_xml_description, instead of m_dynamic_text_list
|
//and store it to m_converted_text_from_xml_description, instead of m_dynamic_text_list
|
||||||
//because these dynamic text need post treatement
|
//because these dynamic text need post treatement
|
||||||
@@ -774,6 +774,11 @@ bool CustomElement::parseInput(QDomElement &dom_element) {
|
|||||||
deti->setFontSize(dom_element.attribute("size", QString::number(9)).toInt());
|
deti->setFontSize(dom_element.attribute("size", QString::number(9)).toInt());
|
||||||
deti->setRotation(dom_element.attribute("rotation", QString::number(0)).toDouble());
|
deti->setRotation(dom_element.attribute("rotation", QString::number(0)).toDouble());
|
||||||
|
|
||||||
|
if(dom_element.attribute("tagg", "none") != "none")
|
||||||
|
{
|
||||||
|
deti->setTextFrom(DynamicElementTextItem::ElementInfo);
|
||||||
|
deti->setInfoName(dom_element.attribute("tagg"));
|
||||||
|
}
|
||||||
|
|
||||||
//the origin transformation point of PartDynamicTextField is the top left corner, no matter the font size
|
//the origin transformation point of PartDynamicTextField is the top left corner, no matter the font size
|
||||||
//The origin transformation point of ElementTextItem is the middle of left edge, and so by definition, change with the size of the font
|
//The origin transformation point of ElementTextItem is the middle of left edge, and so by definition, change with the size of the font
|
||||||
|
|||||||
@@ -24,6 +24,7 @@
|
|||||||
#include "terminal.h"
|
#include "terminal.h"
|
||||||
#include "conductor.h"
|
#include "conductor.h"
|
||||||
#include "elementtextitemgroup.h"
|
#include "elementtextitemgroup.h"
|
||||||
|
#include "crossrefitem.h"
|
||||||
|
|
||||||
#include <QDomDocument>
|
#include <QDomDocument>
|
||||||
#include <QDomElement>
|
#include <QDomElement>
|
||||||
@@ -41,7 +42,6 @@ DynamicElementTextItem::DynamicElementTextItem(Element *parent_element) :
|
|||||||
setFont(QETApp::diagramTextsFont(9));
|
setFont(QETApp::diagramTextsFont(9));
|
||||||
setText(tr("Texte"));
|
setText(tr("Texte"));
|
||||||
setParentItem(parent_element);
|
setParentItem(parent_element);
|
||||||
|
|
||||||
connect(this, &DynamicElementTextItem::textEdited, [this](const QString &old_str, const QString &new_str)
|
connect(this, &DynamicElementTextItem::textEdited, [this](const QString &old_str, const QString &new_str)
|
||||||
{
|
{
|
||||||
if(this->m_parent_element && this->m_parent_element->diagram())
|
if(this->m_parent_element && this->m_parent_element->diagram())
|
||||||
@@ -52,36 +52,6 @@ DynamicElementTextItem::DynamicElementTextItem(Element *parent_element) :
|
|||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
//If the parent is slave, we keep aware about the changement of master.
|
|
||||||
if(parent_element->linkType() == Element::Slave)
|
|
||||||
{
|
|
||||||
connect(parent_element, &Element::linkedElementChanged, this, &DynamicElementTextItem::masterChanged);
|
|
||||||
//The parent is already linked, wa call master changed for init the connection
|
|
||||||
if(!parent_element->linkedElements().isEmpty())
|
|
||||||
masterChanged();
|
|
||||||
}
|
|
||||||
if(parent_element->linkType() & Element::AllReport)
|
|
||||||
{
|
|
||||||
//Get the report formula, and add connection to keep up to date the formula.
|
|
||||||
if (parent_element->diagram() && parent_element->diagram()->project())
|
|
||||||
{
|
|
||||||
m_report_formula = parent_element->diagram()->project()->defaultReportProperties();
|
|
||||||
m_report_formula_con = connect(parent_element->diagram()->project(), &QETProject::reportPropertiesChanged, this, &DynamicElementTextItem::reportFormulaChanged);
|
|
||||||
}
|
|
||||||
|
|
||||||
//Add connection to keep up to date the status of the element linked to the parent folio report of this text.
|
|
||||||
connect(parent_element, &Element::linkedElementChanged, this, &DynamicElementTextItem::reportChanged);
|
|
||||||
//The parent is already linked, we call reportChanged for init the connection
|
|
||||||
if(!parent_element->linkedElements().isEmpty())
|
|
||||||
reportChanged();
|
|
||||||
|
|
||||||
//Add connection to keep up date the conductors added or removed to the parent folio report element
|
|
||||||
connect(parent_element->terminals().first(), &Terminal::conductorWasAdded, this, &DynamicElementTextItem::conductorWasAdded);
|
|
||||||
connect(parent_element->terminals().first(), &Terminal::conductorWasRemoved, this, &DynamicElementTextItem::conductorWasRemoved);
|
|
||||||
//Get a conductor in the potential
|
|
||||||
setPotentialConductor();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DynamicElementTextItem::~DynamicElementTextItem()
|
DynamicElementTextItem::~DynamicElementTextItem()
|
||||||
@@ -168,43 +138,34 @@ void DynamicElementTextItem::fromXml(const QDomElement &dom_elmt)
|
|||||||
QGraphicsTextItem::setRotation(dom_elmt.attribute("rotation", QString::number(0)).toDouble());
|
QGraphicsTextItem::setRotation(dom_elmt.attribute("rotation", QString::number(0)).toDouble());
|
||||||
setFont(QETApp::diagramTextsFont(dom_elmt.attribute("font_size", QString::number(9)).toInt()));
|
setFont(QETApp::diagramTextsFont(dom_elmt.attribute("font_size", QString::number(9)).toInt()));
|
||||||
m_uuid = QUuid(dom_elmt.attribute("uuid", QUuid::createUuid().toString()));
|
m_uuid = QUuid(dom_elmt.attribute("uuid", QUuid::createUuid().toString()));
|
||||||
m_frame = dom_elmt.attribute("frame", "false") == "true"? true : false;
|
setFrame(dom_elmt.attribute("frame", "false") == "true"? true : false);
|
||||||
|
|
||||||
|
//Text from
|
||||||
QMetaEnum me = textFromMetaEnum();
|
QMetaEnum me = textFromMetaEnum();
|
||||||
m_text_from = DynamicElementTextItem::TextFrom(me.keyToValue(dom_elmt.attribute("text_from").toStdString().data()));
|
setTextFrom(DynamicElementTextItem::TextFrom(me.keyToValue(dom_elmt.attribute("text_from").toStdString().data())));
|
||||||
if(m_text_from == ElementInfo || m_text_from == CompositeText)
|
|
||||||
{
|
|
||||||
setNoEditable(true);
|
|
||||||
//We don't made the connection below if the parent element is a report, because report haven't got info.
|
|
||||||
if (!(parentElement()->linkType() & Element::AllReport) && elementUseForInfo())
|
|
||||||
connect(elementUseForInfo(), &Element::elementInfoChange, this, &DynamicElementTextItem::elementInfoChanged);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
setNoEditable(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
//Text
|
//Text
|
||||||
QDomElement dom_text = dom_elmt.firstChildElement("text");
|
QDomElement dom_text = dom_elmt.firstChildElement("text");
|
||||||
if (!dom_text.isNull())
|
if (!dom_text.isNull())
|
||||||
{
|
setText(dom_text.text());
|
||||||
m_text = dom_text.text();
|
|
||||||
setPlainText(m_text);
|
|
||||||
}
|
|
||||||
|
|
||||||
//Info name
|
//Info name
|
||||||
QDomElement dom_info_name = dom_elmt.firstChildElement("info_name");
|
QDomElement dom_info_name = dom_elmt.firstChildElement("info_name");
|
||||||
if(!dom_info_name.isNull())
|
if(!dom_info_name.isNull())
|
||||||
m_info_name = dom_info_name.text();
|
setInfoName(dom_info_name.text());
|
||||||
|
|
||||||
//Composite text
|
//Composite text
|
||||||
QDomElement dom_comp_text = dom_elmt.firstChildElement("composite_text");
|
QDomElement dom_comp_text = dom_elmt.firstChildElement("composite_text");
|
||||||
if(!dom_comp_text.isNull())
|
if(!dom_comp_text.isNull())
|
||||||
m_composite_text = dom_comp_text.text();
|
setCompositeText(dom_comp_text.text());
|
||||||
|
|
||||||
//Color
|
//Color
|
||||||
QDomElement dom_color = dom_elmt.firstChildElement("color");
|
QDomElement dom_color = dom_elmt.firstChildElement("color");
|
||||||
if(!dom_color.isNull())
|
if(!dom_color.isNull())
|
||||||
setColor(QColor(dom_color.text()));
|
setColor(QColor(dom_color.text()));
|
||||||
|
|
||||||
|
//Force the update of the displayed text
|
||||||
|
setTextFrom(m_text_from);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -224,9 +185,12 @@ Element *DynamicElementTextItem::parentElement() const {
|
|||||||
*/
|
*/
|
||||||
ElementTextItemGroup *DynamicElementTextItem::parentGroup() const
|
ElementTextItemGroup *DynamicElementTextItem::parentGroup() const
|
||||||
{
|
{
|
||||||
if(group())
|
if(parentItem())
|
||||||
return dynamic_cast<ElementTextItemGroup *>(group());
|
{
|
||||||
else
|
if(ElementTextItemGroup *grp = dynamic_cast<ElementTextItemGroup *>(parentItem()))
|
||||||
|
return grp;
|
||||||
|
}
|
||||||
|
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -280,11 +244,19 @@ void DynamicElementTextItem::refreshLabelConnection()
|
|||||||
{
|
{
|
||||||
if ((m_text_from == ElementInfo && m_info_name == "label") ||
|
if ((m_text_from == ElementInfo && m_info_name == "label") ||
|
||||||
(m_text_from == CompositeText && m_composite_text.contains("%{label}")))
|
(m_text_from == CompositeText && m_composite_text.contains("%{label}")))
|
||||||
|
{
|
||||||
|
if(m_parent_element.data()->linkType() & Element::AllReport)
|
||||||
|
{
|
||||||
|
updateReportFormulaConnection();
|
||||||
|
updateReportText();
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
setupFormulaConnection();
|
setupFormulaConnection();
|
||||||
updateLabel();
|
updateLabel();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief DynamicElementTextItem::textFrom
|
* @brief DynamicElementTextItem::textFrom
|
||||||
@@ -301,15 +273,21 @@ DynamicElementTextItem::TextFrom DynamicElementTextItem::textFrom() const {
|
|||||||
*/
|
*/
|
||||||
void DynamicElementTextItem::setTextFrom(DynamicElementTextItem::TextFrom text_from)
|
void DynamicElementTextItem::setTextFrom(DynamicElementTextItem::TextFrom text_from)
|
||||||
{
|
{
|
||||||
|
if(m_text_from == text_from)
|
||||||
|
return;
|
||||||
|
|
||||||
setNoEditable(text_from == UserText? false : true);
|
setNoEditable(text_from == UserText? false : true);
|
||||||
clearFormulaConnection();
|
clearFormulaConnection();
|
||||||
|
|
||||||
if(text_from == UserText)
|
TextFrom old_text_from = m_text_from;
|
||||||
|
m_text_from = text_from;
|
||||||
|
|
||||||
|
if(m_text_from == UserText)
|
||||||
{
|
{
|
||||||
setPlainText(m_text);
|
setPlainText(m_text);
|
||||||
disconnect(m_parent_element.data(), &Element::elementInfoChange, this, &DynamicElementTextItem::elementInfoChanged);
|
disconnect(m_parent_element.data(), &Element::elementInfoChange, this, &DynamicElementTextItem::elementInfoChanged);
|
||||||
}
|
}
|
||||||
else if (text_from == ElementInfo && elementUseForInfo())
|
else if (m_text_from == ElementInfo && elementUseForInfo())
|
||||||
{
|
{
|
||||||
if(m_info_name == "label")
|
if(m_info_name == "label")
|
||||||
{
|
{
|
||||||
@@ -319,10 +297,10 @@ void DynamicElementTextItem::setTextFrom(DynamicElementTextItem::TextFrom text_f
|
|||||||
else
|
else
|
||||||
setPlainText(elementUseForInfo()->elementInformations().value(m_info_name).toString());
|
setPlainText(elementUseForInfo()->elementInformations().value(m_info_name).toString());
|
||||||
|
|
||||||
if(m_text_from == UserText)
|
if(old_text_from == UserText)
|
||||||
connect(elementUseForInfo(), &Element::elementInfoChange, this, &DynamicElementTextItem::elementInfoChanged);
|
connect(elementUseForInfo(), &Element::elementInfoChange, this, &DynamicElementTextItem::elementInfoChanged);
|
||||||
}
|
}
|
||||||
else if (text_from == CompositeText && elementUseForInfo())
|
else if (m_text_from == CompositeText && elementUseForInfo())
|
||||||
{
|
{
|
||||||
if(m_composite_text.contains("%{label}"))
|
if(m_composite_text.contains("%{label}"))
|
||||||
{
|
{
|
||||||
@@ -332,16 +310,16 @@ void DynamicElementTextItem::setTextFrom(DynamicElementTextItem::TextFrom text_f
|
|||||||
else
|
else
|
||||||
setPlainText(autonum::AssignVariables::replaceVariable(m_composite_text, elementUseForInfo()->elementInformations()));
|
setPlainText(autonum::AssignVariables::replaceVariable(m_composite_text, elementUseForInfo()->elementInformations()));
|
||||||
|
|
||||||
if(m_text_from == UserText)
|
if(old_text_from == UserText)
|
||||||
connect(elementUseForInfo(), &Element::elementInfoChange, this, &DynamicElementTextItem::elementInfoChanged);
|
connect(elementUseForInfo(), &Element::elementInfoChange, this, &DynamicElementTextItem::elementInfoChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(m_text_from != text_from)
|
if(m_parent_element.data()->linkType() == Element::Master ||
|
||||||
{
|
m_parent_element.data()->linkType() == Element::Slave)
|
||||||
m_text_from = text_from;
|
updateXref();
|
||||||
|
|
||||||
emit textFromChanged(m_text_from);
|
emit textFromChanged(m_text_from);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief DynamicElementTextItem::text
|
* @brief DynamicElementTextItem::text
|
||||||
@@ -373,8 +351,12 @@ void DynamicElementTextItem::setInfoName(const QString &info_name)
|
|||||||
QString old_info_name = m_info_name;
|
QString old_info_name = m_info_name;
|
||||||
m_info_name = info_name;
|
m_info_name = info_name;
|
||||||
|
|
||||||
|
|
||||||
if(old_info_name == "label")
|
if(old_info_name == "label")
|
||||||
|
{
|
||||||
clearFormulaConnection();
|
clearFormulaConnection();
|
||||||
|
updateXref();
|
||||||
|
}
|
||||||
|
|
||||||
if (m_parent_element && (m_parent_element.data()->linkType() & Element::AllReport)) //special treatment for report
|
if (m_parent_element && (m_parent_element.data()->linkType() & Element::AllReport)) //special treatment for report
|
||||||
{
|
{
|
||||||
@@ -396,6 +378,7 @@ void DynamicElementTextItem::setInfoName(const QString &info_name)
|
|||||||
{
|
{
|
||||||
setupFormulaConnection();
|
setupFormulaConnection();
|
||||||
updateLabel();
|
updateLabel();
|
||||||
|
updateXref();
|
||||||
}
|
}
|
||||||
else if(elementUseForInfo()) {
|
else if(elementUseForInfo()) {
|
||||||
setPlainText(elementUseForInfo()->elementInformations().value(info_name).toString());
|
setPlainText(elementUseForInfo()->elementInformations().value(info_name).toString());
|
||||||
@@ -423,7 +406,10 @@ void DynamicElementTextItem::setCompositeText(const QString &text)
|
|||||||
m_composite_text = text;
|
m_composite_text = text;
|
||||||
|
|
||||||
if(old_composite_text.contains("%{label}"))
|
if(old_composite_text.contains("%{label}"))
|
||||||
|
{
|
||||||
clearFormulaConnection();
|
clearFormulaConnection();
|
||||||
|
updateXref();
|
||||||
|
}
|
||||||
|
|
||||||
if (m_parent_element && (m_parent_element.data()->linkType() & Element::AllReport)) //special treatment for report
|
if (m_parent_element && (m_parent_element.data()->linkType() & Element::AllReport)) //special treatment for report
|
||||||
{
|
{
|
||||||
@@ -444,6 +430,7 @@ void DynamicElementTextItem::setCompositeText(const QString &text)
|
|||||||
{
|
{
|
||||||
setupFormulaConnection();
|
setupFormulaConnection();
|
||||||
updateLabel();
|
updateLabel();
|
||||||
|
updateXref();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -494,6 +481,8 @@ void DynamicElementTextItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
|
|||||||
{
|
{
|
||||||
setDefaultTextColor(m_user_color);
|
setDefaultTextColor(m_user_color);
|
||||||
m_user_color = QColor(); //m_user_color is now invalid
|
m_user_color = QColor(); //m_user_color is now invalid
|
||||||
|
if(m_slave_Xref_item)
|
||||||
|
m_slave_Xref_item->setDefaultTextColor(Qt::black);
|
||||||
}
|
}
|
||||||
|
|
||||||
DiagramTextItem::mousePressEvent(event);
|
DiagramTextItem::mousePressEvent(event);
|
||||||
@@ -561,44 +550,7 @@ void DynamicElementTextItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
|
|||||||
void DynamicElementTextItem::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
|
void DynamicElementTextItem::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
|
||||||
{
|
{
|
||||||
DiagramTextItem::mouseDoubleClickEvent(event);
|
DiagramTextItem::mouseDoubleClickEvent(event);
|
||||||
|
zoomToLinkedElement();
|
||||||
if(!parentElement())
|
|
||||||
return;
|
|
||||||
|
|
||||||
Element *zoomed_element = nullptr;
|
|
||||||
|
|
||||||
if(parentElement()->linkType() == Element::Slave && m_master_element)
|
|
||||||
{
|
|
||||||
if ((m_text_from == ElementInfo && m_info_name == "label") ||
|
|
||||||
(m_text_from == CompositeText && m_composite_text.contains("%{label}")))
|
|
||||||
zoomed_element = m_master_element.data();
|
|
||||||
}
|
|
||||||
if((parentElement()->linkType() & Element::AllReport) && m_other_report)
|
|
||||||
{
|
|
||||||
if((m_text_from == ElementInfo && m_info_name == "label") ||
|
|
||||||
(m_text_from == CompositeText && m_composite_text.contains("%{label}")))
|
|
||||||
zoomed_element = m_other_report.data();
|
|
||||||
}
|
|
||||||
|
|
||||||
if(zoomed_element)
|
|
||||||
{
|
|
||||||
//Unselect and ungrab mouse to prevent unwanted
|
|
||||||
//move when linked element is in the same scene of this.
|
|
||||||
setSelected(false);
|
|
||||||
ungrabMouse();
|
|
||||||
|
|
||||||
if(scene() != zoomed_element->scene())
|
|
||||||
zoomed_element->diagram()->showMe();
|
|
||||||
zoomed_element->setSelected(true);
|
|
||||||
|
|
||||||
//Zoom to the element
|
|
||||||
for(QGraphicsView *view : zoomed_element->scene()->views())
|
|
||||||
{
|
|
||||||
QRectF fit = zoomed_element->sceneBoundingRect();
|
|
||||||
fit.adjust(-200, -200, 200, 200);
|
|
||||||
view->fitInView(fit, Qt::KeepAspectRatioByExpanding);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -617,28 +569,16 @@ void DynamicElementTextItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
|
|||||||
if(isSelected())
|
if(isSelected())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Element::kind type = parentElement()->linkType();
|
if ((parentElement()->linkType() & Element::AllReport) && m_other_report)
|
||||||
bool blue = false;
|
|
||||||
|
|
||||||
if ((type & Element::AllReport) && m_other_report)
|
|
||||||
{
|
{
|
||||||
if( (m_text_from == ElementInfo && m_info_name == "label") ||
|
if( (m_text_from == ElementInfo && m_info_name == "label") ||
|
||||||
(m_text_from == CompositeText && m_composite_text.contains("%{label}")) )
|
(m_text_from == CompositeText && m_composite_text.contains("%{label}")) )
|
||||||
blue = true;
|
|
||||||
}
|
|
||||||
else if (type == Element::Slave && m_master_element)
|
|
||||||
{
|
|
||||||
if( (m_text_from == ElementInfo && m_info_name == "label") ||
|
|
||||||
(m_text_from == CompositeText && m_composite_text.contains("%{label}")) )
|
|
||||||
blue = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(blue)
|
|
||||||
{
|
{
|
||||||
m_user_color = color();
|
m_user_color = color();
|
||||||
setDefaultTextColor(Qt::blue);
|
setDefaultTextColor(Qt::blue);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief DynamicElementTextItem::hoverLeaveEvent
|
* @brief DynamicElementTextItem::hoverLeaveEvent
|
||||||
@@ -696,6 +636,89 @@ void DynamicElementTextItem::paint(QPainter *painter, const QStyleOptionGraphics
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QVariant DynamicElementTextItem::itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value)
|
||||||
|
{
|
||||||
|
//The first time this text is added to a scene, we make several cheking and connection
|
||||||
|
//according to the link type of the parent element
|
||||||
|
if(change == QGraphicsItem::ItemSceneHasChanged && m_first_scene_change)
|
||||||
|
{
|
||||||
|
if(m_parent_element.isNull())
|
||||||
|
return QGraphicsObject::itemChange(change, value);
|
||||||
|
|
||||||
|
//If the parent is slave, we keep aware about the changement of master.
|
||||||
|
if(m_parent_element.data()->linkType() == Element::Slave)
|
||||||
|
{
|
||||||
|
connect(m_parent_element.data(), &Element::linkedElementChanged, this, &DynamicElementTextItem::masterChanged);
|
||||||
|
//The parent is already linked, wa call master changed for init the connection
|
||||||
|
if(!m_parent_element.data()->linkedElements().isEmpty())
|
||||||
|
masterChanged();
|
||||||
|
}
|
||||||
|
else if(m_parent_element.data()->linkType() & Element::AllReport)
|
||||||
|
{
|
||||||
|
//Get the report formula, and add connection to keep up to date the formula.
|
||||||
|
if (m_parent_element.data()->diagram() && m_parent_element.data()->diagram()->project())
|
||||||
|
{
|
||||||
|
m_report_formula = m_parent_element.data()->diagram()->project()->defaultReportProperties();
|
||||||
|
m_report_formula_con = connect(m_parent_element.data()->diagram()->project(), &QETProject::reportPropertiesChanged, this, &DynamicElementTextItem::reportFormulaChanged);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Add connection to keep up to date the status of the element linked to the parent folio report of this text.
|
||||||
|
connect(m_parent_element.data(), &Element::linkedElementChanged, this, &DynamicElementTextItem::reportChanged);
|
||||||
|
//The parent is already linked, we call reportChanged for init the connection
|
||||||
|
if(!m_parent_element.data()->linkedElements().isEmpty())
|
||||||
|
reportChanged();
|
||||||
|
|
||||||
|
if(m_parent_element.data()->terminals().size())
|
||||||
|
{
|
||||||
|
//Add connection to keep up date the conductors added or removed to the parent folio report element
|
||||||
|
connect(m_parent_element.data()->terminals().first(), &Terminal::conductorWasAdded, this, &DynamicElementTextItem::conductorWasAdded);
|
||||||
|
connect(m_parent_element.data()->terminals().first(), &Terminal::conductorWasRemoved, this, &DynamicElementTextItem::conductorWasRemoved);
|
||||||
|
}
|
||||||
|
//Get a conductor in the potential
|
||||||
|
setPotentialConductor();
|
||||||
|
}
|
||||||
|
else if(m_parent_element.data()->linkType() == Element::Master)
|
||||||
|
{
|
||||||
|
connect(m_parent_element.data(), &Element::linkedElementChanged, this, &DynamicElementTextItem::updateXref);
|
||||||
|
if(m_parent_element.data()->diagram())
|
||||||
|
connect(m_parent_element.data()->diagram()->project(), &QETProject::XRefPropertiesChanged, this, &DynamicElementTextItem::updateXref);
|
||||||
|
if(!m_parent_element.data()->linkedElements().isEmpty())
|
||||||
|
updateXref();
|
||||||
|
}
|
||||||
|
|
||||||
|
m_first_scene_change = false;
|
||||||
|
return QGraphicsObject::itemChange(change, value);
|
||||||
|
}
|
||||||
|
else if (change == QGraphicsItem::ItemParentHasChanged)
|
||||||
|
{
|
||||||
|
updateXref();
|
||||||
|
updateXref();
|
||||||
|
}
|
||||||
|
|
||||||
|
return QGraphicsObject::itemChange(change, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DynamicElementTextItem::sceneEventFilter(QGraphicsItem *watched, QEvent *event)
|
||||||
|
{
|
||||||
|
if(watched != m_slave_Xref_item)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if(event->type() == QEvent::GraphicsSceneHoverEnter) {
|
||||||
|
m_slave_Xref_item->setDefaultTextColor(Qt::blue);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if(event->type() == QEvent::GraphicsSceneHoverLeave) {
|
||||||
|
m_slave_Xref_item->setDefaultTextColor(Qt::black);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if(event->type() == QEvent::GraphicsSceneMouseDoubleClick) {
|
||||||
|
zoomToLinkedElement();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void DynamicElementTextItem::elementInfoChanged()
|
void DynamicElementTextItem::elementInfoChanged()
|
||||||
{
|
{
|
||||||
DiagramContext dc;
|
DiagramContext dc;
|
||||||
@@ -734,6 +757,7 @@ void DynamicElementTextItem::elementInfoChanged()
|
|||||||
final_text = m_text;
|
final_text = m_text;
|
||||||
|
|
||||||
setPlainText(final_text);
|
setPlainText(final_text);
|
||||||
|
emit plainTextChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -745,13 +769,19 @@ void DynamicElementTextItem::masterChanged()
|
|||||||
{
|
{
|
||||||
//First we remove the old connection
|
//First we remove the old connection
|
||||||
if(!m_master_element.isNull() && (m_text_from == ElementInfo || m_text_from == CompositeText))
|
if(!m_master_element.isNull() && (m_text_from == ElementInfo || m_text_from == CompositeText))
|
||||||
|
{
|
||||||
disconnect(m_master_element.data(), &Element::elementInfoChange, this, &DynamicElementTextItem::elementInfoChanged);
|
disconnect(m_master_element.data(), &Element::elementInfoChange, this, &DynamicElementTextItem::elementInfoChanged);
|
||||||
|
m_master_element.clear();
|
||||||
|
updateXref();
|
||||||
|
}
|
||||||
|
|
||||||
if(elementUseForInfo())
|
if(elementUseForInfo())
|
||||||
{
|
{
|
||||||
m_master_element = elementUseForInfo();
|
m_master_element = elementUseForInfo();
|
||||||
if(m_text_from == ElementInfo || m_text_from == CompositeText)
|
if(m_text_from == ElementInfo || m_text_from == CompositeText)
|
||||||
connect(m_master_element.data(), &Element::elementInfoChange, this, &DynamicElementTextItem::elementInfoChanged);
|
connect(m_master_element.data(), &Element::elementInfoChange, this, &DynamicElementTextItem::elementInfoChanged);
|
||||||
|
|
||||||
|
updateXref();
|
||||||
}
|
}
|
||||||
|
|
||||||
//Because master changed we update this text
|
//Because master changed we update this text
|
||||||
@@ -916,6 +946,9 @@ void DynamicElementTextItem::clearFormulaConnection()
|
|||||||
|
|
||||||
void DynamicElementTextItem::updateReportFormulaConnection()
|
void DynamicElementTextItem::updateReportFormulaConnection()
|
||||||
{
|
{
|
||||||
|
if(!m_parent_element.data()->linkType() & Element::AllReport)
|
||||||
|
return;
|
||||||
|
|
||||||
removeConnectionForReportFormula(m_report_formula);
|
removeConnectionForReportFormula(m_report_formula);
|
||||||
setConnectionForReportFormula(m_report_formula);
|
setConnectionForReportFormula(m_report_formula);
|
||||||
updateReportText();
|
updateReportText();
|
||||||
@@ -927,6 +960,9 @@ void DynamicElementTextItem::updateReportFormulaConnection()
|
|||||||
*/
|
*/
|
||||||
void DynamicElementTextItem::updateReportText()
|
void DynamicElementTextItem::updateReportText()
|
||||||
{
|
{
|
||||||
|
if(!m_parent_element.data()->linkType() & Element::AllReport)
|
||||||
|
return;
|
||||||
|
|
||||||
if (m_text_from == ElementInfo && m_info_name == "label" && m_other_report)
|
if (m_text_from == ElementInfo && m_info_name == "label" && m_other_report)
|
||||||
{
|
{
|
||||||
Element *elmt = m_other_report.data();
|
Element *elmt = m_other_report.data();
|
||||||
@@ -1003,6 +1039,9 @@ void DynamicElementTextItem::setPotentialConductor()
|
|||||||
{
|
{
|
||||||
if(parentElement() && (parentElement()->linkType() & Element::AllReport))
|
if(parentElement() && (parentElement()->linkType() & Element::AllReport))
|
||||||
{
|
{
|
||||||
|
if(parentElement()->terminals().isEmpty())
|
||||||
|
return;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* #First case, if m_watched_conductor is a conductor of the parent report, everything is ok
|
* #First case, if m_watched_conductor is a conductor of the parent report, everything is ok
|
||||||
* #Second case, if the conductors list of parent report element is not empty,
|
* #Second case, if the conductors list of parent report element is not empty,
|
||||||
@@ -1095,3 +1134,142 @@ QString DynamicElementTextItem::reportReplacedCompositeText() const
|
|||||||
return string;
|
return string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief DynamicElementTextItem::zoomToLinkedElement
|
||||||
|
* If the parent element is a folio report or a slave element,
|
||||||
|
* and is linked, zoom to the linked element
|
||||||
|
*/
|
||||||
|
void DynamicElementTextItem::zoomToLinkedElement()
|
||||||
|
{
|
||||||
|
if(!parentElement())
|
||||||
|
return;
|
||||||
|
|
||||||
|
Element *zoomed_element = nullptr;
|
||||||
|
|
||||||
|
if(parentElement()->linkType() == Element::Slave && m_master_element)
|
||||||
|
{
|
||||||
|
if ((m_text_from == ElementInfo && m_info_name == "label") ||
|
||||||
|
(m_text_from == CompositeText && m_composite_text.contains("%{label}")))
|
||||||
|
zoomed_element = m_master_element.data();
|
||||||
|
}
|
||||||
|
if((parentElement()->linkType() & Element::AllReport) && m_other_report)
|
||||||
|
{
|
||||||
|
if((m_text_from == ElementInfo && m_info_name == "label") ||
|
||||||
|
(m_text_from == CompositeText && m_composite_text.contains("%{label}")))
|
||||||
|
zoomed_element = m_other_report.data();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(zoomed_element)
|
||||||
|
{
|
||||||
|
//Unselect and ungrab mouse to prevent unwanted
|
||||||
|
//move when linked element is in the same scene of this.
|
||||||
|
setSelected(false);
|
||||||
|
ungrabMouse();
|
||||||
|
|
||||||
|
if(scene() != zoomed_element->scene())
|
||||||
|
zoomed_element->diagram()->showMe();
|
||||||
|
zoomed_element->setSelected(true);
|
||||||
|
|
||||||
|
//Zoom to the element
|
||||||
|
for(QGraphicsView *view : zoomed_element->scene()->views())
|
||||||
|
{
|
||||||
|
QRectF fit = zoomed_element->sceneBoundingRect();
|
||||||
|
fit.adjust(-200, -200, 200, 200);
|
||||||
|
view->fitInView(fit, Qt::KeepAspectRatioByExpanding);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief DynamicElementTextItem::updateXref
|
||||||
|
* Create or delete the Xref according to the current properties of the project
|
||||||
|
*/
|
||||||
|
void DynamicElementTextItem::updateXref()
|
||||||
|
{
|
||||||
|
if(diagram())
|
||||||
|
{
|
||||||
|
if(m_parent_element.data()->linkType() == Element::Master)
|
||||||
|
{
|
||||||
|
XRefProperties xrp = diagram()->project()->defaultXRefProperties(m_parent_element.data()->kindInformations()["type"].toString());
|
||||||
|
|
||||||
|
if(m_text_from == DynamicElementTextItem::ElementInfo &&
|
||||||
|
m_info_name == "label" &&
|
||||||
|
!m_parent_element.data()->linkedElements().isEmpty() &&
|
||||||
|
xrp.snapTo() == XRefProperties::Label)
|
||||||
|
{
|
||||||
|
//For add a Xref, this text must not be in a group
|
||||||
|
if(!parentGroup())
|
||||||
|
{
|
||||||
|
if(!m_Xref_item)
|
||||||
|
m_Xref_item = new CrossRefItem(m_parent_element.data(), this);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (m_parent_element.data()->linkType() == Element::Slave)
|
||||||
|
{
|
||||||
|
if(m_master_element && !parentGroup() &&
|
||||||
|
(
|
||||||
|
(m_text_from == DynamicElementTextItem::ElementInfo && m_info_name == "label") ||
|
||||||
|
(m_text_from == DynamicElementTextItem::CompositeText && m_composite_text.contains("%{label}"))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
{
|
||||||
|
XRefProperties xrp = diagram()->project()->defaultXRefProperties(m_master_element.data()->kindInformations()["type"].toString());
|
||||||
|
QString xref_label = xrp.slaveLabel();
|
||||||
|
xref_label = autonum::AssignVariables::formulaToLabel(xref_label, m_master_element.data()->rSequenceStruct(), m_master_element.data()->diagram(), m_master_element.data());
|
||||||
|
|
||||||
|
if(!m_slave_Xref_item)
|
||||||
|
{
|
||||||
|
m_slave_Xref_item = new QGraphicsTextItem(xref_label, this);
|
||||||
|
m_slave_Xref_item->setFont(QETApp::diagramTextsFont(5));
|
||||||
|
m_slave_Xref_item->installSceneEventFilter(this);
|
||||||
|
|
||||||
|
m_update_slave_Xref_connection << connect(m_master_element.data(), &Element::xChanged, this, &DynamicElementTextItem::updateXref);
|
||||||
|
m_update_slave_Xref_connection << connect(m_master_element.data(), &Element::yChanged, this, &DynamicElementTextItem::updateXref);
|
||||||
|
m_update_slave_Xref_connection << connect(m_master_element.data(), &Element::elementInfoChange, this, &DynamicElementTextItem::updateXref);
|
||||||
|
m_update_slave_Xref_connection << connect(diagram()->project(), &QETProject::projectDiagramsOrderChanged, this, &DynamicElementTextItem::updateXref);
|
||||||
|
m_update_slave_Xref_connection << connect(diagram()->project(), &QETProject::diagramRemoved, this, &DynamicElementTextItem::updateXref);
|
||||||
|
m_update_slave_Xref_connection << connect(diagram()->project(), &QETProject::XRefPropertiesChanged, this, &DynamicElementTextItem::updateXref);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
m_slave_Xref_item->setPlainText(xref_label);
|
||||||
|
|
||||||
|
QRectF r = boundingRect();
|
||||||
|
QPointF pos(r.center().x() - m_slave_Xref_item->boundingRect().width()/2,
|
||||||
|
r.bottom());
|
||||||
|
m_slave_Xref_item->setPos(pos);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//There is no reason to have a xref, we delete it if exist
|
||||||
|
if(m_Xref_item)
|
||||||
|
{
|
||||||
|
delete m_Xref_item;
|
||||||
|
m_Xref_item = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(m_slave_Xref_item)
|
||||||
|
{
|
||||||
|
delete m_slave_Xref_item;
|
||||||
|
m_slave_Xref_item = nullptr;
|
||||||
|
m_update_slave_Xref_connection.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DynamicElementTextItem::setPlainText(const QString &text)
|
||||||
|
{
|
||||||
|
DiagramTextItem::setPlainText(text);
|
||||||
|
if(m_Xref_item)
|
||||||
|
m_Xref_item->autoPos();
|
||||||
|
else if(m_slave_Xref_item)
|
||||||
|
{
|
||||||
|
QRectF r = boundingRect();
|
||||||
|
QPointF pos(r.center().x() - m_slave_Xref_item->boundingRect().width()/2,
|
||||||
|
r.bottom());
|
||||||
|
m_slave_Xref_item->setPos(pos);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,12 +19,14 @@
|
|||||||
#define DYNAMICELEMENTTEXTITEM_H
|
#define DYNAMICELEMENTTEXTITEM_H
|
||||||
|
|
||||||
#include "diagramtextitem.h"
|
#include "diagramtextitem.h"
|
||||||
|
#include "element.h"
|
||||||
#include <QUuid>
|
#include <QUuid>
|
||||||
#include <QPointer>
|
#include <QPointer>
|
||||||
|
|
||||||
class Element;
|
class Element;
|
||||||
class Conductor;
|
class Conductor;
|
||||||
class ElementTextItemGroup;
|
class ElementTextItemGroup;
|
||||||
|
class CrossRefItem;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief The DynamicElementTextItem class
|
* @brief The DynamicElementTextItem class
|
||||||
@@ -62,6 +64,7 @@ class DynamicElementTextItem : public DiagramTextItem
|
|||||||
void infoNameChanged(QString info);
|
void infoNameChanged(QString info);
|
||||||
void compositeTextChanged(QString text);
|
void compositeTextChanged(QString text);
|
||||||
void frameChanged(bool frame);
|
void frameChanged(bool frame);
|
||||||
|
void plainTextChanged();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
DynamicElementTextItem(Element *parent_element);
|
DynamicElementTextItem(Element *parent_element);
|
||||||
@@ -92,6 +95,8 @@ class DynamicElementTextItem : public DiagramTextItem
|
|||||||
void setFrame(const bool frame);
|
void setFrame(const bool frame);
|
||||||
bool frame() const;
|
bool frame() const;
|
||||||
QUuid uuid() const;
|
QUuid uuid() const;
|
||||||
|
void updateXref();
|
||||||
|
void setPlainText(const QString &text);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void mousePressEvent(QGraphicsSceneMouseEvent *event) override;
|
void mousePressEvent(QGraphicsSceneMouseEvent *event) override;
|
||||||
@@ -101,6 +106,8 @@ class DynamicElementTextItem : public DiagramTextItem
|
|||||||
void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override;
|
void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override;
|
||||||
void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override;
|
void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override;
|
||||||
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
|
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
|
||||||
|
QVariant itemChange(GraphicsItemChange change, const QVariant &value) override;
|
||||||
|
bool sceneEventFilter(QGraphicsItem *watched, QEvent *event) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void elementInfoChanged();
|
void elementInfoChanged();
|
||||||
@@ -119,6 +126,7 @@ class DynamicElementTextItem : public DiagramTextItem
|
|||||||
void setPotentialConductor();
|
void setPotentialConductor();
|
||||||
void conductorPropertiesChanged();
|
void conductorPropertiesChanged();
|
||||||
QString reportReplacedCompositeText() const;
|
QString reportReplacedCompositeText() const;
|
||||||
|
void zoomToLinkedElement();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QPointer <Element> m_parent_element,
|
QPointer <Element> m_parent_element,
|
||||||
@@ -133,9 +141,13 @@ class DynamicElementTextItem : public DiagramTextItem
|
|||||||
DynamicElementTextItem::TextFrom m_text_from = UserText;
|
DynamicElementTextItem::TextFrom m_text_from = UserText;
|
||||||
QUuid m_uuid;
|
QUuid m_uuid;
|
||||||
QMetaObject::Connection m_report_formula_con;
|
QMetaObject::Connection m_report_formula_con;
|
||||||
QList<QMetaObject::Connection> m_formula_connection;
|
QList<QMetaObject::Connection> m_formula_connection,
|
||||||
|
m_update_slave_Xref_connection;
|
||||||
QColor m_user_color;
|
QColor m_user_color;
|
||||||
bool m_frame = false;
|
bool m_frame = false,
|
||||||
|
m_first_scene_change = true;
|
||||||
|
CrossRefItem *m_Xref_item = nullptr;
|
||||||
|
QGraphicsTextItem *m_slave_Xref_item = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // DYNAMICELEMENTTEXTITEM_H
|
#endif // DYNAMICELEMENTTEXTITEM_H
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ Element::Element(QGraphicsItem *parent) :
|
|||||||
must_highlight_(false),
|
must_highlight_(false),
|
||||||
m_mouse_over(false)
|
m_mouse_over(false)
|
||||||
{
|
{
|
||||||
link_type_ = Simple;
|
m_link_type = Simple;
|
||||||
uuid_ = QUuid::createUuid();
|
uuid_ = QUuid::createUuid();
|
||||||
setZValue(10);
|
setZValue(10);
|
||||||
setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
|
setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
|
||||||
@@ -386,17 +386,17 @@ bool Element::valideXml(QDomElement &e) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Methode d'import XML. Cette methode est appelee lors de l'import de contenu
|
* @brief Element::fromXml
|
||||||
XML (coller, import, ouverture de fichier...) afin que l'element puisse
|
* Import the parameters of this element from a xml document.
|
||||||
gerer lui-meme l'importation de ses bornes. Ici, comme cette classe est
|
* When call this function ensure this element is already in a scene, because
|
||||||
caracterisee par un nombre fixe de bornes, l'implementation exige de
|
* the dynamic text item and element text item group (in the xml file) are created in this function
|
||||||
retrouver exactement ses bornes dans le fichier XML.
|
* and need a diagram for create their Xref, when this element is linked to another.
|
||||||
@param e L'element XML a analyser.
|
* If not the Xref can be not displayed, until the next call of update Xref of the group or text item.
|
||||||
@param table_id_adr Reference vers la table de correspondance entre les IDs
|
* @param e : the dom element where the parameter is stored
|
||||||
du fichier XML et les adresses en memoire. Si l'import reussit, il faut y
|
* @param table_id_adr : Reference to the mapping table between IDs of the XML file
|
||||||
ajouter les bons couples (id, adresse).
|
* and the addresses in memory. If the import succeeds, it must be add the right couples (id, address).
|
||||||
@return true si l'import a reussi, false sinon
|
* @param handle_inputs_rotation : apply the rotation of this element to his child text
|
||||||
|
* @return
|
||||||
*/
|
*/
|
||||||
bool Element::fromXml(QDomElement &e, QHash<int, Terminal *> &table_id_adr, bool handle_inputs_rotation)
|
bool Element::fromXml(QDomElement &e, QHash<int, Terminal *> &table_id_adr, bool handle_inputs_rotation)
|
||||||
{
|
{
|
||||||
@@ -507,6 +507,7 @@ bool Element::fromXml(QDomElement &e, QHash<int, Terminal *> &table_id_adr, bool
|
|||||||
|
|
||||||
//First case, we check for the text item converted to dynamic text item
|
//First case, we check for the text item converted to dynamic text item
|
||||||
const QList <DynamicElementTextItem *> conv_deti_list = m_converted_text_from_xml_description.keys();
|
const QList <DynamicElementTextItem *> conv_deti_list = m_converted_text_from_xml_description.keys();
|
||||||
|
QList <DynamicElementTextItem *> successfully_converted;
|
||||||
const QList <QDomElement> dom_inputs = inputs;
|
const QList <QDomElement> dom_inputs = inputs;
|
||||||
|
|
||||||
for (DynamicElementTextItem *deti : conv_deti_list)
|
for (DynamicElementTextItem *deti : conv_deti_list)
|
||||||
@@ -554,6 +555,7 @@ bool Element::fromXml(QDomElement &e, QHash<int, Terminal *> &table_id_adr, bool
|
|||||||
inputs.removeAll(dom_input);
|
inputs.removeAll(dom_input);
|
||||||
m_dynamic_text_list.append(deti);
|
m_dynamic_text_list.append(deti);
|
||||||
m_converted_text_from_xml_description.remove(deti);
|
m_converted_text_from_xml_description.remove(deti);
|
||||||
|
successfully_converted << deti;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -591,17 +593,19 @@ bool Element::fromXml(QDomElement &e, QHash<int, Terminal *> &table_id_adr, bool
|
|||||||
}
|
}
|
||||||
|
|
||||||
//load informations
|
//load informations
|
||||||
m_element_informations.fromXml(e.firstChildElement("elementInformations"), "elementInformation");
|
DiagramContext dc;
|
||||||
|
dc.fromXml(e.firstChildElement("elementInformations"), "elementInformation");
|
||||||
/**
|
/**
|
||||||
* Since the commit 4791, the value used as "label" and "formula" is stored in differents keys (instead of the same key, "label" in previous version),
|
* Since the commit 4791, the value used as "label" and "formula" is stored in differents keys (instead of the same key, "label" in previous version),
|
||||||
* so, if "label" contain "%" (Use variable value), and "formula" does not exist,
|
* so, if "label" contain "%" (Use variable value), and "formula" does not exist,
|
||||||
* this mean the label was made before commit 4791 (0.51 dev). So we swap the value stored in "label" to "formula" as expected.
|
* this mean the label was made before commit 4791 (0.51 dev). So we swap the value stored in "label" to "formula" as expected.
|
||||||
* @TODO remove this code at version 0.7 or more (probably useless).
|
* @TODO remove this code at version 0.7 or more (probably useless).
|
||||||
*/
|
*/
|
||||||
if (m_element_informations["label"].toString().contains("%") && m_element_informations["formula"].toString().isNull())
|
if (dc["label"].toString().contains("%") && dc["formula"].toString().isNull())
|
||||||
{
|
{
|
||||||
m_element_informations.addValue("formula", m_element_informations["label"]);
|
dc.addValue("formula", dc["label"]);
|
||||||
}
|
}
|
||||||
|
setElementInformations(dc);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* At the start of the 0.51 devel, if the text item with tagg "label" was edited directly in the diagram,
|
* At the start of the 0.51 devel, if the text item with tagg "label" was edited directly in the diagram,
|
||||||
@@ -627,6 +631,71 @@ bool Element::fromXml(QDomElement &e, QHash<int, Terminal *> &table_id_adr, bool
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
During the devel of the version 0.7, the "old text" was replaced by the dynamic element text item.
|
||||||
|
When open a project made befor the 0.7, we must to reproduce the same visual when the label are not empty and visible,
|
||||||
|
and comment are not empty and visible and/or location are not empty and visible.
|
||||||
|
we create a text group with inside the needed texts, label and comment and/or location.
|
||||||
|
*/
|
||||||
|
//#1 There must be old text converted to dynamic text
|
||||||
|
if(!successfully_converted.isEmpty())
|
||||||
|
{
|
||||||
|
//#2 the element information must have label not empty and visible
|
||||||
|
//and a least comment or location not empty and visible
|
||||||
|
QString label = m_element_informations.value("label").toString();
|
||||||
|
QString comment = m_element_informations.value("comment").toString();
|
||||||
|
QString location = m_element_informations.value("location").toString();
|
||||||
|
bool la = m_element_informations.keyMustShow("label");
|
||||||
|
bool c = m_element_informations.keyMustShow("comment");
|
||||||
|
bool lo = m_element_informations.keyMustShow("location");
|
||||||
|
if(!label.isEmpty() && la &&
|
||||||
|
((!comment.isEmpty() && c) || (!location.isEmpty() && lo)))
|
||||||
|
{
|
||||||
|
//#2 in the converted list one text must have text from = element info and info name = label
|
||||||
|
for(DynamicElementTextItem *deti : successfully_converted)
|
||||||
|
{
|
||||||
|
if(deti->textFrom() == DynamicElementTextItem::ElementInfo && deti->infoName() == "label")
|
||||||
|
{
|
||||||
|
//Create the comment item
|
||||||
|
DynamicElementTextItem *comment_text = nullptr;
|
||||||
|
if(!comment.isEmpty() && c)
|
||||||
|
{
|
||||||
|
comment_text = new DynamicElementTextItem(this);
|
||||||
|
comment_text->setTextFrom(DynamicElementTextItem::ElementInfo);
|
||||||
|
comment_text->setInfoName("comment");
|
||||||
|
comment_text->setFontSize(6);
|
||||||
|
comment_text->setFrame(true);
|
||||||
|
comment_text->setPos(deti->x(), deti->y()+10); //+10 is arbitrary, comment_text must be below deti
|
||||||
|
addDynamicTextItem(comment_text);
|
||||||
|
}
|
||||||
|
//create the location item
|
||||||
|
DynamicElementTextItem *location_text = nullptr;
|
||||||
|
if(!location.isEmpty() && lo)
|
||||||
|
{
|
||||||
|
location_text = new DynamicElementTextItem(this);
|
||||||
|
location_text->setTextFrom(DynamicElementTextItem::ElementInfo);
|
||||||
|
location_text->setInfoName("location");
|
||||||
|
location_text->setFontSize(6);
|
||||||
|
location_text->setPos(deti->x(), deti->y()+20); //+20 is arbitrary, location_text must be below deti and comment
|
||||||
|
addDynamicTextItem(location_text);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Create the group
|
||||||
|
ElementTextItemGroup *group = addTextGroup(tr("Label + commentaire"));
|
||||||
|
addTextToGroup(deti, group);
|
||||||
|
if(comment_text)
|
||||||
|
addTextToGroup(comment_text, group);
|
||||||
|
if(location_text)
|
||||||
|
addTextToGroup(location_text, group);
|
||||||
|
group->setAlignment(Qt::AlignVCenter);
|
||||||
|
group->setVerticalAdjustment(-4);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return(true);
|
return(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -117,7 +117,7 @@ class Element : public QetGraphicsItem
|
|||||||
virtual void unlinkElement (Element *) {}
|
virtual void unlinkElement (Element *) {}
|
||||||
virtual void initLink (QETProject *);
|
virtual void initLink (QETProject *);
|
||||||
QList<Element *> linkedElements ();
|
QList<Element *> linkedElements ();
|
||||||
virtual kind linkType() const {return link_type_;} // @return the linkable type
|
virtual kind linkType() const {return m_link_type;} // @return the linkable type
|
||||||
void newUuid() {uuid_ = QUuid::createUuid();} //create new uuid for this element
|
void newUuid() {uuid_ = QUuid::createUuid();} //create new uuid for this element
|
||||||
|
|
||||||
//ATTRIBUTES related to linked element
|
//ATTRIBUTES related to linked element
|
||||||
@@ -125,7 +125,7 @@ class Element : public QetGraphicsItem
|
|||||||
QList <Element *> connected_elements;
|
QList <Element *> connected_elements;
|
||||||
QList <QUuid> tmp_uuids_link;
|
QList <QUuid> tmp_uuids_link;
|
||||||
QUuid uuid_;
|
QUuid uuid_;
|
||||||
kind link_type_;
|
kind m_link_type;
|
||||||
ElementTextItem* setTaggedText(const QString &tagg, const QString &newstr, const bool noeditable=false);
|
ElementTextItem* setTaggedText(const QString &tagg, const QString &newstr, const bool noeditable=false);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
|||||||
@@ -21,6 +21,8 @@
|
|||||||
#include "diagram.h"
|
#include "diagram.h"
|
||||||
#include "addelementtextcommand.h"
|
#include "addelementtextcommand.h"
|
||||||
#include "QPropertyUndoCommand/qpropertyundocommand.h"
|
#include "QPropertyUndoCommand/qpropertyundocommand.h"
|
||||||
|
#include "crossrefitem.h"
|
||||||
|
#include "qetapp.h"
|
||||||
|
|
||||||
#include <QPainter>
|
#include <QPainter>
|
||||||
#include <QGraphicsSceneMouseEvent>
|
#include <QGraphicsSceneMouseEvent>
|
||||||
@@ -36,9 +38,11 @@ bool sorting(QGraphicsItem *qgia, QGraphicsItem *qgib)
|
|||||||
*/
|
*/
|
||||||
ElementTextItemGroup::ElementTextItemGroup(const QString &name, Element *parent) :
|
ElementTextItemGroup::ElementTextItemGroup(const QString &name, Element *parent) :
|
||||||
QGraphicsItemGroup(parent),
|
QGraphicsItemGroup(parent),
|
||||||
m_name(name)
|
m_name(name),
|
||||||
|
m_parent_element(parent)
|
||||||
{
|
{
|
||||||
setFlags(QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsMovable);
|
setFlags(QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsMovable);
|
||||||
|
connect(parent, &Element::linkedElementChanged, this, &ElementTextItemGroup::updateXref);
|
||||||
}
|
}
|
||||||
|
|
||||||
ElementTextItemGroup::~ElementTextItemGroup()
|
ElementTextItemGroup::~ElementTextItemGroup()
|
||||||
@@ -70,6 +74,12 @@ void ElementTextItemGroup::addToGroup(QGraphicsItem *item)
|
|||||||
connect(deti, &DynamicElementTextItem::textFromChanged, this, &ElementTextItemGroup::updateAlignment);
|
connect(deti, &DynamicElementTextItem::textFromChanged, this, &ElementTextItemGroup::updateAlignment);
|
||||||
connect(deti, &DynamicElementTextItem::infoNameChanged, this, &ElementTextItemGroup::updateAlignment);
|
connect(deti, &DynamicElementTextItem::infoNameChanged, this, &ElementTextItemGroup::updateAlignment);
|
||||||
connect(deti, &DynamicElementTextItem::compositeTextChanged, this, &ElementTextItemGroup::updateAlignment);
|
connect(deti, &DynamicElementTextItem::compositeTextChanged, this, &ElementTextItemGroup::updateAlignment);
|
||||||
|
connect(deti, &DynamicElementTextItem::plainTextChanged, this, &ElementTextItemGroup::updateAlignment);
|
||||||
|
|
||||||
|
connect(deti, &DynamicElementTextItem::textFromChanged, this, &ElementTextItemGroup::updateXref);
|
||||||
|
connect(deti, &DynamicElementTextItem::infoNameChanged, this, &ElementTextItemGroup::updateXref);
|
||||||
|
|
||||||
|
updateXref();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -94,6 +104,12 @@ void ElementTextItemGroup::removeFromGroup(QGraphicsItem *item)
|
|||||||
disconnect(deti, &DynamicElementTextItem::textFromChanged, this, &ElementTextItemGroup::updateAlignment);
|
disconnect(deti, &DynamicElementTextItem::textFromChanged, this, &ElementTextItemGroup::updateAlignment);
|
||||||
disconnect(deti, &DynamicElementTextItem::infoNameChanged, this, &ElementTextItemGroup::updateAlignment);
|
disconnect(deti, &DynamicElementTextItem::infoNameChanged, this, &ElementTextItemGroup::updateAlignment);
|
||||||
disconnect(deti, &DynamicElementTextItem::compositeTextChanged, this, &ElementTextItemGroup::updateAlignment);
|
disconnect(deti, &DynamicElementTextItem::compositeTextChanged, this, &ElementTextItemGroup::updateAlignment);
|
||||||
|
disconnect(deti, &DynamicElementTextItem::plainTextChanged, this, &ElementTextItemGroup::updateAlignment);
|
||||||
|
|
||||||
|
disconnect(deti, &DynamicElementTextItem::textFromChanged, this, &ElementTextItemGroup::updateXref);
|
||||||
|
disconnect(deti, &DynamicElementTextItem::infoNameChanged, this, &ElementTextItemGroup::updateXref);
|
||||||
|
|
||||||
|
updateXref();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -124,7 +140,8 @@ void ElementTextItemGroup::updateAlignment()
|
|||||||
{
|
{
|
||||||
prepareGeometryChange();
|
prepareGeometryChange();
|
||||||
|
|
||||||
QList <QGraphicsItem *> texts = childItems();
|
QList <DynamicElementTextItem *> texts = this->texts();
|
||||||
|
|
||||||
if (texts.size() > 1)
|
if (texts.size() > 1)
|
||||||
{
|
{
|
||||||
prepareGeometryChange();
|
prepareGeometryChange();
|
||||||
@@ -169,6 +186,11 @@ void ElementTextItemGroup::updateAlignment()
|
|||||||
|
|
||||||
setTransformOriginPoint(boundingRect().topLeft());
|
setTransformOriginPoint(boundingRect().topLeft());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(m_Xref_item)
|
||||||
|
m_Xref_item->autoPos();
|
||||||
|
if(m_slave_Xref_item)
|
||||||
|
adjustSlaveXrefPos();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -334,7 +356,7 @@ QRectF ElementTextItemGroup::boundingRect() const
|
|||||||
//if we move an item already in the group, the bounding rect of the group stay unchanged.
|
//if we move an item already in the group, the bounding rect of the group stay unchanged.
|
||||||
//We reimplement this function to avoid this behavior.
|
//We reimplement this function to avoid this behavior.
|
||||||
QRectF rect;
|
QRectF rect;
|
||||||
for(QGraphicsItem *qgi : childItems())
|
for(QGraphicsItem *qgi : texts())
|
||||||
{
|
{
|
||||||
QRectF r(qgi->pos(), QSize(qgi->boundingRect().width(), qgi->boundingRect().height()));
|
QRectF r(qgi->pos(), QSize(qgi->boundingRect().width(), qgi->boundingRect().height()));
|
||||||
rect = rect.united(r);
|
rect = rect.united(r);
|
||||||
@@ -414,6 +436,38 @@ void ElementTextItemGroup::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
|
|||||||
QGraphicsItemGroup::mouseReleaseEvent(event);
|
QGraphicsItemGroup::mouseReleaseEvent(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ElementTextItemGroup::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
|
||||||
|
{
|
||||||
|
if(m_slave_Xref_item)
|
||||||
|
{
|
||||||
|
if(m_slave_Xref_item->boundingRect().contains(mapToItem(m_slave_Xref_item, event->pos())))
|
||||||
|
{
|
||||||
|
if(parentElement()->linkType() == Element::Slave && !parentElement()->linkedElements().isEmpty())
|
||||||
|
{
|
||||||
|
m_slave_Xref_item->setDefaultTextColor(Qt::black);
|
||||||
|
Element *elmt = parentElement()->linkedElements().first();
|
||||||
|
|
||||||
|
//Unselect and ungrab mouse to prevent unwanted
|
||||||
|
//move when linked element is in the same scene of this.
|
||||||
|
setSelected(false);
|
||||||
|
ungrabMouse();
|
||||||
|
|
||||||
|
if(scene() != elmt->scene())
|
||||||
|
elmt->diagram()->showMe();
|
||||||
|
elmt->setSelected(true);
|
||||||
|
|
||||||
|
//Zoom to the element
|
||||||
|
for(QGraphicsView *view : elmt->scene()->views())
|
||||||
|
{
|
||||||
|
QRectF fit = elmt->sceneBoundingRect();
|
||||||
|
fit.adjust(-200, -200, 200, 200);
|
||||||
|
view->fitInView(fit, Qt::KeepAspectRatioByExpanding);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief ElementTextItemGroup::keyPressEvent
|
* @brief ElementTextItemGroup::keyPressEvent
|
||||||
* @param event
|
* @param event
|
||||||
@@ -447,3 +501,111 @@ void ElementTextItemGroup::keyPressEvent(QKeyEvent *event)
|
|||||||
event->ignore();
|
event->ignore();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ElementTextItemGroup::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
|
||||||
|
{
|
||||||
|
//The pos of the event is not in this item coordinate,
|
||||||
|
//but in child item hovered by the mouse, so we use the scene pos.
|
||||||
|
if(m_slave_Xref_item &&
|
||||||
|
m_slave_Xref_item->boundingRect().contains(m_slave_Xref_item->mapFromScene(event->scenePos())))
|
||||||
|
m_slave_Xref_item->setDefaultTextColor(Qt::blue);
|
||||||
|
|
||||||
|
QGraphicsItemGroup::hoverEnterEvent(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ElementTextItemGroup::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
|
||||||
|
{
|
||||||
|
if(m_slave_Xref_item)
|
||||||
|
m_slave_Xref_item->setDefaultTextColor(Qt::black);
|
||||||
|
|
||||||
|
QGraphicsItemGroup::hoverLeaveEvent(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ElementTextItemGroup::updateXref()
|
||||||
|
{
|
||||||
|
if(m_parent_element->diagram())
|
||||||
|
{
|
||||||
|
QETProject *project = m_parent_element->diagram()->project();
|
||||||
|
|
||||||
|
if(m_parent_element->linkType() == Element::Master &&
|
||||||
|
!m_parent_element->linkedElements().isEmpty())
|
||||||
|
{
|
||||||
|
|
||||||
|
XRefProperties xrp = project->defaultXRefProperties(m_parent_element->kindInformations()["type"].toString());
|
||||||
|
|
||||||
|
if(xrp.snapTo() == XRefProperties::Label)
|
||||||
|
{
|
||||||
|
//At least one text owned by this group must be set with
|
||||||
|
//textFrom -> element info and element info name -> label
|
||||||
|
//for display a xref
|
||||||
|
for(DynamicElementTextItem *deti : texts())
|
||||||
|
{
|
||||||
|
if(deti->textFrom() == DynamicElementTextItem::ElementInfo &&
|
||||||
|
deti->infoName() == "label")
|
||||||
|
{
|
||||||
|
if(!m_Xref_item)
|
||||||
|
m_Xref_item = new CrossRefItem(m_parent_element, this);
|
||||||
|
m_Xref_item->autoPos();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(m_parent_element->linkType() == Element::Slave &&
|
||||||
|
!m_parent_element->linkedElements().isEmpty())
|
||||||
|
{
|
||||||
|
Element *master_elmt = m_parent_element->linkedElements().first();
|
||||||
|
for(DynamicElementTextItem *deti : texts())
|
||||||
|
{
|
||||||
|
if((deti->textFrom() == DynamicElementTextItem::ElementInfo && deti->infoName() == "label") ||
|
||||||
|
(deti->textFrom() == DynamicElementTextItem::CompositeText && deti->compositeText().contains("%{label")))
|
||||||
|
{
|
||||||
|
XRefProperties xrp = project->defaultXRefProperties(master_elmt->kindInformations()["type"].toString());
|
||||||
|
QString xref_label = xrp.slaveLabel();
|
||||||
|
xref_label = autonum::AssignVariables::formulaToLabel(xref_label, master_elmt->rSequenceStruct(), master_elmt->diagram(), master_elmt);
|
||||||
|
|
||||||
|
if(!m_slave_Xref_item)
|
||||||
|
{
|
||||||
|
m_slave_Xref_item = new QGraphicsTextItem(xref_label, this);
|
||||||
|
m_slave_Xref_item->setFont(QETApp::diagramTextsFont(5));
|
||||||
|
|
||||||
|
m_update_slave_Xref_connection << connect(master_elmt, &Element::xChanged, this, &ElementTextItemGroup::updateXref);
|
||||||
|
m_update_slave_Xref_connection << connect(master_elmt, &Element::yChanged, this, &ElementTextItemGroup::updateXref);
|
||||||
|
m_update_slave_Xref_connection << connect(master_elmt, &Element::elementInfoChange, this, &ElementTextItemGroup::updateXref);
|
||||||
|
m_update_slave_Xref_connection << connect(project, &QETProject::projectDiagramsOrderChanged, this, &ElementTextItemGroup::updateXref);
|
||||||
|
m_update_slave_Xref_connection << connect(project, &QETProject::diagramRemoved, this, &ElementTextItemGroup::updateXref);
|
||||||
|
m_update_slave_Xref_connection << connect(project, &QETProject::XRefPropertiesChanged, this, &ElementTextItemGroup::updateXref);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
m_slave_Xref_item->setPlainText(xref_label);
|
||||||
|
|
||||||
|
adjustSlaveXrefPos();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//There is no reason to have a xref, we delete it if exist
|
||||||
|
if(m_Xref_item)
|
||||||
|
{
|
||||||
|
delete m_Xref_item;
|
||||||
|
m_Xref_item = nullptr;
|
||||||
|
}
|
||||||
|
if(m_slave_Xref_item)
|
||||||
|
{
|
||||||
|
delete m_slave_Xref_item;
|
||||||
|
m_slave_Xref_item = nullptr;
|
||||||
|
m_update_slave_Xref_connection.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ElementTextItemGroup::adjustSlaveXrefPos()
|
||||||
|
{
|
||||||
|
QRectF r = boundingRect();
|
||||||
|
QPointF pos(r.center().x() - m_slave_Xref_item->boundingRect().width()/2,
|
||||||
|
r.bottom());
|
||||||
|
m_slave_Xref_item->setPos(pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,7 @@
|
|||||||
class Element;
|
class Element;
|
||||||
class DynamicElementTextItem;
|
class DynamicElementTextItem;
|
||||||
class Diagram;
|
class Diagram;
|
||||||
|
class CrossRefItem;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief The ElementTextItemGroup class
|
* @brief The ElementTextItemGroup class
|
||||||
@@ -77,7 +78,14 @@ class ElementTextItemGroup : public QObject, public QGraphicsItemGroup
|
|||||||
void mousePressEvent(QGraphicsSceneMouseEvent *event) override;
|
void mousePressEvent(QGraphicsSceneMouseEvent *event) override;
|
||||||
void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override;
|
void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override;
|
||||||
void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override;
|
void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override;
|
||||||
|
void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) override;
|
||||||
void keyPressEvent(QKeyEvent *event) override;
|
void keyPressEvent(QKeyEvent *event) override;
|
||||||
|
void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override;
|
||||||
|
void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
void updateXref();
|
||||||
|
void adjustSlaveXrefPos();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Qt::Alignment m_alignment = Qt::AlignJustify;
|
Qt::Alignment m_alignment = Qt::AlignJustify;
|
||||||
@@ -85,6 +93,10 @@ class ElementTextItemGroup : public QObject, public QGraphicsItemGroup
|
|||||||
bool m_first_move = true;
|
bool m_first_move = true;
|
||||||
QPointF m_mouse_to_origin_movement;
|
QPointF m_mouse_to_origin_movement;
|
||||||
int m_vertical_adjustment = 0;
|
int m_vertical_adjustment = 0;
|
||||||
|
CrossRefItem *m_Xref_item = nullptr;
|
||||||
|
Element *m_parent_element = nullptr;
|
||||||
|
QList<QMetaObject::Connection> m_update_slave_Xref_connection;
|
||||||
|
QGraphicsTextItem *m_slave_Xref_item = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // ELEMENTTEXTITEMGROUP_H
|
#endif // ELEMENTTEXTITEMGROUP_H
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
#include "crossrefitem.h"
|
#include "crossrefitem.h"
|
||||||
#include "elementtextitem.h"
|
#include "elementtextitem.h"
|
||||||
#include "diagram.h"
|
#include "diagram.h"
|
||||||
|
#include "dynamicelementtextitem.h"
|
||||||
#include <QRegularExpression>
|
#include <QRegularExpression>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -30,10 +31,10 @@
|
|||||||
* @param state int used to know if the creation of element have error
|
* @param state int used to know if the creation of element have error
|
||||||
*/
|
*/
|
||||||
MasterElement::MasterElement(const ElementsLocation &location, QGraphicsItem *qgi, int *state) :
|
MasterElement::MasterElement(const ElementsLocation &location, QGraphicsItem *qgi, int *state) :
|
||||||
CustomElement(location, qgi, state),
|
CustomElement(location, qgi, state)
|
||||||
m_Xref_item (nullptr)
|
|
||||||
{
|
{
|
||||||
link_type_ = Master;
|
m_link_type = Element::Master;
|
||||||
|
|
||||||
connect(this, SIGNAL(elementInfoChange(DiagramContext, DiagramContext)), this, SLOT(updateLabel(DiagramContext, DiagramContext)));
|
connect(this, SIGNAL(elementInfoChange(DiagramContext, DiagramContext)), this, SLOT(updateLabel(DiagramContext, DiagramContext)));
|
||||||
connect(this, &Element::updateLabel, [this]() {this->updateLabel(this->elementInformations(), this->elementInformations());});
|
connect(this, &Element::updateLabel, [this]() {this->updateLabel(this->elementInformations(), this->elementInformations());});
|
||||||
}
|
}
|
||||||
@@ -60,13 +61,12 @@ void MasterElement::linkToElement(Element *elmt)
|
|||||||
connected_elements << elmt;
|
connected_elements << elmt;
|
||||||
elmt->linkToElement(this);
|
elmt->linkToElement(this);
|
||||||
|
|
||||||
if (!m_Xref_item) m_Xref_item = new CrossRefItem(this); //create cross ref item if not yet
|
XRefProperties xrp = diagram()->project()->defaultXRefProperties(kindInformations()["type"].toString());
|
||||||
|
if (!m_Xref_item && xrp.snapTo() == XRefProperties::Bottom)
|
||||||
|
m_Xref_item = new CrossRefItem(this); //create cross ref item if not yet
|
||||||
|
else
|
||||||
|
aboutDeleteXref();
|
||||||
|
|
||||||
connect(elmt, SIGNAL(xChanged()), m_Xref_item, SLOT(updateLabel()));
|
|
||||||
connect(elmt, SIGNAL(yChanged()), m_Xref_item, SLOT(updateLabel()));
|
|
||||||
connect(elmt, SIGNAL(updateLabel()), m_Xref_item, SLOT(updateLabel()));
|
|
||||||
connect(&elmt->diagram()->border_and_titleblock, &BorderTitleBlock::titleBlockFolioChanged, m_Xref_item, &CrossRefItem::updateLabel);
|
|
||||||
m_Xref_item -> updateLabel();
|
|
||||||
emit linkedElementChanged();
|
emit linkedElementChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -100,13 +100,6 @@ void MasterElement::unlinkElement(Element *elmt)
|
|||||||
elmt -> unlinkElement (this);
|
elmt -> unlinkElement (this);
|
||||||
elmt -> setHighlighted (false);
|
elmt -> setHighlighted (false);
|
||||||
|
|
||||||
//update the graphics cross ref
|
|
||||||
disconnect(elmt, SIGNAL(xChanged()), m_Xref_item, SLOT(updateLabel()));
|
|
||||||
disconnect(elmt, SIGNAL(yChanged()), m_Xref_item, SLOT(updateLabel()));
|
|
||||||
disconnect(elmt, SIGNAL(updateLabel()), m_Xref_item, SLOT(updateLabel()));
|
|
||||||
disconnect(&elmt->diagram()->border_and_titleblock, &BorderTitleBlock::titleBlockFolioChanged, m_Xref_item, &CrossRefItem::updateLabel);
|
|
||||||
|
|
||||||
m_Xref_item -> updateLabel();
|
|
||||||
aboutDeleteXref();
|
aboutDeleteXref();
|
||||||
emit linkedElementChanged();
|
emit linkedElementChanged();
|
||||||
}
|
}
|
||||||
@@ -154,23 +147,32 @@ void MasterElement::updateLabel(DiagramContext old_info, DiagramContext new_info
|
|||||||
new_info["label"].toString().isEmpty() ? eti->setVisible(true) : eti -> setVisible(new_info.keyMustShow("label"));
|
new_info["label"].toString().isEmpty() ? eti->setVisible(true) : eti -> setVisible(new_info.keyMustShow("label"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//Delete or update the xref
|
|
||||||
if (m_Xref_item) {
|
|
||||||
m_Xref_item -> updateLabel();
|
|
||||||
aboutDeleteXref();
|
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
QString comment = elementInformations()["comment"].toString();
|
|
||||||
bool must_show_comment = elementInformations().keyMustShow("comment");
|
|
||||||
|
|
||||||
QString location = elementInformations()["location"].toString();
|
QVariant MasterElement::itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value)
|
||||||
bool must_show_location = elementInformations().keyMustShow("location");
|
{
|
||||||
|
if(change == QGraphicsItem::ItemSceneHasChanged && m_first_scene_change)
|
||||||
|
{
|
||||||
|
m_first_scene_change = false;
|
||||||
|
connect(diagram()->project(), &QETProject::XRefPropertiesChanged, this, &MasterElement::xrefPropertiesChanged);
|
||||||
|
}
|
||||||
|
return CustomElement::itemChange(change, value);
|
||||||
|
}
|
||||||
|
|
||||||
if (! (comment.isEmpty() || !must_show_comment) || !(location.isEmpty() || !must_show_location)) {
|
void MasterElement::xrefPropertiesChanged()
|
||||||
|
{
|
||||||
|
if(!diagram())
|
||||||
|
return;
|
||||||
|
|
||||||
|
XRefProperties xrp = diagram()->project()->defaultXRefProperties(kindInformations()["type"].toString());
|
||||||
|
if(xrp.snapTo() == XRefProperties::Bottom)
|
||||||
|
{
|
||||||
|
//We create a Xref, and just after we call aboutDeleteXref,
|
||||||
|
//because the Xref may be useless.
|
||||||
|
if(!m_Xref_item)
|
||||||
m_Xref_item = new CrossRefItem(this);
|
m_Xref_item = new CrossRefItem(this);
|
||||||
}
|
}
|
||||||
}
|
aboutDeleteXref();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -183,15 +185,23 @@ void MasterElement::updateLabel(DiagramContext old_info, DiagramContext new_info
|
|||||||
* option show power contact is disable, the cross isn't draw.
|
* option show power contact is disable, the cross isn't draw.
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
bool MasterElement::aboutDeleteXref() {
|
void MasterElement::aboutDeleteXref()
|
||||||
if(!m_Xref_item) return true;
|
{
|
||||||
if(!linkedElements().isEmpty()) return false;
|
if(!m_Xref_item)
|
||||||
|
return;
|
||||||
|
|
||||||
if (m_Xref_item -> boundingRect().isNull()) {
|
XRefProperties xrp = diagram()->project()->defaultXRefProperties(kindInformations()["type"].toString());
|
||||||
|
if (xrp.snapTo() != XRefProperties::Bottom && m_Xref_item)
|
||||||
|
{
|
||||||
delete m_Xref_item;
|
delete m_Xref_item;
|
||||||
m_Xref_item = nullptr;
|
m_Xref_item = nullptr;
|
||||||
return true;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
if (m_Xref_item->boundingRect().isNull())
|
||||||
|
{
|
||||||
|
delete m_Xref_item;
|
||||||
|
m_Xref_item = nullptr;
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,11 +44,16 @@ class MasterElement : public CustomElement
|
|||||||
public slots:
|
public slots:
|
||||||
void updateLabel(DiagramContext old_info, DiagramContext new_info);
|
void updateLabel(DiagramContext old_info, DiagramContext new_info);
|
||||||
|
|
||||||
private:
|
protected:
|
||||||
bool aboutDeleteXref ();
|
QVariant itemChange(GraphicsItemChange change, const QVariant &value) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
CrossRefItem *m_Xref_item;
|
void xrefPropertiesChanged();
|
||||||
|
void aboutDeleteXref ();
|
||||||
|
|
||||||
|
private:
|
||||||
|
CrossRefItem *m_Xref_item = nullptr;
|
||||||
|
bool m_first_scene_change = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // MASTERELEMENT_H
|
#endif // MASTERELEMENT_H
|
||||||
|
|||||||
@@ -22,6 +22,7 @@
|
|||||||
#include "diagram.h"
|
#include "diagram.h"
|
||||||
#include "terminal.h"
|
#include "terminal.h"
|
||||||
#include "conductor.h"
|
#include "conductor.h"
|
||||||
|
#include "dynamicelementtextitem.h"
|
||||||
|
|
||||||
ReportElement::ReportElement(const ElementsLocation &location, QString link_type,QGraphicsItem *qgi, int *state) :
|
ReportElement::ReportElement(const ElementsLocation &location, QString link_type,QGraphicsItem *qgi, int *state) :
|
||||||
CustomElement(location, qgi, state),
|
CustomElement(location, qgi, state),
|
||||||
@@ -40,7 +41,7 @@ ReportElement::ReportElement(const ElementsLocation &location, QString link_type
|
|||||||
if (m_text_field)
|
if (m_text_field)
|
||||||
m_text_field -> setNoEditable();
|
m_text_field -> setNoEditable();
|
||||||
|
|
||||||
link_type == "next_report"? link_type_=NextReport : link_type_=PreviousReport;
|
link_type == "next_report"? m_link_type=NextReport : m_link_type=PreviousReport;
|
||||||
link_type == "next_report"? m_inverse_report=PreviousReport : m_inverse_report=NextReport;
|
link_type == "next_report"? m_inverse_report=PreviousReport : m_inverse_report=NextReport;
|
||||||
|
|
||||||
//We make these connections, to be always aware about the conductor properties
|
//We make these connections, to be always aware about the conductor properties
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ SimpleElement::SimpleElement(const ElementsLocation &location, QGraphicsItem *qg
|
|||||||
m_comment_item (nullptr),
|
m_comment_item (nullptr),
|
||||||
m_location_item (nullptr)
|
m_location_item (nullptr)
|
||||||
{
|
{
|
||||||
link_type_ = Simple;
|
m_link_type = Simple;
|
||||||
connect(this, SIGNAL(elementInfoChange(DiagramContext, DiagramContext)), this, SLOT(updateLabel(DiagramContext, DiagramContext)));
|
connect(this, SIGNAL(elementInfoChange(DiagramContext, DiagramContext)), this, SLOT(updateLabel(DiagramContext, DiagramContext)));
|
||||||
connect(this, &Element::updateLabel, [this]() {this->updateLabel(this->elementInformations(), this->elementInformations());});
|
connect(this, &Element::updateLabel, [this]() {this->updateLabel(this->elementInformations(), this->elementInformations());});
|
||||||
}
|
}
|
||||||
@@ -84,17 +84,17 @@ void SimpleElement::updateLabel(DiagramContext old_info, DiagramContext new_info
|
|||||||
new_info["label"].toString().isEmpty() ? eti->setVisible(true) : eti -> setVisible(new_info.keyMustShow("label"));
|
new_info["label"].toString().isEmpty() ? eti->setVisible(true) : eti -> setVisible(new_info.keyMustShow("label"));
|
||||||
}
|
}
|
||||||
|
|
||||||
//Comment and Location of element
|
// //Comment and Location of element
|
||||||
QString comment = new_info["comment"].toString();
|
// QString comment = new_info["comment"].toString();
|
||||||
bool must_show = new_info.keyMustShow("comment");
|
// bool must_show = new_info.keyMustShow("comment");
|
||||||
QString location = new_info["location"].toString();
|
// QString location = new_info["location"].toString();
|
||||||
bool must_show_location = new_info.keyMustShow("location");
|
// bool must_show_location = new_info.keyMustShow("location");
|
||||||
|
|
||||||
if ((!(comment.isEmpty() || !must_show) && !m_comment_item)||(!(location.isEmpty() || !must_show_location) && !m_comment_item)) {
|
// if ((!(comment.isEmpty() || !must_show) && !m_comment_item)||(!(location.isEmpty() || !must_show_location) && !m_comment_item)) {
|
||||||
m_comment_item = new CommentItem(this);
|
// m_comment_item = new CommentItem(this);
|
||||||
}
|
// }
|
||||||
else if (((comment.isEmpty() || !must_show) && m_comment_item) && ((location.isEmpty() || !must_show_location) && m_comment_item)) {
|
// else if (((comment.isEmpty() || !must_show) && m_comment_item) && ((location.isEmpty() || !must_show_location) && m_comment_item)) {
|
||||||
delete m_comment_item;
|
// delete m_comment_item;
|
||||||
m_comment_item = nullptr;
|
// m_comment_item = nullptr;
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,6 +20,7 @@
|
|||||||
#include "qetapp.h"
|
#include "qetapp.h"
|
||||||
#include "elementtextitem.h"
|
#include "elementtextitem.h"
|
||||||
#include "diagram.h"
|
#include "diagram.h"
|
||||||
|
#include "dynamicelementtextitem.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief SlaveElement::SlaveElement
|
* @brief SlaveElement::SlaveElement
|
||||||
@@ -33,7 +34,8 @@ SlaveElement::SlaveElement(const ElementsLocation &location, QGraphicsItem *qgi,
|
|||||||
CustomElement(location, qgi, state)
|
CustomElement(location, qgi, state)
|
||||||
{
|
{
|
||||||
m_xref_item = nullptr;
|
m_xref_item = nullptr;
|
||||||
link_type_ = Slave;
|
m_link_type = Slave;
|
||||||
|
|
||||||
connect(this, SIGNAL(updateLabel()), this, SLOT(updateLabel()));
|
connect(this, SIGNAL(updateLabel()), this, SLOT(updateLabel()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ TerminalElement::TerminalElement(const ElementsLocation &location, QGraphicsItem
|
|||||||
m_comment_item (nullptr),
|
m_comment_item (nullptr),
|
||||||
m_location_item (nullptr)
|
m_location_item (nullptr)
|
||||||
{
|
{
|
||||||
link_type_ = Terminale;
|
m_link_type = Terminale;
|
||||||
|
|
||||||
connect(this, SIGNAL(elementInfoChange(DiagramContext, DiagramContext)), this, SLOT(updateLabel(DiagramContext, DiagramContext)));
|
connect(this, SIGNAL(elementInfoChange(DiagramContext, DiagramContext)), this, SLOT(updateLabel(DiagramContext, DiagramContext)));
|
||||||
connect(this, &Element::updateLabel, [this]() {this->updateLabel(this->elementInformations(), this->elementInformations());});
|
connect(this, &Element::updateLabel, [this]() {this->updateLabel(this->elementInformations(), this->elementInformations());});
|
||||||
@@ -80,18 +80,18 @@ void TerminalElement::updateLabel(DiagramContext old_info, DiagramContext new_in
|
|||||||
new_info["label"].toString().isEmpty() ? eti->setVisible(true) : eti -> setVisible(new_info.keyMustShow("label"));
|
new_info["label"].toString().isEmpty() ? eti->setVisible(true) : eti -> setVisible(new_info.keyMustShow("label"));
|
||||||
}
|
}
|
||||||
|
|
||||||
//Comment and Location of element
|
// //Comment and Location of element
|
||||||
QString comment = new_info["comment"].toString();
|
// QString comment = new_info["comment"].toString();
|
||||||
bool must_show = new_info.keyMustShow("comment");
|
// bool must_show = new_info.keyMustShow("comment");
|
||||||
QString location = new_info["location"].toString();
|
// QString location = new_info["location"].toString();
|
||||||
bool must_show_location = new_info.keyMustShow("location");
|
// bool must_show_location = new_info.keyMustShow("location");
|
||||||
|
|
||||||
if ((!(comment.isEmpty() || !must_show) && !m_comment_item)||(!(location.isEmpty() || !must_show_location) && !m_comment_item)) {
|
// if ((!(comment.isEmpty() || !must_show) && !m_comment_item)||(!(location.isEmpty() || !must_show_location) && !m_comment_item)) {
|
||||||
m_comment_item = new CommentItem(this);
|
// m_comment_item = new CommentItem(this);
|
||||||
}
|
// }
|
||||||
else if (((comment.isEmpty() || !must_show) && m_comment_item) && ((location.isEmpty() || !must_show_location) && m_comment_item)) {
|
// else if (((comment.isEmpty() || !must_show) && m_comment_item) && ((location.isEmpty() || !must_show_location) && m_comment_item)) {
|
||||||
delete m_comment_item;
|
// delete m_comment_item;
|
||||||
m_comment_item = nullptr;
|
// m_comment_item = nullptr;
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user