Commit 6f89991

Nick committed on
Fixed a couple bugs, added right-click menu to trackergrid
commit 6f89991ba86a3769e09339297016c0a5e7c0ad1e parent 401bd65
10 changed files +190−37
ModifiedGBEmu.lpi +8−3
@@ -71,7 +71,7 @@
71 <ShowHintsForUnusedUnitsInMainSrc Value="True"/> 71 <ShowHintsForUnusedUnitsInMainSrc Value="True"/>
72 <ShowHintsForSenderNotUsed Value="True"/> 72 <ShowHintsForSenderNotUsed Value="True"/>
73 </Verbosity> 73 </Verbosity>
74 <CustomOptions Value="-dBorland -dVer150 -dDelphi7 -dCompiler6_Up -dPUREPASCAL -CfAVX2 -CpCOREAVX2 OpCOREAVX2 -Si -Sv"/> 74 <CustomOptions Value="-dBorland -dVer150 -dDelphi7 -dCompiler6_Up -dPUREPASCAL -CfAVX2 -CpCOREAVX2 OpCOREAVX2 -Si -Sv -dPRODUCTION"/>
75 </Other> 75 </Other>
76 </CompilerOptions> 76 </CompilerOptions>
77 </Item2> 77 </Item2>
@@ -127,7 +127,7 @@
127 <ShowHintsForUnusedUnitsInMainSrc Value="True"/> 127 <ShowHintsForUnusedUnitsInMainSrc Value="True"/>
128 <ShowHintsForSenderNotUsed Value="True"/> 128 <ShowHintsForSenderNotUsed Value="True"/>
129 </Verbosity> 129 </Verbosity>
130 <CustomOptions Value="-dBorland -dVer150 -dDelphi7 -dCompiler6_Up -dPUREPASCAL -CfAVX2 -CpCOREAVX2 OpCOREAVX2 -Si -Sv"/> 130 <CustomOptions Value="-dBorland -dVer150 -dDelphi7 -dCompiler6_Up -dPUREPASCAL -CfAVX2 -CpCOREAVX2 OpCOREAVX2 -Si -Sv -dPRODUCTION"/>
131 </Other> 131 </Other>
132 </CompilerOptions> 132 </CompilerOptions>
133 </Item3> 133 </Item3>
@@ -300,17 +300,22 @@
300 <Parsing> 300 <Parsing>
301 <SyntaxOptions> 301 <SyntaxOptions>
302 <CStyleOperator Value="False"/> 302 <CStyleOperator Value="False"/>
303 <IncludeAssertionCode Value="True"/>
303 <CPPInline Value="False"/> 304 <CPPInline Value="False"/>
304 </SyntaxOptions> 305 </SyntaxOptions>
305 </Parsing> 306 </Parsing>
306 <CodeGeneration> 307 <CodeGeneration>
308 <Checks>
309 <IOChecks Value="True"/>
310 <StackChecks Value="True"/>
311 </Checks>
307 <TargetCPU Value="i386"/> 312 <TargetCPU Value="i386"/>
308 <Optimizations> 313 <Optimizations>
309 <OptimizationLevel Value="0"/> 314 <OptimizationLevel Value="0"/>
310 </Optimizations> 315 </Optimizations>
311 </CodeGeneration> 316 </CodeGeneration>
312 <Other> 317 <Other>
313 <CustomOptions Value="-dBorland -dVer150 -dDelphi7 -dCompiler6_Up -dPUREPASCAL"/> 318 <CustomOptions Value="-dBorland -dVer150 -dDelphi7 -dCompiler6_Up -dPUREPASCAL -dDEVELOPMENT"/>
314 </Other> 319 </Other>
315 </CompilerOptions> 320 </CompilerOptions>
316 <Debugging> 321 <Debugging>
ModifiedGBEmu.lpr +15−1
@@ -5,7 +5,7 @@ program GBEmu;
5 uses 5 uses
6 {$ifdef unix} 6 {$ifdef unix}
7 cthreads, 7 cthreads,
8 cmem, // the c memory manager is on some systems much faster for multi-threading 8 // cmem, // the c memory manager is on some systems much faster for multi-threading
9 {$endif} 9 {$endif}
10 10
11 {$ifdef MSWINDOWS} 11 {$ifdef MSWINDOWS}
@@ -20,6 +20,10 @@ uses
20 // font includes here 20 // font includes here
21 {$endif} 21 {$endif}
22 22
23 {$IFDEF debug}
24 SysUtils,
25 {$ENDIF}
26
23 Forms, 27 Forms,
24 Interfaces, 28 Interfaces,
25 Tracker in 'Tracker.pas', 29 Tracker in 'Tracker.pas',
@@ -42,6 +46,16 @@ end;
42 {$endif} 46 {$endif}
43 47
44 begin 48 begin
49 {$IFDEF DEBUG}
50 // Assuming your build mode sets -dDEBUG in Project Options/Other when defining -gh
51 // This avoids interference when running a production/default build without -gh
52
53 // Set up -gh output for the Leakview package:
54 {if FileExists('heap.trc') then
55 DeleteFile('heap.trc');
56 SetHeapTraceOutput('heap.trc');}
57 {$ENDIF DEBUG}
58
45 { Before the LCL starts, embed Pixelite so users dont have to install it. 59 { Before the LCL starts, embed Pixelite so users dont have to install it.
46 Unfortunately there isn't really a cross-platform way to do it, so here's an 60 Unfortunately there isn't really a cross-platform way to do it, so here's an
47 ifdef mess. } 61 ifdef mess. }
Modifiedeffecteditor.lfm +3−3
@@ -1,7 +1,7 @@
1 object frmEffectEditor: TfrmEffectEditor 1 object frmEffectEditor: TfrmEffectEditor
2 Left = 583 2 Left = 621
3 Height = 416 3 Height = 416
4 Top = 421 4 Top = 389
5 Width = 684 5 Width = 684
6 BorderIcons = [biSystemMenu, biMinimize] 6 BorderIcons = [biSystemMenu, biMinimize]
7 BorderStyle = bsDialog 7 BorderStyle = bsDialog
@@ -59,7 +59,7 @@ object frmEffectEditor: TfrmEffectEditor
59 Height = 320 59 Height = 320
60 Top = 80 60 Top = 80
61 Width = 642 61 Width = 642
62 PageIndex = 2 62 PageIndex = 1
63 TabOrder = 1 63 TabOrder = 1
64 object OneParamPage: TPage 64 object OneParamPage: TPage
65 object OneParamTrackBar: TTrackBar 65 object OneParamTrackBar: TTrackBar
Modifiedeffecteditor.pas +1−1
@@ -192,7 +192,7 @@ end;
192 192
193 procedure TfrmEffectEditor.TwoParamsTrackBar2Change(Sender: TObject); 193 procedure TfrmEffectEditor.TwoParamsTrackBar2Change(Sender: TObject);
194 begin 194 begin
195 Cell^.EffectParams.Param1 := TwoParamsTrackBar2.Position; 195 Cell^.EffectParams.Param2 := TwoParamsTrackBar2.Position;
196 Value1.Caption := EffectToExplanation(Cell^.EffectCode, Cell^.EffectParams); 196 Value1.Caption := EffectToExplanation(Cell^.EffectCode, Cell^.EffectParams);
197 end; 197 end;
198 198
Modifiedinstruments.pas +1−1
@@ -12,7 +12,7 @@ type
12 TDutyType = 0..3; 12 TDutyType = 0..3;
13 TSweepType = (Up, Down); 13 TSweepType = (Up, Down);
14 TStepWidth = (Fifteen, Seven); 14 TStepWidth = (Fifteen, Seven);
15 TEnvelopeVolume = 0..63; 15 TEnvelopeVolume = 0..15;
16 TEnvelopeSweepAmount = 0..7; 16 TEnvelopeSweepAmount = 0..7;
17 17
18 TInstrument = packed record 18 TInstrument = packed record
Modifiedmainloop.pas +0−1
@@ -342,7 +342,6 @@ begin
342 if (n_ff04 > 255) then 342 if (n_ff04 > 255) then
343 begin 343 begin
344 Dec(m_iram[$ff04]); // DIVIDER [RW] Divider 344 Dec(m_iram[$ff04]); // DIVIDER [RW] Divider
345
346 // This register is incremented 16384 times 345 // This register is incremented 16384 times
347 // a second. Writing any value sets it to $00. 346 // a second. Writing any value sets it to $00.
348 347
Modifiedsong.pas +1−1
@@ -112,7 +112,7 @@ begin
112 Type_ := Square; 112 Type_ := Square;
113 Length := 0; 113 Length := 0;
114 LengthEnabled := False; 114 LengthEnabled := False;
115 InitialVolume := 63; 115 InitialVolume := High(TEnvelopeVolume);
116 VolSweepDirection := Down; 116 VolSweepDirection := Down;
117 VolSweepAmount := 0; 117 VolSweepAmount := 0;
118 118
Modifiedtracker.lfm +74−19
@@ -1,7 +1,7 @@
1 object frmTracker: TfrmTracker 1 object frmTracker: TfrmTracker
2 Left = 966 2 Left = 800
3 Height = 1250 3 Height = 1250
4 Top = 361 4 Top = 202
5 Width = 2067 5 Width = 2067
6 Caption = 'hUGETracker' 6 Caption = 'hUGETracker'
7 ClientHeight = 1216 7 ClientHeight = 1216
@@ -57,10 +57,10 @@ object frmTracker: TfrmTracker
57 Height = 820 57 Height = 820
58 Top = 0 58 Top = 0
59 Width = 1720 59 Width = 1720
60 ActivePage = InstrumentTabSheet 60 ActivePage = PatternTabSheet
61 Align = alClient 61 Align = alClient
62 ParentFont = False 62 ParentFont = False
63 TabIndex = 2 63 TabIndex = 1
64 TabOrder = 0 64 TabOrder = 0
65 object GeneralTabSheet: TTabSheet 65 object GeneralTabSheet: TTabSheet
66 Caption = 'General' 66 Caption = 'General'
@@ -1858,7 +1858,7 @@ object frmTracker: TfrmTracker
1858 end 1858 end
1859 object MainMenu1: TMainMenu 1859 object MainMenu1: TMainMenu
1860 Images = ImageList1 1860 Images = ImageList1
1861 left = 616 1861 left = 704
1862 top = 75 1862 top = 75
1863 object MenuItem1: TMenuItem 1863 object MenuItem1: TMenuItem
1864 Caption = 'File' 1864 Caption = 'File'
@@ -1948,6 +1948,7 @@ object frmTracker: TfrmTracker
1948 end 1948 end
1949 object DebugPlayNoteButton: TMenuItem 1949 object DebugPlayNoteButton: TMenuItem
1950 Caption = 'Debug play note' 1950 Caption = 'Debug play note'
1951 Visible = False
1951 OnClick = DebugPlayNoteButtonClick 1952 OnClick = DebugPlayNoteButtonClick
1952 end 1953 end
1953 object DebugShiteButton: TMenuItem 1954 object DebugShiteButton: TMenuItem
@@ -2062,7 +2063,7 @@ object frmTracker: TfrmTracker
2062 end 2063 end
2063 end 2064 end
2064 object ImageList1: TImageList 2065 object ImageList1: TImageList
2065 left = 233 2066 left = 168
2066 top = 81 2067 top = 81
2067 Bitmap = { 2068 Bitmap = {
2068 4C694E0000001000000010000000000000000000000000000000000000000000 2069 4C694E0000001000000010000000000000000000000000000000000000000000
@@ -4566,17 +4567,17 @@ object frmTracker: TfrmTracker
4566 end 4567 end
4567 object OpenDialog1: TOpenDialog 4568 object OpenDialog1: TOpenDialog
4568 Filter = 'hUGETracker Instruments|*.ugi' 4569 Filter = 'hUGETracker Instruments|*.ugi'
4569 left = 737 4570 left = 872
4570 top = 75 4571 top = 75
4571 end 4572 end
4572 object InstrumentSaveDialog: TSaveDialog 4573 object InstrumentSaveDialog: TSaveDialog
4573 Filter = 'hUGETracker Instruments|*.ugi' 4574 Filter = 'hUGETracker Instruments|*.ugi'
4574 left = 600 4575 left = 608
4575 top = 177 4576 top = 232
4576 end 4577 end
4577 object OrderEditPopup: TPopupMenu 4578 object OrderEditPopup: TPopupMenu
4578 left = 376 4579 left = 328
4579 top = 81 4580 top = 80
4580 object MenuItem17: TMenuItem 4581 object MenuItem17: TMenuItem
4581 Caption = 'Insert new row' 4582 Caption = 'Insert new row'
4582 Hint = 'Insert a new row filled with brand new patterns' 4583 Hint = 'Insert a new row filled with brand new patterns'
@@ -4607,8 +4608,8 @@ object frmTracker: TfrmTracker
4607 object ImageList2: TImageList 4608 object ImageList2: TImageList
4608 Height = 32 4609 Height = 32
4609 Width = 32 4610 Width = 32
4610 left = 233 4611 left = 192
4611 top = 168 4612 top = 184
4612 Bitmap = { 4613 Bitmap = {
4613 4C69020000002000000020000000000000000000000000000000000000000000 4614 4C69020000002000000020000000000000000000000000000000000000000000
4614 0000000000000000000000000000000000000000000000000000000000000000 4615 0000000000000000000000000000000000000000000000000000000000000000
@@ -4872,8 +4873,8 @@ object frmTracker: TfrmTracker
4872 object OscilloscopeUpdateTimer: TTimer 4873 object OscilloscopeUpdateTimer: TTimer
4873 Interval = 200 4874 Interval = 200
4874 OnTimer = OscilloscopeUpdateTimerTimer 4875 OnTimer = OscilloscopeUpdateTimerTimer
4875 left = 504 4876 left = 512
4876 top = 81 4877 top = 64
4877 end 4878 end
4878 object GBSSaveDialog: TSaveDialog 4879 object GBSSaveDialog: TSaveDialog
4879 Filter = 'Gameboy Soundtrack|*.gbs' 4880 Filter = 'Gameboy Soundtrack|*.gbs'
@@ -4887,13 +4888,67 @@ object frmTracker: TfrmTracker
4887 end 4888 end
4888 object GBSaveDialog: TSaveDialog 4889 object GBSaveDialog: TSaveDialog
4889 Filter = 'Gameboy ROM|*.GB' 4890 Filter = 'Gameboy ROM|*.GB'
4890 left = 457 4891 left = 480
4891 top = 184 4892 top = 177
4892 end 4893 end
4893 object NoteHaltTimer: TTimer 4894 object NoteHaltTimer: TTimer
4894 Enabled = False 4895 Enabled = False
4895 OnTimer = NoteHaltTimerTimer 4896 OnTimer = NoteHaltTimerTimer
4896 left = 345 4897 left = 328
4897 top = 177 4898 top = 200
4899 end
4900 object TrackerGridPopup: TPopupMenu
4901 left = 1093
4902 top = 191
4903 object TrackerPopupSelectAll: TMenuItem
4904 Caption = 'Select all'
4905 OnClick = TrackerPopupSelectAllClick
4906 end
4907 object TrackerPopupSelectChannel: TMenuItem
4908 Caption = 'Select channel'
4909 ShortCut = 16460
4910 OnClick = TrackerPopupSelectChannelClick
4911 end
4912 object MenuItem29: TMenuItem
4913 Caption = '-'
4914 end
4915 object TrackerPopupCut: TMenuItem
4916 Caption = 'Cut'
4917 ShortCut = 16472
4918 OnClick = TrackerPopupCutClick
4919 end
4920 object TrackerPopupCopy: TMenuItem
4921 Caption = 'Copy'
4922 ShortCut = 16451
4923 OnClick = TrackerPopupCopyClick
4924 end
4925 object TrackerPopupPaste: TMenuItem
4926 Caption = 'Paste'
4927 ShortCut = 16470
4928 OnClick = TrackerPopupPasteClick
4929 end
4930 object TrackerPopupFloodPaste: TMenuItem
4931 Caption = 'Flood paste'
4932 ShortCut = 8278
4933 OnClick = TrackerPopupFloodPasteClick
4934 end
4935 object TrackerPopupErase: TMenuItem
4936 Caption = 'Erase'
4937 ShortCut = 46
4938 OnClick = TrackerPopupEraseClick
4939 end
4940 object MenuItem27: TMenuItem
4941 Caption = '-'
4942 end
4943 object TrackerPopupUndo: TMenuItem
4944 Caption = 'Undo'
4945 ShortCut = 16474
4946 OnClick = TrackerPopupUndoClick
4947 end
4948 object TrackerPopupRedo: TMenuItem
4949 Caption = 'Redo'
4950 ShortCut = 16473
4951 OnClick = TrackerPopupRedoClick
4952 end
4898 end 4953 end
4899 end 4954 end
Modifiedtracker.pas +73−0
@@ -31,8 +31,20 @@ type
31 FontSizeToggleMenuItem: TMenuItem; 31 FontSizeToggleMenuItem: TMenuItem;
32 MenuItem25: TMenuItem; 32 MenuItem25: TMenuItem;
33 MenuItem26: TMenuItem; 33 MenuItem26: TMenuItem;
34 MenuItem27: TMenuItem;
35 TrackerPopupUndo: TMenuItem;
36 TrackerPopupRedo: TMenuItem;
37 TrackerPopupSelectAll: TMenuItem;
38 TrackerPopupSelectChannel: TMenuItem;
39 TrackerPopupCut: TMenuItem;
40 MenuItem29: TMenuItem;
41 TrackerPopupCopy: TMenuItem;
42 TrackerPopupPaste: TMenuItem;
43 TrackerPopupErase: TMenuItem;
44 TrackerPopupFloodPaste: TMenuItem;
34 MenuItem8: TMenuItem; 45 MenuItem8: TMenuItem;
35 NoteHaltTimer: TTimer; 46 NoteHaltTimer: TTimer;
47 TrackerGridPopup: TPopupMenu;
36 StartVolTrackbar: TTrackBar; 48 StartVolTrackbar: TTrackBar;
37 EnvChangeTrackbar: TTrackBar; 49 EnvChangeTrackbar: TTrackBar;
38 ShiftClockTrackbar: TTrackBar; 50 ShiftClockTrackbar: TTrackBar;
@@ -257,6 +269,15 @@ type
257 procedure ToolButton3Click(Sender: TObject); 269 procedure ToolButton3Click(Sender: TObject);
258 procedure ToolButton4Click(Sender: TObject); 270 procedure ToolButton4Click(Sender: TObject);
259 procedure ExportGBButtonClick(Sender: TObject); 271 procedure ExportGBButtonClick(Sender: TObject);
272 procedure TrackerPopupCopyClick(Sender: TObject);
273 procedure TrackerPopupCutClick(Sender: TObject);
274 procedure TrackerPopupEraseClick(Sender: TObject);
275 procedure TrackerPopupFloodPasteClick(Sender: TObject);
276 procedure TrackerPopupPasteClick(Sender: TObject);
277 procedure TrackerPopupRedoClick(Sender: TObject);
278 procedure TrackerPopupSelectAllClick(Sender: TObject);
279 procedure TrackerPopupSelectChannelClick(Sender: TObject);
280 procedure TrackerPopupUndoClick(Sender: TObject);
260 procedure TreeView1DblClick(Sender: TObject); 281 procedure TreeView1DblClick(Sender: TObject);
261 procedure WaveEditNumberSpinnerChange(Sender: TObject); 282 procedure WaveEditNumberSpinnerChange(Sender: TObject);
262 procedure WaveEditPaintBoxMouseDown(Sender: TObject; Button: TMouseButton; 283 procedure WaveEditPaintBoxMouseDown(Sender: TObject; Button: TMouseButton;
@@ -688,6 +709,8 @@ begin
688 // Fix the size of the channel headers 709 // Fix the size of the channel headers
689 for Section in HeaderControl1.Sections do 710 for Section in HeaderControl1.Sections do
690 (Section as THeaderSection).Width := TrackerGrid.ColumnWidth; 711 (Section as THeaderSection).Width := TrackerGrid.ColumnWidth;
712
713 TrackerGrid.PopupMenu := TrackerGridPopup;
691 end; 714 end;
692 715
693 procedure TfrmTracker.LoadInstrument(Instr: Integer); 716 procedure TfrmTracker.LoadInstrument(Instr: Integer);
@@ -951,6 +974,11 @@ begin
951 974
952 OptionsFile.WriteBool('hUGETracker', 'firstrun', True); 975 OptionsFile.WriteBool('hUGETracker', 'firstrun', True);
953 end; 976 end;
977
978 {$ifdef DEVELOPMENT}
979 DebugShiteButton.Visible := True;
980 DebugPlayNoteButton.Visible := True;
981 {$endif}
954 end; 982 end;
955 983
956 procedure TfrmTracker.FormKeyDown(Sender: TObject; var Key: Word; 984 procedure TfrmTracker.FormKeyDown(Sender: TObject; var Key: Word;
@@ -1534,6 +1562,51 @@ begin
1534 end; 1562 end;
1535 end; 1563 end;
1536 1564
1565 procedure TfrmTracker.TrackerPopupCopyClick(Sender: TObject);
1566 begin
1567 SendMessage(TrackerGrid.Handle, LM_COPY, 0, 0)
1568 end;
1569
1570 procedure TfrmTracker.TrackerPopupCutClick(Sender: TObject);
1571 begin
1572 SendMessage(TrackerGrid.Handle, LM_CUT, 0, 0)
1573 end;
1574
1575 procedure TfrmTracker.TrackerPopupEraseClick(Sender: TObject);
1576 begin
1577 TrackerGrid.EraseSelection
1578 end;
1579
1580 procedure TfrmTracker.TrackerPopupFloodPasteClick(Sender: TObject);
1581 begin
1582 TrackerGrid.DoRepeatPaste
1583 end;
1584
1585 procedure TfrmTracker.TrackerPopupPasteClick(Sender: TObject);
1586 begin
1587 SendMessage(TrackerGrid.Handle, LM_PASTE, 0, 0)
1588 end;
1589
1590 procedure TfrmTracker.TrackerPopupRedoClick(Sender: TObject);
1591 begin
1592 TrackerGrid.DoRedo
1593 end;
1594
1595 procedure TfrmTracker.TrackerPopupSelectAllClick(Sender: TObject);
1596 begin
1597 TrackerGrid.SelectAll
1598 end;
1599
1600 procedure TfrmTracker.TrackerPopupSelectChannelClick(Sender: TObject);
1601 begin
1602 TrackerGrid.SelectColumn
1603 end;
1604
1605 procedure TfrmTracker.TrackerPopupUndoClick(Sender: TObject);
1606 begin
1607 TrackerGrid.DoUndo
1608 end;
1609
1537 procedure TfrmTracker.TreeView1DblClick(Sender: TObject); 1610 procedure TfrmTracker.TreeView1DblClick(Sender: TObject);
1538 begin 1611 begin
1539 if TreeView1.Selected.Parent = InstrumentsNode then begin 1612 if TreeView1.Selected.Parent = InstrumentsNode then begin
Modifiedtrackergrid.pas +14−7
@@ -70,7 +70,6 @@ type
70 private 70 private
71 procedure PerformPaste(Paste: TSelection); 71 procedure PerformPaste(Paste: TSelection);
72 procedure PerformCopy; 72 procedure PerformCopy;
73 procedure DoRepeatPaste;
74 procedure DoPaste(var Msg: TLMessage); message LM_PASTE; 73 procedure DoPaste(var Msg: TLMessage); message LM_PASTE;
75 procedure DoCopy(var Msg: TLMessage); message LM_COPY; 74 procedure DoCopy(var Msg: TLMessage); message LM_COPY;
76 procedure DoCut(var Msg: TLMessage); message LM_CUT; 75 procedure DoCut(var Msg: TLMessage); message LM_CUT;
@@ -134,9 +133,11 @@ type
134 procedure ClearAt(SelectionPos: TSelectionPos); 133 procedure ClearAt(SelectionPos: TSelectionPos);
135 134
136 procedure SelectAll; 135 procedure SelectAll;
136 procedure SelectColumn;
137 procedure EraseSelection; 137 procedure EraseSelection;
138 procedure DoUndo; 138 procedure DoUndo;
139 procedure DoRedo; 139 procedure DoRedo;
140 procedure DoRepeatPaste;
140 141
141 constructor Create( 142 constructor Create(
142 AOwner: TComponent; 143 AOwner: TComponent;
@@ -279,6 +280,7 @@ procedure TTrackerGrid.MouseDown(Button: TMouseButton; Shift: TShiftState; X,
279 Y: Integer); 280 Y: Integer);
280 begin 281 begin
281 inherited MouseDown(Button, Shift, X, Y); 282 inherited MouseDown(Button, Shift, X, Y);
283 if (Button = mbRight) and Selecting then Exit;
282 284
283 if Button = mbLeft then 285 if Button = mbLeft then
284 MouseButtonDown := True; 286 MouseButtonDown := True;
@@ -356,12 +358,7 @@ begin
356 VK_A: TransposeSelection(-1); 358 VK_A: TransposeSelection(-1);
357 VK_Z: DoUndo; 359 VK_Z: DoUndo;
358 VK_Y: DoRedo; 360 VK_Y: DoRedo;
359 VK_L: begin 361 VK_L: SelectColumn;
360 Cursor.Y := 0;
361 Other.Y := High(TPattern);
362 Cursor.SelectedPart := Low(TCellPart);
363 Other.SelectedPart := High(TCellPart);
364 end;
365 end; 362 end;
366 363
367 if ssShift in Shift then 364 if ssShift in Shift then
@@ -1017,6 +1014,16 @@ begin
1017 Invalidate; 1014 Invalidate;
1018 end; 1015 end;
1019 1016
1017 procedure TTrackerGrid.SelectColumn;
1018 begin
1019 Cursor.Y := 0;
1020 Other.Y := High(TPattern);
1021 Cursor.SelectedPart := Low(TCellPart);
1022 Other.SelectedPart := High(TCellPart);
1023
1024 Invalidate;
1025 end;
1026
1020 procedure TTrackerGrid.LoadPattern(Idx: Integer; PatternNumber: Integer); 1027 procedure TTrackerGrid.LoadPattern(Idx: Integer; PatternNumber: Integer);
1021 begin 1028 begin
1022 Patterns[Idx] := PatternMap.GetOrCreateNew(PatternNumber); 1029 Patterns[Idx] := PatternMap.GetOrCreateNew(PatternNumber);