/*
 Eteria IRC Client, an RFC 1459 compliant client program written in Java.
 Copyright (C) 2000-2001  Javier Kohen <jkohen at tough.com>
 
 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 2 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, write to the Free Software
 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
 
 import java.awt.*;
 import java.awt.event.*;
 import java.io.IOException;
 import java.util.*;
 import ar.com.jkohen.awt.ImageButton;
 import ar.com.jkohen.util.Resources;
 
 public class ControlPanel extends Panel implements ActionListener
 {
 	public static final int CHANNELS = 0;
 	public static final int WHO = 1;
 	public static final int SETUP = 2;
 	public static final int HELP = 3;
 	public static final int CONNECT = 4;
 	public static final int DISCONNECT = 4;
 
 	public static final int COMPONENTS = 5;
 
 	private EIRC eirc;
 
 	private Resources res;
 	private Component [] components;
 	private boolean [] enabled;
 
 	private boolean connected;
 
 	public ControlPanel(EIRC eirc, boolean enabled[])
 	{
 		this.eirc = eirc;
 		this.components = new Component[COMPONENTS];
 		this.enabled = enabled;
 
 		FlowLayout layout = (FlowLayout) getLayout();
 		layout.setHgap(0);
 		layout.setVgap(0);
 		layout.setAlignment(FlowLayout.RIGHT);
 
 		ImageButton ib;
 
 		if (enabled[ControlPanel.CHANNELS])
 			components[CHANNELS] = ib = new ImageButton(res.getLabel("panel.text.chanlist"), res.getImage("panel.icon.chanlist"));
 		if (enabled[ControlPanel.WHO])
 			components[WHO] = ib = new ImageButton(res.getLabel("panel.text.who"), res.getImage("panel.icon.who"));
 		if (enabled[ControlPanel.SETUP])
 			components[SETUP] = ib = new ImageButton(res.getLabel("panel.text.conf"), res.getImage("panel.icon.conf"));
 		if (enabled[ControlPanel.HELP])
 		   	components[HELP] = ib = new ImageButton(res.getLabel("panel.text.help"), res.getImage("panel.icon.help"));
 		
 		// This component's images are loaded later from setConnect.
 		if (enabled[ControlPanel.CONNECT])
 			components[CONNECT] = new ImageButton();
 
 		for (int i = 0; i < COMPONENTS; i++)
 		{
 			if (components[i] != null)
 			{
 				add(components[i]);
 				if (components[i] instanceof ImageButton)
 				{
 					ib = (ImageButton) components[i];
 					ib.addActionListener(this);
 				}
 			}
 		}
 
 		// Set default button states.
 		setConnected(false);
 	}
 
 	public void setConnected(boolean connected)
 	{
 		this.connected = connected;
 		ImageButton ib = null;
 		
 		if (components[CONNECT] != null)
 		{
 			ib = (ImageButton)components[CONNECT];
 			ib.setText(connected ? res.getLabel("panel.text.disconnect") : res.getLabel("panel.text.connect"));
 			ib.setIcon(connected ? res.getImage("panel.icon.disconnect") : res.getImage("panel.icon.connect"));
 		}
 
 		if (components[CHANNELS] != null)
 			components[CHANNELS].setEnabled(connected);
 
 		if (components[WHO] != null)
 			components[WHO].setEnabled(connected);
 
 		// This must be here, or the "connect" button would disappear in MSIE if connection failed.
 		validate();
 
 		if (ib != null)
 			ib.repaint();
 	}
 
 	public void repaint()
 	{
 		super.repaint();
 		for (int i = 0; i < COMPONENTS; i++)
 			if (components[i] != null)
 				components[i].repaint();
 	}
 	
 	public void setFont(Font f)
 	{
 		for (int i = 0; i < COMPONENTS; i++)
 			if (components[i] != null)
 				components[i].setFont(f);
 	}
 		
 	public void setBackground(Color c)
 	{
 		super.setBackground(c);
 		for (int i = 0; i < COMPONENTS; i++)
 			if (components[i] != null)
 				components[i].setBackground(c);
 	}
 
 	public void setForeground(Color c)
 	{
 		super.setForeground(c);
 		for (int i = 0; i < COMPONENTS; i++)
 			if (components[i] != null)
 				components[i].setForeground(c);
 	}
 
 	public void actionPerformed(ActionEvent ev)
 	{
 		Object source = ev.getSource();
 
 		if (source.equals(components[CONNECT]))
 		{
 			if (connected)
 			{
 				eirc.disconnect();
 				eirc.openASL();
 			}
 			else
 			{
 				eirc.connect();
 			}
 		}
 		
 		if (source.equals(components[CHANNELS]))
 		{
 			eirc.openChannelList();
 		}
 
 		if (source.equals(components[SETUP]))
 		{
 			eirc.openConfigurator();
 		}
 
 	  	if (source.equals(components[WHO]))
 		{
 	  		eirc.openWhoList();
 		}
 
 		if (source.equals(components[HELP]))
 		{
 			eirc.openHelp();
 		}
 	}
 }