mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2025-12-17 20:50:34 +01:00
List of Drawings: DXF export added and multple sheets for large project added.
Pending work: - folio string to be formatted correctly. - thorough testing to be done because lot of changes to addDiagram / removeDiagram had to be done to add the feature of multiple folio list sheets git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@2836 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
@@ -18,6 +18,33 @@
|
||||
#include "diagramfoliolist.h"
|
||||
#include <QPainter>
|
||||
|
||||
int DiagramFolioList::folioList_quantity = 0;
|
||||
qreal DiagramFolioList::colWidths[4] = {0.1, 0.55, 0.2, 0.15};
|
||||
|
||||
DiagramFolioList::DiagramFolioList(QObject *parent) : Diagram(parent)
|
||||
{
|
||||
list_lines_.clear();
|
||||
list_rectangles_.clear();
|
||||
|
||||
id = folioList_quantity;
|
||||
folioList_quantity++;
|
||||
|
||||
qreal width = border_and_titleblock.columnsTotalWidth();
|
||||
qreal height = border_and_titleblock.rowsTotalHeight();
|
||||
|
||||
//top left corner of drawable area
|
||||
qreal x0 = border_and_titleblock.rowsHeaderWidth();
|
||||
qreal y0 = border_and_titleblock.columnsHeaderHeight();
|
||||
QRectF row_RectF(x0, y0, width, height);
|
||||
|
||||
buildGrid(row_RectF,30,2,colWidths);
|
||||
}
|
||||
|
||||
DiagramFolioList::~DiagramFolioList()
|
||||
{
|
||||
if (folioList_quantity > 0)
|
||||
folioList_quantity--;
|
||||
}
|
||||
|
||||
void DiagramFolioList::drawBackground(QPainter *p, const QRectF &r)
|
||||
{
|
||||
@@ -30,37 +57,51 @@ void DiagramFolioList::drawBackground(QPainter *p, const QRectF &r)
|
||||
|
||||
// dessine un fond blanc
|
||||
p -> setPen(Qt::NoPen);
|
||||
//set brush color to present background color.
|
||||
p -> setBrush(Diagram::background_color);
|
||||
p -> drawRect(r);
|
||||
|
||||
p -> setPen(Qt::black);
|
||||
qreal width = border_and_titleblock.columnsTotalWidth();
|
||||
qreal height = border_and_titleblock.rowsTotalHeight();
|
||||
|
||||
QList<Diagram *> diagram_list = project() -> diagrams();
|
||||
|
||||
//top left corner of drawable area
|
||||
qreal x0 = border_and_titleblock.rowsHeaderWidth();
|
||||
qreal y0 = border_and_titleblock.columnsHeaderHeight();
|
||||
qreal drawings_quantity = diagram_list.size();
|
||||
qreal rowHeight = height / (drawings_quantity+1) * 0.8;
|
||||
rowHeight = (rowHeight > height*0.05) ? height*0.05 : rowHeight;
|
||||
QRectF row_RectF(x0 + width*.1, y0 + height*.05, width*0.8, rowHeight);
|
||||
|
||||
QString authorTranslatable = tr("Auteur");
|
||||
QString titleTranslatable = tr("Titre");
|
||||
QString folioTranslatable = tr("Folio");
|
||||
QString dateTranslatable = tr("Date");
|
||||
|
||||
qreal x0 = list_rectangles_[0] -> topLeft().x();
|
||||
qreal y0 = list_rectangles_[0] -> topLeft().y();
|
||||
qreal rowHeight = (list_rectangles_[0] -> height())/30;
|
||||
QRectF row_RectF(x0, y0, list_rectangles_[0] -> width(), rowHeight);
|
||||
|
||||
fillRow(p, row_RectF, authorTranslatable, titleTranslatable, folioTranslatable, dateTranslatable);
|
||||
foreach (Diagram *diagram, diagram_list) {
|
||||
QList<Diagram *> diagram_list = project() -> diagrams();
|
||||
|
||||
int startDiagram = id * 58;
|
||||
|
||||
for (int i = startDiagram; i < startDiagram+29 && i < diagram_list.size(); ++i) {
|
||||
y0 += rowHeight;
|
||||
QRectF row_rect(x0 + width*.1, y0 + height*.05, width*0.8, rowHeight);
|
||||
fillRow(p, row_rect, diagram -> border_and_titleblock.author(), diagram -> border_and_titleblock.title(),
|
||||
diagram -> border_and_titleblock.folio(), diagram -> border_and_titleblock.date().toString("dd/MM/yyyy"));
|
||||
QRectF row_rect(x0, y0, list_rectangles_[0] -> width(), rowHeight);
|
||||
fillRow(p, row_rect, diagram_list[i] -> border_and_titleblock.author(),
|
||||
diagram_list[i] -> border_and_titleblock.title(),
|
||||
diagram_list[i] -> border_and_titleblock.folio(),
|
||||
diagram_list[i] -> border_and_titleblock.date().toString("dd/MM/yyyy"));
|
||||
}
|
||||
p -> setPen(Qt::NoPen);
|
||||
|
||||
x0 = list_rectangles_[1] -> topLeft().x();
|
||||
y0 = list_rectangles_[1] -> topLeft().y();
|
||||
rowHeight = (list_rectangles_[1] -> height())/30;
|
||||
QRectF row_RectF2(x0, y0, list_rectangles_[1] -> width(), rowHeight);
|
||||
fillRow(p, row_RectF2, authorTranslatable, titleTranslatable, folioTranslatable, dateTranslatable);
|
||||
|
||||
startDiagram += 29;
|
||||
|
||||
for (int i = startDiagram; i < startDiagram+29 && i < diagram_list.size(); ++i) {
|
||||
y0 += rowHeight;
|
||||
QRectF row_rect(x0, y0, list_rectangles_[1] -> width(), rowHeight);
|
||||
fillRow(p, row_rect, diagram_list[i] -> border_and_titleblock.author(),
|
||||
diagram_list[i] -> border_and_titleblock.title(),
|
||||
diagram_list[i] -> border_and_titleblock.folio(),
|
||||
diagram_list[i] -> border_and_titleblock.date().toString("dd/MM/yyyy"));
|
||||
}
|
||||
|
||||
border_and_titleblock.draw(p, margin, margin);
|
||||
p -> restore();
|
||||
}
|
||||
@@ -68,16 +109,54 @@ void DiagramFolioList::drawBackground(QPainter *p, const QRectF &r)
|
||||
void DiagramFolioList::fillRow(QPainter *qp, const QRectF &row_rect, QString author, QString title,
|
||||
QString folio, QString date)
|
||||
{
|
||||
qp -> drawRect(row_rect);
|
||||
qreal x = row_rect.topLeft().x();
|
||||
qreal y = row_rect.topLeft().y();
|
||||
qreal column_width = row_rect.width() / 4;
|
||||
|
||||
qp -> drawText(QRectF(x, y, column_width, row_rect.height()), Qt::AlignCenter, folio);
|
||||
qp -> drawText(QRectF(x + column_width, y, column_width, row_rect.height()), Qt::AlignCenter, title);
|
||||
qp -> drawText(QRectF(x + 2*column_width, y, column_width, row_rect.height()), Qt::AlignCenter, author);
|
||||
qp -> drawText(QRectF(x + 3*column_width, y, column_width, row_rect.height()), Qt::AlignCenter, date);
|
||||
qp -> drawText(QRectF(x, y, colWidths[0]*row_rect.width(), row_rect.height()), Qt::AlignCenter, folio);
|
||||
x += colWidths[0]*row_rect.width();
|
||||
|
||||
for (int i = 1; i <= 3; i++ )
|
||||
qp -> drawLine(x + i*column_width, y, x + i*column_width, y + row_rect.height());
|
||||
qp -> drawText(QRectF(x, y, colWidths[1]*row_rect.width(), row_rect.height()), Qt::AlignCenter, title);
|
||||
x += colWidths[1]*row_rect.width();
|
||||
|
||||
qp -> drawText(QRectF(x, y, colWidths[2]*row_rect.width(), row_rect.height()), Qt::AlignCenter, author);
|
||||
x += colWidths[2]*row_rect.width();
|
||||
|
||||
qp -> drawText(QRectF(x, y, colWidths[3]*row_rect.width(), row_rect.height()), Qt::AlignCenter, date);
|
||||
}
|
||||
|
||||
void DiagramFolioList::buildGrid(const QRectF &rect, int rows, int tables, qreal colWidths[])
|
||||
{
|
||||
qreal sum = 0;
|
||||
for (int i = 0; i < 4; i++ )
|
||||
sum += colWidths[i];
|
||||
if ( sum < 0.99 || sum > 1.01 ) {
|
||||
qDebug() << "Invalid input: Column widths do not sum to 1";
|
||||
return;
|
||||
}
|
||||
|
||||
qreal tablesSpacing = rect.height() * 0.02;
|
||||
qreal tableWidth = (rect.width() - tablesSpacing*(tables+1) ) / tables;
|
||||
qreal rowHeight = (rect.height() - 2*tablesSpacing) / rows;
|
||||
int cols = 4;//colWidths.size();
|
||||
|
||||
qreal x0 = tablesSpacing + rect.topLeft().x();
|
||||
qreal y0 = tablesSpacing + rect.topLeft().y();
|
||||
|
||||
for (int i = 0; i < tables; ++i) {
|
||||
QRectF *tableRect = new QRectF(x0, y0, tableWidth, rect.height() - 2*tablesSpacing);
|
||||
addRect(*tableRect);
|
||||
list_rectangles_.push_back(tableRect);
|
||||
for (int j = 1; j < rows; ++j) {
|
||||
QLineF *line = new QLineF(x0, y0 + j*rowHeight, x0 + tableWidth,y0 + j*rowHeight);
|
||||
addLine(*line);
|
||||
list_lines_.push_back(line);
|
||||
}
|
||||
for (int j = 0; j < cols-1; ++j) {
|
||||
QLineF *line = new QLineF(x0 + colWidths[j]*tableWidth, y0, x0 + colWidths[j]*tableWidth,y0 + rows*rowHeight);
|
||||
addLine(*line);
|
||||
list_lines_.push_back(line);
|
||||
x0 += colWidths[j]*tableWidth;
|
||||
}
|
||||
x0 += colWidths[cols-1]*tableWidth + tablesSpacing;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user