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:
xavierqet
2007-09-29 09:52:35 +00:00
parent e2fc6f4993
commit 90fd503a38
3 changed files with 34 additions and 14 deletions

View File

@@ -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);

View File

@@ -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);

View File

@@ -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();