1
1
using System ;
2
2
using System . Collections . Generic ;
3
- using System . ComponentModel ;
4
3
using System . Data ;
5
- using System . Drawing ;
6
4
using System . Linq ;
7
5
using System . Text ;
8
- using System . Threading . Tasks ;
9
6
using System . Windows . Forms ;
10
7
using Commons . Media . PortAudio ;
11
8
using System . Diagnostics ;
@@ -23,8 +20,8 @@ public partial class Form1 : Form
23
20
private string TOMLPath ;
24
21
private FlexGUIConfig flexGUIConfig ;
25
22
private Encoding legacyEncoding ;
26
- private string flexasioGuiVersion = "0.33 " ;
27
- private string flexasioVersion = "1.8 " ;
23
+ private string flexasioGuiVersion = "0.34 " ;
24
+ private string flexasioVersion = "1.9 " ;
28
25
private string tomlName = "FlexASIO.toml" ;
29
26
private string docUrl = "https://github.com/dechamps/FlexASIO/blob/master/CONFIGURATION.md" ;
30
27
@@ -52,11 +49,20 @@ public Form1()
52
49
CultureInfo . DefaultThreadCurrentUICulture = customCulture ;
53
50
54
51
TOMLPath = $ "{ Environment . GetFolderPath ( Environment . SpecialFolder . UserProfile ) } \\ { tomlName } ";
52
+
53
+ this . LoadFlexASIOConfig ( TOMLPath ) ;
55
54
55
+ InitDone = true ;
56
+ SetStatusMessage ( $ "FlexASIO GUI for FlexASIO { flexasioVersion } started ({ Configuration . VersionString } )") ;
57
+ GenerateOutput ( ) ;
58
+ }
59
+
60
+ private FlexGUIConfig LoadFlexASIOConfig ( string tomlPath )
61
+ {
56
62
flexGUIConfig = new FlexGUIConfig ( ) ;
57
- if ( File . Exists ( TOMLPath ) )
63
+ if ( File . Exists ( tomlPath ) )
58
64
{
59
- flexGUIConfig = Toml . ReadFile < FlexGUIConfig > ( TOMLPath ) ;
65
+ flexGUIConfig = Toml . ReadFile < FlexGUIConfig > ( tomlPath ) ;
60
66
}
61
67
62
68
numericBufferSize . Maximum = 8192 ;
@@ -65,7 +71,7 @@ public Form1()
65
71
numericLatencyInput . Increment = 0.1m ;
66
72
numericLatencyOutput . Increment = 0.1m ;
67
73
68
- for ( var i = 0 ; i < Configuration . HostApiCount ; i ++ )
74
+ for ( var i = 0 ; i < Configuration . HostApiCount ; i ++ )
69
75
{
70
76
comboBackend . Items . Add ( Configuration . GetHostApiInfo ( i ) . name ) ;
71
77
}
@@ -82,7 +88,7 @@ public Form1()
82
88
if ( flexGUIConfig . bufferSizeSamples != null )
83
89
numericBufferSize . Value = ( Int64 ) flexGUIConfig . bufferSizeSamples ;
84
90
checkBoxSetBufferSize . Checked = numericBufferSize . Enabled = flexGUIConfig . bufferSizeSamples != null ;
85
-
91
+
86
92
treeDevicesInput . SelectedNode = treeDevicesInput . Nodes . Cast < TreeNode > ( ) . FirstOrDefault ( x => x . Text == ( flexGUIConfig . input . device == "" ? "(None)" : flexGUIConfig . input . device ) ) ;
87
93
treeDevicesOutput . SelectedNode = treeDevicesOutput . Nodes . Cast < TreeNode > ( ) . FirstOrDefault ( x => x . Text == ( flexGUIConfig . output . device == "" ? "(None)" : flexGUIConfig . output . device ) ) ;
88
94
@@ -109,10 +115,7 @@ public Form1()
109
115
wasapiAutoConvertInput . Checked = flexGUIConfig . input . wasapiAutoConvert ?? false ;
110
116
wasapiAutoConvertOutput . Enabled = flexGUIConfig . output . wasapiAutoConvert != null ;
111
117
wasapiAutoConvertOutput . Checked = flexGUIConfig . output . wasapiAutoConvert ?? false ;
112
-
113
- InitDone = true ;
114
- SetStatusMessage ( $ "FlexASIO GUI for FlexASIO { flexasioVersion } started ({ Configuration . VersionString } )") ;
115
- GenerateOutput ( ) ;
118
+ return flexGUIConfig ;
116
119
}
117
120
118
121
private string DescrambleUTF8 ( string s )
@@ -256,65 +259,68 @@ private void btSaveAs_Click(object sender, EventArgs e)
256
259
SetStatusMessage ( $ "Configuration written to { saveFileDialog . FileName } ") ;
257
260
}
258
261
259
- private void treeDevicesInput_BeforeSelect ( object sender , TreeViewCancelEventArgs e )
262
+ private void treeDevicesInput_AfterSelect ( object sender , TreeViewEventArgs e )
260
263
{
261
- var o = sender as TreeView ;
262
- if ( o . SelectedNode != null )
264
+ if ( sender == null ) return ;
265
+ else
263
266
{
264
- o . SelectedNode . Checked = false ;
267
+ e . Node . Checked = true ;
268
+ this . onTreeViewSelected ( eventArgs : e , forInput : true ) ;
265
269
}
266
270
}
267
271
268
- private void treeDevicesOutput_BeforeSelect ( object sender , TreeViewCancelEventArgs e )
272
+ private void treeDevicesOutput_AfterSelect ( object sender , TreeViewEventArgs e )
269
273
{
270
- var o = sender as TreeView ;
271
- if ( o . SelectedNode != null )
274
+ if ( sender == null ) return ;
275
+ else
272
276
{
273
- o . SelectedNode . Checked = false ;
277
+ e . Node . Checked = true ;
278
+ this . onTreeViewSelected ( eventArgs : e , forInput : false ) ;
274
279
}
275
280
}
276
281
277
- private void treeDevicesInput_BeforeCheck ( object sender , TreeViewCancelEventArgs e )
282
+ private void treeDevicesOutput_AfterCheck ( object sender , TreeViewEventArgs e )
278
283
{
279
- if ( e . Node . IsSelected == false )
284
+ if ( sender == null ) return ;
285
+ else
280
286
{
281
- e . Cancel = true ;
287
+ this . onTreeViewSelected ( eventArgs : e , forInput : false ) ;
282
288
}
283
289
}
284
290
285
- private void treeDevicesOutput_BeforeCheck ( object sender , TreeViewCancelEventArgs e )
291
+ private void treeDevicesInput_AfterCheck ( object sender , TreeViewEventArgs e )
286
292
{
287
- if ( e . Node . IsSelected == false )
293
+ if ( sender == null ) return ;
294
+ else
288
295
{
289
- e . Cancel = true ;
296
+ this . onTreeViewSelected ( eventArgs : e , forInput : true ) ;
290
297
}
291
298
}
292
299
293
- private void treeDevicesInput_AfterSelect ( object sender , TreeViewEventArgs e )
300
+ private void unCheckAllOthers ( TreeNode treeNode )
294
301
{
295
- var o = sender as TreeView ;
296
- if ( o == null ) return ;
297
- if ( o . SelectedNode != null )
302
+ foreach ( TreeNode node in treeNode . TreeView . Nodes )
298
303
{
299
- o . SelectedNode . Checked = true ;
300
- flexGUIConfig . input . device = o . SelectedNode . Text == "(None)" ? "" : o . SelectedNode . Text ;
301
- GenerateOutput ( ) ;
304
+ if ( node != treeNode )
305
+ {
306
+ node . Checked = false ;
307
+ }
302
308
}
303
309
}
304
310
305
- private void treeDevicesOutput_AfterSelect ( object sender , TreeViewEventArgs e )
311
+ private void onTreeViewSelected ( TreeViewEventArgs eventArgs , bool forInput )
306
312
{
307
- var o = sender as TreeView ;
308
- if ( o == null ) return ;
309
- if ( o . SelectedNode != null )
313
+ if ( eventArgs . Node . Checked == true )
310
314
{
311
- o . SelectedNode . Checked = true ;
312
- flexGUIConfig . output . device = o . SelectedNode . Text == "(None)" ? "" : o . SelectedNode . Text ;
315
+ if ( forInput == true )
316
+ flexGUIConfig . input . device = eventArgs . Node . Text == "(None)" ? "" : eventArgs . Node . Text ;
317
+ else
318
+ flexGUIConfig . output . device = eventArgs . Node . Text == "(None)" ? "" : eventArgs . Node . Text ;
319
+ this . unCheckAllOthers ( eventArgs . Node ) ;
313
320
GenerateOutput ( ) ;
314
321
}
315
322
}
316
323
317
-
318
324
private void numericChannelsOutput_ValueChanged ( object sender , EventArgs e )
319
325
{
320
326
var o = sender as NumericUpDown ;
@@ -393,15 +399,7 @@ private void numericBufferSize_ValueChanged(object sender, EventArgs e)
393
399
GenerateOutput ( ) ;
394
400
}
395
401
396
- private void treeDevicesOutput_AfterCheck ( object sender , TreeViewEventArgs e )
397
- {
398
- }
399
-
400
- private void treeDevicesInput_AfterCheck ( object sender , TreeViewEventArgs e )
401
- {
402
-
403
- }
404
-
402
+
405
403
private void checkBoxSetInputLatency_CheckedChanged ( object sender , EventArgs e )
406
404
{
407
405
var o = sender as CheckBox ;
@@ -499,5 +497,31 @@ private void linkLabelDocs_LinkClicked(object sender, LinkLabelLinkClickedEventA
499
497
{
500
498
System . Diagnostics . Process . Start ( new ProcessStartInfo ( docUrl ) { UseShellExecute = true } ) ;
501
499
}
500
+
501
+ private void btLoadFrom_Click ( object sender , EventArgs e )
502
+ {
503
+ OpenFileDialog openFileDialog = new OpenFileDialog ( ) ;
504
+
505
+ openFileDialog . InitialDirectory = Environment . GetFolderPath ( Environment . SpecialFolder . UserProfile ) ;
506
+ openFileDialog . FileName = tomlName ;
507
+ openFileDialog . Filter = "FlexASIO Config (*.toml)|*.toml" ;
508
+ openFileDialog . CheckFileExists = true ;
509
+ var ret = openFileDialog . ShowDialog ( ) ;
510
+ if ( ret == DialogResult . OK )
511
+ {
512
+ try
513
+ {
514
+ this . LoadFlexASIOConfig ( openFileDialog . FileName ) ;
515
+ }
516
+ catch ( Exception )
517
+ {
518
+ SetStatusMessage ( $ "Error loading from { openFileDialog . FileName } ") ;
519
+ this . LoadFlexASIOConfig ( TOMLPath ) ;
520
+ return ;
521
+ }
522
+
523
+ }
524
+ SetStatusMessage ( $ "Configuration loaded from { openFileDialog . FileName } ") ;
525
+ }
502
526
}
503
527
}
0 commit comments