Conductor :

Use method toXml and fromXml of sequentialNumbers.
Use m_freeze_label instead of m_frozen_label to save the frozen status of the text item.


git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@4807 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
blacksun
2016-12-12 10:52:44 +00:00
parent 9ceae5b141
commit 543578c3dc
9 changed files with 89 additions and 166 deletions

View File

@@ -868,10 +868,6 @@ bool Diagram::fromXml(QDomElement &document, QPointF position, bool consider_inf
addItem(c); addItem(c);
c -> fromXml(f); c -> fromXml(f);
added_conductors << c; added_conductors << c;
if (item_paste) {
c->m_frozen_label = f.attribute("frozenlabel");
qDebug() << "Frozen Label" << f.attribute("frozenlabel");
}
} }
else else
delete c; delete c;
@@ -1489,19 +1485,9 @@ bool Diagram::freezeNewElements() {
* @brief Diagram::freezeConductors * @brief Diagram::freezeConductors
* Freeze every existent conductor label. * Freeze every existent conductor label.
*/ */
void Diagram::freezeConductors() { void Diagram::freezeConductors(bool freeze) {
foreach (Conductor *cnd, conductors()) { foreach (Conductor *cnd, conductors()) {
cnd->setFreezeLabel(true); cnd->setFreezeLabel(freeze);
}
}
/**
* @brief Diagram::unfreezeConductors
* Unfreeze every existent conductor label.
*/
void Diagram::unfreezeConductors() {
foreach (Conductor *cnd, conductors()) {
cnd->setFreezeLabel(false);
} }
} }

View File

@@ -222,9 +222,8 @@ class Diagram : public QGraphicsScene
void setFreezeNewElements(bool); void setFreezeNewElements(bool);
bool freezeNewElements(); bool freezeNewElements();
//methods related to conductor label Update Policy //methods related to conductor label Update Policy
void freezeConductors(); void freezeConductors(bool freeze);
void unfreezeConductors();
void setFreezeNewConductors(bool); void setFreezeNewConductors(bool);
bool freezeNewConductors(); bool freezeNewConductors();

View File

@@ -230,7 +230,7 @@ void DiagramEventAddElement::addElement()
//Autonum the new conductor, the undo command associated for this, have for parent undo_object //Autonum the new conductor, the undo command associated for this, have for parent undo_object
ConductorAutoNumerotation can (conductor, m_diagram, undo_object); ConductorAutoNumerotation can (conductor, m_diagram, undo_object);
can.numerate(); can.numerate();
if (m_diagram->freezeNewConductors() || m_diagram->project()->freezeNewConductors()) { if (m_diagram->freezeNewConductors() || m_diagram->project()->isFreezeNewConductors()) {
conductor->setFreezeLabel(true); conductor->setFreezeLabel(true);
} }
}; };

View File

@@ -623,29 +623,29 @@ void ProjectAutoNumConfigPage::applyManagement() {
//Allow Both Existent and New Conductors //Allow Both Existent and New Conductors
if (m_amw->ui->m_both_conductor_rb->isChecked()) { if (m_amw->ui->m_both_conductor_rb->isChecked()) {
//Unfreeze Existent and New Conductors //Unfreeze Existent and New Conductors
project()->unfreezeExistentConductorLabel(from,to); project()->freezeExistentConductorLabel(false, from,to);
project()->unfreezeNewConductorLabel(from,to); project()->freezeNewConductorLabel(false, from,to);
project()->setFreezeNewConductors(false); project()->setFreezeNewConductors(false);
} }
//Allow Only New //Allow Only New
else if (m_amw->ui->m_new_conductor_rb->isChecked()) { else if (m_amw->ui->m_new_conductor_rb->isChecked()) {
//Freeze Existent and Unfreeze New Conductors //Freeze Existent and Unfreeze New Conductors
project()->freezeExistentConductorLabel(from,to); project()->freezeExistentConductorLabel(true, from,to);
project()->unfreezeNewConductorLabel(from,to); project()->freezeNewConductorLabel(false, from,to);
project()->setFreezeNewConductors(false); project()->setFreezeNewConductors(false);
} }
//Allow Only Existent //Allow Only Existent
else if (m_amw->ui->m_existent_conductor_rb->isChecked()) { else if (m_amw->ui->m_existent_conductor_rb->isChecked()) {
//Freeze Existent and Unfreeze New Conductors //Freeze Existent and Unfreeze New Conductors
project()->unfreezeExistentConductorLabel(from,to); project()->freezeExistentConductorLabel(false, from,to);
project()->freezeNewConductorLabel(from,to); project()->freezeNewConductorLabel(true, from,to);
project()->setFreezeNewConductors(true); project()->setFreezeNewConductors(true);
} }
//Disable //Disable
else if (m_amw->ui->m_disable_conductor_rb->isChecked()) { else if (m_amw->ui->m_disable_conductor_rb->isChecked()) {
//Freeze Existent and New Elements, Set Freeze Element Project Wide //Freeze Existent and New Elements, Set Freeze Element Project Wide
project()->freezeExistentConductorLabel(from,to); project()->freezeExistentConductorLabel(true, from,to);
project()->freezeNewConductorLabel(from,to); project()->freezeNewConductorLabel(true, from,to);
project()->setFreezeNewConductors(true); project()->setFreezeNewConductors(true);
} }

View File

@@ -36,6 +36,36 @@ bool Conductor::pen_and_brush_initialized = false;
QPen Conductor::conductor_pen = QPen(); QPen Conductor::conductor_pen = QPen();
QBrush Conductor::conductor_brush = QBrush(); QBrush Conductor::conductor_brush = QBrush();
class ConductorXmlRetroCompatibility
{
friend class Conductor;
static void loadSequential(const QDomElement &dom_element, QString seq, QStringList* list)
{
int i = 0;
while (!dom_element.attribute(seq + QString::number(i+1)).isEmpty())
{
list->append(dom_element.attribute(seq + QString::number(i+1)));
i++;
}
}
static void loadSequential(const QDomElement &dom_element, Conductor *conductor)
{
autonum::sequentialNumbers sn;
loadSequential(dom_element,"sequ_",&sn.unit);
loadSequential(dom_element,"sequf_",&sn.unit_folio);
loadSequential(dom_element,"seqt_",&sn.ten);
loadSequential(dom_element,"seqtf_",&sn.ten_folio);
loadSequential(dom_element,"seqh_",&sn.hundred);
loadSequential(dom_element,"seqhf_",&sn.hundred_folio);
conductor->rSequenceNum() = sn;
}
};
/** /**
* @brief Conductor::Conductor * @brief Conductor::Conductor
* Default constructor. * Default constructor.
@@ -818,48 +848,30 @@ void Conductor::pointsToSegments(QList<QPointF> points_list) {
* @param e * @param e
* @return true is loading success else return false * @return true is loading success else return false
*/ */
bool Conductor::fromXml(QDomElement &e) { bool Conductor::fromXml(QDomElement &dom_element)
setPos(e.attribute("x", 0).toDouble(), {
e.attribute("y", 0).toDouble()); setPos(dom_element.attribute("x", 0).toDouble(),
dom_element.attribute("y", 0).toDouble());
bool return_ = pathFromXml(e); bool return_ = pathFromXml(dom_element);
text_item -> fromXml(e); text_item -> fromXml(dom_element);
ConductorProperties pr; ConductorProperties pr;
pr.fromXml(e); pr.fromXml(dom_element);
//Load Sequential Values //Load Sequential Values
loadSequential(&e,"sequ_",&m_autoNum_seq.unit); if (dom_element.hasAttribute("sequ_1") || dom_element.hasAttribute("sequf_1") || dom_element.hasAttribute("seqt_1") || dom_element.hasAttribute("seqtf_1") || dom_element.hasAttribute("seqh_1") || dom_element.hasAttribute("sequf_1"))
loadSequential(&e,"sequf_",&m_autoNum_seq.unit_folio); ConductorXmlRetroCompatibility::loadSequential(dom_element, this);
loadSequential(&e,"seqt_",&m_autoNum_seq.ten); else
loadSequential(&e,"seqtf_",&m_autoNum_seq.ten_folio); m_autoNum_seq.fromXml(dom_element.firstChildElement("sequentialNumbers"));
loadSequential(&e,"seqh_",&m_autoNum_seq.hundred);
loadSequential(&e,"seqhf_",&m_autoNum_seq.hundred_folio);
m_frozen_label = e.attribute("frozenlabel"); m_freeze_label = dom_element.attribute("freezeLabel") == "true"? true : false;
setProperties(pr); setProperties(pr);
return return_; return return_;
} }
/**
Load Sequentials to display on conductor label
@param QDomElement to set Attributes
@param Qstring seq to be retrieved
@param QStringList list to be inserted values
*/
void Conductor::loadSequential(QDomElement* e, QString seq, QStringList* list)
{
//Load Sequential Values
int i = 0;
while (!e->attribute(seq + QString::number(i+1)).isEmpty())
{
list->append(e->attribute(seq + QString::number(i+1)));
i++;
}
}
/** /**
Exporte les caracteristiques du conducteur sous forme d'une element XML. Exporte les caracteristiques du conducteur sous forme d'une element XML.
@param d Le document XML a utiliser pour creer l'element XML @param d Le document XML a utiliser pour creer l'element XML
@@ -867,65 +879,39 @@ void Conductor::loadSequential(QDomElement* e, QString seq, QStringList* list)
bornes dans le document XML et leur adresse en memoire bornes dans le document XML et leur adresse en memoire
@return Un element XML representant le conducteur @return Un element XML representant le conducteur
*/ */
QDomElement Conductor::toXml(QDomDocument &d, QHash<Terminal *, int> &table_adr_id) const { QDomElement Conductor::toXml(QDomDocument &dom_document, QHash<Terminal *, int> &table_adr_id) const
QDomElement e = d.createElement("conductor"); {
QDomElement dom_element = dom_document.createElement("conductor");
e.setAttribute("x", QString::number(pos().x())); dom_element.setAttribute("x", QString::number(pos().x()));
e.setAttribute("y", QString::number(pos().y())); dom_element.setAttribute("y", QString::number(pos().y()));
e.setAttribute("terminal1", table_adr_id.value(terminal1)); dom_element.setAttribute("terminal1", table_adr_id.value(terminal1));
e.setAttribute("terminal2", table_adr_id.value(terminal2)); dom_element.setAttribute("terminal2", table_adr_id.value(terminal2));
dom_element.setAttribute("freezeLabel", m_freeze_label? "true" : "false");
// on n'exporte les segments du conducteur que si ceux-ci ont // on n'exporte les segments du conducteur que si ceux-ci ont
// ete modifies par l'utilisateur // ete modifies par l'utilisateur
if (modified_path) { if (modified_path)
{
// parcours et export des segments // parcours et export des segments
QDomElement current_segment; QDomElement current_segment;
foreach(ConductorSegment *segment, segmentsList()) { foreach(ConductorSegment *segment, segmentsList())
current_segment = d.createElement("segment"); {
current_segment = dom_document.createElement("segment");
current_segment.setAttribute("orientation", segment -> isHorizontal() ? "horizontal" : "vertical"); current_segment.setAttribute("orientation", segment -> isHorizontal() ? "horizontal" : "vertical");
current_segment.setAttribute("length", QString("%1").arg(segment -> length())); current_segment.setAttribute("length", QString("%1").arg(segment -> length()));
e.appendChild(current_segment); dom_element.appendChild(current_segment);
} }
} }
// Save Conductor sequential values to Xml QDomElement dom_seq = m_autoNum_seq.toXml(dom_document);
// Save Unit Sequential Values dom_element.appendChild(dom_seq);
for (int i = 0; i < m_autoNum_seq.unit.size(); i++) {
e.setAttribute("sequ_" + QString::number(i+1),m_autoNum_seq.unit.at(i));
}
// Save UnitFolio Sequential Values
for (int i = 0; i < m_autoNum_seq.unit_folio.size(); i++) {
e.setAttribute("sequf_" + QString::number(i+1),m_autoNum_seq.unit_folio.at(i));
}
// Save Ten Sequential Values
for (int i = 0; i < m_autoNum_seq.ten.size(); i++) {
e.setAttribute("seqt_" + QString::number(i+1),m_autoNum_seq.ten.at(i));
}
// Save TenFolio Sequential Values
for (int i = 0; i < m_autoNum_seq.ten_folio.size(); i++) {
e.setAttribute("seqtf_" + QString::number(i+1),m_autoNum_seq.ten_folio.at(i));
}
// Save Hundred Sequential Values
for (int i = 0; i < m_autoNum_seq.hundred.size(); i++) {
e.setAttribute("seqh_" + QString::number(i+1),m_autoNum_seq.hundred.at(i));
}
// Save Hundred Sequential Values
for (int i = 0; i < m_autoNum_seq.hundred_folio.size(); i++) {
e.setAttribute("seqhf_" + QString::number(i+1),m_autoNum_seq.hundred_folio.at(i));
}
if (m_frozen_label != "") e.setAttribute("frozenlabel", m_frozen_label);
// Export the properties and text // Export the properties and text
m_properties. toXml(e); m_properties. toXml(dom_element);
text_item -> toXml(e); text_item -> toXml(dom_element);
return(e); return(dom_element);
} }
/** /**
@@ -1313,18 +1299,11 @@ void Conductor::setProperties(const ConductorProperties &properties)
setText(m_properties.text); setText(m_properties.text);
text_item -> setFontSize(m_properties.text_size); text_item -> setFontSize(m_properties.text_size);
if (terminal1 != NULL && terminal1->diagram() != NULL) {
if (terminal1->diagram()->item_paste)
m_frozen_label = "";
else
m_frozen_label = m_properties.text;
}
setFreezeLabel(m_freeze_label);
if (m_properties.type != ConductorProperties::Multi) if (m_properties.type != ConductorProperties::Multi)
text_item -> setVisible(false); text_item -> setVisible(false);
else else
text_item -> setVisible(m_properties.m_show_text); text_item -> setVisible(m_properties.m_show_text);
calculateTextItemPosition(); calculateTextItemPosition();
update(); update();
@@ -1732,17 +1711,4 @@ QList <Conductor *> relatedConductors(const Conductor *conductor) {
*/ */
void Conductor::setFreezeLabel(bool freeze) { void Conductor::setFreezeLabel(bool freeze) {
m_freeze_label = freeze; m_freeze_label = freeze;
if (m_freeze_label) {
QString freezelabel = this->text_item->toPlainText();
m_frozen_label = m_properties.text;
this->setText(freezelabel);
this->m_properties.text = freezelabel;
}
else {
if (m_frozen_label.isEmpty())
return;
this->setText(m_frozen_label);
m_properties.text = m_frozen_label;
}
} }

View File

@@ -123,7 +123,6 @@ class Conductor : public QObject, public QGraphicsPathItem
public: public:
void setFreezeLabel(bool freeze); void setFreezeLabel(bool freeze);
QString m_frozen_label;
public slots: public slots:
void displayedTextChanged(); void displayedTextChanged();
@@ -187,7 +186,6 @@ class Conductor : public QObject, public QGraphicsPathItem
static QPointF extendTerminal(const QPointF &, Qet::Orientation, qreal = 9.0); static QPointF extendTerminal(const QPointF &, Qet::Orientation, qreal = 9.0);
static Qt::Corner movementType(const QPointF &, const QPointF &); static Qt::Corner movementType(const QPointF &, const QPointF &);
static QPointF movePointIntoPolygon(const QPointF &, const QPainterPath &); static QPointF movePointIntoPolygon(const QPointF &, const QPainterPath &);
void loadSequential(QDomElement* e, QString seq, QStringList* list);
}; };
Conductor * longuestConductorInPotential (Conductor *conductor, bool all_diagram = false); Conductor * longuestConductorInPotential (Conductor *conductor, bool all_diagram = false);

View File

@@ -860,7 +860,7 @@ void Element::freezeLabel(bool freeze)
* Freeze this label if needed * Freeze this label if needed
*/ */
void Element::freezeNewAddedElement() { void Element::freezeNewAddedElement() {
if (this->diagram()->freezeNewElements() || this->diagram()->project()->freezeNewElements()) { if (this->diagram()->freezeNewElements() || this->diagram()->project()->isFreezeNewElements()) {
freezeLabel(true); freezeLabel(true);
} }
else return; else return;

View File

@@ -596,21 +596,9 @@ NumerotationContext QETProject::folioAutoNum (const QString &key) const {
* @param from - first folio index to apply freeze * @param from - first folio index to apply freeze
* @param to - last folio index to apply freeze * @param to - last folio index to apply freeze
*/ */
void QETProject::freezeExistentConductorLabel(int from, int to) { void QETProject::freezeExistentConductorLabel(bool freeze, int from, int to) {
for (int i = from; i <= to; i++) { for (int i = from; i <= to; i++) {
diagrams_.at(i)->freezeConductors(); diagrams_.at(i)->freezeConductors(freeze);
}
}
/**
* @brief QETProject::unfreezeExistentConductorLabel
* Unfreeze Existent Conductors in the selected folios
* @param from - first folio index to apply unfreeze
* @param to - last folio index to apply unfreeze
*/
void QETProject::unfreezeExistentConductorLabel(int from, int to) {
for (int i = from; i <= to; i++) {
diagrams_.at(i)->unfreezeConductors();
} }
} }
@@ -620,29 +608,17 @@ void QETProject::unfreezeExistentConductorLabel(int from, int to) {
* @param from - first folio index to apply freeze * @param from - first folio index to apply freeze
* @param to - last folio index to apply freeze * @param to - last folio index to apply freeze
*/ */
void QETProject::freezeNewConductorLabel(int from, int to) { void QETProject::freezeNewConductorLabel(bool freeze, int from, int to) {
for (int i = from; i <= to; i++) { for (int i = from; i <= to; i++) {
diagrams_.at(i)->setFreezeNewConductors(true); diagrams_.at(i)->setFreezeNewConductors(freeze);
} }
} }
/** /**
* @brief QETProject::unfreezeNewElementLabel * @brief QETProject::isFreezeNewConductors
* Unfreeze New Conductors in the selected folios
* @param from - first folio index to apply unfreeze
* @param to - last folio index to apply unfreeze
*/
void QETProject::unfreezeNewConductorLabel(int from, int to) {
for (int i = from; i <= to; i++) {
diagrams_.at(i)->setFreezeNewConductors(false);
}
}
/**
* @brief QETProject::freezeNewConductors
* @return freeze new conductors Project Wide status * @return freeze new conductors Project Wide status
*/ */
bool QETProject::freezeNewConductors() { bool QETProject::isFreezeNewConductors() {
return m_freeze_new_conductors; return m_freeze_new_conductors;
} }
@@ -682,7 +658,7 @@ void QETProject::freezeNewElementLabel(bool freeze, int from, int to) {
* @brief QETProject::freezeNewElements * @brief QETProject::freezeNewElements
* @return freeze new elements Project Wide status * @return freeze new elements Project Wide status
*/ */
bool QETProject::freezeNewElements() { bool QETProject::isFreezeNewElements() {
return m_freeze_new_elements; return m_freeze_new_elements;
} }

View File

@@ -131,15 +131,13 @@ class QETProject : public QObject
//Element //Element
void freezeExistentElementLabel(bool freeze, int from, int to); void freezeExistentElementLabel(bool freeze, int from, int to);
void freezeNewElementLabel(bool freeze, int from, int to); void freezeNewElementLabel(bool freeze, int from, int to);
bool freezeNewElements(); bool isFreezeNewElements();
void setFreezeNewElements(bool); void setFreezeNewElements(bool);
//Conductor //Conductor
void freezeExistentConductorLabel(int,int); void freezeExistentConductorLabel(bool freeze, int from, int to);
void unfreezeExistentConductorLabel(int,int); void freezeNewConductorLabel(bool freeze, int from, int to);
void freezeNewConductorLabel(int,int); bool isFreezeNewConductors();
void unfreezeNewConductorLabel(int,int);
bool freezeNewConductors();
void setFreezeNewConductors(bool); void setFreezeNewConductors(bool);
bool autoConductor () const; bool autoConductor () const;