214 lines
No EOL
5.1 KiB
C#
214 lines
No EOL
5.1 KiB
C#
using System;
|
|
using Gtk;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
|
|
|
|
namespace DMX2
|
|
{
|
|
public partial class MainWindow: Gtk.Window
|
|
{
|
|
static MainWindow win;
|
|
static object circuitKey = new object();
|
|
|
|
public static MainWindow Win {
|
|
get { return win; }
|
|
}
|
|
|
|
public MainWindow (): base (Gtk.WindowType.Toplevel)
|
|
{
|
|
win=this;
|
|
Build ();
|
|
MajWidgets();
|
|
}
|
|
|
|
protected void MajWidgets ()
|
|
{
|
|
if (Conduite.Courante != null) {
|
|
//Activation / Désactivation des boutons en fonction de l'état de la counduite courante
|
|
showAllAction.Sensitive = universAction.Sensitive = masterScale.Sensitive = seqLinAction.Sensitive = circAction.Sensitive = saveAction.Sensitive = saveAsAction.Sensitive = closeAction.Sensitive = true;
|
|
openAction.Sensitive = newAction.Sensitive = false;
|
|
this.Title = "DMX 2.0 - " + Conduite.Courante.Name;
|
|
} else {
|
|
showAllAction.Sensitive = universAction.Sensitive = masterScale.Sensitive = seqLinAction.Sensitive = circAction.Sensitive = saveAction.Sensitive = saveAsAction.Sensitive = closeAction.Sensitive = false;
|
|
openAction.Sensitive = newAction.Sensitive = true;
|
|
this.Title = "DMX 2.0";
|
|
}
|
|
}
|
|
|
|
|
|
protected void MajCircuits (bool full)
|
|
{
|
|
// Ajoute une ProgressBar par circuit, met a jour le texte si necessaire
|
|
ProgressBar pb;int i = 0;
|
|
if (full) {
|
|
foreach (var widget in vboxCircuits.Children)
|
|
vboxCircuits.Remove (widget);
|
|
foreach (var circuit in Conduite.Courante.Circuits) {
|
|
vboxCircuits.PackStart (pb=new ProgressBar (),false,false,0);
|
|
pb.Text = (++i).ToString() + " - " + circuit.Name;
|
|
pb.HeightRequest = 22;
|
|
pb.Data[circuitKey] = circuit;
|
|
}
|
|
vboxCircuits.ShowAll ();
|
|
}
|
|
|
|
foreach (var widget in vboxCircuits.Children) {
|
|
pb = (ProgressBar)widget;
|
|
pb.Fraction = (double) (pb.Data[circuitKey] as Circuit).ValeurCourante / 255;
|
|
}
|
|
}
|
|
|
|
protected void OnDeleteEvent (object sender, DeleteEventArgs a)
|
|
{
|
|
Application.Quit ();
|
|
a.RetVal = true;
|
|
}
|
|
protected void OnQuitActionActivated (object sender, EventArgs e)
|
|
{
|
|
Application.Quit ();
|
|
}
|
|
|
|
protected void OnCircuitsActionActivated (object sender, EventArgs e)
|
|
{
|
|
GestionCircuits gc= new GestionCircuits(this);
|
|
gc.Run();
|
|
gc.Destroy();
|
|
NextUpdateFull();
|
|
}
|
|
|
|
protected void OnNewActionActivated (object sender, EventArgs e)
|
|
{
|
|
var dlg = new Dialog ("Nom ?", this, DialogFlags.Modal); var entry = new Entry ("Conduite sans Nom");
|
|
dlg.AddButton (Stock.Ok, ResponseType.Ok).GrabDefault(); dlg.AddButton (Stock.Cancel, ResponseType.Cancel);
|
|
dlg.VBox.Add (new Label("Nom de la nouvelle Conduite :")); dlg.VBox.Add (entry); dlg.VBox.ShowAll ();
|
|
entry.ActivatesDefault=true;
|
|
|
|
if ((ResponseType)dlg.Run () == ResponseType.Ok) {
|
|
Conduite.Courante = new Conduite ();
|
|
Conduite.Courante.Name = entry.Text;
|
|
}
|
|
MajWidgets();
|
|
dlg.Destroy();
|
|
|
|
}
|
|
|
|
|
|
|
|
protected void OnCloseActionActivated (object sender, EventArgs e)
|
|
{
|
|
Conduite.Courante.Dispose();
|
|
Conduite.Courante= null;
|
|
MajWidgets();
|
|
}
|
|
|
|
// bonton ajout de sequenceur linéraire
|
|
protected void OnSeqLinActionActivated (object sender, EventArgs e)
|
|
{
|
|
Sequenceur s = new SequenceurLineaire();
|
|
Conduite.Courante.AjoutSequenceur(s);
|
|
AddSeqUI(s);
|
|
}
|
|
|
|
void AddSeqUI (Sequenceur s)
|
|
{
|
|
VBox newvbox = new VBox();
|
|
onglets.Add (newvbox);
|
|
onglets.ShowAll();
|
|
}
|
|
|
|
|
|
bool updScheduled=false;
|
|
bool fullUpdateFlag=false;
|
|
|
|
public void NextUpdateFull ()
|
|
{
|
|
fullUpdateFlag=true;
|
|
}
|
|
|
|
|
|
public void ScheduleUpdate ()
|
|
{
|
|
if (updScheduled) {
|
|
//Console.WriteLine("{0} Skip !",DateTime.Now);
|
|
return;
|
|
}
|
|
updScheduled=true;
|
|
Gtk.Application.Invoke(new EventHandler(Update));
|
|
|
|
}
|
|
|
|
void Update (object sender, EventArgs e)
|
|
{
|
|
foreach (var notebookvbox in onglets.Children) {
|
|
foreach (var sequi in (notebookvbox as VBox).Children) {
|
|
(sequi as SequenceurUI).Update (fullUpdateFlag);
|
|
}
|
|
}
|
|
MajCircuits(fullUpdateFlag);
|
|
fullUpdateFlag=false;
|
|
updScheduled=false;
|
|
}
|
|
|
|
protected void OnMasterScaleValueChanged (object sender, EventArgs e)
|
|
{
|
|
Conduite.Courante.Master = (int)(masterScale.Value);
|
|
}
|
|
|
|
|
|
bool isfullscreen=false;
|
|
protected void OnFullscreenAction1Activated (object sender, EventArgs e)
|
|
{
|
|
if (!isfullscreen) {
|
|
Fullscreen ();
|
|
isfullscreen = true;
|
|
} else {
|
|
Unfullscreen();
|
|
isfullscreen = false;
|
|
}
|
|
}
|
|
|
|
EditionUnivers uDlg = null;
|
|
protected void OnUniversActionActivated (object sender, EventArgs e)
|
|
{
|
|
|
|
if (uDlg != null) {
|
|
uDlg.Show();
|
|
return;
|
|
}
|
|
|
|
uDlg = new EditionUnivers(this);
|
|
uDlg.ShowAll();
|
|
uDlg.Destroyed += udlgDestroyed;
|
|
|
|
}
|
|
|
|
void udlgDestroyed (object sender, EventArgs e)
|
|
{
|
|
uDlg=null;
|
|
}
|
|
|
|
protected void OnShowAllActionActivated (object sender, EventArgs e)
|
|
{
|
|
foreach (var notebookvbox in onglets.Children)
|
|
notebookvbox.Destroy();
|
|
|
|
foreach (Sequenceur s in Conduite.Courante.Sequenceurs) {
|
|
VBox newvbox = new VBox();
|
|
newvbox.Add(s.GetUI());
|
|
onglets.Add (newvbox);
|
|
onglets.ShowAll();
|
|
}
|
|
|
|
}
|
|
protected void OnConnectActionActivated (object sender, EventArgs e)
|
|
{
|
|
|
|
Conduite.Courante.Drivers.Add( new DriverBoitierV1());
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
} |