loupiottes/DMX-2.0/MainWindow.cs
2013-05-07 20:31:06 +00:00

162 lines
No EOL
4 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) {
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 {
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();
}
protected void OnSeqLinActionActivated (object sender, EventArgs e)
{
Sequenceur s = new SequenceurLineaire();
Conduite.Courante.AjoutSequenceur(s);
AddSeqUI(s);
}
void AddSeqUI (Sequenceur s)
{
seqUiVbox.PackStart(s.GetUI(),false,false,0);
seqUiVbox.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 sequi in seqUiVbox.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;
}
}
}
}