Commit 37e79e4

Nick committed on
Work on order edit, some work on codegen, added some icons
commit 37e79e4fc09fdad125229e79248710f5c3506989 parent a639ae6
5 changed files +622−372
Modifiedcodegen.pas +66−1
@@ -5,9 +5,74 @@ unit Codegen;
5 interface 5 interface
6 6
7 uses 7 uses
8 Classes, SysUtils; 8 Classes, SysUtils, math,
9 Waves, Instruments,
10 HugeDatatypes;
11
12 function RenderOrderTable(OrderMatrix: TOrderMatrix): String;
13 function RenderInstrument(Name: String; Instr: TInstrument): String;
14 function RenderPattern(Name: String; Pattern: TPattern): String;
15 function RenderWaveform(Name: String; Wave: TWave): String;
16
17 //TODO: RenderRoutines
9 18
10 implementation 19 implementation
11 20
21 function RenderOrderTable(OrderMatrix: TOrderMatrix): String;
22 var
23 I: Integer;
24 Res: TStringList;
25 OrderCnt: Integer;
26
27 function ArrayHelper(Ints: array of Integer): String;
28 var
29 I: Integer;
30 Strs: array of string;
31 begin
32 for I := Low(Ints) to High(Ints) do
33 Strs[I] := 'o' + IntToStr(Ints[I]);
34 Result := TStringHelper.Join(',', Strs);
35 end;
36 begin
37 Res := TStringList.Create;
38 Res.Delimiter := LineEnding;
39 OrderCnt := maxvalue([High(OrderMatrix[0]), High(OrderMatrix[1]),
40 High(OrderMatrix[2]), High(OrderMatrix[3])]);
41
42 Res.Add(Format('order_cnt: db %s', [OrderCnt*2]));
43 Res.Add(Format('order1: dw %s', [ArrayHelper(OrderMatrix[0])]));
44 Res.Add(Format('order2: dw %s', [ArrayHelper(OrderMatrix[1])]));
45 Res.Add(Format('order3: dw %s', [ArrayHelper(OrderMatrix[2])]));
46 Res.Add(Format('order4: dw %s', [ArrayHelper(OrderMatrix[3])]));
47
48 Result := Res.DelimitedText;
49 Res.Free;
50 end;
51
52 function RenderInstrument(Name: String; Instr: TInstrument): String;
53 var
54 SL: TStringList;
55 begin
56
57 end;
58
59 function RenderPattern(Name: String; Pattern: TPattern): String;
60 begin
61
62 end;
63
64 function RenderWaveform(Name: String; Wave: TWave): String;
65 var
66 SL: TStringList;
67 I: Integer;
68 begin
69 SL := TStringList.Create;
70 SL.Delimiter := ', ';
71 for I := Low(Wave) to High(Wave) do
72 SL.Add(IntToStr(Wave[I]));
73 Result := Name + SL.DelimitedText;
74 SL.Free;
75 end;
76
12 end. 77 end.
13 78
Modifiedhugedatatypes.pas +2−1
@@ -24,7 +24,8 @@ type
24 TPattern = array[0..63] of TCell; 24 TPattern = array[0..63] of TCell;
25 PPattern = ^TPattern; 25 PPattern = ^TPattern;
26 26
27 TOrderMap = specialize TFPGMap<Integer, PPattern>; 27 TPatternMap = specialize TFPGMap<Integer, PPattern>;
28 TOrderMatrix = array[0..3] of array of Integer;
28 29
29 TSelection = array of array of TCell; 30 TSelection = array of array of TCell;
30 31
Modifiedtracker.lfm +501−360
@@ -1,12 +1,12 @@
1 object frmTracker: TfrmTracker 1 object frmTracker: TfrmTracker
2 Left = 2132 2 Left = 1409
3 Height = 1298 3 Height = 1514
4 Top = 374 4 Top = 390
5 Width = 1893 5 Width = 2208
6 Caption = 'hUGETracker' 6 Caption = 'hUGETracker'
7 ClientHeight = 1268 7 ClientHeight = 1480
8 ClientWidth = 1893 8 ClientWidth = 2208
9 DesignTimePPI = 144 9 DesignTimePPI = 168
10 Menu = MainMenu1 10 Menu = MainMenu1
11 OnCreate = FormCreate 11 OnCreate = FormCreate
12 OnKeyDown = FormKeyDown 12 OnKeyDown = FormKeyDown
@@ -15,9 +15,9 @@ object frmTracker: TfrmTracker
15 LCLVersion = '2.0.6.0' 15 LCLVersion = '2.0.6.0'
16 object TreeView1: TTreeView 16 object TreeView1: TTreeView
17 Left = 0 17 Left = 0
18 Height = 930 18 Height = 1084
19 Top = 302 19 Top = 353
20 Width = 290 20 Width = 338
21 Align = alLeft 21 Align = alLeft
22 ParentFont = False 22 ParentFont = False
23 ReadOnly = True 23 ReadOnly = True
@@ -32,100 +32,100 @@ object frmTracker: TfrmTracker
32 } 32 }
33 end 33 end
34 object Splitter1: TSplitter 34 object Splitter1: TSplitter
35 Left = 290 35 Left = 338
36 Height = 930 36 Height = 1084
37 Top = 302 37 Top = 353
38 Width = 8 38 Width = 9
39 end 39 end
40 object Panel1: TPanel 40 object Panel1: TPanel
41 Left = 298 41 Left = 347
42 Height = 930 42 Height = 1084
43 Top = 302 43 Top = 353
44 Width = 1595 44 Width = 1861
45 Align = alClient 45 Align = alClient
46 BevelOuter = bvNone 46 BevelOuter = bvNone
47 ClientHeight = 930 47 ClientHeight = 1084
48 ClientWidth = 1595 48 ClientWidth = 1861
49 ParentFont = False 49 ParentFont = False
50 TabOrder = 2 50 TabOrder = 2
51 object PageControl1: TPageControl 51 object PageControl1: TPageControl
52 Left = 0 52 Left = 0
53 Height = 930 53 Height = 1084
54 Top = 0 54 Top = 0
55 Width = 1595 55 Width = 1861
56 ActivePage = GeneralTabSheet 56 ActivePage = PatternTabSheet
57 Align = alClient 57 Align = alClient
58 ParentFont = False 58 ParentFont = False
59 TabIndex = 0 59 TabIndex = 1
60 TabOrder = 0 60 TabOrder = 0
61 object GeneralTabSheet: TTabSheet 61 object GeneralTabSheet: TTabSheet
62 Caption = 'General' 62 Caption = 'General'
63 ClientHeight = 892 63 ClientHeight = 1041
64 ClientWidth = 1587 64 ClientWidth = 1853
65 ParentFont = False 65 ParentFont = False
66 object SongInformationGroupbox: TGroupBox 66 object SongInformationGroupbox: TGroupBox
67 Left = 12 67 Left = 14
68 Height = 346 68 Height = 404
69 Top = 12 69 Top = 14
70 Width = 1094 70 Width = 1276
71 Caption = 'Song information' 71 Caption = 'Song information'
72 ClientHeight = 316 72 ClientHeight = 369
73 ClientWidth = 1090 73 ClientWidth = 1272
74 ParentFont = False 74 ParentFont = False
75 TabOrder = 0 75 TabOrder = 0
76 object Label15: TLabel 76 object Label15: TLabel
77 Left = 12 77 Left = 14
78 Height = 25 78 Height = 30
79 Top = 24 79 Top = 28
80 Width = 42 80 Width = 47
81 Caption = 'Song' 81 Caption = 'Song'
82 ParentColor = False 82 ParentColor = False
83 ParentFont = False 83 ParentFont = False
84 end 84 end
85 object Label16: TLabel 85 object Label16: TLabel
86 Left = 10 86 Left = 12
87 Height = 25 87 Height = 30
88 Top = 72 88 Top = 84
89 Width = 42 89 Width = 49
90 Caption = 'Artist' 90 Caption = 'Artist'
91 ParentColor = False 91 ParentColor = False
92 ParentFont = False 92 ParentFont = False
93 end 93 end
94 object SongEdit: TEdit 94 object SongEdit: TEdit
95 Left = 84 95 Left = 98
96 Height = 33 96 Height = 38
97 Hint = 'The name of your composition' 97 Hint = 'The name of your composition'
98 Top = 12 98 Top = 14
99 Width = 324 99 Width = 378
100 OnChange = SongEditChange 100 OnChange = SongEditChange
101 ParentFont = False 101 ParentFont = False
102 TabOrder = 0 102 TabOrder = 0
103 end 103 end
104 object ArtistEdit: TEdit 104 object ArtistEdit: TEdit
105 Left = 84 105 Left = 98
106 Height = 33 106 Height = 38
107 Hint = 'Your name or handle' 107 Hint = 'Your name or handle'
108 Top = 60 108 Top = 70
109 Width = 324 109 Width = 378
110 OnChange = ArtistEditChange 110 OnChange = ArtistEditChange
111 ParentFont = False 111 ParentFont = False
112 TabOrder = 1 112 TabOrder = 1
113 end 113 end
114 object Label21: TLabel 114 object Label21: TLabel
115 Left = 12 115 Left = 14
116 Height = 25 116 Height = 30
117 Top = 117 117 Top = 136
118 Width = 170 118 Width = 197
119 Caption = 'Tempo (ticks per row)' 119 Caption = 'Tempo (ticks per row)'
120 ParentColor = False 120 ParentColor = False
121 ParentFont = False 121 ParentFont = False
122 end 122 end
123 object TicksPerRowSpinEdit: TSpinEdit 123 object TicksPerRowSpinEdit: TSpinEdit
124 Left = 199 124 Left = 232
125 Height = 33 125 Height = 38
126 Hint = 'How many ticks should happen before the row changes. Higher means slower' 126 Hint = 'How many ticks should happen before the row changes. Higher means slower'
127 Top = 110 127 Top = 128
128 Width = 75 128 Width = 88
129 MaxValue = 20 129 MaxValue = 20
130 MinValue = 1 130 MinValue = 1
131 OnChange = TicksPerRowSpinEditChange 131 OnChange = TicksPerRowSpinEditChange
@@ -137,24 +137,25 @@ object frmTracker: TfrmTracker
137 end 137 end
138 object PatternTabSheet: TTabSheet 138 object PatternTabSheet: TTabSheet
139 Caption = 'Patterns' 139 Caption = 'Patterns'
140 ClientHeight = 892 140 ClientHeight = 1041
141 ClientWidth = 1587 141 ClientWidth = 1853
142 ParentFont = False 142 ParentFont = False
143 object Panel3: TPanel 143 object Panel3: TPanel
144 Left = 336 144 Left = 392
145 Height = 892 145 Height = 1041
146 Top = 0 146 Top = 0
147 Width = 1251 147 Width = 1461
148 Align = alClient 148 Align = alClient
149 ClientHeight = 892 149 ClientHeight = 1041
150 ClientWidth = 1251 150 ClientWidth = 1461
151 ParentFont = False
151 TabOrder = 0 152 TabOrder = 0
152 object HeaderControl1: THeaderControl 153 object HeaderControl1: THeaderControl
153 Left = 1 154 Left = 1
154 Height = 45 155 Height = 52
155 Hint = 'Left click to mute, right click to solo' 156 Hint = 'Left click to mute, right click to solo'
156 Top = 1 157 Top = 1
157 Width = 1249 158 Width = 1459
158 DragReorder = False 159 DragReorder = False
159 Images = ImageList2 160 Images = ImageList2
160 Sections = < 161 Sections = <
@@ -162,39 +163,40 @@ object frmTracker: TfrmTracker
162 Alignment = taCenter 163 Alignment = taCenter
163 ImageIndex = 1 164 ImageIndex = 1
164 Text = 'Duty 1' 165 Text = 'Duty 1'
165 Width = 200 166 Width = 233
166 Visible = True 167 Visible = True
167 end 168 end
168 item 169 item
169 Alignment = taCenter 170 Alignment = taCenter
170 ImageIndex = 1 171 ImageIndex = 1
171 Text = 'Duty 2' 172 Text = 'Duty 2'
172 Width = 200 173 Width = 233
173 Visible = True 174 Visible = True
174 end 175 end
175 item 176 item
176 Alignment = taCenter 177 Alignment = taCenter
177 ImageIndex = 1 178 ImageIndex = 1
178 Text = 'Wave' 179 Text = 'Wave'
179 Width = 200 180 Width = 233
180 Visible = True 181 Visible = True
181 end 182 end
182 item 183 item
183 Alignment = taCenter 184 Alignment = taCenter
184 ImageIndex = 1 185 ImageIndex = 1
185 Text = 'Noise' 186 Text = 'Noise'
186 Width = 200 187 Width = 233
187 Visible = True 188 Visible = True
188 end> 189 end>
189 OnSectionClick = HeaderControl1SectionClick 190 OnSectionClick = HeaderControl1SectionClick
190 Align = alTop 191 Align = alTop
191 ParentFont = False 192 ParentFont = False
193 OnMouseDown = HeaderControl1MouseDown
192 end 194 end
193 object ScrollBox1: TScrollBox 195 object ScrollBox1: TScrollBox
194 Left = 1 196 Left = 1
195 Height = 845 197 Height = 987
196 Top = 46 198 Top = 53
197 Width = 1249 199 Width = 1459
198 HorzScrollBar.Increment = 1 200 HorzScrollBar.Increment = 1
199 HorzScrollBar.Page = 1 201 HorzScrollBar.Page = 1
200 HorzScrollBar.Smooth = True 202 HorzScrollBar.Smooth = True
@@ -205,49 +207,51 @@ object frmTracker: TfrmTracker
205 VertScrollBar.Tracking = True 207 VertScrollBar.Tracking = True
206 Align = alClient 208 Align = alClient
207 BorderStyle = bsNone 209 BorderStyle = bsNone
210 ParentFont = False
208 TabOrder = 1 211 TabOrder = 1
209 end 212 end
210 end 213 end
211 object OrderEditStringGrid: TStringGrid 214 object OrderEditStringGrid: TStringGrid
212 Left = 0 215 Left = 0
213 Height = 892 216 Height = 1041
214 Top = 0 217 Top = 0
215 Width = 336 218 Width = 392
216 Align = alLeft 219 Align = alLeft
217 AutoFillColumns = True 220 AutoFillColumns = True
218 Columns = < 221 Columns = <
219 item 222 item
220 Alignment = taCenter 223 Alignment = taCenter
221 MinSize = 50 224 MinSize = 58
222 MaxSize = 50 225 MaxSize = 58
223 Title.Caption = 'Dty1' 226 Title.Caption = 'Dty1'
224 Width = 52 227 Width = 61
225 end 228 end
226 item 229 item
227 Alignment = taCenter 230 Alignment = taCenter
228 MinSize = 50 231 MinSize = 58
229 MaxSize = 50 232 MaxSize = 58
230 Title.Caption = 'Dty2' 233 Title.Caption = 'Dty2'
231 Width = 52 234 Width = 61
232 end 235 end
233 item 236 item
234 Alignment = taCenter 237 Alignment = taCenter
235 MinSize = 50 238 MinSize = 58
236 MaxSize = 50 239 MaxSize = 58
237 Title.Caption = 'Wav' 240 Title.Caption = 'Wav'
238 Width = 52 241 Width = 61
239 end 242 end
240 item 243 item
241 Alignment = taCenter 244 Alignment = taCenter
242 MinSize = 50 245 MinSize = 58
243 MaxSize = 50 246 MaxSize = 58
244 Title.Caption = 'Nse' 247 Title.Caption = 'Nse'
245 Width = 54 248 Width = 63
246 end> 249 end>
247 DefaultColWidth = 25 250 DefaultColWidth = 29
248 DefaultRowHeight = 32 251 DefaultRowHeight = 37
249 ExtendedSelect = False 252 ExtendedSelect = False
250 Options = [goFixedVertLine, goFixedHorzLine, goRangeSelect, goRowMoving, goEditing, goAutoAddRows, goTabs, goSmoothScroll, goFixedRowNumbering, goRowHighlight] 253 Options = [goFixedVertLine, goFixedHorzLine, goRangeSelect, goRowMoving, goEditing, goAutoAddRows, goTabs, goSmoothScroll, goFixedRowNumbering, goRowHighlight]
254 ParentFont = False
251 PopupMenu = OrderEditPopup 255 PopupMenu = OrderEditPopup
252 RangeSelectMode = rsmMulti 256 RangeSelectMode = rsmMulti
253 RowCount = 10 257 RowCount = 10
@@ -259,31 +263,32 @@ object frmTracker: TfrmTracker
259 OnColRowExchanged = OrderEditStringGridColRowExchanged 263 OnColRowExchanged = OrderEditStringGridColRowExchanged
260 OnColRowInserted = OrderEditStringGridColRowInserted 264 OnColRowInserted = OrderEditStringGridColRowInserted
261 OnColRowMoved = OrderEditStringGridColRowMoved 265 OnColRowMoved = OrderEditStringGridColRowMoved
266 OnDblClick = OrderEditStringGridDblClick
262 OnEditingDone = OrderEditStringGridEditingDone 267 OnEditingDone = OrderEditStringGridEditingDone
263 OnKeyDown = OrderEditStringGridKeyDown 268 OnKeyDown = OrderEditStringGridKeyDown
264 ColWidths = ( 269 ColWidths = (
265 96 270 112
266 52 271 61
267 52 272 61
268 52 273 61
269 54 274 63
270 ) 275 )
271 end 276 end
272 end 277 end
273 object InstrumentTabSheet: TTabSheet 278 object InstrumentTabSheet: TTabSheet
274 Caption = 'Instruments' 279 Caption = 'Instruments'
275 ClientHeight = 892 280 ClientHeight = 1041
276 ClientWidth = 1587 281 ClientWidth = 1853
277 ParentFont = False 282 ParentFont = False
278 object PaintBox1: TPaintBox 283 object PaintBox1: TPaintBox
279 AnchorSideTop.Control = FlowPanel1 284 AnchorSideTop.Control = FlowPanel1
280 AnchorSideTop.Side = asrBottom 285 AnchorSideTop.Side = asrBottom
281 AnchorSideBottom.Side = asrBottom 286 AnchorSideBottom.Side = asrBottom
282 Left = 0 287 Left = 0
283 Height = 394 288 Height = 459
284 Hint = 'Preview of how the resulting waveform will look with envelope applied' 289 Hint = 'Preview of how the resulting waveform will look with envelope applied'
285 Top = 498 290 Top = 582
286 Width = 1587 291 Width = 1853
287 Align = alClient 292 Align = alClient
288 Color = clBlack 293 Color = clBlack
289 ParentColor = False 294 ParentColor = False
@@ -292,9 +297,9 @@ object frmTracker: TfrmTracker
292 end 297 end
293 object FlowPanel1: TFlowPanel 298 object FlowPanel1: TFlowPanel
294 Left = 0 299 Left = 0
295 Height = 498 300 Height = 582
296 Top = 0 301 Top = 0
297 Width = 1587 302 Width = 1853
298 Align = alTop 303 Align = alTop
299 AutoSize = True 304 AutoSize = True
300 BevelOuter = bvNone 305 BevelOuter = bvNone
@@ -326,28 +331,29 @@ object frmTracker: TfrmTracker
326 end> 331 end>
327 FlowLayout = tlTop 332 FlowLayout = tlTop
328 FlowStyle = fsLeftRightTopBottom 333 FlowStyle = fsLeftRightTopBottom
334 ParentFont = False
329 TabOrder = 0 335 TabOrder = 0
330 object InstrumentGroupBox: TGroupBox 336 object InstrumentGroupBox: TGroupBox
331 Left = 10 337 Left = 12
332 Height = 204 338 Height = 238
333 Top = 10 339 Top = 12
334 Width = 406 340 Width = 474
335 Anchors = [] 341 Anchors = []
336 BorderSpacing.Left = 10 342 BorderSpacing.Left = 12
337 BorderSpacing.Top = 10 343 BorderSpacing.Top = 12
338 BorderSpacing.Right = 10 344 BorderSpacing.Right = 12
339 BorderSpacing.Bottom = 10 345 BorderSpacing.Bottom = 12
340 Caption = 'Instrument' 346 Caption = 'Instrument'
341 ClientHeight = 174 347 ClientHeight = 203
342 ClientWidth = 402 348 ClientWidth = 470
343 ParentFont = False 349 ParentFont = False
344 TabOrder = 0 350 TabOrder = 0
345 object InstrumentNumberSpinner: TSpinEdit 351 object InstrumentNumberSpinner: TSpinEdit
346 Left = 120 352 Left = 140
347 Height = 33 353 Height = 38
348 Hint = 'What instrument to edit' 354 Hint = 'What instrument to edit'
349 Top = 2 355 Top = 2
350 Width = 264 356 Width = 308
351 MaxValue = 15 357 MaxValue = 15
352 MinValue = 1 358 MinValue = 1
353 OnChange = InstrumentNumberSpinnerChange 359 OnChange = InstrumentNumberSpinnerChange
@@ -356,49 +362,49 @@ object frmTracker: TfrmTracker
356 Value = 1 362 Value = 1
357 end 363 end
358 object Label1: TLabel 364 object Label1: TLabel
359 Left = 12 365 Left = 14
360 Height = 25 366 Height = 30
361 Top = 12 367 Top = 14
362 Width = 86 368 Width = 101
363 Caption = 'Instrument' 369 Caption = 'Instrument'
364 ParentColor = False 370 ParentColor = False
365 ParentFont = False 371 ParentFont = False
366 end 372 end
367 object Label2: TLabel 373 object Label2: TLabel
368 Left = 12 374 Left = 14
369 Height = 25 375 Height = 30
370 Top = 51 376 Top = 60
371 Width = 47 377 Width = 56
372 Caption = 'Name' 378 Caption = 'Name'
373 ParentColor = False 379 ParentColor = False
374 ParentFont = False 380 ParentFont = False
375 end 381 end
376 object InstrumentNameEdit: TEdit 382 object InstrumentNameEdit: TEdit
377 Left = 120 383 Left = 140
378 Height = 33 384 Height = 38
379 Hint = 'The name of the instrument' 385 Hint = 'The name of the instrument'
380 Top = 39 386 Top = 46
381 Width = 264 387 Width = 308
382 OnChange = InstrumentNameEditChange 388 OnChange = InstrumentNameEditChange
383 ParentFont = False 389 ParentFont = False
384 TabOrder = 1 390 TabOrder = 1
385 end 391 end
386 object Label3: TLabel 392 object Label3: TLabel
387 Left = 12 393 Left = 14
388 Height = 25 394 Height = 30
389 Top = 92 395 Top = 107
390 Width = 37 396 Width = 43
391 Caption = 'Type' 397 Caption = 'Type'
392 ParentColor = False 398 ParentColor = False
393 ParentFont = False 399 ParentFont = False
394 end 400 end
395 object InstrumentTypeCombobox: TComboBox 401 object InstrumentTypeCombobox: TComboBox
396 Left = 120 402 Left = 140
397 Height = 33 403 Height = 38
398 Hint = 'What type of channel this instrument will be played on' 404 Hint = 'What type of channel this instrument will be played on'
399 Top = 80 405 Top = 93
400 Width = 264 406 Width = 308
401 ItemHeight = 25 407 ItemHeight = 30
402 ItemIndex = 0 408 ItemIndex = 0
403 Items.Strings = ( 409 Items.Strings = (
404 'Square' 410 'Square'
@@ -412,21 +418,21 @@ object frmTracker: TfrmTracker
412 Text = 'Square' 418 Text = 'Square'
413 end 419 end
414 object LengthEnabledCheckbox: TCheckBox 420 object LengthEnabledCheckbox: TCheckBox
415 Left = 12 421 Left = 14
416 Height = 29 422 Height = 34
417 Hint = 'Cut the sound after a certain length of time' 423 Hint = 'Cut the sound after a certain length of time'
418 Top = 126 424 Top = 147
419 Width = 84 425 Width = 98
420 Caption = 'Length' 426 Caption = 'Length'
421 OnChange = LengthEnabledCheckboxChange 427 OnChange = LengthEnabledCheckboxChange
422 ParentFont = False 428 ParentFont = False
423 TabOrder = 3 429 TabOrder = 3
424 end 430 end
425 object LengthSpinner: TECSpinPosition 431 object LengthSpinner: TECSpinPosition
426 Left = 120 432 Left = 140
427 Height = 24 433 Height = 24
428 Hint = 'Units of length to cut the sound after' 434 Hint = 'Units of length to cut the sound after'
429 Top = 120 435 Top = 140
430 Width = 174 436 Width = 174
431 Buttons.BtnBigDec.BtnOrder = 1 437 Buttons.BtnBigDec.BtnOrder = 1
432 Buttons.BtnBigDec.Visible = False 438 Buttons.BtnBigDec.Visible = False
@@ -473,45 +479,45 @@ object frmTracker: TfrmTracker
473 end 479 end
474 end 480 end
475 object EnvelopeGroupBox: TGroupBox 481 object EnvelopeGroupBox: TGroupBox
476 Left = 436 482 Left = 510
477 Height = 204 483 Height = 238
478 Top = 10 484 Top = 12
479 Width = 988 485 Width = 1153
480 Anchors = [] 486 Anchors = []
481 BorderSpacing.Left = 10 487 BorderSpacing.Left = 12
482 BorderSpacing.Top = 10 488 BorderSpacing.Top = 12
483 BorderSpacing.Right = 10 489 BorderSpacing.Right = 12
484 BorderSpacing.Bottom = 10 490 BorderSpacing.Bottom = 12
485 Caption = 'Envelope' 491 Caption = 'Envelope'
486 ClientHeight = 174 492 ClientHeight = 203
487 ClientWidth = 984 493 ClientWidth = 1149
488 ParentFont = False 494 ParentFont = False
489 TabOrder = 1 495 TabOrder = 1
490 object Label4: TLabel 496 object Label4: TLabel
491 Left = 12 497 Left = 14
492 Height = 25 498 Height = 30
493 Top = 14 499 Top = 16
494 Width = 69 500 Width = 80
495 Caption = 'Start vol.' 501 Caption = 'Start vol.'
496 ParentColor = False 502 ParentColor = False
497 ParentFont = False 503 ParentFont = False
498 end 504 end
499 object Label5: TLabel 505 object Label5: TLabel
500 Left = 12 506 Left = 14
501 Height = 25 507 Height = 30
502 Top = 72 508 Top = 84
503 Width = 71 509 Width = 84
504 Caption = 'Direction' 510 Caption = 'Direction'
505 ParentColor = False 511 ParentColor = False
506 ParentFont = False 512 ParentFont = False
507 end 513 end
508 object DirectionComboBox: TComboBox 514 object DirectionComboBox: TComboBox
509 Left = 123 515 Left = 144
510 Height = 33 516 Height = 38
511 Hint = 'Whether to fade the sound in or out' 517 Hint = 'Whether to fade the sound in or out'
512 Top = 60 518 Top = 70
513 Width = 297 519 Width = 346
514 ItemHeight = 25 520 ItemHeight = 30
515 ItemIndex = 1 521 ItemIndex = 1
516 Items.Strings = ( 522 Items.Strings = (
517 'Up' 523 'Up'
@@ -524,16 +530,16 @@ object frmTracker: TfrmTracker
524 Text = 'Down' 530 Text = 'Down'
525 end 531 end
526 object Label6: TLabel 532 object Label6: TLabel
527 Left = 12 533 Left = 14
528 Height = 25 534 Height = 30
529 Top = 129 535 Top = 150
530 Width = 60 536 Width = 71
531 Caption = 'Change' 537 Caption = 'Change'
532 ParentColor = False 538 ParentColor = False
533 ParentFont = False 539 ParentFont = False
534 end 540 end
535 object StartVolSpinner: TECSpinPosition 541 object StartVolSpinner: TECSpinPosition
536 Left = 123 542 Left = 144
537 Height = 24 543 Height = 24
538 Hint = 'The initial volume when the note is retriggered' 544 Hint = 'The initial volume when the note is retriggered'
539 Top = -2 545 Top = -2
@@ -581,10 +587,10 @@ object frmTracker: TfrmTracker
581 OnChange = StartVolSpinnerChange 587 OnChange = StartVolSpinnerChange
582 end 588 end
583 object EnvChangeSpinner: TECSpinPosition 589 object EnvChangeSpinner: TECSpinPosition
584 Left = 123 590 Left = 144
585 Height = 24 591 Height = 24
586 Hint = 'How much to change the volume each time' 592 Hint = 'How much to change the volume each time'
587 Top = 120 593 Top = 140
588 Width = 198 594 Width = 198
589 Buttons.BtnBigDec.BtnOrder = 1 595 Buttons.BtnBigDec.BtnOrder = 1
590 Buttons.BtnBigDec.Visible = False 596 Buttons.BtnBigDec.Visible = False
@@ -629,21 +635,21 @@ object frmTracker: TfrmTracker
629 OnChange = EnvChangeSpinnerChange 635 OnChange = EnvChangeSpinnerChange
630 end 636 end
631 object Panel5: TPanel 637 object Panel5: TPanel
632 Left = 450 638 Left = 525
633 Height = 158 639 Height = 184
634 Top = 0 640 Top = 0
635 Width = 519 641 Width = 606
636 BevelOuter = bvLowered 642 BevelOuter = bvLowered
637 ClientHeight = 158 643 ClientHeight = 184
638 ClientWidth = 519 644 ClientWidth = 606
639 ParentFont = False 645 ParentFont = False
640 TabOrder = 3 646 TabOrder = 3
641 object EnvelopePaintbox: TPaintBox 647 object EnvelopePaintbox: TPaintBox
642 Left = 1 648 Left = 1
643 Height = 156 649 Height = 182
644 Hint = 'Preview of the volume envelope' 650 Hint = 'Preview of the volume envelope'
645 Top = 1 651 Top = 1
646 Width = 517 652 Width = 604
647 Align = alClient 653 Align = alClient
648 ParentFont = False 654 ParentFont = False
649 OnPaint = EnvelopePaintboxPaint 655 OnPaint = EnvelopePaintboxPaint
@@ -651,36 +657,36 @@ object frmTracker: TfrmTracker
651 end 657 end
652 end 658 end
653 object SquareGroupBox: TGroupBox 659 object SquareGroupBox: TGroupBox
654 Left = 10 660 Left = 12
655 Height = 254 661 Height = 296
656 Top = 234 662 Top = 274
657 Width = 478 663 Width = 558
658 Anchors = [] 664 Anchors = []
659 BorderSpacing.Left = 10 665 BorderSpacing.Left = 12
660 BorderSpacing.Top = 10 666 BorderSpacing.Top = 12
661 BorderSpacing.Right = 10 667 BorderSpacing.Right = 12
662 BorderSpacing.Bottom = 10 668 BorderSpacing.Bottom = 12
663 Caption = 'Square' 669 Caption = 'Square'
664 ClientHeight = 224 670 ClientHeight = 261
665 ClientWidth = 474 671 ClientWidth = 554
666 ParentFont = False 672 ParentFont = False
667 TabOrder = 2 673 TabOrder = 2
668 object Label7: TLabel 674 object Label7: TLabel
669 Left = 12 675 Left = 14
670 Height = 25 676 Height = 30
671 Top = 24 677 Top = 28
672 Width = 92 678 Width = 107
673 Caption = 'Sweep time' 679 Caption = 'Sweep time'
674 ParentColor = False 680 ParentColor = False
675 ParentFont = False 681 ParentFont = False
676 end 682 end
677 object SweepTimeCombobox: TComboBox 683 object SweepTimeCombobox: TComboBox
678 Left = 156 684 Left = 182
679 Height = 33 685 Height = 38
680 Hint = 'How long to sweep' 686 Hint = 'How long to sweep'
681 Top = 12 687 Top = 14
682 Width = 300 688 Width = 350
683 ItemHeight = 25 689 ItemHeight = 30
684 ItemIndex = 0 690 ItemIndex = 0
685 Items.Strings = ( 691 Items.Strings = (
686 'Off - no frequency change' 692 'Off - no frequency change'
@@ -701,12 +707,12 @@ object frmTracker: TfrmTracker
701 Text = 'Off - no frequency change' 707 Text = 'Off - no frequency change'
702 end 708 end
703 object SweepDirectionCombobox: TComboBox 709 object SweepDirectionCombobox: TComboBox
704 Left = 156 710 Left = 182
705 Height = 33 711 Height = 38
706 Hint = 'The direction of the sweep' 712 Hint = 'The direction of the sweep'
707 Top = 60 713 Top = 70
708 Width = 300 714 Width = 350
709 ItemHeight = 25 715 ItemHeight = 30
710 ItemIndex = 1 716 ItemIndex = 1
711 Items.Strings = ( 717 Items.Strings = (
712 'Up' 718 'Up'
@@ -721,39 +727,39 @@ object frmTracker: TfrmTracker
721 Text = 'Down' 727 Text = 'Down'
722 end 728 end
723 object Label8: TLabel 729 object Label8: TLabel
724 Left = 12 730 Left = 14
725 Height = 25 731 Height = 30
726 Top = 72 732 Top = 84
727 Width = 126 733 Width = 147
728 Caption = 'Sweep direction' 734 Caption = 'Sweep direction'
729 ParentColor = False 735 ParentColor = False
730 ParentFont = False 736 ParentFont = False
731 end 737 end
732 object Label9: TLabel 738 object Label9: TLabel
733 Left = 12 739 Left = 14
734 Height = 25 740 Height = 30
735 Top = 126 741 Top = 147
736 Width = 86 742 Width = 101
737 Caption = 'Sweep size' 743 Caption = 'Sweep size'
738 ParentColor = False 744 ParentColor = False
739 ParentFont = False 745 ParentFont = False
740 end 746 end
741 object Label10: TLabel 747 object Label10: TLabel
742 Left = 12 748 Left = 14
743 Height = 25 749 Height = 30
744 Top = 180 750 Top = 210
745 Width = 38 751 Width = 44
746 Caption = 'Duty' 752 Caption = 'Duty'
747 ParentColor = False 753 ParentColor = False
748 ParentFont = False 754 ParentFont = False
749 end 755 end
750 object DutyCombobox: TComboBox 756 object DutyCombobox: TComboBox
751 Left = 156 757 Left = 182
752 Height = 33 758 Height = 38
753 Hint = 'Which duty cycle to use (changes timbre of wave)' 759 Hint = 'Which duty cycle to use (changes timbre of wave)'
754 Top = 168 760 Top = 196
755 Width = 300 761 Width = 350
756 ItemHeight = 25 762 ItemHeight = 30
757 ItemIndex = 2 763 ItemIndex = 2
758 Items.Strings = ( 764 Items.Strings = (
759 '12.5%' 765 '12.5%'
@@ -770,10 +776,10 @@ object frmTracker: TfrmTracker
770 Text = '50% (square)' 776 Text = '50% (square)'
771 end 777 end
772 object SweepSizeSpinner: TECSpinPosition 778 object SweepSizeSpinner: TECSpinPosition
773 Left = 156 779 Left = 182
774 Height = 24 780 Height = 24
775 Hint = 'Change by this amount each sweep tick' 781 Hint = 'Change by this amount each sweep tick'
776 Top = 112 782 Top = 131
777 Width = 198 783 Width = 198
778 Buttons.BtnBigDec.BtnOrder = 1 784 Buttons.BtnBigDec.BtnOrder = 1
779 Buttons.BtnBigDec.Visible = False 785 Buttons.BtnBigDec.Visible = False
@@ -819,67 +825,67 @@ object frmTracker: TfrmTracker
819 end 825 end
820 end 826 end
821 object WaveGroupBox: TGroupBox 827 object WaveGroupBox: TGroupBox
822 Left = 508 828 Left = 594
823 Height = 254 829 Height = 296
824 Top = 234 830 Top = 274
825 Width = 446 831 Width = 520
826 Anchors = [] 832 Anchors = []
827 BorderSpacing.Left = 10 833 BorderSpacing.Left = 12
828 BorderSpacing.Top = 10 834 BorderSpacing.Top = 12
829 BorderSpacing.Right = 10 835 BorderSpacing.Right = 12
830 BorderSpacing.Bottom = 10 836 BorderSpacing.Bottom = 12
831 Caption = 'Wave' 837 Caption = 'Wave'
832 ClientHeight = 224 838 ClientHeight = 261
833 ClientWidth = 442 839 ClientWidth = 516
834 Enabled = False 840 Enabled = False
835 ParentFont = False 841 ParentFont = False
836 TabOrder = 3 842 TabOrder = 3
837 object Label11: TLabel 843 object Label11: TLabel
838 Left = 12 844 Left = 14
839 Height = 25 845 Height = 30
840 Top = 24 846 Top = 28
841 Width = 60 847 Width = 70
842 Caption = 'Volume' 848 Caption = 'Volume'
843 ParentColor = False 849 ParentColor = False
844 ParentFont = False 850 ParentFont = False
845 end 851 end
846 object Label12: TLabel 852 object Label12: TLabel
847 Left = 12 853 Left = 14
848 Height = 25 854 Height = 30
849 Top = 72 855 Top = 84
850 Width = 82 856 Width = 95
851 Caption = 'Waveform' 857 Caption = 'Waveform'
852 ParentColor = False 858 ParentColor = False
853 ParentFont = False 859 ParentFont = False
854 end 860 end
855 object WaveformCombobox: TComboBox 861 object WaveformCombobox: TComboBox
856 Left = 156 862 Left = 182
857 Height = 33 863 Height = 38
858 Hint = 'Which waveform is associated with this instrument' 864 Hint = 'Which waveform is associated with this instrument'
859 Top = 60 865 Top = 70
860 Width = 264 866 Width = 308
861 ItemHeight = 25 867 ItemHeight = 30
862 OnChange = WaveformComboboxChange 868 OnChange = WaveformComboboxChange
863 ParentFont = False 869 ParentFont = False
864 Style = csDropDownList 870 Style = csDropDownList
865 TabOrder = 0 871 TabOrder = 0
866 end 872 end
867 object Panel4: TPanel 873 object Panel4: TPanel
868 Left = 12 874 Left = 14
869 Height = 88 875 Height = 103
870 Top = 120 876 Top = 140
871 Width = 408 877 Width = 476
872 BevelOuter = bvLowered 878 BevelOuter = bvLowered
873 ClientHeight = 88 879 ClientHeight = 103
874 ClientWidth = 408 880 ClientWidth = 476
875 ParentFont = False 881 ParentFont = False
876 TabOrder = 1 882 TabOrder = 1
877 object WavePaintbox: TPaintBox 883 object WavePaintbox: TPaintBox
878 Left = 1 884 Left = 1
879 Height = 86 885 Height = 101
880 Hint = 'Preview of the waveform associated with this instrument' 886 Hint = 'Preview of the waveform associated with this instrument'
881 Top = 1 887 Top = 1
882 Width = 406 888 Width = 474
883 Align = alClient 889 Align = alClient
884 Color = clBlack 890 Color = clBlack
885 ParentColor = False 891 ParentColor = False
@@ -888,12 +894,12 @@ object frmTracker: TfrmTracker
888 end 894 end
889 end 895 end
890 object WaveVolumeCombobox: TComboBox 896 object WaveVolumeCombobox: TComboBox
891 Left = 156 897 Left = 182
892 Height = 33 898 Height = 38
893 Hint = 'The initial volume of the wave' 899 Hint = 'The initial volume of the wave'
894 Top = 12 900 Top = 14
895 Width = 264 901 Width = 308
896 ItemHeight = 25 902 ItemHeight = 30
897 ItemIndex = 1 903 ItemIndex = 1
898 Items.Strings = ( 904 Items.Strings = (
899 'Mute (No sound)' 905 'Mute (No sound)'
@@ -909,35 +915,35 @@ object frmTracker: TfrmTracker
909 end 915 end
910 end 916 end
911 object NoiseGroupBox: TGroupBox 917 object NoiseGroupBox: TGroupBox
912 Left = 974 918 Left = 1138
913 Height = 254 919 Height = 296
914 Top = 234 920 Top = 274
915 Width = 396 921 Width = 462
916 Anchors = [] 922 Anchors = []
917 BorderSpacing.Left = 10 923 BorderSpacing.Left = 12
918 BorderSpacing.Top = 10 924 BorderSpacing.Top = 12
919 BorderSpacing.Right = 10 925 BorderSpacing.Right = 12
920 BorderSpacing.Bottom = 10 926 BorderSpacing.Bottom = 12
921 Caption = 'Noise' 927 Caption = 'Noise'
922 ClientHeight = 224 928 ClientHeight = 261
923 ClientWidth = 392 929 ClientWidth = 458
924 Enabled = False 930 Enabled = False
925 ParentFont = False 931 ParentFont = False
926 TabOrder = 4 932 TabOrder = 4
927 object Label13: TLabel 933 object Label13: TLabel
928 Left = 12 934 Left = 14
929 Height = 25 935 Height = 30
930 Top = 24 936 Top = 28
931 Width = 81 937 Width = 95
932 Caption = 'Frequency' 938 Caption = 'Frequency'
933 ParentColor = False 939 ParentColor = False
934 ParentFont = False 940 ParentFont = False
935 end 941 end
936 object SevenBitCounterCheckbox: TCheckBox 942 object SevenBitCounterCheckbox: TCheckBox
937 Left = 12 943 Left = 14
938 Height = 29 944 Height = 34
939 Top = 120 945 Top = 140
940 Width = 321 946 Width = 373
941 Alignment = taLeftJustify 947 Alignment = taLeftJustify
942 Caption = '7 bit counter (more tone-like output)' 948 Caption = '7 bit counter (more tone-like output)'
943 OnChange = SevenBitCounterCheckboxChange 949 OnChange = SevenBitCounterCheckboxChange
@@ -945,29 +951,29 @@ object frmTracker: TfrmTracker
945 TabOrder = 0 951 TabOrder = 0
946 end 952 end
947 object Label14: TLabel 953 object Label14: TLabel
948 Left = 12 954 Left = 14
949 Height = 25 955 Height = 30
950 Top = 72 956 Top = 84
951 Width = 107 957 Width = 124
952 Caption = 'Dividing ratio' 958 Caption = 'Dividing ratio'
953 ParentColor = False 959 ParentColor = False
954 ParentFont = False 960 ParentFont = False
955 end 961 end
956 object RandomizeNoiseButton: TButton 962 object RandomizeNoiseButton: TButton
957 Left = 12 963 Left = 14
958 Height = 38 964 Height = 44
959 Hint = 'Randomize the noise instrument parameters to get a random drum-like sound' 965 Hint = 'Randomize the noise instrument parameters to get a random drum-like sound'
960 Top = 165 966 Top = 192
961 Width = 360 967 Width = 420
962 Caption = 'Randomize' 968 Caption = 'Randomize'
963 OnClick = RandomizeNoiseButtonClick 969 OnClick = RandomizeNoiseButtonClick
964 ParentFont = False 970 ParentFont = False
965 TabOrder = 1 971 TabOrder = 1
966 end 972 end
967 object NoiseFreqSpinner: TECSpinPosition 973 object NoiseFreqSpinner: TECSpinPosition
968 Left = 129 974 Left = 150
969 Height = 24 975 Height = 24
970 Top = 10 976 Top = 12
971 Width = 198 977 Width = 198
972 Buttons.BtnBigDec.BtnOrder = 1 978 Buttons.BtnBigDec.BtnOrder = 1
973 Buttons.BtnBigDec.Visible = False 979 Buttons.BtnBigDec.Visible = False
@@ -1012,9 +1018,9 @@ object frmTracker: TfrmTracker
1012 OnChange = NoiseFreqSpinnerChange 1018 OnChange = NoiseFreqSpinnerChange
1013 end 1019 end
1014 object DivRatioSpinner: TECSpinPosition 1020 object DivRatioSpinner: TECSpinPosition
1015 Left = 129 1021 Left = 150
1016 Height = 24 1022 Height = 24
1017 Top = 58 1023 Top = 68
1018 Width = 198 1024 Width = 198
1019 Buttons.BtnBigDec.BtnOrder = 1 1025 Buttons.BtnBigDec.BtnOrder = 1
1020 Buttons.BtnBigDec.Visible = False 1026 Buttons.BtnBigDec.Visible = False
@@ -1075,7 +1081,7 @@ object frmTracker: TfrmTracker
1075 Width = 1587 1081 Width = 1587
1076 Align = alBottom 1082 Align = alBottom
1077 Anchors = [akTop, akLeft, akRight, akBottom] 1083 Anchors = [akTop, akLeft, akRight, akBottom]
1078 BorderSpacing.Top = 20 1084 BorderSpacing.Top = 23
1079 ParentFont = False 1085 ParentFont = False
1080 OnMouseDown = WaveEditPaintBoxMouseDown 1086 OnMouseDown = WaveEditPaintBoxMouseDown
1081 OnMouseMove = WaveEditPaintBoxMouseMove 1087 OnMouseMove = WaveEditPaintBoxMouseMove
@@ -1083,49 +1089,49 @@ object frmTracker: TfrmTracker
1083 OnPaint = WaveEditPaintBoxPaint 1089 OnPaint = WaveEditPaintBoxPaint
1084 end 1090 end
1085 object WaveEditGroupBox: TGroupBox 1091 object WaveEditGroupBox: TGroupBox
1086 Left = 12 1092 Left = 14
1087 Height = 208 1093 Height = 243
1088 Top = 12 1094 Top = 14
1089 Width = 260 1095 Width = 303
1090 Caption = 'Wave Editor' 1096 Caption = 'Wave Editor'
1091 ClientHeight = 178 1097 ClientHeight = 208
1092 ClientWidth = 256 1098 ClientWidth = 299
1093 ParentFont = False 1099 ParentFont = False
1094 TabOrder = 0 1100 TabOrder = 0
1095 object Label20: TLabel 1101 object Label20: TLabel
1096 Left = 24 1102 Left = 28
1097 Height = 25 1103 Height = 25
1098 Top = 24 1104 Top = 28
1099 Width = 43 1105 Width = 43
1100 Caption = 'Wave' 1106 Caption = 'Wave'
1101 ParentColor = False 1107 ParentColor = False
1102 ParentFont = False 1108 ParentFont = False
1103 end 1109 end
1104 object WaveEditNumberSpinner: TSpinEdit 1110 object WaveEditNumberSpinner: TSpinEdit
1105 Left = 96 1111 Left = 112
1106 Height = 33 1112 Height = 33
1107 Top = 12 1113 Top = 14
1108 Width = 120 1114 Width = 140
1109 MaxValue = 15 1115 MaxValue = 15
1110 OnChange = WaveEditNumberSpinnerChange 1116 OnChange = WaveEditNumberSpinnerChange
1111 ParentFont = False 1117 ParentFont = False
1112 TabOrder = 0 1118 TabOrder = 0
1113 end 1119 end
1114 object ImportWaveButton: TButton 1120 object ImportWaveButton: TButton
1115 Left = 24 1121 Left = 28
1116 Height = 38 1122 Height = 44
1117 Top = 72 1123 Top = 84
1118 Width = 220 1124 Width = 257
1119 Caption = 'Import' 1125 Caption = 'Import'
1120 OnClick = ImportWaveButtonClick 1126 OnClick = ImportWaveButtonClick
1121 ParentFont = False 1127 ParentFont = False
1122 TabOrder = 1 1128 TabOrder = 1
1123 end 1129 end
1124 object ExportButton: TButton 1130 object ExportButton: TButton
1125 Left = 24 1131 Left = 28
1126 Height = 38 1132 Height = 44
1127 Top = 120 1133 Top = 140
1128 Width = 220 1134 Width = 257
1129 Caption = 'Export' 1135 Caption = 'Export'
1130 OnClick = ExportButtonClick 1136 OnClick = ExportButtonClick
1131 ParentFont = False 1137 ParentFont = False
@@ -1147,15 +1153,15 @@ object frmTracker: TfrmTracker
1147 Width = 1587 1153 Width = 1587
1148 Align = alBottom 1154 Align = alBottom
1149 Anchors = [akTop, akLeft, akRight, akBottom] 1155 Anchors = [akTop, akLeft, akRight, akBottom]
1150 BorderSpacing.Top = 20 1156 BorderSpacing.Top = 23
1151 OnChange = CommentMemoChange 1157 OnChange = CommentMemoChange
1152 ParentFont = False 1158 ParentFont = False
1153 TabOrder = 0 1159 TabOrder = 0
1154 end 1160 end
1155 object Label17: TLabel 1161 object Label17: TLabel
1156 Left = 12 1162 Left = 14
1157 Height = 25 1163 Height = 25
1158 Top = 12 1164 Top = 14
1159 Width = 500 1165 Width = 500
1160 Caption = 'This is an area to write comments for anyone editing your tune.' 1166 Caption = 'This is an area to write comments for anyone editing your tune.'
1161 ParentColor = False 1167 ParentColor = False
@@ -1175,16 +1181,16 @@ object frmTracker: TfrmTracker
1175 Top = 205 1181 Top = 205
1176 Width = 1587 1182 Width = 1587
1177 Align = alBottom 1183 Align = alBottom
1178 BorderSpacing.Top = 20 1184 BorderSpacing.Top = 23
1179 Anchors = [akTop, akLeft, akRight, akBottom] 1185 Anchors = [akTop, akLeft, akRight, akBottom]
1180 Font.Height = -20 1186 Font.Height = -23
1181 Font.Name = 'Courier New' 1187 Font.Name = 'Courier New'
1182 Font.Pitch = fpFixed 1188 Font.Pitch = fpFixed
1183 Font.Quality = fqNonAntialiased 1189 Font.Quality = fqNonAntialiased
1184 ParentColor = False 1190 ParentColor = False
1185 ParentFont = False 1191 ParentFont = False
1186 TabOrder = 0 1192 TabOrder = 0
1187 Gutter.Width = 85 1193 Gutter.Width = 100
1188 Gutter.MouseActions = <> 1194 Gutter.MouseActions = <>
1189 RightGutter.Width = 0 1195 RightGutter.Width = 0
1190 RightGutter.MouseActions = <> 1196 RightGutter.MouseActions = <>
@@ -1636,11 +1642,11 @@ object frmTracker: TfrmTracker
1636 LineHighlightColor.Foreground = clNone 1642 LineHighlightColor.Foreground = clNone
1637 inline SynLeftGutterPartList1: TSynGutterPartList 1643 inline SynLeftGutterPartList1: TSynGutterPartList
1638 object SynGutterMarks1: TSynGutterMarks 1644 object SynGutterMarks1: TSynGutterMarks
1639 Width = 36 1645 Width = 42
1640 MouseActions = <> 1646 MouseActions = <>
1641 end 1647 end
1642 object SynGutterLineNumber1: TSynGutterLineNumber 1648 object SynGutterLineNumber1: TSynGutterLineNumber
1643 Width = 25 1649 Width = 29
1644 MouseActions = <> 1650 MouseActions = <>
1645 MarkupInfo.Background = clBtnFace 1651 MarkupInfo.Background = clBtnFace
1646 MarkupInfo.Foreground = clNone 1652 MarkupInfo.Foreground = clNone
@@ -1650,19 +1656,19 @@ object frmTracker: TfrmTracker
1650 LeadingZeros = False 1656 LeadingZeros = False
1651 end 1657 end
1652 object SynGutterChanges1: TSynGutterChanges 1658 object SynGutterChanges1: TSynGutterChanges
1653 Width = 6 1659 Width = 7
1654 MouseActions = <> 1660 MouseActions = <>
1655 ModifiedColor = 59900 1661 ModifiedColor = 59900
1656 SavedColor = clGreen 1662 SavedColor = clGreen
1657 end 1663 end
1658 object SynGutterSeparator1: TSynGutterSeparator 1664 object SynGutterSeparator1: TSynGutterSeparator
1659 Width = 3 1665 Width = 4
1660 MouseActions = <> 1666 MouseActions = <>
1661 MarkupInfo.Background = clWhite 1667 MarkupInfo.Background = clWhite
1662 MarkupInfo.Foreground = clGray 1668 MarkupInfo.Foreground = clGray
1663 end 1669 end
1664 object SynGutterCodeFolding1: TSynGutterCodeFolding 1670 object SynGutterCodeFolding1: TSynGutterCodeFolding
1665 Width = 15 1671 Width = 18
1666 MouseActions = <> 1672 MouseActions = <>
1667 MarkupInfo.Background = clNone 1673 MarkupInfo.Background = clNone
1668 MarkupInfo.Foreground = clGray 1674 MarkupInfo.Foreground = clGray
@@ -1672,19 +1678,19 @@ object frmTracker: TfrmTracker
1672 end 1678 end
1673 end 1679 end
1674 object Label18: TLabel 1680 object Label18: TLabel
1675 Left = 12 1681 Left = 14
1676 Height = 25 1682 Height = 25
1677 Top = 24 1683 Top = 28
1678 Width = 60 1684 Width = 60
1679 Caption = 'Routine' 1685 Caption = 'Routine'
1680 ParentColor = False 1686 ParentColor = False
1681 ParentFont = False 1687 ParentFont = False
1682 end 1688 end
1683 object RoutineNumberSpinner: TSpinEdit 1689 object RoutineNumberSpinner: TSpinEdit
1684 Left = 96 1690 Left = 112
1685 Height = 33 1691 Height = 33
1686 Top = 12 1692 Top = 14
1687 Width = 264 1693 Width = 308
1688 MaxValue = 15 1694 MaxValue = 15
1689 MinValue = 1 1695 MinValue = 1
1690 OnChange = InstrumentNumberSpinnerChange 1696 OnChange = InstrumentNumberSpinnerChange
@@ -1693,9 +1699,9 @@ object frmTracker: TfrmTracker
1693 Value = 1 1699 Value = 1
1694 end 1700 end
1695 object Label19: TLabel 1701 object Label19: TLabel
1696 Left = 12 1702 Left = 14
1697 Height = 125 1703 Height = 125
1698 Top = 60 1704 Top = 70
1699 Width = 758 1705 Width = 758
1700 Caption = 'Routines are an advanced feature of hUGETracker, and you likely won''t need them at all'#13#10'if you are only interested in composing music. If you want to create a custom effect, or interface'#13#10'with game code that you''re writing a soundtrack for, then routines will come in handy.'#13#10#13#10'Refer to the user manual for more information!' 1706 Caption = 'Routines are an advanced feature of hUGETracker, and you likely won''t need them at all'#13#10'if you are only interested in composing music. If you want to create a custom effect, or interface'#13#10'with game code that you''re writing a soundtrack for, then routines will come in handy.'#13#10#13#10'Refer to the user manual for more information!'
1701 ParentColor = False 1707 ParentColor = False
@@ -1706,9 +1712,9 @@ object frmTracker: TfrmTracker
1706 end 1712 end
1707 object Panel2: TPanel 1713 object Panel2: TPanel
1708 Left = 0 1714 Left = 0
1709 Height = 267 1715 Height = 312
1710 Top = 35 1716 Top = 41
1711 Width = 1893 1717 Width = 2208
1712 Align = alTop 1718 Align = alTop
1713 BevelOuter = bvNone 1719 BevelOuter = bvNone
1714 ParentFont = False 1720 ParentFont = False
@@ -1716,19 +1722,19 @@ object frmTracker: TfrmTracker
1716 end 1722 end
1717 object StatusBar1: TStatusBar 1723 object StatusBar1: TStatusBar
1718 Left = 0 1724 Left = 0
1719 Height = 36 1725 Height = 43
1720 Top = 1232 1726 Top = 1437
1721 Width = 1893 1727 Width = 2208
1722 AutoHint = True 1728 AutoHint = True
1723 Panels = < 1729 Panels = <
1724 item 1730 item
1725 Width = 700 1731 Width = 817
1726 end 1732 end
1727 item 1733 item
1728 Width = 300 1734 Width = 350
1729 end 1735 end
1730 item 1736 item
1731 Width = 300 1737 Width = 350
1732 end> 1738 end>
1733 ParentFont = False 1739 ParentFont = False
1734 ParentShowHint = False 1740 ParentShowHint = False
@@ -1737,61 +1743,68 @@ object frmTracker: TfrmTracker
1737 end 1743 end
1738 object ToolBar1: TToolBar 1744 object ToolBar1: TToolBar
1739 Left = 0 1745 Left = 0
1740 Height = 35 1746 Height = 41
1741 Top = 0 1747 Top = 0
1742 Width = 1893 1748 Width = 2208
1743 AutoSize = True 1749 AutoSize = True
1744 Caption = 'ToolBar1' 1750 Caption = 'ToolBar1'
1745 EdgeBorders = [ebBottom] 1751 EdgeBorders = [ebBottom]
1746 Images = ImageList1 1752 Images = ImageList1
1747 List = True 1753 List = True
1754 ParentFont = False
1748 ShowCaptions = True 1755 ShowCaptions = True
1749 TabOrder = 5 1756 TabOrder = 5
1750 object ToolButton1: TToolButton 1757 object ToolButton1: TToolButton
1751 Left = 1 1758 Left = 1
1752 Top = 0 1759 Top = 0
1753 Action = FileSaveAs1 1760 Action = FileSaveAs1
1761 AutoSize = True
1754 ParentShowHint = False 1762 ParentShowHint = False
1755 end 1763 end
1756 object PanicToolButton: TToolButton 1764 object PanicToolButton: TToolButton
1757 Left = 106 1765 Left = 120
1758 Hint = 'Stops all sound output' 1766 Hint = 'Stops all sound output'
1759 Top = 0 1767 Top = 0
1768 AutoSize = True
1760 Caption = 'Panic' 1769 Caption = 'Panic'
1770 ImageIndex = 72
1761 OnClick = PanicToolButtonClick 1771 OnClick = PanicToolButtonClick
1762 ParentShowHint = False 1772 ParentShowHint = False
1763 ShowHint = True 1773 ShowHint = True
1764 end 1774 end
1765 object ToolButton2: TToolButton 1775 object ToolButton2: TToolButton
1766 Left = 160 1776 Left = 202
1767 Top = 0 1777 Top = 0
1768 Caption = 'Play' 1778 Caption = 'Play'
1779 ImageIndex = 74
1769 end 1780 end
1770 object ToolButton3: TToolButton 1781 object ToolButton3: TToolButton
1771 Left = 200 1782 Left = 266
1772 Top = 0 1783 Top = 0
1773 Caption = 'Pause' 1784 Caption = 'Pause'
1785 ImageIndex = 75
1774 end 1786 end
1775 object ToolButton4: TToolButton 1787 object ToolButton4: TToolButton
1776 Left = 254 1788 Left = 347
1777 Top = 0 1789 Top = 0
1778 Caption = 'Stop' 1790 Caption = 'Stop'
1791 ImageIndex = 73
1779 end 1792 end
1780 object ToolButton5: TToolButton 1793 object ToolButton5: TToolButton
1781 Left = 305 1794 Left = 421
1782 Top = 0 1795 Top = 0
1783 Caption = 'ToolButton5' 1796 Caption = 'ToolButton5'
1784 end 1797 end
1785 object ToolButton8: TToolButton 1798 object ToolButton8: TToolButton
1786 Left = 155 1799 Left = 196
1787 Height = 33 1800 Height = 39
1788 Top = 0 1801 Top = 0
1789 Caption = 'ToolButton8' 1802 Caption = 'ToolButton8'
1790 Style = tbsDivider 1803 Style = tbsDivider
1791 end 1804 end
1792 object ToolButton6: TToolButton 1805 object ToolButton6: TToolButton
1793 Left = 300 1806 Left = 415
1794 Height = 33 1807 Height = 39
1795 Top = 0 1808 Top = 0
1796 Caption = 'ToolButton6' 1809 Caption = 'ToolButton6'
1797 Style = tbsDivider 1810 Style = tbsDivider
@@ -1799,8 +1812,8 @@ object frmTracker: TfrmTracker
1799 end 1812 end
1800 object MainMenu1: TMainMenu 1813 object MainMenu1: TMainMenu
1801 Images = ImageList1 1814 Images = ImageList1
1802 left = 528 1815 left = 616
1803 top = 64 1816 top = 75
1804 object MenuItem1: TMenuItem 1817 object MenuItem1: TMenuItem
1805 Caption = 'File' 1818 Caption = 'File'
1806 object MenuItem12: TMenuItem 1819 object MenuItem12: TMenuItem
@@ -1867,8 +1880,8 @@ object frmTracker: TfrmTracker
1867 end 1880 end
1868 object ActionList1: TActionList 1881 object ActionList1: TActionList
1869 Images = ImageList1 1882 Images = ImageList1
1870 left = 856 1883 left = 999
1871 top = 64 1884 top = 75
1872 object FileOpen1: TFileOpen 1885 object FileOpen1: TFileOpen
1873 Category = 'File' 1886 Category = 'File'
1874 Caption = '&Open ...' 1887 Caption = '&Open ...'
@@ -1963,10 +1976,10 @@ object frmTracker: TfrmTracker
1963 end 1976 end
1964 end 1977 end
1965 object ImageList1: TImageList 1978 object ImageList1: TImageList
1966 left = 968 1979 left = 1129
1967 top = 64 1980 top = 75
1968 Bitmap = { 1981 Bitmap = {
1969 4C69480000001000000010000000000000000000000000000000000000000000 1982 4C694C0000001000000010000000000000000000000000000000000000000000
1970 0000000000000000000000000000000000000000000000000000000000000000 1983 0000000000000000000000000000000000000000000000000000000000000000
1971 0000000000000000000000000000000000000000000000000000000000000000 1984 0000000000000000000000000000000000000000000000000000000000000000
1972 0000000000000000000000000000000000000000000000000000000000000000 1985 0000000000000000000000000000000000000000000000000000000000000000
@@ -4270,20 +4283,148 @@ object frmTracker: TfrmTracker
4270 0000000000000000000000000000000000FF000000FF00000000000000008080 4283 0000000000000000000000000000000000FF000000FF00000000000000008080
4271 80FF0000000000000000808080FF000000000000000000000000000000000000 4284 80FF0000000000000000808080FF000000000000000000000000000000000000
4272 0000000000000000000000000000000000FF0000000000000000000000008080 4285 0000000000000000000000000000000000FF0000000000000000000000008080
4273 80FF808080FF808080FF00000000 4286 80FF808080FF808080FF00000000003F9400003F940000409599004095CC0040
4287 95CC004095CC004095CC004095CC004095CC004095CC004095CC004095CC0040
4288 9599003F9400003F9400003F9400003F9300003F9300003F93CC6EA1E5FF6194
4289 D6FF6E9BD0FFCFDCEDFFE0E2E6FFC0CADAFF6994CAFF6194D6FF6EA1E5FF003F
4290 93CC003F9300003F9300003F9300003D9100003D9100003D91CC6598DCFF4274
4291 AFFFBFCBD8FF8A8A8AFF3B3B3BFF8E8787FFA2A0ADFF4274AFFF6598DCFF003D
4292 91CC003D9100003D9100003D9100003B8E00003B8E00003B8ECC6396DAFF3C6E
4293 A6FFDDDFE1FF343434FF999999FF666666FFC4B6B8FF3C6EA6FF6396DAFF003B
4294 8ECC003B8E00003B8E00003B8E0000398B0000398B0000398BCC6093D7FF4071
4295 ACFFB0B8C5FF877F7FFF5E5E5EFFA09797FFB2AFBCFF4071ACFF6093D7FF0039
4296 8BCC00398B0000398B0000398B000036880000368800003688CC5C8FD3FF4577
4297 B7FF496E9EFFA29FACFFC5B6B8FFB1AEBBFF4D71A1FF4577B7FF5C8FD3FF0036
4298 88CC0036880000368800003688000034840000348400003484CC5485C7FF4771
4299 A7FF92A7C2FFCED5DDFFE1E2E3FFC6CCD4FF879AB4FF446EA4FF5485C7FF0034
4300 84CC0034840000348400003484000031810000318100003181CC4C75ACFFBFC9
4301 D6FFA9A9A9FF5D5D5DFF4D4D4DFF6C6C6CFFA69F9FFF6CACBBFF199EC0FF0166
4302 A0DF003E8900003E8900003E8900002E7D00002E7D00002E7DCC93A6C1FFA8A8
4303 A8FF383838FF2D2D2DFF434343FF666666FF6B7172FF41ABBAFF9BE4EDFF0489
4304 B3ED01B2CB0801B2CB0001B2CB00002B7900002B7900002B79CCCED4DCFF5858
4305 58FF2C2C2CFF181818FF2C2C2CFF5C5C5CFF60949CFF5CBFCCFFABF5FCFF3FB2
4306 CDF501B0C84D01AFC70001AFC7000028750000287500002875CCE1E2E3FF4242
4307 42FF424242FF2C2C2CFFBBBBBBFF595B5BFF3CA5B4FF8BE2EBFF555555FF7CDC
4308 EAFC02ADC69D01ABC40401ABC4000025710000257100002571CCC6CAD3FF5F5E
4309 5EFF626262FF5B5B5BFF5A5A5AFF59848AFF4FBAC9FF7CE4F1FF000000FF68D8
4310 E7FF23B8CCC801A8C04301A7BF00001A520000226D0000226DCC8794B0FF9E98
4311 98FF5E5E5EFF868686FF999A9AFF42A3B1FF64D2DCFF46D3D7FF75B4B5FF40D0
4312 D2FF3BCAD1EC01A4BC9801A2BA010000000000154C00001B63CC40609AFFA29D
4313 ACFF9F9494FF7D7979FF5F8287FF31A8B7FF42D9E0FF33D5DDFF000000FF33D5
4314 DDFF34D5DDFF0DACC1C7019EB63A0000000A00000017000F54CC3564A7FF3E5D
4315 97FF7E82A0FFB4A8B1FF51A7B6FF33CADAFF29DBE9FF28DAE9FF79EDF5FF28DA
4316 E9FF28DAE9FF1CC7D9EA0199B19C000000130000002D000536A6000547CC0005
4317 47CC000547CC000547CC00567DEA00718FF400718FF400718FF400718FF40075
4318 91EC008398D000879CCA008BA294FFFFFF000101010001010100010101390101
4319 0196010101AC010101AC010101AC010101AC010101AC01010196010101390101
4320 010001010100FFFFFF00FFFFFF00FFFFFF000101010001010100010101976767
4321 67E7868686FF8B8B8BFF909090FF8E8E8EFF898989FF696969E7010101970101
4322 010001010100FFFFFF00FFFFFF00FFFFFF00010101AF010101AF010101AF8080
4323 80FF6C6C6CFF2E2E2EFF161616FF2E2E2EFF6C6C6CFF808080FF010101AF0101
4324 01AF010101AFFFFFFF00FFFFFF00FFFFFF0001010133000000CD505050FF7D7D
4325 7DFF444444FF0A147FFF0313CEFF0A147FFF444444FF7D7D7DFF505050FF0000
4326 00CD01010133FFFFFF00FFFFFF00FFFFFF000101010000000034010101B37A7A
4327 7AFF3E3E3EFF0E29D8FF0D2BEAFF0E29D8FF3E3E3EFF7A7A7AFF010101B30000
4328 003401010100FFFFFF00FFFFFF00FFFFFF000101010001010100010101B67777
4329 77FF515151FF29409EFF1D47E8FF29409EFF515151FF777777FF010101B60101
4330 010001010100FFFFFF00FFFFFF00FFFFFF00010101B8010101B8010101B87575
4331 75FF515151FF2F2F2FFF1F1F1FFF2F2F2FFF515151FF757575FF010101B80101
4332 01B8010101B8FFFFFF00FFFFFF00FFFFFF0001010137000000DA454545FF7272
4333 72FF414141FF474747FF656565FF474747FF414141FF727272FF454545FF0000
4334 00DA01010137FFFFFF00FFFFFF00FFFFFF000101010000000038010101BE6E6E
4335 6EFF424242FF626262FF676767FF626262FF424242FF6E6E6EFF010101BE0000
4336 003801010100FFFFFF00FFFFFF00FFFFFF000101010001010100010101C16B6B
4337 6BFF515151FF525252FF5F5F5FFF525252FF515151FF6B6B6BFF010101C10101
4338 010001010100FFFFFF00FFFFFF00FFFFFF00010101C4010101C4010101C46969
4339 69FF525252FF383838FF2B2B2BFF383838FF525252FF696969FF010101C40101
4340 01C4010101C4FFFFFF00FFFFFF00FFFFFF000101013B000000EA393939FF6666
4341 66FF464646FF454545FF585858FF454545FF464646FF666666FF393939FF0000
4342 00EA0101013BFFFFFF00FFFFFF00FFFFFF00010101000000003B010101CA6363
4343 63FF444444FF565656FF595959FF565656FF444444FF636363FF010101CA0000
4344 003B01010100FFFFFF00FFFFFF00FFFFFF000000000000000000000000D26161
4345 61FF4C4C4CFF474747FF545454FF474747FF4C4C4CFF616161FF000000D20000
4346 000000000000FFFFFF00FFFFFF00FFFFFF000000000A00000018000000C44444
4347 44F7555555FF4E4E4EFF464646FF4E4E4EFF555555FF444444F7000000C40000
4348 00190000000BFFFFFF00FFFFFF00FFFFFF000000001400000030000000680000
4349 00CC000000E8000000E8000000E8000000E8000000E8000000CC000000680000
4350 003100000016FFFFFF00FFFFFF00FFFFFF000101010001010100010101390101
4351 0196010101AC010101AC010101AC010101AC010101AC01010196010101390101
4352 010001010100FFFFFF00FFFFFF00FFFFFF000101010001010100010101976767
4353 67E7868686FF8B8B8BFF909090FF8E8E8EFF898989FF696969E7010101970101
4354 010001010100FFFFFF00FFFFFF00FFFFFF00010101AF010101AF010101AF8080
4355 80FF6C6C6CFF2E2E2EFF161616FF2E2E2EFF6C6C6CFF808080FF010101AF0101
4356 01AF010101AFFFFFFF00FFFFFF00FFFFFF0001010133000000CD505050FF7D7D
4357 7DFF444444FF484848FF6F6F6FFF484848FF444444FF7D7D7DFF505050FF0000
4358 00CD01010133FFFFFF00FFFFFF00FFFFFF000101010000000034010101B37A7A
4359 7AFF3E3E3EFF6D6D6DFF757575FF6D6D6DFF3E3E3EFF7A7A7AFF010101B30000
4360 003401010100FFFFFF00FFFFFF00FFFFFF000101010001010100010101B67777
4361 77FF515151FF565656FF6B6B6BFF565656FF515151FF777777FF010101B60101
4362 010001010100FFFFFF00FFFFFF00FFFFFF00010101B8010101B8010101B87575
4363 75FF515151FF2F2F2FFF1F1F1FFF2F2F2FFF515151FF757575FF010101B80101
4364 01B8010101B8FFFFFF00FFFFFF00FFFFFF0001010137000000DA454545FF7272
4365 72FF414141FF474747FF656565FF474747FF414141FF727272FF454545FF0000
4366 00DA01010137FFFFFF00FFFFFF00FFFFFF000101010000000038010101BE6E6E
4367 6EFF424242FF626262FF676767FF626262FF424242FF6E6E6EFF010101BE0000
4368 003801010100FFFFFF00FFFFFF00FFFFFF000101010001010100010101C16B6B
4369 6BFF515151FF525252FF5F5F5FFF525252FF515151FF6B6B6BFF010101C10101
4370 010001010100FFFFFF00FFFFFF00FFFFFF00010101C4010101C4010101C46969
4371 69FF525252FF383838FF2B2B2BFF383838FF525252FF696969FF010101C40101
4372 01C4010101C4FFFFFF00FFFFFF00FFFFFF000101013B000000EA393939FF6666
4373 66FF464646FF1F701FFF15A115FF1F701FFF464646FF666666FF393939FF0000
4374 00EA0101013BFFFFFF00FFFFFF00FFFFFF00010101000000003B010101CA6363
4375 63FF444444FF2BB82BFF2BC42BFF2BB82BFF444444FF636363FF010101CA0000
4376 003B01010100FFFFFF00FFFFFF00FFFFFF000000000000000000000000D26161
4377 61FF4C4C4CFF3F8F3FFF49D549FF3F8F3FFF4C4C4CFF616161FF000000D20000
4378 000000000000FFFFFF00FFFFFF00FFFFFF000000000A00000018000000C44444
4379 44F7555555FF4E4E4EFF464646FF4E4E4EFF555555FF444444F7000000C40000
4380 00190000000BFFFFFF00FFFFFF00FFFFFF000000001400000030000000680000
4381 00CC000000E8000000E8000000E8000000E8000000E8000000CC000000680000
4382 003100000016FFFFFF00FFFFFF00FFFFFF000101010001010100010101390101
4383 0196010101AC010101AC010101AC010101AC010101AC01010196010101390101
4384 010001010100FFFFFF00FFFFFF00FFFFFF000101010001010100010101976767
4385 67E7868686FF8B8B8BFF909090FF8E8E8EFF898989FF696969E7010101970101
4386 010001010100FFFFFF00FFFFFF00FFFFFF00010101AF010101AF010101AF8080
4387 80FF6C6C6CFF2E2E2EFF161616FF2E2E2EFF6C6C6CFF808080FF010101AF0101
4388 01AF010101AFFFFFFF00FFFFFF00FFFFFF0001010133000000CD505050FF7D7D
4389 7DFF444444FF484848FF6F6F6FFF484848FF444444FF7D7D7DFF505050FF0000
4390 00CD01010133FFFFFF00FFFFFF00FFFFFF000101010000000034010101B37A7A
4391 7AFF3E3E3EFF6D6D6DFF757575FF6D6D6DFF3E3E3EFF7A7A7AFF010101B30000
4392 003401010100FFFFFF00FFFFFF00FFFFFF000101010001010100010101B67777
4393 77FF515151FF565656FF6B6B6BFF565656FF515151FF777777FF010101B60101
4394 010001010100FFFFFF00FFFFFF00FFFFFF00010101B8010101B8010101B87575
4395 75FF515151FF2F2F2FFF1F1F1FFF2F2F2FFF515151FF757575FF010101B80101
4396 01B8010101B8FFFFFF00FFFFFF00FFFFFF0001010137000000DA454545FF7272
4397 72FF414141FF0F6973FF03A0B0FF0F6973FF414141FF727272FF454545FF0000
4398 00DA01010137FFFFFF00FFFFFF00FFFFFF000101010000000038010101BE6E6E
4399 6EFF424242FF03B7C6FF00C4D5FF03B7C6FF424242FF6E6E6EFF010101BE0000
4400 003801010100FFFFFF00FFFFFF00FFFFFF000101010001010100010101C16B6B
4401 6BFF515151FF1E949CFF04D4E4FF1E949CFF515151FF6B6B6BFF010101C10101
4402 010001010100FFFFFF00FFFFFF00FFFFFF00010101C4010101C4010101C46969
4403 69FF525252FF383838FF2B2B2BFF383838FF525252FF696969FF010101C40101
4404 01C4010101C4FFFFFF00FFFFFF00FFFFFF000101013B000000EA393939FF6666
4405 66FF464646FF454545FF585858FF454545FF464646FF666666FF393939FF0000
4406 00EA0101013BFFFFFF00FFFFFF00FFFFFF00010101000000003B010101CA6363
4407 63FF444444FF565656FF595959FF565656FF444444FF636363FF010101CA0000
4408 003B01010100FFFFFF00FFFFFF00FFFFFF000000000000000000000000D26161
4409 61FF4C4C4CFF474747FF545454FF474747FF4C4C4CFF616161FF000000D20000
4410 000000000000FFFFFF00FFFFFF00FFFFFF000000000A00000018000000C44444
4411 44F7555555FF4E4E4EFF464646FF4E4E4EFF555555FF444444F7000000C40000
4412 00190000000BFFFFFF00FFFFFF00FFFFFF000000001400000030000000680000
4413 00CC000000E8000000E8000000E8000000E8000000E8000000CC000000680000
4414 003100000016FFFFFF00FFFFFF00
4274 } 4415 }
4275 end 4416 end
4276 object OpenDialog1: TOpenDialog 4417 object OpenDialog1: TOpenDialog
4277 left = 632 4418 left = 737
4278 top = 64 4419 top = 75
4279 end 4420 end
4280 object SaveDialog1: TSaveDialog 4421 object SaveDialog1: TSaveDialog
4281 left = 744 4422 left = 868
4282 top = 64 4423 top = 75
4283 end 4424 end
4284 object OrderEditPopup: TPopupMenu 4425 object OrderEditPopup: TPopupMenu
4285 left = 1136 4426 left = 1325
4286 top = 64 4427 top = 75
4287 object MenuItem17: TMenuItem 4428 object MenuItem17: TMenuItem
4288 Caption = 'Insert new row' 4429 Caption = 'Insert new row'
4289 Hint = 'Insert a new row filled with brand new patterns' 4430 Hint = 'Insert a new row filled with brand new patterns'
@@ -4306,8 +4447,8 @@ object frmTracker: TfrmTracker
4306 object ImageList2: TImageList 4447 object ImageList2: TImageList
4307 Height = 32 4448 Height = 32
4308 Width = 32 4449 Width = 32
4309 left = 968 4450 left = 1129
4310 top = 160 4451 top = 187
4311 Bitmap = { 4452 Bitmap = {
4312 4C69020000002000000020000000000000000000000000000000000000000000 4453 4C69020000002000000020000000000000000000000000000000000000000000
4313 0000000000000000000000000000000000000000000000000000000000000000 4454 0000000000000000000000000000000000000000000000000000000000000000
Modifiedtracker.pas +41−8
@@ -151,6 +151,8 @@ type
151 procedure CutActionExecute(Sender: TObject); 151 procedure CutActionExecute(Sender: TObject);
152 procedure FileOpen1Accept(Sender: TObject); 152 procedure FileOpen1Accept(Sender: TObject);
153 procedure FileSaveAs1Accept(Sender: TObject); 153 procedure FileSaveAs1Accept(Sender: TObject);
154 procedure HeaderControl1MouseDown(Sender: TObject; Button: TMouseButton;
155 Shift: TShiftState; X, Y: Integer);
154 procedure HeaderControl1SectionClick(HeaderControl: TCustomHeaderControl; 156 procedure HeaderControl1SectionClick(HeaderControl: TCustomHeaderControl;
155 Section: THeaderSection); 157 Section: THeaderSection);
156 procedure HelpLookupManualExecute(Sender: TObject); 158 procedure HelpLookupManualExecute(Sender: TObject);
@@ -186,6 +188,7 @@ type
186 IsColumn: Boolean; sIndex, tIndex: Integer); 188 IsColumn: Boolean; sIndex, tIndex: Integer);
187 procedure OrderEditStringGridColRowMoved(Sender: TObject; 189 procedure OrderEditStringGridColRowMoved(Sender: TObject;
188 IsColumn: Boolean; sIndex, tIndex: Integer); 190 IsColumn: Boolean; sIndex, tIndex: Integer);
191 procedure OrderEditStringGridDblClick(Sender: TObject);
189 procedure OrderEditStringGridEditingDone(Sender: TObject); 192 procedure OrderEditStringGridEditingDone(Sender: TObject);
190 procedure OrderEditStringGridKeyDown(Sender: TObject; var Key: Word; 193 procedure OrderEditStringGridKeyDown(Sender: TObject; var Key: Word;
191 Shift: TShiftState); 194 Shift: TShiftState);
@@ -223,7 +226,7 @@ type
223 PreviewingInstrument: Boolean; 226 PreviewingInstrument: Boolean;
224 DrawingWave: Boolean; 227 DrawingWave: Boolean;
225 228
226 Orders: TOrderMap; 229 Patterns: TPatternMap;
227 230
228 PatternsNode, InstrumentsNode, WavesNode, RoutinesNode: TTreeNode; 231 PatternsNode, InstrumentsNode, WavesNode, RoutinesNode: TTreeNode;
229 232
@@ -363,7 +366,7 @@ begin
363 OrderEditStringGrid.Cells[I+1, OrderEditStringGrid.Row], 366 OrderEditStringGrid.Cells[I+1, OrderEditStringGrid.Row],
364 OrderNum 367 OrderNum
365 ); 368 );
366 Pat := Orders.GetOrCreateNew(OrderNum); 369 Pat := Patterns.GetOrCreateNew(OrderNum);
367 TrackerGrid.LoadPattern(I, Pat); 370 TrackerGrid.LoadPattern(I, Pat);
368 end; 371 end;
369 end; 372 end;
@@ -598,10 +601,10 @@ begin
598 (Section as THeaderSection).Width := TrackerGrid.ColumnWidth; 601 (Section as THeaderSection).Width := TrackerGrid.ColumnWidth;
599 602
600 // Initialize order table 603 // Initialize order table
601 Orders := TOrderMap.Create; 604 Patterns := TPatternMap.Create;
602 for I := 0 to 3 do begin 605 for I := 0 to 3 do begin
603 OrderEditStringGrid.Cells[I+1, 1] := IntToStr(I); 606 OrderEditStringGrid.Cells[I+1, 1] := IntToStr(I);
604 TrackerGrid.LoadPattern(I, Orders.GetOrCreateNew(I)); 607 TrackerGrid.LoadPattern(I, Patterns.GetOrCreateNew(I));
605 end; 608 end;
606 609
607 // Manually resize the fixed column in the order editor 610 // Manually resize the fixed column in the order editor
@@ -683,6 +686,26 @@ begin
683 CloseFile(F);} 686 CloseFile(F);}
684 end; 687 end;
685 688
689 procedure TfrmTracker.HeaderControl1MouseDown(Sender: TObject;
690 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
691 var
692 SelectedSection: THeaderSection;
693 Section: TCollectionItem;
694 P: TPoint;
695 begin
696 if Button = mbRight then begin
697 // Hack
698 P.X := X;
699 P.Y := Y;
700
701 for Section in HeaderControl1.Sections do
702 (Section as THeaderSection).ImageIndex := 0;
703
704 SelectedSection := HeaderControl1.Sections[HeaderControl1.GetSectionAt(P)];
705 SelectedSection.ImageIndex := 1;
706 end;
707 end;
708
686 procedure TfrmTracker.HeaderControl1SectionClick( 709 procedure TfrmTracker.HeaderControl1SectionClick(
687 HeaderControl: TCustomHeaderControl; Section: THeaderSection); 710 HeaderControl: TCustomHeaderControl; Section: THeaderSection);
688 begin 711 begin
@@ -779,9 +802,7 @@ procedure TfrmTracker.MenuItem17Click(Sender: TObject);
779 var 802 var
780 X, Highest: Integer; 803 X, Highest: Integer;
781 begin 804 begin
782 Highest := 0; 805 Highest := Patterns.MaxKey;
783 for X := 0 to Orders.Count-1 do
784 if Orders.Keys[X] > Highest then Highest := Orders.Keys[X]+1;
785 806
786 OrderEditStringGrid.InsertRowWithValues( 807 OrderEditStringGrid.InsertRowWithValues(
787 OrderEditStringGrid.Row, 808 OrderEditStringGrid.Row,
@@ -789,7 +810,7 @@ begin
789 ); 810 );
790 811
791 for X := 0 to 3 do 812 for X := 0 to 3 do
792 Orders.CreateNewPattern(Highest+X); 813 Patterns.CreateNewPattern(Highest+X);
793 end; 814 end;
794 815
795 procedure TfrmTracker.MenuItem18Click(Sender: TObject); 816 procedure TfrmTracker.MenuItem18Click(Sender: TObject);
@@ -849,6 +870,18 @@ begin
849 ReloadPatterns; 870 ReloadPatterns;
850 end; 871 end;
851 872
873 procedure TfrmTracker.OrderEditStringGridDblClick(Sender: TObject);
874 var
875 X, Highest: Integer;
876 begin
877 Highest := Patterns.MaxKey;
878
879 with OrderEditStringGrid do begin
880 Cells[Col, Row] := IntToStr(Highest);
881 TrackerGrid.LoadPattern(Col - 1, Patterns.GetOrCreateNew(Highest));
882 end;
883 end;
884
852 procedure TfrmTracker.OrderEditStringGridEditingDone(Sender: TObject); 885 procedure TfrmTracker.OrderEditStringGridEditingDone(Sender: TObject);
853 var 886 var
854 Temp: Integer; 887 Temp: Integer;
Modifiedutils.pas +12−2
@@ -10,9 +10,10 @@ uses
10 type 10 type
11 { TOrderMapHelper } 11 { TOrderMapHelper }
12 12
13 TOrderMapHelper = class helper for TOrderMap 13 TOrderMapHelper = class helper for TPatternMap
14 function GetOrCreateNew(Key: Integer): PPattern; 14 function GetOrCreateNew(Key: Integer): PPattern;
15 procedure CreateNewPattern(Key: Integer); 15 procedure CreateNewPattern(Key: Integer);
16 function MaxKey: Integer;
16 end; 17 end;
17 18
18 TRegisters = record 19 TRegisters = record
@@ -132,7 +133,6 @@ function WaveInstrumentToRegisters(
132 Instr: TInstrument): TRegisters; 133 Instr: TInstrument): TRegisters;
133 134
134 function ConvertWaveform(Waveform: TWave): T4bitWave; 135 function ConvertWaveform(Waveform: TWave): T4bitWave;
135
136 procedure BlankPattern(Pat: PPattern); 136 procedure BlankPattern(Pat: PPattern);
137 137
138 implementation 138 implementation
@@ -164,6 +164,16 @@ begin
164 Self.Add(Key, NewPat); 164 Self.Add(Key, NewPat);
165 end; 165 end;
166 166
167 function TOrderMapHelper.MaxKey: Integer;
168 var
169 X: Integer;
170 begin
171 Result := 0;
172 for X := 0 to Self.Count-1 do
173 if Self.Keys[X] > Result then Result := Self.Keys[X];
174 Inc(Result);
175 end;
176
167 function ConvertWaveform(Waveform: TWave): T4bitWave; 177 function ConvertWaveform(Waveform: TWave): T4bitWave;
168 var 178 var
169 I: Integer; 179 I: Integer;