Ajout de la possibilite de mettre du texte statique lors du dessin des elements

git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@62 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
xavierqet
2007-02-22 18:46:51 +00:00
parent 7da7f48ef6
commit dcfc774518
2 changed files with 48 additions and 9 deletions

View File

@@ -150,6 +150,7 @@ CustomElement::CustomElement(QString &nom_fichier, QGraphicsItem *qgi, Diagram *
// fermeture du fichier // fermeture du fichier
fichier.close(); fichier.close();
//(new QGraphicsTextItem("plop", this, scene())) -> setTextInteractionFlags(Qt::TextEditorInteraction);
if (etat != NULL) *etat = 0; if (etat != NULL) *etat = 0;
elmt_etat = 0; elmt_etat = 0;
} }
@@ -185,11 +186,12 @@ void CustomElement::paint(QPainter *qp, const QStyleOptionGraphicsItem *) {
*/ */
bool CustomElement::parseElement(QDomElement &e, QPainter &qp, Diagram *s) { bool CustomElement::parseElement(QDomElement &e, QPainter &qp, Diagram *s) {
if (e.tagName() == "terminal") return(parseTerminal(e, s)); if (e.tagName() == "terminal") return(parseTerminal(e, s));
else if (e.tagName() == "line") return(parseLigne(e, qp)); else if (e.tagName() == "line") return(parseLine(e, qp));
else if (e.tagName() == "ellipse") return(parseEllipse(e, qp)); else if (e.tagName() == "ellipse") return(parseEllipse(e, qp));
else if (e.tagName() == "circle") return(parseCercle(e, qp)); else if (e.tagName() == "circle") return(parseCircle(e, qp));
else if (e.tagName() == "arc") return(parseArc(e, qp)); else if (e.tagName() == "arc") return(parseArc(e, qp));
else if (e.tagName() == "polygon") return(parsePolygone(e, qp)); else if (e.tagName() == "polygon") return(parsePolygon(e, qp));
else if (e.tagName() == "text") return(parseText(e, qp));
else return(true); // on n'est pas chiant, on ignore l'element inconnu else return(true); // on n'est pas chiant, on ignore l'element inconnu
} }
@@ -204,7 +206,7 @@ bool CustomElement::parseElement(QDomElement &e, QPainter &qp, Diagram *s) {
@param qp Le QPainter a utiliser pour dessiner l'element perso @param qp Le QPainter a utiliser pour dessiner l'element perso
@return true si l'analyse reussit, false sinon @return true si l'analyse reussit, false sinon
*/ */
bool CustomElement::parseLigne(QDomElement &e, QPainter &qp) { bool CustomElement::parseLine(QDomElement &e, QPainter &qp) {
// verifie la presence et la validite des attributs obligatoires // verifie la presence et la validite des attributs obligatoires
double x1, y1, x2, y2; double x1, y1, x2, y2;
if (!attributeIsAReal(e, QString("x1"), &x1)) return(false); if (!attributeIsAReal(e, QString("x1"), &x1)) return(false);
@@ -231,7 +233,7 @@ bool CustomElement::parseLigne(QDomElement &e, QPainter &qp) {
@return true si l'analyse reussit, false sinon @return true si l'analyse reussit, false sinon
@todo utiliser des attributs plus coherents : x et y = centre, rayon = vrai rayon @todo utiliser des attributs plus coherents : x et y = centre, rayon = vrai rayon
*/ */
bool CustomElement::parseCercle(QDomElement &e, QPainter &qp) { bool CustomElement::parseCircle(QDomElement &e, QPainter &qp) {
// verifie la presence des attributs obligatoires // verifie la presence des attributs obligatoires
double cercle_x, cercle_y, cercle_r; double cercle_x, cercle_y, cercle_r;
if (!attributeIsAReal(e, QString("x"), &cercle_x)) return(false); if (!attributeIsAReal(e, QString("x"), &cercle_x)) return(false);
@@ -313,7 +315,7 @@ bool CustomElement::parseArc(QDomElement &e, QPainter &qp) {
@param qp Le QPainter a utiliser pour dessiner l'element perso @param qp Le QPainter a utiliser pour dessiner l'element perso
@return true si l'analyse reussit, false sinon @return true si l'analyse reussit, false sinon
*/ */
bool CustomElement::parsePolygone(QDomElement &e, QPainter &qp) { bool CustomElement::parsePolygon(QDomElement &e, QPainter &qp) {
int i = 1; int i = 1;
while(true) { while(true) {
if (attributeIsAReal(e, QString("x%1").arg(i)) && attributeIsAReal(e, QString("y%1").arg(i))) ++ i; if (attributeIsAReal(e, QString("x%1").arg(i)) && attributeIsAReal(e, QString("y%1").arg(i))) ++ i;
@@ -334,6 +336,33 @@ bool CustomElement::parsePolygone(QDomElement &e, QPainter &qp) {
return(true); return(true);
} }
/**
Analyse un element XML suppose representer un texte. Si l'analyse
reussit, le texte est ajoute au dessin.
Le texte est defini par une position, une chaine de caractères et une
taille.
@param e L'element XML a analyser
@param qp Le QPainter a utiliser pour dessiner l'element perso
@return true si l'analyse reussit, false sinon
*/
bool CustomElement::parseText(QDomElement &e, QPainter &qp) {
qreal pos_x, pos_y;
int size;
if (
!attributeIsAReal(e, "x", &pos_x) ||\
!attributeIsAReal(e, "y", &pos_y) ||\
!attributeIsAnInteger(e, "size", &size) ||\
!e.hasAttribute("text")
) return(false);
qp.save();
setPainterStyle(e, qp);
qp.setFont(QFont(QString("Sans Serif"), size));
qp.drawText(QPointF(pos_x, pos_y), e.attribute("text"));
qp.restore();
return(true);
}
/** /**
Analyse un element XML suppose representer une borne. Si l'analyse Analyse un element XML suppose representer une borne. Si l'analyse
reussit, la borne est ajoutee a l'element. reussit, la borne est ajoutee a l'element.
@@ -471,6 +500,9 @@ bool CustomElement::validOrientationAttribute(QDomElement &e) {
- white : remplissage blanc - white : remplissage blanc
- black : remplissage noir - black : remplissage noir
- none : pas de remplissage [par defaut] - none : pas de remplissage [par defaut]
- color : couleur du trait et du texte
- white : trait noir [par defaut]
- black : trait blanc
Les autres valeurs ne sont pas prises en compte. Les autres valeurs ne sont pas prises en compte.
@param e L'element XML a parser @param e L'element XML a parser
@@ -515,6 +547,12 @@ void CustomElement::setPainterStyle(QDomElement &e, QPainter &qp) {
} else if (style_value == "none") { } else if (style_value == "none") {
brush.setStyle(Qt::NoBrush); brush.setStyle(Qt::NoBrush);
} }
} else if (style_name == "color") {
if (style_value == "black") {
pen.setColor(QColor(0, 0, 0, pen.color().alpha()));
} else if (style_value == "white") {
pen.setColor(QColor(255, 255, 255, pen.color().alpha()));
}
} }
} }
} }

View File

@@ -19,11 +19,12 @@
QString nomfichier; QString nomfichier;
QPicture dessin; QPicture dessin;
bool parseElement(QDomElement &, QPainter &, Diagram *); bool parseElement(QDomElement &, QPainter &, Diagram *);
bool parseLigne(QDomElement &, QPainter &); bool parseLine(QDomElement &, QPainter &);
bool parseEllipse(QDomElement &, QPainter &); bool parseEllipse(QDomElement &, QPainter &);
bool parseCercle(QDomElement &, QPainter &); bool parseCircle(QDomElement &, QPainter &);
bool parseArc(QDomElement &, QPainter &); bool parseArc(QDomElement &, QPainter &);
bool parsePolygone(QDomElement &, QPainter &); bool parsePolygon(QDomElement &, QPainter &);
bool parseText(QDomElement &, QPainter &);
bool parseTerminal(QDomElement &, Diagram *); bool parseTerminal(QDomElement &, Diagram *);
void setQPainterAntiAliasing(QPainter &, bool); void setQPainterAntiAliasing(QPainter &, bool);
bool attributeIsAnInteger(QDomElement &, QString, int * = NULL); bool attributeIsAnInteger(QDomElement &, QString, int * = NULL);