xref: /haiku/src/apps/icon-o-matic/shape/commands/ChangePointCommand.cpp (revision 128277c969aa806add78941cd2972754c37a1572)
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