mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2025-12-19 23:20:52 +01:00
Implementation de la gestion du cleanState dans l'editeur de schemas
git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@145 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
@@ -87,6 +87,7 @@ void BorderInset::draw(QPainter *qp, qreal x, qreal y) {
|
|||||||
|
|
||||||
// dessine le cartouche
|
// dessine le cartouche
|
||||||
if (display_inset) {
|
if (display_inset) {
|
||||||
|
qp -> setBrush(Qt::white);
|
||||||
qp -> drawRect(inset);
|
qp -> drawRect(inset);
|
||||||
|
|
||||||
qp -> drawRect(inset_author);
|
qp -> drawRect(inset_author);
|
||||||
|
|||||||
@@ -19,16 +19,19 @@ void DiagramView::initialise() {
|
|||||||
setRenderHint(QPainter::SmoothPixmapTransform, true);
|
setRenderHint(QPainter::SmoothPixmapTransform, true);
|
||||||
|
|
||||||
setScene(scene = new Diagram(this));
|
setScene(scene = new Diagram(this));
|
||||||
|
scene -> undoStack().setClean();
|
||||||
setDragMode(RubberBandDrag);
|
setDragMode(RubberBandDrag);
|
||||||
setAcceptDrops(true);
|
setAcceptDrops(true);
|
||||||
setWindowTitle(tr("Nouveau sch\351ma") + "[*]");
|
|
||||||
setWindowIcon(QIcon(":/ico/qet-16.png"));
|
setWindowIcon(QIcon(":/ico/qet-16.png"));
|
||||||
setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
|
setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
|
||||||
setResizeAnchor(QGraphicsView::AnchorUnderMouse);
|
setResizeAnchor(QGraphicsView::AnchorUnderMouse);
|
||||||
setAlignment(Qt::AlignLeft | Qt::AlignTop);
|
setAlignment(Qt::AlignLeft | Qt::AlignTop);
|
||||||
adjustSceneRect();
|
adjustSceneRect();
|
||||||
|
updateWindowTitle();
|
||||||
|
|
||||||
connect(scene, SIGNAL(selectionEmptinessChanged()), this, SLOT(slot_selectionChanged()));
|
connect(scene, SIGNAL(selectionEmptinessChanged()), this, SLOT(slot_selectionChanged()));
|
||||||
connect(&(scene -> border_and_inset), SIGNAL(borderChanged(QRectF, QRectF)), this, SLOT(adjustSceneRect()));
|
connect(&(scene -> border_and_inset), SIGNAL(borderChanged(QRectF, QRectF)), this, SLOT(adjustSceneRect()));
|
||||||
|
connect(&(scene -> undoStack()), SIGNAL(cleanChanged(bool)), this, SLOT(updateWindowTitle()));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -324,7 +327,7 @@ bool DiagramView::ouvrir(QString n_fichier, int *erreur) {
|
|||||||
if (scene -> fromXml(doc)) {
|
if (scene -> fromXml(doc)) {
|
||||||
if (erreur != NULL) *erreur = 0;
|
if (erreur != NULL) *erreur = 0;
|
||||||
nom_fichier = n_fichier;
|
nom_fichier = n_fichier;
|
||||||
setWindowTitle(nom_fichier + "[*]");
|
scene -> undoStack().setClean();
|
||||||
return(true);
|
return(true);
|
||||||
} else {
|
} else {
|
||||||
if (erreur != NULL) *erreur = 4;
|
if (erreur != NULL) *erreur = 4;
|
||||||
@@ -344,19 +347,24 @@ void DiagramView::slot_selectionChanged() {
|
|||||||
@param event Le QCloseEvent decrivant l'evenement
|
@param event Le QCloseEvent decrivant l'evenement
|
||||||
*/
|
*/
|
||||||
void DiagramView::closeEvent(QCloseEvent *event) {
|
void DiagramView::closeEvent(QCloseEvent *event) {
|
||||||
// demande d'abord a l'utilisateur s'il veut enregistrer le schema en cours
|
|
||||||
QMessageBox::StandardButton reponse = QMessageBox::question(
|
|
||||||
this,
|
|
||||||
tr("Enregistrer le sch\351ma en cours ?"),
|
|
||||||
tr("Voulez-vous enregistrer le sch\351ma ") + windowTitle() + tr(" ?"),
|
|
||||||
QMessageBox::Yes|QMessageBox::No|QMessageBox::Cancel,
|
|
||||||
QMessageBox::Cancel
|
|
||||||
);
|
|
||||||
bool retour;
|
bool retour;
|
||||||
switch(reponse) {
|
// si le schema est modifie
|
||||||
case QMessageBox::Cancel: retour = false; break; // l'utilisateur annule : echec de la fermeture
|
if (!isWindowModified()) {
|
||||||
case QMessageBox::Yes: retour = enregistrer(); break; // l'utilisateur dit oui : la reussite depend de l'enregistrement
|
retour = true;
|
||||||
default: retour = true; // l'utilisateur dit non ou ferme le dialogue: c'est reussi
|
} else {
|
||||||
|
// demande d'abord a l'utilisateur s'il veut enregistrer le schema en cours
|
||||||
|
QMessageBox::StandardButton reponse = QMessageBox::question(
|
||||||
|
this,
|
||||||
|
tr("Enregistrer le sch\351ma en cours ?"),
|
||||||
|
tr("Voulez-vous enregistrer le sch\351ma ") + windowTitle() + tr(" ?"),
|
||||||
|
QMessageBox::Yes|QMessageBox::No|QMessageBox::Cancel,
|
||||||
|
QMessageBox::Cancel
|
||||||
|
);
|
||||||
|
switch(reponse) {
|
||||||
|
case QMessageBox::Cancel: retour = false; break; // l'utilisateur annule : echec de la fermeture
|
||||||
|
case QMessageBox::Yes: retour = enregistrer(); break; // l'utilisateur dit oui : la reussite depend de l'enregistrement
|
||||||
|
default: retour = true; // l'utilisateur dit non ou ferme le dialogue: c'est reussi
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (retour) {
|
if (retour) {
|
||||||
event -> accept();
|
event -> accept();
|
||||||
@@ -423,6 +431,7 @@ bool DiagramView::private_enregistrer(QString &n_fichier) {
|
|||||||
out.setCodec("UTF-8");
|
out.setCodec("UTF-8");
|
||||||
out << scene -> toXml().toString(4);
|
out << scene -> toXml().toString(4);
|
||||||
fichier.close();
|
fichier.close();
|
||||||
|
scene -> undoStack().setClean();
|
||||||
return(true);
|
return(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -578,6 +587,15 @@ void DiagramView::adjustSceneRect() {
|
|||||||
scene -> update(old_scene_rect.united(new_scene_rect));
|
scene -> update(old_scene_rect.united(new_scene_rect));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DiagramView::updateWindowTitle() {
|
||||||
|
QString window_title;
|
||||||
|
if (nom_fichier.isNull()) window_title += tr("nouveau sch\351ma");
|
||||||
|
else window_title += nom_fichier;
|
||||||
|
window_title += "[*]";
|
||||||
|
setWindowTitle(window_title);
|
||||||
|
setWindowModified(!(scene -> undoStack().isClean()));
|
||||||
|
}
|
||||||
|
|
||||||
void DiagramView::adjustGridToZoom() {
|
void DiagramView::adjustGridToZoom() {
|
||||||
QRectF viewed_scene = viewedSceneRect();
|
QRectF viewed_scene = viewedSceneRect();
|
||||||
scene -> setDisplayGrid(viewed_scene.width() < 2000 || viewed_scene.height() < 2000);
|
scene -> setDisplayGrid(viewed_scene.width() < 2000 || viewed_scene.height() < 2000);
|
||||||
|
|||||||
@@ -70,6 +70,7 @@ class DiagramView : public QGraphicsView {
|
|||||||
void copier();
|
void copier();
|
||||||
void coller();
|
void coller();
|
||||||
void adjustSceneRect();
|
void adjustSceneRect();
|
||||||
|
void updateWindowTitle();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void slot_selectionChanged();
|
void slot_selectionChanged();
|
||||||
|
|||||||
Reference in New Issue
Block a user