xref: /haiku/src/apps/icon-o-matic/transformable/TransformCommand.cpp (revision a75a222b35d17cd83bc75253f3cd8e24a6a911f4)
10e684ccfSStephan Aßmus /*
27c4b3726SStephan 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
TransformCommand(BPoint pivot,BPoint translation,double rotation,double xScale,double yScale,const char * actionName)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,
19*a75a222bSZardshard 								   const char* actionName)
200e684ccfSStephan Aßmus 	: Command(),
210e684ccfSStephan Aßmus 	  fOldPivot(pivot),
220e684ccfSStephan Aßmus 	  fOldTranslation(translation),
230e684ccfSStephan Aßmus 	  fOldRotation(rotation),
240e684ccfSStephan Aßmus 	  fOldXScale(xScale),
250e684ccfSStephan Aßmus 	  fOldYScale(yScale),
260e684ccfSStephan Aßmus 
270e684ccfSStephan Aßmus 	  fNewPivot(pivot),
280e684ccfSStephan Aßmus 	  fNewTranslation(translation),
290e684ccfSStephan Aßmus 	  fNewRotation(rotation),
300e684ccfSStephan Aßmus 	  fNewXScale(xScale),
310e684ccfSStephan Aßmus 	  fNewYScale(yScale),
320e684ccfSStephan Aßmus 
33*a75a222bSZardshard 	  fName(actionName)
340e684ccfSStephan Aßmus {
350e684ccfSStephan Aßmus }
360e684ccfSStephan Aßmus 
370e684ccfSStephan Aßmus // constructor
TransformCommand(const char * actionName)38*a75a222bSZardshard TransformCommand::TransformCommand(const char* actionName)
390e684ccfSStephan Aßmus 	: Command(),
400e684ccfSStephan Aßmus 	  fOldPivot(B_ORIGIN),
410e684ccfSStephan Aßmus 	  fOldTranslation(B_ORIGIN),
420e684ccfSStephan Aßmus 	  fOldRotation(0.0),
430e684ccfSStephan Aßmus 	  fOldXScale(1.0),
440e684ccfSStephan Aßmus 	  fOldYScale(1.0),
450e684ccfSStephan Aßmus 
460e684ccfSStephan Aßmus 	  fNewPivot(B_ORIGIN),
470e684ccfSStephan Aßmus 	  fNewTranslation(B_ORIGIN),
480e684ccfSStephan Aßmus 	  fNewRotation(0.0),
490e684ccfSStephan Aßmus 	  fNewXScale(1.0),
500e684ccfSStephan Aßmus 	  fNewYScale(1.0),
510e684ccfSStephan Aßmus 
52*a75a222bSZardshard 	  fName(actionName)
530e684ccfSStephan Aßmus {
540e684ccfSStephan Aßmus }
550e684ccfSStephan Aßmus 
560e684ccfSStephan Aßmus // destructor
~TransformCommand()570e684ccfSStephan Aßmus TransformCommand::~TransformCommand()
580e684ccfSStephan Aßmus {
590e684ccfSStephan Aßmus }
600e684ccfSStephan Aßmus 
610e684ccfSStephan Aßmus // InitCheck
620e684ccfSStephan Aßmus status_t
InitCheck()630e684ccfSStephan Aßmus TransformCommand::InitCheck()
640e684ccfSStephan Aßmus {
650e684ccfSStephan Aßmus 	if ((fNewPivot != fOldPivot
660e684ccfSStephan Aßmus 		 || fNewTranslation != fOldTranslation
670e684ccfSStephan Aßmus 		 || fNewRotation != fOldRotation
680e684ccfSStephan Aßmus 		 || fNewXScale != fOldXScale
690e684ccfSStephan Aßmus 		 || fNewYScale != fOldYScale))
700e684ccfSStephan Aßmus 		return B_OK;
717c4b3726SStephan Aßmus 
720e684ccfSStephan Aßmus 	return B_NO_INIT;
730e684ccfSStephan Aßmus }
740e684ccfSStephan Aßmus 
750e684ccfSStephan Aßmus // Perform
760e684ccfSStephan Aßmus status_t
Perform()770e684ccfSStephan Aßmus TransformCommand::Perform()
780e684ccfSStephan Aßmus {
790e684ccfSStephan Aßmus 	// objects are already transformed
800e684ccfSStephan Aßmus 	return B_OK;
810e684ccfSStephan Aßmus }
820e684ccfSStephan Aßmus 
830e684ccfSStephan Aßmus // Undo
840e684ccfSStephan Aßmus status_t
Undo()850e684ccfSStephan Aßmus TransformCommand::Undo()
860e684ccfSStephan Aßmus {
8761b0e9e3SStephan Aßmus 	_SetTransformation(fOldPivot,
8861b0e9e3SStephan Aßmus 					   fOldTranslation,
8961b0e9e3SStephan Aßmus 					   fOldRotation,
9061b0e9e3SStephan Aßmus 					   fOldXScale,
9161b0e9e3SStephan Aßmus 					   fOldYScale);
927c4b3726SStephan Aßmus 	return B_OK;
930e684ccfSStephan Aßmus }
940e684ccfSStephan Aßmus 
950e684ccfSStephan Aßmus // Redo
960e684ccfSStephan Aßmus status_t
Redo()970e684ccfSStephan Aßmus TransformCommand::Redo()
980e684ccfSStephan Aßmus {
9961b0e9e3SStephan Aßmus 	_SetTransformation(fNewPivot,
10061b0e9e3SStephan Aßmus 					   fNewTranslation,
10161b0e9e3SStephan Aßmus 					   fNewRotation,
10261b0e9e3SStephan Aßmus 					   fNewXScale,
10361b0e9e3SStephan Aßmus 					   fNewYScale);
1047c4b3726SStephan Aßmus 	return B_OK;
1050e684ccfSStephan Aßmus }
1060e684ccfSStephan Aßmus 
1070e684ccfSStephan Aßmus // GetName
1080e684ccfSStephan Aßmus void
GetName(BString & name)1090e684ccfSStephan Aßmus TransformCommand::GetName(BString& name)
1100e684ccfSStephan Aßmus {
111*a75a222bSZardshard 	name << fName.String();
1120e684ccfSStephan Aßmus }
1130e684ccfSStephan Aßmus 
1140e684ccfSStephan Aßmus // SetNewTransformation
1150e684ccfSStephan Aßmus void
SetNewTransformation(BPoint pivot,BPoint translation,double rotation,double xScale,double yScale)1160e684ccfSStephan Aßmus TransformCommand::SetNewTransformation(BPoint pivot,
1170e684ccfSStephan Aßmus 									   BPoint translation,
1180e684ccfSStephan Aßmus 									   double rotation,
1190e684ccfSStephan Aßmus 									   double xScale,
1200e684ccfSStephan Aßmus 									   double yScale)
1210e684ccfSStephan Aßmus {
1220e684ccfSStephan Aßmus 	fNewPivot = pivot;
1230e684ccfSStephan Aßmus 	fNewTranslation = translation;
1240e684ccfSStephan Aßmus 	fNewRotation = rotation;
1250e684ccfSStephan Aßmus 	fNewXScale = xScale;
1260e684ccfSStephan Aßmus 	fNewYScale = yScale;
1270e684ccfSStephan Aßmus }
1280e684ccfSStephan Aßmus 
1290e684ccfSStephan Aßmus // SetNewTranslation
1300e684ccfSStephan Aßmus void
SetNewTranslation(BPoint translation)1310e684ccfSStephan Aßmus TransformCommand::SetNewTranslation(BPoint translation)
1320e684ccfSStephan Aßmus {
1330e684ccfSStephan Aßmus 	// NOTE: convinience method for nudging
1340e684ccfSStephan Aßmus 	fNewTranslation = translation;
1350e684ccfSStephan Aßmus }
1360e684ccfSStephan Aßmus 
1370e684ccfSStephan Aßmus // SetName
1380e684ccfSStephan Aßmus void
SetName(const char * actionName)139*a75a222bSZardshard TransformCommand::SetName(const char* actionName)
1400e684ccfSStephan Aßmus {
1410e684ccfSStephan Aßmus 	fName.SetTo(actionName);
1420e684ccfSStephan Aßmus }
143