1*128277c9SStephan Aßmus /* 2*128277c9SStephan Aßmus * Copyright 2006, Haiku. 3*128277c9SStephan Aßmus * Distributed under the terms of the MIT License. 4*128277c9SStephan Aßmus * 5*128277c9SStephan Aßmus * Authors: 6*128277c9SStephan Aßmus * Stephan Aßmus <superstippi@gmx.de> 7*128277c9SStephan Aßmus */ 8*128277c9SStephan Aßmus 9*128277c9SStephan Aßmus #include "ChangePointCommand.h" 10*128277c9SStephan Aßmus 11*128277c9SStephan Aßmus #include <new> 12*128277c9SStephan Aßmus #include <stdio.h> 13*128277c9SStephan Aßmus 14*128277c9SStephan Aßmus #include "VectorPath.h" 15*128277c9SStephan Aßmus 16*128277c9SStephan Aßmus using std::nothrow; 17*128277c9SStephan Aßmus 18*128277c9SStephan Aßmus // constructor 19*128277c9SStephan Aßmus ChangePointCommand::ChangePointCommand(VectorPath* path, 20*128277c9SStephan Aßmus int32 index, 21*128277c9SStephan Aßmus const int32* selected, 22*128277c9SStephan Aßmus int32 count) 23*128277c9SStephan Aßmus : PathCommand(path), 24*128277c9SStephan Aßmus fIndex(index), 25*128277c9SStephan Aßmus fOldSelection(NULL), 26*128277c9SStephan Aßmus fOldSelectionCount(count) 27*128277c9SStephan Aßmus { 28*128277c9SStephan Aßmus if (fPath && !fPath->GetPointsAt(fIndex, fPoint, fPointIn, fPointOut, &fConnected)) 29*128277c9SStephan Aßmus fPath = NULL; 30*128277c9SStephan Aßmus if (fOldSelectionCount > 0 && selected) { 31*128277c9SStephan Aßmus fOldSelection = new (nothrow) int32[fOldSelectionCount]; 32*128277c9SStephan Aßmus memcpy(fOldSelection, selected, fOldSelectionCount * sizeof(int32)); 33*128277c9SStephan Aßmus } 34*128277c9SStephan Aßmus } 35*128277c9SStephan Aßmus 36*128277c9SStephan Aßmus // destructor 37*128277c9SStephan Aßmus ChangePointCommand::~ChangePointCommand() 38*128277c9SStephan Aßmus { 39*128277c9SStephan Aßmus delete[] fOldSelection; 40*128277c9SStephan Aßmus } 41*128277c9SStephan Aßmus 42*128277c9SStephan Aßmus // Perform 43*128277c9SStephan Aßmus status_t 44*128277c9SStephan Aßmus ChangePointCommand::Perform() 45*128277c9SStephan Aßmus { 46*128277c9SStephan Aßmus // path point is already changed 47*128277c9SStephan Aßmus return B_OK; 48*128277c9SStephan Aßmus } 49*128277c9SStephan Aßmus 50*128277c9SStephan Aßmus // Undo 51*128277c9SStephan Aßmus status_t 52*128277c9SStephan Aßmus ChangePointCommand::Undo() 53*128277c9SStephan Aßmus { 54*128277c9SStephan Aßmus status_t status = InitCheck(); 55*128277c9SStephan Aßmus if (status < B_OK) 56*128277c9SStephan Aßmus return status; 57*128277c9SStephan Aßmus 58*128277c9SStephan Aßmus // set the point to the remembered state and 59*128277c9SStephan Aßmus // save the previous state of the point 60*128277c9SStephan Aßmus BPoint point; 61*128277c9SStephan Aßmus BPoint pointIn; 62*128277c9SStephan Aßmus BPoint pointOut; 63*128277c9SStephan Aßmus bool connected; 64*128277c9SStephan Aßmus if (fPath->GetPointsAt(fIndex, point, pointIn, pointOut, &connected) 65*128277c9SStephan Aßmus && fPath->SetPoint(fIndex, fPoint, fPointIn, fPointOut, fConnected)) { 66*128277c9SStephan Aßmus // toggle the remembered settings 67*128277c9SStephan Aßmus fPoint = point; 68*128277c9SStephan Aßmus fPointIn = pointIn; 69*128277c9SStephan Aßmus fPointOut = pointOut; 70*128277c9SStephan Aßmus fConnected = connected; 71*128277c9SStephan Aßmus // restore old selection 72*128277c9SStephan Aßmus _Select(fOldSelection, fOldSelectionCount); 73*128277c9SStephan Aßmus } else { 74*128277c9SStephan Aßmus status = B_ERROR; 75*128277c9SStephan Aßmus } 76*128277c9SStephan Aßmus 77*128277c9SStephan Aßmus return status; 78*128277c9SStephan Aßmus } 79*128277c9SStephan Aßmus 80*128277c9SStephan Aßmus // Redo 81*128277c9SStephan Aßmus status_t 82*128277c9SStephan Aßmus ChangePointCommand::Redo() 83*128277c9SStephan Aßmus { 84*128277c9SStephan Aßmus status_t status = Undo(); 85*128277c9SStephan Aßmus if (status >= B_OK) 86*128277c9SStephan Aßmus _Select(&fIndex, 1); 87*128277c9SStephan Aßmus return status; 88*128277c9SStephan Aßmus } 89*128277c9SStephan Aßmus 90*128277c9SStephan Aßmus // GetName 91*128277c9SStephan Aßmus void 92*128277c9SStephan Aßmus ChangePointCommand::GetName(BString& name) 93*128277c9SStephan Aßmus { 94*128277c9SStephan Aßmus // name << _GetString(MODIFY_CONTROL_POINT, "Modify Control Point"); 95*128277c9SStephan Aßmus name << "Modify Control Point"; 96*128277c9SStephan Aßmus } 97