mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2025-09-13 20:23:04 +02:00
Added an "hadjust" XML attribute to title block cells, allowing too long texts to be reduced until they fit the cell.
git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/branches/0.3@1150 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
parent
1cbbe67520
commit
a3b1ac7b74
File diff suppressed because one or more lines are too long
@ -476,19 +476,20 @@ bool QETApp::closeEveryEditor() {
|
|||||||
La famille "Sans Serif" est utilisee par defaut mais peut etre surchargee
|
La famille "Sans Serif" est utilisee par defaut mais peut etre surchargee
|
||||||
dans la configuration (diagramfont).
|
dans la configuration (diagramfont).
|
||||||
*/
|
*/
|
||||||
QFont QETApp::diagramTextsFont(int size) {
|
QFont QETApp::diagramTextsFont(qreal size) {
|
||||||
// acces a la configuration de l'application
|
// acces a la configuration de l'application
|
||||||
QSettings &qet_settings = QETApp::settings();
|
QSettings &qet_settings = QETApp::settings();
|
||||||
|
|
||||||
// police a utiliser pour le rendu de texte
|
// police a utiliser pour le rendu de texte
|
||||||
QString diagram_texts_family = qet_settings.value("diagramfont", "Sans Serif").toString();
|
QString diagram_texts_family = qet_settings.value("diagramfont", "Sans Serif").toString();
|
||||||
int diagram_texts_size = qet_settings.value("diagramsize", 9).toInt();
|
qreal diagram_texts_size = qet_settings.value("diagramsize", 9.0).toDouble();
|
||||||
|
|
||||||
if (size != -1) {
|
if (size != -1.0) {
|
||||||
diagram_texts_size = size;
|
diagram_texts_size = size;
|
||||||
}
|
}
|
||||||
QFont diagram_texts_font = QFont(diagram_texts_family, diagram_texts_size);
|
QFont diagram_texts_font = QFont(diagram_texts_family);
|
||||||
if (diagram_texts_size <= 4) {
|
diagram_texts_font.setPointSizeF(diagram_texts_size);
|
||||||
|
if (diagram_texts_size <= 4.0) {
|
||||||
diagram_texts_font.setWeight(QFont::Light);
|
diagram_texts_font.setWeight(QFont::Light);
|
||||||
}
|
}
|
||||||
return(diagram_texts_font);
|
return(diagram_texts_font);
|
||||||
|
@ -93,7 +93,7 @@ class QETApp : public QETSingleApplication {
|
|||||||
public:
|
public:
|
||||||
static void overrideLangDir(const QString &);
|
static void overrideLangDir(const QString &);
|
||||||
static QString lang_dir; ///< Dossier contenant les fichiers de langue
|
static QString lang_dir; ///< Dossier contenant les fichiers de langue
|
||||||
static QFont diagramTextsFont(int = -1);
|
static QFont diagramTextsFont(qreal = -1.0);
|
||||||
static QETDiagramEditor *diagramEditorForFile(const QString &);
|
static QETDiagramEditor *diagramEditorForFile(const QString &);
|
||||||
static QList<QETDiagramEditor *> diagramEditors();
|
static QList<QETDiagramEditor *> diagramEditors();
|
||||||
static QList<QETElementEditor *> elementEditors();
|
static QList<QETElementEditor *> elementEditors();
|
||||||
|
@ -37,6 +37,7 @@ class TitleBlockCell {
|
|||||||
bool display_label;
|
bool display_label;
|
||||||
int alignment;
|
int alignment;
|
||||||
int font_size;
|
int font_size;
|
||||||
|
bool hadjust;
|
||||||
QString logo_reference;
|
QString logo_reference;
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
@ -292,6 +292,9 @@ bool TitleBlockTemplate::loadCells(const QDomElement &xml_element) {
|
|||||||
if (halignment == "bottom") loaded_cell -> alignment |= Qt::AlignBottom;
|
if (halignment == "bottom") loaded_cell -> alignment |= Qt::AlignBottom;
|
||||||
else if (halignment == "top") loaded_cell -> alignment |= Qt::AlignTop;
|
else if (halignment == "top") loaded_cell -> alignment |= Qt::AlignTop;
|
||||||
else loaded_cell -> alignment |= Qt::AlignVCenter;
|
else loaded_cell -> alignment |= Qt::AlignVCenter;
|
||||||
|
|
||||||
|
// horizontal text adjustment
|
||||||
|
loaded_cell -> hadjust = cell_element.attribute("hadjust", "true") == "true";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -525,8 +528,8 @@ void TitleBlockTemplate::render(QPainter &painter, const DiagramContext &diagram
|
|||||||
painter.drawPixmap(cell_rect, *(bitmap_logos_[cells_[i][j].logo_reference]));
|
painter.drawPixmap(cell_rect, *(bitmap_logos_[cells_[i][j].logo_reference]));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
painter.setFont(cells_[i][j].font_size == -1 ? QETApp::diagramTextsFont() : QETApp::diagramTextsFont(cells_[i][j].font_size));
|
QString final_text = finalTextForCell(cells_[i][j], diagram_context);
|
||||||
painter.drawText(cell_rect, cells_[i][j].alignment, finalTextForCell(cells_[i][j], diagram_context));
|
renderTextCell(painter, final_text, cells_[i][j], cell_rect);
|
||||||
}
|
}
|
||||||
|
|
||||||
// draw again the border rect of the current cell, without the brush this time
|
// draw again the border rect of the current cell, without the brush this time
|
||||||
@ -556,6 +559,47 @@ QString TitleBlockTemplate::finalTextForCell(const TitleBlockCell &cell, const D
|
|||||||
return(cell_text);
|
return(cell_text);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
This method uses a \a painter to render the \a text of a \a cell
|
||||||
|
into the \a cell_rect rectangle.
|
||||||
|
The alignment, font_size and other cell parameters are taken into account
|
||||||
|
when rendering.
|
||||||
|
@param painter QPainter used to render the text
|
||||||
|
@param text Text to render
|
||||||
|
@param cell Cell the rendered text is rattached to
|
||||||
|
@param cell_rect Rectangle delimiting the cell area
|
||||||
|
*/
|
||||||
|
void TitleBlockTemplate::renderTextCell(QPainter &painter, const QString &text, const TitleBlockCell &cell, const QRectF &cell_rect) const {
|
||||||
|
QFont text_font = cell.font_size == -1 ? QETApp::diagramTextsFont() : QETApp::diagramTextsFont(cell.font_size);
|
||||||
|
painter.setFont(text_font);
|
||||||
|
|
||||||
|
if (cell.hadjust) {
|
||||||
|
QFontMetricsF font_metrics(text_font);
|
||||||
|
QRectF font_rect = font_metrics.boundingRect(QRect(-10000, -10000, 10000, 10000), cell.alignment, text);
|
||||||
|
|
||||||
|
if (font_rect.width() > cell_rect.width()) {
|
||||||
|
qreal ratio = qreal(cell_rect.width()) / qreal(font_rect.width());
|
||||||
|
painter.save();
|
||||||
|
|
||||||
|
painter.translate(cell_rect.topLeft());
|
||||||
|
qreal vertical_adjustment = cell_rect.height() * (1 - ratio) / 2.0;
|
||||||
|
painter.translate(0.0, vertical_adjustment);
|
||||||
|
painter.scale(ratio, ratio);
|
||||||
|
|
||||||
|
QRectF new_world_cell_rect(cell_rect);
|
||||||
|
new_world_cell_rect.moveTo(0, 0.0);
|
||||||
|
new_world_cell_rect.setWidth(new_world_cell_rect.width() / ratio);
|
||||||
|
painter.drawText(new_world_cell_rect, cell.alignment, text);
|
||||||
|
|
||||||
|
painter.restore();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Still here? Let's draw the text normally
|
||||||
|
painter.drawText(cell_rect, cell.alignment, text);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@return the width between two borders
|
@return the width between two borders
|
||||||
@param start start border number
|
@param start start border number
|
||||||
|
@ -78,6 +78,7 @@ class TitleBlockTemplate : public QObject {
|
|||||||
void initCells();
|
void initCells();
|
||||||
int lengthRange(int, int, const QList<int> &) const;
|
int lengthRange(int, int, const QList<int> &) const;
|
||||||
QString finalTextForCell(const TitleBlockCell &, const DiagramContext &) const;
|
QString finalTextForCell(const TitleBlockCell &, const DiagramContext &) const;
|
||||||
|
void renderTextCell(QPainter &, const QString &, const TitleBlockCell &, const QRectF &) const;
|
||||||
|
|
||||||
// attributs
|
// attributs
|
||||||
private:
|
private:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user