Commit 54e934c

Nick committed on
WIP Replacing undo/redo impl
commit 54e934c73515c73bb731411c4f5e83eef352518b parent 0c4ec0a
1 changed files +30−75
Modifiedtrackergrid.pas +30−75
@@ -5,7 +5,7 @@ unit TrackerGrid;
5 interface 5 interface
6 6
7 uses 7 uses
8 Classes, SysUtils, Controls, Graphics, Constants, LCLType, math, utils, 8 Classes, SysUtils, Controls, Graphics, Constants, LCLType, math, contnrs,
9 LCLIntf, LMessages, HugeDatatypes, ClipboardUtils; 9 LCLIntf, LMessages, HugeDatatypes, ClipboardUtils;
10 10
11 // TODO: Maybe read these from a config file 11 // TODO: Maybe read these from a config file
@@ -28,31 +28,15 @@ const
28 28
29 type 29 type
30 30
31 { TUndoState } 31 { TSavedPattern }
32 32
33 TOrderGroup = array[0..3] of Integer; 33 TSavedPattern = object
34 TPatternGroup = array[0..3] of Integer; 34 PatternNumber: Integer;
35 PUndoState = ^TUndoState;
36 TUndoState = record
37 Next, Prev: PUndoState;
38 Orders: TOrderGroup;
39 Patterns: TPatternGroup;
40 Pattern: TPattern; 35 Pattern: TPattern;
41 end; 36 end;
42 37
43 38 TUndoRedoAction = array[0..3] of TSavedPattern;
44 { TUndoStack } 39 TUndoRedoStack = TObjectStack;
45
46 TUndoStack = class(TObject)
47 Current: PUndoState;
48 public
49 constructor Create;
50 procedure PushState(
51 Patterns: TPatternGroup;
52 Orders: TOrderGroup);
53 function Rewind: PUndoState;
54 function StepForward: PUndoState;
55 end;
56 40
57 { TTrackerGrid } 41 { TTrackerGrid }
58 42
@@ -73,6 +57,9 @@ type
73 procedure DoPaste(var Msg: TLMessage); message LM_PASTE; 57 procedure DoPaste(var Msg: TLMessage); message LM_PASTE;
74 procedure DoCopy(var Msg: TLMessage); message LM_COPY; 58 procedure DoCopy(var Msg: TLMessage); message LM_COPY;
75 procedure DoCut(var Msg: TLMessage); message LM_CUT; 59 procedure DoCut(var Msg: TLMessage); message LM_CUT;
60 procedure SaveUndoState;
61 procedure DoUndo;
62 procedure DoRedo;
76 63
77 procedure RenderSelectedArea; 64 procedure RenderSelectedArea;
78 procedure ClampCursors; 65 procedure ClampCursors;
@@ -106,6 +93,8 @@ type
106 MouseButtonDown: Boolean; 93 MouseButtonDown: Boolean;
107 Selecting: Boolean; 94 Selecting: Boolean;
108 95
96 Performed, Recall: TUndoRedoStack;
97
109 DigitInputting: Boolean; 98 DigitInputting: Boolean;
110 99
111 FHighlightedRow: Integer; 100 FHighlightedRow: Integer;
@@ -124,59 +113,6 @@ type
124 113
125 implementation 114 implementation
126 115
127 { TUndoStack }
128
129 constructor TUndoStack.Create;
130 begin
131 Current := Nil;
132 end;
133
134 procedure TUndoStack.PushState(
135 Patterns: TPatternGroup;
136 Orders: TOrderGroup);
137 var
138 NewState, Temp: PUndoState;
139 begin
140 New(NewState);
141 NewState.Prev := Current;
142 NewState.Next := nil;
143 NewState.Patterns := Patterns;
144 NewState.Orders := Orders;
145
146 if Current = nil then
147 Current := NewState
148 else begin
149 while Current.Next <> nil do begin
150 Temp := Current^.Next;
151 Current^.Next := Current^.Next^.Next;
152 Dispose(Temp);
153 end;
154
155 Current^.Next := NewState;
156 Current := NewState;
157 end;
158 end;
159
160 function TUndoStack.Rewind: PUndoState;
161 begin
162 if (Current = nil) or (Current.Prev = nil) then
163 Result := nil
164 else begin
165 Current := Current^.Prev;
166 Result := Current;
167 end;
168 end;
169
170 function TUndoStack.StepForward: PUndoState;
171 begin
172 if (Current = nil) or (Current.Next = nil) then
173 Result := nil
174 else begin
175 Current := Current^.Next;
176 Result := Current;
177 end;
178 end;
179
180 { TTrackerGrid } 116 { TTrackerGrid }
181 117
182 constructor TTrackerGrid.Create( 118 constructor TTrackerGrid.Create(
@@ -185,6 +121,9 @@ constructor TTrackerGrid.Create(
185 begin 121 begin
186 inherited Create(AOwner); 122 inherited Create(AOwner);
187 123
124 Performed := TUndoRedoStack.Create;
125 Recall := TUndoRedoStack.Create;
126
188 DoubleBuffered := True; 127 DoubleBuffered := True;
189 ControlStyle := ControlStyle + [csCaptureMouse, csClickEvents, csDoubleClicks]; 128 ControlStyle := ControlStyle + [csCaptureMouse, csClickEvents, csDoubleClicks];
190 Self.Parent := Parent; 129 Self.Parent := Parent;
@@ -420,6 +359,22 @@ begin
420 end; 359 end;
421 360
422 procedure TTrackerGrid.DoCut(var Msg: TLMessage); 361 procedure TTrackerGrid.DoCut(var Msg: TLMessage);
362 begin
363 DoCopy(Msg);
364 EraseSelection;
365 end;
366
367 procedure TTrackerGrid.SaveUndoState;
368 begin
369
370 end;
371
372 procedure TTrackerGrid.DoUndo;
373 begin
374
375 end;
376
377 procedure TTrackerGrid.DoRedo;
423 begin 378 begin
424 379
425 end; 380 end;