/*
* LineAppearancePanel.java
*
* Created on June 19, 2005, 10:18 PM
*/
package ika.gui;
import ika.geo.VectorSymbol;
import ika.gui.*;
import java.awt.*;
import java.awt.event.*;
import java.util.EventListener;
import javax.swing.*;
import javax.swing.event.*;
/**
*
* @author jenny
*/
public class LineAppearancePanel extends javax.swing.JPanel {
private VectorSymbol vectorSymbol;
private static final float[] LINE_WIDTHS =
{0.25f, 0.5f, 1.f, 1.5f, 2.f, 3.f, 5.f, 10.f};
EventListenerList actionListeners = new EventListenerList();
/** Creates new form LineAppearancePanel */
public LineAppearancePanel() {
initComponents();
vectorSymbol = new VectorSymbol();
vectorSymbol.setFilled(false);
vectorSymbol.setScaleInvariant(true);
vectorSymbol.setStroked(true);
}
ComboBoxModel loadLineIcons() {
DefaultComboBoxModel model = new DefaultComboBoxModel();
for (int i = 1; i <= 5; ++i) {
String path = "/ika/icons/line" + i + ".gif";
ImageIcon icon = new ImageIcon(getClass().getResource(path));
model.addElement(icon);
}
return model;
}
public VectorSymbol getVectorSymbol() {
this.readVectorSymbolFromGUI();
return (VectorSymbol)vectorSymbol.clone();
}
public void setVectorSymbol(VectorSymbol vectorSymbol) {
this.vectorSymbol = (VectorSymbol)vectorSymbol.clone();
this.writeVectorSymbolToGUI();
}
private void writeVectorSymbolToGUI() {
// color of lines
this.lineColorButton.setColor(vectorSymbol.getStrokeColor());
// line type
final int lineTypeID = (int)Math.round(vectorSymbol.getDashLength() / 2);
this.lineTypeComboBox.setSelectedIndex(lineTypeID);
// line width
final float lineWidth = vectorSymbol.getStrokeWidth();
for (int i = 0; i < LINE_WIDTHS.length; i++) {
if (LINE_WIDTHS[i] == lineWidth) {
this.lineWidthComboBox.setSelectedIndex(i);
return;
}
}
this.lineWidthComboBox.setSelectedIndex(2); // default is 1.
}
private void readVectorSymbolFromGUI() {
// dash length
int lineType = this.lineTypeComboBox.getSelectedIndex();
vectorSymbol.setDashLength( lineType * 2);
// line width of the distortion grid lines
int lineWidthID = this.lineWidthComboBox.getSelectedIndex();
final float lineWidth = LINE_WIDTHS[lineWidthID];
vectorSymbol.setStrokeWidth(lineWidth);
//line color
Color color = this.lineColorButton.getColor();
vectorSymbol.setStrokeColor(color);
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
private void initComponents() {
java.awt.GridBagConstraints gridBagConstraints;
lineColorButton = new ika.gui.ColorButton();
lineWidthComboBox = new javax.swing.JComboBox();
lineTypeComboBox = new javax.swing.JComboBox();
setLayout(new java.awt.GridBagLayout());
lineColorButton.setToolTipText("Select the line color.");
lineColorButton.setIconHeight(14);
lineColorButton.setIconTextGap(0);
lineColorButton.setIconWidth(14);
lineColorButton.setMargin(null);
lineColorButton.setMaximumSize(null);
lineColorButton.setMinimumSize(new java.awt.Dimension(32, 32));
lineColorButton.setPreferredSize(new java.awt.Dimension(32, 32));
lineColorButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
LineAppearancePanel.this.actionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTH;
add(lineColorButton, gridBagConstraints);
lineWidthComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "0.25 pt", "0.5 pt", "1 pt", "1.5 pt", "2 pt", "3 pt", "5 pt", "10 pt" }));
lineWidthComboBox.setSelectedIndex(2);
lineWidthComboBox.setToolTipText("Select the line width.");
lineWidthComboBox.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
LineAppearancePanel.this.actionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTH;
gridBagConstraints.insets = new java.awt.Insets(0, 7, 0, 7);
add(lineWidthComboBox, gridBagConstraints);
lineTypeComboBox.setModel(this.loadLineIcons());
lineTypeComboBox.setToolTipText("Select solid or dashed lines.");
lineTypeComboBox.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
LineAppearancePanel.this.actionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTH;
add(lineTypeComboBox, gridBagConstraints);
}// </editor-fold>//GEN-END:initComponents
private void actionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_actionPerformed
this.fireAction(evt);
}//GEN-LAST:event_actionPerformed
public void addActionListener(ActionListener listener) {
actionListeners.add(ActionListener.class, listener);
}
public void removeActionListener(ActionListener listener) {
actionListeners.remove(ActionListener.class, listener);
}
protected void fireAction(ActionEvent actionEvent) {
// loop through each listener and pass on the event if needed
Object[] listeners = actionListeners.getListenerList();
int numListeners = listeners.length;
for (int i = 0; i < numListeners; i++) {
if (listeners[i] == ActionListener.class) {
// pass the event to the listeners event dispatch method
((ActionListener)listeners[i+1]).actionPerformed(actionEvent);
}
}
}
public boolean isEnabled () {
return this.lineColorButton.isEnabled();
}
public void setEnabled (boolean b) {
this.lineColorButton.setEnabled(b);
this.lineTypeComboBox.setEnabled(b);
this.lineWidthComboBox.setEnabled(b);
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private ika.gui.ColorButton lineColorButton;
private javax.swing.JComboBox lineTypeComboBox;
private javax.swing.JComboBox lineWidthComboBox;
// End of variables declaration//GEN-END:variables
}