Element : variable assignement of label is now managed by an external class instead of the element itself

git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@4772 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
blacksun
2016-11-09 16:06:04 +00:00
parent 2b952f4189
commit bb2fff7e5f
14 changed files with 315 additions and 175 deletions

View File

@@ -151,9 +151,9 @@ void CommentItem::updateLabel()
* Draw Info to item text.
* (draw this item in a QPicture)
*/
void CommentItem::addInfo(QPainter &painter, QString type){
QString text = m_element -> assignVariables(m_element -> elementInformations()[type].toString(), m_element);
void CommentItem::addInfo(QPainter &painter, QString type)
{
QString text = autonum::AssignVariables::formulaToLabel(m_element -> elementInformations()[type].toString(), m_element->rSequenceStruct(), m_element->diagram(), m_element);
bool must_show = m_element -> elementInformations().keyMustShow(type);
if (!text.isEmpty() && must_show)

View File

@@ -539,7 +539,7 @@ void CrossRefItem::fillCrossRef(QPainter &painter) {
*/
void CrossRefItem::AddExtraInfo(QPainter &painter, QString type)
{
QString text = m_element -> assignVariables(m_element -> elementInformations()[type].toString(), m_element);
QString text = autonum::AssignVariables::formulaToLabel(m_element -> elementInformations()[type].toString(), m_element->rSequenceStruct(), m_element->diagram(), m_element);
bool must_show = m_element -> elementInformations().keyMustShow(type);
if (!text.isEmpty() && must_show)

View File

@@ -430,12 +430,12 @@ bool Element::fromXml(QDomElement &e, QHash<int, Terminal *> &table_id_adr, bool
m_prefix = e.attribute("prefix");
//Load Sequential Values
loadSequential(&e,"sequ_",&seq_unit);
loadSequential(&e,"sequf_",&seq_unitfolio);
loadSequential(&e,"seqt_",&seq_ten);
loadSequential(&e,"seqtf_",&seq_tenfolio);
loadSequential(&e,"seqh_",&seq_hundred);
loadSequential(&e,"seqhf_",&seq_hundredfolio);
loadSequential(&e,"sequ_",&m_autoNum_seq.unit);
loadSequential(&e,"sequf_",&m_autoNum_seq.unit_folio);
loadSequential(&e,"seqt_",&m_autoNum_seq.ten);
loadSequential(&e,"seqtf_",&m_autoNum_seq.ten_folio);
loadSequential(&e,"seqh_",&m_autoNum_seq.hundred);
loadSequential(&e,"seqhf_",&m_autoNum_seq.hundred_folio);
//load informations
m_element_informations.fromXml(e.firstChildElement("elementInformations"), "elementInformation");
@@ -492,33 +492,33 @@ QDomElement Element::toXml(QDomDocument &document, QHash<Terminal *, int> &table
// Save Element sequential values to Xml
// Save Unit Sequential Values
for (int i = 0; i < seq_unit.size(); i++) {
element.setAttribute("sequ_" + QString::number(i+1),seq_unit.at(i));
for (int i = 0; i < m_autoNum_seq.unit.size(); i++) {
element.setAttribute("sequ_" + QString::number(i+1),m_autoNum_seq.unit.at(i));
}
// Save UnitFolio Sequential Values
for (int i = 0; i < seq_unitfolio.size(); i++) {
element.setAttribute("sequf_" + QString::number(i+1),seq_unitfolio.at(i));
for (int i = 0; i < m_autoNum_seq.unit_folio.size(); i++) {
element.setAttribute("sequf_" + QString::number(i+1),m_autoNum_seq.unit_folio.at(i));
}
// Save Ten Sequential Values
for (int i = 0; i < seq_ten.size(); i++) {
element.setAttribute("seqt_" + QString::number(i+1),seq_ten.at(i));
for (int i = 0; i < m_autoNum_seq.ten.size(); i++) {
element.setAttribute("seqt_" + QString::number(i+1),m_autoNum_seq.ten.at(i));
}
// Save TenFolio Sequential Values
for (int i = 0; i < seq_tenfolio.size(); i++) {
element.setAttribute("seqtf_" + QString::number(i+1),seq_tenfolio.at(i));
for (int i = 0; i < m_autoNum_seq.ten_folio.size(); i++) {
element.setAttribute("seqtf_" + QString::number(i+1),m_autoNum_seq.ten_folio.at(i));
}
// Save Hundred Sequential Values
for (int i = 0; i < seq_hundred.size(); i++) {
element.setAttribute("seqh_" + QString::number(i+1),seq_hundred.at(i));
for (int i = 0; i < m_autoNum_seq.hundred.size(); i++) {
element.setAttribute("seqh_" + QString::number(i+1),m_autoNum_seq.hundred.at(i));
}
// Save Hundred Sequential Values
for (int i = 0; i < seq_hundredfolio.size(); i++) {
element.setAttribute("seqhf_" + QString::number(i+1),seq_hundredfolio.at(i));
for (int i = 0; i < m_autoNum_seq.hundred_folio.size(); i++) {
element.setAttribute("seqhf_" + QString::number(i+1),m_autoNum_seq.hundred_folio.at(i));
}
// position, selection et orientation
@@ -719,52 +719,6 @@ void Element::hoverLeaveEvent(QGraphicsSceneHoverEvent *e) {
update();
}
/**
* @brief Element::assignVariables()
* Assign variables values
* @param label, string to be changed
* @param elmt, element to extract variables values
*/
QString Element::assignVariables(QString label, Element *elmt){
//Titleblock Variables
for (int i = 0; i < elmt->diagram()->border_and_titleblock.additionalFields().count(); i++)
{
QString folio_variable = elmt->diagram()->border_and_titleblock.additionalFields().keys().at(i);
QVariant folio_value = elmt->diagram()->border_and_titleblock.additionalFields().operator [](folio_variable);
if (label.contains(folio_variable)) {
label.replace("%{" + folio_variable + "}", folio_value.toString());
label.replace("%" + folio_variable , folio_value.toString());
}
}
//Project Variables
for (int i = 0; i < elmt->diagram()->project()->projectProperties().count(); i++)
{
QString folio_variable = elmt->diagram()->project()->projectProperties().keys().at(i);
QVariant folio_value = elmt->diagram()->project()->projectProperties().operator [](folio_variable);
if (label.contains(folio_variable)) {
label.replace("%{" + folio_variable + "}", folio_value.toString());
label.replace("%" + folio_variable , folio_value.toString());
}
}
//Default Variables
label.replace("%f", QString::number(elmt->diagram()->folioIndex()+1));
label.replace("%F", elmt->diagram() -> border_and_titleblock.folio());
label.replace("%M", elmt->diagram() -> border_and_titleblock.machine());
label.replace("%LM", elmt->diagram() -> border_and_titleblock.locmach());
label.replace("%c", QString::number(elmt->diagram() -> convertPosition(elmt -> scenePos()).number()));
label.replace("%l", elmt->diagram() -> convertPosition(elmt -> scenePos()).letter());
label.replace("%id", QString::number(elmt->diagram()->folioIndex()+1));
label.replace("%total", QString::number(elmt->diagram()->border_and_titleblock.folioTotal()));
label.replace("%prefix", elmt->getPrefix());
label = assignSeq(label, elmt);
return label;
}
/**
* @brief Element::setSequential
* Set sequential values to element
@@ -778,22 +732,22 @@ void Element::setSequential() {
NumerotationContextCommands ncc (nc);
if (!nc.isEmpty()) {
if (label.contains("%sequ_"))
setSequentialToList(&seq_unit,&nc,"unit");
setSequentialToList(&m_autoNum_seq.unit,&nc,"unit");
if (label.contains("%sequf_")) {
setSequentialToList(&seq_unitfolio,&nc,"unitfolio");
setFolioSequentialToHash(&seq_unitfolio,&diagram()->m_elmt_unitfolio_max,element_currentAutoNum);
setSequentialToList(&m_autoNum_seq.unit_folio,&nc,"unitfolio");
setFolioSequentialToHash(&m_autoNum_seq.unit_folio,&diagram()->m_elmt_unitfolio_max,element_currentAutoNum);
}
if (label.contains("%seqt_"))
setSequentialToList(&seq_ten,&nc,"ten");
setSequentialToList(&m_autoNum_seq.ten,&nc,"ten");
if (label.contains("%seqtf_")) {
setSequentialToList(&seq_tenfolio,&nc,"tenfolio");
setFolioSequentialToHash(&seq_tenfolio,&diagram()->m_elmt_tenfolio_max,element_currentAutoNum);
setSequentialToList(&m_autoNum_seq.ten_folio,&nc,"tenfolio");
setFolioSequentialToHash(&m_autoNum_seq.ten_folio,&diagram()->m_elmt_tenfolio_max,element_currentAutoNum);
}
if (label.contains("%seqh_"))
setSequentialToList(&seq_hundred,&nc,"hundred");
setSequentialToList(&m_autoNum_seq.hundred,&nc,"hundred");
if (label.contains("%seqhf_")) {
setSequentialToList(&seq_hundredfolio,&nc,"hundredfolio");
setFolioSequentialToHash(&seq_hundredfolio,&diagram()->m_elmt_hundredfolio_max,element_currentAutoNum);
setSequentialToList(&m_autoNum_seq.hundred_folio,&nc,"hundredfolio");
setFolioSequentialToHash(&m_autoNum_seq.hundred_folio,&diagram()->m_elmt_hundredfolio_max,element_currentAutoNum);
}
this->diagram()->project()->addElementAutoNum(element_currentAutoNum,ncc.next());
}
@@ -848,38 +802,6 @@ void Element::setFolioSequentialToHash(QStringList* list, QHash<QString, QString
}
}
/**
* @brief Element::assignSeq
* Replace sequential values to element label
* @param label to be replaced
* @return replaced label
*/
QString Element::assignSeq(QString label, Element* elmt) {
for (int i = 1; i <= qMax(qMax(qMax(elmt->seq_unitfolio.size(), elmt->seq_tenfolio.size()),qMax(elmt->seq_hundredfolio.size(),elmt->seq_unit.size())),qMax(elmt->seq_hundred.size(),elmt->seq_ten.size())); i++) {
// "&& !seq.isEmpty()" introduced in the methods below to avoid crash when copying and paste elements
// that contain folio sequential in their labels. Needs further debugging.
if (label.contains("%sequ_" + QString::number(i)) && !elmt->seq_unit.isEmpty()) {
label.replace("%sequ_" + QString::number(i),elmt->seq_unit.at(i-1));
}
if (label.contains("%seqt_" + QString::number(i)) && !elmt->seq_ten.isEmpty()) {
label.replace("%seqt_" + QString::number(i),elmt->seq_ten.at(i-1));
}
if (label.contains("%seqh_" + QString::number(i)) && !elmt->seq_hundred.isEmpty()) {
label.replace("%seqh_" + QString::number(i),elmt->seq_hundred.at(i-1));
}
if (label.contains("%sequf_" + QString::number(i)) && !elmt->seq_unitfolio.isEmpty()) {
label.replace("%sequf_" + QString::number(i),elmt->seq_unitfolio.at(i-1));
}
if (label.contains("%seqtf_" + QString::number(i)) && !elmt->seq_tenfolio.isEmpty()) {
label.replace("%seqtf_" + QString::number(i),elmt->seq_tenfolio.at(i-1));
}
if (label.contains("%seqhf_" + QString::number(i)) && !elmt->seq_hundredfolio.isEmpty()) {
label.replace("%seqhf_" + QString::number(i),elmt->seq_hundredfolio.at(i-1));
}
}
return label;
}
/**
* @brief ElementTextItem::setTaggedText
* Set text @newstr to the text tagged with @tagg.
@@ -917,11 +839,14 @@ void Element::setPrefix(QString prefix) {
* @brief Element::freezeLabel
* Freeze this element label
*/
void Element::freezeLabel() {
void Element::freezeLabel()
{
DiagramContext &dc = this->rElementInformations();
QString freezelabel = dc["label"].toString();
QString label = assignVariables(freezelabel,this);
if (!(label == freezelabel)) {
QString label = autonum::AssignVariables::formulaToLabel(freezelabel, m_autoNum_seq, diagram(),this );
if (!(label == freezelabel))
{
dc.addValue("frozenlabel", freezelabel);
dc.addValue("label",label);
this->setTaggedText("label", label);
@@ -933,14 +858,14 @@ void Element::freezeLabel() {
* @brief Element::unfreezeLabel
* Unfreeze this element label
*/
void Element::unfreezeLabel() {
void Element::unfreezeLabel()
{
DiagramContext &dc = this->rElementInformations();
QString label = dc["label"].toString();
QString frozenlabel = dc["frozenlabel"].toString();
if (frozenlabel == "") return;
dc.addValue("frozenlabel", "");
dc.addValue("label",frozenlabel);
frozenlabel = assignVariables(frozenlabel,this);
frozenlabel = autonum::AssignVariables::formulaToLabel(frozenlabel, m_autoNum_seq, diagram(),this );
this->setTaggedText("label", frozenlabel);
this->setElementInformations(dc);
}

View File

@@ -21,6 +21,7 @@
#include "qet.h"
#include "qetgraphicsitem.h"
#include "diagramcontext.h"
#include "assignvariables.h"
class ElementTextItem;
class QETProject;
@@ -134,8 +135,10 @@ class Element : public QetGraphicsItem {
DiagramContext kindInformations () const {return kind_informations_;} //@kind_information_ is used to store more information
//about the herited class like contactelement for know
// kind of contact (simple tempo) or number of contact show by the element.
QString assignVariables (QString, Element *);
QString assignSeq (QString, Element*);
autonum::sequenceStruct sequenceStruct () const {return m_autoNum_seq;}
autonum::sequenceStruct& rSequenceStruct() {return m_autoNum_seq;}
void setSequential ();
void setSequentialToList(QStringList*, NumerotationContext*, QString);
void setFolioSequentialToHash(QStringList*, QHash<QString, QStringList>*, QString);
@@ -148,6 +151,7 @@ class Element : public QetGraphicsItem {
//ATTRIBUTES
protected:
DiagramContext m_element_informations, kind_informations_;
autonum::sequenceStruct m_autoNum_seq;
/**
Draw this element
@@ -187,14 +191,6 @@ class Element : public QetGraphicsItem {
// orientation-related methods
int orientation() const;
// Lists containing Sequentials
QStringList seq_unit;
QStringList seq_unitfolio;
QStringList seq_ten;
QStringList seq_tenfolio;
QStringList seq_hundred;
QStringList seq_hundredfolio;
protected:
void drawAxes(QPainter *, const QStyleOptionGraphicsItem *);

View File

@@ -129,7 +129,7 @@ void MasterElement::initLink(QETProject *project) {
*/
void MasterElement::folioIdChange() {
DiagramContext dc =elementInformations();
setTaggedText("label", assignVariables(dc["label"].toString(), this), true);
setTaggedText("label", autonum::AssignVariables::formulaToLabel(dc["label"].toString(), m_autoNum_seq, diagram(), this), true);
}
/**
@@ -151,8 +151,7 @@ void MasterElement::changeElementInfo(){
*/
void MasterElement::updateLabel(DiagramContext old_info, DiagramContext new_info) {
QString newstr = new_info["label"].toString();
Element *elmt = this;
newstr = assignVariables(newstr, elmt);
newstr = autonum::AssignVariables::formulaToLabel(newstr, m_autoNum_seq, diagram(), this);
//Label of element
if (old_info["label"].toString() != newstr) {

View File

@@ -219,7 +219,7 @@ void ReportElement::updateLabel()
{
Element *elmt = connected_elements.at(0);
QString label = label_;
label = assignVariables(label,elmt);
label = autonum::AssignVariables::formulaToLabel(label, elmt->rSequenceStruct(), elmt->diagram(), elmt);
m_text_field -> setPlainText(label);
}
else

View File

@@ -61,9 +61,10 @@ void SimpleElement::initLink(QETProject *project) {
* @brief SimpleElement::folioIdChange
* Use to update the label of this item when the foio id change
*/
void SimpleElement::folioIdChange() {
void SimpleElement::folioIdChange()
{
DiagramContext dc =elementInformations();
setTaggedText("label", assignVariables(dc["label"].toString(), this), true);
setTaggedText("label", autonum::AssignVariables::formulaToLabel(dc["label"].toString(), m_autoNum_seq, diagram(), this));
}
/**
@@ -82,10 +83,9 @@ void SimpleElement::changeElementInfo(){
* @brief SimpleElement::updateLabel
* update label of this element
*/
void SimpleElement::updateLabel(DiagramContext old_info, DiagramContext new_info) {
QString label = new_info["label"].toString();
Element *elmt = this;
label = assignVariables(label,elmt);
void SimpleElement::updateLabel(DiagramContext old_info, DiagramContext new_info)
{
QString label = autonum::AssignVariables::formulaToLabel(new_info["label"].toString(), m_autoNum_seq, diagram(), this);
//Label of element
if (old_info["label"].toString() != label) {

View File

@@ -134,16 +134,17 @@ void SlaveElement::updateLabel()
bool no_editable = false;
//must be linked to set the label of master
if (linkedElements().count()) {
if (linkedElements().count())
{
no_editable = true;
Element *elmt = linkedElements().first();
label = elmt -> elementInformations()["label"].toString();
XRefProperties xrp = elmt->diagram()->defaultXRefProperties(elmt->kindInformations()["type"].toString());
Xreflabel = xrp.slaveLabel();
Xreflabel = assignVariables(Xreflabel, elmt);
label = assignVariables(label, elmt);
Xreflabel = autonum::AssignVariables::formulaToLabel(Xreflabel, elmt->rSequenceStruct(), elmt->diagram(), elmt);
label = autonum::AssignVariables::formulaToLabel(label, elmt->rSequenceStruct(), elmt->diagram(), elmt);
}
else label = assignVariables(label, this);
else label = autonum::AssignVariables::formulaToLabel(label, m_autoNum_seq, diagram(), this);
// set the new label
ElementTextItem *eti = setTaggedText("label", label, no_editable);

View File

@@ -68,10 +68,9 @@ void TerminalElement::changeElementInfo(){
* @brief SimpleElement::updateLabel
* update label of this element
*/
void TerminalElement::updateLabel(DiagramContext old_info, DiagramContext new_info) {
QString label = new_info["label"].toString();
Element *elmt = this;
label = assignVariables(label,elmt);
void TerminalElement::updateLabel(DiagramContext old_info, DiagramContext new_info)
{
QString label = autonum::AssignVariables::formulaToLabel(new_info["label"].toString(), m_autoNum_seq, diagram(), this);
//Label of element
if (old_info["label"].toString() != label) {