// ActiveDevices.cs created with MonoDevelop
// User: klose at 11:03 13.07.2010
// CVS release: $Id: ActiveDevices.cs,v 1.2 2010-07-13 15:12:32 klose Exp $
//
//    QuickStep: Acquire, view and identify spectra 
//    Copyright (C) 2009  Thomas Klose, Hiperscan GmbH Dresden, Germany
//
//    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 3 of the License, or
//    (at your option) any later version.
//
//    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 <http://www.gnu.org/licenses/>.
//

using System;
using System.Collections.Generic;

using Hiperscan.Unix;
using Hiperscan.SGS;
using Hiperscan.Extensions;


namespace Hiperscan.GUI
{
	public class ActiveDevices : List<Device>, IActiveDevices
	{
		public event ActiveDevicesChangedHandler Changed;

		public ActiveDevices() : base()
		{
		}
		
		public ActiveDevices(List<Device> devices) : base(devices) 
		{
		}
		
		public List<Device> Idle
		{
			get
			{
				List<Device> list = new List<Device>();
				
				foreach (Device dev in this)
				{
					if (dev.GetState() == Device.State.Idle)
						list.Add(dev);
				}
				
				return list;
			}
		}
		
		public List<Device> Connected
		{
			get
			{
				List<Device> list = new List<Device>();
				
				foreach (Device dev in this)
				{
					if (dev.GetState() != Device.State.Disconnected)
						list.Add(dev);
				}
				
				return list;
			}
		}

		public List<Device> Unprogrammed
		{
			get
			{
				List<Device> list = new List<Device>();
				
				foreach (Device dev in this)
				{
					if (dev.GetState() == Device.State.Unprogrammed)
						list.Add(dev);
				}
				
				return list;
			}
		}

		public void NotifyChanged()
		{
			if (this.Changed != null)
				this.Changed(this);
		}
	}
}