Commit 0c4ec0a

Nick committed on
Work on undo/redo
commit 0c4ec0a914d62e86d2d41141f7d0fc29544380d4 parent 2acb13f
3 changed files +89−4
Modifiedtracker.lfm +4−4
@@ -1,11 +1,11 @@
1 object frmTracker: TfrmTracker 1 object frmTracker: TfrmTracker
2 Left = 791 2 Left = 666
3 Height = 1396 3 Height = 1396
4 Top = 460 4 Top = 161
5 Width = 2212 5 Width = 2212
6 Caption = 'hUGETracker' 6 Caption = 'hUGETracker'
7 ClientHeight = 1362 7 ClientHeight = 0
8 ClientWidth = 2212 8 ClientWidth = 0
9 DesignTimePPI = 168 9 DesignTimePPI = 168
10 Menu = MainMenu1 10 Menu = MainMenu1
11 OnCreate = FormCreate 11 OnCreate = FormCreate
Modifiedtracker.pas +5−0
@@ -752,6 +752,7 @@ var
752 SelectedSection: THeaderSection; 752 SelectedSection: THeaderSection;
753 Section: TCollectionItem; 753 Section: TCollectionItem;
754 P: TPoint; 754 P: TPoint;
755 I: Integer;
755 begin 756 begin
756 // Hack 757 // Hack
757 758
@@ -764,6 +765,9 @@ begin
764 765
765 SelectedSection := HeaderControl1.Sections[HeaderControl1.GetSectionAt(P)]; 766 SelectedSection := HeaderControl1.Sections[HeaderControl1.GetSectionAt(P)];
766 SelectedSection.ImageIndex := 1; 767 SelectedSection.ImageIndex := 1;
768
769 for I := 0 to 3 do
770 snd[I+1].ChannelOFF := HeaderControl1.Sections[I].ImageIndex = 0;
767 end; 771 end;
768 end; 772 end;
769 773
@@ -771,6 +775,7 @@ procedure TfrmTracker.HeaderControl1SectionClick(
771 HeaderControl: TCustomHeaderControl; Section: THeaderSection); 775 HeaderControl: TCustomHeaderControl; Section: THeaderSection);
772 begin 776 begin
773 Section.ImageIndex := (Section.ImageIndex + 1) mod 2; 777 Section.ImageIndex := (Section.ImageIndex + 1) mod 2;
778 snd[Section.OriginalIndex+1].ChannelOFF := Section.ImageIndex = 0;
774 end; 779 end;
775 780
776 procedure TfrmTracker.HeaderControl1SectionResize( 781 procedure TfrmTracker.HeaderControl1SectionResize(
Modifiedtrackergrid.pas +80−0
@@ -27,6 +27,33 @@ const
27 NUM_ROWS = 64; 27 NUM_ROWS = 64;
28 28
29 type 29 type
30
31 { TUndoState }
32
33 TOrderGroup = array[0..3] of Integer;
34 TPatternGroup = array[0..3] of Integer;
35 PUndoState = ^TUndoState;
36 TUndoState = record
37 Next, Prev: PUndoState;
38 Orders: TOrderGroup;
39 Patterns: TPatternGroup;
40 Pattern: TPattern;
41 end;
42
43
44 { TUndoStack }
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
30 { TTrackerGrid } 57 { TTrackerGrid }
31 58
32 TTrackerGrid = class(TCustomControl) 59 TTrackerGrid = class(TCustomControl)
@@ -97,6 +124,59 @@ type
97 124
98 implementation 125 implementation
99 126
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
100 { TTrackerGrid } 180 { TTrackerGrid }
101 181
102 constructor TTrackerGrid.Create( 182 constructor TTrackerGrid.Create(