Modifications mineures

git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@112 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
xavierqet
2007-09-05 20:42:08 +00:00
parent 7a5ce6d84d
commit 041493a509
7 changed files with 31 additions and 31 deletions

View File

@@ -91,7 +91,7 @@ void Conducer::update(const QRectF &rect) {
a pour position pos a pour position pos
@param rect Rectangle a mettre a jour @param rect Rectangle a mettre a jour
@param b Borne @param b Borne
@param pos position de la borne b @param newpos position de la borne b
*/ */
void Conducer::updateWithNewPos(const QRectF &rect, const Terminal *b, const QPointF &newpos) { void Conducer::updateWithNewPos(const QRectF &rect, const Terminal *b, const QPointF &newpos) {
QPointF p1, p2; QPointF p1, p2;

View File

@@ -23,7 +23,6 @@
*/ */
CustomElement::CustomElement(QString &nom_fichier, QGraphicsItem *qgi, Diagram *s, int *etat) : FixedElement(qgi, s) { CustomElement::CustomElement(QString &nom_fichier, QGraphicsItem *qgi, Diagram *s, int *etat) : FixedElement(qgi, s) {
nomfichier = nom_fichier; nomfichier = nom_fichier;
nb_terminals = 0;
// pessimisme inside : par defaut, ca foire // pessimisme inside : par defaut, ca foire
elmt_etat = -1; elmt_etat = -1;
@@ -108,7 +107,7 @@ CustomElement::CustomElement(QString &nom_fichier, QGraphicsItem *qgi, Diagram *
for (QDomNode n = node.firstChild() ; !n.isNull() ; n = n.nextSibling()) { for (QDomNode n = node.firstChild() ; !n.isNull() ; n = n.nextSibling()) {
QDomElement qde = n.toElement(); QDomElement qde = n.toElement();
if (qde.isNull()) continue; if (qde.isNull()) continue;
if (parseElement(qde, qp, s)) ++ nb_elements_parses; if (parseElement(qde, qp)) ++ nb_elements_parses;
else { else {
if (etat != NULL) *etat = 7; if (etat != NULL) *etat = 7;
elmt_etat = 7; elmt_etat = 7;
@@ -141,11 +140,21 @@ CustomElement::CustomElement(QString &nom_fichier, QGraphicsItem *qgi, Diagram *
CustomElement::~CustomElement() { CustomElement::~CustomElement() {
} }
QList<Terminal *> CustomElement::terminals() const {
return(list_terminals);
}
QList<Conducer *> CustomElement::conducers() const {
QList<Conducer *> conducers;
foreach(Terminal *t, list_terminals) conducers << t -> conducers();
return(conducers);
}
/** /**
@return Le nombre de bornes que l'element possede @return Le nombre de bornes que l'element possede
*/ */
int CustomElement::nbTerminals() const { int CustomElement::nbTerminals() const {
return(nb_terminals); return(list_terminals.size());
} }
/** /**
@@ -170,15 +179,15 @@ void CustomElement::paint(QPainter *qp, const QStyleOptionGraphicsItem *) {
@param s Le schema sur lequel sera affiche l'element perso @param s Le schema sur lequel sera affiche l'element perso
@return true si l'analyse reussit, false sinon @return true si l'analyse reussit, false sinon
*/ */
bool CustomElement::parseElement(QDomElement &e, QPainter &qp, Diagram *s) { bool CustomElement::parseElement(QDomElement &e, QPainter &qp) {
if (e.tagName() == "terminal") return(parseTerminal(e, s)); if (e.tagName() == "terminal") return(parseTerminal(e));
else if (e.tagName() == "line") return(parseLine(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(parseCircle(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(parsePolygon(e, qp)); else if (e.tagName() == "polygon") return(parsePolygon(e, qp));
else if (e.tagName() == "text") return(parseText(e, qp)); else if (e.tagName() == "text") return(parseText(e, qp));
else if (e.tagName() == "input") return(parseInput(e, s)); else if (e.tagName() == "input") return(parseInput(e));
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
} }
@@ -372,7 +381,7 @@ bool CustomElement::parseText(QDomElement &e, QPainter &qp) {
@param s Le schema sur lequel l'element perso sera affiche @param s Le schema sur lequel l'element perso sera affiche
@return true si l'analyse reussit, false sinon @return true si l'analyse reussit, false sinon
*/ */
bool CustomElement::parseInput(QDomElement &e, Diagram *s) { bool CustomElement::parseInput(QDomElement &e) {
qreal pos_x, pos_y; qreal pos_x, pos_y;
int size; int size;
if ( if (
@@ -381,7 +390,7 @@ bool CustomElement::parseInput(QDomElement &e, Diagram *s) {
!QET::attributeIsAnInteger(e, "size", &size) !QET::attributeIsAnInteger(e, "size", &size)
) return(false); ) return(false);
ElementTextItem *eti = new ElementTextItem(e.attribute("text"), this, s); ElementTextItem *eti = new ElementTextItem(e.attribute("text"), this);
eti -> setFont(QFont("Sans Serif", size)); eti -> setFont(QFont("Sans Serif", size));
eti -> setPos(pos_x, pos_y); eti -> setPos(pos_x, pos_y);
if (e.attribute("rotate") == "true") eti -> setFollowParentRotations(true); if (e.attribute("rotate") == "true") eti -> setFollowParentRotations(true);
@@ -399,7 +408,7 @@ bool CustomElement::parseInput(QDomElement &e, Diagram *s) {
@param s Le schema sur lequel l'element perso sera affiche @param s Le schema sur lequel l'element perso sera affiche
@return true si l'analyse reussit, false sinon @return true si l'analyse reussit, false sinon
*/ */
bool CustomElement::parseTerminal(QDomElement &e, Diagram *s) { bool CustomElement::parseTerminal(QDomElement &e) {
// verifie la presence et la validite des attributs obligatoires // verifie la presence et la validite des attributs obligatoires
double terminalx, terminaly; double terminalx, terminaly;
QET::Orientation terminalo; QET::Orientation terminalo;
@@ -411,8 +420,7 @@ bool CustomElement::parseTerminal(QDomElement &e, Diagram *s) {
else if (e.attribute("orientation") == "e") terminalo = QET::East; else if (e.attribute("orientation") == "e") terminalo = QET::East;
else if (e.attribute("orientation") == "w") terminalo = QET::West; else if (e.attribute("orientation") == "w") terminalo = QET::West;
else return(false); else return(false);
new Terminal(terminalx, terminaly, terminalo, this, s); list_terminals << new Terminal(terminalx, terminaly, terminalo, this);
++ nb_terminals;
return(true); return(true);
} }

View File

@@ -29,10 +29,12 @@ class CustomElement : public FixedElement {
NamesList names; NamesList names;
QString nomfichier; QString nomfichier;
QPicture dessin; QPicture dessin;
int nb_terminals; QList<Terminal *> list_terminals;
// methodes // methodes
public: public:
virtual QList<Terminal *> terminals() const;
virtual QList<Conducer *> conducers() const;
virtual int nbTerminals() const; virtual int nbTerminals() const;
virtual void paint(QPainter *, const QStyleOptionGraphicsItem *); virtual void paint(QPainter *, const QStyleOptionGraphicsItem *);
QString typeId() const; QString typeId() const;
@@ -42,15 +44,15 @@ class CustomElement : public FixedElement {
QString nom() const; QString nom() const;
private: private:
bool parseElement(QDomElement &, QPainter &, Diagram *); bool parseElement(QDomElement &, QPainter &);
bool parseLine(QDomElement &, QPainter &); bool parseLine(QDomElement &, QPainter &);
bool parseEllipse(QDomElement &, QPainter &); bool parseEllipse(QDomElement &, QPainter &);
bool parseCircle(QDomElement &, QPainter &); bool parseCircle(QDomElement &, QPainter &);
bool parseArc(QDomElement &, QPainter &); bool parseArc(QDomElement &, QPainter &);
bool parsePolygon(QDomElement &, QPainter &); bool parsePolygon(QDomElement &, QPainter &);
bool parseText(QDomElement &, QPainter &); bool parseText(QDomElement &, QPainter &);
bool parseInput(QDomElement &, Diagram *); bool parseInput(QDomElement &);
bool parseTerminal(QDomElement &, Diagram *); bool parseTerminal(QDomElement &);
void setQPainterAntiAliasing(QPainter &, bool); void setQPainterAntiAliasing(QPainter &, bool);
bool validOrientationAttribute(QDomElement &); bool validOrientationAttribute(QDomElement &);
void setPainterStyle(QDomElement &, QPainter &); void setPainterStyle(QDomElement &, QPainter &);

View File

@@ -20,7 +20,7 @@ Diagram::Diagram(QObject *parent) : QGraphicsScene(parent) {
conducer_setter -> setLine(QLineF(QPointF(0.0, 0.0), QPointF(0.0, 0.0))); conducer_setter -> setLine(QLineF(QPointF(0.0, 0.0), QPointF(0.0, 0.0)));
draw_grid = true; draw_grid = true;
use_border = true; use_border = true;
connect(this, SIGNAL(changed(const QList<QRectF> &)), this, SLOT(slot_checkSelectionEmptinessChange())); connect(this, SIGNAL(selectionChanged()), this, SLOT(slot_checkSelectionEmptinessChange()));
} }
/** /**
@@ -351,17 +351,6 @@ bool Diagram::fromXml(QDomDocument &document, QPointF position, bool consider_in
return(true); return(true);
} }
/**
Verifie si la liste des elements selectionnes a change. Si oui, le signal
selectionChanged() est emis.
*/
void Diagram::slot_checkSelectionChange() {
static QList<QGraphicsItem *> cache_selecteditems = QList<QGraphicsItem *>();
QList<QGraphicsItem *> selecteditems = selectedItems();
if (cache_selecteditems != selecteditems) emit(selectionChanged());
cache_selecteditems = selecteditems;
}
/** /**
Verifie si la selection est passe d'un etat ou elle est vide a un etat ou Verifie si la selection est passe d'un etat ou elle est vide a un etat ou
elle ne l'est pas, et inversement. Si c'est le cas, le signal elle ne l'est pas, et inversement. Si c'est le cas, le signal
@@ -389,3 +378,4 @@ QRectF Diagram::border() const {
) )
); );
} }

View File

@@ -56,11 +56,9 @@ class Diagram : public QGraphicsScene {
QSize imageSize() const; QSize imageSize() const;
private slots: private slots:
void slot_checkSelectionChange();
void slot_checkSelectionEmptinessChange(); void slot_checkSelectionEmptinessChange();
signals: signals:
void selectionChanged();
void selectionEmptinessChanged(); void selectionEmptinessChanged();
}; };

View File

@@ -110,7 +110,7 @@ QPixmap Element::pixmap() {
@return la valeur du changement d'etat @return la valeur du changement d'etat
*/ */
QVariant Element::itemChange(GraphicsItemChange change, const QVariant &value) { QVariant Element::itemChange(GraphicsItemChange change, const QVariant &value) {
if (change == QGraphicsItem::ItemPositionChange) { if (change == QGraphicsItem::ItemPositionHasChanged) {
foreach(QGraphicsItem *qgi, children()) { foreach(QGraphicsItem *qgi, children()) {
if (Terminal *p = qgraphicsitem_cast<Terminal *>(qgi)) p -> updateConducer(value.toPointF()); if (Terminal *p = qgraphicsitem_cast<Terminal *>(qgi)) p -> updateConducer(value.toPointF());
} }

View File

@@ -35,6 +35,8 @@ class Element : public QGraphicsItem {
virtual int type() const { return Type; } virtual int type() const { return Type; }
// methodes virtuelles pures a definir dans les classes enfants // methodes virtuelles pures a definir dans les classes enfants
virtual QList<Terminal *> terminals() const = 0;
virtual QList<Conducer *> conducers() const = 0;
virtual int nbTerminals() const = 0; virtual int nbTerminals() const = 0;
virtual int nbTerminalsMin() const = 0; virtual int nbTerminalsMin() const = 0;
virtual int nbTerminalsMax() const = 0; virtual int nbTerminalsMax() const = 0;