2007-01-28 00:53:17 +00:00
|
|
|
#include "borderinset.h"
|
|
|
|
|
|
|
|
/**
|
|
|
|
Constructeur simple : construit une bordure de 15 colonnes de 50x500 avec
|
|
|
|
un cartouche de 400x50.
|
|
|
|
@param parent QObject parent de ce BorderInset
|
|
|
|
*/
|
|
|
|
BorderInset::BorderInset(QObject *parent) : QObject(parent) {
|
|
|
|
nb_columns = 15;
|
2007-03-03 23:35:14 +00:00
|
|
|
min_nb_columns = 3;
|
2007-01-28 00:53:17 +00:00
|
|
|
columns_width = 50.0;
|
|
|
|
columns_height = 500.0;
|
2007-10-12 12:54:25 +00:00
|
|
|
min_columns_height = 80.0;
|
2007-01-28 00:53:17 +00:00
|
|
|
inset_width = nb_columns * columns_width;
|
|
|
|
inset_height = 50.0;
|
|
|
|
columns_header_height = 20.0;
|
2007-02-01 01:07:26 +00:00
|
|
|
display_inset = true;
|
|
|
|
display_columns = true;
|
|
|
|
display_border = true;
|
2007-01-28 00:53:17 +00:00
|
|
|
updateRectangles();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Destructeur - ne fait rien
|
|
|
|
*/
|
|
|
|
BorderInset::~BorderInset() {
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Methode recalculant les rectangles composant le cadre et le cartouche en
|
|
|
|
fonction des attributs de taille
|
|
|
|
*/
|
|
|
|
void BorderInset::updateRectangles() {
|
|
|
|
// rectangle delimitant le schema
|
2007-09-28 21:02:53 +00:00
|
|
|
QRectF previous_border = border;
|
2007-01-28 00:53:17 +00:00
|
|
|
border = QRectF(0, 0, nb_columns * columns_width, columns_height);
|
2007-09-28 21:02:53 +00:00
|
|
|
if (border != previous_border) emit(borderChanged(previous_border, border));
|
2007-01-28 00:53:17 +00:00
|
|
|
|
|
|
|
// rectangles relatifs au cartouche
|
2007-02-03 02:00:18 +00:00
|
|
|
inset = QRectF(border.bottomLeft().x(), border.bottomLeft().y(), inset_width, inset_height);
|
2007-01-28 00:53:17 +00:00
|
|
|
inset_author = QRectF(inset.topLeft(), QSizeF(2.0 * inset_width / 9.0, 0.5 * inset_height));
|
|
|
|
inset_date = QRectF(inset_author.bottomLeft(), inset_author.size());
|
|
|
|
inset_title = QRectF(inset_author.topRight(), QSizeF(5.0 * inset_width / 9.0, inset_height));
|
|
|
|
inset_file = QRectF(inset_title.topRight(), inset_author.size());
|
|
|
|
inset_folio = QRectF(inset_file.bottomLeft(), inset_author.size());
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Dessine le cadre et le cartouche
|
|
|
|
@param qp QPainter a utiliser pour dessiner le cadre et le cartouche
|
|
|
|
@param x Abscisse du cadre
|
|
|
|
@param y Ordonnee du cadre
|
|
|
|
*/
|
|
|
|
void BorderInset::draw(QPainter *qp, qreal x, qreal y) {
|
|
|
|
// translate tous les rectangles
|
|
|
|
border .translate(x, y);
|
|
|
|
inset .translate(x, y);
|
|
|
|
inset_author.translate(x, y);
|
|
|
|
inset_date .translate(x, y);
|
|
|
|
inset_title .translate(x, y);
|
|
|
|
inset_file .translate(x, y);
|
|
|
|
inset_folio .translate(x, y);
|
|
|
|
|
|
|
|
// prepare le QPainter
|
|
|
|
qp -> save();
|
|
|
|
qp -> setPen(Qt::black);
|
|
|
|
qp -> setBrush(Qt::NoBrush);
|
|
|
|
|
|
|
|
// dessine le cadre
|
2007-02-01 01:07:26 +00:00
|
|
|
if (display_border) qp -> drawRect(border);
|
2007-01-28 00:53:17 +00:00
|
|
|
|
|
|
|
// dessine la numerotation des colonnes
|
2007-02-01 01:07:26 +00:00
|
|
|
if (display_columns) {
|
|
|
|
qp -> setBrush(Qt::white);
|
|
|
|
for (int i = 1 ; i <= nb_columns ; ++ i) {
|
|
|
|
QRectF numbered_rectangle = QRectF(
|
|
|
|
border.topLeft().x() + ((i - 1) * columns_width),
|
|
|
|
border.topLeft().y(),
|
|
|
|
columns_width,
|
|
|
|
columns_header_height
|
|
|
|
);
|
|
|
|
qp -> drawRect(numbered_rectangle);
|
|
|
|
qp -> drawText(numbered_rectangle, Qt::AlignVCenter | Qt::AlignCenter, QString("%1").arg(i));
|
|
|
|
}
|
2007-01-28 00:53:17 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// dessine le cartouche
|
2007-02-01 01:07:26 +00:00
|
|
|
if (display_inset) {
|
2007-09-29 09:52:35 +00:00
|
|
|
qp -> setBrush(Qt::white);
|
2007-02-01 01:07:26 +00:00
|
|
|
qp -> drawRect(inset);
|
|
|
|
|
|
|
|
qp -> drawRect(inset_author);
|
|
|
|
qp -> drawText(inset_author, Qt::AlignVCenter | Qt::AlignLeft, tr(" Auteur : ") + bi_author);
|
|
|
|
|
|
|
|
qp -> drawRect(inset_date);
|
2007-02-02 17:40:07 +00:00
|
|
|
qp -> drawText(inset_date, Qt::AlignVCenter | Qt::AlignLeft, tr(" Date : ") + bi_date.toString("dd/MM/yyyy"));
|
2007-02-01 01:07:26 +00:00
|
|
|
|
|
|
|
qp -> drawRect(inset_title);
|
2007-09-04 18:15:41 +00:00
|
|
|
qp -> drawText(inset_title, Qt::AlignVCenter | Qt::AlignCenter, tr("Titre du document : ") + bi_title);
|
2007-02-01 01:07:26 +00:00
|
|
|
|
|
|
|
qp -> drawRect(inset_file);
|
|
|
|
qp -> drawText(inset_file, Qt::AlignVCenter | Qt::AlignLeft, tr(" Fichier : ") + bi_filename);
|
|
|
|
|
|
|
|
qp -> drawRect(inset_folio);
|
|
|
|
qp -> drawText(inset_folio, Qt::AlignVCenter | Qt::AlignLeft, tr(" Folio : ") + bi_folio);
|
|
|
|
}
|
2007-02-02 17:40:07 +00:00
|
|
|
|
|
|
|
qp -> restore();
|
|
|
|
|
2007-01-28 00:53:17 +00:00
|
|
|
// annule la translation des rectangles
|
|
|
|
border .translate(-x, -y);
|
|
|
|
inset .translate(-x, -y);
|
|
|
|
inset_author.translate(-x, -y);
|
|
|
|
inset_date .translate(-x, -y);
|
|
|
|
inset_title .translate(-x, -y);
|
|
|
|
inset_file .translate(-x, -y);
|
|
|
|
inset_folio .translate(-x, -y);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Ajoute une colonne.
|
|
|
|
*/
|
|
|
|
void BorderInset::addColumn() {
|
|
|
|
++ nb_columns;
|
2007-02-03 02:00:18 +00:00
|
|
|
setInsetWidth(nb_columns * columns_width);
|
2007-01-28 00:53:17 +00:00
|
|
|
updateRectangles();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Enleve une colonne. Il doit rester au moins 3 colonnes.
|
|
|
|
*/
|
|
|
|
void BorderInset::removeColumn() {
|
2007-03-03 23:35:14 +00:00
|
|
|
if (nb_columns == min_nb_columns) return;
|
2007-01-28 00:53:17 +00:00
|
|
|
-- nb_columns;
|
2007-02-03 02:00:18 +00:00
|
|
|
setInsetWidth(nb_columns * columns_width);
|
2007-01-28 00:53:17 +00:00
|
|
|
updateRectangles();
|
|
|
|
}
|
|
|
|
|
2007-04-09 02:56:47 +00:00
|
|
|
/**
|
|
|
|
Permet de changer le nombre de colonnes.
|
|
|
|
Si ce nombre de colonnes est inferieur au minimum requis, cette fonction ne
|
|
|
|
fait rien
|
|
|
|
@param nb_c nouveau nombre de colonnes
|
|
|
|
@see minNbColumns()
|
|
|
|
*/
|
2007-02-28 20:48:11 +00:00
|
|
|
void BorderInset::setNbColumns(int nb_c) {
|
2007-03-03 23:35:14 +00:00
|
|
|
if (nb_c < min_nb_columns) return;
|
2007-02-28 20:48:11 +00:00
|
|
|
nb_columns = nb_c;
|
|
|
|
setInsetWidth(nb_columns * columns_width);
|
|
|
|
updateRectangles();
|
|
|
|
}
|
|
|
|
|
2007-01-28 00:53:17 +00:00
|
|
|
/**
|
|
|
|
Change la largeur des colonnes ; celle-ci doit rester comprise entre 10 et
|
|
|
|
200px.
|
|
|
|
*/
|
|
|
|
void BorderInset::setColumnsWidth(const qreal &new_cw) {
|
2007-10-10 17:50:26 +00:00
|
|
|
columns_width = qBound(10.0, new_cw, 200.0);
|
2007-01-28 00:53:17 +00:00
|
|
|
updateRectangles();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Change la hauteur des en-tetes contenant les numeros de colonnes. Celle-ci
|
|
|
|
doit rester comprise entre 5 et 50 px.
|
|
|
|
*/
|
|
|
|
void BorderInset::setColumnsHeaderHeight(const qreal &new_chh) {
|
2007-10-10 17:50:26 +00:00
|
|
|
columns_header_height = qBound(5.0, new_chh, 50.0);
|
2007-01-28 00:53:17 +00:00
|
|
|
updateRectangles();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Change la hauteur des colonnes (et donc du cadre). Cette hauteur doit
|
2007-02-03 02:00:18 +00:00
|
|
|
rester superieure a la hauteur des en-tetes de colonnes + 20px.
|
2007-01-28 00:53:17 +00:00
|
|
|
*/
|
|
|
|
void BorderInset::setColumnsHeight(const qreal &new_ch) {
|
2007-03-03 23:35:14 +00:00
|
|
|
columns_height = qMax(columns_header_height + min_columns_height, new_ch);
|
2007-01-28 00:53:17 +00:00
|
|
|
updateRectangles();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Change la largeur du cartouche. Cette largeur doit rester comprise entre
|
|
|
|
100px et la largeur du cartouche
|
|
|
|
*/
|
|
|
|
void BorderInset::setInsetWidth(const qreal &new_iw) {
|
|
|
|
inset_width = qMax(100.0, qMin(nb_columns * columns_width, new_iw));
|
|
|
|
updateRectangles();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Change la hauteur du cartouche. Cette largeur doit rester comprise entre
|
|
|
|
20px et la hauteur du cartouche.
|
|
|
|
*/
|
|
|
|
void BorderInset::setInsetHeight(const qreal &new_ih) {
|
|
|
|
inset_height = qMax(20.0, qMin(columns_height, new_ih));
|
|
|
|
updateRectangles();
|
|
|
|
}
|
2007-10-12 12:54:25 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
Ajuste la largeur du cartouche de facon a ce que celui-ci soit aussi large
|
|
|
|
que le schema
|
|
|
|
*/
|
|
|
|
void BorderInset::adjustInsetToColumns() {
|
|
|
|
setInsetWidth(nbColumn() * columnsWidth());
|
|
|
|
}
|