175 lines
4.4 KiB
C#
175 lines
4.4 KiB
C#
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 = Conduite.Courante.Midi.Maxpage;
|
|
if(Conduite.Courante.Midi.UnpaginatedChannels.Count==0)
|
|
spinUPCh.Value = 0;
|
|
else
|
|
spinUPCh.Value= Conduite.Courante.Midi.UnpaginatedChannels[0]+1;
|
|
|
|
}
|
|
|
|
void HandleDestroyed (object sender, EventArgs e)
|
|
{
|
|
if(timer!=0)
|
|
GLib.Source.Remove(timer);
|
|
}
|
|
|
|
bool Refresh ()
|
|
{
|
|
if (Conduite.Courante.Midi.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(!Conduite.Courante.Midi.IsKnownDevice(name))
|
|
lsDetect.AppendValues(name);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void FillLsKnown ()
|
|
{
|
|
lsKnown.Clear ();
|
|
foreach (var dev in Conduite.Courante.Midi.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;
|
|
Conduite.Courante.Midi.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 ;
|
|
Conduite.Courante.Midi.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;
|
|
|
|
Conduite.Courante.Midi.RefreshFeedback(dev.Name);
|
|
|
|
}
|
|
|
|
|
|
protected void OnSpinNbPageValueChanged (object sender, EventArgs e)
|
|
{
|
|
Conduite.Courante.Midi.Maxpage = (uint) spinNbPage.ValueAsInt;
|
|
}
|
|
|
|
protected void OnSpinUPChValueChanged (object sender, EventArgs e)
|
|
{
|
|
Conduite.Courante.Midi.UnpaginatedChannels.Clear();
|
|
if (spinUPCh.ValueAsInt == 0) return;
|
|
Conduite.Courante.Midi.UnpaginatedChannels.Add((byte)(spinUPCh.ValueAsInt-1));
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|