Title block : add two news variables, previous-folio-num and next-folio-num

git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@5664 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
blacksun 2018-12-28 18:39:54 +00:00
parent 34f59f4920
commit 2274382219
6 changed files with 329 additions and 194 deletions

View File

@ -696,6 +696,45 @@ DiagramPosition BorderTitleBlock::convertPosition(const QPointF &pos)
return(DiagramPosition(letter, row_number)); return(DiagramPosition(letter, row_number));
} }
/**
* @brief BorderTitleBlock::setAuthor
* @param author the new value of the "Author" field
*/
void BorderTitleBlock::setAuthor(const QString &author) {
btb_author_ = author;
}
/**
* @brief BorderTitleBlock::setDate
* @param date the new value of the "Date" field
*/
void BorderTitleBlock::setDate(const QDate &date) {
btb_date_ = date;
}
/**
* @brief BorderTitleBlock::setTitle
* @param title the new value of the "Title" field
*/
void BorderTitleBlock::setTitle(const QString &title)
{
if (btb_title_ != title)
{
btb_title_ = title;
emit(diagramTitleChanged(title));
}
}
/**
* @brief BorderTitleBlock::setFolio
* @param folio the new value of the "Folio" field
*/
void BorderTitleBlock::setFolio(const QString &folio)
{
btb_folio_ = folio;
emit (titleBlockFolioChanged(folio));
}
/** /**
Update the informations given to the titleblock template by regenerating a Update the informations given to the titleblock template by regenerating a
DiagramContext object. DiagramContext object.
@ -723,6 +762,8 @@ void BorderTitleBlock::updateDiagramContextForTitleBlock(const DiagramContext &i
context.addValue("folio-id", folio_index_); context.addValue("folio-id", folio_index_);
context.addValue("folio-total", folio_total_); context.addValue("folio-total", folio_total_);
context.addValue("auto_page_num", btb_auto_page_num_); context.addValue("auto_page_num", btb_auto_page_num_);
context.addValue("previous-folio-num", m_previous_folio_num);
context.addValue("next-folio-num", m_next_folio_num);
titleblock_template_renderer_ -> setContext(context); titleblock_template_renderer_ -> setContext(context);
} }
@ -769,3 +810,75 @@ void BorderTitleBlock::setFolioData(int index, int total, const QString& autonum
updateDiagramContextForTitleBlock(project_properties); updateDiagramContextForTitleBlock(project_properties);
} }
/**
* @brief BorderTitleBlock::setPlant
* @param plant the new value of the "plant" field
*/
void BorderTitleBlock::setPlant(const QString &plant) {
btb_plant_ = plant;
}
/**
* @brief BorderTitleBlock::setLocMach
* @param locmach the new value of the "locmach" field
*/
void BorderTitleBlock::setLocMach(const QString &locmach) {
btb_locmach_ = locmach;
}
/**
* @brief BorderTitleBlock::setIndicerev
* @param indexrev the new value of the "indexrev" field
*/
void BorderTitleBlock::setIndicerev(const QString &indexrev) {
btb_indexrev_ = indexrev;
}
/**
* @brief BorderTitleBlock::setFileName
* @param filename the new value of the "filename" field
*/
void BorderTitleBlock::setFileName(const QString &filename) {
btb_filename_ = filename;
}
/**
* @brief BorderTitleBlock::setVersion
* @param version the new value of the "version" field
*/
void BorderTitleBlock::setVersion(const QString &version) {
btb_version_ = version;
}
/**
* @brief BorderTitleBlock::setAutoPageNum
* @param auto_page_num the new value of the "auto_page_num" field
*/
void BorderTitleBlock::setAutoPageNum(const QString &auto_page_num) {
btb_auto_page_num_ = auto_page_num;
}
/**
* @brief BorderTitleBlock::setPreviousFolioNum
* @param previous the new value of the "previous-folio-num" field
*/
void BorderTitleBlock::setPreviousFolioNum(const QString &previous)
{
m_previous_folio_num = previous;
DiagramContext context = titleblock_template_renderer_->context();
context.addValue("previous-folio-num", m_previous_folio_num);
titleblock_template_renderer_->setContext(context);
}
/**
* @brief BorderTitleBlock::setNextFolioNum
* @param next the new value of the "next-folio-num" field
*/
void BorderTitleBlock::setNextFolioNum(const QString &next)
{
m_next_folio_num = next;
DiagramContext context = titleblock_template_renderer_->context();
context.addValue("next-folio-num", m_next_folio_num);
titleblock_template_renderer_->setContext(context);
}

View File

@ -103,7 +103,6 @@ class BorderTitleBlock : public QObject
QString locmach() const { return(btb_locmach_); } QString locmach() const { return(btb_locmach_); }
/// @return the value of the revision index block "Folio" field /// @return the value of the revision index block "Folio" field
QString indexrev() const { return(btb_indexrev_); } QString indexrev() const { return(btb_indexrev_); }
/// @return the value of the title block "File" field /// @return the value of the title block "File" field
QString fileName() const { return(btb_filename_); } QString fileName() const { return(btb_filename_); }
/// @return the value of the title block Additional Fields /// @return the value of the title block Additional Fields
@ -137,32 +136,19 @@ class BorderTitleBlock : public QObject
DiagramPosition convertPosition(const QPointF &); DiagramPosition convertPosition(const QPointF &);
// methods to set title block basic data // methods to set title block basic data
/// @param author the new value of the "Author" field void setAuthor(const QString &author);
void setAuthor(const QString &author) { btb_author_ = author; } void setDate(const QDate &date);
/// @param author the new value of the "Date" field void setTitle(const QString &title);
void setDate(const QDate &date) { btb_date_ = date; } void setFolio(const QString &folio);
/// @param author the new value of the "Title" field
void setTitle(const QString &title) {
if (btb_title_ != title) {
btb_title_ = title;
emit(diagramTitleChanged(title));
}
}
/// @param author the new value of the "Folio" field
void setFolio(const QString &folio) {
btb_folio_ = folio;
emit (titleBlockFolioChanged(folio));
}
void setFolioData(int, int, const QString& = nullptr, const DiagramContext & = DiagramContext()); void setFolioData(int, int, const QString& = nullptr, const DiagramContext & = DiagramContext());
/// @param author the new value of the "File" field void setPlant(const QString &plant);
void setPlant(const QString &plant) { btb_plant_ = plant; } void setLocMach(const QString &locmach);
void setLocMach(const QString &locmach) { btb_locmach_ = locmach; } void setIndicerev(const QString &indexrev);
void setIndicerev(const QString &indexrev){ btb_indexrev_ = indexrev; } void setFileName(const QString &filename);
void setFileName(const QString &filename) { btb_filename_ = filename; } void setVersion(const QString &version);
/// @param author the new value of the "Version" field void setAutoPageNum(const QString &auto_page_num);
void setVersion(const QString &version) { btb_version_ = version; } void setPreviousFolioNum(const QString &previous);
/// @param author the new value of the "Auto Page Num" field void setNextFolioNum(const QString &next);
void setAutoPageNum(const QString &auto_page_num) { btb_auto_page_num_ = auto_page_num;}
void titleBlockToXml(QDomElement &); void titleBlockToXml(QDomElement &);
void titleBlockFromXml(const QDomElement &); void titleBlockFromXml(const QDomElement &);
@ -205,24 +191,20 @@ class BorderTitleBlock : public QObject
Signal emitted after display options have changed Signal emitted after display options have changed
*/ */
void displayChanged(); void displayChanged();
/** /**
Signal emitted after the title has changed Signal emitted after the title has changed
*/ */
void diagramTitleChanged(const QString &); void diagramTitleChanged(const QString &);
/** /**
@brief titleBlockFolioChanged @brief titleBlockFolioChanged
Signal emitted after Folio has changed Signal emitted after Folio has changed
*/ */
void titleBlockFolioChanged(const QString &); void titleBlockFolioChanged(const QString &);
/** /**
Signal emitted when the title block requires its data to be updated in order Signal emitted when the title block requires its data to be updated in order
to generate the folio field. to generate the folio field.
*/ */
void needFolioData(); void needFolioData();
/** /**
Signal emitted when this object needs to set a specific title block Signal emitted when this object needs to set a specific title block
template. This object cannot handle the job since it does not know of template. This object cannot handle the job since it does not know of
@ -248,6 +230,8 @@ class BorderTitleBlock : public QObject
QString btb_version_; QString btb_version_;
DiagramContext additional_fields_; DiagramContext additional_fields_;
Qt::Edge m_edge; Qt::Edge m_edge;
QString m_next_folio_num,
m_previous_folio_num;
// border dimensions (rows and columns) // border dimensions (rows and columns)
// columns: number and dimensions // columns: number and dimensions

View File

@ -1744,7 +1744,8 @@ bool QETProject::projectWasModified() {
Indique a chaque schema du projet quel est son numero de folio et combien de Indique a chaque schema du projet quel est son numero de folio et combien de
folio le projet contient. folio le projet contient.
*/ */
void QETProject::updateDiagramsFolioData() { void QETProject::updateDiagramsFolioData()
{
int total_folio = m_diagrams_list.count(); int total_folio = m_diagrams_list.count();
DiagramContext project_wide_properties = project_properties_; DiagramContext project_wide_properties = project_properties_;
@ -1752,19 +1753,38 @@ void QETProject::updateDiagramsFolioData() {
project_wide_properties.addValue("projectpath", filePath()); project_wide_properties.addValue("projectpath", filePath());
project_wide_properties.addValue("projectfilename", QFileInfo(filePath()).baseName()); project_wide_properties.addValue("projectfilename", QFileInfo(filePath()).baseName());
for (int i = 0 ; i < total_folio ; ++ i) { for (int i = 0 ; i < total_folio ; ++ i)
QString title = m_diagrams_list[i] -> title(); {
QString autopagenum = m_diagrams_list[i]->border_and_titleblock.autoPageNum(); QString autopagenum = m_diagrams_list[i]->border_and_titleblock.autoPageNum();
NumerotationContext nC = folioAutoNum(autopagenum); NumerotationContext nC = folioAutoNum(autopagenum);
NumerotationContextCommands nCC = NumerotationContextCommands(nC); NumerotationContextCommands nCC = NumerotationContextCommands(nC);
if((m_diagrams_list[i]->border_and_titleblock.folio().contains("%autonum"))&&(!autopagenum.isNull())){
if ((m_diagrams_list[i]->border_and_titleblock.folio().contains("%autonum")) &&
(!autopagenum.isNull()))
{
m_diagrams_list[i] -> border_and_titleblock.setFolioData(i + 1, total_folio, nCC.toRepresentedString(), project_wide_properties); m_diagrams_list[i] -> border_and_titleblock.setFolioData(i + 1, total_folio, nCC.toRepresentedString(), project_wide_properties);
m_diagrams_list[i]->project()->addFolioAutoNum(autopagenum,nCC.next()); m_diagrams_list[i]->project()->addFolioAutoNum(autopagenum,nCC.next());
} }
else { else {
m_diagrams_list[i] -> border_and_titleblock.setFolioData(i + 1, total_folio, nullptr, project_wide_properties); m_diagrams_list[i] -> border_and_titleblock.setFolioData(i + 1, total_folio, nullptr, project_wide_properties);
} }
m_diagrams_list[i] -> update();
if (i > 0)
{
m_diagrams_list.at(i)->border_and_titleblock.setPreviousFolioNum(m_diagrams_list.at(i-1)->border_and_titleblock.finalfolio());
m_diagrams_list.at(i-1)->border_and_titleblock.setNextFolioNum(m_diagrams_list.at(i)->border_and_titleblock.finalfolio());
if (i == total_folio-1) {
m_diagrams_list.at(i)->border_and_titleblock.setNextFolioNum(QString());
}
}
else {
m_diagrams_list.at(i)->border_and_titleblock.setPreviousFolioNum(QString());
}
}
for (Diagram *d : m_diagrams_list) {
d->update();
} }
} }

View File

@ -444,6 +444,8 @@ QString TitleBlockTemplateCellWidget::defaultVariablesString() const {
"<li>%{folio} : numéro du folio</li>" "<li>%{folio} : numéro du folio</li>"
"<li>%{folio-id} : position du folio dans le projet</li>" "<li>%{folio-id} : position du folio dans le projet</li>"
"<li>%{folio-total} : nombre total de folios dans le projet</li>" "<li>%{folio-total} : nombre total de folios dans le projet</li>"
"<li>%{previous-folio-num} : numéro du folio précédent</li>"
"<li>%{next-folio-num} : numéro du folio suivant</li>"
"<li>%{projecttitle} : titre du projet</li>" "<li>%{projecttitle} : titre du projet</li>"
"<li>%{projectpath} : chemin du projet</li>" "<li>%{projectpath} : chemin du projet</li>"
"<li>%{projectfilename} : nom du fichier</li>" "<li>%{projectfilename} : nom du fichier</li>"

View File

@ -7,9 +7,9 @@
*/ */
TitleBlockTemplateRenderer::TitleBlockTemplateRenderer(QObject *parent) : TitleBlockTemplateRenderer::TitleBlockTemplateRenderer(QObject *parent) :
QObject(parent), QObject(parent),
titleblock_template_(nullptr), m_titleblock_template(nullptr),
use_cache_(true), m_use_cache(true),
last_known_titleblock_width_(-1) m_last_known_titleblock_width(-1)
{ {
} }
@ -23,35 +23,44 @@ TitleBlockTemplateRenderer::~TitleBlockTemplateRenderer() {
@return the titleblock template used for the rendering @return the titleblock template used for the rendering
*/ */
const TitleBlockTemplate *TitleBlockTemplateRenderer::titleBlockTemplate() const { const TitleBlockTemplate *TitleBlockTemplateRenderer::titleBlockTemplate() const {
return(titleblock_template_); return(m_titleblock_template);
} }
/** /**
@param titleblock_template TitleBlock template to render. @param titleblock_template TitleBlock template to render.
*/ */
void TitleBlockTemplateRenderer::setTitleBlockTemplate(const TitleBlockTemplate *titleblock_template) { void TitleBlockTemplateRenderer::setTitleBlockTemplate(const TitleBlockTemplate *titleblock_template) {
if (titleblock_template != titleblock_template_) { if (titleblock_template != m_titleblock_template) {
titleblock_template_ = titleblock_template; m_titleblock_template = titleblock_template;
invalidateRenderedTemplate(); invalidateRenderedTemplate();
} }
} }
/** /**
@param context Diagram Context to use when rendering the titleblock * @brief TitleBlockTemplateRenderer::setContext
* @param context : Context to use when rendering the titleblock
*/ */
void TitleBlockTemplateRenderer::setContext(const DiagramContext &context) { void TitleBlockTemplateRenderer::setContext(const DiagramContext &context) {
context_ = context; m_context = context;
invalidateRenderedTemplate(); invalidateRenderedTemplate();
} }
/**
* @brief TitleBlockTemplateRenderer::context
* @return the current diagram context use when render the titleblock
*/
DiagramContext TitleBlockTemplateRenderer::context() const {
return m_context;
}
/** /**
@return the height of the rendered template, or -1 if no template has been @return the height of the rendered template, or -1 if no template has been
set for this renderer. set for this renderer.
@see TitleBlockTemplate::height() @see TitleBlockTemplate::height()
*/ */
int TitleBlockTemplateRenderer::height() const { int TitleBlockTemplateRenderer::height() const {
if (!titleblock_template_) return(-1); if (!m_titleblock_template) return(-1);
return(titleblock_template_ -> height()); return(m_titleblock_template -> height());
} }
/** /**
@ -60,26 +69,26 @@ int TitleBlockTemplateRenderer::height() const {
@param titleblock_width The total width of the titleblock to render @param titleblock_width The total width of the titleblock to render
*/ */
void TitleBlockTemplateRenderer::render(QPainter *provided_painter, int titleblock_width) { void TitleBlockTemplateRenderer::render(QPainter *provided_painter, int titleblock_width) {
if (!titleblock_template_) return; if (!m_titleblock_template) return;
if (use_cache_) { if (m_use_cache) {
// Do we really need to calculate all this again? // Do we really need to calculate all this again?
if (titleblock_width != last_known_titleblock_width_ || rendered_template_.isNull()) { if (titleblock_width != m_last_known_titleblock_width || m_rendered_template.isNull()) {
renderToQPicture(titleblock_width); renderToQPicture(titleblock_width);
} }
provided_painter -> save(); provided_painter -> save();
rendered_template_.play(provided_painter); m_rendered_template.play(provided_painter);
provided_painter -> restore(); provided_painter -> restore();
} else { } else {
titleblock_template_ -> render(*provided_painter, context_, titleblock_width); m_titleblock_template -> render(*provided_painter, m_context, titleblock_width);
} }
} }
void TitleBlockTemplateRenderer::renderDxf(QRectF &title_block_rect, int titleblock_width, QString &file_path, int color) { void TitleBlockTemplateRenderer::renderDxf(QRectF &title_block_rect, int titleblock_width, QString &file_path, int color) {
if (!titleblock_template_) return; if (!m_titleblock_template) return;
titleblock_template_ -> renderDxf(title_block_rect, context_, titleblock_width, file_path, color); m_titleblock_template -> renderDxf(title_block_rect, m_context, titleblock_width, file_path, color);
} }
/** /**
@ -87,15 +96,15 @@ void TitleBlockTemplateRenderer::renderDxf(QRectF &title_block_rect, int titlebl
@param titleblock_width Width of the titleblock to render @param titleblock_width Width of the titleblock to render
*/ */
void TitleBlockTemplateRenderer::renderToQPicture(int titleblock_width) { void TitleBlockTemplateRenderer::renderToQPicture(int titleblock_width) {
if (!titleblock_template_) return; if (!m_titleblock_template) return;
// we render the template on our internal QPicture // we render the template on our internal QPicture
QPainter painter(&rendered_template_); QPainter painter(&m_rendered_template);
titleblock_template_ -> render(painter, context_, titleblock_width); m_titleblock_template -> render(painter, m_context, titleblock_width);
// memorize the last known width // memorize the last known width
last_known_titleblock_width_ = titleblock_width; m_last_known_titleblock_width = titleblock_width;
} }
/** /**
@ -103,7 +112,7 @@ void TitleBlockTemplateRenderer::renderToQPicture(int titleblock_width) {
QPicture. QPicture.
*/ */
void TitleBlockTemplateRenderer::invalidateRenderedTemplate() { void TitleBlockTemplateRenderer::invalidateRenderedTemplate() {
rendered_template_ = QPicture(); m_rendered_template = QPicture();
} }
/** /**
@ -111,7 +120,7 @@ void TitleBlockTemplateRenderer::invalidateRenderedTemplate() {
false otherwise. false otherwise.
*/ */
void TitleBlockTemplateRenderer::setUseCache(bool use_cache) { void TitleBlockTemplateRenderer::setUseCache(bool use_cache) {
use_cache_ = use_cache; m_use_cache = use_cache;
} }
/** /**
@ -119,6 +128,6 @@ void TitleBlockTemplateRenderer::setUseCache(bool use_cache) {
otherwise. otherwise.
*/ */
bool TitleBlockTemplateRenderer::useCache() const { bool TitleBlockTemplateRenderer::useCache() const {
return(use_cache_); return(m_use_cache);
} }

View File

@ -19,16 +19,23 @@
#define TITLEBLOCK_TEMPLATE_RENDERER_H #define TITLEBLOCK_TEMPLATE_RENDERER_H
#include <QPicture> #include <QPicture>
#include "diagramcontext.h" #include "diagramcontext.h"
class TitleBlockTemplate; class TitleBlockTemplate;
class TitleBlockTemplateRenderer : public QObject {
class TitleBlockTemplateRenderer : public QObject
{
Q_OBJECT Q_OBJECT
public: public:
TitleBlockTemplateRenderer(QObject * = nullptr); TitleBlockTemplateRenderer(QObject * = nullptr);
~TitleBlockTemplateRenderer() override; ~TitleBlockTemplateRenderer() override;
const TitleBlockTemplate *titleBlockTemplate() const; const TitleBlockTemplate *titleBlockTemplate() const;
void setTitleBlockTemplate(const TitleBlockTemplate *); void setTitleBlockTemplate(const TitleBlockTemplate *);
void setContext(const DiagramContext &context); void setContext(const DiagramContext &context);
DiagramContext context()const;
int height() const; int height() const;
void render(QPainter *, int); void render(QPainter *, int);
void renderDxf(QRectF &, int, QString &, int); void renderDxf(QRectF &, int, QString &, int);
@ -40,10 +47,10 @@ class TitleBlockTemplateRenderer : public QObject {
void renderToQPicture(int); void renderToQPicture(int);
private: private:
const TitleBlockTemplate *titleblock_template_; const TitleBlockTemplate *m_titleblock_template;
bool use_cache_; bool m_use_cache;
QPicture rendered_template_; QPicture m_rendered_template;
DiagramContext context_; DiagramContext m_context;
int last_known_titleblock_width_; int m_last_known_titleblock_width;
}; };
#endif #endif