loupiottes/DMX-2.0/SelSeqCircuits.cs
2013-04-24 18:42:18 +00:00

149 lines
3.7 KiB
C#

using System;
using System.Collections.Generic;
namespace DMX2
{
public partial class SelSeqCircuits : Gtk.Dialog
{
Gtk.ListStore lsAll=null;
Gtk.ListStore lsSel=null;
List<Circuit> cursel;
public List<Circuit> GetResultList ()
{
return cursel;
}
public SelSeqCircuits (IEnumerable<Circuit> selection , Gtk.Window parent) : base ("Selection des Circuits",parent,Gtk.DialogFlags.Modal)
{
this.Build ();
cursel = new List<Circuit>(selection);
var allnameCol = new Gtk.TreeViewColumn();
var allNameCell = new Gtk.CellRendererText();
allnameCol.Title = "Circuits";
allnameCol.PackStart(allNameCell,true);
allnameCol.SetCellDataFunc(allNameCell, new Gtk.TreeCellDataFunc( RenderCircuitName) );
this.listeToutCircuits.AppendColumn(allnameCol);
lsAll = new Gtk.ListStore(typeof (Circuit));
this.listeToutCircuits.Model = lsAll;
foreach(var c in Conduite.Courante.Circuits)
lsAll.AppendValues(c);
listeToutCircuits.Selection.Mode = Gtk.SelectionMode.Multiple;
var selNameCol = new Gtk.TreeViewColumn();
var selNameCell = new Gtk.CellRendererText();
selNameCol.Title = "Circuits du Sequenceur";
selNameCol.PackStart(selNameCell,true);
selNameCol.SetCellDataFunc(selNameCell, new Gtk.TreeCellDataFunc( RenderCircuitName) );
this.listeSelCircuits.AppendColumn(selNameCol);
lsSel = new Gtk.ListStore(typeof (Circuit));
this.listeSelCircuits.Model = lsSel;
foreach(var c in cursel)
lsSel.AppendValues(c);
listeSelCircuits.Selection.Mode = Gtk.SelectionMode.Multiple;
}
void RenderCircuitName(Gtk.TreeViewColumn tree_column, Gtk.CellRenderer cell, Gtk.TreeModel tree_model, Gtk.TreeIter iter) {
Circuit c = tree_model.GetValue (iter, 0) as Circuit;
(cell as Gtk.CellRendererText).Text = c.Name;
}
void UpdateCurSel ()
{
lsSel.Clear ();
foreach(var c in cursel)
lsSel.AppendValues(c);
}
protected List<Circuit> GetSelection(Gtk.TreeView liste, Gtk.ListStore ls )
{
Gtk.TreeIter iter; List<Circuit> selection = new List<Circuit>();
foreach(var row in liste.Selection.GetSelectedRows())
{
ls.GetIter (out iter, row);
selection.Add( ls.GetValue(iter,0) as Circuit);
}
return selection;
}
protected void OnAjtButClicked (object sender, EventArgs e)
{
foreach (var c in GetSelection(listeToutCircuits,lsAll)) {
if(!cursel.Contains(c))
cursel.Add(c);
}
UpdateCurSel();
}
protected void OnSupBtClicked (object sender, EventArgs e)
{
foreach (var c in GetSelection(listeSelCircuits,lsSel)) {
cursel.Remove(c);
}
UpdateCurSel();
}
protected void OnSupToutButClicked (object sender, EventArgs e)
{
cursel.Clear();
UpdateCurSel();
}
protected void OnMvHautBtClicked (object sender, EventArgs e)
{
List<Circuit> selrow = GetSelection(listeSelCircuits,lsSel);
foreach (var c in selrow) {
int idx = cursel.IndexOf(c);
if(idx>0)
{
if(!selrow.Contains(cursel[idx-1]))
{
cursel.Remove(c);
cursel.Insert(idx-1,c);
}
}
}
lsSel.Clear();
foreach (var item in cursel) {
var iter = lsSel.AppendValues (item);
if(selrow.Contains(item))
listeSelCircuits.Selection.SelectIter(iter);
}
}
protected void OnMvBasBtClicked (object sender, EventArgs e)
{
List<Circuit> selrow = GetSelection(listeSelCircuits,lsSel);
selrow.Reverse();
foreach (var c in selrow) {
int idx = cursel.IndexOf(c);
if(idx<cursel.Count)
{
if(!selrow.Contains(cursel[idx+1]))
{
cursel.Remove(c);
cursel.Insert(idx+1,c);
}
}
}
lsSel.Clear();
foreach (var item in cursel) {
var iter = lsSel.AppendValues (item);
if(selrow.Contains(item))
listeSelCircuits.Selection.SelectIter(iter);
}
}
}
}