Commit e02d6dd

Nick committed on
WIP adding more shortcuts for #15
commit e02d6dd3a9edf990375fd45ae2638b213dbb4d2c parent 98245f0
4 changed files +234−77
Modifiedeffecteditor.pas +1−1
@@ -12,7 +12,7 @@ type
12 12
13 { TCheckBoxHelper } 13 { TCheckBoxHelper }
14 14
15 // What a hack. 15 // Hack, or elegant? You decide.
16 TCheckBoxHelper = class helper for TCheckBox 16 TCheckBoxHelper = class helper for TCheckBox
17 procedure SetCheckedWithoutClick(AChecked: Boolean); 17 procedure SetCheckedWithoutClick(AChecked: Boolean);
18 end; 18 end;
Modifiedtracker.lfm +75−19
@@ -1,7 +1,7 @@
1 object frmTracker: TfrmTracker 1 object frmTracker: TfrmTracker
2 Left = 1811 2 Left = 1459
3 Height = 687 3 Height = 687
4 Top = 297 4 Top = 339
5 Width = 1145 5 Width = 1145
6 AllowDropFiles = True 6 AllowDropFiles = True
7 Caption = 'hUGETracker' 7 Caption = 'hUGETracker'
@@ -9,7 +9,6 @@ object frmTracker: TfrmTracker
9 ClientWidth = 1145 9 ClientWidth = 1145
10 KeyPreview = True 10 KeyPreview = True
11 Menu = MainMenu1 11 Menu = MainMenu1
12 OnClose = FormClose
13 OnCloseQuery = FormCloseQuery 12 OnCloseQuery = FormCloseQuery
14 OnCreate = FormCreate 13 OnCreate = FormCreate
15 OnDropFiles = FormDropFiles 14 OnDropFiles = FormDropFiles
@@ -1594,7 +1593,6 @@ object frmTracker: TfrmTracker
1594 Width = 1145 1593 Width = 1145
1595 Align = alTop 1594 Align = alTop
1596 BevelOuter = bvNone 1595 BevelOuter = bvNone
1597 Caption = 'Hides if Scopes Off'
1598 ClientHeight = 64 1596 ClientHeight = 64
1599 ClientWidth = 1145 1597 ClientWidth = 1145
1600 ParentFont = False 1598 ParentFont = False
@@ -1740,19 +1738,13 @@ object frmTracker: TfrmTracker
1740 end 1738 end
1741 object ToolButton2: TToolButton 1739 object ToolButton2: TToolButton
1742 Left = 147 1740 Left = 147
1743 Hint = 'Begin playback from the cursor'
1744 Top = 0 1741 Top = 0
1745 Caption = '▶️ Cursor' 1742 Action = PlayCursorAction
1746 ImageIndex = 75
1747 OnClick = ToolButton2Click
1748 end 1743 end
1749 object ToolButton4: TToolButton 1744 object ToolButton4: TToolButton
1750 Left = 221 1745 Left = 221
1751 Hint = 'Stop playback'
1752 Top = 0 1746 Top = 0
1753 Caption = '⏹ Stop' 1747 Action = StopAction
1754 ImageIndex = 73
1755 OnClick = ToolButton4Click
1756 end 1748 end
1757 object ExportGBButton: TToolButton 1749 object ExportGBButton: TToolButton
1758 Left = 291 1750 Left = 291
@@ -1866,11 +1858,8 @@ object frmTracker: TfrmTracker
1866 end 1858 end
1867 object ToolButton3: TToolButton 1859 object ToolButton3: TToolButton
1868 Left = 84 1860 Left = 84
1869 Hint = 'Begin playback from the cursor'
1870 Top = 0 1861 Top = 0
1871 Caption = '▶️ Start' 1862 Action = PlayStartAction
1872 ImageIndex = 74
1873 OnClick = ToolButton3Click
1874 end 1863 end
1875 object ExportGBSButton: TToolButton 1864 object ExportGBSButton: TToolButton
1876 Left = 372 1865 Left = 372
@@ -1915,7 +1904,6 @@ object frmTracker: TfrmTracker
1915 end 1904 end
1916 object MenuItem13: TMenuItem 1905 object MenuItem13: TMenuItem
1917 Action = FileSaveAs1 1906 Action = FileSaveAs1
1918 OnClick = MenuItem13Click
1919 end 1907 end
1920 object MenuItem4: TMenuItem 1908 object MenuItem4: TMenuItem
1921 Caption = '-' 1909 Caption = '-'
@@ -2014,7 +2002,7 @@ object frmTracker: TfrmTracker
2014 OnClick = DebugShiteButtonClick 2002 OnClick = DebugShiteButtonClick
2015 end 2003 end
2016 end 2004 end
2017 object ActionList1: TActionList 2005 object MenuBarActionList: TActionList
2018 Images = ImageList1 2006 Images = ImageList1
2019 left = 104 2007 left = 104
2020 top = 72 2008 top = 72
@@ -2101,7 +2089,6 @@ object frmTracker: TfrmTracker
2101 DisableIfNoHandler = False 2089 DisableIfNoHandler = False
2102 Hint = 'Delete' 2090 Hint = 'Delete'
2103 ImageIndex = 13 2091 ImageIndex = 13
2104 OnExecute = EditDelete1Execute
2105 ShortCut = 46 2092 ShortCut = 46
2106 end 2093 end
2107 object EditSelectAll1: TEditSelectAll 2094 object EditSelectAll1: TEditSelectAll
@@ -5245,4 +5232,73 @@ object frmTracker: TfrmTracker
5245 OnClick = MenuItem38Click 5232 OnClick = MenuItem38Click
5246 end 5233 end
5247 end 5234 end
5235 object ShortcutsActionList: TActionList
5236 Images = ImageList1
5237 left = 208
5238 top = 36
5239 object PlayStartAction: TAction
5240 Caption = '▶️ Start'
5241 DisableIfNoHandler = False
5242 ImageIndex = 74
5243 OnExecute = PlayStartActionExecute
5244 SecondaryShortCuts.Strings = (
5245 'F5'
5246 )
5247 ShortCut = 8205
5248 end
5249 object PlayCursorAction: TAction
5250 Caption = '▶️ Cursor'
5251 ImageIndex = 74
5252 OnExecute = PlayCursorActionExecute
5253 SecondaryShortCuts.Strings = (
5254 'F6'
5255 )
5256 ShortCut = 16397
5257 end
5258 object PlayOrderAction: TAction
5259 Caption = '▶️ Order'
5260 ImageIndex = 74
5261 OnExecute = PlayOrderActionExecute
5262 SecondaryShortCuts.Strings = (
5263 'F7'
5264 )
5265 ShortCut = 13
5266 end
5267 object StopAction: TAction
5268 Caption = '⏹ Stop'
5269 ImageIndex = 73
5270 OnExecute = StopActionExecute
5271 SecondaryShortCuts.Strings = (
5272 'F8'
5273 )
5274 ShortCut = 27
5275 end
5276 object InsertRowAction: TAction
5277 Caption = 'Insert Row'
5278 OnExecute = InsertRowActionExecute
5279 OnUpdate = InsertRowActionUpdate
5280 ShortCut = 45
5281 end
5282 object InsertRowForAllAction: TAction
5283 Caption = 'InsertRowForAllAction'
5284 OnExecute = InsertRowForAllActionExecute
5285 OnUpdate = InsertRowForAllActionUpdate
5286 SecondaryShortCuts.Strings = (
5287 'Shift+Ins'
5288 )
5289 ShortCut = 16429
5290 end
5291 object DeleteRowAction: TAction
5292 Caption = 'DeleteRowAction'
5293 OnExecute = DeleteRowActionExecute
5294 OnUpdate = DeleteRowActionUpdate
5295 ShortCut = 8
5296 end
5297 object DeleteRowForAllAction: TAction
5298 Caption = 'DeleteRowForAllAction'
5299 OnExecute = DeleteRowForAllActionExecute
5300 OnUpdate = DeleteRowForAllActionUpdate
5301 ShortCut = 16392
5302 end
5303 end
5248 end 5304 end
Modifiedtracker.pas +97−57
@@ -16,6 +16,15 @@ type
16 { TfrmTracker } 16 { TfrmTracker }
17 17
18 TfrmTracker = class(TForm) 18 TfrmTracker = class(TForm)
19 DeleteRowAction: TAction;
20 DeleteRowForAllAction: TAction;
21 InsertRowForAllAction: TAction;
22 InsertRowAction: TAction;
23 StopAction: TAction;
24 PlayOrderAction: TAction;
25 PlayCursorAction: TAction;
26 PlayStartAction: TAction;
27 ShortcutsActionList: TActionList;
19 Button1: TButton; 28 Button1: TButton;
20 MenuItem37: TMenuItem; 29 MenuItem37: TMenuItem;
21 MenuItem38: TMenuItem; 30 MenuItem38: TMenuItem;
@@ -114,7 +123,7 @@ type
114 PasteAction: TAction; 123 PasteAction: TAction;
115 CopyAction: TAction; 124 CopyAction: TAction;
116 HelpLookupManual: TAction; 125 HelpLookupManual: TAction;
117 ActionList1: TActionList; 126 MenuBarActionList: TActionList;
118 EditCopy1: TEditCopy; 127 EditCopy1: TEditCopy;
119 EditDelete1: TEditDelete; 128 EditDelete1: TEditDelete;
120 EditPaste1: TEditPaste; 129 EditPaste1: TEditPaste;
@@ -225,15 +234,23 @@ type
225 TreeView1: TTreeView; 234 TreeView1: TTreeView;
226 TrackerGrid: TTrackerGrid; 235 TrackerGrid: TTrackerGrid;
227 procedure Button1Click(Sender: TObject); 236 procedure Button1Click(Sender: TObject);
237 procedure DeleteRowActionExecute(Sender: TObject);
238 procedure DeleteRowActionUpdate(Sender: TObject);
239 procedure DeleteRowForAllActionExecute(Sender: TObject);
240 procedure DeleteRowForAllActionUpdate(Sender: TObject);
228 procedure Duty1VisualizerClick(Sender: TObject); 241 procedure Duty1VisualizerClick(Sender: TObject);
229 procedure EditDelete1Execute(Sender: TObject);
230 procedure FileSaveAs1BeforeExecute(Sender: TObject); 242 procedure FileSaveAs1BeforeExecute(Sender: TObject);
231 procedure FormCloseQuery(Sender: TObject; var CanClose: boolean); 243 procedure FormCloseQuery(Sender: TObject; var CanClose: boolean);
232 procedure FormDropFiles(Sender: TObject; const FileNames: array of String); 244 procedure FormDropFiles(Sender: TObject; const FileNames: array of String);
233 procedure HexWaveEditEditingDone(Sender: TObject); 245 procedure HexWaveEditEditingDone(Sender: TObject);
246 procedure InsertRowActionExecute(Sender: TObject);
247 procedure InsertRowActionUpdate(Sender: TObject);
248 procedure InsertRowForAllActionExecute(Sender: TObject);
249 procedure InsertRowForAllActionUpdate(Sender: TObject);
234 procedure MenuItem37Click(Sender: TObject); 250 procedure MenuItem37Click(Sender: TObject);
235 procedure MenuItem38Click(Sender: TObject); 251 procedure MenuItem38Click(Sender: TObject);
236 procedure MenuItem46Click(Sender: TObject); 252 procedure PlayCursorActionExecute(Sender: TObject);
253 procedure PlayOrderActionExecute(Sender: TObject);
237 procedure ScrollBox1MouseWheelDown(Sender: TObject; Shift: TShiftState; 254 procedure ScrollBox1MouseWheelDown(Sender: TObject; Shift: TShiftState;
238 MousePos: TPoint; var Handled: Boolean); 255 MousePos: TPoint; var Handled: Boolean);
239 procedure ScrollBox1MouseWheelUp(Sender: TObject; Shift: TShiftState; 256 procedure ScrollBox1MouseWheelUp(Sender: TObject; Shift: TShiftState;
@@ -246,7 +263,6 @@ type
246 procedure Duty2VisualizerPaint(Sender: TObject); 263 procedure Duty2VisualizerPaint(Sender: TObject);
247 procedure FileOpen1Accept(Sender: TObject); 264 procedure FileOpen1Accept(Sender: TObject);
248 procedure FileSaveAs1Accept(Sender: TObject); 265 procedure FileSaveAs1Accept(Sender: TObject);
249 procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
250 procedure HeaderControl1MouseDown(Sender: TObject; Button: TMouseButton; 266 procedure HeaderControl1MouseDown(Sender: TObject; Button: TMouseButton;
251 Shift: TShiftState; X, Y: Integer); 267 Shift: TShiftState; X, Y: Integer);
252 procedure HeaderControl1SectionClick(HeaderControl: TCustomHeaderControl; 268 procedure HeaderControl1SectionClick(HeaderControl: TCustomHeaderControl;
@@ -273,10 +289,8 @@ type
273 procedure LengthSpinnerChange(Sender: TObject); 289 procedure LengthSpinnerChange(Sender: TObject);
274 procedure DebugPlayNoteButtonClick(Sender: TObject); 290 procedure DebugPlayNoteButtonClick(Sender: TObject);
275 procedure DebugShiteButtonClick(Sender: TObject); 291 procedure DebugShiteButtonClick(Sender: TObject);
276 procedure MenuItem10Click(Sender: TObject);
277 procedure MenuItem11Click(Sender: TObject); 292 procedure MenuItem11Click(Sender: TObject);
278 procedure MenuItem12Click(Sender: TObject); 293 procedure MenuItem12Click(Sender: TObject);
279 procedure MenuItem13Click(Sender: TObject);
280 procedure MenuItem14Click(Sender: TObject); 294 procedure MenuItem14Click(Sender: TObject);
281 procedure MenuItem17Click(Sender: TObject); 295 procedure MenuItem17Click(Sender: TObject);
282 procedure MenuItem18Click(Sender: TObject); 296 procedure MenuItem18Click(Sender: TObject);
@@ -317,14 +331,13 @@ type
317 procedure RoutineNumberSpinnerChange(Sender: TObject); 331 procedure RoutineNumberSpinnerChange(Sender: TObject);
318 procedure RoutineSyneditChange(Sender: TObject); 332 procedure RoutineSyneditChange(Sender: TObject);
319 procedure ShiftClockSpinnerChange(Sender: TObject); 333 procedure ShiftClockSpinnerChange(Sender: TObject);
334 procedure PlayStartActionExecute(Sender: TObject);
320 procedure StepSpinEditChange(Sender: TObject); 335 procedure StepSpinEditChange(Sender: TObject);
336 procedure StopActionExecute(Sender: TObject);
321 procedure TicksPerRowSpinEditChange(Sender: TObject); 337 procedure TicksPerRowSpinEditChange(Sender: TObject);
322 procedure OscilloscopeUpdateTimerTimer(Sender: TObject); 338 procedure OscilloscopeUpdateTimerTimer(Sender: TObject);
323 procedure ExportGBSButtonClick(Sender: TObject); 339 procedure ExportGBSButtonClick(Sender: TObject);
324 procedure ToolButton10Click(Sender: TObject); 340 procedure ToolButton10Click(Sender: TObject);
325 procedure ToolButton2Click(Sender: TObject);
326 procedure ToolButton3Click(Sender: TObject);
327 procedure ToolButton4Click(Sender: TObject);
328 procedure ExportGBButtonClick(Sender: TObject); 341 procedure ExportGBButtonClick(Sender: TObject);
329 procedure TrackerPopupCopyClick(Sender: TObject); 342 procedure TrackerPopupCopyClick(Sender: TObject);
330 procedure TrackerPopupCutClick(Sender: TObject); 343 procedure TrackerPopupCutClick(Sender: TObject);
@@ -1229,7 +1242,7 @@ begin
1229 // Get the emulator ready to make sound... 1242 // Get the emulator ready to make sound...
1230 EnableSound; 1243 EnableSound;
1231 StartPlayback; 1244 StartPlayback;
1232 HaltPlayback; //TODO: remove this hack 1245 HaltPlayback;
1233 1246
1234 // Start the Oscilloscope repaint timer 1247 // Start the Oscilloscope repaint timer
1235 OscilloscopeUpdateTimer.Enabled := ScopesOn; 1248 OscilloscopeUpdateTimer.Enabled := ScopesOn;
@@ -1409,11 +1422,6 @@ begin
1409 end; 1422 end;
1410 end; 1423 end;
1411 1424
1412 procedure TfrmTracker.FormClose(Sender: TObject; var CloseAction: TCloseAction);
1413 begin
1414
1415 end;
1416
1417 procedure TfrmTracker.FileOpen1Accept(Sender: TObject); 1425 procedure TfrmTracker.FileOpen1Accept(Sender: TObject);
1418 begin 1426 begin
1419 LoadSong(FileOpen1.Dialog.FileName); 1427 LoadSong(FileOpen1.Dialog.FileName);
@@ -1485,11 +1493,6 @@ begin
1485 TrackerGrid.SelectedInstrument := ModInst(InstrumentComboBox.ItemIndex); 1493 TrackerGrid.SelectedInstrument := ModInst(InstrumentComboBox.ItemIndex);
1486 end; 1494 end;
1487 1495
1488 procedure TfrmTracker.EditDelete1Execute(Sender: TObject);
1489 begin
1490
1491 end;
1492
1493 procedure TfrmTracker.FileSaveAs1BeforeExecute(Sender: TObject); 1496 procedure TfrmTracker.FileSaveAs1BeforeExecute(Sender: TObject);
1494 begin 1497 begin
1495 SaveSucceeded := False; 1498 SaveSucceeded := False;
@@ -1529,6 +1532,26 @@ begin
1529 end; 1532 end;
1530 end; 1533 end;
1531 1534
1535 procedure TfrmTracker.InsertRowActionExecute(Sender: TObject);
1536 begin
1537 TrackerGrid.InsertRowInPatternAtCursor(TrackerGrid.Cursor.X);
1538 end;
1539
1540 procedure TfrmTracker.InsertRowActionUpdate(Sender: TObject);
1541 begin
1542 (Sender as TAction).Enabled := ActiveControl = TrackerGrid;
1543 end;
1544
1545 procedure TfrmTracker.InsertRowForAllActionExecute(Sender: TObject);
1546 begin
1547 TrackerGrid.InsertRowInAllAtCursor;
1548 end;
1549
1550 procedure TfrmTracker.InsertRowForAllActionUpdate(Sender: TObject);
1551 begin
1552 (Sender as TAction).Enabled := ActiveControl = TrackerGrid;
1553 end;
1554
1532 procedure TfrmTracker.MenuItem37Click(Sender: TObject); 1555 procedure TfrmTracker.MenuItem37Click(Sender: TObject);
1533 begin 1556 begin
1534 Clipboard.AsText := ConvertWaveToHexString(WaveEditNumberSpinner.Value); 1557 Clipboard.AsText := ConvertWaveToHexString(WaveEditNumberSpinner.Value);
@@ -1540,9 +1563,28 @@ begin
1540 HexWaveEditEditingDone(nil); 1563 HexWaveEditEditingDone(nil);
1541 end; 1564 end;
1542 1565
1543 procedure TfrmTracker.MenuItem46Click(Sender: TObject); 1566 procedure TfrmTracker.PlayCursorActionExecute(Sender: TObject);
1544 begin 1567 begin
1568 if GetPreviewReady then begin
1569 Playing := True;
1545 1570
1571 PokeSymbol(SYM_CURRENT_ORDER, 2*(OrderEditStringGrid.Row-1));
1572 PokeSymbol(SYM_ROW, TrackerGrid.Cursor.Y);
1573
1574 UnlockPlayback;
1575 end
1576 end;
1577
1578 procedure TfrmTracker.PlayOrderActionExecute(Sender: TObject);
1579 begin
1580 if GetPreviewReady then begin
1581 Playing := True;
1582
1583 PokeSymbol(SYM_CURRENT_ORDER, 2*(OrderEditStringGrid.Row-1));
1584 PokeSymbol(SYM_ROW, 0);
1585
1586 UnlockPlayback;
1587 end
1546 end; 1588 end;
1547 1589
1548 procedure TfrmTracker.ScrollBox1MouseWheelDown(Sender: TObject; Shift: TShiftState; 1590 procedure TfrmTracker.ScrollBox1MouseWheelDown(Sender: TObject; Shift: TShiftState;
@@ -1585,6 +1627,26 @@ begin
1585 PreviewC5; 1627 PreviewC5;
1586 end; 1628 end;
1587 1629
1630 procedure TfrmTracker.DeleteRowActionExecute(Sender: TObject);
1631 begin
1632 TrackerGrid.DeleteRowInPatternAtCursor(TrackerGrid.Cursor.X);
1633 end;
1634
1635 procedure TfrmTracker.DeleteRowActionUpdate(Sender: TObject);
1636 begin
1637 (Sender as TAction).Enabled := ActiveControl = TrackerGrid;
1638 end;
1639
1640 procedure TfrmTracker.DeleteRowForAllActionExecute(Sender: TObject);
1641 begin
1642 TrackerGrid.DeleteRowInAllAtCursor;
1643 end;
1644
1645 procedure TfrmTracker.DeleteRowForAllActionUpdate(Sender: TObject);
1646 begin
1647 (Sender as TAction).Enabled := ActiveControl = TrackerGrid;
1648 end;
1649
1588 procedure TfrmTracker.Duty1VisualizerClick(Sender: TObject); 1650 procedure TfrmTracker.Duty1VisualizerClick(Sender: TObject);
1589 var 1651 var
1590 Section: THeaderSection; 1652 Section: THeaderSection;
@@ -1623,11 +1685,25 @@ begin
1623 CurrentInstrument^.ShiftClockFreq := Round(ShiftClockTrackbar.Position); 1685 CurrentInstrument^.ShiftClockFreq := Round(ShiftClockTrackbar.Position);
1624 end; 1686 end;
1625 1687
1688 procedure TfrmTracker.PlayStartActionExecute(Sender: TObject);
1689 begin
1690 if GetPreviewReady then begin
1691 Playing := True;
1692 UnlockPlayback;
1693 end;
1694 end;
1695
1626 procedure TfrmTracker.StepSpinEditChange(Sender: TObject); 1696 procedure TfrmTracker.StepSpinEditChange(Sender: TObject);
1627 begin 1697 begin
1628 TrackerGrid.Step := StepSpinEdit.Value; 1698 TrackerGrid.Step := StepSpinEdit.Value;
1629 end; 1699 end;
1630 1700
1701 procedure TfrmTracker.StopActionExecute(Sender: TObject);
1702 begin
1703 TrackerGrid.HighlightedRow := -1;
1704 HaltPlayback;
1705 end;
1706
1631 procedure TfrmTracker.DivRatioSpinnerChange(Sender: TObject); 1707 procedure TfrmTracker.DivRatioSpinnerChange(Sender: TObject);
1632 begin 1708 begin
1633 CurrentInstrument^.DividingRatio := Round(DivRatioTrackbar.Position); 1709 CurrentInstrument^.DividingRatio := Round(DivRatioTrackbar.Position);
@@ -1699,11 +1775,6 @@ begin
1699 LoadSong(ParamStr(0)); 1775 LoadSong(ParamStr(0));
1700 end; 1776 end;
1701 1777
1702 procedure TfrmTracker.MenuItem10Click(Sender: TObject);
1703 begin
1704
1705 end;
1706
1707 procedure TfrmTracker.MenuItem11Click(Sender: TObject); 1778 procedure TfrmTracker.MenuItem11Click(Sender: TObject);
1708 begin 1779 begin
1709 TrackerGrid.DoUndo; 1780 TrackerGrid.DoUndo;
@@ -1715,11 +1786,6 @@ begin
1715 FileOpen1.Execute; 1786 FileOpen1.Execute;
1716 end; 1787 end;
1717 1788
1718 procedure TfrmTracker.MenuItem13Click(Sender: TObject);
1719 begin
1720
1721 end;
1722
1723 procedure TfrmTracker.MenuItem14Click(Sender: TObject); 1789 procedure TfrmTracker.MenuItem14Click(Sender: TObject);
1724 begin 1790 begin
1725 if CheckUnsavedChanges then 1791 if CheckUnsavedChanges then
@@ -2092,32 +2158,6 @@ begin
2092 end; 2158 end;
2093 end; 2159 end;
2094 2160
2095 procedure TfrmTracker.ToolButton2Click(Sender: TObject);
2096 begin
2097 if GetPreviewReady then begin
2098 Playing := True;
2099
2100 PokeSymbol(SYM_CURRENT_ORDER, 2*(OrderEditStringGrid.Row-1));
2101 PokeSymbol(SYM_ROW, TrackerGrid.Cursor.Y);
2102
2103 UnlockPlayback;
2104 end
2105 end;
2106
2107 procedure TfrmTracker.ToolButton3Click(Sender: TObject);
2108 begin
2109 if GetPreviewReady then begin
2110 Playing := True;
2111 UnlockPlayback;
2112 end;
2113 end;
2114
2115 procedure TfrmTracker.ToolButton4Click(Sender: TObject);
2116 begin
2117 TrackerGrid.HighlightedRow := -1;
2118 HaltPlayback;
2119 end;
2120
2121 procedure TfrmTracker.ExportGBButtonClick(Sender: TObject); 2161 procedure TfrmTracker.ExportGBButtonClick(Sender: TObject);
2122 begin 2162 begin
2123 if GBSaveDialog.Execute then begin 2163 if GBSaveDialog.Execute then begin
Modifiedtrackergrid.pas +61−0
@@ -131,6 +131,11 @@ type
131 procedure IncrementAt(SelectionPos: TSelectionPos; Value: Integer); 131 procedure IncrementAt(SelectionPos: TSelectionPos; Value: Integer);
132 procedure ClearAt(SelectionPos: TSelectionPos); 132 procedure ClearAt(SelectionPos: TSelectionPos);
133 133
134 procedure InsertRowInPatternAtCursor(Pattern: Integer);
135 procedure InsertRowInAllAtCursor;
136 procedure DeleteRowInPatternAtCursor(Pattern: Integer);
137 procedure DeleteRowInAllAtCursor;
138
134 procedure SelectAll; 139 procedure SelectAll;
135 procedure SelectColumn; 140 procedure SelectColumn;
136 procedure EraseSelection; 141 procedure EraseSelection;
@@ -1095,6 +1100,62 @@ begin
1095 end; 1100 end;
1096 end; 1101 end;
1097 1102
1103 procedure TTrackerGrid.InsertRowInPatternAtCursor(Pattern: Integer);
1104 var
1105 I: Integer;
1106 begin
1107 NormalizeCursors;
1108
1109 for I := High(TPattern) downto Cursor.Y do
1110 Patterns[Pattern]^[I] := Patterns[Pattern]^[I-1];
1111
1112 BlankCell(Patterns[Pattern]^[Cursor.Y]);
1113
1114 Invalidate;
1115 SaveUndoState;
1116 end;
1117
1118 procedure TTrackerGrid.InsertRowInAllAtCursor;
1119 var
1120 I: Integer;
1121 begin
1122 for I := Low(Patterns) to High(Patterns) do begin
1123 InsertRowInPatternAtCursor(I);
1124 Performed.PopFront; // hack, maybe change the way this works later
1125 end;
1126
1127 Invalidate;
1128 SaveUndoState;
1129 end;
1130
1131 procedure TTrackerGrid.DeleteRowInPatternAtCursor(Pattern: Integer);
1132 var
1133 I: Integer;
1134 begin
1135 NormalizeCursors;
1136
1137 for I := Cursor.Y to High(TPattern)-1 do
1138 Patterns[Pattern]^[I] := Patterns[Pattern]^[I+1];
1139
1140 BlankCell(Patterns[Pattern]^[High(TPattern)]);
1141
1142 Invalidate;
1143 SaveUndoState;
1144 end;
1145
1146 procedure TTrackerGrid.DeleteRowInAllAtCursor;
1147 var
1148 I: Integer;
1149 begin
1150 for I := Low(Patterns) to High(Patterns) do begin
1151 DeleteRowInPatternAtCursor(I);
1152 Performed.PopFront; // hack, maybe change the way this works later
1153 end;
1154
1155 Invalidate;
1156 SaveUndoState;
1157 end;
1158
1098 procedure TTrackerGrid.SelectAll; 1159 procedure TTrackerGrid.SelectAll;
1099 begin 1160 begin
1100 Cursor.X := 0; 1161 Cursor.X := 0;