Les modifications concernant la taille du schema sont desormais annulables

git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@143 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
xavierqet 2007-09-28 21:48:59 +00:00
parent d9d966e4e9
commit 0405ac447d
3 changed files with 103 additions and 9 deletions

View File

@ -421,3 +421,54 @@ void ChangeInsetCommand::undo() {
void ChangeInsetCommand::redo() {
diagram -> border_and_inset.importInset(new_inset);
}
/**
Constructeur
@param dia Schema modifie
@param parent QUndoCommand parent
*/
ChangeBorderCommand::ChangeBorderCommand(Diagram *dia, QUndoCommand *parent) :
QUndoCommand(QObject::tr("modifier les dimensions du sch\351ma"), parent),
diagram(dia),
columnsCountDifference(0),
columnsHeightDifference(0.0),
columnsWidthDifference(0.0),
headersHeightDifference(0.0)
{
}
/// Destructeur
ChangeBorderCommand::~ChangeBorderCommand() {
}
/**
Applique les changements au schema
@param coeff comme les changements s'expriment sous forme de nombres dont
il suffit d'inverser le signe pour les annuler, ces valeurs sont ici
multipliees par le coefficient passe en parametre avant d'etre appliquees.
Pour resumer : 1 pour refaire, -1 pour annuler.
*/
void ChangeBorderCommand::applyChanges(int coeff) {
// reference vers l'objet border_and_inset du schema
BorderInset &border = diagram -> border_and_inset;
if (columnsCountDifference) {
border.setNbColumns(border.nbColumn() + (columnsCountDifference * coeff));
}
if (columnsHeightDifference) {
border.setColumnsHeight(border.columnsHeight() + (columnsHeightDifference * coeff));
}
if (columnsWidthDifference) {
border.setColumnsWidth(border.columnsWidth() + (columnsWidthDifference * coeff));
}
if (headersHeightDifference) {
border.setColumnsHeaderHeight(border.columnsHeaderHeight() + (headersHeightDifference * coeff));
}
}
void ChangeBorderCommand::undo() {
applyChanges(-1);
}
void ChangeBorderCommand::redo() {
applyChanges(1);
}

View File

@ -253,11 +253,48 @@ class ChangeInsetCommand : public QUndoCommand {
// attributs
private:
/// DiagramTextItem modifie
/// Schema modifie
Diagram *diagram;
/// texte avant changement
/// proprietes avant changement
InsetProperties old_inset;
/// texte apres changement
/// proprietes apres changement
InsetProperties new_inset;
};
/**
Cette classe represente l'action de modifier :
-le nombre de colonnes d'un schema
-la hauteur des colonnes
-la largeur des colonnes
-la hauteur des en-tetes des colonnes
*/
class ChangeBorderCommand : public QUndoCommand {
// constructeurs, destructeur
public:
ChangeBorderCommand(Diagram *, QUndoCommand * = 0);
virtual ~ChangeBorderCommand();
private:
ChangeBorderCommand(const ChangeBorderCommand &);
// methodes
public:
virtual void undo();
virtual void redo();
private:
virtual void applyChanges(int = 1);
// attributs
private:
/// Diagram modifie
Diagram *diagram;
public:
/// Nombre de colonnes ajoutees / enlevees
int columnsCountDifference;
/// Delta pour la hauteur des colonnes
qreal columnsHeightDifference;
/// Delta pour la largeur des colonnes
qreal columnsWidthDifference;
/// Delta pour la hauteur des entetes des colonnes
qreal headersHeightDifference;
};
#endif

View File

@ -524,30 +524,36 @@ bool DiagramView::hasSelectedItems() {
Ajoute une colonne au schema.
*/
void DiagramView::addColumn() {
scene -> border_and_inset.addColumn();
ChangeBorderCommand *cbc = new ChangeBorderCommand(scene);
cbc -> columnsCountDifference = 1;
scene -> undoStack().push(cbc);
}
/**
Enleve une colonne au schema.
*/
void DiagramView::removeColumn() {
scene -> border_and_inset.removeColumn();
ChangeBorderCommand *cbc = new ChangeBorderCommand(scene);
cbc -> columnsCountDifference = -1;
scene -> undoStack().push(cbc);
}
/**
Agrandit le schema en hauteur
*/
void DiagramView::expand() {
qreal new_height = scene -> border_and_inset.columnsHeight() + 20.0;
scene -> border_and_inset.setColumnsHeight(new_height);
ChangeBorderCommand *cbc = new ChangeBorderCommand(scene);
cbc -> columnsHeightDifference = 20.0;
scene -> undoStack().push(cbc);
}
/**
Retrecit le schema en hauteur
*/
void DiagramView::shrink() {
qreal new_height = scene -> border_and_inset.columnsHeight() - 20.0;
scene -> border_and_inset.setColumnsHeight(new_height);
ChangeBorderCommand *cbc = new ChangeBorderCommand(scene);
cbc -> columnsHeightDifference = 20.0;
scene -> undoStack().push(cbc);
}
/**