11using System ;
22using System . Collections . Generic ;
3- using System . ComponentModel ;
43using System . Data ;
5- using System . Drawing ;
64using System . Linq ;
75using System . Text ;
8- using System . Threading . Tasks ;
96using System . Windows . Forms ;
107using Commons . Media . PortAudio ;
118using System . Diagnostics ;
@@ -23,8 +20,8 @@ public partial class Form1 : Form
2320 private string TOMLPath ;
2421 private FlexGUIConfig flexGUIConfig ;
2522 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 " ;
2825 private string tomlName = "FlexASIO.toml" ;
2926 private string docUrl = "https://github.com/dechamps/FlexASIO/blob/master/CONFIGURATION.md" ;
3027
@@ -52,11 +49,20 @@ public Form1()
5249 CultureInfo . DefaultThreadCurrentUICulture = customCulture ;
5350
5451 TOMLPath = $ "{ Environment . GetFolderPath ( Environment . SpecialFolder . UserProfile ) } \\ { tomlName } ";
52+
53+ this . LoadFlexASIOConfig ( TOMLPath ) ;
5554
55+ InitDone = true ;
56+ SetStatusMessage ( $ "FlexASIO GUI for FlexASIO { flexasioVersion } started ({ Configuration . VersionString } )") ;
57+ GenerateOutput ( ) ;
58+ }
59+
60+ private FlexGUIConfig LoadFlexASIOConfig ( string tomlPath )
61+ {
5662 flexGUIConfig = new FlexGUIConfig ( ) ;
57- if ( File . Exists ( TOMLPath ) )
63+ if ( File . Exists ( tomlPath ) )
5864 {
59- flexGUIConfig = Toml . ReadFile < FlexGUIConfig > ( TOMLPath ) ;
65+ flexGUIConfig = Toml . ReadFile < FlexGUIConfig > ( tomlPath ) ;
6066 }
6167
6268 numericBufferSize . Maximum = 8192 ;
@@ -65,7 +71,7 @@ public Form1()
6571 numericLatencyInput . Increment = 0.1m ;
6672 numericLatencyOutput . Increment = 0.1m ;
6773
68- for ( var i = 0 ; i < Configuration . HostApiCount ; i ++ )
74+ for ( var i = 0 ; i < Configuration . HostApiCount ; i ++ )
6975 {
7076 comboBackend . Items . Add ( Configuration . GetHostApiInfo ( i ) . name ) ;
7177 }
@@ -82,7 +88,7 @@ public Form1()
8288 if ( flexGUIConfig . bufferSizeSamples != null )
8389 numericBufferSize . Value = ( Int64 ) flexGUIConfig . bufferSizeSamples ;
8490 checkBoxSetBufferSize . Checked = numericBufferSize . Enabled = flexGUIConfig . bufferSizeSamples != null ;
85-
91+
8692 treeDevicesInput . SelectedNode = treeDevicesInput . Nodes . Cast < TreeNode > ( ) . FirstOrDefault ( x => x . Text == ( flexGUIConfig . input . device == "" ? "(None)" : flexGUIConfig . input . device ) ) ;
8793 treeDevicesOutput . SelectedNode = treeDevicesOutput . Nodes . Cast < TreeNode > ( ) . FirstOrDefault ( x => x . Text == ( flexGUIConfig . output . device == "" ? "(None)" : flexGUIConfig . output . device ) ) ;
8894
@@ -109,10 +115,7 @@ public Form1()
109115 wasapiAutoConvertInput . Checked = flexGUIConfig . input . wasapiAutoConvert ?? false ;
110116 wasapiAutoConvertOutput . Enabled = flexGUIConfig . output . wasapiAutoConvert != null ;
111117 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 ;
116119 }
117120
118121 private string DescrambleUTF8 ( string s )
@@ -256,65 +259,68 @@ private void btSaveAs_Click(object sender, EventArgs e)
256259 SetStatusMessage ( $ "Configuration written to { saveFileDialog . FileName } ") ;
257260 }
258261
259- private void treeDevicesInput_BeforeSelect ( object sender , TreeViewCancelEventArgs e )
262+ private void treeDevicesInput_AfterSelect ( object sender , TreeViewEventArgs e )
260263 {
261- var o = sender as TreeView ;
262- if ( o . SelectedNode != null )
264+ if ( sender == null ) return ;
265+ else
263266 {
264- o . SelectedNode . Checked = false ;
267+ e . Node . Checked = true ;
268+ this . onTreeViewSelected ( eventArgs : e , forInput : true ) ;
265269 }
266270 }
267271
268- private void treeDevicesOutput_BeforeSelect ( object sender , TreeViewCancelEventArgs e )
272+ private void treeDevicesOutput_AfterSelect ( object sender , TreeViewEventArgs e )
269273 {
270- var o = sender as TreeView ;
271- if ( o . SelectedNode != null )
274+ if ( sender == null ) return ;
275+ else
272276 {
273- o . SelectedNode . Checked = false ;
277+ e . Node . Checked = true ;
278+ this . onTreeViewSelected ( eventArgs : e , forInput : false ) ;
274279 }
275280 }
276281
277- private void treeDevicesInput_BeforeCheck ( object sender , TreeViewCancelEventArgs e )
282+ private void treeDevicesOutput_AfterCheck ( object sender , TreeViewEventArgs e )
278283 {
279- if ( e . Node . IsSelected == false )
284+ if ( sender == null ) return ;
285+ else
280286 {
281- e . Cancel = true ;
287+ this . onTreeViewSelected ( eventArgs : e , forInput : false ) ;
282288 }
283289 }
284290
285- private void treeDevicesOutput_BeforeCheck ( object sender , TreeViewCancelEventArgs e )
291+ private void treeDevicesInput_AfterCheck ( object sender , TreeViewEventArgs e )
286292 {
287- if ( e . Node . IsSelected == false )
293+ if ( sender == null ) return ;
294+ else
288295 {
289- e . Cancel = true ;
296+ this . onTreeViewSelected ( eventArgs : e , forInput : true ) ;
290297 }
291298 }
292299
293- private void treeDevicesInput_AfterSelect ( object sender , TreeViewEventArgs e )
300+ private void unCheckAllOthers ( TreeNode treeNode )
294301 {
295- var o = sender as TreeView ;
296- if ( o == null ) return ;
297- if ( o . SelectedNode != null )
302+ foreach ( TreeNode node in treeNode . TreeView . Nodes )
298303 {
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+ }
302308 }
303309 }
304310
305- private void treeDevicesOutput_AfterSelect ( object sender , TreeViewEventArgs e )
311+ private void onTreeViewSelected ( TreeViewEventArgs eventArgs , bool forInput )
306312 {
307- var o = sender as TreeView ;
308- if ( o == null ) return ;
309- if ( o . SelectedNode != null )
313+ if ( eventArgs . Node . Checked == true )
310314 {
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 ) ;
313320 GenerateOutput ( ) ;
314321 }
315322 }
316323
317-
318324 private void numericChannelsOutput_ValueChanged ( object sender , EventArgs e )
319325 {
320326 var o = sender as NumericUpDown ;
@@ -393,15 +399,7 @@ private void numericBufferSize_ValueChanged(object sender, EventArgs e)
393399 GenerateOutput ( ) ;
394400 }
395401
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+
405403 private void checkBoxSetInputLatency_CheckedChanged ( object sender , EventArgs e )
406404 {
407405 var o = sender as CheckBox ;
@@ -499,5 +497,31 @@ private void linkLabelDocs_LinkClicked(object sender, LinkLabelLinkClickedEventA
499497 {
500498 System . Diagnostics . Process . Start ( new ProcessStartInfo ( docUrl ) { UseShellExecute = true } ) ;
501499 }
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+ }
502526 }
503527}
0 commit comments