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
This commit is contained in:
xavierqet 2007-10-03 15:51:04 +00:00
parent eb3ed0f99a
commit bb00094c0a
4 changed files with 87 additions and 4 deletions

View File

@ -1024,6 +1024,7 @@ QString Conducer::text() const {
*/
void Conducer::setText(const QString &t) {
text_item -> setPlainText(t);
text_item -> previous_text = t;
}

View File

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

View File

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

View File

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