mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2025-12-19 14:50:53 +01:00
Connexions internes :
* methodes renommees dans l'editeur de schemas * attribut, lecture et ecriture ajoutes dans l'editeur d'element git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@226 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
@@ -106,7 +106,7 @@ CustomElement::CustomElement(QString &nom_fichier, QGraphicsItem *qgi, Diagram *
|
||||
// on peut d'ores et deja specifier la taille et le hotspot
|
||||
setSize(w, h);
|
||||
setHotspot(QPoint(hot_x, hot_y));
|
||||
setConnexionsInternesAcceptees(racine.attribute("ci") == "true");
|
||||
setInternalConnections(racine.attribute("ic") == "true");
|
||||
|
||||
// la definition est supposee avoir des enfants
|
||||
if (racine.firstChild().isNull()) {
|
||||
|
||||
@@ -436,7 +436,7 @@ bool Diagram::fromXml(QDomDocument &document, QPointF position, bool consider_in
|
||||
Terminal *p2 = table_adr_id.value(id_p2);
|
||||
if (p1 != p2) {
|
||||
bool can_add_conductor = true;
|
||||
bool cia = ((Element *)p2 -> parentItem()) -> connexionsInternesAcceptees();
|
||||
bool cia = ((Element *)p2 -> parentItem()) -> internalConnections();
|
||||
if (!cia) {
|
||||
foreach(QGraphicsItem *item, p2 -> parentItem() -> children()) {
|
||||
if (item == p1) can_add_conductor = false;
|
||||
|
||||
@@ -42,6 +42,7 @@ ElementScene::ElementScene(QETElementEditor *editor, QObject *parent) :
|
||||
_width(3),
|
||||
_height(7),
|
||||
_hotspot(15, 35),
|
||||
internal_connections(false),
|
||||
qgi_manager(this),
|
||||
element_editor(editor)
|
||||
{
|
||||
@@ -371,6 +372,7 @@ const QDomDocument ElementScene::toXml() const {
|
||||
root.setAttribute("hotspot_y", QString("%1").arg(_hotspot.y()));
|
||||
root.setAttribute("orientation", ori.toString());
|
||||
root.setAttribute("version", QET::version);
|
||||
if (internal_connections) root.setAttribute("ic", "true");
|
||||
|
||||
// noms de l'element
|
||||
root.appendChild(_names.toXml(xml_document));
|
||||
@@ -423,8 +425,10 @@ void ElementScene::fromXml(const QDomDocument &xml_document) {
|
||||
}
|
||||
}
|
||||
|
||||
// orientations
|
||||
// orientations et connexions internes
|
||||
if (state) {
|
||||
internal_connections = (root.attribute("ic") == "true");
|
||||
|
||||
if (!ori.fromString(root.attribute("orientation"))) {
|
||||
state = false;
|
||||
error_message = tr("Les orientations ne sont pas valides.");
|
||||
|
||||
@@ -64,6 +64,8 @@ class ElementScene : public QGraphicsScene {
|
||||
NamesList _names;
|
||||
/// Liste des orientations de l'element
|
||||
OrientationSet ori;
|
||||
/// booleen indiquant si les bornes de l'element peuvent etre reliees a des bornes de ce meme element
|
||||
bool internal_connections;
|
||||
/// Gestionnaire de QGraphicsItem
|
||||
QGIManager qgi_manager;
|
||||
/// Pile des actions annulables
|
||||
|
||||
@@ -26,8 +26,10 @@
|
||||
/**
|
||||
Constructeur pour un element sans scene ni parent
|
||||
*/
|
||||
Element::Element(QGraphicsItem *parent, Diagram *scene) : QGraphicsItem(parent, scene) {
|
||||
peut_relier_ses_propres_terminals = false;
|
||||
Element::Element(QGraphicsItem *parent, Diagram *scene) :
|
||||
QGraphicsItem(parent, scene),
|
||||
internal_connections(false)
|
||||
{
|
||||
setZValue(10);
|
||||
}
|
||||
|
||||
|
||||
14
element.h
14
element.h
@@ -79,8 +79,8 @@ class Element : public QGraphicsItem {
|
||||
void setPos(qreal, qreal);
|
||||
|
||||
// methodes relatives aux connexions internes
|
||||
bool connexionsInternesAcceptees();
|
||||
void setConnexionsInternesAcceptees(bool cia);
|
||||
bool internalConnections();
|
||||
void setInternalConnections(bool);
|
||||
|
||||
// methodes relatives aux fichiers XML
|
||||
static bool valideXml(QDomElement &);
|
||||
@@ -97,7 +97,7 @@ class Element : public QGraphicsItem {
|
||||
void mouseReleaseEvent(QGraphicsSceneMouseEvent *);
|
||||
|
||||
private:
|
||||
bool peut_relier_ses_propres_terminals;
|
||||
bool internal_connections;
|
||||
void drawSelection(QPainter *, const QStyleOptionGraphicsItem *);
|
||||
void updatePixmap();
|
||||
};
|
||||
@@ -107,8 +107,8 @@ class Element : public QGraphicsItem {
|
||||
c'est-a-dire que ses bornes peuvent etre reliees entre elles
|
||||
@return true si l'element accepte les connexions internes, false sinon
|
||||
*/
|
||||
inline bool Element::connexionsInternesAcceptees() {
|
||||
return(peut_relier_ses_propres_terminals);
|
||||
inline bool Element::internalConnections() {
|
||||
return(internal_connections);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -117,8 +117,8 @@ inline bool Element::connexionsInternesAcceptees() {
|
||||
@param cia true pour que l'element accepte les connexions internes, false pour
|
||||
qu'il les interdise
|
||||
*/
|
||||
inline void Element::setConnexionsInternesAcceptees(bool cia) {
|
||||
peut_relier_ses_propres_terminals = cia;
|
||||
inline void Element::setInternalConnections(bool ic) {
|
||||
internal_connections = ic;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -334,7 +334,7 @@ void Terminal::mouseMoveEvent(QGraphicsSceneMouseEvent *e) {
|
||||
couleur_hovered = couleur_interdit;
|
||||
} else if (p -> parentItem() == parentItem()) {
|
||||
// effet si l'on hover sur une borne du meme appareil
|
||||
if (((Element *)parentItem()) -> connexionsInternesAcceptees())
|
||||
if (((Element *)parentItem()) -> internalConnections())
|
||||
p -> couleur_hovered = p -> couleur_autorise;
|
||||
else p -> couleur_hovered = p -> couleur_interdit;
|
||||
} else if (p -> nbConductors()) {
|
||||
@@ -384,7 +384,7 @@ void Terminal::mouseReleaseEvent(QGraphicsSceneMouseEvent *e) {
|
||||
// idem s'il s'agit de la borne actuelle
|
||||
if (p == this) return;
|
||||
// idem s'il s'agit d'une borne de l'element actuel et que l'element n'a pas le droit de relier ses propres bornes
|
||||
bool cia = ((Element *)parentItem()) -> connexionsInternesAcceptees();
|
||||
bool cia = ((Element *)parentItem()) -> internalConnections();
|
||||
if (!cia) foreach(QGraphicsItem *item, parentItem() -> children()) if (item == p) return;
|
||||
// derniere verification : verifier que cette borne n'est pas deja reliee a l'autre borne
|
||||
foreach (Conductor *f, liste_conductors) if (f -> terminal1 == p || f -> terminal2 == p) return;
|
||||
|
||||
Reference in New Issue
Block a user