/*
* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores
* CA 94065 USA or visit www.oracle.com if you need additional information or
* have any questions.
*/
package com.sun.lwuit.resources.editor.editors;
import com.sun.lwuit.resource.util.LWUITComponentWrapper;
import com.sun.lwuit.Button;
import com.sun.lwuit.Image;
import com.sun.lwuit.plaf.Border;
import com.sun.lwuit.plaf.Accessor;
import com.sun.lwuit.resources.editor.ResourceEditorView;
import com.sun.lwuit.util.EditableResources;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JTextField;
import javax.swing.SpinnerNumberModel;
import javax.swing.SwingUtilities;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.AbstractDocument;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DocumentFilter;
/**
* Edits the border entry type from the "add theme entry form"
*
* @author Shai Almog
*/
public class BorderEditor extends javax.swing.JPanel {
private JColorChooser colorChooser;
private Border currentBorder;
private Border originalBorder;
private EditableResources resources;
private JComponent[][] comboSelectionEnabled;
private List<JComponent> colorComponents = new ArrayList<JComponent>();
/** Creates new form BorderEditor */
public BorderEditor(Border border, EditableResources resources) {
initComponents();
try {
help.setPage(getClass().getResource("/help/borderHelp.html"));
} catch (IOException ex) {
ex.printStackTrace();
}
originalBorder = border;
this.resources = resources;
// image border must have images available
if(resources.getImageResourceNames() == null || resources.getImageResourceNames().length < 1) {
borderType.removeItem("Image");
borderType.removeItem("Horizontal Image");
borderType.removeItem("Vertical Image");
} else {
ResourceEditorView.initImagesComboBox(topLeft, resources, false, false, true);
ResourceEditorView.initImagesComboBox(top, resources, false, false, true);
ResourceEditorView.initImagesComboBox(topRight, resources, false, false, true);
ResourceEditorView.initImagesComboBox(left, resources, false, false, true);
ResourceEditorView.initImagesComboBox(right, resources, false, false, true);
ResourceEditorView.initImagesComboBox(bottomRight, resources, false, false, true);
ResourceEditorView.initImagesComboBox(bottomLeft, resources, false, false, true);
ResourceEditorView.initImagesComboBox(bottom, resources, false, false, true);
ResourceEditorView.initImagesComboBox(center, resources, false, true, true);
}
JComponent[] all = new JComponent[] {
arcHeight, arcWidth, bottom, bottomLeft, bottomRight, center,
changeHighlightColor, changeLineColor, changeSecondaryHighlightColor,
changeSecondaryShadowColor, changeShadowColor, highlightColor, imageMode,
left, lineColor, thickness, raisedBorder, right, secondaryHighlightColor,
secondaryShadowColor, shadowColor, top, topLeft, topRight,
themeColors, imageBorderPreview
};
colorComponents.add(changeHighlightColor);
colorComponents.add(changeLineColor);
colorComponents.add(changeSecondaryHighlightColor);
colorComponents.add(changeSecondaryShadowColor);
colorComponents.add(changeShadowColor);
colorComponents.add(highlightColor);
colorComponents.add(lineColor);
colorComponents.add(secondaryHighlightColor);
colorComponents.add(secondaryShadowColor);
colorComponents.add(shadowColor);
colorComponents.add(bottom);
colorComponents.add(bottomLeft);
colorComponents.add(bottomRight);
colorComponents.add(left);
colorComponents.add(right);
colorComponents.add(topRight);
comboSelectionEnabled = new JComponent[][] {
// [Null], [Empty]
all, all,
// Bevel
{
changeHighlightColor, changeSecondaryHighlightColor,
changeSecondaryShadowColor, changeShadowColor, highlightColor, raisedBorder,
secondaryHighlightColor, secondaryShadowColor, shadowColor, themeColors
},
// Etched
{
changeHighlightColor, changeShadowColor, highlightColor, raisedBorder,
shadowColor, themeColors
},
// Line
{
lineColor, changeLineColor, themeColors, thickness
},
// Round
{
arcHeight, arcWidth, lineColor, changeLineColor, themeColors
},
// Image
{
bottom, bottomLeft, bottomRight, center,
imageMode, left, right, top, topLeft, topRight, imageBorderPreview
},
// Image Horizontal
{
center, left, right
},
// Image Vertical
{
bottom, center, top
},
};
arcWidth.setModel(new SpinnerNumberModel(1, 1, 100, 1));
arcHeight.setModel(new SpinnerNumberModel(1, 1, 100, 1));
thickness.setModel(new SpinnerNumberModel(1, 1, 100, 1));
okButton.setPreferredSize(cancelButton.getPreferredSize());
((AbstractDocument)highlightColor.getDocument()).setDocumentFilter(new ColorDocmentFilter());
new ButtonColorIcon(highlightColor, changeHighlightColor);
((AbstractDocument)lineColor.getDocument()).setDocumentFilter(new ColorDocmentFilter());
new ButtonColorIcon(lineColor, changeLineColor);
((AbstractDocument)shadowColor.getDocument()).setDocumentFilter(new ColorDocmentFilter());
new ButtonColorIcon(shadowColor, changeShadowColor);
((AbstractDocument)secondaryHighlightColor.getDocument()).setDocumentFilter(new ColorDocmentFilter());
new ButtonColorIcon(secondaryHighlightColor, changeSecondaryHighlightColor);
((AbstractDocument)secondaryShadowColor.getDocument()).setDocumentFilter(new ColorDocmentFilter());
new ButtonColorIcon(secondaryShadowColor, changeSecondaryShadowColor);
boolean fourColorBorder = false;
if(border != null) {
switch(Accessor.getType(border)) {
case Accessor.TYPE_EMPTY:
borderType.setSelectedIndex(1);
break;
case Accessor.TYPE_LINE:
borderType.setSelectedIndex(4);
break;
case Accessor.TYPE_ROUNDED:
case Accessor.TYPE_ROUNDED_PRESSED:
borderType.setSelectedIndex(5);
break;
case Accessor.TYPE_ETCHED_RAISED:
raisedBorder.setSelected(true);
case Accessor.TYPE_ETCHED_LOWERED:
borderType.setSelectedIndex(3);
break;
case Accessor.TYPE_BEVEL_RAISED:
raisedBorder.setSelected(true);
case Accessor.TYPE_BEVEL_LOWERED:
borderType.setSelectedIndex(2);
fourColorBorder = true;
break;
case Accessor.TYPE_IMAGE:
borderType.setSelectedIndex(6);
break;
case Accessor.TYPE_IMAGE_HORIZONTAL:
borderType.setSelectedIndex(7);
break;
case Accessor.TYPE_IMAGE_VERTICAL:
borderType.setSelectedIndex(8);
break;
}
}
if(border != null) {
arcHeight.setValue(new Integer(Math.max(1, Accessor.getArcHeight(border))));
arcWidth.setValue(new Integer(Math.max(1, Accessor.getArcWidth(border))));
highlightColor.setText(Integer.toHexString(Accessor.getColorA(border)));
lineColor.setText(Integer.toHexString(Accessor.getColorA(border)));
thickness.setValue(new Integer(Math.max(1, Accessor.getThickness(border))));
secondaryShadowColor.setText(Integer.toHexString(Accessor.getColorD(border)));
if(fourColorBorder) {
secondaryHighlightColor.setText(Integer.toHexString(Accessor.getColorB(border)));
shadowColor.setText(Integer.toHexString(Accessor.getColorC(border)));
} else {
secondaryHighlightColor.setText(Integer.toHexString(Accessor.getColorC(border)));
shadowColor.setText(Integer.toHexString(Accessor.getColorB(border)));
}
themeColors.setSelected(Accessor.isThemeColors(border));
Image[] images = Accessor.getImages(border);
if(images != null) {
if(images.length == 9) {
String[] imageNames = new String[9];
for(int iter = 0 ; iter < 9 ; iter++) {
imageNames[iter] = findImageName(images[iter]);
if(imageNames[iter] == null && iter < 8) {
// ok this means that this is probably a 3 image mode border...
imageMode.setSelected(true);
topLeft.setSelectedItem(images[4]);
top.setSelectedItem(images[0]);
center.setSelectedItem(images[8]);
updateBorder();
return;
}
}
// top, bottom, left, right, topLeft, topRight, bottomLeft,
// bottomRight, background
imageMode.setSelected(false);
top.setSelectedItem(images[0]);
bottom.setSelectedItem(images[1]);
left.setSelectedItem(images[2]);
right.setSelectedItem(images[3]);
topLeft.setSelectedItem(images[4]);
topRight.setSelectedItem(images[5]);
bottomLeft.setSelectedItem(images[6]);
bottomRight.setSelectedItem(images[7]);
center.setSelectedItem(images[8]);
} else {
String[] imageNames = new String[3];
for(int iter = 0 ; iter < 3 ; iter++) {
imageNames[iter] = findImageName(images[iter]);
}
if(Accessor.getType(border) == Accessor.TYPE_IMAGE_HORIZONTAL) {
left.setSelectedItem(images[0]);
right.setSelectedItem(images[1]);
center.setSelectedItem(images[2]);
} else {
top.setSelectedItem(images[0]);
bottom.setSelectedItem(images[1]);
center.setSelectedItem(images[2]);
}
}
}
}
updateBorder();
}
/**
* Finds the image name in the resource file or returns null
*/
private String findImageName(Image i) {
for(String name : resources.getImageResourceNames()) {
if(resources.getImage(name) == i) {
return name;
}
}
return null;
}
/** 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.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
okButton = new javax.swing.JButton();
cancelButton = new javax.swing.JButton();
jSplitPane1 = new javax.swing.JSplitPane();
jScrollPane1 = new javax.swing.JScrollPane();
help = new javax.swing.JTextPane();
jPanel2 = new javax.swing.JPanel();
changeHighlightColor = new javax.swing.JButton();
thickness = new javax.swing.JSpinner();
jLabel10 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
arcHeight = new javax.swing.JSpinner();
center = new javax.swing.JComboBox();
changeSecondaryHighlightColor = new javax.swing.JButton();
changeSecondaryShadowColor = new javax.swing.JButton();
right = new javax.swing.JComboBox();
left = new javax.swing.JComboBox();
topRight = new javax.swing.JComboBox();
shadowColor = new javax.swing.JTextField();
jLabel11 = new javax.swing.JLabel();
bottomRight = new javax.swing.JComboBox();
changeLineColor = new javax.swing.JButton();
borderType = new javax.swing.JComboBox();
jLabel3 = new javax.swing.JLabel();
secondaryShadowColor = new javax.swing.JTextField();
jLabel6 = new javax.swing.JLabel();
bottomLeft = new javax.swing.JComboBox();
jLabel1 = new javax.swing.JLabel();
jLabel4 = new javax.swing.JLabel();
highlightColor = new javax.swing.JTextField();
jLabel12 = new javax.swing.JLabel();
secondaryHighlightColor = new javax.swing.JTextField();
top = new javax.swing.JComboBox();
arcWidth = new javax.swing.JSpinner();
bottom = new javax.swing.JComboBox();
imageMode = new javax.swing.JCheckBox();
raisedBorder = new javax.swing.JCheckBox();
changeShadowColor = new javax.swing.JButton();
jLabel8 = new javax.swing.JLabel();
lineColor = new javax.swing.JTextField();
jLabel9 = new javax.swing.JLabel();
topLeft = new javax.swing.JComboBox();
themeColors = new javax.swing.JCheckBox();
imageBorderPreview = new LWUITComponentWrapper();
jLabel7 = new javax.swing.JLabel();
jLabel5 = new javax.swing.JLabel();
FormListener formListener = new FormListener();
setName("Form"); // NOI18N
setLayout(new java.awt.BorderLayout());
jPanel1.setName("jPanel1"); // NOI18N
okButton.setText("OK");
okButton.setName("okButton"); // NOI18N
okButton.addActionListener(formListener);
jPanel1.add(okButton);
cancelButton.setText("Cancel");
cancelButton.setName("cancelButton"); // NOI18N
cancelButton.addActionListener(formListener);
jPanel1.add(cancelButton);
add(jPanel1, java.awt.BorderLayout.SOUTH);
jSplitPane1.setDividerLocation(450);
jSplitPane1.setName("jSplitPane1"); // NOI18N
jSplitPane1.setPreferredSize(new java.awt.Dimension(650, 500));
jScrollPane1.setName("jScrollPane1"); // NOI18N
help.setContentType("text/html");
help.setEditable(false);
help.setName("help"); // NOI18N
jScrollPane1.setViewportView(help);
jSplitPane1.setRightComponent(jScrollPane1);
jPanel2.setMinimumSize(new java.awt.Dimension(50, 50));
jPanel2.setName("jPanel2"); // NOI18N
jPanel2.setOpaque(false);
changeHighlightColor.setText("...");
changeHighlightColor.setEnabled(false);
changeHighlightColor.setName("changeHighlightColor"); // NOI18N
thickness.setEnabled(false);
thickness.setName("thickness"); // NOI18N
thickness.addChangeListener(formListener);
jLabel10.setText("Images");
jLabel10.setName("jLabel10"); // NOI18N
jLabel2.setText("Color");
jLabel2.setName("jLabel2"); // NOI18N
arcHeight.setEnabled(false);
arcHeight.setName("arcHeight"); // NOI18N
arcHeight.addChangeListener(formListener);
center.setName("center"); // NOI18N
center.addActionListener(formListener);
changeSecondaryHighlightColor.setText("...");
changeSecondaryHighlightColor.setEnabled(false);
changeSecondaryHighlightColor.setName("changeSecondaryHighlightColor"); // NOI18N
changeSecondaryShadowColor.setText("...");
changeSecondaryShadowColor.setEnabled(false);
changeSecondaryShadowColor.setName("changeSecondaryShadowColor"); // NOI18N
right.setName("right"); // NOI18N
right.addActionListener(formListener);
left.setName("left"); // NOI18N
left.addActionListener(formListener);
topRight.setName("topRight"); // NOI18N
topRight.addActionListener(formListener);
shadowColor.setText("000000");
shadowColor.setEnabled(false);
shadowColor.setName("shadowColor"); // NOI18N
jLabel11.setText("Image Border");
jLabel11.setName("jLabel11"); // NOI18N
bottomRight.setName("bottomRight"); // NOI18N
bottomRight.addActionListener(formListener);
changeLineColor.setText("...");
changeLineColor.setEnabled(false);
changeLineColor.setName("changeLineColor"); // NOI18N
borderType.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "[Null]", "[Empty]", "Bevel", "Etched", "Line", "Round", "Image", "Horizontal Image", "Vertical Image" }));
borderType.setName("borderType"); // NOI18N
borderType.addActionListener(formListener);
jLabel3.setText("Highlight Color");
jLabel3.setName("jLabel3"); // NOI18N
secondaryShadowColor.setText("000000");
secondaryShadowColor.setEnabled(false);
secondaryShadowColor.setName("secondaryShadowColor"); // NOI18N
jLabel6.setText("Secondary");
jLabel6.setName("jLabel6"); // NOI18N
bottomLeft.setName("bottomLeft"); // NOI18N
bottomLeft.addActionListener(formListener);
jLabel1.setText("Type");
jLabel1.setName("jLabel1"); // NOI18N
jLabel4.setText("Shadow Color");
jLabel4.setName("jLabel4"); // NOI18N
highlightColor.setText("000000");
highlightColor.setEnabled(false);
highlightColor.setName("highlightColor"); // NOI18N
jLabel12.setText("Thickness");
jLabel12.setName("jLabel12"); // NOI18N
secondaryHighlightColor.setText("000000");
secondaryHighlightColor.setEnabled(false);
secondaryHighlightColor.setName("secondaryHighlightColor"); // NOI18N
top.setName("top"); // NOI18N
top.addActionListener(formListener);
arcWidth.setEnabled(false);
arcWidth.setName("arcWidth"); // NOI18N
arcWidth.addChangeListener(formListener);
bottom.setName("bottom"); // NOI18N
bottom.addActionListener(formListener);
imageMode.setText("3 Image Mode");
imageMode.setEnabled(false);
imageMode.setMargin(new java.awt.Insets(0, 0, 0, 0));
imageMode.setName("imageMode"); // NOI18N
imageMode.addActionListener(formListener);
raisedBorder.setEnabled(false);
raisedBorder.setMargin(new java.awt.Insets(0, 0, 0, 0));
raisedBorder.setName("raisedBorder"); // NOI18N
raisedBorder.addActionListener(formListener);
changeShadowColor.setText("...");
changeShadowColor.setEnabled(false);
changeShadowColor.setName("changeShadowColor"); // NOI18N
jLabel8.setText("Arc Width");
jLabel8.setName("jLabel8"); // NOI18N
lineColor.setText("000000");
lineColor.setEnabled(false);
lineColor.setName("lineColor"); // NOI18N
jLabel9.setText("Arc Height");
jLabel9.setName("jLabel9"); // NOI18N
topLeft.setName("topLeft"); // NOI18N
topLeft.addActionListener(formListener);
themeColors.setText("Theme Colors");
themeColors.setEnabled(false);
themeColors.setName("themeColors"); // NOI18N
themeColors.addActionListener(formListener);
imageBorderPreview.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
imageBorderPreview.setName("imageBorderPreview"); // NOI18N
imageBorderPreview.setPreferredSize(new java.awt.Dimension(200, 80));
jLabel7.setText("Raised");
jLabel7.setName("jLabel7"); // NOI18N
jLabel5.setText("Secondary");
jLabel5.setName("jLabel5"); // NOI18N
org.jdesktop.layout.GroupLayout jPanel2Layout = new org.jdesktop.layout.GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(jPanel2Layout.createSequentialGroup()
.addContainerGap()
.add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(jLabel1)
.add(jLabel2)
.add(jLabel12)
.add(jLabel8)
.add(jLabel3)
.add(jLabel4)
.add(jLabel7)
.add(jLabel10)
.add(jLabel11))
.add(6, 6, 6)
.add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(imageBorderPreview, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 324, Short.MAX_VALUE)
.add(jPanel2Layout.createSequentialGroup()
.add(bottomLeft, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(bottom, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(6, 6, 6)
.add(bottomRight, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.add(jPanel2Layout.createSequentialGroup()
.add(left, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(center, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(6, 6, 6)
.add(right, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.add(jPanel2Layout.createSequentialGroup()
.add(topLeft, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 104, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(top, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(6, 6, 6)
.add(topRight, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.add(jPanel2Layout.createSequentialGroup()
.add(imageMode)
.add(235, 235, 235))
.add(jPanel2Layout.createSequentialGroup()
.add(raisedBorder)
.add(307, 307, 307))
.add(jPanel2Layout.createSequentialGroup()
.add(shadowColor, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(changeShadowColor)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(jLabel6)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(secondaryShadowColor, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(changeSecondaryShadowColor)
.add(79, 79, 79))
.add(jPanel2Layout.createSequentialGroup()
.add(highlightColor, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(changeHighlightColor)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(jLabel5)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(secondaryHighlightColor, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(changeSecondaryHighlightColor)
.add(79, 79, 79))
.add(jPanel2Layout.createSequentialGroup()
.add(arcWidth, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 42, Short.MAX_VALUE)
.add(56, 56, 56)
.add(jLabel9)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(arcHeight, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 42, Short.MAX_VALUE)
.add(130, 130, 130))
.add(jPanel2Layout.createSequentialGroup()
.add(thickness, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 324, Short.MAX_VALUE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED))
.add(jPanel2Layout.createSequentialGroup()
.add(lineColor)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(changeLineColor)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(themeColors)
.add(134, 134, 134))
.add(jPanel2Layout.createSequentialGroup()
.add(borderType, 0, 324, Short.MAX_VALUE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)))
.add(296, 296, 296))
);
jPanel2Layout.linkSize(new java.awt.Component[] {arcHeight, arcWidth, highlightColor, lineColor, secondaryHighlightColor, secondaryShadowColor, shadowColor}, org.jdesktop.layout.GroupLayout.HORIZONTAL);
jPanel2Layout.linkSize(new java.awt.Component[] {changeHighlightColor, changeLineColor, changeSecondaryHighlightColor, changeSecondaryShadowColor, changeShadowColor}, org.jdesktop.layout.GroupLayout.HORIZONTAL);
jPanel2Layout.linkSize(new java.awt.Component[] {bottom, bottomLeft, bottomRight, center, left, right, top, topLeft, topRight}, org.jdesktop.layout.GroupLayout.HORIZONTAL);
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(jPanel2Layout.createSequentialGroup()
.addContainerGap()
.add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(jPanel2Layout.createSequentialGroup()
.add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
.add(jLabel1)
.add(borderType, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
.add(jLabel2)
.add(lineColor, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(changeLineColor)
.add(themeColors))
.add(3, 3, 3)
.add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
.add(jLabel12)
.add(thickness, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
.add(jLabel8)
.add(arcWidth, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(jLabel9)
.add(arcHeight, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
.add(jLabel3)
.add(highlightColor, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(changeHighlightColor)
.add(jLabel5)
.add(secondaryHighlightColor, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(changeSecondaryHighlightColor))
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
.add(jLabel4)
.add(shadowColor, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(changeShadowColor)
.add(jLabel6)
.add(secondaryShadowColor, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(changeSecondaryShadowColor))
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(raisedBorder)
.add(jLabel7))
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
.add(jLabel10)
.add(imageMode))
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(jPanel2Layout.createSequentialGroup()
.add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
.add(topLeft, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 36, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(top, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(topRight, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
.add(left, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(center, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(right, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)))
.add(jLabel11)))
.add(jPanel2Layout.createSequentialGroup()
.add(288, 288, 288)
.add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
.add(bottomLeft, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(bottom, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(bottomRight, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))))
.add(18, 18, 18)
.add(imageBorderPreview, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 60, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
jPanel2Layout.linkSize(new java.awt.Component[] {bottom, bottomLeft, bottomRight, center, left, right, top, topLeft, topRight}, org.jdesktop.layout.GroupLayout.VERTICAL);
jSplitPane1.setLeftComponent(jPanel2);
add(jSplitPane1, java.awt.BorderLayout.CENTER);
}
// Code for dispatching events from components to event handlers.
private class FormListener implements java.awt.event.ActionListener, javax.swing.event.ChangeListener {
FormListener() {}
public void actionPerformed(java.awt.event.ActionEvent evt) {
if (evt.getSource() == borderType) {
BorderEditor.this.borderTypeActionPerformed(evt);
}
else if (evt.getSource() == raisedBorder) {
BorderEditor.this.raisedBorderActionPerformed(evt);
}
else if (evt.getSource() == imageMode) {
BorderEditor.this.imageModeActionPerformed(evt);
}
else if (evt.getSource() == okButton) {
BorderEditor.this.okButtonActionPerformed(evt);
}
else if (evt.getSource() == cancelButton) {
BorderEditor.this.cancelButtonActionPerformed(evt);
}
else if (evt.getSource() == themeColors) {
BorderEditor.this.themeColorsActionPerformed(evt);
}
else if (evt.getSource() == topLeft) {
BorderEditor.this.topLeftActionPerformed(evt);
}
else if (evt.getSource() == top) {
BorderEditor.this.topActionPerformed(evt);
}
else if (evt.getSource() == topRight) {
BorderEditor.this.topRightActionPerformed(evt);
}
else if (evt.getSource() == left) {
BorderEditor.this.leftActionPerformed(evt);
}
else if (evt.getSource() == center) {
BorderEditor.this.centerActionPerformed(evt);
}
else if (evt.getSource() == right) {
BorderEditor.this.rightActionPerformed(evt);
}
else if (evt.getSource() == bottomLeft) {
BorderEditor.this.bottomLeftActionPerformed(evt);
}
else if (evt.getSource() == bottom) {
BorderEditor.this.bottomActionPerformed(evt);
}
else if (evt.getSource() == bottomRight) {
BorderEditor.this.bottomRightActionPerformed(evt);
}
}
public void stateChanged(javax.swing.event.ChangeEvent evt) {
if (evt.getSource() == arcWidth) {
BorderEditor.this.arcWidthStateChanged(evt);
}
else if (evt.getSource() == arcHeight) {
BorderEditor.this.arcHeightStateChanged(evt);
}
else if (evt.getSource() == thickness) {
BorderEditor.this.thicknessStateChanged(evt);
}
}
}// </editor-fold>//GEN-END:initComponents
private void borderTypeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_borderTypeActionPerformed
updateBorder();
String entry = "";
switch(borderType.getSelectedIndex()) {
case 0:
case 1:
entry = "empty";
break;
case 2:
entry = "bevel";
break;
case 3:
entry = "etched";
break;
case 4:
entry = "line";
break;
case 5:
entry = "round";
break;
case 6:
case 7:
case 8:
entry = "image";
break;
}
try {
help.setPage(getClass().getResource("/help/borderHelp.html").toExternalForm() + "#" + entry);
} catch (IOException ex) {
ex.printStackTrace();
}
}//GEN-LAST:event_borderTypeActionPerformed
private void updateBorder() {
updateBorder(true);
}
private Image getButtonImageBorderIconNotNull(JComboBox b) {
Image i = (Image)b.getSelectedItem();
if(i == null) {
return resources.getImage(resources.getImageResourceNames()[0]);
}
return i;
}
private Image getButtonImageBorderIcon(JComboBox b) {
return (Image)b.getSelectedItem();
}
private void updateBorder(boolean updateEnabled) {
if(updateEnabled) {
okButton.setEnabled(true);
for(JComponent c : comboSelectionEnabled[0]) {
c.setEnabled(false);
}
if(borderType.getSelectedIndex() > 1) {
List<JComponent> colorElements = colorComponents;
if(borderType.getSelectedIndex() == 6 && !imageMode.isSelected()) {
colorElements = new ArrayList<JComponent>();
} else {
if(borderType.getSelectedIndex() < 6 && !themeColors.isSelected()) {
colorElements = new ArrayList<JComponent>();
} else {
if(borderType.getSelectedIndex() > 6) {
colorElements = new ArrayList<JComponent>();
}
}
}
for(JComponent c : comboSelectionEnabled[borderType.getSelectedIndex()]) {
// if colors arrive from the theme then don't enable any color related element
c.setEnabled(!colorElements.contains(c));
}
}
}
switch(borderType.getSelectedIndex()) {
case 0:
// null border
currentBorder = null;
break;
case 1:
// empty border
currentBorder = Border.getEmpty();
break;
case 2:
// bevel border
if(themeColors.isSelected()) {
if(raisedBorder.isSelected()) {
currentBorder = Border.createBevelRaised();
} else {
currentBorder = Border.createBevelLowered();
}
} else {
if(raisedBorder.isSelected()) {
currentBorder = Border.createBevelRaised(getColor(highlightColor), getColor(secondaryHighlightColor),
getColor(shadowColor), getColor(secondaryShadowColor));
} else {
currentBorder = Border.createBevelLowered(getColor(highlightColor), getColor(secondaryHighlightColor),
getColor(shadowColor), getColor(secondaryShadowColor));
}
}
break;
case 3:
// etched border
if(themeColors.isSelected()) {
if(raisedBorder.isSelected()) {
currentBorder = Border.createEtchedRaised();
} else {
currentBorder = Border.createEtchedLowered();
}
} else {
if(raisedBorder.isSelected()) {
currentBorder = Border.createEtchedRaised(getColor(highlightColor), getColor(shadowColor));
} else {
currentBorder = Border.createEtchedLowered(getColor(highlightColor), getColor(shadowColor));
}
}
break;
case 6: {
// image border
Image c = getButtonImageBorderIcon(this.center);
if(imageMode.isSelected()) {
currentBorder = Border.createImageBorder(getButtonImageBorderIconNotNull(top),
getButtonImageBorderIconNotNull(topLeft), c);
} else {
currentBorder = Border.createImageBorder(
getButtonImageBorderIconNotNull(top),
getButtonImageBorderIconNotNull(bottom),
getButtonImageBorderIconNotNull(left),
getButtonImageBorderIconNotNull(right),
getButtonImageBorderIconNotNull(topLeft),
getButtonImageBorderIconNotNull(topRight),
getButtonImageBorderIconNotNull(bottomLeft),
getButtonImageBorderIconNotNull(bottomRight),
c);
}
break;
}
case 7: {
Image c = getButtonImageBorderIcon(this.center);
currentBorder = Border.createHorizonalImageBorder(
getButtonImageBorderIconNotNull(left),
getButtonImageBorderIconNotNull(right),
c);
break;
}
case 8: {
Image c = getButtonImageBorderIcon(this.center);
currentBorder = Border.createVerticalImageBorder(
getButtonImageBorderIconNotNull(top),
getButtonImageBorderIconNotNull(bottom),
c);
break;
}
case 4:
// line border
if(themeColors.isSelected()) {
currentBorder = Border.createLineBorder(((Number)thickness.getValue()).intValue());
} else {
currentBorder = Border.createLineBorder(((Number)thickness.getValue()).intValue(), getColor(lineColor));
}
break;
case 5:
// round border
if(themeColors.isSelected()) {
currentBorder = Border.createRoundBorder(((Number)arcWidth.getValue()).intValue(),
((Number)arcHeight.getValue()).intValue());
} else {
currentBorder = Border.createRoundBorder(((Number)arcWidth.getValue()).intValue(),
((Number)arcHeight.getValue()).intValue(), getColor(lineColor));
}
break;
}
LWUITComponentWrapper w = (LWUITComponentWrapper)imageBorderPreview;
Button b = (Button)w.getLWUITComponent();
b.setPreferredSize(new com.sun.lwuit.geom.Dimension(200, 50));
b.getSelectedStyle().setPadding(20, 20, 20, 20);
b.getUnselectedStyle().setPadding(20, 20, 20, 20);
b.getSelectedStyle().setBorder(currentBorder);
b.getUnselectedStyle().setBorder(currentBorder);
b.getParent().revalidate();
}
private int getColor(JTextField f) {
return Integer.decode("0x" + f.getText()).intValue();
}
private void okButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_okButtonActionPerformed
((JDialog)SwingUtilities.windowForComponent(this)).dispose();
}//GEN-LAST:event_okButtonActionPerformed
private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelButtonActionPerformed
currentBorder = originalBorder;
((JDialog)SwingUtilities.windowForComponent(this)).dispose();
}//GEN-LAST:event_cancelButtonActionPerformed
private void themeColorsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_themeColorsActionPerformed
updateBorder();
}//GEN-LAST:event_themeColorsActionPerformed
private void arcWidthStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_arcWidthStateChanged
updateBorder();
}//GEN-LAST:event_arcWidthStateChanged
private void arcHeightStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_arcHeightStateChanged
updateBorder();
}//GEN-LAST:event_arcHeightStateChanged
private void raisedBorderActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_raisedBorderActionPerformed
updateBorder();
}//GEN-LAST:event_raisedBorderActionPerformed
private void imageModeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_imageModeActionPerformed
updateBorder();
}//GEN-LAST:event_imageModeActionPerformed
private void thicknessStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_thicknessStateChanged
updateBorder();
}//GEN-LAST:event_thicknessStateChanged
private void topLeftActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_topLeftActionPerformed
updateBorder();
}//GEN-LAST:event_topLeftActionPerformed
private void topActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_topActionPerformed
updateBorder();
}//GEN-LAST:event_topActionPerformed
private void topRightActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_topRightActionPerformed
updateBorder();
}//GEN-LAST:event_topRightActionPerformed
private void leftActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_leftActionPerformed
updateBorder();
}//GEN-LAST:event_leftActionPerformed
private void centerActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_centerActionPerformed
updateBorder();
}//GEN-LAST:event_centerActionPerformed
private void rightActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rightActionPerformed
updateBorder();
}//GEN-LAST:event_rightActionPerformed
private void bottomLeftActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bottomLeftActionPerformed
updateBorder();
}//GEN-LAST:event_bottomLeftActionPerformed
private void bottomActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bottomActionPerformed
updateBorder();
}//GEN-LAST:event_bottomActionPerformed
private void bottomRightActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bottomRightActionPerformed
updateBorder();
}//GEN-LAST:event_bottomRightActionPerformed
public Border getResult() {
return currentBorder;
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JSpinner arcHeight;
private javax.swing.JSpinner arcWidth;
private javax.swing.JComboBox borderType;
private javax.swing.JComboBox bottom;
private javax.swing.JComboBox bottomLeft;
private javax.swing.JComboBox bottomRight;
private javax.swing.JButton cancelButton;
private javax.swing.JComboBox center;
private javax.swing.JButton changeHighlightColor;
private javax.swing.JButton changeLineColor;
private javax.swing.JButton changeSecondaryHighlightColor;
private javax.swing.JButton changeSecondaryShadowColor;
private javax.swing.JButton changeShadowColor;
private javax.swing.JTextPane help;
private javax.swing.JTextField highlightColor;
private javax.swing.JLabel imageBorderPreview;
private javax.swing.JCheckBox imageMode;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel10;
private javax.swing.JLabel jLabel11;
private javax.swing.JLabel jLabel12;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JLabel jLabel7;
private javax.swing.JLabel jLabel8;
private javax.swing.JLabel jLabel9;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JSplitPane jSplitPane1;
private javax.swing.JComboBox left;
private javax.swing.JTextField lineColor;
private javax.swing.JButton okButton;
private javax.swing.JCheckBox raisedBorder;
private javax.swing.JComboBox right;
private javax.swing.JTextField secondaryHighlightColor;
private javax.swing.JTextField secondaryShadowColor;
private javax.swing.JTextField shadowColor;
private javax.swing.JCheckBox themeColors;
private javax.swing.JSpinner thickness;
private javax.swing.JComboBox top;
private javax.swing.JComboBox topLeft;
private javax.swing.JComboBox topRight;
// End of variables declaration//GEN-END:variables
class ColorDocmentFilter extends DocumentFilter {
public void remove(DocumentFilter.FilterBypass fb, int offset, int length) throws
BadLocationException {
if(fb.getDocument().getLength() > length) {
fb.remove(offset, length);
}
updateBorder(false);
}
public void insertString(DocumentFilter.FilterBypass fb, int offset, String string,
AttributeSet attr) throws BadLocationException {
if(fb.getDocument().getLength() + string.length() > 6) {
return;
}
for(int iter = 0 ; iter < string.length() ; iter++) {
char c = string.charAt(iter);
if(!(Character.isDigit(c) || (c >= 'A' && c <= 'F') || (c >= 'a' && c <= 'f'))) {
return;
}
}
fb.insertString(offset, string, attr);
updateBorder(false);
}
public void replace(DocumentFilter.FilterBypass fb, int offset, int length, String text,
AttributeSet attrs) throws BadLocationException {
if(fb.getDocument().getLength() - length + text.length() > 6) {
return;
}
for(int iter = 0 ; iter < text.length() ; iter++) {
char c = text.charAt(iter);
if(!(Character.isDigit(c) || (c >= 'A' && c <= 'F') || (c >= 'a' && c <= 'f'))) {
return;
}
}
fb.replace(offset, length, text, attrs);
updateBorder(false);
}
}
class ButtonColorIcon extends ColorIcon implements DocumentListener, ActionListener {
private JTextField t;
private JButton btn;
public ButtonColorIcon(JTextField t, JButton btn) {
super(null);
this.t = t;
this.btn = btn;
btn.setIcon(this);
btn.addActionListener(this);
t.getDocument().addDocumentListener(this);
}
protected String getColorString(java.awt.Component c) {
return t.getText();
}
public void insertUpdate(DocumentEvent e) {
btn.repaint();
}
public void removeUpdate(DocumentEvent e) {
btn.repaint();
}
public void changedUpdate(DocumentEvent e) {
btn.repaint();
}
public void actionPerformed(ActionEvent e) {
int color = Integer.decode("0x" + t.getText());
if(colorChooser == null) {
colorChooser = new JColorChooser();
}
colorChooser.setColor(color);
JDialog dlg = JColorChooser.createDialog(btn, "Pick color", true, colorChooser, new ActionListener() {
public void actionPerformed(ActionEvent e) {
int i = colorChooser.getColor().getRGB() & 0xffffff;
t.setText(Integer.toHexString(i));
}
}, null);
dlg.setLocationByPlatform(true);
dlg.pack();
dlg.setVisible(true);
updateBorder();
}
}
}