mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2025-12-20 16:20:52 +01:00
Keep up to date the model when a dynamic text item change, for exemple after an undo command
git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@5030 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
@@ -55,7 +55,7 @@ void DynamicElementTextItemEditor::setElement(Element *element)
|
|||||||
|
|
||||||
DynamicElementTextModel *old_model = m_model;
|
DynamicElementTextModel *old_model = m_model;
|
||||||
m_model = new DynamicElementTextModel(m_tree_view);
|
m_model = new DynamicElementTextModel(m_tree_view);
|
||||||
connect(m_model, &DynamicElementTextModel::itemChanged, this, &DynamicElementTextItemEditor::dataEdited);
|
connect(m_model, &DynamicElementTextModel::dataForTextChanged, this, &DynamicElementTextItemEditor::dataEdited);
|
||||||
|
|
||||||
for (DynamicElementTextItem *deti : m_element->dynamicTextItems())
|
for (DynamicElementTextItem *deti : m_element->dynamicTextItems())
|
||||||
m_model->addText(deti);
|
m_model->addText(deti);
|
||||||
@@ -120,9 +120,9 @@ void DynamicElementTextItemEditor::setCurrentText(DynamicElementTextItem *text)
|
|||||||
m_tree_view->setCurrentIndex(index);
|
m_tree_view->setCurrentIndex(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DynamicElementTextItemEditor::dataEdited(QStandardItem *qsi)
|
void DynamicElementTextItemEditor::dataEdited(DynamicElementTextItem *deti)
|
||||||
{
|
{
|
||||||
Q_UNUSED(qsi)
|
Q_UNUSED(deti)
|
||||||
if (m_live_edit)
|
if (m_live_edit)
|
||||||
apply();
|
apply();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ class DynamicElementTextItemEditor : public AbstractElementPropertiesEditorWidge
|
|||||||
void setCurrentText(DynamicElementTextItem *text);
|
void setCurrentText(DynamicElementTextItem *text);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void dataEdited(QStandardItem *qsi);
|
void dataEdited(DynamicElementTextItem *deti);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void on_m_add_text_clicked();
|
void on_m_add_text_clicked();
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ QStandardItemModel(parent)
|
|||||||
setHeaderData(0, Qt::Horizontal, tr("Propriété"), Qt::DisplayRole);
|
setHeaderData(0, Qt::Horizontal, tr("Propriété"), Qt::DisplayRole);
|
||||||
setHeaderData(1, Qt::Horizontal, tr("Valeur"), Qt::DisplayRole);
|
setHeaderData(1, Qt::Horizontal, tr("Valeur"), Qt::DisplayRole);
|
||||||
|
|
||||||
connect(this, &DynamicElementTextModel::itemChanged, this, &DynamicElementTextModel::dataEdited);
|
connect(this, &DynamicElementTextModel::itemChanged, this, &DynamicElementTextModel::itemDataChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
DynamicElementTextModel::~DynamicElementTextModel()
|
DynamicElementTextModel::~DynamicElementTextModel()
|
||||||
@@ -56,7 +56,7 @@ void DynamicElementTextModel::addText(DynamicElementTextItem *deti)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
QList <QStandardItem *> qsi_list;
|
QList <QStandardItem *> qsi_list;
|
||||||
|
|
||||||
QStandardItem *qsi = new QStandardItem(deti->toPlainText());
|
QStandardItem *qsi = new QStandardItem(deti->toPlainText());
|
||||||
qsi->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
|
qsi->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
|
||||||
|
|
||||||
@@ -300,7 +300,7 @@ void DynamicElementTextModel::enableSourceText(DynamicElementTextItem *deti, Dyn
|
|||||||
{
|
{
|
||||||
if (!m_texts_list.contains(deti))
|
if (!m_texts_list.contains(deti))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
QStandardItem *qsi = m_texts_list.value(deti)->child(0,0);
|
QStandardItem *qsi = m_texts_list.value(deti)->child(0,0);
|
||||||
|
|
||||||
bool usr = false, info = false, compo = false;
|
bool usr = false, info = false, compo = false;
|
||||||
@@ -308,9 +308,9 @@ void DynamicElementTextModel::enableSourceText(DynamicElementTextItem *deti, Dyn
|
|||||||
switch (tf) {
|
switch (tf) {
|
||||||
case DynamicElementTextItem::UserText: usr = true; break;
|
case DynamicElementTextItem::UserText: usr = true; break;
|
||||||
case DynamicElementTextItem::ElementInfo: info = true; break;
|
case DynamicElementTextItem::ElementInfo: info = true; break;
|
||||||
case DynamicElementTextItem::CompositeText: compo = true; break;
|
case DynamicElementTextItem::CompositeText: compo = true;break;
|
||||||
}
|
}
|
||||||
|
|
||||||
//User text
|
//User text
|
||||||
qsi->child(0,0)->setEnabled(usr);
|
qsi->child(0,0)->setEnabled(usr);
|
||||||
qsi->child(0,1)->setEnabled(usr);
|
qsi->child(0,1)->setEnabled(usr);
|
||||||
@@ -322,41 +322,59 @@ void DynamicElementTextModel::enableSourceText(DynamicElementTextItem *deti, Dyn
|
|||||||
qsi->child(2,1)->setEnabled(compo);
|
qsi->child(2,1)->setEnabled(compo);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DynamicElementTextModel::dataEdited(QStandardItem *qsi)
|
void DynamicElementTextModel::itemDataChanged(QStandardItem *qsi)
|
||||||
{
|
{
|
||||||
DynamicElementTextItem *deti = textFromItem(qsi);
|
DynamicElementTextItem *deti = textFromItem(qsi);
|
||||||
if (!deti)
|
if (!deti)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
blockSignals(true);
|
QStandardItem *text_qsi = m_texts_list.value(deti);
|
||||||
|
|
||||||
if (qsi->data().toInt() == textFrom)
|
if (qsi->data().toInt() == textFrom)
|
||||||
{
|
{
|
||||||
|
QStandardItem *text_from_qsi = text_qsi->child(0,0);
|
||||||
QString from = qsi->data(Qt::DisplayRole).toString();
|
QString from = qsi->data(Qt::DisplayRole).toString();
|
||||||
|
|
||||||
if (from == tr("Texte utilisateur"))
|
if (from == tr("Texte utilisateur"))
|
||||||
|
{
|
||||||
enableSourceText(deti, DynamicElementTextItem::UserText);
|
enableSourceText(deti, DynamicElementTextItem::UserText);
|
||||||
|
text_qsi->setData(text_from_qsi->child(0,1)->data(Qt::DisplayRole).toString());
|
||||||
|
}
|
||||||
else if (from == tr("Information de l'élément"))
|
else if (from == tr("Information de l'élément"))
|
||||||
|
{
|
||||||
enableSourceText(deti, DynamicElementTextItem::ElementInfo);
|
enableSourceText(deti, DynamicElementTextItem::ElementInfo);
|
||||||
|
QString info = text_from_qsi->child(1,1)->data(Qt::UserRole+2).toString();
|
||||||
|
text_qsi->setData(deti->parentElement()->elementInformations().value(info), Qt::DisplayRole);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
enableSourceText(deti, DynamicElementTextItem::CompositeText);
|
enableSourceText(deti, DynamicElementTextItem::CompositeText);
|
||||||
|
QString compo = text_from_qsi->child(2,1)->data(Qt::UserRole+2).toString();
|
||||||
|
text_qsi->setData(autonum::AssignVariables::replaceVariable(compo, deti->parentElement()->elementInformations()), Qt::DisplayRole);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (qsi->data().toInt() == userText)
|
else if (qsi->data().toInt() == userText)
|
||||||
{
|
{
|
||||||
QString text = qsi->data(Qt::DisplayRole).toString();
|
QString text = qsi->data(Qt::DisplayRole).toString();
|
||||||
m_texts_list.value(deti)->setData(text, Qt::DisplayRole);
|
text_qsi->setData(text, Qt::DisplayRole);
|
||||||
}
|
}
|
||||||
else if (qsi->data().toInt() == infoText && deti->parentElement())
|
else if (qsi->data().toInt() == infoText && deti->parentElement())
|
||||||
{
|
{
|
||||||
QString info = qsi->data(Qt::UserRole+2).toString();
|
QString info = qsi->data(Qt::UserRole+2).toString();
|
||||||
m_texts_list.value(deti)->setData(deti->parentElement()->elementInformations().value(info), Qt::DisplayRole);
|
text_qsi->setData(deti->parentElement()->elementInformations().value(info), Qt::DisplayRole);
|
||||||
}
|
}
|
||||||
else if (qsi->data().toInt() == compositeText && deti->parentElement())
|
else if (qsi->data().toInt() == compositeText && deti->parentElement())
|
||||||
{
|
{
|
||||||
QString compo = qsi->data(Qt::UserRole+2).toString();
|
QString compo = qsi->data(Qt::UserRole+2).toString();
|
||||||
m_texts_list.value(deti)->setData(autonum::AssignVariables::replaceVariable(compo, deti->parentElement()->elementInformations()), Qt::DisplayRole);
|
text_qsi->setData(autonum::AssignVariables::replaceVariable(compo, deti->parentElement()->elementInformations()), Qt::DisplayRole);
|
||||||
}
|
}
|
||||||
|
|
||||||
blockSignals(false);
|
//We emit the signal only if @qsi is in the second column, because the data are stored on this column
|
||||||
|
//the first column is use only for display the title of the property
|
||||||
|
if(qsi->column() == 1)
|
||||||
|
emit dataForTextChanged(deti);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -377,8 +395,10 @@ void DynamicElementTextModel::setConnection(DynamicElementTextItem *deti, bool s
|
|||||||
connection_list << connect(deti, &DynamicElementTextItem::colorChanged, [deti,this](){this->updateDataFromText(deti, color);});
|
connection_list << connect(deti, &DynamicElementTextItem::colorChanged, [deti,this](){this->updateDataFromText(deti, color);});
|
||||||
connection_list << connect(deti, &DynamicElementTextItem::fontSizeChanged, [deti,this](){this->updateDataFromText(deti, size);});
|
connection_list << connect(deti, &DynamicElementTextItem::fontSizeChanged, [deti,this](){this->updateDataFromText(deti, size);});
|
||||||
connection_list << connect(deti, &DynamicElementTextItem::taggChanged, [deti,this](){this->updateDataFromText(deti, tagg);});
|
connection_list << connect(deti, &DynamicElementTextItem::taggChanged, [deti,this](){this->updateDataFromText(deti, tagg);});
|
||||||
connection_list << connect(deti, &DynamicElementTextItem::textChanged, [deti,this](){this->updateDataFromText(deti, userText);});
|
|
||||||
connection_list << connect(deti, &DynamicElementTextItem::textFromChanged, [deti,this](){this->updateDataFromText(deti, textFrom);});
|
connection_list << connect(deti, &DynamicElementTextItem::textFromChanged, [deti,this](){this->updateDataFromText(deti, textFrom);});
|
||||||
|
connection_list << connect(deti, &DynamicElementTextItem::textChanged, [deti,this](){this->updateDataFromText(deti, userText);});
|
||||||
|
connection_list << connect(deti, &DynamicElementTextItem::infoNameChanged, [deti,this](){this->updateDataFromText(deti, infoText);});
|
||||||
|
connection_list << connect(deti, &DynamicElementTextItem::compositeTextChanged, [deti, this]() {this->updateDataFromText(deti, compositeText);});
|
||||||
|
|
||||||
m_hash_text_connect.insert(deti, connection_list);
|
m_hash_text_connect.insert(deti, connection_list);
|
||||||
}
|
}
|
||||||
@@ -404,24 +424,42 @@ void DynamicElementTextModel::updateDataFromText(DynamicElementTextItem *deti, V
|
|||||||
{
|
{
|
||||||
case textFrom:
|
case textFrom:
|
||||||
{
|
{
|
||||||
switch (deti->textFrom()) {
|
switch (deti->textFrom())
|
||||||
|
{
|
||||||
case DynamicElementTextItem::UserText: qsi->child(0,1)->setData(tr("Texte utilisateur"), Qt::DisplayRole); break;
|
case DynamicElementTextItem::UserText: qsi->child(0,1)->setData(tr("Texte utilisateur"), Qt::DisplayRole); break;
|
||||||
case DynamicElementTextItem::ElementInfo : qsi->child(0,1)->setData(tr("Information de l'élément"), Qt::DisplayRole); break;
|
case DynamicElementTextItem::ElementInfo : qsi->child(0,1)->setData(tr("Information de l'élément"), Qt::DisplayRole); break;
|
||||||
case DynamicElementTextItem::CompositeText : qsi->child(0,1)->setData(tr("Texte composé"), Qt::DisplayRole); break;
|
case DynamicElementTextItem::CompositeText : qsi->child(0,1)->setData(tr("Texte composé"), Qt::DisplayRole); break;
|
||||||
}
|
}
|
||||||
|
enableSourceText(deti, deti->textFrom());
|
||||||
|
qsi->setData(deti->toPlainText(), Qt::DisplayRole);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case userText:
|
case userText:
|
||||||
{
|
{
|
||||||
|
qsi->setData(deti->toPlainText(), Qt::DisplayRole);
|
||||||
QStandardItem *qsia = qsi->child(0,0);
|
QStandardItem *qsia = qsi->child(0,0);
|
||||||
qsia->child(0,1)->setData(deti->toPlainText(), Qt::DisplayRole);
|
qsia->child(0,1)->setData(deti->toPlainText(), Qt::DisplayRole);
|
||||||
qsi->setData(deti->toPlainText(), Qt::DisplayRole);
|
qsi->setData(deti->toPlainText(), Qt::DisplayRole);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case infoText:
|
case infoText:
|
||||||
|
{
|
||||||
|
qsi->setData(deti->toPlainText(), Qt::DisplayRole);
|
||||||
|
QStandardItem *qsia = qsi->child(0,0);
|
||||||
|
QString info_name = deti->infoName();
|
||||||
|
qsia->child(1,1)->setData(info_name, Qt::UserRole+2);
|
||||||
|
qsia->child(1,1)->setData(QETApp::elementTranslatedInfoKey(info_name), Qt::DisplayRole);
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case compositeText:
|
case compositeText:
|
||||||
|
{
|
||||||
|
qsi->setData(deti->toPlainText(), Qt::DisplayRole);
|
||||||
|
QStandardItem *qsia = qsi->child(0,0);
|
||||||
|
qsia->child(2,1)->setData(deti->compositeText(), Qt::UserRole+2);
|
||||||
|
qsia->child(2,1)->setData(deti->toPlainText(), Qt::DisplayRole);
|
||||||
|
qsi->setData(deti->toPlainText(), Qt::DisplayRole);
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case size:
|
case size:
|
||||||
qsi->child(1,1)->setData(deti->fontSize(), Qt::EditRole);
|
qsi->child(1,1)->setData(deti->fontSize(), Qt::EditRole);
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -54,10 +54,13 @@ class DynamicElementTextModel : public QStandardItemModel
|
|||||||
DynamicElementTextItem *textFromItem(QStandardItem *item) const;
|
DynamicElementTextItem *textFromItem(QStandardItem *item) const;
|
||||||
QModelIndex indexFromText(DynamicElementTextItem *text) const;
|
QModelIndex indexFromText(DynamicElementTextItem *text) const;
|
||||||
QUndoCommand *undoForEditedText(DynamicElementTextItem *deti) const;
|
QUndoCommand *undoForEditedText(DynamicElementTextItem *deti) const;
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void dataForTextChanged(DynamicElementTextItem *text);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void enableSourceText(DynamicElementTextItem *deti, DynamicElementTextItem::TextFrom tf );
|
void enableSourceText(DynamicElementTextItem *deti, DynamicElementTextItem::TextFrom tf );
|
||||||
void dataEdited(QStandardItem *qsi);
|
void itemDataChanged(QStandardItem *qsi);
|
||||||
void setConnection(DynamicElementTextItem *deti, bool set);
|
void setConnection(DynamicElementTextItem *deti, bool set);
|
||||||
void updateDataFromText(DynamicElementTextItem *deti, DynamicElementTextModel::ValueType type);
|
void updateDataFromText(DynamicElementTextItem *deti, DynamicElementTextModel::ValueType type);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user