@@ -9,14 +9,19 @@ uses |
| 9 |
Menus, Spin, StdCtrls, ActnList, StdActns, SynEdit, math, Instruments, Waves, |
9 |
Menus, Spin, StdCtrls, ActnList, StdActns, SynEdit, math, Instruments, Waves, |
| 10 |
Song, EmulationThread, Utils, Constants, sound, vars, machine, |
10 |
Song, EmulationThread, Utils, Constants, sound, vars, machine, |
| 11 |
about_hugetracker, TrackerGrid, lclintf, lmessages, Buttons, Grids, DBCtrls, |
11 |
about_hugetracker, TrackerGrid, lclintf, lmessages, Buttons, Grids, DBCtrls, |
| 12 |
ECProgressBar, HugeDatatypes, LCLType, RackCtls, Codegen, SymParser; |
12 |
ECProgressBar, HugeDatatypes, LCLType, Codegen, |
|
|
13 |
SymParser; |
| 13 |
|
14 |
|
| 14 |
type |
15 |
type |
| 15 |
{ TfrmTracker } |
16 |
{ TfrmTracker } |
| 16 |
|
17 |
|
| 17 |
TfrmTracker = class(TForm) |
18 |
TfrmTracker = class(TForm) |
|
|
19 |
ComboBox1: TComboBox; |
| 18 |
CutAction: TAction; |
20 |
CutAction: TAction; |
| 19 |
ImageList2: TImageList; |
21 |
ImageList2: TImageList; |
|
|
22 |
Label22: TLabel; |
|
|
23 |
Label23: TLabel; |
|
|
24 |
Label24: TLabel; |
| 20 |
OrderEditStringGrid: TStringGrid; |
25 |
OrderEditStringGrid: TStringGrid; |
| 21 |
EditCut1: TEditCut; |
26 |
EditCut1: TEditCut; |
| 22 |
HeaderControl1: THeaderControl; |
27 |
HeaderControl1: THeaderControl; |
@@ -25,6 +30,10 @@ type |
| 25 |
MenuItem19: TMenuItem; |
30 |
MenuItem19: TMenuItem; |
| 26 |
MenuItem20: TMenuItem; |
31 |
MenuItem20: TMenuItem; |
| 27 |
Duty1Visualizer: TPaintBox; |
32 |
Duty1Visualizer: TPaintBox; |
|
|
33 |
SpinEdit1: TSpinEdit; |
|
|
34 |
SpinEdit2: TSpinEdit; |
|
|
35 |
ToolButton3: TToolButton; |
|
|
36 |
ToolButton9: TToolButton; |
| 28 |
WaveVisualizer: TPaintBox; |
37 |
WaveVisualizer: TPaintBox; |
| 29 |
Duty2Visualizer: TPaintBox; |
38 |
Duty2Visualizer: TPaintBox; |
| 30 |
NoiseVisualizer: TPaintBox; |
39 |
NoiseVisualizer: TPaintBox; |
@@ -152,6 +161,7 @@ type |
| 152 |
DivRatioSpinner: TECSpinPosition; |
161 |
DivRatioSpinner: TECSpinPosition; |
| 153 |
TreeView1: TTreeView; |
162 |
TreeView1: TTreeView; |
| 154 |
TrackerGrid: TTrackerGrid; |
163 |
TrackerGrid: TTrackerGrid; |
|
|
164 |
procedure ComboBox1Change(Sender: TObject); |
| 155 |
procedure CopyActionExecute(Sender: TObject); |
165 |
procedure CopyActionExecute(Sender: TObject); |
| 156 |
procedure CutActionExecute(Sender: TObject); |
166 |
procedure CutActionExecute(Sender: TObject); |
| 157 |
procedure Duty1VisualizerPaint(Sender: TObject); |
167 |
procedure Duty1VisualizerPaint(Sender: TObject); |
@@ -204,8 +214,11 @@ type |
| 204 |
Shift: TShiftState); |
214 |
Shift: TShiftState); |
| 205 |
procedure PanicToolButtonClick(Sender: TObject); |
215 |
procedure PanicToolButtonClick(Sender: TObject); |
| 206 |
procedure PasteActionExecute(Sender: TObject); |
216 |
procedure PasteActionExecute(Sender: TObject); |
|
|
217 |
procedure SpinEdit1Change(Sender: TObject); |
|
|
218 |
procedure SpinEdit2Change(Sender: TObject); |
| 207 |
procedure TicksPerRowSpinEditChange(Sender: TObject); |
219 |
procedure TicksPerRowSpinEditChange(Sender: TObject); |
| 208 |
procedure ToolButton2Click(Sender: TObject); |
220 |
procedure ToolButton2Click(Sender: TObject); |
|
|
221 |
procedure ToolButton3Click(Sender: TObject); |
| 209 |
procedure ToolButton4Click(Sender: TObject); |
222 |
procedure ToolButton4Click(Sender: TObject); |
| 210 |
procedure ToolButton5Click(Sender: TObject); |
223 |
procedure ToolButton5Click(Sender: TObject); |
| 211 |
procedure WaveEditNumberSpinnerChange(Sender: TObject); |
224 |
procedure WaveEditNumberSpinnerChange(Sender: TObject); |
@@ -254,8 +267,13 @@ type |
| 254 |
procedure ReloadPatterns; |
267 |
procedure ReloadPatterns; |
| 255 |
procedure CopyOrderGridToOrderMatrix; |
268 |
procedure CopyOrderGridToOrderMatrix; |
| 256 |
procedure CopyOrderMatrixToOrderGrid; |
269 |
procedure CopyOrderMatrixToOrderGrid; |
| 257 |
function PeekSymbol(Symbol: String): Integer; |
270 |
function PreparePreview: Boolean; |
| 258 |
procedure ResetEmulationThread; |
271 |
procedure ResetEmulationThread; |
|
|
272 |
|
|
|
273 |
function WordPeekSymbol(Symbol: String): Integer; |
|
|
274 |
procedure WordPokeSymbol(Symbol: String; Value: Word); |
|
|
275 |
function PeekSymbol(Symbol: String): Integer; |
|
|
276 |
procedure PokeSymbol(Symbol: String; Value: Byte); |
| 259 |
procedure OnFD; |
277 |
procedure OnFD; |
| 260 |
|
278 |
|
| 261 |
procedure RecreateTrackerGrid; |
279 |
procedure RecreateTrackerGrid; |
@@ -468,6 +486,41 @@ begin |
| 468 |
Result := speekb(SymbolTable.KeyData[Symbol]); |
486 |
Result := speekb(SymbolTable.KeyData[Symbol]); |
| 469 |
end; |
487 |
end; |
| 470 |
|
488 |
|
|
|
489 |
procedure TfrmTracker.PokeSymbol(Symbol: String; Value: Byte); |
|
|
490 |
begin |
|
|
491 |
if SymbolTable = nil then exit; |
|
|
492 |
spokeb(SymbolTable.KeyData[Symbol], Value); |
|
|
493 |
end; |
|
|
494 |
|
|
|
495 |
function TfrmTracker.WordPeekSymbol(Symbol: String): Integer; |
|
|
496 |
begin |
|
|
497 |
if SymbolTable = nil then exit; |
|
|
498 |
Result := wordpeek(SymbolTable.KeyData[Symbol]); |
|
|
499 |
end; |
|
|
500 |
|
|
|
501 |
procedure TfrmTracker.WordPokeSymbol(Symbol: String; Value: Word); |
|
|
502 |
begin |
|
|
503 |
if SymbolTable = nil then exit; |
|
|
504 |
wordpoke(SymbolTable.KeyData[Symbol], Value); |
|
|
505 |
end; |
|
|
506 |
|
|
|
507 |
function TfrmTracker.PreparePreview: Boolean; |
|
|
508 |
begin |
|
|
509 |
if RenderPreviewROM(Song) then begin |
|
|
510 |
// Load the new symbol table |
|
|
511 |
SymbolTable := ParseSymFile('hUGEDriver/preview.sym'); |
|
|
512 |
|
|
|
513 |
// Start emulation on the rendered preview binary |
|
|
514 |
EmulationThread.Terminate; |
|
|
515 |
EmulationThread.WaitFor; |
|
|
516 |
EmulationThread.Free; |
|
|
517 |
EmulationThread := TEmulationThread.Create('hUGEDriver/preview.gb'); |
|
|
518 |
|
|
|
519 |
Result := True; |
|
|
520 |
end |
|
|
521 |
else Result := False; |
|
|
522 |
end; |
|
|
523 |
|
| 471 |
procedure TfrmTracker.ResetEmulationThread; |
524 |
procedure TfrmTracker.ResetEmulationThread; |
| 472 |
begin |
525 |
begin |
| 473 |
Playing := False; |
526 |
Playing := False; |
@@ -896,11 +949,26 @@ begin |
| 896 |
PostMessage(Screen.ActiveControl.Handle, LM_COPY, 0, 0); |
949 |
PostMessage(Screen.ActiveControl.Handle, LM_COPY, 0, 0); |
| 897 |
end; |
950 |
end; |
| 898 |
|
951 |
|
|
|
952 |
procedure TfrmTracker.ComboBox1Change(Sender: TObject); |
|
|
953 |
begin |
|
|
954 |
TrackerGrid.SelectedInstrument := ComboBox1.ItemIndex; |
|
|
955 |
end; |
|
|
956 |
|
| 899 |
procedure TfrmTracker.PasteActionExecute(Sender: TObject); |
957 |
procedure TfrmTracker.PasteActionExecute(Sender: TObject); |
| 900 |
begin |
958 |
begin |
| 901 |
PostMessage(Screen.ActiveControl.Handle, LM_PASTE, 0, 0); |
959 |
PostMessage(Screen.ActiveControl.Handle, LM_PASTE, 0, 0); |
| 902 |
end; |
960 |
end; |
| 903 |
|
961 |
|
|
|
962 |
procedure TfrmTracker.SpinEdit1Change(Sender: TObject); |
|
|
963 |
begin |
|
|
964 |
TrackerGrid.SelectedOctave := SpinEdit1.Value; |
|
|
965 |
end; |
|
|
966 |
|
|
|
967 |
procedure TfrmTracker.SpinEdit2Change(Sender: TObject); |
|
|
968 |
begin |
|
|
969 |
TrackerGrid.Step := SpinEdit2.Value; |
|
|
970 |
end; |
|
|
971 |
|
| 904 |
procedure TfrmTracker.DivRatioSpinnerChange(Sender: TObject); |
972 |
procedure TfrmTracker.DivRatioSpinnerChange(Sender: TObject); |
| 905 |
begin |
973 |
begin |
| 906 |
CurrentInstrument^.DividingRatio := Round(DivRatioSpinner.Position); |
974 |
CurrentInstrument^.DividingRatio := Round(DivRatioSpinner.Position); |
@@ -1101,24 +1169,20 @@ end; |
| 1101 |
|
1169 |
|
| 1102 |
procedure TfrmTracker.ToolButton2Click(Sender: TObject); |
1170 |
procedure TfrmTracker.ToolButton2Click(Sender: TObject); |
| 1103 |
begin |
1171 |
begin |
| 1104 |
if not Playing then begin |
1172 |
if Playing then ResetEmulationThread; |
| 1105 |
if RenderPreviewROM(Song) then begin |
1173 |
|
| 1106 |
Playing := True; |
1174 |
if PreparePreview then begin |
| 1107 |
ToolButton2.ImageIndex := 75; |
1175 |
Playing := True; |
| 1108 |
|
1176 |
EmulationThread.Start; |
| 1109 |
// Load the new symbol table |
1177 |
end; |
| 1110 |
SymbolTable := ParseSymFile('hUGEDriver/preview.sym'); |
1178 |
end; |
| 1111 |
|
1179 |
|
| 1112 |
// Start emulation on the rendered preview binary |
1180 |
procedure TfrmTracker.ToolButton3Click(Sender: TObject); |
| 1113 |
EmulationThread.Terminate; |
1181 |
begin |
| 1114 |
EmulationThread.WaitFor; |
1182 |
if PreparePreview then begin |
| 1115 |
EmulationThread.Free; |
1183 |
Playing := True; |
| 1116 |
EmulationThread := TEmulationThread.Create('hUGEDriver/preview.gb'); |
1184 |
EmulationThread.Start; |
| 1117 |
EmulationThread.Start; |
1185 |
end; |
| 1118 |
end |
|
|
| 1119 |
else ResetEmulationThread; |
|
|
| 1120 |
end |
|
|
| 1121 |
else ResetEmulationThread; |
|
|
| 1122 |
end; |
1186 |
end; |
| 1123 |
|
1187 |
|
| 1124 |
procedure TfrmTracker.ToolButton4Click(Sender: TObject); |
1188 |
procedure TfrmTracker.ToolButton4Click(Sender: TObject); |