/*
* Copyright 2008 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.rioproject.tools.ui.prefs;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.lang.reflect.Field;
/**
* A panel that displays color choices
*
* @author Dennis Reedy
*/
public class ColorPanel extends JPanel {
private Color failureColor;
private Color okayColor;
private Color warningColor;
private Color unManagedColor;
private final JComponent okayColorComp;
private final JComponent failureColorComp;
private final JComponent warningColorComp;
private final JComponent unManagedColorComp;
public ColorPanel(final Color failureColor, final Color okayColor, final Color warningColor, final Color unManagedColor) {
super(new GridBagLayout());
this.warningColor = warningColor;
this.failureColor = failureColor;
this.okayColor = okayColor;
this.unManagedColor = unManagedColor;
setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createEmptyBorder(8, 8, 8, 8),
BorderFactory.createEtchedBorder()));
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.insets = new Insets(4, 4, 4, 4);
Field setOkayColor = getField("okayColor", getClass());
okayColorComp = makeColorComponent(okayColor,
"Okay Status Color",
"<html>Press to choose the color for <b>Okay</b> status<html>",
setOkayColor,
this);
Field setFailureColor = getField("failureColor", getClass());
failureColorComp = makeColorComponent(failureColor,
"Failure Status Color",
"<html>Press to choose the color for <b>Failure</b> status<html>",
setFailureColor,
this);
Field setWarningColor = getField("warningColor", getClass());
warningColorComp = makeColorComponent(warningColor,
"Warning Status Color",
"<html>Press to choose the color for <b>Warning</b> status. " +
"The <b>Warning</b> status is used if a deployed service is not registered into any lookup services<html>",
setWarningColor,
this);
Field setUnManagedColor = getField("unManagedColor", getClass());
unManagedColorComp = makeColorComponent(unManagedColor,
"Un-Managed service Status Color",
"<html>Press to choose the color for <b>Un-Managed</b> status.",
setUnManagedColor,
this);
gbc.gridx = 0;
gbc.gridy = 0;
gbc.gridwidth = 3;
add(new JLabel("<html><h3>Select colors for Deployment Graph elements</h3></html>"), gbc);
gbc.gridx = 0;
gbc.gridy = 2;
gbc.gridwidth = 1;
add(new JLabel("Okay Status"), gbc);
gbc.gridx = 3;
gbc.gridy = 2;
add(okayColorComp, gbc);
gbc.gridx = 0;
gbc.gridy = 3;
add(new JLabel("Failure Status"), gbc);
gbc.gridx = 3;
gbc.gridy = 3;
add(failureColorComp, gbc);
gbc.gridx = 0;
gbc.gridy = 4;
add(new JLabel("Warning Status"), gbc);
gbc.gridx = 3;
gbc.gridy = 4;
add(warningColorComp, gbc);
gbc.gridx = 0;
gbc.gridy = 5;
add(new JLabel("Un-Managed Status"), gbc);
gbc.gridx = 3;
gbc.gridy = 5;
add(unManagedColorComp, gbc);
}
public Color getWarningColor() {
return warningColor;
}
public Color getOkayColor() {
return okayColor;
}
public Color getFailureColor() {
return failureColor;
}
public void setFailureColor(final Color failureColor) {
this.failureColor = failureColor;
failureColorComp.setBackground(failureColor);
}
public void setOkayColor(final Color okayColor) {
this.okayColor = okayColor;
okayColorComp.setBackground(okayColor);
}
public void setWarningColor(final Color warningColor) {
this.warningColor = warningColor;
warningColorComp.setBackground(warningColor);
}
public void setUnManagedColor(final Color unManagedColor) {
this.unManagedColor = unManagedColor;
unManagedColorComp.setBackground(unManagedColor);
}
public Color getUnManagedColor() {
return unManagedColor;
}
private JComponent makeColorComponent(final Color color,
final String desc,
final String tooltip,
final Field field,
final Object instance) {
final JLabel comp = new JLabel("<html> </html>");
comp.setOpaque(true);
comp.setBackground(color);
comp.setToolTipText(tooltip);
comp.setBorder(BorderFactory.createRaisedBevelBorder());
comp.addMouseListener(new MouseListener(){
public void mouseClicked(final MouseEvent event) {
}
public void mousePressed(final MouseEvent event) {
JLabel c = (JLabel)event.getComponent();
comp.setBorder(BorderFactory.createLoweredBevelBorder());
Color color = c.getBackground();
color = JColorChooser.showDialog(comp, desc, color);
comp.setBorder(BorderFactory.createRaisedBevelBorder());
if(color!=null) {
setField(field, color, instance);
c.setBackground(color);
}
}
public void mouseReleased(MouseEvent event) {
}
public void mouseEntered(MouseEvent event) {
}
public void mouseExited(MouseEvent event) {
}
});
return comp;
}
private Field getField(final String name, final Class cl) {
Field field = null;
try {
field = cl.getDeclaredField(name);
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
return field;
}
private void setField(final Field field, final Color color, final Object instance) {
try {
field.set(instance, color);
} catch (Exception e) {
e.printStackTrace();
}
}
}