Commit d81da90

Nick committed on
Add copy/paste context menu to wave editor
commit d81da9056eeb4d70cabf43d3d3d493e26d3a3745 parent 5319254
2 changed files +58−23
Modifiedtracker.lfm +14−0
@@ -925,6 +925,7 @@ object frmTracker: TfrmTracker
925 Anchors = [akTop, akLeft, akRight, akBottom] 925 Anchors = [akTop, akLeft, akRight, akBottom]
926 BorderSpacing.Top = 13 926 BorderSpacing.Top = 13
927 ParentFont = False 927 ParentFont = False
928 PopupMenu = WaveEditPopup
928 OnMouseDown = WaveEditPaintBoxMouseDown 929 OnMouseDown = WaveEditPaintBoxMouseDown
929 OnMouseMove = WaveEditPaintBoxMouseMove 930 OnMouseMove = WaveEditPaintBoxMouseMove
930 OnMouseUp = WaveEditPaintBoxMouseUp 931 OnMouseUp = WaveEditPaintBoxMouseUp
@@ -986,6 +987,7 @@ object frmTracker: TfrmTracker
986 Height = 23 987 Height = 23
987 Top = 8 988 Top = 8
988 Width = 264 989 Width = 264
990 OnChange = HexWaveEditEditingDone
989 OnEditingDone = HexWaveEditEditingDone 991 OnEditingDone = HexWaveEditEditingDone
990 TabOrder = 3 992 TabOrder = 3
991 end 993 end
@@ -5232,4 +5234,16 @@ object frmTracker: TfrmTracker
5232 left = 144 5234 left = 144
5233 top = 114 5235 top = 114
5234 end 5236 end
5237 object WaveEditPopup: TPopupMenu
5238 left = 80
5239 top = 56
5240 object MenuItem37: TMenuItem
5241 Caption = 'Copy'
5242 OnClick = MenuItem37Click
5243 end
5244 object MenuItem38: TMenuItem
5245 Caption = 'Paste'
5246 OnClick = MenuItem38Click
5247 end
5248 end
5235 end 5249 end
Modifiedtracker.pas +44−23
@@ -8,15 +8,17 @@ uses
8 Menus, Spin, StdCtrls, ActnList, StdActns, SynEdit, SynHighlighterAny, 8 Menus, Spin, StdCtrls, ActnList, StdActns, SynEdit, SynHighlighterAny,
9 FileUtil, math, Instruments, Waves, Song, EmulationThread, Utils, Constants, 9 FileUtil, math, Instruments, Waves, Song, EmulationThread, Utils, Constants,
10 sound, vars, machine, about_hugetracker, TrackerGrid, lclintf, lmessages, 10 sound, vars, machine, about_hugetracker, TrackerGrid, lclintf, lmessages,
11 Buttons, Grids, DBCtrls, HugeDatatypes, LCLType, RackCtls, Codegen, SymParser, 11 Buttons, Grids, DBCtrls, HugeDatatypes, LCLType, Clipbrd, RackCtls, Codegen,
12 options, IniFiles, bgrabitmap, effecteditor, RenderToWave, modimport, 12 SymParser, options, IniFiles, bgrabitmap, effecteditor, RenderToWave,
13 strutils, Types; 13 modimport, strutils, Types;
14 14
15 type 15 type
16 { TfrmTracker } 16 { TfrmTracker }
17 17
18 TfrmTracker = class(TForm) 18 TfrmTracker = class(TForm)
19 Button1: TButton; 19 Button1: TButton;
20 MenuItem37: TMenuItem;
21 MenuItem38: TMenuItem;
20 PlayWaveWhileDrawingCheckbox: TCheckBox; 22 PlayWaveWhileDrawingCheckbox: TCheckBox;
21 Duty1Visualizer: TPaintBox; 23 Duty1Visualizer: TPaintBox;
22 Duty2Visualizer: TPaintBox; 24 Duty2Visualizer: TPaintBox;
@@ -57,6 +59,7 @@ type
57 NoiseVisualizer: TPaintBox; 59 NoiseVisualizer: TPaintBox;
58 MODOpenDialog: TOpenDialog; 60 MODOpenDialog: TOpenDialog;
59 Panel6: TPanel; 61 Panel6: TPanel;
62 WaveEditPopup: TPopupMenu;
60 SynAnySyn1: TSynAnySyn; 63 SynAnySyn1: TSynAnySyn;
61 WavSaveDialog: TSaveDialog; 64 WavSaveDialog: TSaveDialog;
62 ToolButton10: TToolButton; 65 ToolButton10: TToolButton;
@@ -228,6 +231,8 @@ type
228 procedure FileSaveAs1BeforeExecute(Sender: TObject); 231 procedure FileSaveAs1BeforeExecute(Sender: TObject);
229 procedure FormCloseQuery(Sender: TObject; var CanClose: boolean); 232 procedure FormCloseQuery(Sender: TObject; var CanClose: boolean);
230 procedure HexWaveEditEditingDone(Sender: TObject); 233 procedure HexWaveEditEditingDone(Sender: TObject);
234 procedure MenuItem37Click(Sender: TObject);
235 procedure MenuItem38Click(Sender: TObject);
231 procedure MenuItem46Click(Sender: TObject); 236 procedure MenuItem46Click(Sender: TObject);
232 procedure ScrollBox1MouseWheelDown(Sender: TObject; Shift: TShiftState; 237 procedure ScrollBox1MouseWheelDown(Sender: TObject; Shift: TShiftState;
233 MousePos: TPoint; var Handled: Boolean); 238 MousePos: TPoint; var Handled: Boolean);
@@ -393,6 +398,7 @@ type
393 procedure CopyOrderGridToOrderMatrix; 398 procedure CopyOrderGridToOrderMatrix;
394 procedure CopyOrderMatrixToOrderGrid; 399 procedure CopyOrderMatrixToOrderGrid;
395 procedure CopyWaveIntoWaveRam(Wave: Integer); 400 procedure CopyWaveIntoWaveRam(Wave: Integer);
401 function ConvertWaveToHexString(Wave: Integer): String;
396 function PreparePreview: Boolean; 402 function PreparePreview: Boolean;
397 procedure ResetEmulationThread; 403 procedure ResetEmulationThread;
398 404
@@ -474,15 +480,8 @@ begin
474 end; 480 end;
475 481
476 procedure TfrmTracker.UpdateHexWaveTextbox; 482 procedure TfrmTracker.UpdateHexWaveTextbox;
477 var
478 I: Integer;
479 S: String;
480 begin 483 begin
481 S := ''; 484 HexWaveEdit.Text := ConvertWaveToHexString(WaveEditNumberSpinner.Value);
482 for I := Low(CurrentWave^) to High(CurrentWave^) do
483 S += hexStr(CurrentWave^[I], 1);
484
485 HexWaveEdit.Text := S;
486 end; 485 end;
487 486
488 function TfrmTracker.CheckUnsavedChanges: Boolean; 487 function TfrmTracker.CheckUnsavedChanges: Boolean;
@@ -759,6 +758,15 @@ begin
759 Spokeb(AUD3_WAVE_RAM+I, NewWaveform[I]); 758 Spokeb(AUD3_WAVE_RAM+I, NewWaveform[I]);
760 end; 759 end;
761 760
761 function TfrmTracker.ConvertWaveToHexString(Wave: Integer): String;
762 var
763 I: Integer;
764 begin
765 Result := '';
766 for I := Low(CurrentWave^) to High(CurrentWave^) do
767 Result += hexStr(CurrentWave^[I], 1);
768 end;
769
762 function TfrmTracker.PreparePreview: Boolean; 770 function TfrmTracker.PreparePreview: Boolean;
763 var 771 var
764 I: Integer; 772 I: Integer;
@@ -1358,7 +1366,7 @@ var
1358 I: Integer; 1366 I: Integer;
1359 begin 1367 begin
1360 S := DelSpace(HexWaveEdit.Text); 1368 S := DelSpace(HexWaveEdit.Text);
1361 if S.Length < High(TWave) then Exit; 1369 if S.Length < High(TWave)+1 then Exit;
1362 1370
1363 try 1371 try
1364 for I := Low(TWave) to High(TWave) do 1372 for I := Low(TWave) to High(TWave) do
@@ -1370,6 +1378,17 @@ begin
1370 end; 1378 end;
1371 end; 1379 end;
1372 1380
1381 procedure TfrmTracker.MenuItem37Click(Sender: TObject);
1382 begin
1383 Clipboard.AsText := ConvertWaveToHexString(WaveEditNumberSpinner.Value);
1384 end;
1385
1386 procedure TfrmTracker.MenuItem38Click(Sender: TObject);
1387 begin
1388 HexWaveEdit.Text := Clipboard.AsText;
1389 HexWaveEditEditingDone(nil);
1390 end;
1391
1373 procedure TfrmTracker.MenuItem46Click(Sender: TObject); 1392 procedure TfrmTracker.MenuItem46Click(Sender: TObject);
1374 begin 1393 begin
1375 1394
@@ -2046,18 +2065,20 @@ procedure TfrmTracker.WaveEditPaintBoxMouseDown(Sender: TObject;
2046 var 2065 var
2047 TestInstrument: TInstrument; 2066 TestInstrument: TInstrument;
2048 begin 2067 begin
2049 TestInstrument := Default(TInstrument); 2068 if Button = mbLeft then begin
2050 with TestInstrument do begin 2069 TestInstrument := Default(TInstrument);
2051 Type_ := itWave; 2070 with TestInstrument do begin
2052 OutputLevel := 1; 2071 Type_ := itWave;
2053 Waveform := WaveEditNumberSpinner.Value; 2072 OutputLevel := 1;
2054 Length := 0; 2073 Waveform := WaveEditNumberSpinner.Value;
2055 LengthEnabled := False; 2074 Length := 0;
2056 end; 2075 LengthEnabled := False;
2076 end;
2057 2077
2058 DrawingWave := True; 2078 DrawingWave := True;
2059 if PlayWaveWhileDrawingCheckbox.Checked then 2079 if PlayWaveWhileDrawingCheckbox.Checked then
2060 PreviewInstrument(NotesToFreqs.Data[C_5], TestInstrument); 2080 PreviewInstrument(NotesToFreqs.Data[C_5], TestInstrument);
2081 end
2061 end; 2082 end;
2062 2083
2063 procedure TfrmTracker.WaveEditPaintBoxMouseMove(Sender: TObject; 2084 procedure TfrmTracker.WaveEditPaintBoxMouseMove(Sender: TObject;