//------------------------------------------------------------------------------
//	｢Form｣ や ｢GroupBox｣ などの上に配置された ｢RadioButton｣ の中で，｢Checked プ
//	ロパティ｣ が ｢true｣ になっているものの ｢Text プロパティ｣ に関するクラス
//		作成者：三上直樹，2013/07/31 作成，©三上直樹 2013
//------------------------------------------------------------------------------

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace Mikami.WindowsApplication
{
	public class RadioGroup
	{
		private readonly IEnumerable<RadioButton> rButtons_;
		// デフォルトでは処理を何も行わない
		private readonly Func<string, string> Fx_ = str => str;

		// RadioButton の Text をそのまま取り出す場合
		//		ctrl : RadioButton が配置されている ｢コンテナ｣
		public RadioGroup(Control ctrl)
		{
			rButtons_ = ctrl.Controls.OfType<RadioButton>();
		}

		// RadioButton の Text に処理を行って取り出す場合
		public RadioGroup(Control ctrl, Func<string, string> Fx) : this(ctrl)
		{
			Fx_ = Fx;
		}
	 
		// コンストラクタで指定された処理を行った文字列を取得する
		public string Checked
		{
			get
			{
				RadioButton myRb = rButtons_.FirstOrDefault(x => x.Checked);
				if (myRb == null)
				{
					MessageBox.Show("チェックされている RadioButton は存在しません．");
					return null;
				}
				else 
					return Fx_(myRb.Text);
			}
		}

		// 引数の文字列に対応する Checked を調べる
		public bool IsChecked(params string[] str)
		{
			return str.Any(s => s == Checked);
		}
	}
}
