Commit efea754

Nick committed on
Implement wave hex box
commit efea75403867dec2e3fd216989b6053d2c0850a6 parent 8c0850b
2 changed files +68−13
Modifiedtracker.lfm +26−10
@@ -1,7 +1,7 @@
1 object frmTracker: TfrmTracker 1 object frmTracker: TfrmTracker
2 Left = 1888 2 Left = 1860
3 Height = 726 3 Height = 726
4 Top = 59 4 Top = 69
5 Width = 1180 5 Width = 1180
6 Caption = 'hUGETracker' 6 Caption = 'hUGETracker'
7 ClientHeight = 706 7 ClientHeight = 706
@@ -60,10 +60,10 @@ object frmTracker: TfrmTracker
60 Height = 480 60 Height = 480
61 Top = 0 61 Top = 0
62 Width = 982 62 Width = 982
63 ActivePage = GeneralTabSheet 63 ActivePage = WavesTabSheet
64 Align = alClient 64 Align = alClient
65 ParentFont = False 65 ParentFont = False
66 TabIndex = 0 66 TabIndex = 3
67 TabOrder = 0 67 TabOrder = 0
68 object GeneralTabSheet: TTabSheet 68 object GeneralTabSheet: TTabSheet
69 Caption = 'General' 69 Caption = 'General'
@@ -911,16 +911,16 @@ object frmTracker: TfrmTracker
911 end 911 end
912 object WavesTabSheet: TTabSheet 912 object WavesTabSheet: TTabSheet
913 Caption = 'Waves' 913 Caption = 'Waves'
914 ClientHeight = 414 914 ClientHeight = 452
915 ClientWidth = 960 915 ClientWidth = 974
916 ParentFont = False 916 ParentFont = False
917 object WaveEditPaintBox: TPaintBox 917 object WaveEditPaintBox: TPaintBox
918 AnchorSideTop.Control = WaveEditGroupBox 918 AnchorSideTop.Control = WaveEditGroupBox
919 AnchorSideTop.Side = asrBottom 919 AnchorSideTop.Side = asrBottom
920 Left = 0 920 Left = 0
921 Height = 254 921 Height = 292
922 Top = 160 922 Top = 160
923 Width = 960 923 Width = 974
924 Align = alBottom 924 Align = alBottom
925 Anchors = [akTop, akLeft, akRight, akBottom] 925 Anchors = [akTop, akLeft, akRight, akBottom]
926 BorderSpacing.Top = 13 926 BorderSpacing.Top = 13
@@ -934,10 +934,10 @@ object frmTracker: TfrmTracker
934 Left = 8 934 Left = 8
935 Height = 139 935 Height = 139
936 Top = 8 936 Top = 8
937 Width = 173 937 Width = 568
938 Caption = 'Wave Editor' 938 Caption = 'Wave Editor'
939 ClientHeight = 119 939 ClientHeight = 119
940 ClientWidth = 169 940 ClientWidth = 564
941 ParentFont = False 941 ParentFont = False
942 TabOrder = 0 942 TabOrder = 0
943 object Label20: TLabel 943 object Label20: TLabel
@@ -981,6 +981,22 @@ object frmTracker: TfrmTracker
981 ParentFont = False 981 ParentFont = False
982 TabOrder = 2 982 TabOrder = 2
983 end 983 end
984 object HexWaveEdit: TEdit
985 Left = 288
986 Height = 23
987 Top = 8
988 Width = 264
989 OnEditingDone = HexWaveEditEditingDone
990 TabOrder = 3
991 end
992 object Label13: TLabel
993 Left = 176
994 Height = 15
995 Top = 16
996 Width = 100
997 Caption = 'Hex representation'
998 ParentColor = False
999 end
984 end 1000 end
985 end 1001 end
986 object CommentsTabSheet: TTabSheet 1002 object CommentsTabSheet: TTabSheet
Modifiedtracker.pas +42−3
@@ -9,7 +9,8 @@ uses
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, RackCtls, Codegen, SymParser,
12 options, IniFiles, bgrabitmap, effecteditor, RenderToWave, modimport, Types; 12 options, IniFiles, bgrabitmap, effecteditor, RenderToWave, modimport,
13 strutils, Types;
13 14
14 type 15 type
15 { TfrmTracker } 16 { TfrmTracker }
@@ -18,12 +19,14 @@ type
18 Button1: TButton; 19 Button1: TButton;
19 Duty1Visualizer: TPaintBox; 20 Duty1Visualizer: TPaintBox;
20 Duty2Visualizer: TPaintBox; 21 Duty2Visualizer: TPaintBox;
22 HexWaveEdit: TEdit;
21 InstrumentExportButton: TButton; 23 InstrumentExportButton: TButton;
22 InstrumentImportButton: TButton; 24 InstrumentImportButton: TButton;
23 InstrumentComboBox: TComboBox; 25 InstrumentComboBox: TComboBox;
24 CutAction: TAction; 26 CutAction: TAction;
25 ImageList2: TImageList; 27 ImageList2: TImageList;
26 GBSaveDialog: TSaveDialog; 28 GBSaveDialog: TSaveDialog;
29 Label13: TLabel;
27 Label25: TLabel; 30 Label25: TLabel;
28 MenuItem10: TMenuItem; 31 MenuItem10: TMenuItem;
29 MenuItem16: TMenuItem; 32 MenuItem16: TMenuItem;
@@ -223,6 +226,7 @@ type
223 procedure EditDelete1Execute(Sender: TObject); 226 procedure EditDelete1Execute(Sender: TObject);
224 procedure FileSaveAs1BeforeExecute(Sender: TObject); 227 procedure FileSaveAs1BeforeExecute(Sender: TObject);
225 procedure FormCloseQuery(Sender: TObject; var CanClose: boolean); 228 procedure FormCloseQuery(Sender: TObject; var CanClose: boolean);
229 procedure HexWaveEditEditingDone(Sender: TObject);
226 procedure MenuItem46Click(Sender: TObject); 230 procedure MenuItem46Click(Sender: TObject);
227 procedure ScrollBox1MouseWheelDown(Sender: TObject; Shift: TShiftState; 231 procedure ScrollBox1MouseWheelDown(Sender: TObject; Shift: TShiftState;
228 MousePos: TPoint; var Handled: Boolean); 232 MousePos: TPoint; var Handled: Boolean);
@@ -391,6 +395,7 @@ type
391 395
392 procedure RecreateTrackerGrid; 396 procedure RecreateTrackerGrid;
393 procedure UpdateUIAfterLoad; 397 procedure UpdateUIAfterLoad;
398 procedure UpdateHexWaveTextbox;
394 function CheckUnsavedChanges: Boolean; 399 function CheckUnsavedChanges: Boolean;
395 400
396 procedure DrawWaveform(PB: TPaintBox; Wave: TWave); 401 procedure DrawWaveform(PB: TPaintBox; Wave: TWave);
@@ -449,6 +454,18 @@ begin
449 PageControl1.ActivePageIndex := 0; 454 PageControl1.ActivePageIndex := 0;
450 end; 455 end;
451 456
457 procedure TfrmTracker.UpdateHexWaveTextbox;
458 var
459 I: Integer;
460 S: String;
461 begin
462 S := '';
463 for I := Low(CurrentWave^) to High(CurrentWave^) do
464 S += hexStr(CurrentWave^[I], 1);
465
466 HexWaveEdit.Text := S;
467 end;
468
452 function TfrmTracker.CheckUnsavedChanges: Boolean; 469 function TfrmTracker.CheckUnsavedChanges: Boolean;
453 begin 470 begin
454 Result := True; 471 Result := True;
@@ -491,7 +508,7 @@ begin
491 Pen.Color := clTeal; 508 Pen.Color := clTeal;
492 Pen.Width := 2; 509 Pen.Width := 2;
493 MoveTo(0, H); 510 MoveTo(0, H);
494 for I := 0 to 32 do 511 for I := Low(Wave) to High(Wave) do
495 LineTo(I*Interval, Trunc((Wave[I]/$F)*H)); 512 LineTo(I*Interval, Trunc((Wave[I]/$F)*H));
496 LineTo(W, Trunc((Wave[0]/$F)*H)); 513 LineTo(W, Trunc((Wave[0]/$F)*H));
497 end; 514 end;
@@ -625,6 +642,7 @@ procedure TfrmTracker.LoadWave(Wave: Integer);
625 begin 642 begin
626 CurrentWave := @Song.Waves[Wave]; 643 CurrentWave := @Song.Waves[Wave];
627 WaveEditPaintBox.Invalidate; 644 WaveEditPaintBox.Invalidate;
645 UpdateHexWaveTextbox;
628 end; 646 end;
629 647
630 procedure TfrmTracker.LoadSong(Filename: String); 648 procedure TfrmTracker.LoadSong(Filename: String);
@@ -1306,6 +1324,26 @@ begin
1306 CanClose := CheckUnsavedChanges; 1324 CanClose := CheckUnsavedChanges;
1307 end; 1325 end;
1308 1326
1327 procedure TfrmTracker.HexWaveEditEditingDone(Sender: TObject);
1328 var
1329 S: String;
1330 I: Integer;
1331 begin
1332 S := DelSpace(HexWaveEdit.Text);
1333 if S.Length < High(TWave) then Exit;
1334
1335 try
1336 for I := Low(TWave) to High(TWave) do begin
1337 writeln(Hex2Dec(S.Substring(I,1)));
1338 CurrentWave^[I] := Hex2Dec(S.Substring(I,1));
1339 end;
1340 HexWaveEdit.Text := S;
1341 WaveEditPaintBox.Invalidate;
1342 except
1343 on EConvertError do Exit;
1344 end;
1345 end;
1346
1309 procedure TfrmTracker.MenuItem46Click(Sender: TObject); 1347 procedure TfrmTracker.MenuItem46Click(Sender: TObject);
1310 begin 1348 begin
1311 1349
@@ -1966,8 +2004,9 @@ var
1966 Idx: Integer; 2004 Idx: Integer;
1967 begin 2005 begin
1968 if DrawingWave then begin 2006 if DrawingWave then begin
1969 Idx := Trunc((X / WaveEditPaintBox.Width)*32); 2007 Idx := EnsureRange(Trunc((X / WaveEditPaintBox.Width)*High(TWave)), Low(TWave), High(TWave));
1970 CurrentWave^[Idx] := EnsureRange(Trunc((Y / WaveEditPaintBox.Height)*$F), 0, $F); 2008 CurrentWave^[Idx] := EnsureRange(Trunc((Y / WaveEditPaintBox.Height)*$F), 0, $F);
2009 UpdateHexWaveTextbox;
1971 WaveEditPaintBox.Invalidate; 2010 WaveEditPaintBox.Invalidate;
1972 end; 2011 end;
1973 end; 2012 end;