mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-04-05 03:39:58 +02:00
Les schemas sont desormais encapsules dans un pseudo-projet.
git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@216 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
@@ -217,7 +217,6 @@ QDomDocument Diagram::toXml(bool diagram) {
|
|||||||
racine.setAttribute("cols", border_and_inset.nbColumn());
|
racine.setAttribute("cols", border_and_inset.nbColumn());
|
||||||
racine.setAttribute("colsize", border_and_inset.columnsWidth());
|
racine.setAttribute("colsize", border_and_inset.columnsWidth());
|
||||||
racine.setAttribute("height", border_and_inset.columnsHeight());
|
racine.setAttribute("height", border_and_inset.columnsHeight());
|
||||||
racine.setAttribute("version", QET::version);
|
|
||||||
|
|
||||||
// type de conducteur par defaut
|
// type de conducteur par defaut
|
||||||
QDomElement default_conductor = document.createElement("defaultconductor");
|
QDomElement default_conductor = document.createElement("defaultconductor");
|
||||||
|
|||||||
@@ -284,14 +284,78 @@ bool DiagramView::open(QString n_fichier, int *erreur) {
|
|||||||
}
|
}
|
||||||
fichier.close();
|
fichier.close();
|
||||||
|
|
||||||
// construit le schema a partir du QDomDocument
|
/**
|
||||||
QDomDocument &doc = document;
|
La notion de projet (ensemble de documents [schemas, nomenclatures,
|
||||||
if (scene -> fromXml(doc)) {
|
...] et d'elements) n'est pas encore geree.
|
||||||
if (erreur != NULL) *erreur = 0;
|
Toutefois, pour gerer au mieux la transition de la 0.1 a la 0.2,
|
||||||
file_name = n_fichier;
|
les schemas enregistres (element XML "diagram") sont integres dans un
|
||||||
scene -> undoStack().setClean();
|
pseudo projet (element XML "project").
|
||||||
updateWindowTitle();
|
S'il y a plusieurs schemas dans un projet, tous les schemas seront
|
||||||
return(true);
|
ouverts comme etant des fichiers separes
|
||||||
|
*/
|
||||||
|
// repere les schemas dans le fichier
|
||||||
|
// cas 1 : l'element racine est un "diagram" : un seul schema, pas de probleme
|
||||||
|
if (document.documentElement().tagName() == "diagram") {
|
||||||
|
// construit le schema a partir du QDomDocument
|
||||||
|
QDomDocument &doc = document;
|
||||||
|
if (scene -> fromXml(doc)) {
|
||||||
|
if (erreur != NULL) *erreur = 0;
|
||||||
|
file_name = n_fichier;
|
||||||
|
scene -> undoStack().setClean();
|
||||||
|
updateWindowTitle();
|
||||||
|
return(true);
|
||||||
|
} else {
|
||||||
|
if (erreur != NULL) *erreur = 4;
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
|
// cas 2 : l'element racine est un "project"
|
||||||
|
} else if (document.documentElement().tagName() == "project") {
|
||||||
|
// compte le nombre de schemas dans le projet
|
||||||
|
QList<QDomElement> diagrams;
|
||||||
|
|
||||||
|
QDomNodeList diagram_nodes = document.documentElement().elementsByTagName("diagram");
|
||||||
|
for (uint i = 0 ; i < diagram_nodes.length() ; ++ i) {
|
||||||
|
if (diagram_nodes.at(i).isElement()) {
|
||||||
|
diagrams << diagram_nodes.at(i).toElement();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// il n'y aucun schema la-dedans
|
||||||
|
if (!diagrams.count()) {
|
||||||
|
if (erreur != NULL) *erreur = 4;
|
||||||
|
return(false);
|
||||||
|
} else {
|
||||||
|
|
||||||
|
bool keep_doc_name = diagrams.count() == 1;
|
||||||
|
bool current_dv_loaded = false;
|
||||||
|
for (int i = 0 ; i < diagrams.count() ; ++ i) {
|
||||||
|
// cree un QDomDocument representant le schema
|
||||||
|
QDomDocument diagram_doc;
|
||||||
|
diagram_doc.appendChild(diagram_doc.importNode(diagrams[i], true));
|
||||||
|
|
||||||
|
// charge le premier schema valide et cree de nouveau DiagramView pour les suivants
|
||||||
|
if (!current_dv_loaded) {
|
||||||
|
if (scene -> fromXml(diagram_doc)) {
|
||||||
|
if (keep_doc_name) file_name = n_fichier;
|
||||||
|
scene -> undoStack().setClean();
|
||||||
|
updateWindowTitle();
|
||||||
|
current_dv_loaded = true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
DiagramView *new_dv = new DiagramView(parentWidget());
|
||||||
|
if (new_dv -> scene -> fromXml(diagram_doc)) {
|
||||||
|
if (keep_doc_name) new_dv -> file_name = n_fichier;
|
||||||
|
new_dv -> scene -> undoStack().setClean();
|
||||||
|
new_dv -> updateWindowTitle();
|
||||||
|
diagramEditor() -> addDiagramView(new_dv);
|
||||||
|
} else {
|
||||||
|
delete(new_dv);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
if (erreur != NULL) *erreur = 4;
|
if (erreur != NULL) *erreur = 4;
|
||||||
return(false);
|
return(false);
|
||||||
@@ -409,7 +473,15 @@ bool DiagramView::saveDiagramToFile(QString &n_fichier) {
|
|||||||
}
|
}
|
||||||
QTextStream out(&fichier);
|
QTextStream out(&fichier);
|
||||||
out.setCodec("UTF-8");
|
out.setCodec("UTF-8");
|
||||||
out << scene -> toXml().toString(4);
|
|
||||||
|
// l'export XML du schema est encapsule dans un pseudo-projet
|
||||||
|
QDomDocument final_document;
|
||||||
|
QDomElement project_root = final_document.createElement("project");
|
||||||
|
project_root.setAttribute("version", QET::version);
|
||||||
|
project_root.appendChild(final_document.importNode(scene -> toXml().documentElement(), true));
|
||||||
|
final_document.appendChild(project_root);
|
||||||
|
|
||||||
|
out << final_document.toString(4);
|
||||||
fichier.close();
|
fichier.close();
|
||||||
scene -> undoStack().setClean();
|
scene -> undoStack().setClean();
|
||||||
return(true);
|
return(true);
|
||||||
|
|||||||
@@ -27,20 +27,6 @@ QETDiagramEditor::QETDiagramEditor(const QStringList &files, QWidget *parent) :
|
|||||||
// mise en place du signalmapper
|
// mise en place du signalmapper
|
||||||
connect(&windowMapper, SIGNAL(mapped(QWidget *)), &workspace, SLOT(setActiveWindow(QWidget *)));
|
connect(&windowMapper, SIGNAL(mapped(QWidget *)), &workspace, SLOT(setActiveWindow(QWidget *)));
|
||||||
|
|
||||||
// si des chemins de fichiers valides sont passes en arguments
|
|
||||||
QList<DiagramView *> diagram_views;
|
|
||||||
if (files.size()) {
|
|
||||||
// alors on ouvre ces fichiers
|
|
||||||
foreach(QString file, files) {
|
|
||||||
DiagramView *sv = new DiagramView(this);
|
|
||||||
if (sv -> open(file)) diagram_views << sv;
|
|
||||||
else delete sv;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// si aucun schema n'a ete ouvert jusqu'a maintenant, on ouvre un nouveau schema
|
|
||||||
if (!diagram_views.size()) diagram_views << new DiagramView(this);
|
|
||||||
|
|
||||||
// titre de la fenetre
|
// titre de la fenetre
|
||||||
setWindowTitle(tr("QElectroTech"));
|
setWindowTitle(tr("QElectroTech"));
|
||||||
|
|
||||||
@@ -84,6 +70,20 @@ QETDiagramEditor::QETDiagramEditor(const QStringList &files, QWidget *parent) :
|
|||||||
setMinimumSize(QSize(500, 350));
|
setMinimumSize(QSize(500, 350));
|
||||||
setWindowState(Qt::WindowMaximized);
|
setWindowState(Qt::WindowMaximized);
|
||||||
|
|
||||||
|
// si des chemins de fichiers valides sont passes en arguments
|
||||||
|
QList<DiagramView *> diagram_views;
|
||||||
|
if (files.size()) {
|
||||||
|
// alors on ouvre ces fichiers
|
||||||
|
foreach(QString file, files) {
|
||||||
|
DiagramView *sv = new DiagramView(this);
|
||||||
|
if (sv -> open(file)) diagram_views << sv;
|
||||||
|
else delete sv;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// si aucun schema n'a ete ouvert jusqu'a maintenant, on ouvre un nouveau schema
|
||||||
|
if (!diagram_views.size()) diagram_views << new DiagramView(this);
|
||||||
|
|
||||||
// connexions signaux / slots pour une interface sensee
|
// connexions signaux / slots pour une interface sensee
|
||||||
connect(&workspace, SIGNAL(windowActivated(QWidget *)), this, SLOT(slot_updateWindowsMenu()));
|
connect(&workspace, SIGNAL(windowActivated(QWidget *)), this, SLOT(slot_updateWindowsMenu()));
|
||||||
connect(&workspace, SIGNAL(windowActivated(QWidget *)), this, SLOT(slot_updateActions()));
|
connect(&workspace, SIGNAL(windowActivated(QWidget *)), this, SLOT(slot_updateActions()));
|
||||||
|
|||||||
Reference in New Issue
Block a user