1/*
2 * Copyright 2006-2007, Haiku.
3 * Distributed under the terms of the MIT License.
4 *
5 * Authors:
6 *		Stephan A��mus <superstippi@gmx.de>
7 */
8
9#include "TransformCommand.h"
10
11#include <stdio.h>
12
13// constructor
14TransformCommand::TransformCommand(BPoint pivot,
15								   BPoint translation,
16								   double rotation,
17								   double xScale,
18								   double yScale,
19								   const char* actionName)
20	: Command(),
21	  fOldPivot(pivot),
22	  fOldTranslation(translation),
23	  fOldRotation(rotation),
24	  fOldXScale(xScale),
25	  fOldYScale(yScale),
26
27	  fNewPivot(pivot),
28	  fNewTranslation(translation),
29	  fNewRotation(rotation),
30	  fNewXScale(xScale),
31	  fNewYScale(yScale),
32
33	  fName(actionName)
34{
35}
36
37// constructor
38TransformCommand::TransformCommand(const char* actionName)
39	: Command(),
40	  fOldPivot(B_ORIGIN),
41	  fOldTranslation(B_ORIGIN),
42	  fOldRotation(0.0),
43	  fOldXScale(1.0),
44	  fOldYScale(1.0),
45
46	  fNewPivot(B_ORIGIN),
47	  fNewTranslation(B_ORIGIN),
48	  fNewRotation(0.0),
49	  fNewXScale(1.0),
50	  fNewYScale(1.0),
51
52	  fName(actionName)
53{
54}
55
56// destructor
57TransformCommand::~TransformCommand()
58{
59}
60
61// InitCheck
62status_t
63TransformCommand::InitCheck()
64{
65	if ((fNewPivot != fOldPivot
66		 || fNewTranslation != fOldTranslation
67		 || fNewRotation != fOldRotation
68		 || fNewXScale != fOldXScale
69		 || fNewYScale != fOldYScale))
70		return B_OK;
71
72	return B_NO_INIT;
73}
74
75// Perform
76status_t
77TransformCommand::Perform()
78{
79	// objects are already transformed
80	return B_OK;
81}
82
83// Undo
84status_t
85TransformCommand::Undo()
86{
87	_SetTransformation(fOldPivot,
88					   fOldTranslation,
89					   fOldRotation,
90					   fOldXScale,
91					   fOldYScale);
92	return B_OK;
93}
94
95// Redo
96status_t
97TransformCommand::Redo()
98{
99	_SetTransformation(fNewPivot,
100					   fNewTranslation,
101					   fNewRotation,
102					   fNewXScale,
103					   fNewYScale);
104	return B_OK;
105}
106
107// GetName
108void
109TransformCommand::GetName(BString& name)
110{
111	name << fName.String();
112}
113
114// SetNewTransformation
115void
116TransformCommand::SetNewTransformation(BPoint pivot,
117									   BPoint translation,
118									   double rotation,
119									   double xScale,
120									   double yScale)
121{
122	fNewPivot = pivot;
123	fNewTranslation = translation;
124	fNewRotation = rotation;
125	fNewXScale = xScale;
126	fNewYScale = yScale;
127}
128
129// SetNewTranslation
130void
131TransformCommand::SetNewTranslation(BPoint translation)
132{
133	// NOTE: convinience method for nudging
134	fNewTranslation = translation;
135}
136
137// SetName
138void
139TransformCommand::SetName(const char* actionName)
140{
141	fName.SetTo(actionName);
142}
143