diff --git a/sources/bordertitleblock.cpp b/sources/bordertitleblock.cpp index 5cc110866..55e64304e 100644 --- a/sources/bordertitleblock.cpp +++ b/sources/bordertitleblock.cpp @@ -696,6 +696,45 @@ DiagramPosition BorderTitleBlock::convertPosition(const QPointF &pos) 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 DiagramContext object. @@ -723,6 +762,8 @@ void BorderTitleBlock::updateDiagramContextForTitleBlock(const DiagramContext &i context.addValue("folio-id", folio_index_); context.addValue("folio-total", folio_total_); 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); } @@ -769,3 +810,75 @@ void BorderTitleBlock::setFolioData(int index, int total, const QString& autonum 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); +} diff --git a/sources/bordertitleblock.h b/sources/bordertitleblock.h index 71a4130f1..4c2ac8a58 100644 --- a/sources/bordertitleblock.h +++ b/sources/bordertitleblock.h @@ -86,149 +86,131 @@ class BorderTitleBlock : public QObject QRectF outsideBorderRect() const; QRectF insideBorderRect() const; - // methods to get title block basic data - /// @return the value of the title block "Author" field - QString author() const { return(btb_author_); } - /// @return the value of the title block "Date" field - QDate date() const { return(btb_date_); } - /// @return the value of the title block "Title" field - QString title() const { return(btb_title_); } - /// @return the value of the title block "Folio" field - QString folio() const { return(btb_folio_); } - /// @return the value of the title block "Folio" field as displayed - QString finalfolio() const { return(btb_final_folio_); } - /// @return the value of the title block "Plant" field - QString plant() const { return(btb_plant_); } - /// @return the value of the title block "Locmach" field - QString locmach() const { return(btb_locmach_); } - /// @return the value of the revision index block "Folio" field - QString indexrev() const { return(btb_indexrev_); } - - /// @return the value of the title block "File" field - QString fileName() const { return(btb_filename_); } - /// @return the value of the title block Additional Fields - QString version() const { return(btb_version_); } - /// @return the value of the title block Additional Fields - DiagramContext additionalFields() const { return (additional_fields_); } - /// @return the value of the title block - QString autoPageNum() const { return(btb_auto_page_num_); } - /// @return the value of the total number of folios - int folioTotal() const { return(folio_total_);} - - // methods to get display options - /// @return true si le cartouche est affiche, false sinon - bool titleBlockIsDisplayed() const { return(display_titleblock_); } - /// @return true si les entetes des colonnes sont affiches, false sinon - bool columnsAreDisplayed() const { return(display_columns_); } - /// @return true si les entetes des lignes sont affiches, false sinon - bool rowsAreDisplayed() const { return(display_rows_); } - /// @return true si la bordure est affichee, false sinon - bool borderIsDisplayed() const { return(display_border_); } - - // methods to set dimensions - void setColumnsCount(int); - void setRowsCount(int); - void setColumnsWidth(const qreal &); - void setRowsHeight(const qreal &); - void setColumnsHeaderHeight(const qreal &); - void setRowsHeaderWidth(const qreal &); - void setDiagramHeight(const qreal &); - - DiagramPosition convertPosition(const QPointF &); - - // methods to set title block basic data - /// @param author the new value of the "Author" field - void setAuthor(const QString &author) { btb_author_ = author; } - /// @param author the new value of the "Date" field - void setDate(const QDate &date) { btb_date_ = date; } - /// @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()); - /// @param author the new value of the "File" field - void setPlant(const QString &plant) { btb_plant_ = plant; } - void setLocMach(const QString &locmach) { btb_locmach_ = locmach; } - void setIndicerev(const QString &indexrev){ btb_indexrev_ = indexrev; } - void setFileName(const QString &filename) { btb_filename_ = filename; } - /// @param author the new value of the "Version" field - void setVersion(const QString &version) { btb_version_ = version; } - /// @param author the new value of the "Auto Page Num" field - void setAutoPageNum(const QString &auto_page_num) { btb_auto_page_num_ = auto_page_num;} - - void titleBlockToXml(QDomElement &); - void titleBlockFromXml(const QDomElement &); - void borderToXml(QDomElement &); - void borderFromXml(const QDomElement &); - - TitleBlockProperties exportTitleBlock(); - void importTitleBlock(const TitleBlockProperties &); - BorderProperties exportBorder(); - void importBorder(const BorderProperties &); - - const TitleBlockTemplate *titleBlockTemplate(); - void setTitleBlockTemplate(const TitleBlockTemplate *); - QString titleBlockTemplateName() const; + // methods to get title block basic data + /// @return the value of the title block "Author" field + QString author() const { return(btb_author_); } + /// @return the value of the title block "Date" field + QDate date() const { return(btb_date_); } + /// @return the value of the title block "Title" field + QString title() const { return(btb_title_); } + /// @return the value of the title block "Folio" field + QString folio() const { return(btb_folio_); } + /// @return the value of the title block "Folio" field as displayed + QString finalfolio() const { return(btb_final_folio_); } + /// @return the value of the title block "Plant" field + QString plant() const { return(btb_plant_); } + /// @return the value of the title block "Locmach" field + QString locmach() const { return(btb_locmach_); } + /// @return the value of the revision index block "Folio" field + QString indexrev() const { return(btb_indexrev_); } + /// @return the value of the title block "File" field + QString fileName() const { return(btb_filename_); } + /// @return the value of the title block Additional Fields + QString version() const { return(btb_version_); } + /// @return the value of the title block Additional Fields + DiagramContext additionalFields() const { return (additional_fields_); } + /// @return the value of the title block + QString autoPageNum() const { return(btb_auto_page_num_); } + /// @return the value of the total number of folios + int folioTotal() const { return(folio_total_);} + // methods to get display options + /// @return true si le cartouche est affiche, false sinon + bool titleBlockIsDisplayed() const { return(display_titleblock_); } + /// @return true si les entetes des colonnes sont affiches, false sinon + bool columnsAreDisplayed() const { return(display_columns_); } + /// @return true si les entetes des lignes sont affiches, false sinon + bool rowsAreDisplayed() const { return(display_rows_); } + /// @return true si la bordure est affichee, false sinon + bool borderIsDisplayed() const { return(display_border_); } + + // methods to set dimensions + void setColumnsCount(int); + void setRowsCount(int); + void setColumnsWidth(const qreal &); + void setRowsHeight(const qreal &); + void setColumnsHeaderHeight(const qreal &); + void setRowsHeaderWidth(const qreal &); + void setDiagramHeight(const qreal &); + + DiagramPosition convertPosition(const QPointF &); + + // methods to set title block basic data + void setAuthor(const QString &author); + void setDate(const QDate &date); + void setTitle(const QString &title); + void setFolio(const QString &folio); + void setFolioData(int, int, const QString& = nullptr, const DiagramContext & = DiagramContext()); + void setPlant(const QString &plant); + void setLocMach(const QString &locmach); + void setIndicerev(const QString &indexrev); + void setFileName(const QString &filename); + void setVersion(const QString &version); + void setAutoPageNum(const QString &auto_page_num); + void setPreviousFolioNum(const QString &previous); + void setNextFolioNum(const QString &next); + + void titleBlockToXml(QDomElement &); + void titleBlockFromXml(const QDomElement &); + void borderToXml(QDomElement &); + void borderFromXml(const QDomElement &); + + TitleBlockProperties exportTitleBlock(); + void importTitleBlock(const TitleBlockProperties &); + BorderProperties exportBorder(); + void importBorder(const BorderProperties &); + + const TitleBlockTemplate *titleBlockTemplate(); + void setTitleBlockTemplate(const TitleBlockTemplate *); + QString titleBlockTemplateName() const; + public slots: - void titleBlockTemplateChanged(const QString &); - void titleBlockTemplateRemoved(const QString &, const TitleBlockTemplate * = nullptr); - - // methods to set display options - void displayTitleBlock(bool); - void displayColumns(bool); - void displayRows(bool); - void displayBorder(bool); - void slot_setAutoPageNum (QString); + void titleBlockTemplateChanged(const QString &); + void titleBlockTemplateRemoved(const QString &, const TitleBlockTemplate * = nullptr); + + // methods to set display options + void displayTitleBlock(bool); + void displayColumns(bool); + void displayRows(bool); + void displayBorder(bool); + void slot_setAutoPageNum (QString); private: - void updateRectangles(); - void updateDiagramContextForTitleBlock(const DiagramContext & = DiagramContext()); - QString incrementLetters(const QString &); + void updateRectangles(); + void updateDiagramContextForTitleBlock(const DiagramContext & = DiagramContext()); + QString incrementLetters(const QString &); - signals: - /** - Signal emitted after the border has changed - @param old_border Former border - @param new_border New border - */ - void borderChanged(QRectF old_border, QRectF new_border); - /** - Signal emitted after display options have changed - */ - void displayChanged(); - - /** - Signal emitted after the title has changed - */ - void diagramTitleChanged(const QString &); - - /** - @brief titleBlockFolioChanged - Signal emitted after Folio has changed - */ - void titleBlockFolioChanged(const QString &); - - /** - Signal emitted when the title block requires its data to be updated in order - to generate the folio field. - */ - void needFolioData(); - - /** - 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 - its parent project. - */ - void needTitleBlockTemplate(const QString &); + signals: + /** + Signal emitted after the border has changed + @param old_border Former border + @param new_border New border + */ + void borderChanged(QRectF old_border, QRectF new_border); + /** + Signal emitted after display options have changed + */ + void displayChanged(); + /** + Signal emitted after the title has changed + */ + void diagramTitleChanged(const QString &); + /** + @brief titleBlockFolioChanged + Signal emitted after Folio has changed + */ + void titleBlockFolioChanged(const QString &); + /** + Signal emitted when the title block requires its data to be updated in order + to generate the folio field. + */ + void needFolioData(); + /** + 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 + its parent project. + */ + void needTitleBlockTemplate(const QString &); // attributes private: @@ -248,25 +230,27 @@ class BorderTitleBlock : public QObject QString btb_version_; DiagramContext additional_fields_; Qt::Edge m_edge; + QString m_next_folio_num, + m_previous_folio_num; - // border dimensions (rows and columns) - // columns: number and dimensions + // border dimensions (rows and columns) + // columns: number and dimensions int columns_count_; qreal columns_width_; qreal columns_header_height_; - // rows: number and dimensions + // rows: number and dimensions int rows_count_; qreal rows_height_; qreal rows_header_width_; - // title block dimensions + // title block dimensions qreal titleblock_height_; - // rectangles used for drawing operations + // rectangles used for drawing operations QRectF diagram_rect_; - // display options + // display options bool display_titleblock_; bool display_columns_; bool display_rows_; diff --git a/sources/qetproject.cpp b/sources/qetproject.cpp index b9220a714..4c979f156 100644 --- a/sources/qetproject.cpp +++ b/sources/qetproject.cpp @@ -1744,7 +1744,8 @@ bool QETProject::projectWasModified() { Indique a chaque schema du projet quel est son numero de folio et combien de folio le projet contient. */ -void QETProject::updateDiagramsFolioData() { +void QETProject::updateDiagramsFolioData() +{ int total_folio = m_diagrams_list.count(); DiagramContext project_wide_properties = project_properties_; @@ -1752,19 +1753,38 @@ void QETProject::updateDiagramsFolioData() { project_wide_properties.addValue("projectpath", filePath()); project_wide_properties.addValue("projectfilename", QFileInfo(filePath()).baseName()); - for (int i = 0 ; i < total_folio ; ++ i) { - QString title = m_diagrams_list[i] -> title(); + for (int i = 0 ; i < total_folio ; ++ i) + { QString autopagenum = m_diagrams_list[i]->border_and_titleblock.autoPageNum(); NumerotationContext nC = folioAutoNum(autopagenum); 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]->project()->addFolioAutoNum(autopagenum,nCC.next()); } - else{ - m_diagrams_list[i] -> border_and_titleblock.setFolioData(i + 1, total_folio, nullptr, project_wide_properties); + else { + 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(); } } diff --git a/sources/titleblock/templatecellwidget.cpp b/sources/titleblock/templatecellwidget.cpp index 26a7b45ed..d587362eb 100644 --- a/sources/titleblock/templatecellwidget.cpp +++ b/sources/titleblock/templatecellwidget.cpp @@ -444,6 +444,8 @@ QString TitleBlockTemplateCellWidget::defaultVariablesString() const { "
  • %{folio} : numéro du folio
  • " "
  • %{folio-id} : position du folio dans le projet
  • " "
  • %{folio-total} : nombre total de folios dans le projet
  • " + "
  • %{previous-folio-num} : numéro du folio précédent
  • " + "
  • %{next-folio-num} : numéro du folio suivant
  • " "
  • %{projecttitle} : titre du projet
  • " "
  • %{projectpath} : chemin du projet
  • " "
  • %{projectfilename} : nom du fichier
  • " diff --git a/sources/titleblocktemplaterenderer.cpp b/sources/titleblocktemplaterenderer.cpp index ed55356e8..29056402c 100644 --- a/sources/titleblocktemplaterenderer.cpp +++ b/sources/titleblocktemplaterenderer.cpp @@ -7,9 +7,9 @@ */ TitleBlockTemplateRenderer::TitleBlockTemplateRenderer(QObject *parent) : QObject(parent), - titleblock_template_(nullptr), - use_cache_(true), - last_known_titleblock_width_(-1) + m_titleblock_template(nullptr), + m_use_cache(true), + m_last_known_titleblock_width(-1) { } @@ -23,35 +23,44 @@ TitleBlockTemplateRenderer::~TitleBlockTemplateRenderer() { @return the titleblock template used for the rendering */ const TitleBlockTemplate *TitleBlockTemplateRenderer::titleBlockTemplate() const { - return(titleblock_template_); + return(m_titleblock_template); } /** @param titleblock_template TitleBlock template to render. */ void TitleBlockTemplateRenderer::setTitleBlockTemplate(const TitleBlockTemplate *titleblock_template) { - if (titleblock_template != titleblock_template_) { - titleblock_template_ = titleblock_template; + if (titleblock_template != m_titleblock_template) { + m_titleblock_template = titleblock_template; 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) { - context_ = context; + m_context = context; 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 set for this renderer. @see TitleBlockTemplate::height() */ int TitleBlockTemplateRenderer::height() const { - if (!titleblock_template_) return(-1); - return(titleblock_template_ -> height()); + if (!m_titleblock_template) return(-1); + return(m_titleblock_template -> height()); } /** @@ -60,26 +69,26 @@ int TitleBlockTemplateRenderer::height() const { @param titleblock_width The total width of the titleblock to render */ 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? - 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); } provided_painter -> save(); - rendered_template_.play(provided_painter); + m_rendered_template.play(provided_painter); provided_painter -> restore(); } 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) { - if (!titleblock_template_) return; - titleblock_template_ -> renderDxf(title_block_rect, context_, titleblock_width, file_path, color); + if (!m_titleblock_template) return; + 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 */ void TitleBlockTemplateRenderer::renderToQPicture(int titleblock_width) { - if (!titleblock_template_) return; + if (!m_titleblock_template) return; // 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 - last_known_titleblock_width_ = titleblock_width; + m_last_known_titleblock_width = titleblock_width; } /** @@ -103,7 +112,7 @@ void TitleBlockTemplateRenderer::renderToQPicture(int titleblock_width) { QPicture. */ void TitleBlockTemplateRenderer::invalidateRenderedTemplate() { - rendered_template_ = QPicture(); + m_rendered_template = QPicture(); } /** @@ -111,7 +120,7 @@ void TitleBlockTemplateRenderer::invalidateRenderedTemplate() { false otherwise. */ 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. */ bool TitleBlockTemplateRenderer::useCache() const { - return(use_cache_); + return(m_use_cache); } diff --git a/sources/titleblocktemplaterenderer.h b/sources/titleblocktemplaterenderer.h index 90183d84d..a60eee1ef 100644 --- a/sources/titleblocktemplaterenderer.h +++ b/sources/titleblocktemplaterenderer.h @@ -19,31 +19,38 @@ #define TITLEBLOCK_TEMPLATE_RENDERER_H #include #include "diagramcontext.h" + class TitleBlockTemplate; -class TitleBlockTemplateRenderer : public QObject { + +class TitleBlockTemplateRenderer : public QObject +{ Q_OBJECT public: - TitleBlockTemplateRenderer(QObject * = nullptr); - ~TitleBlockTemplateRenderer() override; - const TitleBlockTemplate *titleBlockTemplate() const; - void setTitleBlockTemplate(const TitleBlockTemplate *); - void setContext(const DiagramContext &context); - int height() const; - void render(QPainter *, int); - void renderDxf(QRectF &, int, QString &, int); - void invalidateRenderedTemplate(); - void setUseCache(bool); - bool useCache() const; + TitleBlockTemplateRenderer(QObject * = nullptr); + ~TitleBlockTemplateRenderer() override; + + const TitleBlockTemplate *titleBlockTemplate() const; + void setTitleBlockTemplate(const TitleBlockTemplate *); + + void setContext(const DiagramContext &context); + DiagramContext context()const; + + int height() const; + void render(QPainter *, int); + void renderDxf(QRectF &, int, QString &, int); + void invalidateRenderedTemplate(); + void setUseCache(bool); + bool useCache() const; private: - void renderToQPicture(int); + void renderToQPicture(int); private: - const TitleBlockTemplate *titleblock_template_; - bool use_cache_; - QPicture rendered_template_; - DiagramContext context_; - int last_known_titleblock_width_; + const TitleBlockTemplate *m_titleblock_template; + bool m_use_cache; + QPicture m_rendered_template; + DiagramContext m_context; + int m_last_known_titleblock_width; }; #endif