From bb00094c0aae4a0fb6a57b8db89fbbd58df863a7 Mon Sep 17 00:00:00 2001 From: xavierqet Date: Wed, 3 Oct 2007 15:51:04 +0000 Subject: [PATCH] Les modifications apportees aux proprietes des conducteurs sont desormais annulables git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@152 bfdf4180-ca20-0410-9c96-a3a8aa849046 --- conducer.cpp | 1 + diagramcommands.cpp | 43 +++++++++++++++++++++++++++++++++++++++++++ diagramcommands.h | 34 ++++++++++++++++++++++++++++++++++ diagramview.cpp | 13 +++++++++---- 4 files changed, 87 insertions(+), 4 deletions(-) diff --git a/conducer.cpp b/conducer.cpp index 99081a5c1..4bb366caa 100644 --- a/conducer.cpp +++ b/conducer.cpp @@ -1024,6 +1024,7 @@ QString Conducer::text() const { */ void Conducer::setText(const QString &t) { text_item -> setPlainText(t); + text_item -> previous_text = t; } diff --git a/diagramcommands.cpp b/diagramcommands.cpp index af9429555..3a44350cd 100644 --- a/diagramcommands.cpp +++ b/diagramcommands.cpp @@ -472,3 +472,46 @@ void ChangeBorderCommand::undo() { void ChangeBorderCommand::redo() { applyChanges(1); } + +ChangeConducerPropertiesCommand::ChangeConducerPropertiesCommand(Conducer *c, QUndoCommand *parent) : + QUndoCommand(QObject::tr("modifier les propri\351t\351s d'un conducteur"), parent), + conducer(c), + old_settings_set(false), + new_settings_set(false) +{ +} + +ChangeConducerPropertiesCommand::~ChangeConducerPropertiesCommand() { +} + +void ChangeConducerPropertiesCommand::setOldSettings(bool single, const QString &text, const SingleLineProperties &slp) { + old_is_single_line = single; + old_conducer_text = text; + old_slp = slp; + old_settings_set = true; +} + +void ChangeConducerPropertiesCommand::setNewSettings(bool single, const QString &text, const SingleLineProperties &slp) { + new_is_single_line = single; + new_conducer_text = text; + new_slp = slp; + new_settings_set = true; +} + +void ChangeConducerPropertiesCommand::undo() { + if (old_settings_set && new_settings_set) { + conducer -> setSingleLine(old_is_single_line); + conducer -> setText(old_conducer_text); + conducer -> singleLineProperties = old_slp; + conducer -> update(); + } +} + +void ChangeConducerPropertiesCommand::redo() { + if (old_settings_set && new_settings_set) { + conducer -> setSingleLine(new_is_single_line); + conducer -> setText(new_conducer_text); + conducer -> singleLineProperties = new_slp; + conducer -> update(); + } +} diff --git a/diagramcommands.h b/diagramcommands.h index bfe00dafb..5451afd1b 100644 --- a/diagramcommands.h +++ b/diagramcommands.h @@ -297,4 +297,38 @@ class ChangeBorderCommand : public QUndoCommand { /// Delta pour la hauteur des entetes des colonnes qreal headersHeightDifference; }; + +/** + Cette classe represente l'action de modifier les proprietes d'un conducteur +*/ +class ChangeConducerPropertiesCommand : public QUndoCommand { + // constructeurs, destructeur + public: + ChangeConducerPropertiesCommand(Conducer *, QUndoCommand * = 0); + virtual ~ChangeConducerPropertiesCommand(); + private: + ChangeConducerPropertiesCommand(const ChangeConducerPropertiesCommand &); + + // methodes + public: + virtual void undo(); + virtual void redo(); + virtual void setOldSettings(bool, const QString &, const SingleLineProperties &); + virtual void setNewSettings(bool, const QString &, const SingleLineProperties &); + + // attributs + private: + /// Conducteur modifie + Conducer *conducer; + /// anciennes proprietes + bool old_is_single_line; + QString old_conducer_text; + SingleLineProperties old_slp; + /// nouvelles proprietes + bool new_is_single_line; + QString new_conducer_text; + SingleLineProperties new_slp; + bool old_settings_set; + bool new_settings_set; +}; #endif diff --git a/diagramview.cpp b/diagramview.cpp index e7ab86412..1b4ba337a 100644 --- a/diagramview.cpp +++ b/diagramview.cpp @@ -618,8 +618,13 @@ void DiagramView::editConducer() { cpw -> setConducerText(edited_conducer -> text()); cpw -> setSingleLineProperties(edited_conducer -> singleLineProperties); + // initialise egalement l'objet UndoCommand correspondant + ChangeConducerPropertiesCommand *ccpc = new ChangeConducerPropertiesCommand(edited_conducer); + ccpc -> setOldSettings(edited_conducer -> isSingleLine(), edited_conducer -> text(), edited_conducer -> singleLineProperties); + // l'insere dans un dialogue QDialog conducer_dialog; + conducer_dialog.setWindowTitle(tr("\311diter les propri\351t\351s d'un conducteur")); QVBoxLayout *dialog_layout = new QVBoxLayout(&conducer_dialog); dialog_layout -> addWidget(cpw); QDialogButtonBox *dbb = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); @@ -629,9 +634,9 @@ void DiagramView::editConducer() { // execute le dialogue et met a jour le conducteur if (conducer_dialog.exec() == QDialog::Accepted) { - edited_conducer -> setSingleLine(cpw -> isSingleLine()); - edited_conducer -> setText(cpw -> conducerText()); - edited_conducer -> singleLineProperties = cpw -> singleLineProperties(); - edited_conducer -> update(); + ccpc -> setNewSettings(cpw -> isSingleLine(), cpw -> conducerText(), cpw -> singleLineProperties()); + diagram() -> undoStack().push(ccpc); + } else { + delete ccpc; } }