loupiottes/DMX-2.0/GestionDriversUI.cs
2014-05-04 17:57:34 +00:00

221 lines
5.4 KiB
C#

/*
Copyright (C) Arnaud Houdelette 2012-2014
Copyright (C) Emmanuel Langlois 2012-2014
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
using System;
using System.IO;
using Gtk;
using System.Collections.Generic;
namespace DMX2
{
public partial class GestionDriversUI : Gtk.Dialog
{
ListStore ls = new ListStore(typeof(FileInfo));
ListStore lsDriver = new ListStore(typeof(String));
public GestionDriversUI ()
{
this.Build ();
lsDriver = new Gtk.ListStore(typeof (String));
lsDriver.AppendValues("V1 256/0/0/8");
lsDriver.AppendValues("V2 1024/512/16/16");
lsDriver.AppendValues("V3 512/512");
comboDriver.Model = lsDriver;
var idUsbCol = new Gtk.TreeViewColumn();
var idUsbCell = new Gtk.CellRendererText();
idUsbCol.Title = "Id. USB";
idUsbCol.PackStart(idUsbCell,true);
idUsbCol.SetCellDataFunc(idUsbCell, new Gtk.TreeCellDataFunc( RenderIDUsb) );
this.listeUsb.AppendColumn(idUsbCol);
var connStCol = new Gtk.TreeViewColumn();
var connStCell = new Gtk.CellRendererText();
connStCol.Title = "Etat";
connStCol.PackStart(connStCell,true);
connStCol.SetCellDataFunc(connStCell, new Gtk.TreeCellDataFunc( RenderSt) );
this.listeUsb.AppendColumn(connStCol);
connStCol.Alignment = 1;
/*
var nameDriverCol = new Gtk.TreeViewColumn();
var nameDriverCell = new Gtk.CellRendererCombo();
nameDriverCol.Title = "Etat";
nameDriverCol.PackStart(nameDriverCell,false);
nameDriverCol.AddAttribute (nameDriverCell, "text", 0);
nameDriverCell.Editable =true;
nameDriverCell.HasEntry=false;
nameDriverCell.Model = lsDriver;
nameDriverCell.TextColumn = 0;
this.listeUsb.AppendColumn(nameDriverCol);*/
ls = new Gtk.ListStore(typeof (FileInfo));
this.listeUsb.Model = ls;
UpdateListeUsb();
}
void RenderIDUsb (Gtk.TreeViewColumn tree_column, Gtk.CellRenderer cell, Gtk.TreeModel tree_model, Gtk.TreeIter iter)
{
FileInfo fi = tree_model.GetValue (iter, 0) as FileInfo;
(cell as Gtk.CellRendererText).Text = fi.Name.Length>35?fi.Name.Substring(0,35):fi.Name;
}
void RenderSt (TreeViewColumn tree_column, CellRenderer cell, TreeModel tree_model, TreeIter iter)
{
FileInfo fi = tree_model.GetValue (iter, 0) as FileInfo;
DriverDMX drv = Conduite.Courante.GetDriverByID (fi.Name);
if (drv == null) {
(cell as Gtk.CellRendererText).Text = "Déconnecté";
return;
}
(cell as Gtk.CellRendererText).Text = drv.GetType().ToString();
}
protected void UpdateListeUsb ()
{
ls.Clear();
var dirInfo = new DirectoryInfo ("/dev/serial/by-id/");
if (dirInfo.Exists) {
foreach(FileInfo fi in dirInfo.GetFiles())
ls.AppendValues(fi);
}
}
protected void OnButtonOkClicked (object sender, EventArgs e)
{
Destroy();
}
protected void OnListeUsbCursorChanged (object sender, EventArgs e)
{
TreeViewColumn col;
TreePath path;
TreeIter iter;
listeUsb.GetCursor (out path, out col);
if (!listeUsb.Model.GetIter (out iter, path))
return;
FileInfo fi = listeUsb.Model.GetValue (iter, 0) as FileInfo;
if (fi == null)
return;
drv = Conduite.Courante.GetDriverByID (fi.Name);
AfficheDriverUI();
}
DriverDMX drv=null;
protected void OnBtnConnectClicked (object sender, EventArgs e)
{
// Instancie
TreeViewColumn col;
TreePath path;
TreeIter iter;
listeUsb.GetCursor (out path, out col);
if (!listeUsb.Model.GetIter (out iter, path))
return;
FileInfo fi = listeUsb.Model.GetValue (iter, 0) as FileInfo;
if (fi == null)
return;
drv=null;
switch (comboDriver.Active) {
case 0:
drv = new DriverBoitierV1(fi.FullName, fi.Name);
Conduite.Courante.DriversAdd(drv);
break;
case 1:
drv = new DriverBoitierV2(fi.FullName, fi.Name);
Conduite.Courante.DriversAdd(drv);
break;
case 2:
drv = new DriverBoitierV3(fi.FullName, fi.Name);
Conduite.Courante.DriversAdd(drv);
break;
default:
return;
}
AfficheDriverUI();
}
protected void OnBtnDisConnectClicked (object sender, EventArgs e)
{
if (drv != null) {
drv.Dispose ();
Conduite.Courante.DriversRemove (drv);
}
drv=null;
AfficheDriverUI();
}
void AfficheDriverUI(){
if(frmDrvChild.Child!=null)
frmDrvChild.Remove(frmDrvChild.Child);
if (drv == null) {
btnConnect.Visible = btnConnect.Sensitive = true;
btnDisconnect.Visible = btnDisconnect.Sensitive = false;
comboDriver.Sensitive = true;
comboDriver.Active=-1;
listeUsb.QueueDraw();
return;
}
btnConnect.Visible = false;
comboDriver.Sensitive = false;
btnDisconnect.Visible = btnDisconnect.Sensitive = true;
frmDrvChild.Child = drv.GetUI();
frmDrvChild.ShowAll();
listeUsb.QueueDraw();
}
void EffaceDriverUI(){
btnConnect.Visible = true;
comboDriver.Sensitive = true;
btnDisconnect.Visible = btnDisconnect.Sensitive = false;
}
}
}