Creation of folio sequential type for Element Autonumbering. Correction of autonumbering type handling in numparteditorw.cpp

git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@4592 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
dfochi
2016-07-26 18:52:49 +00:00
parent 52e33787a8
commit d6f1381631
18 changed files with 568 additions and 153 deletions

View File

@@ -1,4 +1,4 @@
/*
/*
Copyright 2006-2016 The QElectroTech Team
This file is part of QElectroTech.
@@ -37,6 +37,7 @@
#include "qetapp.h"
#include "elementcollectionhandler.h"
#include "element.h"
#include "diagramview.h"
const int Diagram::xGrid = 10;
const int Diagram::yGrid = 10;
@@ -79,6 +80,7 @@ Diagram::Diagram(QETProject *project) :
connect(&border_and_titleblock, SIGNAL(diagramTitleChanged(const QString &)), this, SLOT(titleChanged(const QString &)));
connect(&border_and_titleblock, SIGNAL(borderChanged(QRectF,QRectF)), this, SLOT(adjustSceneRect()));
connect(&border_and_titleblock, SIGNAL(titleBlockFolioChanged()), this, SLOT(updateLabels()));
connect(this, SIGNAL (diagramActivated()), this, SLOT(loadElmtFolioSeq()));
adjustSceneRect();
}
@@ -473,6 +475,28 @@ QDomDocument Diagram::toXml(bool whole_content) {
//Default New Element
racine.setAttribute("freezeNewElement", m_freeze_new_elements_ ? "true" : "false");
//Folio Sequential Variables
if (!m_elmt_unitfolio_max.isEmpty() || !m_elmt_tenfolio_max.isEmpty() || !m_elmt_hundredfolio_max.isEmpty()) {
QDomElement folioContainedAutonum = document.createElement("elementautonumfoliosequentials");
QHash<QString, QStringList>::iterator i;
if (!m_elmt_unitfolio_max.isEmpty()) {
QDomElement elmtfolioseq = document.createElement("elementunitfolioseq");
elementFolioSequentialsToXml(&m_elmt_unitfolio_max, &elmtfolioseq, "sequf_");
folioContainedAutonum.appendChild(elmtfolioseq);
}
if (!m_elmt_tenfolio_max.isEmpty()) {
QDomElement elmtfolioseq = document.createElement("elementtenfolioseq");
elementFolioSequentialsToXml(&m_elmt_tenfolio_max, &elmtfolioseq, "seqtf_");
folioContainedAutonum.appendChild(elmtfolioseq);
}
if (!m_elmt_hundredfolio_max.isEmpty()) {
QDomElement elmtfolioseq = document.createElement("elementhundredfolioseq");
elementFolioSequentialsToXml(&m_elmt_hundredfolio_max, &elmtfolioseq, "seqhf_");
folioContainedAutonum.appendChild(elmtfolioseq);
}
racine.appendChild(folioContainedAutonum);
}
}
else {
//this method with whole_content to false,
@@ -569,6 +593,23 @@ QDomDocument Diagram::toXml(bool whole_content) {
return(document);
}
/**
+ * @brief Diagram::elementFolioSequentialsToXml
+ * Add element folio sequential to QDomElement
+ * @param domElement to add attributes
+ * @param hash to retrieve content with content
+ * @param sequential type
+ */
void Diagram::elementFolioSequentialsToXml(QHash<QString, QStringList> *hash, QDomElement *domElement, QString seq_type) {
QHash<QString, QStringList>::iterator i;
for (i = hash->begin(); i != hash->end(); i++) {
domElement->setAttribute("title", i.key());
for (int j = 0; j < i.value().size(); j++) {
domElement->setAttribute(seq_type + QString::number(j+1), i.value().at(j));
}
}
}
/**
Importe le schema decrit dans un document XML. Si une position est
precisee, les elements importes sont positionnes de maniere a ce que le
@@ -658,6 +699,10 @@ bool Diagram::fromXml(QDomElement &document, QPointF position, bool consider_inf
// Load Freeze New Element
m_freeze_new_elements_ = root.attribute("freezeNewElement").toInt();
elementFolioSequentialsFromXml(root, &m_elmt_unitfolio_max, "elementunitfolioseq","sequf_");
elementFolioSequentialsFromXml(root, &m_elmt_tenfolio_max, "elementtenfolioseq","seqtf_");
elementFolioSequentialsFromXml(root, &m_elmt_hundredfolio_max, "elementhundredfolioseq","seqhf_");
}
// if child haven't got a child, loading is finish (diagram is empty)
@@ -831,6 +876,27 @@ bool Diagram::fromXml(QDomElement &document, QPointF position, bool consider_inf
return(true);
}
/**
* @brief Diagram::elementFolioSequentialsFromXml
* Load element folio sequential from QDomElement
* @param root containing all folio sequentials
* @param hash to be loaded with content
* @param folioSeq type
* @param seq type
*/
void Diagram::elementFolioSequentialsFromXml(const QDomElement &root, QHash<QString, QStringList>* hash, QString folioSeq, QString seq) {
foreach (QDomElement folioSeqAutoNum, QET::findInDomElement(root, "elementautonumfoliosequentials", folioSeq)) {
QString title = folioSeqAutoNum.attribute("title");
QStringList unit;
int i = 1;
while (folioSeqAutoNum.hasAttribute(seq + QString::number(i))) {
unit << folioSeqAutoNum.attribute(seq + QString::number(i));
i++;
}
hash->insert(title,unit);
}
}
/**
Enregistre le schema XML dans son document XML interne et emet le signal
written().
@@ -1073,6 +1139,93 @@ void Diagram::updateLabels() {
}
}
/**
* @brief Diagram::insertFolioSeqHash
* This class inserts a stringlist containing all
* sequential variables related to an autonum in a QHash
* @param Hash to be accessed
* @param autonum title
* @param sequential to be treated
* @param type to be treated
* @param Numerotation Context to be manipulated
*/
void Diagram::insertFolioSeqHash(QHash<QString, QStringList> *hash, QString title, QString seq, QString type, NumerotationContext *nc) {
if (project()->elementAutoNumFormula().contains(seq)) {
QStringList max;
for (int i = 0; i < nc->size(); i++) {
if (nc->itemAt(i).at(0) == type) {
nc->replaceValue(i, QString::number(nc->itemAt(i).at(3).toInt()));
max.append(QString::number(nc->itemAt(i).at(3).toInt() - nc->itemAt(i).at(2).toInt()));
}
}
hash->insert(title,max);
project()->addElementAutoNum(title,*nc);
}
}
/**
* @brief Diagram::loadElmtFolioSeqHash
* This class loads all folio sequential variables
* related to the current autonum
* @param Hash to be accessed
* @param autonum title
* @param sequential to be treated
* @param type to be treated
* @param Numerotation Context to be manipulated
*/
void Diagram::loadElmtFolioSeqHash(QHash<QString, QStringList> *hash, QString title, QString seq, QString type, NumerotationContext *nc) {
if (project()->elementAutoNumFormula().contains(seq)) {
int j = 0;
for (int i = 0; i < nc->size(); i++) {
if (nc->itemAt(i).at(0) == type) {
QString new_value;
new_value = QString::number(hash->value(title).at(j).toInt() + nc->itemAt(i).at(2).toInt());
nc->replaceValue(i,new_value);
j++;
}
}
project()->addElementAutoNum(title,*nc);
}
}
/**
* @brief Diagram::loadElmtFolioSeq
* This class loads all folio sequential variables related
* to the current autonum
*/
void Diagram::loadElmtFolioSeq() {
//Element
QString title = project()->elementCurrentAutoNum();
NumerotationContext nc = project()->elementAutoNum(title);
//Unit Folio
if (m_elmt_unitfolio_max.isEmpty() || !m_elmt_unitfolio_max.contains(title)) {
//Insert Initial Value
insertFolioSeqHash(&m_elmt_unitfolio_max,title,"%sequf_","unitfolio",&nc);
}
else if (m_elmt_unitfolio_max.contains(title)) {
//Load Folio Current Value
loadElmtFolioSeqHash(&m_elmt_unitfolio_max,title,"%sequf_","unitfolio",&nc);
}
//Ten Folio
if (m_elmt_tenfolio_max.isEmpty() || !m_elmt_tenfolio_max.contains(title)) {
//Insert Initial Value
insertFolioSeqHash(&m_elmt_tenfolio_max,title,"%seqtf_","tenfolio",&nc);
}
else if (m_elmt_tenfolio_max.contains(title)) {
//Load Folio Current Value
loadElmtFolioSeqHash(&m_elmt_tenfolio_max,title,"%seqtf_","tenfolio",&nc);
}
//Hundred Folio
if (m_elmt_hundredfolio_max.isEmpty() || !m_elmt_hundredfolio_max.contains(title)) {
//Insert Initial Value
insertFolioSeqHash(&m_elmt_hundredfolio_max,title,"%seqhf_","hundredfolio",&nc);
}
else if (m_elmt_hundredfolio_max.contains(title)) {
//Load Folio Current Value
loadElmtFolioSeqHash(&m_elmt_hundredfolio_max,title,"%seqhf_","hundredfolio",&nc);
}
}
/**
@return le titre du cartouche
*/

View File

@@ -83,6 +83,10 @@ class Diagram : public QGraphicsScene
static const qreal margin;
/// background color of diagram
static QColor background_color;
/// Hash containing max values for folio sequential autonums in this diagram
QHash <QString, QStringList> m_elmt_unitfolio_max;
QHash <QString, QStringList> m_elmt_tenfolio_max;
QHash <QString, QStringList> m_elmt_hundredfolio_max;
private:
QGraphicsLineItem *conductor_setter_;
@@ -153,6 +157,8 @@ class Diagram : public QGraphicsScene
void write(const QDomElement &);
bool wasWritten() const;
QDomElement writeXml(QDomDocument &) const;
void elementFolioSequentialsToXml(QHash<QString, QStringList>*, QDomElement *, QString);
void elementFolioSequentialsFromXml(const QDomElement&, QHash<QString, QStringList>*, QString, QString);
// methods related to graphics items addition/removal on the diagram
void initElementsLinks();
@@ -202,12 +208,17 @@ class Diagram : public QGraphicsScene
QUndoStack &undoStack();
QGIManager &qgiManager();
//methods related to element label Update Policy
void freezeElements();
void unfreezeElements();
void freezeNew();
void unfreezeNew();
bool freezeNewElements();
//methods related to insertion and loading of element folio sequential
void insertFolioSeqHash (QHash<QString, QStringList> *hash, QString title, QString seq, QString type, NumerotationContext *nc);
void loadElmtFolioSeqHash (QHash<QString, QStringList> *hash, QString title, QString seq, QString type, NumerotationContext *nc);
public slots:
void adjustSceneRect ();
void titleChanged(const QString &);
@@ -216,6 +227,7 @@ class Diagram : public QGraphicsScene
void titleBlockTemplateRemoved(const QString &, const QString & = QString());
void setTitleBlockTemplate(const QString &);
void updateLabels();
void loadElmtFolioSeq();
// methods related to graphics items selection
void selectAll();
@@ -231,6 +243,7 @@ class Diagram : public QGraphicsScene
void editElementRequired(const ElementsLocation &); /// Signal emitted when users wish to edit an element from the diagram
void reportPropertiesChanged(QString);
void XRefPropertiesChanged();
void diagramActivated();
};
Q_DECLARE_METATYPE(Diagram *)

View File

@@ -233,7 +233,7 @@ void DiagramEventAddElement::addElement()
can.numerate();
};
m_diagram -> undoStack().push(undo_object);
element->setSeq();
element->setSequential();
element->freezeNewAddedElement();
element->updateLabel();
}

View File

@@ -45,13 +45,13 @@ void NumerotationContext::clear () {
* @param increase the increase number of value
* @return true if value is append
*/
bool NumerotationContext::addValue(const QString &type, const QVariant &value, const int increase) {
bool NumerotationContext::addValue(const QString &type, const QVariant &value, const int increase, const int initialvalue) {
if (!keyIsAcceptable(type) && !value.canConvert(QVariant::String)) return false;
if (keyIsNumber(type) && !value.canConvert(QVariant::Int)) return false;
QString valuestr = value.toString();
valuestr.remove("|");
content_ << type + "|" + valuestr + "|" + QString::number(increase);
content_ << type + "|" + valuestr + "|" + QString::number(increase) + "|" + QString::number(initialvalue);
return true;
}
@@ -99,7 +99,7 @@ QStringList NumerotationContext::itemAt(const int i) const {
* @return all type use to numerotation
*/
QString NumerotationContext::validRegExpNum () const {
return ("unit|ten|hundred|string|idfolio|folio|elementline|elementcolumn|elementprefix");
return ("unit|unitfolio|ten|hundred|string|idfolio|folio|elementline|elementcolumn|elementprefix");
}
/**
@@ -107,7 +107,7 @@ QString NumerotationContext::validRegExpNum () const {
* @return all type represents a number
*/
QString NumerotationContext::validRegExpNumber() const {
return ("unit|ten|hundred");
return ("unit|unitfolio|ten|hundred");
}
/**
@@ -138,6 +138,11 @@ QDomElement NumerotationContext::toXml(QDomDocument &d, QString str) {
part.setAttribute("type", strl.at(0));
part.setAttribute("value", strl.at(1));
part.setAttribute("increase", strl.at(2));
if (strl.at(0) == ("unitfolio") ||
strl.at(0) == ("tenfolio") ||
strl.at(0) == ("hundredfolio")) {
part.setAttribute("initialvalue", strl.at(3));
}
num_auto.appendChild(part);
}
return num_auto;
@@ -149,5 +154,20 @@ QDomElement NumerotationContext::toXml(QDomDocument &d, QString str) {
*/
void NumerotationContext::fromXml(QDomElement &e) {
clear();
foreach(QDomElement qde, QET::findInDomElement(e, "part")) addValue(qde.attribute("type"), qde.attribute("value"), qde.attribute("increase").toInt());
foreach(QDomElement qde, QET::findInDomElement(e, "part")) addValue(qde.attribute("type"), qde.attribute("value"), qde.attribute("increase").toInt(), qde.attribute("initialvalue").toInt());
}
/**
* @brief NumerotationContext::replaceValue
* This class replaces the current NC field value with content
* @param index of NC Item
* @param QString content to replace current value
*/
void NumerotationContext::replaceValue(int index, QString content) {
QString sep = "|";
QString type = content_[index].split("|").at(0);
QString value = content;
QString increase = content_[index].split("|").at(2);
QString initvalue = content_[index].split("|").at(3);
content_[index].replace(content_[index], type + "|" + value + "|" + increase + "|" + initvalue);
}

View File

@@ -33,7 +33,7 @@ class NumerotationContext
NumerotationContext ();
NumerotationContext (QDomElement &);
void clear();
bool addValue(const QString &, const QVariant & = QVariant(1), const int = 1);
bool addValue(const QString &, const QVariant & = QVariant(1), const int = 1, const int = 0);
QString operator[] (const int &) const;
void operator << (const NumerotationContext &);
int size() const;
@@ -45,6 +45,7 @@ class NumerotationContext
bool keyIsNumber(const QString &) const;
QDomElement toXml(QDomDocument &, QString);
void fromXml(QDomElement &);
void replaceValue(int, QString);
private:
QStringList content_;

View File

@@ -92,14 +92,26 @@ void NumerotationContextCommands::setNumStrategy(const QString &str) {
strategy_ = new UnitNum(diagram_);
return;
}
else if (str == "unitfolio") {
strategy_ = new UnitFNum (diagram_);
return;
}
else if (str == "ten") {
strategy_ = new TenNum (diagram_);
return;
}
else if (str == "tenfolio") {
strategy_ = new TenFNum (diagram_);
return;
}
else if (str == "hundred") {
strategy_ = new HundredNum (diagram_);
return;
}
else if (str == "hundredfolio") {
strategy_ = new HundredFNum (diagram_);
return;
}
else if (str == "string") {
strategy_ = new StringNum (diagram_);
return;
@@ -156,7 +168,7 @@ NumerotationContext NumStrategy::nextNumber (const NumerotationContext &nc, cons
QStringList strl = nc.itemAt(i);
NumerotationContext newnc;
QString value = QString::number( (strl.at(1).toInt()) + (strl.at(2).toInt()) );
newnc.addValue(strl.at(0), value, strl.at(2).toInt());
newnc.addValue(strl.at(0), value, strl.at(2).toInt(), strl.at(3).toInt());
return (newnc);
}
@@ -168,7 +180,7 @@ NumerotationContext NumStrategy::previousNumber(const NumerotationContext &nc, c
QStringList strl = nc.itemAt(i);
NumerotationContext newnc;
QString value = QString::number( (strl.at(1).toInt()) - (strl.at(2).toInt()) );
newnc.addValue(strl.at(0), value, strl.at(2).toInt());
newnc.addValue(strl.at(0), value, strl.at(2).toInt(), strl.at(3).toInt());
return (newnc);
}
@@ -203,6 +215,37 @@ NumerotationContext UnitNum::previous(const NumerotationContext &nc, const int i
return (previousNumber(nc, i));
}
/**
* Constructor
*/
UnitFNum::UnitFNum(Diagram *d):
NumStrategy(d)
{}
/**
* @brief UnitFNum::toRepresentedString
* @return the represented string of num
*/
QString UnitFNum::toRepresentedString(const QString num) const {
return (num);
}
/**
* @brief UnitFNum::next
* @return the next NumerotationContext nc at position i
*/
NumerotationContext UnitFNum::next (const NumerotationContext &nc, const int i) const {
return (nextNumber(nc, i));
}
/**
* @brief UnitFNum::previous
* @return the previous NumerotationContext nc at posiiton i
*/
NumerotationContext UnitFNum::previous(const NumerotationContext &nc, const int i) const {
return (previousNumber(nc, i));
}
/**
* Constructor
*/
@@ -237,6 +280,41 @@ NumerotationContext TenNum::previous(const NumerotationContext &nc, const int i)
return (previousNumber(nc, i));
}
/**
* Constructor
*/
TenFNum::TenFNum (Diagram *d):
NumStrategy (d)
{}
/**
* @brief TenFNum::toRepresentedString
* @return the represented string of num
*/
QString TenFNum::toRepresentedString(const QString num) const {
int numint = num.toInt();
QString numstr = num;
if (numint<10) numstr.prepend("0");
return (numstr);
}
/**
* @brief TenFNum::next
* @return the next NumerotationContext nc at position i
*/
NumerotationContext TenFNum::next (const NumerotationContext &nc, const int i) const {
return (nextNumber(nc, i));
}
/**
* @brief TenFNum::previous
* @return the previous NumerotationContext nc at posiiton i
*/
NumerotationContext TenFNum::previous(const NumerotationContext &nc, const int i) const {
return (previousNumber(nc, i));
}
/**
* Constructor
*/
@@ -276,6 +354,45 @@ NumerotationContext HundredNum::previous(const NumerotationContext &nc, const in
return (previousNumber(nc, i));
}
/**
* Constructor
*/
HundredFNum::HundredFNum (Diagram *d):
NumStrategy (d)
{}
/**
* @brief HundredFNum::toRepresentedString
* @return the represented string of num
*/
QString HundredFNum::toRepresentedString(const QString num) const {
int numint = num.toInt();
QString numstr = num;
if (numint<100) {
if (numint<10) {
numstr.prepend("00");
}
else numstr.prepend("0");
}
return (numstr);
}
/**
* @brief HundredFNum::next
* @return the next NumerotationContext nc at position i
*/
NumerotationContext HundredFNum::next (const NumerotationContext &nc, const int i) const {
return (nextNumber(nc, i));
}
/**
* @brief HundredFNum::previous
* @return the previous NumerotationContext nc at posiiton i
*/
NumerotationContext HundredFNum::previous(const NumerotationContext &nc, const int i) const {
return (previousNumber(nc, i));
}
/**
* Constructor
*/
@@ -352,7 +469,7 @@ FolioNum::FolioNum (Diagram *d):
*/
QString FolioNum::toRepresentedString(const QString str) const {
Q_UNUSED(str);
return (diagram_->border_and_titleblock.folio());
return ("%F");
}
/**

View File

@@ -69,6 +69,15 @@ class UnitNum: public NumStrategy
NumerotationContext previous (const NumerotationContext &, const int) const;
};
class UnitFNum: public NumStrategy
{
public:
UnitFNum (Diagram *);
QString toRepresentedString(const QString) const;
NumerotationContext next (const NumerotationContext &, const int) const;
NumerotationContext previous (const NumerotationContext &, const int) const;
};
class TenNum: public NumStrategy
{
public:
@@ -78,6 +87,15 @@ class TenNum: public NumStrategy
NumerotationContext previous (const NumerotationContext &, const int) const;
};
class TenFNum: public NumStrategy
{
public:
TenFNum (Diagram *);
QString toRepresentedString(const QString) const;
NumerotationContext next (const NumerotationContext &, const int) const;
NumerotationContext previous (const NumerotationContext &, const int) const;
};
class HundredNum: public NumStrategy
{
public:
@@ -87,6 +105,15 @@ class HundredNum: public NumStrategy
NumerotationContext previous (const NumerotationContext &, const int) const;
};
class HundredFNum: public NumStrategy
{
public:
HundredFNum (Diagram *);
QString toRepresentedString(const QString) const;
NumerotationContext next (const NumerotationContext &, const int) const;
NumerotationContext previous (const NumerotationContext &, const int) const;
};
class StringNum: public NumStrategy
{
public:

View File

@@ -1019,6 +1019,8 @@ void ProjectView::tabChanged(int tab_id) {
setDisplayFallbackWidget(false);
emit(diagramActivated(diagram_ids_[tab_id]));
if (diagram_ids_[tab_id] != nullptr)
diagram_ids_[tab_id]->diagram()->diagramActivated();
}
/**

View File

@@ -954,6 +954,7 @@ bool QETDiagramEditor::addProject(QETProject *project, bool update_panel) {
// met a jour le panel d'elements
if (update_panel) {
pa -> elementsPanel().projectWasOpened(project);
if (currentDiagram() != NULL)
m_autonumbering_dock->setProject(project, project_view);
}
@@ -1326,7 +1327,7 @@ void QETDiagramEditor::slot_updateActions()
void QETDiagramEditor::slot_updateAutoNumDock() {
if ( workspace.subWindowList().indexOf(workspace.activeSubWindow()) != activeSubWindowIndex) {
activeSubWindowIndex = workspace.subWindowList().indexOf(workspace.activeSubWindow());
if (currentProject()!=NULL) {
if (currentProject() != NULL && currentDiagram() != NULL) {
m_autonumbering_dock->setProject(currentProject()->project(),currentProject());
}
}

View File

@@ -429,26 +429,13 @@ bool Element::fromXml(QDomElement &e, QHash<int, Terminal *> &table_id_adr, bool
//load prefix
m_prefix = e.attribute("prefix");
//Load Unit Sequential Values
int i = 0;
while (!e.attribute("sequ_" + QString::number(i+1)).isEmpty()) {
seq_unit.append(e.attribute("sequ_" + QString::number(i+1)));
i++;
}
//Load Ten Sequential Values
i = 0;
while (!e.attribute("seqt_" + QString::number(i+1)).isEmpty()) {
seq_ten.append(e.attribute("seqt_" + QString::number(i+1)));
i++;
}
//Load Hundred Sequential Values
i = 0;
while (!e.attribute("seqh_" + QString::number(i+1)).isEmpty()) {
seq_hundred.append(e.attribute("seqh_" + QString::number(i+1)));
i++;
}
//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);
//load informations
m_element_informations.fromXml(e.firstChildElement("elementInformations"), "elementInformation");
@@ -470,6 +457,21 @@ bool Element::fromXml(QDomElement &e, QHash<int, Terminal *> &table_id_adr, bool
return(true);
}
/**
Load Sequentials to display on element label
@param element QDomElement to set Attributes
@param Qstring seq to be retrieved
@param QStringList list to be inserted values
*/
void Element::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++;
}
}
/**
Permet d'exporter l'element en XML
@param document Document XML a utiliser
@@ -488,21 +490,37 @@ QDomElement Element::toXml(QDomDocument &document, QHash<Terminal *, int> &table
// prefix
element.setAttribute("prefix", m_prefix);
//Save Unit Sequential Values
// 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));
}
//Save Ten Sequential Values
// Save UnitFolio Sequential Values
for (int i = 0; i < seq_unitfolio.size(); i++) {
element.setAttribute("sequf_" + QString::number(i+1),seq_unitfolio.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));
}
//Save Hundred Sequential Values
// Save TenFolio Sequential Values
for (int i = 0; i < seq_tenfolio.size(); i++) {
element.setAttribute("seqtf_" + QString::number(i+1),seq_tenfolio.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));
}
// Save Hundred Sequential Values
for (int i = 0; i < seq_hundredfolio.size(); i++) {
element.setAttribute("seqhf_" + QString::number(i+1),seq_hundredfolio.at(i));
}
// position, selection et orientation
element.setAttribute("x", QString("%1").arg(pos().x()));
element.setAttribute("y", QString("%1").arg(pos().y()));
@@ -748,10 +766,10 @@ QString Element::assignVariables(QString label, Element *elmt){
}
/**
* @brief Element::setSeq()
* @brief Element::setSequential
* Set sequential values to element
*/
void Element::setSeq() {
void Element::setSequential() {
DiagramContext &dc = this->rElementInformations();
QString element_currentAutoNum = diagram()->project()->elementCurrentAutoNum();
QString formula = diagram()->project()->elementAutoNumFormula();
@@ -759,34 +777,75 @@ void Element::setSeq() {
NumerotationContext nc = diagram()->project()->elementAutoNum(element_currentAutoNum);
NumerotationContextCommands ncc (nc);
if (!nc.isEmpty()) {
//Unit Format
if (label.contains("%sequ_")) {
for (int i = 0; i < nc.size(); i++) {
if (nc.itemAt(i).at(0) == "unit") {
seq_unit.append(QString::number(nc.itemAt(i).at(1).toInt()));
}
}
}
//Ten Format
if (label.contains("%seqt_")) {
for (int i = 0; i < nc.size(); i++) {
if (nc.itemAt(i).at(0) == "ten") {
QString number = QString ("%1").arg(nc.itemAt(i).at(1).toInt(), 2, 10, QChar('0'));
seq_ten.append(number);
}
}
}
//Hundred Format
if (label.contains("%seqh_")) {
for (int i = 0; i < nc.size(); i++) {
if (nc.itemAt(i).at(0) == "hundred") {
QString number = QString ("%1").arg(nc.itemAt(i).at(1).toInt(), 3, 10, QChar('0'));
seq_hundred.append(number);
}
if (label.contains("%sequ_"))
setSequentialToList(&seq_unit,&nc,"unit");
if (label.contains("%sequf_")) {
setSequentialToList(&seq_unitfolio,&nc,"unitfolio");
setFolioSequentialToHash(&seq_unitfolio,&diagram()->m_elmt_unitfolio_max,element_currentAutoNum);
}
if (label.contains("%seqt_"))
setSequentialToList(&seq_ten,&nc,"ten");
if (label.contains("%seqtf_")) {
setSequentialToList(&seq_tenfolio,&nc,"tenfolio");
setFolioSequentialToHash(&seq_tenfolio,&diagram()->m_elmt_tenfolio_max,element_currentAutoNum);
}
if (label.contains("%seqh_"))
setSequentialToList(&seq_hundred,&nc,"hundred");
if (label.contains("%seqhf_")) {
setSequentialToList(&seq_hundredfolio,&nc,"hundredfolio");
setFolioSequentialToHash(&seq_hundredfolio,&diagram()->m_elmt_hundredfolio_max,element_currentAutoNum);
}
this->diagram()->project()->addElementAutoNum(element_currentAutoNum,ncc.next());
}
}
/**
* @brief Element::setSequentialToList
* This class appends all sequential to selected list
* @param list to have values inserted
* @param nc to retrieve values from
* @param sequential type
*/
void Element::setSequentialToList(QStringList* list, NumerotationContext* nc, QString type) {
for (int i = 0; i < nc->size(); i++) {
if (nc->itemAt(i).at(0) == type) {
QString number;
if (type == "ten" || type == "tenfolio")
number = QString("%1").arg(nc->itemAt(i).at(1).toInt(), 2, 10, QChar('0'));
else if (type == "hundred" || type == "hundredfolio")
number = QString("%1").arg(nc->itemAt(i).at(1).toInt(), 3, 10, QChar('0'));
else number = QString::number(nc->itemAt(i).at(1).toInt());
list->append(number);
}
}
}
/**
* @brief Element::setFolioSequentialToHash
* This class inserts all elements from list to hash
* @param list to retrieve values from
* @param hash to have values inserted
* @param current element autonum to insert on hash
*/
void Element::setFolioSequentialToHash(QStringList* list, QHash<QString, QStringList> *hash, QString element_currentAutoNum) {
if (hash->isEmpty() || (!(hash->contains(element_currentAutoNum)))) {
QStringList max;
for (int i = 0; i < list->size(); i++) {
max.append(list->at(i));
}
hash->insert(element_currentAutoNum,max);
}
else if (hash->contains(element_currentAutoNum)) {
//Load the String List and update it
QStringList max = hash->value(element_currentAutoNum);
for (int i = 0; i < list->size(); i++) {
if ((list->at(i).toInt()) > max.at(i).toInt()) {
max.replace(i,list->at(i));
hash->remove(element_currentAutoNum);
hash->insert(element_currentAutoNum,max);
}
}
}
}
/**
@@ -796,7 +855,7 @@ void Element::setSeq() {
* @return replaced label
*/
QString Element::assignSeq(QString label) {
for (int i = 1; i <= qMax(seq_unit.size(),qMax(seq_hundred.size(),seq_ten.size())); i++) {
for (int i = 1; i <= qMax(qMax(qMax(seq_unitfolio.size(), seq_tenfolio.size()),qMax(seq_hundredfolio.size(),seq_unit.size())),qMax(seq_hundred.size(),seq_ten.size())); i++) {
if (label.contains("%sequ_" + QString::number(i))) {
label.replace("%sequ_" + QString::number(i),seq_unit.at(i-1));
}
@@ -806,6 +865,15 @@ QString Element::assignSeq(QString label) {
if (label.contains("%seqh_" + QString::number(i))) {
label.replace("%seqh_" + QString::number(i),seq_hundred.at(i-1));
}
if (label.contains("%sequf_" + QString::number(i))) {
label.replace("%sequf_" + QString::number(i),seq_unitfolio.at(i-1));
}
if (label.contains("%seqtf_" + QString::number(i))) {
label.replace("%seqtf_" + QString::number(i),seq_tenfolio.at(i-1));
}
if (label.contains("%seqhf_" + QString::number(i))) {
label.replace("%seqhf_" + QString::number(i),seq_hundredfolio.at(i-1));
}
}
return label;
}

View File

@@ -26,6 +26,7 @@ class ElementTextItem;
class QETProject;
class Terminal;
class Conductor;
class NumerotationContext;
/**
This is the base class for electrical elements.
@@ -135,7 +136,9 @@ class Element : public QetGraphicsItem {
// kind of contact (simple tempo) or number of contact show by the element.
QString assignVariables (QString, Element *);
QString assignSeq (QString);
void setSeq ();
void setSequential ();
void setSequentialToList(QStringList*, NumerotationContext*, QString);
void setFolioSequentialToHash(QStringList*, QHash<QString, QStringList>*, QString);
void setPrefix(QString);
QString getPrefix();
void freezeLabel();
@@ -194,6 +197,7 @@ class Element : public QetGraphicsItem {
void drawHighlight(QPainter *, const QStyleOptionGraphicsItem *);
void updatePixmap();
void etiToElementLabels(ElementTextItem*);
void loadSequential(QDomElement* e, QString seq, QStringList* list);
protected:
virtual void mouseMoveEvent ( QGraphicsSceneMouseEvent *event );
@@ -205,8 +209,11 @@ class Element : public QetGraphicsItem {
bool m_mouse_over;
QString m_prefix;
QStringList seq_unit;
QStringList seq_unitfolio;
QStringList seq_ten;
QStringList seq_tenfolio;
QStringList seq_hundred;
QStringList seq_hundredfolio;
};

View File

@@ -556,7 +556,7 @@ NumerotationContext QETProject::conductorAutoNum (const QString &key) const {
* If key is not found, return an empty numerotation context
* @param key
*/
NumerotationContext QETProject::elementAutoNum (const QString &key) const {
NumerotationContext QETProject::elementAutoNum (const QString &key) {
if (m_element_autonum.contains(key)) return m_element_autonum[key];
else return NumerotationContext();
}

View File

@@ -120,7 +120,7 @@ class QETProject : public QObject
void removeFolioAutoNum (QString key);
NumerotationContext conductorAutoNum(const QString &key) const;
NumerotationContext folioAutoNum(const QString &key) const;
NumerotationContext elementAutoNum(const QString &key) const;
NumerotationContext elementAutoNum(const QString &key);
QString elementAutoNumFormula(const QString key) const; //returns Formula
QString elementAutoNumFormula() const;
QString elementCurrentAutoNum () const;

View File

@@ -223,6 +223,7 @@ void AutoNumberingDockWidget::on_m_element_cb_activated(int) {
}
else
project_->setElementAutoNumCurrentFormula("","");
projectview_->currentDiagram()->diagram()->loadElmtFolioSeq();
}
/**

View File

@@ -28,8 +28,7 @@ NumPartEditorW::NumPartEditorW(QWidget *parent) :
intValidator (new QIntValidator(0,99999,this))
{
ui -> setupUi(this);
if (parentWidget()->parentWidget()->objectName()=="FolioTab") ui->type_combo->setMaxCount(4);
else if (parentWidget()->parentWidget()->objectName()=="ConductorTab") ui->type_combo->setMaxCount(6);
setVisibleItems();
setType(NumPartEditorW::unit, true);
}
@@ -43,16 +42,17 @@ NumPartEditorW::NumPartEditorW (NumerotationContext &context, int i, QWidget *pa
intValidator (new QIntValidator(0,99999,this))
{
ui -> setupUi(this);
if (parentWidget()->parentWidget()->objectName()=="FolioTab") ui->type_combo->setMaxCount(4);
else if (parentWidget()->parentWidget()->objectName()=="ConductorTab") ui->type_combo->setMaxCount(6);
//if @context contains nothing build with default value
setVisibleItems();
if(context.size()==0) setType(NumPartEditorW::unit, true);
else {
QStringList strl = context.itemAt(i);
if (strl.at(0)=="unit") setType(NumPartEditorW::unit, true);
else if (strl.at(0)=="unitfolio") setType(NumPartEditorW::unitfolio, true);
else if (strl.at(0)=="ten") setType(NumPartEditorW::ten, true);
else if (strl.at(0)=="tenfolio") setType(NumPartEditorW::tenfolio, true);
else if (strl.at(0)=="hundred") setType(NumPartEditorW::hundred, true);
else if (strl.at(0)=="hundredfolio") setType(NumPartEditorW::hundredfolio, true);
else if (strl.at(0)=="string") setType(NumPartEditorW::string);
else if (strl.at(0)=="idfolio") setType(NumPartEditorW::idfolio);
else if (strl.at(0)=="folio") setType(NumPartEditorW::folio);
@@ -73,6 +73,27 @@ NumPartEditorW::~NumPartEditorW()
delete ui;
}
void NumPartEditorW::setVisibleItems() {
ui->type_cb->setInsertPolicy(QComboBox::InsertAtBottom);
QStringList items;
if (parentWidget()->parentWidget()->objectName()=="FolioTab") {
items << tr("Chiffre 1") << tr("Chiffre 01")
<< tr("Chiffre 001")
<< tr("Texte") << tr("N° folio");
}
else if (parentWidget()->parentWidget()->objectName()=="ConductorTab") {
items << tr("Chiffre 1") << tr("Chiffre 01")
<< tr("Chiffre 001")
<< tr("Texte") << tr("N° folio") << tr("Folio");
}
else
items << tr("Chiffre 1") << tr("Chiffre 1 - Folio") << tr("Chiffre 01")
<< tr("Chiffre 01 - Folio") << tr("Chiffre 001") << tr("Chiffre 001 - Folio")
<< tr("Texte") << tr("N° folio") << tr("Folio")
<< tr("Element Line") << tr("Element Column") << tr("Element Prefix");
ui->type_cb->insertItems(0,items);
}
/**
* @brief NumPartEditorW::toNumContext
* @return the display to NumerotationContext
@@ -84,12 +105,21 @@ NumerotationContext NumPartEditorW::toNumContext() {
case unit:
type_str = "unit";
break;
case unitfolio:
type_str = "unitfolio";
break;
case ten:
type_str = "ten";
break;
case tenfolio:
type_str = "tenfolio";
break;
case hundred:
type_str = "hundred";
break;
case hundredfolio:
type_str = "hundredfolio";
break;
case string:
type_str = "string";
break;
@@ -109,6 +139,9 @@ NumerotationContext NumPartEditorW::toNumContext() {
type_str = "elementprefix";
break;
}
if (type_str == "unitfolio" || type_str == "tenfolio" || type_str == "hundredfolio")
nc.addValue(type_str, ui -> value_field -> displayText(), ui -> increase_spinBox -> value(), ui->value_field->displayText().toInt());
else
nc.addValue(type_str, ui -> value_field -> displayText(), ui -> increase_spinBox -> value());
return nc;
}
@@ -125,39 +158,34 @@ bool NumPartEditorW::isValid() {
}
/**
* @brief NumPartEditorW::on_type_combo_activated
* @brief NumPartEditorW::on_type_cb_activated
* Action when user change the type comboBox
*/
void NumPartEditorW::on_type_combo_activated(int index) {
switch (index) {
case unit:
void NumPartEditorW::on_type_cb_activated(int) {
if (ui->type_cb->currentText() == tr("Chiffre 1"))
setType(unit);
break;
case ten:
else if (ui->type_cb->currentText() == tr("Chiffre 1 - Folio"))
setType(unitfolio);
else if (ui->type_cb->currentText() == tr("Chiffre 01"))
setType(ten);
break;
case hundred:
else if (ui->type_cb->currentText() == tr("Chiffre 01 - Folio"))
setType(tenfolio);
else if (ui->type_cb->currentText() == tr("Chiffre 001"))
setType(hundred);
break;
case string:
else if (ui->type_cb->currentText() == tr("Chiffre 001 - Folio"))
setType(hundredfolio);
else if (ui->type_cb->currentText() == tr("Texte"))
setType(string);
break;
case idfolio:
else if (ui->type_cb->currentText() == tr("N° folio"))
setType(idfolio);
break;
case folio:
else if (ui->type_cb->currentText() == tr("Folio"))
setType(folio);
break;
case elementline:
else if (ui->type_cb->currentText() == tr("Element Line"))
setType(elementline);
break;
case elementcolumn:
else if (ui->type_cb->currentText() == tr("Element Column"))
setType(elementcolumn);
break;
case elementprefix:
else if (ui->type_cb->currentText() == tr("Element Prefix"))
setType(elementprefix);
break;
};
emit changed();
}
@@ -184,11 +212,11 @@ void NumPartEditorW::on_increase_spinBox_valueChanged(int) {
* @param fnum, force the behavior of numeric type
*/
void NumPartEditorW::setType(NumPartEditorW::type t, bool fnum) {
ui -> type_combo -> setCurrentIndex(t);
// ui -> type_cb -> setCurrentIndex(t);
//if @t is a numeric type and preview type @type_ isn't a numeric type
//or @fnum is true, we set numeric behavior
if ( ((t==unit || t==ten || t==hundred) &&
if ( ((t==unit || t==unitfolio || t==ten || t==tenfolio || t==hundred || t==hundredfolio) &&
(type_==string || type_==folio || type_==idfolio ||
type_==elementcolumn || type_==elementline || type_==elementprefix))
|| fnum) {

View File

@@ -41,13 +41,20 @@ class NumPartEditorW : public QWidget
NumPartEditorW (NumerotationContext &, int, QWidget *parent=0);
~NumPartEditorW();
enum type {unit,ten,hundred,string,idfolio,folio,elementline,elementcolumn,elementprefix};
enum type {unit,unitfolio,ten,tenfolio, hundred, hundredfolio,
string,idfolio,folio,
elementline,elementcolumn,elementprefix,
};
NumerotationContext toNumContext();
bool isValid ();
type type_;
private:
void setVisibleItems();
void disableItem(int index);
private slots:
void on_type_combo_activated(int);
void on_type_cb_activated(int);
void on_value_field_textEdited();
void on_increase_spinBox_valueChanged(int);
void setType (NumPartEditorW::type t, bool=false);

View File

@@ -30,7 +30,7 @@
<number>2</number>
</property>
<item>
<widget class="QComboBox" name="type_combo">
<widget class="QComboBox" name="type_cb">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
@@ -40,51 +40,6 @@
<property name="editable">
<bool>true</bool>
</property>
<item>
<property name="text">
<string>Chiffre 1</string>
</property>
</item>
<item>
<property name="text">
<string>Chiffre 01</string>
</property>
</item>
<item>
<property name="text">
<string>Chiffre 001</string>
</property>
</item>
<item>
<property name="text">
<string>Texte</string>
</property>
</item>
<item>
<property name="text">
<string>N° folio</string>
</property>
</item>
<item>
<property name="text">
<string>Folio</string>
</property>
</item>
<item>
<property name="text">
<string>Element Line</string>
</property>
</item>
<item>
<property name="text">
<string>Element Column</string>
</property>
</item>
<item>
<property name="text">
<string>Element Prefix</string>
</property>
</item>
</widget>
</item>
<item>

View File

@@ -233,8 +233,11 @@ void SelectAutonumW::applyEnable(bool b) {
void SelectAutonumW::contextToFormula() {
m_eaw->clearContext();
int count_unit = 0;
int count_unitf = 0;
int count_ten = 0;
int count_tenf = 0;
int count_hundred = 0;
int count_hundredf = 0;
foreach (NumPartEditorW *npe, num_part_list_) {
if (npe->isValid()) {
if (npe->type_ == NumPartEditorW::idfolio) {
@@ -259,14 +262,26 @@ void SelectAutonumW::contextToFormula() {
count_unit++;
m_eaw->setContext("%sequ_"+QString::number(count_unit));
}
else if (npe->type_ == NumPartEditorW::unitfolio) {
count_unitf++;
m_eaw->setContext("%sequf_"+QString::number(count_unitf));
}
else if (npe->type_ == NumPartEditorW::ten) {
count_ten++;
m_eaw->setContext("%seqt_"+QString::number(count_ten));
}
else if (npe->type_ == NumPartEditorW::tenfolio) {
count_tenf++;
m_eaw->setContext("%seqtf_"+QString::number(count_tenf));
}
else if (npe->type_ == NumPartEditorW::hundred) {
count_hundred++;
m_eaw->setContext("%seqh_"+QString::number(count_hundred));
}
else if (npe->type_ == NumPartEditorW::hundredfolio) {
count_hundredf++;
m_eaw->setContext("%seqhf_"+QString::number(count_hundredf));
}
}
}
}