import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.LineBorder;

public class ControlFrame extends JFrame implements ActionListener
{
	private JPanel m_pnlInit;
	private JPanel m_pnlCtrl;

	private JButton m_btnInit;
	private JButton m_btnConnect;
	private JButton m_btnDisconnect;

	private JTextArea m_lblValue;

	private JLabel m_lblI;
	private JButton m_btnIRead;
	private JButton m_btnIWrite;
	private JLabel m_lblF;
	private JButton m_btnFRead;
	private JButton m_btnFWrite;
	private JLabel m_lblD;
	private JButton m_btnDRead;
	private JButton m_btnDWrite;
	private JLabel m_lblV;
	private JButton m_btnVRead;
	private JButton m_btnVWrite;
	private JLabel m_lblP;
	private JButton m_btnPRead;
	private JButton m_btnPWrite;
	private JLabel m_lblJ;
	private JButton m_btnJRead;
	private JButton m_btnJWrite;
	private JLabel m_lblT;
	private JButton m_btnTRead;
	private JButton m_btnTWrite;
	private JLabel m_lblS;
	private JButton m_btnSRead;
	private JButton m_btnSWrite;
	private JLabel m_lblIO;
	private JButton m_btnIORead;
	private JButton m_btnIOWrite;

	private RC8Sample m_main;

	public ControlFrame(RC8Sample smpl)
	{
		m_main = smpl;

		InitFrame();
		InitPanel();
		InitButton();

		setVisible(true);
	}

	private void InitFrame()
	{
		setTitle("Variable");

		getContentPane().setPreferredSize(new Dimension(240, 490));
		pack();

		setLayout(null);

		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

	private void InitPanel()
	{
		m_pnlInit = new JPanel();
		m_pnlInit.setBounds(10, 10, 220, 130);
		m_pnlInit.setBackground(new Color(0, 255, 0));
		m_pnlInit.setBorder(new LineBorder(Color.black, 2));
		m_pnlInit.setLayout(null);
		getContentPane().add(m_pnlInit);

		m_pnlCtrl = new JPanel();
		m_pnlCtrl.setBounds(10, 150, 220, 330);
		m_pnlCtrl.setBackground(new Color(255, 255, 128));
		m_pnlCtrl.setBorder(new LineBorder(Color.black, 2));
		m_pnlCtrl.setLayout(null);
		getContentPane().add(m_pnlCtrl);
	}

	private void InitButton()
	{
		m_btnInit = new JButton("Init");
		m_btnInit.setBounds(10, 10, 200, 30);
		m_btnInit.addActionListener(this);
		m_pnlInit.add(m_btnInit);

		m_btnConnect = new JButton("Connect");
		m_btnConnect.setBounds(10, 50, 200, 30);
		m_btnConnect.setEnabled(false);
		m_btnConnect.addActionListener(this);
		m_pnlInit.add(m_btnConnect);

		m_btnDisconnect = new JButton("Disconnect");
		m_btnDisconnect.setBounds(10, 90, 200, 30);
		m_btnDisconnect.setEnabled(false);
		m_btnDisconnect.addActionListener(this);
		m_pnlInit.add(m_btnDisconnect);

		m_lblValue = new JTextArea("");
		m_lblValue.setBounds(10, 10, 200, 40);
		m_lblValue.setEditable(false);
		m_lblValue.setLineWrap(true);
		m_pnlCtrl.add(m_lblValue);

		m_lblI = new JLabel("I1 :");
		m_lblI.setBounds(10, 60, 40, 20);
		m_pnlCtrl.add(m_lblI);

		m_btnIRead = new JButton("Read");
		m_btnIRead.setBounds(50, 60, 75, 20);
		m_btnIRead.setEnabled(false);
		m_btnIRead.addActionListener(this);
		m_pnlCtrl.add(m_btnIRead);

		m_btnIWrite = new JButton("Write");
		m_btnIWrite.setBounds(135, 60, 75, 20);
		m_btnIWrite.setEnabled(false);
		m_btnIWrite.addActionListener(this);
		m_pnlCtrl.add(m_btnIWrite);

		m_lblF = new JLabel("F1 :");
		m_lblF.setBounds(10, 90, 40, 20);
		m_pnlCtrl.add(m_lblF);

		m_btnFRead = new JButton("Read");
		m_btnFRead.setBounds(50, 90, 75, 20);
		m_btnFRead.setEnabled(false);
		m_btnFRead.addActionListener(this);
		m_pnlCtrl.add(m_btnFRead);

		m_btnFWrite = new JButton("Write");
		m_btnFWrite.setBounds(135, 90, 75, 20);
		m_btnFWrite.setEnabled(false);
		m_btnFWrite.addActionListener(this);
		m_pnlCtrl.add(m_btnFWrite);

		m_lblD = new JLabel("D1 :");
		m_lblD.setBounds(10, 120, 40, 20);
		m_pnlCtrl.add(m_lblD);

		m_btnDRead = new JButton("Read");
		m_btnDRead.setBounds(50, 120, 75, 20);
		m_btnDRead.setEnabled(false);
		m_btnDRead.addActionListener(this);
		m_pnlCtrl.add(m_btnDRead);

		m_btnDWrite = new JButton("Write");
		m_btnDWrite.setBounds(135, 120, 75, 20);
		m_btnDWrite.setEnabled(false);
		m_btnDWrite.addActionListener(this);
		m_pnlCtrl.add(m_btnDWrite);

		m_lblV = new JLabel("V1 :");
		m_lblV.setBounds(10, 150, 40, 20);
		m_pnlCtrl.add(m_lblV);

		m_btnVRead = new JButton("Read");
		m_btnVRead.setBounds(50, 150, 75, 20);
		m_btnVRead.setEnabled(false);
		m_btnVRead.addActionListener(this);
		m_pnlCtrl.add(m_btnVRead);

		m_btnVWrite = new JButton("Write");
		m_btnVWrite.setBounds(135, 150, 75, 20);
		m_btnVWrite.setEnabled(false);
		m_btnVWrite.addActionListener(this);
		m_pnlCtrl.add(m_btnVWrite);

		m_lblP = new JLabel("P1 :");
		m_lblP.setBounds(10, 180, 40, 20);
		m_pnlCtrl.add(m_lblP);

		m_btnPRead = new JButton("Read");
		m_btnPRead.setBounds(50, 180, 75, 20);
		m_btnPRead.setEnabled(false);
		m_btnPRead.addActionListener(this);
		m_pnlCtrl.add(m_btnPRead);

		m_btnPWrite = new JButton("Write");
		m_btnPWrite.setBounds(135, 180, 75, 20);
		m_btnPWrite.setEnabled(false);
		m_btnPWrite.addActionListener(this);
		m_pnlCtrl.add(m_btnPWrite);

		m_lblJ = new JLabel("J1 :");
		m_lblJ.setBounds(10, 210, 40, 20);
		m_pnlCtrl.add(m_lblJ);

		m_btnJRead = new JButton("Read");
		m_btnJRead.setBounds(50, 210, 75, 20);
		m_btnJRead.setEnabled(false);
		m_btnJRead.addActionListener(this);
		m_pnlCtrl.add(m_btnJRead);

		m_btnJWrite = new JButton("Write");
		m_btnJWrite.setBounds(135, 210, 75, 20);
		m_btnJWrite.setEnabled(false);
		m_btnJWrite.addActionListener(this);
		m_pnlCtrl.add(m_btnJWrite);

		m_lblT = new JLabel("T1 :");
		m_lblT.setBounds(10, 240, 40, 20);
		m_pnlCtrl.add(m_lblT);

		m_btnTRead = new JButton("Read");
		m_btnTRead.setBounds(50, 240, 75, 20);
		m_btnTRead.setEnabled(false);
		m_btnTRead.addActionListener(this);
		m_pnlCtrl.add(m_btnTRead);

		m_btnTWrite = new JButton("Write");
		m_btnTWrite.setBounds(135, 240, 75, 20);
		m_btnTWrite.setEnabled(false);
		m_btnTWrite.addActionListener(this);
		m_pnlCtrl.add(m_btnTWrite);

		m_lblS = new JLabel("S1 :");
		m_lblS.setBounds(10, 270, 40, 20);
		m_pnlCtrl.add(m_lblS);

		m_btnSRead = new JButton("Read");
		m_btnSRead.setBounds(50, 270, 75, 20);
		m_btnSRead.setEnabled(false);
		m_btnSRead.addActionListener(this);
		m_pnlCtrl.add(m_btnSRead);

		m_btnSWrite = new JButton("Write");
		m_btnSWrite.setBounds(135, 270, 75, 20);
		m_btnSWrite.setEnabled(false);
		m_btnSWrite.addActionListener(this);
		m_pnlCtrl.add(m_btnSWrite);

		m_lblIO = new JLabel("IO128 :");
		m_lblIO.setBounds(10, 300, 40, 20);
		m_pnlCtrl.add(m_lblIO);

		m_btnIORead = new JButton("Read");
		m_btnIORead.setBounds(50, 300, 75, 20);
		m_btnIORead.setEnabled(false);
		m_btnIORead.addActionListener(this);
		m_pnlCtrl.add(m_btnIORead);

		m_btnIOWrite = new JButton("Write");
		m_btnIOWrite.setBounds(135, 300, 75, 20);
		m_btnIOWrite.setEnabled(false);
		m_btnIOWrite.addActionListener(this);
		m_pnlCtrl.add(m_btnIOWrite);
	}

	@Override
	public void actionPerformed(ActionEvent ev)
	{
		JButton btn = (JButton)ev.getSource();

		if(btn.equals(m_btnInit)){
			m_main.btnInit_Clicked();
		}
		else if(btn.equals(m_btnConnect)){
			m_main.btnConnect_Clicked();
		}
		else if(btn.equals(m_btnDisconnect)){
			m_main.btnDisconnect_Clicked();
		}
		else if(btn.equals(m_btnIRead)){
			m_main.btnIRead_Clicked();
		}
		else if(btn.equals(m_btnIWrite)){
			m_main.btnIWrite_Clicked();
		}
		else if(btn.equals(m_btnFRead)){
			m_main.btnFRead_Clicked();
		}
		else if(btn.equals(m_btnFWrite)){
			m_main.btnFWrite_Clicked();
		}
		else if(btn.equals(m_btnDRead)){
			m_main.btnDRead_Clicked();
		}
		else if(btn.equals(m_btnDWrite)){
			m_main.btnDWrite_Clicked();
		}
		else if(btn.equals(m_btnVRead)){
			m_main.btnVRead_Clicked();
		}
		else if(btn.equals(m_btnVWrite)){
			m_main.btnVWrite_Clicked();
		}
		else if(btn.equals(m_btnPRead)){
			m_main.btnPRead_Clicked();
		}
		else if(btn.equals(m_btnPWrite)){
			m_main.btnPWrite_Clicked();
		}
		else if(btn.equals(m_btnJRead)){
			m_main.btnJRead_Clicked();
		}
		else if(btn.equals(m_btnJWrite)){
			m_main.btnJWrite_Clicked();
		}
		else if(btn.equals(m_btnTRead)){
			m_main.btnTRead_Clicked();
		}
		else if(btn.equals(m_btnTWrite)){
			m_main.btnTWrite_Clicked();
		}
		else if(btn.equals(m_btnSRead)){
			m_main.btnSRead_Clicked();
		}
		else if(btn.equals(m_btnSWrite)){
			m_main.btnSWrite_Clicked();
		}
		else if(btn.equals(m_btnIORead)){
			m_main.btnIORead_Clicked();
		}
		else if(btn.equals(m_btnIOWrite)){
			m_main.btnIOWrite_Clicked();
		}
	}

	public void SetValueText(String strValue)
	{
		m_lblValue.setText(strValue);
	}

	// bFlag = true:  Enable command buttons
	// bFlag = false: Disable command buttons
	public void ButtonController(boolean bFlag)
	{
		m_btnInit.setEnabled(false);
		m_btnConnect.setEnabled(!bFlag);
		m_btnDisconnect.setEnabled(bFlag);
		m_btnIRead.setEnabled(bFlag);
		m_btnIWrite.setEnabled(bFlag);
		m_btnFRead.setEnabled(bFlag);
		m_btnFWrite.setEnabled(bFlag);
		m_btnDRead.setEnabled(bFlag);
		m_btnDWrite.setEnabled(bFlag);
		m_btnVRead.setEnabled(bFlag);
		m_btnVWrite.setEnabled(bFlag);
		m_btnPRead.setEnabled(bFlag);
		m_btnPWrite.setEnabled(bFlag);
		m_btnJRead.setEnabled(bFlag);
		m_btnJWrite.setEnabled(bFlag);
		m_btnTRead.setEnabled(bFlag);
		m_btnTWrite.setEnabled(bFlag);
		m_btnSRead.setEnabled(bFlag);
		m_btnSWrite.setEnabled(bFlag);
		m_btnIORead.setEnabled(bFlag);
		m_btnIOWrite.setEnabled(bFlag);
	}

	public void ShowErrorMessage(int hresult){
		JOptionPane.showMessageDialog(this, Integer.toHexString(hresult).toUpperCase(), "Error", JOptionPane.ERROR_MESSAGE);
	}
}
