mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-06-12 23:23:14 +02:00
Merge pull request #495 from ispyisail/feature-folio-template-variables
Folio properties: auto-add a title block's custom variables
This commit is contained in:
@@ -1756,6 +1756,10 @@ QString TitleBlockTemplate::interpreteVariables(
|
||||
QStringList TitleBlockTemplate::listOfVariables()
|
||||
{
|
||||
QStringList list;
|
||||
// Match every "%{name}" placeholder. The bare "%name" form can't be
|
||||
// extracted reliably without the variable list, and templates use the
|
||||
// braced form, so only that is collected here.
|
||||
static const QRegularExpression rx(QStringLiteral("%\\{([^}]+)\\}"));
|
||||
// run through each individual cell
|
||||
for (int j = 0 ; j < rows_heights_.count() ; ++ j) {
|
||||
for (int i = 0 ; i < columns_width_.count() ; ++ i) {
|
||||
@@ -1763,14 +1767,15 @@ QStringList TitleBlockTemplate::listOfVariables()
|
||||
|| cells_[i][j] -> cell_type
|
||||
== TitleBlockCell::EmptyCell)
|
||||
continue;
|
||||
#if TODO_LIST
|
||||
#pragma message("@TODO not works on all cases...")
|
||||
#endif
|
||||
// TODO: not works on all cases...
|
||||
list << cells_[i][j] -> value.name().replace("%","");
|
||||
const QString cell_value = cells_[i][j] -> value.name();
|
||||
auto it = rx.globalMatch(cell_value);
|
||||
while (it.hasNext()) {
|
||||
const QString name = it.next().captured(1);
|
||||
if (!name.isEmpty() && !list.contains(name))
|
||||
list << name;
|
||||
}
|
||||
}
|
||||
}
|
||||
qDebug() << list;
|
||||
return list;
|
||||
}
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
#include "ui_titleblockpropertieswidget.h"
|
||||
|
||||
#include <QMenu>
|
||||
#include <QSet>
|
||||
#include <utility>
|
||||
|
||||
/**
|
||||
@@ -162,7 +163,11 @@ void TitleBlockPropertiesWidget::setProperties(
|
||||
}
|
||||
ui -> m_tbt_cb -> setCurrentIndex(index);
|
||||
|
||||
m_dcw -> setContext(properties.context);
|
||||
// Show the saved custom values, plus any of the template's custom variables
|
||||
// that aren't defined yet, so the user only fills in the missing ones (#271).
|
||||
DiagramContext context = properties.context;
|
||||
addTemplateVariables(context, index);
|
||||
m_dcw -> setContext(context);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -435,12 +440,15 @@ void TitleBlockPropertiesWidget::updateTemplateList()
|
||||
}
|
||||
|
||||
/**
|
||||
@brief TitleBlockPropertiesWidget::changeCurrentTitleBlockTemplate
|
||||
Load the additional field of title block "text"
|
||||
@brief TitleBlockPropertiesWidget::templateForIndex
|
||||
@param index : index in the collection-type map (= the template combo index)
|
||||
@return the TitleBlockTemplate currently selected for that collection, or
|
||||
nullptr.
|
||||
*/
|
||||
void TitleBlockPropertiesWidget::changeCurrentTitleBlockTemplate(int index)
|
||||
TitleBlockTemplate *TitleBlockPropertiesWidget::templateForIndex(int index) const
|
||||
{
|
||||
m_dcw -> clear();
|
||||
if (index < 0 || index >= m_map_index_to_collection_type.count())
|
||||
return nullptr;
|
||||
|
||||
QET::QetCollection qc = m_map_index_to_collection_type.at(index);
|
||||
TitleBlockTemplatesCollection *collection = nullptr;
|
||||
@@ -448,21 +456,55 @@ void TitleBlockPropertiesWidget::changeCurrentTitleBlockTemplate(int index)
|
||||
if (c -> collection() == qc)
|
||||
collection = c;
|
||||
|
||||
if (!collection) return;
|
||||
if (!collection) return nullptr;
|
||||
return collection -> getTemplate(ui -> m_tbt_cb -> currentText());
|
||||
}
|
||||
|
||||
// get template
|
||||
TitleBlockTemplate *tpl = collection -> getTemplate(ui -> m_tbt_cb -> currentText());
|
||||
if(tpl != nullptr) {
|
||||
// get all template fields
|
||||
QStringList fields = tpl -> listOfVariables();
|
||||
// set fields to additional_fields_ widget
|
||||
DiagramContext templateContext;
|
||||
for(int i =0; i<fields.count(); i++)
|
||||
templateContext.addValue(fields.at(i), "");
|
||||
m_dcw -> setContext(templateContext);
|
||||
/**
|
||||
@brief TitleBlockPropertiesWidget::addTemplateVariables
|
||||
Add to @p context every CUSTOM variable used by the currently selected
|
||||
template that is not already present, with an empty value — so the user
|
||||
only has to fill in the values instead of declaring the variables (#271).
|
||||
The standard fields (title, author, date, …) are handled by their own
|
||||
widgets and are skipped. Existing values in @p context are preserved.
|
||||
*/
|
||||
void TitleBlockPropertiesWidget::addTemplateVariables(
|
||||
DiagramContext &context, int index) const
|
||||
{
|
||||
TitleBlockTemplate *tpl = templateForIndex(index);
|
||||
if (!tpl) return;
|
||||
|
||||
// Variables rendered from the dedicated standard-field widgets; they must
|
||||
// not appear in the "Custom" tab.
|
||||
static const QSet<QString> reserved {
|
||||
QStringLiteral("author"), QStringLiteral("date"),
|
||||
QStringLiteral("title"), QStringLiteral("filename"),
|
||||
QStringLiteral("plant"), QStringLiteral("locmach"),
|
||||
QStringLiteral("indexrev"), QStringLiteral("version"),
|
||||
QStringLiteral("folio"), QStringLiteral("folio-id"),
|
||||
QStringLiteral("folio-total"), QStringLiteral("auto_page_num"),
|
||||
QStringLiteral("previous-folio-num"), QStringLiteral("next-folio-num")
|
||||
};
|
||||
|
||||
const QStringList variables = tpl -> listOfVariables();
|
||||
for (const QString &name : variables) {
|
||||
if (name.isEmpty() || reserved.contains(name)) continue;
|
||||
if (!context.contains(name)) context.addValue(name, "");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@brief TitleBlockPropertiesWidget::changeCurrentTitleBlockTemplate
|
||||
When the user picks a template, append its missing custom variables to the
|
||||
"Custom" tab while keeping the values already entered (#271).
|
||||
*/
|
||||
void TitleBlockPropertiesWidget::changeCurrentTitleBlockTemplate(int index)
|
||||
{
|
||||
DiagramContext context = m_dcw -> context();
|
||||
addTemplateVariables(context, index);
|
||||
m_dcw -> setContext(context);
|
||||
}
|
||||
|
||||
/**
|
||||
@brief TitleBlockPropertiesWidget::on_m_date_now_pb_clicked
|
||||
Set the date to current date
|
||||
|
||||
@@ -30,6 +30,7 @@ class NumerotationContext;
|
||||
class QETProject;
|
||||
class QMenu;
|
||||
class TitleBlockTemplatesCollection;
|
||||
class TitleBlockTemplate;
|
||||
|
||||
namespace Ui {
|
||||
class TitleBlockPropertiesWidget;
|
||||
@@ -77,6 +78,8 @@ class TitleBlockPropertiesWidget : public QWidget
|
||||
void initDialog(const bool ¤t_date, QETProject *project);
|
||||
int getIndexFor (const QString &tbt_name,
|
||||
const QET::QetCollection collection) const;
|
||||
TitleBlockTemplate *templateForIndex (int index) const;
|
||||
void addTemplateVariables (DiagramContext &context, int index) const;
|
||||
|
||||
private slots:
|
||||
void editCurrentTitleBlockTemplate();
|
||||
|
||||
Reference in New Issue
Block a user