using System; using Gtk; namespace DMX2 { public partial class GestionMidiUI : Gtk.Dialog { Gtk.ListStore lsDetect; Gtk.ListStore lsKnown; uint timer=0; public GestionMidiUI () { this.Build (); lsDetect = new Gtk.ListStore(typeof(string)); lsKnown = new Gtk.ListStore(typeof(MidiEventProvider.MidiDev)); var nameCol = new Gtk.TreeViewColumn(); var nameCell = new Gtk.CellRendererText(); nameCol.Title = "Interfaces"; nameCol.PackStart(nameCell,true); nameCol.AddAttribute(nameCell,"text",0); this.listDetect.AppendColumn(nameCol); var mdCol = new Gtk.TreeViewColumn(); var mdCell = new Gtk.CellRendererText(); mdCol.Title = "Interfaces"; mdCol.PackStart(mdCell,true); mdCol.SetCellDataFunc(mdCell, new Gtk.TreeCellDataFunc( RenderMidiDev) ); this.listKnown.AppendColumn(mdCol); listDetect.Model = lsDetect; listKnown.Model = lsKnown; FillLsDetect(); FillLsKnown(); timer = GLib.Timeout.Add(500,Refresh); Destroyed+= HandleDestroyed; spinNbPage.Value = MidiEventProvider.Maxpage; chkNoChanZero.Active = MidiEventProvider.UnpaginatedChannels.Contains(0); } void HandleDestroyed (object sender, EventArgs e) { if(timer!=0) GLib.Source.Remove(timer); } bool Refresh () { if (MidiEventProvider.GuiRefreshFlag) { FillLsDetect(); FillLsKnown(); } return true; } void RenderMidiDev (Gtk.TreeViewColumn tree_column, Gtk.CellRenderer cell, Gtk.TreeModel tree_model, Gtk.TreeIter iter) { MidiEventProvider.MidiDev dev = tree_model.GetValue (iter, 0) as MidiEventProvider.MidiDev; (cell as Gtk.CellRendererText).Text = dev.ConnectedPorts.Count>0 ?string.Format("{0} ({1} connectés)",dev.Name,dev.ConnectedPorts.Count) :string.Format("{0} (Déconnecté)",dev.Name); } void FillLsDetect () { lsDetect.Clear (); foreach (var dev in AlsaSeqLib.EnumClients ()) { if(dev.Id== AlsaSeqLib.ClientId || dev.Id == 0 || dev.Id == 14 ) continue; foreach(var port in dev.Ports){ if((port.Caps & AlsaSeqLib.SND_SEQ_PORT_CAP_READ) == AlsaSeqLib.SND_SEQ_PORT_CAP_READ){ string name = dev.Name+":"+port.Name; if(!MidiEventProvider.IsKnownDevice(name)) lsDetect.AppendValues(name); } } } } void FillLsKnown () { lsKnown.Clear (); foreach (var dev in MidiEventProvider.KnownDevices) { lsKnown.AppendValues(dev); } } protected void OnButtonCloseClicked (object sender, EventArgs e) { Destroy(); } protected void OnListDetectCursorChanged (object sender, EventArgs e) { btnActiv.Sensitive = (listDetect.Selection.CountSelectedRows() >0); } protected void OnListKnownCursorChanged (object sender, EventArgs e) { chkFB.Sensitive = btnDesactiv.Sensitive = (listKnown.Selection.CountSelectedRows() >0); TreeIter iter; if(!listKnown.Selection.GetSelected(out iter)) return; MidiEventProvider.MidiDev dev = lsKnown.GetValue(iter,0) as MidiEventProvider.MidiDev ; chkFB.Active = dev.HasFeedback; } protected void OnBtnActivClicked (object sender, EventArgs e) { TreeIter iter; if(!listDetect.Selection.GetSelected(out iter)) return; string name= lsDetect.GetValue(iter,0) as string; MidiEventProvider.ConnectDevice(name); FillLsDetect () ; FillLsKnown(); } protected void OnBtnDesactivClicked (object sender, EventArgs e) { TreeIter iter; if(!listKnown.Selection.GetSelected(out iter)) return; MidiEventProvider.MidiDev dev = lsKnown.GetValue(iter,0) as MidiEventProvider.MidiDev ; MidiEventProvider.DisconnectDevice(dev); FillLsDetect () ; FillLsKnown(); } protected void OnChkFBToggled (object sender, EventArgs e) { TreeIter iter; if(!listKnown.Selection.GetSelected(out iter)) return; MidiEventProvider.MidiDev dev = lsKnown.GetValue(iter,0) as MidiEventProvider.MidiDev ; dev.HasFeedback = chkFB.Active; MidiEventProvider.RefreshFeedback(dev.Name); } protected void OnChkNoChanZeroToggled (object sender, EventArgs e) { MidiEventProvider.UnpaginatedChannels.Clear(); if(chkNoChanZero.Active) MidiEventProvider.UnpaginatedChannels.Add(0); } protected void OnSpinNbPageValueChanged (object sender, EventArgs e) { MidiEventProvider.Maxpage = (uint) spinNbPage.ValueAsInt; } } }