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.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 JButton m_btnMove;
	private JButton m_btnApproach;
	private JButton m_btnDepart;
	private JButton m_btnDraw;
	private JButton m_btnDriveAEx;
	private JButton m_btnDriveEx;
	private JButton m_btnSpeed;
	private JButton m_btnTool;
	private JButton m_btnWork;

	private RC8Sample m_main;

	public ControlFrame(RC8Sample smpl)
	{
		m_main = smpl;

		InitFrame();
		InitPanel();
		InitButton();

		setVisible(true);
	}
	
	private void InitFrame(){
		setTitle("Robot");
		
		getContentPane().setPreferredSize(new Dimension(240, 530));
		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(204, 255, 204));
		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, 370);
		m_pnlCtrl.setBackground(new Color(153, 204, 255));
		m_pnlCtrl.setBorder(new LineBorder(Color.black, 2));
		m_pnlCtrl.setLayout(null);
		getContentPane().add(m_pnlCtrl);
	}
	
	private void InitButton(){
		m_btnInit = new JButton();
		m_btnInit.setBounds(10, 10, 200, 30);
		m_btnInit.setText("Init");
		m_btnInit.addActionListener(this);
		m_pnlInit.add(m_btnInit);
		
		m_btnConnect = new JButton();
		m_btnConnect.setBounds(10, 50, 200, 30);
		m_btnConnect.setText("Connect Robot");
		m_btnConnect.setEnabled(false);
		m_btnConnect.addActionListener(this);
		m_pnlInit.add(m_btnConnect);
		
		m_btnDisconnect = new JButton();
		m_btnDisconnect.setBounds(10, 90, 200, 30);
		m_btnDisconnect.setText("Disconnect Robot");
		m_btnDisconnect.setEnabled(false);
		m_btnDisconnect.addActionListener(this);
		m_pnlInit.add(m_btnDisconnect);
		
		m_btnMove = new JButton();
		m_btnMove.setBounds(10, 10, 200, 30);
		m_btnMove.setText("Move");
		m_btnMove.setEnabled(false);
		m_btnMove.addActionListener(this);
		m_pnlCtrl.add(m_btnMove);
		
		m_btnApproach = new JButton();
		m_btnApproach.setBounds(10, 50, 200, 30);
		m_btnApproach.setText("Approach");
		m_btnApproach.setEnabled(false);
		m_btnApproach.addActionListener(this);
		m_pnlCtrl.add(m_btnApproach);
		
		m_btnDepart = new JButton();
		m_btnDepart.setBounds(10, 90, 200, 30);
		m_btnDepart.setText("Depart");
		m_btnDepart.setEnabled(false);
		m_btnDepart.addActionListener(this);
		m_pnlCtrl.add(m_btnDepart);
		
		m_btnDraw = new JButton();
		m_btnDraw.setBounds(10, 130, 200, 30);
		m_btnDraw.setText("Draw");
		m_btnDraw.setEnabled(false);
		m_btnDraw.addActionListener(this);
		m_pnlCtrl.add(m_btnDraw);
		
		m_btnDriveAEx = new JButton();
		m_btnDriveAEx.setBounds(10, 170, 200, 30);
		m_btnDriveAEx.setText("DriveAEx");
		m_btnDriveAEx.setEnabled(false);
		m_btnDriveAEx.addActionListener(this);
		m_pnlCtrl.add(m_btnDriveAEx);
		
		m_btnDriveEx = new JButton();
		m_btnDriveEx.setBounds(10, 210, 200, 30);
		m_btnDriveEx.setText("DriveEx");
		m_btnDriveEx.setEnabled(false);
		m_btnDriveEx.addActionListener(this);
		m_pnlCtrl.add(m_btnDriveEx);
		
		m_btnSpeed = new JButton();
		m_btnSpeed.setBounds(10, 250, 200, 30);
		m_btnSpeed.setText("Speed");
		m_btnSpeed.setEnabled(false);
		m_btnSpeed.addActionListener(this);
		m_pnlCtrl.add(m_btnSpeed);
		
		m_btnTool = new JButton();
		m_btnTool.setBounds(10, 290, 200, 30);
		m_btnTool.setText("ChangeTool");
		m_btnTool.setEnabled(false);
		m_btnTool.addActionListener(this);
		m_pnlCtrl.add(m_btnTool);
		
		m_btnWork = new JButton();
		m_btnWork.setBounds(10, 330, 200, 30);
		m_btnWork.setText("ChangeWork");
		m_btnWork.setEnabled(false);
		m_btnWork.addActionListener(this);
		m_pnlCtrl.add(m_btnWork);
	}
	
	@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_btnMove)){
			m_main.btnMove_Clicked();
		}
		else if(btn.equals(m_btnApproach)){
			m_main.btnApproach_Clicked();
		}
		else if(btn.equals(m_btnDepart)){
			m_main.btnDepart_Clicked();
		}
		else if(btn.equals(m_btnDraw)){
			m_main.btnDraw_Clicked();
		}
		else if(btn.equals(m_btnDriveAEx)){
			m_main.btnDriveAEx_Clicked();
		}
		else if(btn.equals(m_btnDriveEx)){
			m_main.btnDriveEx_Clicked();
		}
		else if(btn.equals(m_btnSpeed)){
			m_main.btnSpeed_Clicked();
		}
		else if(btn.equals(m_btnTool)){
			m_main.btnTool_Clicked();
		}
		else if(btn.equals(m_btnWork)){
			m_main.btnWork_Clicked();
		}
	}
	
	// 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_btnMove.setEnabled(bFlag);
		m_btnApproach.setEnabled(bFlag);
		m_btnDepart.setEnabled(bFlag);
		m_btnDraw.setEnabled(bFlag);
		m_btnDriveAEx.setEnabled(bFlag);
		m_btnDriveEx.setEnabled(bFlag);
		m_btnSpeed.setEnabled(bFlag);
		m_btnTool.setEnabled(bFlag);
		m_btnWork.setEnabled(bFlag);
	}

	public void ShowErrorMessage(int hresult)
	{
		JOptionPane.showMessageDialog(this, Integer.toHexString(hresult).toUpperCase(), "Error", JOptionPane.ERROR_MESSAGE);
	}
}
