@@ -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; |