1 /*
2  * Copyright (C) 2018-2020 Rerrah
3  *
4  * Permission is hereby granted, free of charge, to any person
5  * obtaining a copy of this software and associated documentation
6  * files (the "Software"), to deal in the Software without
7  * restriction, including without limitation the rights to use,
8  * copy, modify, merge, publish, distribute, sublicense, and/or sell
9  * copies of the Software, and to permit persons to whom the
10  * Software is furnished to do so, subject to the following
11  * conditions:
12  *
13  * The above copyright notice and this permission notice shall be
14  * included in all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
18  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
20  * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
21  * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
22  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23  * OTHER DEALINGS IN THE SOFTWARE.
24  */
25 
26 #include "configuration.hpp"
27 #include "jam_manager.hpp"
28 
Configuration()29 Configuration::Configuration()
30 {
31 	// Internal //
32 	followMode_ = true;
33 	workDir_ = "";
34 	instOpenFormat_ = 0;
35 	bankOpenFormat_ = 0;
36 	instMask_ = false;
37 	volMask_ = true;
38 	visibleToolbar_ = true;
39 	visibleStatusBar_ = true;
40 	visibleWaveView_ = true;
41 	pasteMode_ = PasteMode::CURSOR;
42 
43 	// Mainwindow state
44 	mainW_ = 930;
45 	mainH_= 780;
46 	mainMax_ = false;
47 	mainX_ = -1;	// Dummy
48 	mainY_ = -1;	// Dummy
49 	mainVSplit_ = -1;	// Dummy
50 
51 	// Instrument editor state
52 	instFMW_ = 570;
53 	instFMH_ = 750;
54 	instSSGW_ = 510;
55 	instSSGH_ = 390;
56 	instADPCMW_ = 510;
57 	instADPCMH_ = 430;
58 	instKitW_ = 590;
59 	instKitH_ = 430;
60 
61 	// Toolbar state
62 	mainTb_.setPosition(ToolbarConfiguration::TOP_POS);
63 	mainTb_.setNumber(0);
64 	mainTb_.setBreakBefore(false);
65 	mainTb_.setX(-1);	// Dummy
66 	mainTb_.setY(-1);	// Dummy
67 	subTb_.setPosition(ToolbarConfiguration::TOP_POS);
68 	subTb_.setNumber(1);
69 	subTb_.setBreakBefore(false);
70 	subTb_.setX(-1);	// Dummy
71 	subTb_.setY(-1);	// Dummy
72 
73 	// General //
74 	// General settings
75 	warpCursor_ = true;
76 	warpAcrossOrders_ = true;
77 	showRowNumHex_ = true;
78 	showPrevNextOrders_ = true;
79 	backupModules_ = true;
80 	dontSelectOnDoubleClick_ = false;
81 	reverseFMVolumeOrder_ = true;
82 	moveCursorToRight_ = false;
83 	retrieveChannelState_ = false;
84 	enableTranslation_ = true;
85 	showFMDetuneSigned_ = false;
86 	fill00ToEffectValue_ = true;
87 	moveCursorHScroll_ = true;
88 	overwriteUnusedUnedited_ = false;
89 	writeOnlyUsedSamples_ = false;
90 	reflectInstNumChange_ = false;
91 	fixJamVol_ = true;
92 	muteHiddenTracks_ = true;
93 	restoreTrackVis_ = false;
94 
95 	// Edit settings
96 	pageJumpLength_ = 4;
97 	editableStep_ = 1;
98 	keyRepetision_ = true;
99 
100 	// Wave view
101 	waveViewFps_ = 30;
102 
103 	// Keys
104 	shortcuts_ = {
105 		{ KeyOff, u8"-" },
106 		{ OctaveUp, u8"Num+*" },
107 		{ OctaveDown, u8"Num+/" },
108 		{ EchoBuffer, u8"^" },
109 		{ PlayAndStop, u8"Return" },
110 		{ Play, u8"" },
111 		{ PlayFromStart, u8"F5" },
112 		{ PlayPattern, u8"F6" },
113 		{ PlayFromCursor, u8"F7" },
114 		{ PlayFromMarker, u8"Ctrl+F7" },
115 		{ PlayStep, u8"Ctrl+Return" },
116 		{ Stop, u8"F8" },
117 		{ FocusOnPattern, u8"F2" },
118 		{ FocusOnOrder, u8"F3" },
119 		{ FocusOnInstrument, u8"F4" },
120 		{ ToggleEditJam, u8"Space" },
121 		{ SetMarker, u8"Ctrl+B" },
122 		{ PasteMix, u8"Ctrl+M" },
123 		{ PasteOverwrite, u8"" },
124 		{ PasteInsert, u8"" },
125 		{ SelectAll, u8"Ctrl+A" },
126 		{ Deselect, u8"Esc" },
127 		{ SelectRow, u8"" },
128 		{ SelectColumn, u8"" },
129 		{ SelectPattern, u8"" },
130 		{ SelectOrder, u8"" },
131 		{ GoToStep, u8"Alt+G" },
132 		{ ToggleTrack, u8"Alt+F9" },
133 		{ SoloTrack, u8"Alt+F10" },
134 		{ Interpolate, u8"Ctrl+G" },
135 		{ Reverse, u8"Ctrl+R" },
136 		{ GoToPrevOrder, u8"Ctrl+Left" },
137 		{ GoToNextOrder, u8"Ctrl+Right" },
138 		{ ToggleBookmark, u8"Ctrl+K" },
139 		{ PrevBookmark, u8"Ctrl+PgUp" },
140 		{ NextBookmark, u8"Ctrl+PgDown" },
141 		{ DecreaseNote, u8"Ctrl+F1" },
142 		{ IncreaseNote, u8"Ctrl+F2" },
143 		{ DecreaseOctave, u8"Ctrl+F3" },
144 		{ IncreaseOctave, u8"Ctrl+F4" },
145 		{ PrevInstrument, u8"Alt+Left" },
146 		{ NextInstrument, u8"Alt+Right" },
147 		{ MaskInstrument, u8"" },
148 		{ MaskVolume, u8"" },
149 		{ EditInstrument, u8"Ctrl+I" },
150 		{ FollowMode, u8"ScrollLock" },
151 		{ DuplicateOrder, u8"Ctrl+D" },
152 		{ ClonePatterns, u8"Alt+D" },
153 		{ CloneOrder, u8"" },
154 		{ ReplaceInstrument, u8"Alt+S" },
155 		{ ExpandPattern, u8"" },
156 		{ ShrinkPattern, u8"" },
157 		{ FineDecreaseValues, u8"Shift+F1" },
158 		{ FineIncreaseValues, u8"Shift+F2" },
159 		{ CoarseDecreaseValues, u8"Shift+F3" },
160 		{ CoarseIncreaseValuse, u8"Shift+F4" },
161 		{ ExpandEffect, u8"Alt+L" },
162 		{ ShrinkEffect, u8"Alt+K" },
163 		{ PrevHighlighted, u8"Ctrl+Up" },
164 		{ NextHighlighted, u8"Ctrl+Down" },
165 		{ IncreasePatternSize, u8"" },
166 		{ DecreasePatternSize, u8"" },
167 		{ IncreaseEditStep, u8"" },
168 		{ DecreaseEditStep, u8"" },
169 		{ DisplayEffectList, u8"F1" },
170 		{ PreviousSong, u8"" },
171 		{ NextSong, u8"" },
172 		{ JamVolumeUp, u8"" },
173 		{ JamVolumeDown, u8"" }
174 	};
175 	noteEntryLayout_ = QWERTY;
176 
177 	// Sound //
178 	sndAPI_ = u8"";
179 	sndDevice_ = u8"";
180 	realChip_ = RealChipInterface::NONE;
181 	emulator_ = 1;
182 	sampleRate_ = 44100;
183 	bufferLength_ = 40;
184 
185 	// Midi //
186 	midiAPI_ = u8"";
187 	midiInPort_ = u8"";
188 
189 	// Mixer //
190 	mixerVolumeMaster_ = 100;
191 	mixerVolumeFM_ = 0;
192 	mixerVolumeSSG_ = 0;
193 
194 	// Input //
195 	fmEnvelopeTexts_ = {
196 		{
197 			"PMD",
198 			std::vector<FMEnvelopeTextType>({
199 				FMEnvelopeTextType::Skip,
200 				FMEnvelopeTextType::AL,
201 				FMEnvelopeTextType::FB,
202 				FMEnvelopeTextType::AR1,
203 				FMEnvelopeTextType::DR1,
204 				FMEnvelopeTextType::SR1,
205 				FMEnvelopeTextType::RR1,
206 				FMEnvelopeTextType::SL1,
207 				FMEnvelopeTextType::TL1,
208 				FMEnvelopeTextType::KS1,
209 				FMEnvelopeTextType::ML1,
210 				FMEnvelopeTextType::DT1,
211 				FMEnvelopeTextType::Skip,
212 				FMEnvelopeTextType::AR2,
213 				FMEnvelopeTextType::DR2,
214 				FMEnvelopeTextType::SR2,
215 				FMEnvelopeTextType::RR2,
216 				FMEnvelopeTextType::SL2,
217 				FMEnvelopeTextType::TL2,
218 				FMEnvelopeTextType::KS2,
219 				FMEnvelopeTextType::ML2,
220 				FMEnvelopeTextType::DT2,
221 				FMEnvelopeTextType::Skip,
222 				FMEnvelopeTextType::AR3,
223 				FMEnvelopeTextType::DR3,
224 				FMEnvelopeTextType::SR3,
225 				FMEnvelopeTextType::RR3,
226 				FMEnvelopeTextType::SL3,
227 				FMEnvelopeTextType::TL3,
228 				FMEnvelopeTextType::KS3,
229 				FMEnvelopeTextType::ML3,
230 				FMEnvelopeTextType::DT3,
231 				FMEnvelopeTextType::Skip,
232 				FMEnvelopeTextType::AR4,
233 				FMEnvelopeTextType::DR4,
234 				FMEnvelopeTextType::SR4,
235 				FMEnvelopeTextType::RR4,
236 				FMEnvelopeTextType::SL4,
237 				FMEnvelopeTextType::TL4,
238 				FMEnvelopeTextType::KS4,
239 				FMEnvelopeTextType::ML4,
240 				FMEnvelopeTextType::DT4,
241 				FMEnvelopeTextType::Skip
242 			})
243 		},
244 		{
245 			"FMP",
246 			std::vector<FMEnvelopeTextType>({
247 				FMEnvelopeTextType::Skip,
248 				FMEnvelopeTextType::AR1,
249 				FMEnvelopeTextType::DR1,
250 				FMEnvelopeTextType::SR1,
251 				FMEnvelopeTextType::RR1,
252 				FMEnvelopeTextType::SL1,
253 				FMEnvelopeTextType::TL1,
254 				FMEnvelopeTextType::KS1,
255 				FMEnvelopeTextType::ML1,
256 				FMEnvelopeTextType::DT1,
257 				FMEnvelopeTextType::AR2,
258 				FMEnvelopeTextType::DR2,
259 				FMEnvelopeTextType::SR2,
260 				FMEnvelopeTextType::RR2,
261 				FMEnvelopeTextType::SL2,
262 				FMEnvelopeTextType::TL2,
263 				FMEnvelopeTextType::KS2,
264 				FMEnvelopeTextType::ML2,
265 				FMEnvelopeTextType::DT2,
266 				FMEnvelopeTextType::AR3,
267 				FMEnvelopeTextType::DR3,
268 				FMEnvelopeTextType::SR3,
269 				FMEnvelopeTextType::RR3,
270 				FMEnvelopeTextType::SL3,
271 				FMEnvelopeTextType::TL3,
272 				FMEnvelopeTextType::KS3,
273 				FMEnvelopeTextType::ML3,
274 				FMEnvelopeTextType::DT3,
275 				FMEnvelopeTextType::AR4,
276 				FMEnvelopeTextType::DR4,
277 				FMEnvelopeTextType::SR4,
278 				FMEnvelopeTextType::RR4,
279 				FMEnvelopeTextType::SL4,
280 				FMEnvelopeTextType::TL4,
281 				FMEnvelopeTextType::KS4,
282 				FMEnvelopeTextType::ML4,
283 				FMEnvelopeTextType::DT4,
284 				FMEnvelopeTextType::AL,
285 				FMEnvelopeTextType::FB
286 			})
287 		},
288 		{
289 			"FMP7",
290 			std::vector<FMEnvelopeTextType>({
291 				FMEnvelopeTextType::Skip,
292 				FMEnvelopeTextType::AR1,
293 				FMEnvelopeTextType::DR1,
294 				FMEnvelopeTextType::SR1,
295 				FMEnvelopeTextType::RR1,
296 				FMEnvelopeTextType::SL1,
297 				FMEnvelopeTextType::TL1,
298 				FMEnvelopeTextType::KS1,
299 				FMEnvelopeTextType::ML1,
300 				FMEnvelopeTextType::DT1,
301 				FMEnvelopeTextType::Skip,
302 				FMEnvelopeTextType::AR2,
303 				FMEnvelopeTextType::DR2,
304 				FMEnvelopeTextType::SR2,
305 				FMEnvelopeTextType::RR2,
306 				FMEnvelopeTextType::SL2,
307 				FMEnvelopeTextType::TL2,
308 				FMEnvelopeTextType::KS2,
309 				FMEnvelopeTextType::ML2,
310 				FMEnvelopeTextType::DT2,
311 				FMEnvelopeTextType::Skip,
312 				FMEnvelopeTextType::AR3,
313 				FMEnvelopeTextType::DR3,
314 				FMEnvelopeTextType::SR3,
315 				FMEnvelopeTextType::RR3,
316 				FMEnvelopeTextType::SL3,
317 				FMEnvelopeTextType::TL3,
318 				FMEnvelopeTextType::KS3,
319 				FMEnvelopeTextType::ML3,
320 				FMEnvelopeTextType::DT3,
321 				FMEnvelopeTextType::Skip,
322 				FMEnvelopeTextType::AR4,
323 				FMEnvelopeTextType::DR4,
324 				FMEnvelopeTextType::SR4,
325 				FMEnvelopeTextType::RR4,
326 				FMEnvelopeTextType::SL4,
327 				FMEnvelopeTextType::TL4,
328 				FMEnvelopeTextType::KS4,
329 				FMEnvelopeTextType::ML4,
330 				FMEnvelopeTextType::DT4,
331 				FMEnvelopeTextType::Skip,
332 				FMEnvelopeTextType::AL,
333 				FMEnvelopeTextType::FB
334 			})
335 		},
336 		{
337 			"VOPM",
338 			std::vector<FMEnvelopeTextType>({
339 				// Number
340 				FMEnvelopeTextType::Skip,
341 				// LFO
342 				FMEnvelopeTextType::Skip,
343 				FMEnvelopeTextType::Skip,
344 				FMEnvelopeTextType::Skip,
345 				FMEnvelopeTextType::Skip,
346 				FMEnvelopeTextType::Skip,
347 				// CH
348 				FMEnvelopeTextType::Skip,
349 				FMEnvelopeTextType::FB,
350 				FMEnvelopeTextType::AL,
351 				FMEnvelopeTextType::Skip,
352 				FMEnvelopeTextType::Skip,
353 				FMEnvelopeTextType::Skip,
354 				FMEnvelopeTextType::Skip,
355 				// Op
356 				FMEnvelopeTextType::Skip,
357 				FMEnvelopeTextType::AR1,
358 				FMEnvelopeTextType::DR1,
359 				FMEnvelopeTextType::SR1,
360 				FMEnvelopeTextType::RR1,
361 				FMEnvelopeTextType::SL1,
362 				FMEnvelopeTextType::TL1,
363 				FMEnvelopeTextType::KS1,
364 				FMEnvelopeTextType::ML1,
365 				FMEnvelopeTextType::DT1,
366 				FMEnvelopeTextType::Skip,
367 				FMEnvelopeTextType::Skip,
368 				FMEnvelopeTextType::Skip,
369 				FMEnvelopeTextType::AR2,
370 				FMEnvelopeTextType::DR2,
371 				FMEnvelopeTextType::SR2,
372 				FMEnvelopeTextType::RR2,
373 				FMEnvelopeTextType::SL2,
374 				FMEnvelopeTextType::TL2,
375 				FMEnvelopeTextType::KS2,
376 				FMEnvelopeTextType::ML2,
377 				FMEnvelopeTextType::DT2,
378 				FMEnvelopeTextType::Skip,
379 				FMEnvelopeTextType::Skip,
380 				FMEnvelopeTextType::Skip,
381 				FMEnvelopeTextType::AR3,
382 				FMEnvelopeTextType::DR3,
383 				FMEnvelopeTextType::SR3,
384 				FMEnvelopeTextType::RR3,
385 				FMEnvelopeTextType::SL3,
386 				FMEnvelopeTextType::TL3,
387 				FMEnvelopeTextType::KS3,
388 				FMEnvelopeTextType::ML3,
389 				FMEnvelopeTextType::DT3,
390 				FMEnvelopeTextType::Skip,
391 				FMEnvelopeTextType::Skip,
392 				FMEnvelopeTextType::Skip,
393 				FMEnvelopeTextType::AR4,
394 				FMEnvelopeTextType::DR4,
395 				FMEnvelopeTextType::SR4,
396 				FMEnvelopeTextType::RR4,
397 				FMEnvelopeTextType::SL4,
398 				FMEnvelopeTextType::TL4,
399 				FMEnvelopeTextType::KS4,
400 				FMEnvelopeTextType::ML4,
401 				FMEnvelopeTextType::DT4,
402 				FMEnvelopeTextType::Skip,
403 				FMEnvelopeTextType::Skip
404 			})
405 		},
406 		{
407 			"NRTDRV",	// For VOICE_MODE=0
408 			std::vector<FMEnvelopeTextType>({
409 				FMEnvelopeTextType::Skip,
410 				FMEnvelopeTextType::AL,
411 				FMEnvelopeTextType::FB,
412 				FMEnvelopeTextType::Skip,
413 				FMEnvelopeTextType::AR1,
414 				FMEnvelopeTextType::DR1,
415 				FMEnvelopeTextType::SR1,
416 				FMEnvelopeTextType::RR1,
417 				FMEnvelopeTextType::SL1,
418 				FMEnvelopeTextType::TL1,
419 				FMEnvelopeTextType::KS1,
420 				FMEnvelopeTextType::ML1,
421 				FMEnvelopeTextType::DT1,
422 				FMEnvelopeTextType::Skip,
423 				FMEnvelopeTextType::Skip,
424 				FMEnvelopeTextType::AR2,
425 				FMEnvelopeTextType::DR2,
426 				FMEnvelopeTextType::SR2,
427 				FMEnvelopeTextType::RR2,
428 				FMEnvelopeTextType::SL2,
429 				FMEnvelopeTextType::TL2,
430 				FMEnvelopeTextType::KS2,
431 				FMEnvelopeTextType::ML2,
432 				FMEnvelopeTextType::DT2,
433 				FMEnvelopeTextType::Skip,
434 				FMEnvelopeTextType::Skip,
435 				FMEnvelopeTextType::AR3,
436 				FMEnvelopeTextType::DR3,
437 				FMEnvelopeTextType::SR3,
438 				FMEnvelopeTextType::RR3,
439 				FMEnvelopeTextType::SL3,
440 				FMEnvelopeTextType::TL3,
441 				FMEnvelopeTextType::KS3,
442 				FMEnvelopeTextType::ML3,
443 				FMEnvelopeTextType::DT3,
444 				FMEnvelopeTextType::Skip,
445 				FMEnvelopeTextType::Skip,
446 				FMEnvelopeTextType::AR4,
447 				FMEnvelopeTextType::DR4,
448 				FMEnvelopeTextType::SR4,
449 				FMEnvelopeTextType::RR4,
450 				FMEnvelopeTextType::SL4,
451 				FMEnvelopeTextType::TL4,
452 				FMEnvelopeTextType::KS4,
453 				FMEnvelopeTextType::ML4,
454 				FMEnvelopeTextType::DT4,
455 				FMEnvelopeTextType::Skip,
456 				FMEnvelopeTextType::Skip
457 			})
458 		},
459 		{
460 			"MXDRV",
461 			std::vector<FMEnvelopeTextType>({
462 				FMEnvelopeTextType::Skip,
463 				FMEnvelopeTextType::AR1,
464 				FMEnvelopeTextType::DR1,
465 				FMEnvelopeTextType::SR1,
466 				FMEnvelopeTextType::RR1,
467 				FMEnvelopeTextType::SL1,
468 				FMEnvelopeTextType::TL1,
469 				FMEnvelopeTextType::KS1,
470 				FMEnvelopeTextType::ML1,
471 				FMEnvelopeTextType::DT1,
472 				FMEnvelopeTextType::Skip,
473 				FMEnvelopeTextType::Skip,
474 				FMEnvelopeTextType::AR2,
475 				FMEnvelopeTextType::DR2,
476 				FMEnvelopeTextType::SR2,
477 				FMEnvelopeTextType::RR2,
478 				FMEnvelopeTextType::SL2,
479 				FMEnvelopeTextType::TL2,
480 				FMEnvelopeTextType::KS2,
481 				FMEnvelopeTextType::ML2,
482 				FMEnvelopeTextType::DT2,
483 				FMEnvelopeTextType::Skip,
484 				FMEnvelopeTextType::Skip,
485 				FMEnvelopeTextType::AR3,
486 				FMEnvelopeTextType::DR3,
487 				FMEnvelopeTextType::SR3,
488 				FMEnvelopeTextType::RR3,
489 				FMEnvelopeTextType::SL3,
490 				FMEnvelopeTextType::TL3,
491 				FMEnvelopeTextType::KS3,
492 				FMEnvelopeTextType::ML3,
493 				FMEnvelopeTextType::DT3,
494 				FMEnvelopeTextType::Skip,
495 				FMEnvelopeTextType::Skip,
496 				FMEnvelopeTextType::AR4,
497 				FMEnvelopeTextType::DR4,
498 				FMEnvelopeTextType::SR4,
499 				FMEnvelopeTextType::RR4,
500 				FMEnvelopeTextType::SL4,
501 				FMEnvelopeTextType::TL4,
502 				FMEnvelopeTextType::KS4,
503 				FMEnvelopeTextType::ML4,
504 				FMEnvelopeTextType::DT4,
505 				FMEnvelopeTextType::Skip,
506 				FMEnvelopeTextType::Skip,
507 				FMEnvelopeTextType::AL,
508 				FMEnvelopeTextType::FB,
509 				FMEnvelopeTextType::Skip
510 			})
511 		},
512 		{
513 			"MMLDRV",
514 			std::vector<FMEnvelopeTextType>({
515 				FMEnvelopeTextType::Skip,
516 				FMEnvelopeTextType::AL,
517 				FMEnvelopeTextType::FB,
518 				FMEnvelopeTextType::AR1,
519 				FMEnvelopeTextType::DR1,
520 				FMEnvelopeTextType::SR1,
521 				FMEnvelopeTextType::RR1,
522 				FMEnvelopeTextType::SL1,
523 				FMEnvelopeTextType::TL1,
524 				FMEnvelopeTextType::KS1,
525 				FMEnvelopeTextType::ML1,
526 				FMEnvelopeTextType::DT1,
527 				FMEnvelopeTextType::Skip,
528 				FMEnvelopeTextType::Skip,
529 				FMEnvelopeTextType::AR2,
530 				FMEnvelopeTextType::DR2,
531 				FMEnvelopeTextType::SR2,
532 				FMEnvelopeTextType::RR2,
533 				FMEnvelopeTextType::SL2,
534 				FMEnvelopeTextType::TL2,
535 				FMEnvelopeTextType::KS2,
536 				FMEnvelopeTextType::ML2,
537 				FMEnvelopeTextType::DT2,
538 				FMEnvelopeTextType::Skip,
539 				FMEnvelopeTextType::Skip,
540 				FMEnvelopeTextType::AR3,
541 				FMEnvelopeTextType::DR3,
542 				FMEnvelopeTextType::SR3,
543 				FMEnvelopeTextType::RR3,
544 				FMEnvelopeTextType::SL3,
545 				FMEnvelopeTextType::TL3,
546 				FMEnvelopeTextType::KS3,
547 				FMEnvelopeTextType::ML3,
548 				FMEnvelopeTextType::DT3,
549 				FMEnvelopeTextType::Skip,
550 				FMEnvelopeTextType::Skip,
551 				FMEnvelopeTextType::AR4,
552 				FMEnvelopeTextType::DR4,
553 				FMEnvelopeTextType::SR4,
554 				FMEnvelopeTextType::RR4,
555 				FMEnvelopeTextType::SL4,
556 				FMEnvelopeTextType::TL4,
557 				FMEnvelopeTextType::KS4,
558 				FMEnvelopeTextType::ML4,
559 				FMEnvelopeTextType::DT4,
560 				FMEnvelopeTextType::Skip,
561 				FMEnvelopeTextType::Skip
562 			})
563 		},
564 		{
565 			"MUCOM88",
566 			std::vector<FMEnvelopeTextType>({
567 				FMEnvelopeTextType::Skip,
568 				FMEnvelopeTextType::FB,
569 				FMEnvelopeTextType::AL,
570 				FMEnvelopeTextType::AR1,
571 				FMEnvelopeTextType::DR1,
572 				FMEnvelopeTextType::SR1,
573 				FMEnvelopeTextType::RR1,
574 				FMEnvelopeTextType::SL1,
575 				FMEnvelopeTextType::TL1,
576 				FMEnvelopeTextType::KS1,
577 				FMEnvelopeTextType::ML1,
578 				FMEnvelopeTextType::DT1,
579 				FMEnvelopeTextType::AR2,
580 				FMEnvelopeTextType::DR2,
581 				FMEnvelopeTextType::SR2,
582 				FMEnvelopeTextType::RR2,
583 				FMEnvelopeTextType::SL2,
584 				FMEnvelopeTextType::TL2,
585 				FMEnvelopeTextType::KS2,
586 				FMEnvelopeTextType::ML2,
587 				FMEnvelopeTextType::DT2,
588 				FMEnvelopeTextType::AR3,
589 				FMEnvelopeTextType::DR3,
590 				FMEnvelopeTextType::SR3,
591 				FMEnvelopeTextType::RR3,
592 				FMEnvelopeTextType::SL3,
593 				FMEnvelopeTextType::TL3,
594 				FMEnvelopeTextType::KS3,
595 				FMEnvelopeTextType::ML3,
596 				FMEnvelopeTextType::DT3,
597 				FMEnvelopeTextType::AR4,
598 				FMEnvelopeTextType::DR4,
599 				FMEnvelopeTextType::SR4,
600 				FMEnvelopeTextType::RR4,
601 				FMEnvelopeTextType::SL4,
602 				FMEnvelopeTextType::TL4,
603 				FMEnvelopeTextType::KS4,
604 				FMEnvelopeTextType::ML4,
605 				FMEnvelopeTextType::DT4
606 			})
607 		}
608 	};
609 
610 	// Layouts
611 	const std::unordered_map<std::string, JamKey> mappingQWERTY = {
612 		{u8"Z",         JamKey::LowC},
613 		{u8"S",         JamKey::LowCS},
614 		{u8"X",         JamKey::LowD},
615 		{u8"D",         JamKey::LowDS},
616 		{u8"C",         JamKey::LowE},
617 		{u8"V",         JamKey::LowF},
618 		{u8"G",         JamKey::LowFS},
619 		{u8"B",         JamKey::LowG},
620 		{u8"H",         JamKey::LowGS},
621 		{u8"N",         JamKey::LowA},
622 		{u8"J",         JamKey::LowAS},
623 		{u8"M",         JamKey::LowB},
624 		{u8",",         JamKey::LowC2},
625 		{u8"L",         JamKey::LowCS2},
626 		{u8".",         JamKey::LowD2},
627 
628 		{u8"Q",         JamKey::HighC},
629 		{u8"2",         JamKey::HighCS},
630 		{u8"W",         JamKey::HighD},
631 		{u8"3",         JamKey::HighDS},
632 		{u8"E",         JamKey::HighE},
633 		{u8"R",         JamKey::HighF},
634 		{u8"5",         JamKey::HighFS},
635 		{u8"T",         JamKey::HighG},
636 		{u8"6",         JamKey::HighGS},
637 		{u8"Y",         JamKey::HighA},
638 		{u8"7",         JamKey::HighAS},
639 		{u8"U",         JamKey::HighB},
640 		{u8"I",         JamKey::HighC2},
641 		{u8"9",         JamKey::HighCS2},
642 		{u8"O",         JamKey::HighD2},
643 	};
644 	const std::unordered_map<std::string, JamKey> mappingQWERTZ = {
645 		{u8"Y",         JamKey::LowC},
646 		{u8"S",         JamKey::LowCS},
647 		{u8"X",         JamKey::LowD},
648 		{u8"D",         JamKey::LowDS},
649 		{u8"C",         JamKey::LowE},
650 		{u8"V",         JamKey::LowF},
651 		{u8"G",         JamKey::LowFS},
652 		{u8"B",         JamKey::LowG},
653 		{u8"H",         JamKey::LowGS},
654 		{u8"N",         JamKey::LowA},
655 		{u8"J",         JamKey::LowAS},
656 		{u8"M",         JamKey::LowB},
657 		{u8",",         JamKey::LowC2},
658 		{u8"L",         JamKey::LowCS2},
659 		{u8".",         JamKey::LowD2},
660 
661 		{u8"Q",         JamKey::HighC},
662 		{u8"2",         JamKey::HighCS},
663 		{u8"W",         JamKey::HighD},
664 		{u8"3",         JamKey::HighDS},
665 		{u8"E",         JamKey::HighE},
666 		{u8"R",         JamKey::HighF},
667 		{u8"5",         JamKey::HighFS},
668 		{u8"T",         JamKey::HighG},
669 		{u8"6",         JamKey::HighGS},
670 		{u8"Z",         JamKey::HighA},
671 		{u8"7",         JamKey::HighAS},
672 		{u8"U",         JamKey::HighB},
673 		{u8"I",         JamKey::HighC2},
674 		{u8"9",         JamKey::HighCS2},
675 		{u8"O",         JamKey::HighD2},
676 	};
677 	const std::unordered_map<std::string, JamKey> mappingAZERTY = {
678 		{u8"W",         JamKey::LowC},
679 		{u8"S",         JamKey::LowCS},
680 		{u8"X",         JamKey::LowD},
681 		{u8"D",         JamKey::LowDS},
682 		{u8"C",         JamKey::LowE},
683 		{u8"V",         JamKey::LowF},
684 		{u8"G",         JamKey::LowFS},
685 		{u8"B",         JamKey::LowG},
686 		{u8"H",         JamKey::LowGS},
687 		{u8"N",         JamKey::LowA},
688 		{u8"J",         JamKey::LowAS},
689 		{u8",",         JamKey::LowB},
690 		{u8";",         JamKey::LowC2},
691 		{u8"L",         JamKey::LowCS2},
692 		{u8".",         JamKey::LowD2},
693 
694 		{u8"A",         JamKey::HighC},
695 		{u8"É",         JamKey::HighCS},   //é - \xc9
696 		{u8"Z",         JamKey::HighD},
697 		{u8"\"",        JamKey::HighDS},
698 		{u8"E",         JamKey::HighE},
699 		{u8"R",         JamKey::HighF},
700 		{u8"(",         JamKey::HighFS},
701 		{u8"T",         JamKey::HighG},
702 		{u8"-",         JamKey::HighGS},
703 		{u8"Y",         JamKey::HighA},
704 		{u8"È",         JamKey::HighAS},   //è - \xc8
705 		{u8"U",         JamKey::HighB},
706 		{u8"I",         JamKey::HighC2},
707 		{u8"Ç",         JamKey::HighCS2}, //ç - \xc7
708 		{u8"O",         JamKey::HighD2},
709 	};
710 	mappingCustom = {};
711 	mappingLayouts = {
712 		{ Custom, mappingCustom },
713 		{ QWERTY, mappingQWERTY },
714 		{ QWERTZ, mappingQWERTZ },
715 		{ AZERTY, mappingAZERTY }
716 	};
717 
718 	// Appearance
719 	ptnHdFont_ = u8"";
720 	ptnHdFontSize_ = 10;
721 	ptnRowFont_ = u8"";
722 	ptnRowFontSize_ = 10;
723 	odrHdFont_ = u8"";
724 	odrHdFontSize_ = 10;
725 	odrRowFont_ = u8"";
726 	odrRowFontSize_ = 10;
727 }
728 
729 // Internal //
setFollowMode(bool enabled)730 void Configuration::setFollowMode(bool enabled) { followMode_ = enabled; }
731 
getFollowMode() const732 bool Configuration::getFollowMode() const { return followMode_; }
733 
setWorkingDirectory(std::string path)734 void Configuration::setWorkingDirectory(std::string path) { workDir_ = path; }
735 
getWorkingDirectory() const736 std::string Configuration::getWorkingDirectory() const { return workDir_; }
737 
setInstrumentOpenFormat(int i)738 void Configuration::setInstrumentOpenFormat(int i) { instOpenFormat_ = i; }
739 
getInstrumentOpenFormat() const740 int Configuration::getInstrumentOpenFormat() const { return instOpenFormat_; }
741 
setBankOpenFormat(int i)742 void Configuration::setBankOpenFormat(int i) { bankOpenFormat_ = i; }
743 
getBankOpenFormat() const744 int Configuration::getBankOpenFormat() const { return bankOpenFormat_; }
745 
setInstrumentMask(bool enabled)746 void Configuration::setInstrumentMask(bool enabled) { instMask_ = enabled; }
747 
getInstrumentMask() const748 bool Configuration::getInstrumentMask() const { return instMask_; }
749 
setVolumeMask(bool enabled)750 void Configuration::setVolumeMask(bool enabled) { volMask_ = enabled; }
751 
getVolumeMask() const752 bool Configuration::getVolumeMask() const { return volMask_; }
753 
setVisibleToolbar(bool visible)754 void Configuration::setVisibleToolbar(bool visible) { visibleToolbar_ = visible; }
755 
getVisibleToolbar() const756 bool Configuration::getVisibleToolbar() const { return visibleToolbar_; }
757 
setVisibleStatusBar(bool visible)758 void Configuration::setVisibleStatusBar(bool visible) { visibleStatusBar_ = visible; }
759 
getVisibleStatusBar() const760 bool Configuration::getVisibleStatusBar() const { return visibleStatusBar_; }
761 
setVisibleWaveView(bool visible)762 void Configuration::setVisibleWaveView(bool visible) { visibleWaveView_ = visible; }
763 
getVisibleWaveView() const764 bool Configuration::getVisibleWaveView() const { return visibleWaveView_; }
765 
setPasteMode(PasteMode mode)766 void Configuration::setPasteMode(PasteMode mode) { pasteMode_ = mode; }
767 
getPasteMode() const768 Configuration::PasteMode Configuration::getPasteMode() const { return pasteMode_; }
769 
770 // Mainwindow state
setMainWindowWidth(int w)771 void Configuration::setMainWindowWidth(int w) { mainW_ = w; }
772 
getMainWindowWidth() const773 int Configuration::getMainWindowWidth() const { return mainW_; }
774 
setMainWindowHeight(int h)775 void Configuration::setMainWindowHeight(int h) { mainH_ = h; }
776 
getMainWindowHeight() const777 int Configuration::getMainWindowHeight() const { return mainH_; }
778 
setMainWindowMaximized(bool isMax)779 void Configuration::setMainWindowMaximized(bool isMax) { mainMax_ = isMax; }
780 
getMainWindowMaximized() const781 bool Configuration::getMainWindowMaximized() const { return mainMax_; }
782 
setMainWindowX(int x)783 void Configuration::setMainWindowX(int x) { mainX_ = x; }
784 
getMainWindowX() const785 int Configuration::getMainWindowX() const { return mainX_; }
786 
setMainWindowY(int y)787 void Configuration::setMainWindowY(int y) { mainY_ = y; }
788 
getMainWindowY() const789 int Configuration::getMainWindowY() const { return mainY_; }
790 
setMainWindowVerticalSplit(int y)791 void Configuration::setMainWindowVerticalSplit(int y) { mainVSplit_ = y; }
792 
getMainWindowVerticalSplit() const793 int Configuration::getMainWindowVerticalSplit() const { return mainVSplit_; }
794 
795 // Instrument editor state
setInstrumentFMWindowWidth(int w)796 void Configuration::setInstrumentFMWindowWidth(int w) { instFMW_ = w; }
797 
getInstrumentFMWindowWidth() const798 int Configuration::getInstrumentFMWindowWidth() const { return instFMW_; }
799 
setInstrumentFMWindowHeight(int h)800 void Configuration::setInstrumentFMWindowHeight(int h) { instFMH_ = h; }
801 
getInstrumentFMWindowHeight() const802 int Configuration::getInstrumentFMWindowHeight() const { return instFMH_; }
803 
setInstrumentSSGWindowWidth(int w)804 void Configuration::setInstrumentSSGWindowWidth(int w) { instSSGW_ = w; }
805 
getInstrumentSSGWindowWidth() const806 int Configuration::getInstrumentSSGWindowWidth() const { return instSSGW_; }
807 
setInstrumentSSGWindowHeight(int h)808 void Configuration::setInstrumentSSGWindowHeight(int h) { instSSGH_ = h; }
809 
getInstrumentSSGWindowHeight() const810 int Configuration::getInstrumentSSGWindowHeight() const { return instSSGH_; }
811 
setInstrumentADPCMWindowWidth(int w)812 void Configuration::setInstrumentADPCMWindowWidth(int w) { instADPCMW_ = w; }
813 
getInstrumentADPCMWindowWidth() const814 int Configuration::getInstrumentADPCMWindowWidth() const { return instADPCMW_; }
815 
setInstrumentADPCMWindowHeight(int h)816 void Configuration::setInstrumentADPCMWindowHeight(int h) { instADPCMH_ = h; }
817 
getInstrumentADPCMWindowHeight() const818 int Configuration::getInstrumentADPCMWindowHeight() const { return instADPCMH_; }
819 
setInstrumentDrumkitWindowWidth(int w)820 void Configuration::setInstrumentDrumkitWindowWidth(int w) { instKitW_ = w; }
821 
getInstrumentDrumkitWindowWidth() const822 int Configuration::getInstrumentDrumkitWindowWidth() const { return instKitW_; }
823 
setInstrumentDrumkitWindowHeight(int h)824 void Configuration::setInstrumentDrumkitWindowHeight(int h) { instKitH_ = h; }
825 
getInstrumentDrumkitWindowHeight() const826 int Configuration::getInstrumentDrumkitWindowHeight() const { return instKitH_; }
827 
828 // Toolbar state
829 using TBConfig = Configuration::ToolbarConfiguration;
setPosition(ToolbarPosition pos)830 void TBConfig::setPosition(ToolbarPosition pos) { pos_ = pos; }
831 
getPosition() const832 TBConfig::ToolbarPosition TBConfig::getPosition() const { return pos_; }
833 
setNumber(int n)834 void TBConfig::setNumber(int n) { num_ = n; }
835 
getNumber() const836 int TBConfig::getNumber() const { return num_; }
837 
setBreakBefore(bool enabled)838 void TBConfig::setBreakBefore(bool enabled) { hasBreakBefore_ = enabled; }
839 
hasBreakBefore() const840 bool TBConfig::hasBreakBefore() const { return hasBreakBefore_; }
841 
setX(int x)842 void TBConfig::setX(int x) { x_ = x; }
843 
getX() const844 int TBConfig::getX() const { return x_; }
845 
setY(int y)846 void TBConfig::setY(int y) { y_ = y; }
847 
getY() const848 int TBConfig::getY() const { return y_; }
849 
getMainToolbarConfiguration()850 TBConfig& Configuration::getMainToolbarConfiguration() { return mainTb_; }
851 
getSubToolbarConfiguration()852 TBConfig& Configuration::getSubToolbarConfiguration() { return subTb_; }
853 
854 // General //
855 // General settings
setWarpCursor(bool enabled)856 void Configuration::setWarpCursor(bool enabled) { warpCursor_ = enabled; }
857 
getWarpCursor() const858 bool Configuration::getWarpCursor() const { return warpCursor_; }
859 
setWarpAcrossOrders(bool enabled)860 void Configuration::setWarpAcrossOrders(bool enabled) { warpAcrossOrders_ = enabled; }
861 
getWarpAcrossOrders() const862 bool Configuration::getWarpAcrossOrders() const { return warpAcrossOrders_; }
863 
setShowRowNumberInHex(bool enabled)864 void Configuration::setShowRowNumberInHex(bool enabled) { showRowNumHex_ = enabled; }
865 
getShowRowNumberInHex() const866 bool Configuration::getShowRowNumberInHex() const { return showRowNumHex_; }
867 
setShowPreviousNextOrders(bool enabled)868 void Configuration::setShowPreviousNextOrders(bool enabled) { showPrevNextOrders_ = enabled; }
869 
getShowPreviousNextOrders() const870 bool Configuration::getShowPreviousNextOrders() const { return showPrevNextOrders_; }
871 
setBackupModules(bool enabled)872 void Configuration::setBackupModules(bool enabled) { backupModules_ = enabled; }
873 
getBackupModules() const874 bool Configuration::getBackupModules() const { return backupModules_; }
875 
setDontSelectOnDoubleClick(bool enabled)876 void Configuration::setDontSelectOnDoubleClick(bool enabled) { dontSelectOnDoubleClick_ = enabled; }
877 
getDontSelectOnDoubleClick() const878 bool Configuration::getDontSelectOnDoubleClick() const { return dontSelectOnDoubleClick_; }
879 
setReverseFMVolumeOrder(bool enabled)880 void Configuration::setReverseFMVolumeOrder(bool enabled) { reverseFMVolumeOrder_= enabled; }
881 
getReverseFMVolumeOrder() const882 bool Configuration::getReverseFMVolumeOrder() const { return reverseFMVolumeOrder_; }
883 
setMoveCursorToRight(bool enabled)884 void Configuration::setMoveCursorToRight(bool enabled) { moveCursorToRight_ = enabled; }
885 
getMoveCursorToRight() const886 bool Configuration::getMoveCursorToRight() const { return moveCursorToRight_; }
887 
setRetrieveChannelState(bool enabled)888 void Configuration::setRetrieveChannelState(bool enabled) { retrieveChannelState_ = enabled; }
889 
getRetrieveChannelState() const890 bool Configuration::getRetrieveChannelState() const { return retrieveChannelState_; }
891 
setEnableTranslation(bool enabled)892 void Configuration::setEnableTranslation(bool enabled) { enableTranslation_ = enabled; }
893 
getEnableTranslation() const894 bool Configuration::getEnableTranslation() const { return enableTranslation_; }
895 
setShowFMDetuneAsSigned(bool enabled)896 void Configuration::setShowFMDetuneAsSigned(bool enabled) { showFMDetuneSigned_ = enabled; }
897 
getShowFMDetuneAsSigned() const898 bool Configuration::getShowFMDetuneAsSigned() const { return showFMDetuneSigned_; }
899 
setFill00ToEffectValue(bool enabled)900 void Configuration::setFill00ToEffectValue(bool enabled) { fill00ToEffectValue_ = enabled; }
901 
getFill00ToEffectValue() const902 bool Configuration::getFill00ToEffectValue() const { return fill00ToEffectValue_; }
903 
setMoveCursorByHorizontalScroll(bool enabled)904 void Configuration::setMoveCursorByHorizontalScroll(bool enabled) { moveCursorHScroll_ = enabled; }
905 
getMoveCursorByHorizontalScroll() const906 bool Configuration::getMoveCursorByHorizontalScroll() const { return moveCursorHScroll_; }
907 
setOverwriteUnusedUneditedPropety(bool enabled)908 void Configuration::setOverwriteUnusedUneditedPropety(bool enabled) { overwriteUnusedUnedited_ = enabled; }
909 
getOverwriteUnusedUneditedPropety() const910 bool Configuration::getOverwriteUnusedUneditedPropety() const { return overwriteUnusedUnedited_; }
911 
setWriteOnlyUsedSamples(bool enabled)912 void Configuration::setWriteOnlyUsedSamples(bool enabled) { writeOnlyUsedSamples_ = enabled; }
913 
getWriteOnlyUsedSamples() const914 bool Configuration::getWriteOnlyUsedSamples() const { return writeOnlyUsedSamples_; }
915 
setReflectInstrumentNumberChange(bool enabled)916 void Configuration::setReflectInstrumentNumberChange(bool enabled) { reflectInstNumChange_ = enabled; }
917 
getReflectInstrumentNumberChange() const918 bool Configuration::getReflectInstrumentNumberChange() const { return reflectInstNumChange_; }
919 
setFixJammingVolume(bool enabled)920 void Configuration::setFixJammingVolume(bool enabled) { fixJamVol_ = enabled; }
921 
getFixJammingVolume() const922 bool Configuration::getFixJammingVolume() const { return fixJamVol_; }
923 
setMuteHiddenTracks(bool enabled)924 void Configuration::setMuteHiddenTracks(bool enabled) { muteHiddenTracks_ = enabled; }
925 
getMuteHiddenTracks() const926 bool Configuration::getMuteHiddenTracks() const { return muteHiddenTracks_; }
927 
setRestoreTrackVisibility(bool enabled)928 void Configuration::setRestoreTrackVisibility(bool enabled) { restoreTrackVis_ = enabled; }
929 
getRestoreTrackVisibility() const930 bool Configuration::getRestoreTrackVisibility() const { return restoreTrackVis_; }
931 
932 // Edit settings
setPageJumpLength(size_t length)933 void Configuration::setPageJumpLength(size_t length) { pageJumpLength_ = length; }
934 
getPageJumpLength() const935 size_t Configuration::getPageJumpLength() const { return pageJumpLength_; }
936 
setEditableStep(size_t step)937 void Configuration::setEditableStep(size_t step) { editableStep_ = step; }
938 
getEditableStep() const939 size_t Configuration::getEditableStep() const { return editableStep_; }
940 
setKeyRepetition(bool enabled)941 void Configuration::setKeyRepetition(bool enabled) { keyRepetision_ = enabled; }
942 
getKeyRepetition() const943 bool Configuration::getKeyRepetition() const { return keyRepetision_; }
944 
945 // Wave view
setWaveViewFrameRate(int rate)946 void Configuration::setWaveViewFrameRate(int rate) { waveViewFps_ = rate; }
947 
getWaveViewFrameRate() const948 int Configuration::getWaveViewFrameRate() const { return waveViewFps_; }
949 
950 // Keys
setShortcuts(std::unordered_map<ShortcutAction,std::string> shortcuts)951 void Configuration::setShortcuts(std::unordered_map<ShortcutAction, std::string> shortcuts) { shortcuts_ = shortcuts; }
952 
getShortcuts() const953 std::unordered_map<Configuration::ShortcutAction, std::string> Configuration::getShortcuts() const { return shortcuts_; }
954 
setNoteEntryLayout(KeyboardLayout layout)955 void Configuration::setNoteEntryLayout(KeyboardLayout layout) { noteEntryLayout_ = layout; }
956 
getNoteEntryLayout() const957 Configuration::KeyboardLayout Configuration::getNoteEntryLayout() const { return noteEntryLayout_; }
958 
setCustomLayoutKeys(std::unordered_map<std::string,JamKey> mapping)959 void Configuration::setCustomLayoutKeys(std::unordered_map<std::string, JamKey> mapping)
960 {
961 	mappingLayouts[KeyboardLayout::Custom] = mapping;
962 }
963 
getCustomLayoutKeys() const964 std::unordered_map<std::string, JamKey> Configuration::getCustomLayoutKeys() const
965 {
966 	return mappingLayouts.at(KeyboardLayout::Custom);
967 }
968 
969 // Sound //
setSoundAPI(std::string api)970 void Configuration::setSoundAPI(std::string api) { sndAPI_ = api; }
971 
getSoundAPI() const972 std::string Configuration::getSoundAPI() const { return sndAPI_; }
973 
setSoundDevice(std::string device)974 void Configuration::setSoundDevice(std::string device) { sndDevice_ = device; }
975 
getSoundDevice() const976 std::string Configuration::getSoundDevice() const { return sndDevice_; }
977 
setRealChipInterface(RealChipInterface type)978 void Configuration::setRealChipInterface(RealChipInterface type) { realChip_ = type; }
979 
getRealChipInterface() const980 RealChipInterface Configuration::getRealChipInterface() const { return realChip_; }
981 
setEmulator(int emulator)982 void Configuration::setEmulator(int emulator) { emulator_ = emulator; }
983 
getEmulator() const984 int Configuration::getEmulator() const { return emulator_; }
985 
setSampleRate(uint32_t rate)986 void Configuration::setSampleRate(uint32_t rate) { sampleRate_ = rate; }
987 
getSampleRate() const988 uint32_t Configuration::getSampleRate() const { return sampleRate_; }
989 
setBufferLength(size_t length)990 void Configuration::setBufferLength(size_t length) { bufferLength_ = length; }
991 
getBufferLength() const992 size_t Configuration::getBufferLength() const { return bufferLength_; }
993 
994 // Midi //
setMidiAPI(const std::string & api)995 void Configuration::setMidiAPI(const std::string& api) { midiAPI_ = api; }
996 
getMidiAPI() const997 std::string Configuration::getMidiAPI() const { return midiAPI_; }
998 
setMidiInputPort(const std::string & port)999 void Configuration::setMidiInputPort(const std::string& port) { midiInPort_ = port; }
1000 
getMidiInputPort() const1001 std::string Configuration::getMidiInputPort() const { return midiInPort_; }
1002 
1003 // Mixer //
setMixerVolumeMaster(int percentage)1004 void Configuration::setMixerVolumeMaster(int percentage) { mixerVolumeMaster_ = percentage; }
1005 
getMixerVolumeMaster() const1006 int Configuration::getMixerVolumeMaster() const { return mixerVolumeMaster_; }
1007 
setMixerVolumeFM(double dB)1008 void Configuration::setMixerVolumeFM(double dB) { mixerVolumeFM_ = dB; }
1009 
getMixerVolumeFM() const1010 double Configuration::getMixerVolumeFM() const { return mixerVolumeFM_; }
1011 
setMixerVolumeSSG(double dB)1012 void Configuration::setMixerVolumeSSG(double dB) { mixerVolumeSSG_ = dB; }
1013 
getMixerVolumeSSG() const1014 double Configuration::getMixerVolumeSSG() const { return mixerVolumeSSG_; }
1015 
1016 // Input //
setFMEnvelopeTexts(std::vector<FMEnvelopeText> texts)1017 void Configuration::setFMEnvelopeTexts(std::vector<FMEnvelopeText> texts) { fmEnvelopeTexts_ = texts; }
1018 
getFMEnvelopeTexts() const1019 std::vector<FMEnvelopeText> Configuration::getFMEnvelopeTexts() const { return fmEnvelopeTexts_; }
1020 
1021 // Appearrance
setPatternEditorHeaderFont(std::string font)1022 void Configuration::setPatternEditorHeaderFont(std::string font) { ptnHdFont_ = font; }
1023 
getPatternEditorHeaderFont() const1024 std::string Configuration::getPatternEditorHeaderFont() const { return ptnHdFont_; }
1025 
setPatternEditorHeaderFontSize(int size)1026 void Configuration::setPatternEditorHeaderFontSize(int size) { ptnHdFontSize_ = size; }
1027 
getPatternEditorHeaderFontSize() const1028 int Configuration::getPatternEditorHeaderFontSize() const { return ptnHdFontSize_; }
1029 
setPatternEditorRowsFont(std::string font)1030 void Configuration::setPatternEditorRowsFont(std::string font) { ptnRowFont_ = font; }
1031 
getPatternEditorRowsFont() const1032 std::string Configuration::getPatternEditorRowsFont() const { return ptnRowFont_; }
1033 
setPatternEditorRowsFontSize(int size)1034 void Configuration::setPatternEditorRowsFontSize(int size) { ptnRowFontSize_ = size; }
1035 
getPatternEditorRowsFontSize() const1036 int Configuration::getPatternEditorRowsFontSize() const { return ptnRowFontSize_; }
1037 
setOrderListHeaderFont(std::string font)1038 void Configuration::setOrderListHeaderFont(std::string font) { odrHdFont_ = font; }
1039 
getOrderListHeaderFont() const1040 std::string Configuration::getOrderListHeaderFont() const { return odrHdFont_; }
1041 
setOrderListHeaderFontSize(int size)1042 void Configuration::setOrderListHeaderFontSize(int size) { odrHdFontSize_ = size; }
1043 
getOrderListHeaderFontSize() const1044 int Configuration::getOrderListHeaderFontSize() const { return odrHdFontSize_; }
1045 
setOrderListRowsFont(std::string font)1046 void Configuration::setOrderListRowsFont(std::string font) { odrRowFont_ = font; }
1047 
getOrderListRowsFont() const1048 std::string Configuration::getOrderListRowsFont() const { return odrRowFont_; }
1049 
setOrderListRowsFontSize(int size)1050 void Configuration::setOrderListRowsFontSize(int size) { odrRowFontSize_ = size; }
1051 
getOrderListRowsFontSize() const1052 int Configuration::getOrderListRowsFontSize() const { return odrRowFontSize_; }
1053