/* 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 . */ 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"); 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; 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; } } }