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);
c -> fromXml(f);
added_conductors << c;
if (item_paste) {
c->m_frozen_label = f.attribute("frozenlabel");
qDebug() << "Frozen Label" << f.attribute("frozenlabel");
}
}
else
delete c;
@@ -1489,19 +1485,9 @@ bool Diagram::freezeNewElements() {
* @brief Diagram::freezeConductors
* Freeze every existent conductor label.
*/
void Diagram::freezeConductors() {
void Diagram::freezeConductors(bool freeze) {
foreach (Conductor *cnd, conductors()) {
cnd->setFreezeLabel(true);
}
}
/**
* @brief Diagram::unfreezeConductors
* Unfreeze every existent conductor label.
*/
void Diagram::unfreezeConductors() {
foreach (Conductor *cnd, conductors()) {
cnd->setFreezeLabel(false);
cnd->setFreezeLabel(freeze);
}
}

View File

@@ -223,8 +223,7 @@ class Diagram : public QGraphicsScene
bool freezeNewElements();
//methods related to conductor label Update Policy
void freezeConductors();
void unfreezeConductors();
void freezeConductors(bool freeze);
void setFreezeNewConductors(bool);
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
ConductorAutoNumerotation can (conductor, m_diagram, undo_object);
can.numerate();
if (m_diagram->freezeNewConductors() || m_diagram->project()->freezeNewConductors()) {
if (m_diagram->freezeNewConductors() || m_diagram->project()->isFreezeNewConductors()) {
conductor->setFreezeLabel(true);
}
};

View File

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

View File

@@ -36,6 +36,36 @@ bool Conductor::pen_and_brush_initialized = false;
QPen Conductor::conductor_pen = QPen();
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
* Default constructor.
@@ -818,48 +848,30 @@ void Conductor::pointsToSegments(QList<QPointF> points_list) {
* @param e
* @return true is loading success else return false
*/
bool Conductor::fromXml(QDomElement &e) {
setPos(e.attribute("x", 0).toDouble(),
e.attribute("y", 0).toDouble());
bool Conductor::fromXml(QDomElement &dom_element)
{
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;
pr.fromXml(e);
pr.fromXml(dom_element);
//Load Sequential Values
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);
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"))
ConductorXmlRetroCompatibility::loadSequential(dom_element, this);
else
m_autoNum_seq.fromXml(dom_element.firstChildElement("sequentialNumbers"));
m_frozen_label = e.attribute("frozenlabel");
m_freeze_label = dom_element.attribute("freezeLabel") == "true"? true : false;
setProperties(pr);
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.
@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
@return Un element XML representant le conducteur
*/
QDomElement Conductor::toXml(QDomDocument &d, QHash<Terminal *, int> &table_adr_id) const {
QDomElement e = d.createElement("conductor");
QDomElement Conductor::toXml(QDomDocument &dom_document, QHash<Terminal *, int> &table_adr_id) const
{
QDomElement dom_element = dom_document.createElement("conductor");
e.setAttribute("x", QString::number(pos().x()));
e.setAttribute("y", QString::number(pos().y()));
e.setAttribute("terminal1", table_adr_id.value(terminal1));
e.setAttribute("terminal2", table_adr_id.value(terminal2));
dom_element.setAttribute("x", QString::number(pos().x()));
dom_element.setAttribute("y", QString::number(pos().y()));
dom_element.setAttribute("terminal1", table_adr_id.value(terminal1));
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
// ete modifies par l'utilisateur
if (modified_path) {
if (modified_path)
{
// parcours et export des segments
QDomElement current_segment;
foreach(ConductorSegment *segment, segmentsList()) {
current_segment = d.createElement("segment");
foreach(ConductorSegment *segment, segmentsList())
{
current_segment = dom_document.createElement("segment");
current_segment.setAttribute("orientation", segment -> isHorizontal() ? "horizontal" : "vertical");
current_segment.setAttribute("length", QString("%1").arg(segment -> length()));
e.appendChild(current_segment);
dom_element.appendChild(current_segment);
}
}
// Save Conductor sequential values to Xml
// Save Unit Sequential Values
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);
QDomElement dom_seq = m_autoNum_seq.toXml(dom_document);
dom_element.appendChild(dom_seq);
// Export the properties and text
m_properties. toXml(e);
text_item -> toXml(e);
m_properties. toXml(dom_element);
text_item -> toXml(dom_element);
return(e);
return(dom_element);
}
/**
@@ -1313,18 +1299,11 @@ void Conductor::setProperties(const ConductorProperties &properties)
setText(m_properties.text);
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)
text_item -> setVisible(false);
else
text_item -> setVisible(m_properties.m_show_text);
calculateTextItemPosition();
update();
@@ -1732,17 +1711,4 @@ QList <Conductor *> relatedConductors(const Conductor *conductor) {
*/
void Conductor::setFreezeLabel(bool 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:
void setFreezeLabel(bool freeze);
QString m_frozen_label;
public slots:
void displayedTextChanged();
@@ -187,7 +186,6 @@ class Conductor : public QObject, public QGraphicsPathItem
static QPointF extendTerminal(const QPointF &, Qet::Orientation, qreal = 9.0);
static Qt::Corner movementType(const QPointF &, const QPointF &);
static QPointF movePointIntoPolygon(const QPointF &, const QPainterPath &);
void loadSequential(QDomElement* e, QString seq, QStringList* list);
};
Conductor * longuestConductorInPotential (Conductor *conductor, bool all_diagram = false);

View File

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

View File

@@ -596,21 +596,9 @@ NumerotationContext QETProject::folioAutoNum (const QString &key) const {
* @param from - first 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++) {
diagrams_.at(i)->freezeConductors();
}
}
/**
* @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();
diagrams_.at(i)->freezeConductors(freeze);
}
}
@@ -620,29 +608,17 @@ void QETProject::unfreezeExistentConductorLabel(int from, int to) {
* @param from - first 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++) {
diagrams_.at(i)->setFreezeNewConductors(true);
diagrams_.at(i)->setFreezeNewConductors(freeze);
}
}
/**
* @brief QETProject::unfreezeNewElementLabel
* 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
* @brief QETProject::isFreezeNewConductors
* @return freeze new conductors Project Wide status
*/
bool QETProject::freezeNewConductors() {
bool QETProject::isFreezeNewConductors() {
return m_freeze_new_conductors;
}
@@ -682,7 +658,7 @@ void QETProject::freezeNewElementLabel(bool freeze, int from, int to) {
* @brief QETProject::freezeNewElements
* @return freeze new elements Project Wide status
*/
bool QETProject::freezeNewElements() {
bool QETProject::isFreezeNewElements() {
return m_freeze_new_elements;
}

View File

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