From 94a463da331237781d243c1680154c33ca7c2313 Mon Sep 17 00:00:00 2001 From: tzim Date: Mon, 25 Nov 2013 16:12:27 +0000 Subject: [PATCH] ajout interface gestion drivers --- DMX-2.0/Conduite.cs | 7 + DMX-2.0/DMX-2.0.csproj | 5 +- DMX-2.0/DriverBoitierV1.cs | 31 +-- DMX-2.0/DriverBoitierV1UI.cs | 16 ++ DMX-2.0/DriverDMX.cs | 19 +- DMX-2.0/GestionDriversUI.cs | 163 +++++++++++++ DMX-2.0/IDriverDMX.cs | 12 - DMX-2.0/MainWindow.cs | 18 +- DMX-2.0/gtk-gui/DMX2.DriverBoitierV1UI.cs | 88 +++++++ DMX-2.0/gtk-gui/DMX2.GestionDriversUI.cs | 135 +++++++++++ DMX-2.0/gtk-gui/gui.stetic | 272 ++++++++++++++++++++++ 11 files changed, 734 insertions(+), 32 deletions(-) create mode 100644 DMX-2.0/DriverBoitierV1UI.cs create mode 100644 DMX-2.0/GestionDriversUI.cs delete mode 100644 DMX-2.0/IDriverDMX.cs create mode 100644 DMX-2.0/gtk-gui/DMX2.DriverBoitierV1UI.cs create mode 100644 DMX-2.0/gtk-gui/DMX2.GestionDriversUI.cs diff --git a/DMX-2.0/Conduite.cs b/DMX-2.0/Conduite.cs index 9dc22a3..b73abd8 100644 --- a/DMX-2.0/Conduite.cs +++ b/DMX-2.0/Conduite.cs @@ -143,6 +143,13 @@ namespace DMX2 } } + public DriverDMX GetDriverByID(string ID){ + foreach (var driver in drivers) + if(ID== driver.ID) + return driver; + return null; + } + public ReadOnlyCollection Sequenceurs { get { return sequenceurs.AsReadOnly(); diff --git a/DMX-2.0/DMX-2.0.csproj b/DMX-2.0/DMX-2.0.csproj index 574cf32..ead22f0 100644 --- a/DMX-2.0/DMX-2.0.csproj +++ b/DMX-2.0/DMX-2.0.csproj @@ -84,7 +84,6 @@ - @@ -106,6 +105,10 @@ + + + + diff --git a/DMX-2.0/DriverBoitierV1.cs b/DMX-2.0/DriverBoitierV1.cs index 3be81de..7c1a739 100644 --- a/DMX-2.0/DriverBoitierV1.cs +++ b/DMX-2.0/DriverBoitierV1.cs @@ -32,10 +32,11 @@ namespace DMX2 string portname = "/dev/ttyUSB0"; SerialPort serial = null; - public DriverBoitierV1 () + public DriverBoitierV1 (string serialport, string id): base(id) { - patch = Conduite.Courante.Patches[0]; - Start(); + //patch = Conduite.Courante.Patches[0]; + //Start(); + //serial = serialport; outputbuffer[0]=27; outputbuffer[1]=68; outputbuffer[4]=255; @@ -143,25 +144,27 @@ namespace DMX2 } } - #region implemented abstract members of DMX2.DriverDMX - public override Gtk.Window GetDialog () - { - return null; - } - #endregion - public override void Dispose () { disposed = true; running = false; - loopthread.Join(); - loopthread=null; - + if (loopthread != null) { + loopthread.Join (); + loopthread = null; + } //TODO : Close Port if(serial != null) serial.Close(); - } + } + #region implemented abstract members of DMX2.DriverDMX + public override Gtk.Widget GetUI () + { + return new DriverBoitierV1UI(this); + } + #endregion + + #region IEventProvider implementation diff --git a/DMX-2.0/DriverBoitierV1UI.cs b/DMX-2.0/DriverBoitierV1UI.cs new file mode 100644 index 0000000..72ba9cb --- /dev/null +++ b/DMX-2.0/DriverBoitierV1UI.cs @@ -0,0 +1,16 @@ +using System; + +namespace DMX2 +{ + [System.ComponentModel.ToolboxItem(true)] + public partial class DriverBoitierV1UI : Gtk.Bin + { + DriverBoitierV1 drv; + public DriverBoitierV1UI (DriverBoitierV1 _drv) + { + drv = _drv; + this.Build (); + } + } +} + diff --git a/DMX-2.0/DriverDMX.cs b/DMX-2.0/DriverDMX.cs index dd5cde2..737ec57 100644 --- a/DMX-2.0/DriverDMX.cs +++ b/DMX-2.0/DriverDMX.cs @@ -5,13 +5,24 @@ namespace DMX2 { public abstract class DriverDMX: IDisposable { + string id; - public DriverDMX () - { - + public string ID { + get { + return id; + } + set { + id = value; + } } - public abstract Gtk.Window GetDialog(); + public DriverDMX (string _id) + { + id=_id; + } + + public abstract Gtk.Widget GetUI(); + protected bool disposed = false; diff --git a/DMX-2.0/GestionDriversUI.cs b/DMX-2.0/GestionDriversUI.cs new file mode 100644 index 0000000..eec1dbe --- /dev/null +++ b/DMX-2.0/GestionDriversUI.cs @@ -0,0 +1,163 @@ +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","0"); + lsDriver.AppendValues("V2 512/512/16/16","1"); + lsDriver.AppendValues("V2 1024/512/16/16","2"); + + 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.Substring(0,35); + } + + 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; + + DriverDMX drv = Conduite.Courante.GetDriverByID (fi.Name); + if (drv == null) { + btnConnect.Visible = btnConnect.Sensitive = true; + btnDisconnect.Visible = btnDisconnect.Sensitive = false; + + comboDriver.Sensitive = true; + comboDriver.Active=-1; + return; + } + + AfficheDriverUI(drv); + + } + 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; + + DriverDMX drv=null; + + switch (comboDriver.Active) { + case 0: + drv = new DriverBoitierV1(fi.FullName, fi.Name); + Conduite.Courante.Drivers.Add(drv); + break; + default: + return; + } + + AfficheDriverUI(drv); + + } + + void AfficheDriverUI(DriverDMX drv){ + btnConnect.Visible = false; + comboDriver.Sensitive = false; + + btnDisconnect.Visible = btnDisconnect.Sensitive = true; + + frmDrvChild.Child = drv.GetUI(); + frmDrvChild.ShowAll(); + + } + } +} + diff --git a/DMX-2.0/IDriverDMX.cs b/DMX-2.0/IDriverDMX.cs deleted file mode 100644 index 11e590e..0000000 --- a/DMX-2.0/IDriverDMX.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System; -using System.Collections.Generic; -namespace DMX2 -{ - public interface IDriverDMX - { - void Start(); - void Stop(); - int NbUniversMax { get;} - ICollection UniversAssocies{get;} - } -} diff --git a/DMX-2.0/MainWindow.cs b/DMX-2.0/MainWindow.cs index 8dcbe03..9d0f0f0 100644 --- a/DMX-2.0/MainWindow.cs +++ b/DMX-2.0/MainWindow.cs @@ -552,6 +552,7 @@ namespace DMX2 showAllAction.Sensitive = universAction.Sensitive = masterScale.Sensitive = seqLinAction.Sensitive = seqMacroAction.Sensitive = circAction.Sensitive = saveAction.Sensitive = btnPause.Sensitive = btnBlackOut.Sensitive = + connectAction.Sensitive = saveAsAction.Sensitive = closeAction.Sensitive = true; openAction.Sensitive = newAction.Sensitive = false; this.Title = "DMX 2.0 - " + Conduite.Courante.Name; @@ -561,6 +562,7 @@ namespace DMX2 showAllAction.Sensitive = universAction.Sensitive = masterScale.Sensitive = seqLinAction.Sensitive = seqMacroAction.Sensitive = circAction.Sensitive = saveAction.Sensitive = btnPause.Sensitive = btnBlackOut.Sensitive = + connectAction.Sensitive = saveAsAction.Sensitive = closeAction.Sensitive = false; openAction.Sensitive = newAction.Sensitive = true; this.Title = "DMX 2.0"; @@ -651,11 +653,25 @@ namespace DMX2 #endregion + GestionDriversUI dDlg = null; protected void OnConnectActionActivated (object sender, EventArgs e) { + if (dDlg != null) { + dDlg.Show(); + return; + } - Conduite.Courante.Drivers.Add( new DriverBoitierV1()); + dDlg = new GestionDriversUI(); + dDlg.ShowAll(); + dDlg.Destroyed += dDlgDestroyed; + //Conduite.Courante.Drivers.Add( new DriverBoitierV1()); + + } + + void dDlgDestroyed (object sender, EventArgs e) + { + dDlg= null; } protected void OnBtnPauseToggled (object sender, EventArgs e) diff --git a/DMX-2.0/gtk-gui/DMX2.DriverBoitierV1UI.cs b/DMX-2.0/gtk-gui/DMX2.DriverBoitierV1UI.cs new file mode 100644 index 0000000..e708cfe --- /dev/null +++ b/DMX-2.0/gtk-gui/DMX2.DriverBoitierV1UI.cs @@ -0,0 +1,88 @@ + +// This file has been generated by the GUI designer. Do not modify. +namespace DMX2 +{ + public partial class DriverBoitierV1UI + { + private global::Gtk.VBox vbox2; + private global::Gtk.Label label1; + private global::Gtk.Table table1; + private global::Gtk.ComboBox combobox1; + private global::Gtk.Label label4; + private global::Gtk.Label label5; + private global::Gtk.Label lblEtat; + + protected virtual void Build () + { + global::Stetic.Gui.Initialize (this); + // Widget DMX2.DriverBoitierV1UI + global::Stetic.BinContainer.Attach (this); + this.Name = "DMX2.DriverBoitierV1UI"; + // Container child DMX2.DriverBoitierV1UI.Gtk.Container+ContainerChild + this.vbox2 = new global::Gtk.VBox (); + this.vbox2.Name = "vbox2"; + this.vbox2.Spacing = 6; + // Container child vbox2.Gtk.Box+BoxChild + this.label1 = new global::Gtk.Label (); + this.label1.Name = "label1"; + this.label1.LabelProp = "Driver Boitier V1"; + this.vbox2.Add (this.label1); + global::Gtk.Box.BoxChild w1 = ((global::Gtk.Box.BoxChild)(this.vbox2 [this.label1])); + w1.Position = 0; + w1.Expand = false; + w1.Fill = false; + // Container child vbox2.Gtk.Box+BoxChild + this.table1 = new global::Gtk.Table (((uint)(3)), ((uint)(2)), false); + this.table1.Name = "table1"; + this.table1.RowSpacing = ((uint)(6)); + this.table1.ColumnSpacing = ((uint)(6)); + // Container child table1.Gtk.Table+TableChild + this.combobox1 = global::Gtk.ComboBox.NewText (); + this.combobox1.Name = "combobox1"; + this.table1.Add (this.combobox1); + global::Gtk.Table.TableChild w2 = ((global::Gtk.Table.TableChild)(this.table1 [this.combobox1])); + w2.TopAttach = ((uint)(1)); + w2.BottomAttach = ((uint)(2)); + w2.LeftAttach = ((uint)(1)); + w2.RightAttach = ((uint)(2)); + w2.XOptions = ((global::Gtk.AttachOptions)(4)); + w2.YOptions = ((global::Gtk.AttachOptions)(4)); + // Container child table1.Gtk.Table+TableChild + this.label4 = new global::Gtk.Label (); + this.label4.Name = "label4"; + this.label4.LabelProp = "Univers DMX :"; + this.table1.Add (this.label4); + global::Gtk.Table.TableChild w3 = ((global::Gtk.Table.TableChild)(this.table1 [this.label4])); + w3.TopAttach = ((uint)(1)); + w3.BottomAttach = ((uint)(2)); + w3.XOptions = ((global::Gtk.AttachOptions)(4)); + w3.YOptions = ((global::Gtk.AttachOptions)(4)); + // Container child table1.Gtk.Table+TableChild + this.label5 = new global::Gtk.Label (); + this.label5.Name = "label5"; + this.label5.LabelProp = "Etat :"; + this.table1.Add (this.label5); + global::Gtk.Table.TableChild w4 = ((global::Gtk.Table.TableChild)(this.table1 [this.label5])); + w4.XOptions = ((global::Gtk.AttachOptions)(4)); + w4.YOptions = ((global::Gtk.AttachOptions)(4)); + // Container child table1.Gtk.Table+TableChild + this.lblEtat = new global::Gtk.Label (); + this.lblEtat.Name = "lblEtat"; + this.lblEtat.LabelProp = "label6"; + this.table1.Add (this.lblEtat); + global::Gtk.Table.TableChild w5 = ((global::Gtk.Table.TableChild)(this.table1 [this.lblEtat])); + w5.LeftAttach = ((uint)(1)); + w5.RightAttach = ((uint)(2)); + w5.XOptions = ((global::Gtk.AttachOptions)(4)); + w5.YOptions = ((global::Gtk.AttachOptions)(4)); + this.vbox2.Add (this.table1); + global::Gtk.Box.BoxChild w6 = ((global::Gtk.Box.BoxChild)(this.vbox2 [this.table1])); + w6.Position = 1; + this.Add (this.vbox2); + if ((this.Child != null)) { + this.Child.ShowAll (); + } + this.Hide (); + } + } +} diff --git a/DMX-2.0/gtk-gui/DMX2.GestionDriversUI.cs b/DMX-2.0/gtk-gui/DMX2.GestionDriversUI.cs new file mode 100644 index 0000000..2a15bba --- /dev/null +++ b/DMX-2.0/gtk-gui/DMX2.GestionDriversUI.cs @@ -0,0 +1,135 @@ + +// This file has been generated by the GUI designer. Do not modify. +namespace DMX2 +{ + public partial class GestionDriversUI + { + private global::Gtk.VBox vbox2; + private global::Gtk.TreeView listeUsb; + private global::Gtk.HBox hbox1; + private global::Gtk.ComboBox comboDriver; + private global::Gtk.Button btnDisconnect; + private global::Gtk.Button btnConnect; + private global::Gtk.Frame frmDrvUI; + private global::Gtk.Alignment frmDrvChild; + private global::Gtk.Label GtkLabel2; + private global::Gtk.Button buttonOk; + + protected virtual void Build () + { + global::Stetic.Gui.Initialize (this); + // Widget DMX2.GestionDriversUI + this.Name = "DMX2.GestionDriversUI"; + this.WindowPosition = ((global::Gtk.WindowPosition)(4)); + // Internal child DMX2.GestionDriversUI.VBox + global::Gtk.VBox w1 = this.VBox; + w1.Name = "dialog1_VBox"; + w1.BorderWidth = ((uint)(2)); + // Container child dialog1_VBox.Gtk.Box+BoxChild + this.vbox2 = new global::Gtk.VBox (); + this.vbox2.Name = "vbox2"; + this.vbox2.Spacing = 6; + // Container child vbox2.Gtk.Box+BoxChild + this.listeUsb = new global::Gtk.TreeView (); + this.listeUsb.HeightRequest = 87; + this.listeUsb.CanFocus = true; + this.listeUsb.Name = "listeUsb"; + this.vbox2.Add (this.listeUsb); + global::Gtk.Box.BoxChild w2 = ((global::Gtk.Box.BoxChild)(this.vbox2 [this.listeUsb])); + w2.Position = 0; + w2.Expand = false; + // Container child vbox2.Gtk.Box+BoxChild + this.hbox1 = new global::Gtk.HBox (); + this.hbox1.Name = "hbox1"; + this.hbox1.Spacing = 6; + // Container child hbox1.Gtk.Box+BoxChild + this.comboDriver = global::Gtk.ComboBox.NewText (); + this.comboDriver.Sensitive = false; + this.comboDriver.Name = "comboDriver"; + this.hbox1.Add (this.comboDriver); + global::Gtk.Box.BoxChild w3 = ((global::Gtk.Box.BoxChild)(this.hbox1 [this.comboDriver])); + w3.Position = 0; + // Container child hbox1.Gtk.Box+BoxChild + this.btnDisconnect = new global::Gtk.Button (); + this.btnDisconnect.Sensitive = false; + this.btnDisconnect.CanFocus = true; + this.btnDisconnect.Name = "btnDisconnect"; + this.btnDisconnect.UseStock = true; + this.btnDisconnect.UseUnderline = true; + this.btnDisconnect.Label = "gtk-disconnect"; + this.hbox1.Add (this.btnDisconnect); + global::Gtk.Box.BoxChild w4 = ((global::Gtk.Box.BoxChild)(this.hbox1 [this.btnDisconnect])); + w4.PackType = ((global::Gtk.PackType)(1)); + w4.Position = 1; + w4.Expand = false; + w4.Fill = false; + // Container child hbox1.Gtk.Box+BoxChild + this.btnConnect = new global::Gtk.Button (); + this.btnConnect.Sensitive = false; + this.btnConnect.CanFocus = true; + this.btnConnect.Name = "btnConnect"; + this.btnConnect.UseStock = true; + this.btnConnect.UseUnderline = true; + this.btnConnect.Label = "gtk-connect"; + this.hbox1.Add (this.btnConnect); + global::Gtk.Box.BoxChild w5 = ((global::Gtk.Box.BoxChild)(this.hbox1 [this.btnConnect])); + w5.PackType = ((global::Gtk.PackType)(1)); + w5.Position = 2; + w5.Expand = false; + w5.Fill = false; + this.vbox2.Add (this.hbox1); + global::Gtk.Box.BoxChild w6 = ((global::Gtk.Box.BoxChild)(this.vbox2 [this.hbox1])); + w6.Position = 1; + w6.Expand = false; + w6.Fill = false; + // Container child vbox2.Gtk.Box+BoxChild + this.frmDrvUI = new global::Gtk.Frame (); + this.frmDrvUI.HeightRequest = 200; + this.frmDrvUI.Name = "frmDrvUI"; + this.frmDrvUI.ShadowType = ((global::Gtk.ShadowType)(1)); + // Container child frmDrvUI.Gtk.Container+ContainerChild + this.frmDrvChild = new global::Gtk.Alignment (0F, 0F, 1F, 1F); + this.frmDrvChild.Name = "frmDrvChild"; + this.frmDrvChild.LeftPadding = ((uint)(12)); + this.frmDrvUI.Add (this.frmDrvChild); + this.GtkLabel2 = new global::Gtk.Label (); + this.GtkLabel2.Name = "GtkLabel2"; + this.GtkLabel2.UseMarkup = true; + this.frmDrvUI.LabelWidget = this.GtkLabel2; + this.vbox2.Add (this.frmDrvUI); + global::Gtk.Box.BoxChild w8 = ((global::Gtk.Box.BoxChild)(this.vbox2 [this.frmDrvUI])); + w8.Position = 2; + w1.Add (this.vbox2); + global::Gtk.Box.BoxChild w9 = ((global::Gtk.Box.BoxChild)(w1 [this.vbox2])); + w9.Position = 0; + // Internal child DMX2.GestionDriversUI.ActionArea + global::Gtk.HButtonBox w10 = this.ActionArea; + w10.Name = "dialog1_ActionArea"; + w10.Spacing = 10; + w10.BorderWidth = ((uint)(5)); + w10.LayoutStyle = ((global::Gtk.ButtonBoxStyle)(4)); + // Container child dialog1_ActionArea.Gtk.ButtonBox+ButtonBoxChild + this.buttonOk = new global::Gtk.Button (); + this.buttonOk.CanDefault = true; + this.buttonOk.CanFocus = true; + this.buttonOk.Name = "buttonOk"; + this.buttonOk.UseStock = true; + this.buttonOk.UseUnderline = true; + this.buttonOk.Label = "gtk-close"; + this.AddActionWidget (this.buttonOk, -7); + global::Gtk.ButtonBox.ButtonBoxChild w11 = ((global::Gtk.ButtonBox.ButtonBoxChild)(w10 [this.buttonOk])); + w11.Expand = false; + w11.Fill = false; + if ((this.Child != null)) { + this.Child.ShowAll (); + } + this.DefaultWidth = 488; + this.DefaultHeight = 405; + this.Show (); + this.listeUsb.CursorChanged += new global::System.EventHandler (this.OnListeUsbCursorChanged); + this.btnConnect.Clicked += new global::System.EventHandler (this.OnBtnConnectClicked); + this.btnDisconnect.Clicked += new global::System.EventHandler (this.OnBtnConnectClicked); + this.buttonOk.Clicked += new global::System.EventHandler (this.OnButtonOkClicked); + } + } +} diff --git a/DMX-2.0/gtk-gui/gui.stetic b/DMX-2.0/gtk-gui/gui.stetic index 9822b55..677a300 100644 --- a/DMX-2.0/gtk-gui/gui.stetic +++ b/DMX-2.0/gtk-gui/gui.stetic @@ -1861,4 +1861,276 @@ au sequenceur + + + CenterOnParent + 1 + False + + + + 2 + + + + 6 + + + + 87 + True + + + + 0 + False + False + + + + + + 6 + + + + False + True + + + + 0 + False + + + + + + False + True + True + StockItem + gtk-disconnect + + gtk-disconnect + + + End + 1 + True + False + False + + + + + + False + True + True + StockItem + gtk-connect + + gtk-connect + + + End + 2 + True + False + False + + + + + 1 + False + False + False + + + + + + 200 + In + + + + 0 + 0 + 12 + + + + + + + + + True + + + label_item + + + + + 2 + False + + + + + 0 + True + + + + + + + + 10 + 5 + 1 + End + + + + True + True + True + StockItem + gtk-close + -7 + + gtk-close + + + False + False + + + + + + + + False + + + + 6 + + + + Driver Boitier V1 + + + 0 + True + False + False + + + + + + 3 + 2 + 6 + 6 + + + + + + + + + + True + + + + 1 + 2 + 1 + 2 + True + Fill + Fill + False + True + False + False + True + False + + + + + + Univers DMX : + + + 1 + 2 + True + Fill + Fill + False + True + False + False + True + False + + + + + + Etat : + + + True + Fill + Fill + False + True + False + False + True + False + + + + + + label6 + + + 1 + 2 + True + Fill + Fill + False + True + False + False + True + False + + + + + 1 + True + + + + + \ No newline at end of file