blob: 6a569ca5b0acb3ae59f86ec24b21ae13f02b8b97 [file]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.netbeans.modules.form.editors;
import java.util.Vector;
import java.util.ResourceBundle;
import javax.swing.*;
import javax.swing.border.*;
//import org.openide.util.HelpCtx;
import org.openide.util.NbBundle;
/** A custom editor for array of Strings.
*
* @author Ian Formanek
*/
public class StringArrayCustomEditor extends javax.swing.JPanel {
// the bundle to use
private ResourceBundle bundle = NbBundle.getBundle (
StringArrayCustomEditor.class);
private Vector itemsVector;
private StringArrayCustomizable editor;
private static final int DEFAULT_WIDTH = 400;
static final long serialVersionUID =-4347656479280614636L;
/** Initializes the Form */
public StringArrayCustomEditor(StringArrayCustomizable sac) {
editor = sac;
itemsVector = new Vector ();
String[] array = editor.getStringArray ();
if (array != null)
for (int i = 0; i < array.length; i++)
itemsVector.addElement (array[i]);
initComponents ();
itemList.setCellRenderer (new EmptyStringListCellRenderer ());
itemList.setListData (itemsVector);
itemList.setSelectionMode (ListSelectionModel.SINGLE_SELECTION);
setBorder (new javax.swing.border.EmptyBorder (new java.awt.Insets(16, 8, 8, 0)));
buttonsPanel.setBorder (new javax.swing.border.EmptyBorder (new java.awt.Insets(0, 5, 5, 5)));
itemLabel.setText (bundle.getString ("CTL_Item"));
itemListLabel.setText(bundle.getString ("CTL_ItemList"));
addButton.setText (bundle.getString ("CTL_Add_StringArrayCustomEditor"));
changeButton.setText (bundle.getString ("CTL_Change_StringArrayCustomEditor"));
removeButton.setText (bundle.getString ("CTL_Remove"));
moveUpButton.setText (bundle.getString ("CTL_MoveUp"));
moveDownButton.setText (bundle.getString ("CTL_MoveDown"));
itemLabel.setDisplayedMnemonic(bundle.getString("CTL_Item_Mnemonic").charAt(0));
itemListLabel.setDisplayedMnemonic(bundle.getString("CTL_ItemList_Mnemonic").charAt(0));
addButton.setMnemonic(bundle.getString("CTL_Add_StringArrayCustomEditor_Mnemonic").charAt(0));
changeButton.setMnemonic(bundle.getString("CTL_Change_StringArrayCustomEditor_Mnemonic").charAt(0));
removeButton.setMnemonic(bundle.getString("CTL_Remove_Mnemonic").charAt(0));
moveUpButton.setMnemonic(bundle.getString("CTL_MoveUp_Mnemonic").charAt(0));
moveDownButton.setMnemonic(bundle.getString("CTL_MoveDown_Mnemonic").charAt(0));
getAccessibleContext().setAccessibleDescription(bundle.getString("ACSD_StringArrayCustomEditor"));
itemField.getAccessibleContext().setAccessibleDescription(bundle.getString("ACSD_CTL_Item"));
itemList.getAccessibleContext().setAccessibleDescription(bundle.getString("ACSD_CTL_ItemList"));
addButton.getAccessibleContext().setAccessibleDescription(bundle.getString("ACSD_CTL_Add_StringArrayCustomEditor"));
changeButton.getAccessibleContext().setAccessibleDescription(bundle.getString("ACSD_CTL_Change_StringArrayCustomEditor"));
removeButton.getAccessibleContext().setAccessibleDescription(bundle.getString("ACSD_CTL_Remove"));
moveUpButton.getAccessibleContext().setAccessibleDescription(bundle.getString("ACSD_CTL_MoveUp"));
moveDownButton.getAccessibleContext().setAccessibleDescription(bundle.getString("ACSD_CTL_MoveDown"));
updateButtons ();
// HelpCtx.setHelpIDString (this, StringArrayCustomEditor.class.getName ());
}
public java.awt.Dimension getPreferredSize () {
// ensure minimum width
java.awt.Dimension sup = super.getPreferredSize ();
return new java.awt.Dimension (Math.max (sup.width, DEFAULT_WIDTH), sup.height);
}
/** 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 FormEditor.
*/
private void initComponents() {//GEN-BEGIN:initComponents
editPanel = new javax.swing.JPanel();
itemListScroll = new javax.swing.JScrollPane();
itemList = new javax.swing.JList();
itemLabel = new javax.swing.JLabel();
itemField = new javax.swing.JTextField();
itemListLabel = new javax.swing.JLabel();
buttonsPanel = new javax.swing.JPanel();
addButton = new javax.swing.JButton();
changeButton = new javax.swing.JButton();
removeButton = new javax.swing.JButton();
jSeparator1 = new javax.swing.JSeparator();
moveUpButton = new javax.swing.JButton();
moveDownButton = new javax.swing.JButton();
paddingPanel = new javax.swing.JPanel();
setLayout(new java.awt.BorderLayout());
editPanel.setLayout(new java.awt.GridBagLayout());
java.awt.GridBagConstraints gridBagConstraints2;
itemList.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
public void valueChanged(javax.swing.event.ListSelectionEvent evt) {
itemListValueChanged(evt);
}
});
itemListScroll.setViewportView(itemList);
gridBagConstraints2 = new java.awt.GridBagConstraints();
gridBagConstraints2.gridx = 0;
gridBagConstraints2.gridy = 2;
gridBagConstraints2.gridwidth = 2;
gridBagConstraints2.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints2.weightx = 1.0;
gridBagConstraints2.weighty = 1.0;
editPanel.add(itemListScroll, gridBagConstraints2);
itemLabel.setText("item");
itemLabel.setLabelFor(itemField);
gridBagConstraints2 = new java.awt.GridBagConstraints();
gridBagConstraints2.insets = new java.awt.Insets(0, 0, 11, 12);
gridBagConstraints2.anchor = java.awt.GridBagConstraints.WEST;
editPanel.add(itemLabel, gridBagConstraints2);
gridBagConstraints2 = new java.awt.GridBagConstraints();
gridBagConstraints2.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints2.insets = new java.awt.Insets(0, 0, 11, 0);
editPanel.add(itemField, gridBagConstraints2);
itemListLabel.setText("jLabel1");
itemListLabel.setLabelFor(itemList);
gridBagConstraints2 = new java.awt.GridBagConstraints();
gridBagConstraints2.gridx = 0;
gridBagConstraints2.gridy = 1;
gridBagConstraints2.gridwidth = 2;
gridBagConstraints2.insets = new java.awt.Insets(0, 0, 2, 0);
gridBagConstraints2.anchor = java.awt.GridBagConstraints.WEST;
editPanel.add(itemListLabel, gridBagConstraints2);
add(editPanel, java.awt.BorderLayout.CENTER);
buttonsPanel.setLayout(new java.awt.GridBagLayout());
java.awt.GridBagConstraints gridBagConstraints1;
addButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
addButtonActionPerformed(evt);
}
});
gridBagConstraints1 = new java.awt.GridBagConstraints();
gridBagConstraints1.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints1.insets = new java.awt.Insets(0, 8, 0, 8);
gridBagConstraints1.weightx = 1.0;
buttonsPanel.add(addButton, gridBagConstraints1);
changeButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
changeButtonActionPerformed(evt);
}
});
gridBagConstraints1 = new java.awt.GridBagConstraints();
gridBagConstraints1.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints1.insets = new java.awt.Insets(8, 8, 0, 8);
gridBagConstraints1.weightx = 1.0;
buttonsPanel.add(changeButton, gridBagConstraints1);
removeButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
removeButtonActionPerformed(evt);
}
});
gridBagConstraints1 = new java.awt.GridBagConstraints();
gridBagConstraints1.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints1.insets = new java.awt.Insets(8, 8, 8, 8);
gridBagConstraints1.weightx = 1.0;
buttonsPanel.add(removeButton, gridBagConstraints1);
gridBagConstraints1 = new java.awt.GridBagConstraints();
gridBagConstraints1.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints1.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints1.insets = new java.awt.Insets(0, 4, 0, 4);
buttonsPanel.add(jSeparator1, gridBagConstraints1);
moveUpButton.setEnabled(false);
moveUpButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
moveUpButtonActionPerformed(evt);
}
});
gridBagConstraints1 = new java.awt.GridBagConstraints();
gridBagConstraints1.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints1.insets = new java.awt.Insets(8, 8, 0, 8);
gridBagConstraints1.weightx = 1.0;
buttonsPanel.add(moveUpButton, gridBagConstraints1);
moveDownButton.setEnabled(false);
moveDownButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
moveDownButtonActionPerformed(evt);
}
});
gridBagConstraints1 = new java.awt.GridBagConstraints();
gridBagConstraints1.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints1.insets = new java.awt.Insets(8, 8, 0, 8);
gridBagConstraints1.weightx = 1.0;
buttonsPanel.add(moveDownButton, gridBagConstraints1);
gridBagConstraints1 = new java.awt.GridBagConstraints();
gridBagConstraints1.weighty = 1.0;
buttonsPanel.add(paddingPanel, gridBagConstraints1);
add(buttonsPanel, java.awt.BorderLayout.EAST);
}//GEN-END:initComponents
private void changeButtonActionPerformed (java.awt.event.ActionEvent evt) {//GEN-FIRST:event_changeButtonActionPerformed
int sel = itemList.getSelectedIndex ();
String s = (String) itemsVector.elementAt (sel);
itemsVector.removeElementAt (sel);
itemsVector.insertElementAt (itemField.getText (), sel);
itemList.setListData (itemsVector);
itemList.setSelectedIndex (sel);
itemList.repaint ();
updateValue ();
}//GEN-LAST:event_changeButtonActionPerformed
private void moveDownButtonActionPerformed (java.awt.event.ActionEvent evt) {//GEN-FIRST:event_moveDownButtonActionPerformed
int sel = itemList.getSelectedIndex ();
String s = (String) itemsVector.elementAt (sel);
itemsVector.removeElementAt (sel);
itemsVector.insertElementAt (s, sel + 1);
itemList.setListData (itemsVector);
itemList.setSelectedIndex (sel + 1);
itemList.repaint ();
updateValue ();
}//GEN-LAST:event_moveDownButtonActionPerformed
private void moveUpButtonActionPerformed (java.awt.event.ActionEvent evt) {//GEN-FIRST:event_moveUpButtonActionPerformed
int sel = itemList.getSelectedIndex ();
String s = (String) itemsVector.elementAt (sel);
itemsVector.removeElementAt (sel);
itemsVector.insertElementAt (s, sel - 1);
itemList.setListData (itemsVector);
itemList.setSelectedIndex (sel - 1);
itemList.repaint ();
updateValue ();
}//GEN-LAST:event_moveUpButtonActionPerformed
private void removeButtonActionPerformed (java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeButtonActionPerformed
// Add your handling code here:
int currentIndex = itemList.getSelectedIndex ();
itemsVector.removeElementAt (currentIndex);
itemList.setListData (itemsVector);
// set new selection
if (itemsVector.size () != 0) {
if (currentIndex >= itemsVector.size ())
currentIndex = itemsVector.size () - 1;
itemList.setSelectedIndex (currentIndex);
}
itemList.repaint ();
updateValue ();
}//GEN-LAST:event_removeButtonActionPerformed
private void itemListValueChanged (javax.swing.event.ListSelectionEvent evt) {//GEN-FIRST:event_itemListValueChanged
// Add your handling code here:
updateButtons ();
int sel = itemList.getSelectedIndex ();
if (sel != -1) {
itemField.setText ((String) itemsVector.elementAt (sel));
}
}//GEN-LAST:event_itemListValueChanged
private void addButtonActionPerformed (java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addButtonActionPerformed
// Add your handling code here:
itemsVector.addElement (itemField.getText ());
itemList.setListData (itemsVector);
itemList.setSelectedIndex (itemsVector.size () - 1);
itemList.repaint ();
updateValue ();
}//GEN-LAST:event_addButtonActionPerformed
private void updateButtons () {
int sel = itemList.getSelectedIndex ();
if (sel == -1) {
removeButton.setEnabled (false);
moveUpButton.setEnabled (false);
moveDownButton.setEnabled (false);
changeButton.setEnabled (false);
} else {
removeButton.setEnabled (true);
moveUpButton.setEnabled (sel != 0);
moveDownButton.setEnabled (sel != itemsVector.size () - 1);
changeButton.setEnabled (true);
}
}
private void updateValue () {
String [] value = new String [itemsVector.size()];
itemsVector.copyInto (value);
editor.setStringArray (value);
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JPanel editPanel;
private javax.swing.JScrollPane itemListScroll;
private javax.swing.JList itemList;
private javax.swing.JLabel itemLabel;
private javax.swing.JTextField itemField;
private javax.swing.JLabel itemListLabel;
private javax.swing.JPanel buttonsPanel;
private javax.swing.JButton addButton;
private javax.swing.JButton changeButton;
private javax.swing.JButton removeButton;
private javax.swing.JSeparator jSeparator1;
private javax.swing.JButton moveUpButton;
private javax.swing.JButton moveDownButton;
private javax.swing.JPanel paddingPanel;
// End of variables declaration//GEN-END:variables
static class EmptyStringListCellRenderer extends JLabel implements ListCellRenderer {
protected static Border hasFocusBorder;
protected static Border noFocusBorder;
static {
hasFocusBorder = new LineBorder(UIManager.getColor("List.focusCellHighlight")); // NOI18N
noFocusBorder = new EmptyBorder(1, 1, 1, 1);
}
static final long serialVersionUID =487512296465844339L;
/** Creates a new NodeListCellRenderer */
public EmptyStringListCellRenderer () {
setOpaque (true);
setBorder (noFocusBorder);
}
/** This is the only method defined by ListCellRenderer. We just
* reconfigure the Jlabel each time we're called.
*/
public java.awt.Component getListCellRendererComponent(
JList list,
Object value, // value to display
int index, // cell index
boolean isSelected, // is the cell selected
boolean cellHasFocus) // the list and the cell have the focus
{
if (!(value instanceof String)) return this;
String text = (String)value;
if ("".equals (text)) text = NbBundle.getMessage (EmptyStringListCellRenderer.class, "CTL_Empty");
setText(text);
if (isSelected){
setBackground(UIManager.getColor("List.selectionBackground")); // NOI18N
setForeground(UIManager.getColor("List.selectionForeground")); // NOI18N
}
else {
setBackground(list.getBackground());
setForeground(list.getForeground());
}
setBorder(cellHasFocus ? hasFocusBorder : noFocusBorder);
return this;
}
}
}