//--------------------------------------------------------------
//	いろいろな使うメソッド
//
//		作成者：三上直樹，2022/02/10 作成，©三上直樹 2022
//--------------------------------------------------------------

using System;
using System.Windows.Forms;

namespace 遮断周波数可変IIRフィルタ
{
	public partial class Form1 : Form
	{
		// フィルタの再設計と周波数特性の表示
		private void RedesignDisplay()
		{
			iir_.Design(ORDER_, pb_, SAMPLING_FRQ_, fC_);
			pictureBox1.Invalidate();
		}

		// float 型引数 x の整数部分のみを変換した文字列の先頭に
		// 文字列 str を付加して送信する
		private void SendInt(string str, float x)
		{
			sp_.SendTo(str + ((int)x).ToString());
		}

		// マウスのドラッグに関係する処理
		private void MouseDrag(float frq)
		{
			if ((Cursor == Cursors.VSplit) && mouseDown_)	// マウスボタンを押下？
			{
				fC_ = frq;
				label1.Text = "遮断周波数： " + (frq/1000.0f).ToString("0.##") + " kHz";
				if (radioButton1.Checked) SendInt("L", fC_);
				else					  SendInt("H", fC_);

				RedesignDisplay();			// 遮断周波数が変化したとき，再設計
			}
			else
			{
				// マウス･カーソルの形状を指定
				if (paintOk_ && plotter_.IsOnCursor(frq, fC_))
					Cursor = Cursors.VSplit;
				else
					Cursor = Cursors.Default;
			}
		}

		// 以下の Invoke(Action action) を定義しておけばプログラムの記述が楽になる
		//			たとえば，
		//		Invoke(new Action(() => label1.Text = "文字列"));
		//			と書く代わりに
		//		Invoke(() => label1.Text = "文字列");
		//			のように書ける
		private void Invoke(Action action) => base.Invoke(action);
	}
}
