diff --git a/sources/properties/xrefproperties.cpp b/sources/properties/xrefproperties.cpp index 6a1525afb..032254714 100644 --- a/sources/properties/xrefproperties.cpp +++ b/sources/properties/xrefproperties.cpp @@ -31,6 +31,7 @@ XRefProperties::XRefProperties() m_master_label = "%f-%l%c"; m_slave_label = "(%f-%l%c)"; m_offset = 0; + m_xref_pos = XRefProperties::enXrefPos::PosBottom; } /** @@ -51,6 +52,16 @@ void XRefProperties::toSettings(QSettings &settings, const QString prefix) const settings.setValue(prefix + "master_label", master_label); QString slave_label = m_slave_label; settings.setValue(prefix + "slave_label", slave_label); + + + + if (m_xref_pos == XRefProperties::enXrefPos::PosTop) settings.setValue(prefix + "xrefpos", "top"); + else if (m_xref_pos == XRefProperties::enXrefPos::PosLeft) settings.setValue(prefix + "xrefpos", "left"); + else if (m_xref_pos == XRefProperties::enXrefPos::PosRight) settings.setValue(prefix + "xrefpos", "right"); + else if (m_xref_pos == XRefProperties::enXrefPos::PosTextAignment) settings.setValue(prefix + "xrefpos", "alignment"); + else settings.setValue(prefix + "xrefpos", "bottom"); + + foreach (QString key, m_prefix.keys()) { settings.setValue(prefix + key + "prefix", m_prefix.value(key)); } @@ -71,6 +82,12 @@ void XRefProperties::fromSettings(const QSettings &settings, const QString prefi 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(); + QString xrefpos = settings.value(prefix + "xrefpos", "bottom").toString(); + if(xrefpos == "top") m_xref_pos = XRefProperties::enXrefPos::PosTop; + else if(xrefpos == "left") m_xref_pos = XRefProperties::enXrefPos::PosLeft; + else if(xrefpos == "right") m_xref_pos = XRefProperties::enXrefPos::PosRight; + else if(xrefpos == "alignment") m_xref_pos = XRefProperties::enXrefPos::PosTextAignment; + else m_xref_pos = XRefProperties::enXrefPos::PosBottom; foreach (QString key, m_prefix_keys) { m_prefix.insert(key, settings.value(prefix + key + "prefix").toString()); } @@ -87,6 +104,17 @@ 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); + + QString xrefpos; + + + if (m_xref_pos == XRefProperties::enXrefPos::PosTop) xrefpos = "top"; + if (m_xref_pos == XRefProperties::enXrefPos::PosLeft) xrefpos = "left"; + else if (m_xref_pos == XRefProperties::enXrefPos::PosRight) xrefpos = "right"; + else if (m_xref_pos == XRefProperties::enXrefPos::PosTextAignment) xrefpos = "alignment"; + else xrefpos = "bottom"; + + xml_element.setAttribute("xrefpos", xrefpos); int offset = m_offset; xml_element.setAttribute("offset", QString::number(offset)); QString master_label = m_master_label; @@ -109,6 +137,17 @@ 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; + + QString xrefpos = xml_element.attribute("xrefpos","Left"); + + if(xrefpos == "top") m_xref_pos = XRefProperties::enXrefPos::PosTop; + else if(xrefpos == "left") m_xref_pos = XRefProperties::enXrefPos::PosLeft; + else if(xrefpos == "right") m_xref_pos = XRefProperties::enXrefPos::PosRight; + else if(xrefpos == "alignment") m_xref_pos = XRefProperties::enXrefPos::PosTextAignment; + else m_xref_pos = XRefProperties::enXrefPos::PosBottom; + + + 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)"); @@ -150,7 +189,8 @@ bool XRefProperties::operator ==(const XRefProperties &xrp) const{ m_prefix == xrp.m_prefix && m_master_label == xrp.m_master_label && m_slave_label == xrp.m_slave_label && - m_offset == xrp.m_offset); + m_offset == xrp.m_offset && + m_xref_pos == xrp.m_xref_pos ); } bool XRefProperties::operator !=(const XRefProperties &xrp) const { diff --git a/sources/properties/xrefproperties.h b/sources/properties/xrefproperties.h index b0f83f0cb..76173e3fb 100644 --- a/sources/properties/xrefproperties.h +++ b/sources/properties/xrefproperties.h @@ -40,6 +40,15 @@ class XRefProperties : public PropertiesInterface Label }; + enum enXrefPos { + PosLeft, + PosRight, + PosTop, + PosBottom, + PosTextAignment + }; + + void toSettings (QSettings &settings, const QString = QString()) const override; void fromSettings (const QSettings &settings, const QString = QString()) override; void toXml (QDomElement &xml_element) const override; @@ -59,6 +68,9 @@ class XRefProperties : public PropertiesInterface void setSnapTo (const SnapTo st) {m_snap_to = st;} SnapTo snapTo () const {return m_snap_to;} + void setXrefPos(const enXrefPos xref) {m_xref_pos = xref;} + enXrefPos getXrefPos() const {return m_xref_pos;} + void setPrefix (const QString &key, const QString &value) {m_prefix.insert(key, value);} QString prefix (const QString &key) const {return m_prefix.value(key);} @@ -75,6 +87,7 @@ class XRefProperties : public PropertiesInterface bool m_show_power_ctc; DisplayHas m_display; SnapTo m_snap_to; + enXrefPos m_xref_pos; QHash m_prefix; QStringList m_prefix_keys; QString m_master_label; diff --git a/sources/qetgraphicsitem/dynamicelementtextitem.cpp b/sources/qetgraphicsitem/dynamicelementtextitem.cpp index d0a956cdc..ffb50fdd0 100644 --- a/sources/qetgraphicsitem/dynamicelementtextitem.cpp +++ b/sources/qetgraphicsitem/dynamicelementtextitem.cpp @@ -1289,9 +1289,49 @@ void DynamicElementTextItem::updateXref() m_slave_Xref_item->setPlainText(xref_label); QRectF r = boundingRect(); - QPointF pos(r.center().x() - m_slave_Xref_item->boundingRect().width()/2, - r.bottom()); + QPointF pos; + + + //QPointF pos(r.center().x() - m_slave_Xref_item->boundingRect().width()/2,r.top()); + if (xrp.getXrefPos() == XRefProperties::enXrefPos::PosBottom) + { + pos = QPointF(r.center().x() - m_slave_Xref_item->boundingRect().width()/2,r.bottom()); + } + else if (xrp.getXrefPos() == XRefProperties::enXrefPos::PosTop) + { + pos = QPointF(r.center().x() - m_slave_Xref_item->boundingRect().width()/2,r.top() - m_slave_Xref_item->boundingRect().height()); + } + else if (xrp.getXrefPos() == XRefProperties::enXrefPos::PosLeft) // + { + pos = QPointF(r.left() - m_slave_Xref_item->boundingRect().width(),r.center().y() - m_slave_Xref_item->boundingRect().height()/2); + } + else if (xrp.getXrefPos() == XRefProperties::enXrefPos::PosRight) // + { + pos = QPointF(r.right() + m_slave_Xref_item->boundingRect().width(),r.center().y() - m_slave_Xref_item->boundingRect().height()/2); + } + else if (xrp.getXrefPos() == XRefProperties::enXrefPos::PosTextAignment) // + { + if(this->alignment() &Qt::AlignBottom) + { + pos = QPointF(r.left() - m_slave_Xref_item->boundingRect().width(),r.center().y() - m_slave_Xref_item->boundingRect().height()/2); + } + else if(this->alignment() &Qt::AlignTop) + { + + } + else if(this->alignment() &Qt::AlignLeft) + { + + } + else if(this->alignment() &Qt::AlignRight) + { + + } + } + + m_slave_Xref_item->setPos(pos); + return; } } @@ -1328,6 +1368,7 @@ void DynamicElementTextItem::setPlainText(const QString &text) prepareAlignment(); } + DiagramTextItem::setPlainText(text); //User define a text width @@ -1353,9 +1394,23 @@ void DynamicElementTextItem::setPlainText(const QString &text) else if (m_slave_Xref_item) { QRectF r = boundingRect(); - QPointF pos(r.center().x() - m_slave_Xref_item->boundingRect().width()/2, - r.bottom()); + QPointF pos; + + if(this->alignment() &Qt::AlignBottom) + { + pos = QPointF(r.center().x() - m_slave_Xref_item->boundingRect().width()/2,r.bottom()); + } + else if(this->alignment() &Qt::AlignTop) + { + pos = QPointF(r.center().x() - m_slave_Xref_item->boundingRect().width()/2,r.top()-m_slave_Xref_item->boundingRect().height()); + } + else + { + pos = QPointF(r.left() - m_slave_Xref_item->boundingRect().width(),r.center().y() - m_slave_Xref_item->boundingRect().height()/2); + } m_slave_Xref_item->setPos(pos); + + } } diff --git a/sources/ui/xrefpropertieswidget.cpp b/sources/ui/xrefpropertieswidget.cpp index 4052c2b40..656e396ef 100644 --- a/sources/ui/xrefpropertieswidget.cpp +++ b/sources/ui/xrefpropertieswidget.cpp @@ -100,6 +100,12 @@ void XRefPropertiesWidget::buildUi() ui -> m_snap_to_cb -> addItem(tr("En bas de page"), "bottom"); ui -> m_snap_to_cb -> addItem(tr("Sous le label de l'élément"), "label"); + ui -> m_xrefpos_cb -> addItem(tr("Top"),"top"); + ui -> m_xrefpos_cb -> addItem(tr("Bottom"),"bottom"); + ui -> m_xrefpos_cb -> addItem(tr("Left"),"left"); + ui -> m_xrefpos_cb -> addItem(tr("Rigth"),"right"); + ui -> m_xrefpos_cb -> addItem(tr("Text alignment"),"alignment"); + m_previous_type_index = ui -> m_type_cb -> currentIndex(); } @@ -117,6 +123,14 @@ void XRefPropertiesWidget::saveProperties(int index) { if (ui->m_snap_to_cb->itemData(ui->m_snap_to_cb->currentIndex()).toString() == "bottom") xrp.setSnapTo(XRefProperties::Bottom); else xrp.setSnapTo(XRefProperties::Label); + + if(ui->m_xrefpos_cb->itemData(ui->m_xrefpos_cb->currentIndex()).toString() == "bottom") xrp.setXrefPos(XRefProperties::enXrefPos::PosBottom); + else if(ui->m_xrefpos_cb->itemData(ui->m_xrefpos_cb->currentIndex()).toString() == "top") xrp.setXrefPos(XRefProperties::enXrefPos::PosTop); + else if(ui->m_xrefpos_cb->itemData(ui->m_xrefpos_cb->currentIndex()).toString() == "left") xrp.setXrefPos(XRefProperties::enXrefPos::PosLeft); + else if(ui->m_xrefpos_cb->itemData(ui->m_xrefpos_cb->currentIndex()).toString() == "right") xrp.setXrefPos(XRefProperties::enXrefPos::PosRight); + else if(ui->m_xrefpos_cb->itemData(ui->m_xrefpos_cb->currentIndex()).toString() == "alignment") xrp.setXrefPos(XRefProperties::enXrefPos::PosTextAignment); + + xrp.setShowPowerContac(ui->m_show_power_cb->isChecked()); xrp.setPrefix("power", ui->m_power_prefix_le->text()); xrp.setPrefix("delay", ui->m_delay_prefix_le->text()); @@ -161,6 +175,13 @@ void XRefPropertiesWidget::updateDisplay() { ui->m_snap_to_cb->setCurrentIndex(ui->m_snap_to_cb->findData("label")); ui->m_offset_sb->setEnabled(false); } + + if(xrp.getXrefPos() == XRefProperties::enXrefPos::PosTop) ui->m_xrefpos_cb->setCurrentIndex(ui->m_xrefpos_cb->findData("top")); + else if(xrp.getXrefPos() == XRefProperties::enXrefPos::PosLeft) ui->m_xrefpos_cb->setCurrentIndex(ui->m_xrefpos_cb->findData("left")); + else if(xrp.getXrefPos() == XRefProperties::enXrefPos::PosRight) ui->m_xrefpos_cb->setCurrentIndex(ui->m_xrefpos_cb->findData("right")); + else if(xrp.getXrefPos() == XRefProperties::enXrefPos::PosTextAignment) ui->m_xrefpos_cb->setCurrentIndex(ui->m_xrefpos_cb->findData("alignment")); + else if(xrp.getXrefPos() == XRefProperties::enXrefPos::PosBottom) ui->m_xrefpos_cb->setCurrentIndex(ui->m_xrefpos_cb->findData("bottom")); + ui->m_show_power_cb->setChecked(xrp.showPowerContact()); ui->m_power_prefix_le-> setText(xrp.prefix("power")); ui->m_delay_prefix_le-> setText(xrp.prefix("delay")); diff --git a/sources/ui/xrefpropertieswidget.ui b/sources/ui/xrefpropertieswidget.ui index 855270d2d..8c3656fb1 100644 --- a/sources/ui/xrefpropertieswidget.ui +++ b/sources/ui/xrefpropertieswidget.ui @@ -2,6 +2,14 @@ XRefPropertiesWidget + + + 0 + 0 + 376 + 608 + + Form @@ -22,6 +30,12 @@ + + + 0 + 0 + + Représentation: @@ -82,6 +96,20 @@ + + + + + + XRef slave position + + + + + + + +