diff --git a/sources/properties/xrefproperties.cpp b/sources/properties/xrefproperties.cpp index 5953d747a..f45e95af6 100644 --- a/sources/properties/xrefproperties.cpp +++ b/sources/properties/xrefproperties.cpp @@ -30,6 +30,7 @@ XRefProperties::XRefProperties() m_prefix_keys << "power" << "delay" << "switch"; m_master_label = "%f-%l%c"; m_slave_label = "(%f-%l%c)"; + m_offset = 0; } /** @@ -44,6 +45,8 @@ void XRefProperties::toSettings(QSettings &settings, const QString prefix) const settings.setValue(prefix + "displayhas", display); QString snap = m_snap_to == Bottom? "bottom" : "label"; settings.setValue(prefix + "snapto", snap); + int offset = m_offset; + settings.setValue(prefix + "offset", offset); QString master_label = m_master_label; settings.setValue(prefix + "master_label", master_label); QString slave_label = m_slave_label; @@ -65,6 +68,7 @@ void XRefProperties::fromSettings(const QSettings &settings, const QString prefi display == "cross"? m_display = Cross : m_display = Contacts; QString snap = settings.value(prefix + "snapto", "label").toString(); snap == "bottom"? m_snap_to = Bottom : m_snap_to = Label; + m_offset = settings.value(prefix + "offset", "0").toInt(); m_master_label = settings.value(prefix + "master_label", "%f-%l%c").toString(); m_slave_label = settings.value(prefix + "slave_label", "(%f-%l%c)").toString(); foreach (QString key, m_prefix_keys) { @@ -83,6 +87,8 @@ void XRefProperties::toXml(QDomElement &xml_element) const { xml_element.setAttribute("displayhas", display); QString snap = m_snap_to == Bottom? "bottom" : "label"; xml_element.setAttribute("snapto", snap); + int offset = m_offset; + xml_element.setAttribute("offset", offset); QString master_label = m_master_label; xml_element.setAttribute("master_label", master_label); QString slave_label = m_slave_label; @@ -103,6 +109,7 @@ void XRefProperties::fromXml(const QDomElement &xml_element) { display == "cross"? m_display = Cross : m_display = Contacts; QString snap = xml_element.attribute("snapto", "label"); snap == "bottom"? m_snap_to = Bottom : m_snap_to = Label; + m_offset = xml_element.attribute("offset", "0").toInt(); m_master_label = xml_element.attribute("master_label", "%f-%l%c"); m_slave_label = xml_element.attribute("slave_label","(%f-%l%c)"); foreach (QString key, m_prefix_keys) { @@ -142,7 +149,8 @@ bool XRefProperties::operator ==(const XRefProperties &xrp) const{ m_snap_to == xrp.m_snap_to && m_prefix == xrp.m_prefix && m_master_label == xrp.m_master_label && - m_slave_label == xrp.m_slave_label); + m_slave_label == xrp.m_slave_label && + m_offset == xrp.m_offset); } bool XRefProperties::operator !=(const XRefProperties &xrp) const { diff --git a/sources/properties/xrefproperties.h b/sources/properties/xrefproperties.h index 7c7667964..75c052bc9 100644 --- a/sources/properties/xrefproperties.h +++ b/sources/properties/xrefproperties.h @@ -68,6 +68,9 @@ class XRefProperties : public PropertiesInterface void setSlaveLabel(const QString slave) {m_slave_label = slave;} QString slaveLabel () const {return m_slave_label;} + void setOffset(const int offset) {m_offset = offset;} + int offset() const {return m_offset;} + private: bool m_show_power_ctc; DisplayHas m_display; @@ -76,6 +79,7 @@ class XRefProperties : public PropertiesInterface QStringList m_prefix_keys; QString m_master_label; QString m_slave_label; + int m_offset; }; #endif // XREFPROPERTIES_H diff --git a/sources/qetgraphicsitem/commentitem.cpp b/sources/qetgraphicsitem/commentitem.cpp index 03440b94b..975f2d0fd 100644 --- a/sources/qetgraphicsitem/commentitem.cpp +++ b/sources/qetgraphicsitem/commentitem.cpp @@ -57,8 +57,10 @@ QRectF CommentItem::boundingRect() const { void CommentItem::autoPos() { if (m_text_parent) centerToParentBottom(this); - else - centerToBottomDiagram(this, m_element); + else { + XRefProperties xrp = m_element->diagram()->defaultXRefProperties(m_element->kindInformations()["type"].toString()); + centerToBottomDiagram(this, m_element, xrp.offset()); + } } /** diff --git a/sources/qetgraphicsitem/crossrefitem.cpp b/sources/qetgraphicsitem/crossrefitem.cpp index 2f2a1d930..8726e1913 100644 --- a/sources/qetgraphicsitem/crossrefitem.cpp +++ b/sources/qetgraphicsitem/crossrefitem.cpp @@ -217,7 +217,7 @@ void CrossRefItem::updateLabel() { void CrossRefItem::autoPos() { //We calcul the position according to the @snapTo of the xrefproperties if (m_properties.snapTo() == XRefProperties::Bottom) - centerToBottomDiagram(this, m_element); + centerToBottomDiagram(this, m_element, m_properties.offset()); else centerToParentBottom(this); } diff --git a/sources/qetgraphicsitem/qgraphicsitemutility.cpp b/sources/qetgraphicsitem/qgraphicsitemutility.cpp index b6e2d3411..1e6c2e362 100644 --- a/sources/qetgraphicsitem/qgraphicsitemutility.cpp +++ b/sources/qetgraphicsitem/qgraphicsitemutility.cpp @@ -48,7 +48,7 @@ bool centerToParentBottom(QGraphicsItem *item) { * @param element_to_follow * @return true if element is centered else false (element_to_follow have not diagram) */ -bool centerToBottomDiagram (QGraphicsItem *item_to_center, Element *element_to_follow) { +bool centerToBottomDiagram (QGraphicsItem *item_to_center, Element *element_to_follow, int offset) { if (! element_to_follow -> diagram()) { qDebug() << "qgraphicsitemutility centerAtBottomDiagram : Element_to_follow have not diagram"; return false; @@ -57,8 +57,10 @@ bool centerToBottomDiagram (QGraphicsItem *item_to_center, Element *element_to_f QRectF border = element_to_follow -> diagram() -> border_and_titleblock.insideBorderRect(); QPointF point = element_to_follow -> sceneBoundingRect().center(); + if (offset >= 50) //applies offset + point.setY(border.bottom() - offset ); + else //applies default point.setY(border.bottom() - item_to_center -> boundingRect().height() - 5); - point.rx() -= (item_to_center -> boundingRect().width()/2 + item_to_center -> boundingRect().left()); //< we add boundingrect.left because this value can be négative diff --git a/sources/qetgraphicsitem/qgraphicsitemutility.h b/sources/qetgraphicsitem/qgraphicsitemutility.h index 245d40f99..c700d9225 100644 --- a/sources/qetgraphicsitem/qgraphicsitemutility.h +++ b/sources/qetgraphicsitem/qgraphicsitemutility.h @@ -22,6 +22,6 @@ class QGraphicsItem; class Element; bool centerToParentBottom (QGraphicsItem *item); -bool centerToBottomDiagram (QGraphicsItem *item_to_center, Element *element_to_follow); +bool centerToBottomDiagram (QGraphicsItem *item_to_center, Element *element_to_follow, int offset ); #endif // QGRAPHICSITEMUTILITY_H diff --git a/sources/ui/xrefpropertieswidget.cpp b/sources/ui/xrefpropertieswidget.cpp index d139d5af0..5487fe23f 100644 --- a/sources/ui/xrefpropertieswidget.cpp +++ b/sources/ui/xrefpropertieswidget.cpp @@ -119,6 +119,7 @@ void XRefPropertiesWidget::saveProperties(int index) { xrp.setPrefix("switch", ui->m_switch_prefix_le->text()); xrp.setMasterLabel(ui->m_master_le->text()); xrp.setSlaveLabel(ui->m_slave_le->text()); + xrp.setOffset(ui->m_offset_sb->value()); m_properties.insert(type, xrp); } @@ -145,6 +146,9 @@ void XRefPropertiesWidget::updateDisplay() { QString slave = xrp.slaveLabel(); ui->m_slave_le->setText(slave); + int offset = xrp.offset(); + ui->m_offset_sb->setValue(offset); + if (xrp.snapTo() == XRefProperties::Bottom) ui->m_snap_to_cb->setCurrentIndex(ui->m_snap_to_cb->findData("bottom")); else ui->m_snap_to_cb->setCurrentIndex(ui->m_snap_to_cb->findData("label")); diff --git a/sources/ui/xrefpropertieswidget.ui b/sources/ui/xrefpropertieswidget.ui index a9d7b042d..d95af7d2c 100644 --- a/sources/ui/xrefpropertieswidget.ui +++ b/sources/ui/xrefpropertieswidget.ui @@ -6,7 +6,7 @@ 0 0 - 484 + 507 649 @@ -48,6 +48,48 @@ + + + + + + XRef Vertical Offset: + + + + + + + 10px corresponds to 1 tile displacement + + + Set Vertical Offset for the Cross References. 10px corresponds to 1 tile displacement. + + + Default - Fit to XRef height + + + QAbstractSpinBox::CorrectToNearestValue + + + px + + + 40 + + + 300 + + + 10 + + + 40 + + + + +