xref: /haiku/src/apps/icon-o-matic/transformable/TransformCommand.cpp (revision 7c4b3726d9477810a630f9c0d0604a36473df559)
10e684ccfSStephan Aßmus /*
2*7c4b3726SStephan Aßmus  * Copyright 2006-2007, Haiku.
30e684ccfSStephan Aßmus  * Distributed under the terms of the MIT License.
40e684ccfSStephan Aßmus  *
50e684ccfSStephan Aßmus  * Authors:
60e684ccfSStephan Aßmus  *		Stephan Aßmus <superstippi@gmx.de>
70e684ccfSStephan Aßmus  */
80e684ccfSStephan Aßmus 
90e684ccfSStephan Aßmus #include "TransformCommand.h"
100e684ccfSStephan Aßmus 
110e684ccfSStephan Aßmus #include <stdio.h>
120e684ccfSStephan Aßmus 
130e684ccfSStephan Aßmus // constructor
140e684ccfSStephan Aßmus TransformCommand::TransformCommand(BPoint pivot,
150e684ccfSStephan Aßmus 								   BPoint translation,
160e684ccfSStephan Aßmus 								   double rotation,
170e684ccfSStephan Aßmus 								   double xScale,
180e684ccfSStephan Aßmus 								   double yScale,
190e684ccfSStephan Aßmus 								   const char* actionName,
200e684ccfSStephan Aßmus 								   uint32 nameIndex)
210e684ccfSStephan Aßmus 	: Command(),
220e684ccfSStephan Aßmus 	  fOldPivot(pivot),
230e684ccfSStephan Aßmus 	  fOldTranslation(translation),
240e684ccfSStephan Aßmus 	  fOldRotation(rotation),
250e684ccfSStephan Aßmus 	  fOldXScale(xScale),
260e684ccfSStephan Aßmus 	  fOldYScale(yScale),
270e684ccfSStephan Aßmus 
280e684ccfSStephan Aßmus 	  fNewPivot(pivot),
290e684ccfSStephan Aßmus 	  fNewTranslation(translation),
300e684ccfSStephan Aßmus 	  fNewRotation(rotation),
310e684ccfSStephan Aßmus 	  fNewXScale(xScale),
320e684ccfSStephan Aßmus 	  fNewYScale(yScale),
330e684ccfSStephan Aßmus 
340e684ccfSStephan Aßmus 	  fName(actionName),
350e684ccfSStephan Aßmus 	  fNameIndex(nameIndex)
360e684ccfSStephan Aßmus {
370e684ccfSStephan Aßmus }
380e684ccfSStephan Aßmus 
390e684ccfSStephan Aßmus // constructor
400e684ccfSStephan Aßmus TransformCommand::TransformCommand(const char* actionName,
410e684ccfSStephan Aßmus 								   uint32 nameIndex)
420e684ccfSStephan Aßmus 	: Command(),
430e684ccfSStephan Aßmus 	  fOldPivot(B_ORIGIN),
440e684ccfSStephan Aßmus 	  fOldTranslation(B_ORIGIN),
450e684ccfSStephan Aßmus 	  fOldRotation(0.0),
460e684ccfSStephan Aßmus 	  fOldXScale(1.0),
470e684ccfSStephan Aßmus 	  fOldYScale(1.0),
480e684ccfSStephan Aßmus 
490e684ccfSStephan Aßmus 	  fNewPivot(B_ORIGIN),
500e684ccfSStephan Aßmus 	  fNewTranslation(B_ORIGIN),
510e684ccfSStephan Aßmus 	  fNewRotation(0.0),
520e684ccfSStephan Aßmus 	  fNewXScale(1.0),
530e684ccfSStephan Aßmus 	  fNewYScale(1.0),
540e684ccfSStephan Aßmus 
550e684ccfSStephan Aßmus 	  fName(actionName),
560e684ccfSStephan Aßmus 	  fNameIndex(nameIndex)
570e684ccfSStephan Aßmus {
580e684ccfSStephan Aßmus }
590e684ccfSStephan Aßmus 
600e684ccfSStephan Aßmus // destructor
610e684ccfSStephan Aßmus TransformCommand::~TransformCommand()
620e684ccfSStephan Aßmus {
630e684ccfSStephan Aßmus }
640e684ccfSStephan Aßmus 
650e684ccfSStephan Aßmus // InitCheck
660e684ccfSStephan Aßmus status_t
670e684ccfSStephan Aßmus TransformCommand::InitCheck()
680e684ccfSStephan Aßmus {
690e684ccfSStephan Aßmus 	if ((fNewPivot != fOldPivot
700e684ccfSStephan Aßmus 		 || fNewTranslation != fOldTranslation
710e684ccfSStephan Aßmus 		 || fNewRotation != fOldRotation
720e684ccfSStephan Aßmus 		 || fNewXScale != fOldXScale
730e684ccfSStephan Aßmus 		 || fNewYScale != fOldYScale))
740e684ccfSStephan Aßmus 		return B_OK;
75*7c4b3726SStephan Aßmus 
760e684ccfSStephan Aßmus 	return B_NO_INIT;
770e684ccfSStephan Aßmus }
780e684ccfSStephan Aßmus 
790e684ccfSStephan Aßmus // Perform
800e684ccfSStephan Aßmus status_t
810e684ccfSStephan Aßmus TransformCommand::Perform()
820e684ccfSStephan Aßmus {
830e684ccfSStephan Aßmus 	// objects are already transformed
840e684ccfSStephan Aßmus 	return B_OK;
850e684ccfSStephan Aßmus }
860e684ccfSStephan Aßmus 
870e684ccfSStephan Aßmus // Undo
880e684ccfSStephan Aßmus status_t
890e684ccfSStephan Aßmus TransformCommand::Undo()
900e684ccfSStephan Aßmus {
9161b0e9e3SStephan Aßmus 	_SetTransformation(fOldPivot,
9261b0e9e3SStephan Aßmus 					   fOldTranslation,
9361b0e9e3SStephan Aßmus 					   fOldRotation,
9461b0e9e3SStephan Aßmus 					   fOldXScale,
9561b0e9e3SStephan Aßmus 					   fOldYScale);
96*7c4b3726SStephan Aßmus 	return B_OK;
970e684ccfSStephan Aßmus }
980e684ccfSStephan Aßmus 
990e684ccfSStephan Aßmus // Redo
1000e684ccfSStephan Aßmus status_t
1010e684ccfSStephan Aßmus TransformCommand::Redo()
1020e684ccfSStephan Aßmus {
10361b0e9e3SStephan Aßmus 	_SetTransformation(fNewPivot,
10461b0e9e3SStephan Aßmus 					   fNewTranslation,
10561b0e9e3SStephan Aßmus 					   fNewRotation,
10661b0e9e3SStephan Aßmus 					   fNewXScale,
10761b0e9e3SStephan Aßmus 					   fNewYScale);
108*7c4b3726SStephan Aßmus 	return B_OK;
1090e684ccfSStephan Aßmus }
1100e684ccfSStephan Aßmus 
1110e684ccfSStephan Aßmus // GetName
1120e684ccfSStephan Aßmus void
1130e684ccfSStephan Aßmus TransformCommand::GetName(BString& name)
1140e684ccfSStephan Aßmus {
1150e684ccfSStephan Aßmus 	name << _GetString(fNameIndex, fName.String());
1160e684ccfSStephan Aßmus }
1170e684ccfSStephan Aßmus 
1180e684ccfSStephan Aßmus // SetNewTransformation
1190e684ccfSStephan Aßmus void
1200e684ccfSStephan Aßmus TransformCommand::SetNewTransformation(BPoint pivot,
1210e684ccfSStephan Aßmus 									   BPoint translation,
1220e684ccfSStephan Aßmus 									   double rotation,
1230e684ccfSStephan Aßmus 									   double xScale,
1240e684ccfSStephan Aßmus 									   double yScale)
1250e684ccfSStephan Aßmus {
1260e684ccfSStephan Aßmus 	fNewPivot = pivot;
1270e684ccfSStephan Aßmus 	fNewTranslation = translation;
1280e684ccfSStephan Aßmus 	fNewRotation = rotation;
1290e684ccfSStephan Aßmus 	fNewXScale = xScale;
1300e684ccfSStephan Aßmus 	fNewYScale = yScale;
1310e684ccfSStephan Aßmus }
1320e684ccfSStephan Aßmus 
1330e684ccfSStephan Aßmus // SetNewTranslation
1340e684ccfSStephan Aßmus void
1350e684ccfSStephan Aßmus TransformCommand::SetNewTranslation(BPoint translation)
1360e684ccfSStephan Aßmus {
1370e684ccfSStephan Aßmus 	// NOTE: convinience method for nudging
1380e684ccfSStephan Aßmus 	fNewTranslation = translation;
1390e684ccfSStephan Aßmus }
1400e684ccfSStephan Aßmus 
1410e684ccfSStephan Aßmus // SetName
1420e684ccfSStephan Aßmus void
1430e684ccfSStephan Aßmus TransformCommand::SetName(const char* actionName, uint32 nameIndex)
1440e684ccfSStephan Aßmus {
1450e684ccfSStephan Aßmus 	fName.SetTo(actionName);
1460e684ccfSStephan Aßmus 	fNameIndex = nameIndex;
1470e684ccfSStephan Aßmus }
1480e684ccfSStephan Aßmus 
149