package com.dasatti.uhtml;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.border.*;
class ColorMenu extends JMenu
{
protected Border m_unselectedBorder;
protected Border m_selectedBorder;
protected Border m_activeBorder;
protected Hashtable m_panes;
protected ColorPane m_selected;
public ColorMenu(String name) {
super(name);
m_unselectedBorder = new CompoundBorder(
new MatteBorder(1, 1, 1, 1, getBackground()),
new BevelBorder(BevelBorder.LOWERED,
Color.white, Color.gray));
m_selectedBorder = new CompoundBorder(
new MatteBorder(2, 2, 2, 2, Color.red),
new MatteBorder(1, 1, 1, 1, getBackground()));
m_activeBorder = new CompoundBorder(
new MatteBorder(2, 2, 2, 2, Color.blue),
new MatteBorder(1, 1, 1, 1, getBackground()));
JPanel p = new JPanel();
p.setBorder(new EmptyBorder(5, 5, 5, 5));
p.setLayout(new GridLayout(8, 8));
m_panes = new Hashtable();
int[] values = new int[] { 0, 128, 192, 255 };
for (int r=0; r<values.length; r++) {
for (int g=0; g<values.length; g++) {
for (int b=0; b<values.length; b++) {
Color c = new Color(values[r], values[g], values[b]);
ColorPane pn = new ColorPane(c);
p.add(pn);
m_panes.put(c, pn);
}
}
}
add(p);
}
public void setColor(Color c) {
Object obj = m_panes.get(c);
if (obj == null)
return;
if (m_selected != null)
m_selected.setSelected(false);
m_selected = (ColorPane)obj;
m_selected.setSelected(true);
}
public Color getColor() {
if (m_selected == null)
return null;
return m_selected.getColor();
}
public void doSelection() {
fireActionPerformed(new ActionEvent(this,
ActionEvent.ACTION_PERFORMED, getActionCommand()));
}
class ColorPane extends JPanel implements MouseListener
{
protected Color m_c;
protected boolean m_selected;
public ColorPane(Color c) {
m_c = c;
setBackground(c);
setBorder(m_unselectedBorder);
String msg = "R "+c.getRed()+", G "+c.getGreen()+
", B "+c.getBlue();
setToolTipText(msg);
addMouseListener(this);
}
public Color getColor() { return m_c; }
public Dimension getPreferredSize() {
return new Dimension(15, 15);
}
public Dimension getMaximumSize() { return getPreferredSize(); }
public Dimension getMinimumSize() { return getPreferredSize(); }
public void setSelected(boolean selected) {
m_selected = selected;
if (m_selected)
setBorder(m_selectedBorder);
else
setBorder(m_unselectedBorder);
}
public boolean isSelected() { return m_selected; }
public void mousePressed(MouseEvent e) {}
public void mouseClicked(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {
setColor(m_c);
MenuSelectionManager.defaultManager().clearSelectedPath();
doSelection();
}
public void mouseEntered(MouseEvent e) {
setBorder(m_activeBorder);
}
public void mouseExited(MouseEvent e) {
setBorder(m_selected ? m_selectedBorder :
m_unselectedBorder);
}
}
}