1/* 2 * Copyright 2006, Haiku. All rights reserved. 3 * Distributed under the terms of the MIT License. 4 * 5 * Authors: 6 * Stephan A��mus <superstippi@gmx.de> 7 */ 8 9#include "ResetTransformationCommand.h" 10 11#include <new> 12#include <stdio.h> 13 14#include <Catalog.h> 15#include <Locale.h> 16#include <StringFormat.h> 17 18#include "ChannelTransform.h" 19 20 21#undef B_TRANSLATION_CONTEXT 22#define B_TRANSLATION_CONTEXT "Icon-O-Matic-ResetTransformationCmd" 23 24 25using std::nothrow; 26 27// constructor 28ResetTransformationCommand::ResetTransformationCommand( 29 Transformable** const objects, 30 int32 count) 31 : Command(), 32 fObjects(objects && count > 0 ? 33 new (nothrow) Transformable*[count] : NULL), 34 fOriginals(objects && count > 0 ? 35 new (nothrow) double[ 36 count * Transformable::matrix_size] : NULL), 37 fCount(count) 38{ 39 if (!fObjects || !fOriginals) 40 return; 41 42 memcpy(fObjects, objects, fCount * sizeof(Transformable*)); 43 44 int32 matrixSize = Transformable::matrix_size; 45 for (int32 i = 0; i < fCount; i++) { 46 fObjects[i]->StoreTo(&fOriginals[matrixSize * i]); 47 } 48} 49 50// destructor 51ResetTransformationCommand::~ResetTransformationCommand() 52{ 53 delete[] fObjects; 54 delete[] fOriginals; 55} 56 57// InitCheck 58status_t 59ResetTransformationCommand::InitCheck() 60{ 61 return fObjects && fOriginals ? B_OK : B_NO_INIT; 62} 63 64// Perform 65status_t 66ResetTransformationCommand::Perform() 67{ 68 // reset transformations 69 for (int32 i = 0; i < fCount; i++) { 70 if (fObjects[i]) 71 fObjects[i]->Reset(); 72 } 73 return B_OK; 74} 75 76// Undo 77status_t 78ResetTransformationCommand::Undo() 79{ 80 // reset transformations 81 int32 matrixSize = Transformable::matrix_size; 82 for (int32 i = 0; i < fCount; i++) { 83 if (fObjects[i]) 84 fObjects[i]->LoadFrom(&fOriginals[i * matrixSize]); 85 } 86 return B_OK; 87} 88 89// GetName 90void 91ResetTransformationCommand::GetName(BString& name) 92{ 93 static BStringFormat format(B_TRANSLATE("Reset {0, plural, " 94 "one{transformation} other{transformations}}")); 95 format.Format(name, fCount); 96} 97