diff options
author | upstream source tree <ports@midipix.org> | 2015-03-15 20:14:05 -0400 |
---|---|---|
committer | upstream source tree <ports@midipix.org> | 2015-03-15 20:14:05 -0400 |
commit | 554fd8c5195424bdbcabf5de30fdc183aba391bd (patch) | |
tree | 976dc5ab7fddf506dadce60ae936f43f58787092 /libjava/classpath/javax/swing/DefaultCellEditor.java | |
download | cbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.bz2 cbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.xz |
obtained gcc-4.6.4.tar.bz2 from upstream website;upstream
verified gcc-4.6.4.tar.bz2.sig;
imported gcc-4.6.4 source tree from verified upstream tarball.
downloading a git-generated archive based on the 'upstream' tag
should provide you with a source tree that is binary identical
to the one extracted from the above tarball.
if you have obtained the source via the command 'git clone',
however, do note that line-endings of files in your working
directory might differ from line-endings of the respective
files in the upstream repository.
Diffstat (limited to 'libjava/classpath/javax/swing/DefaultCellEditor.java')
-rw-r--r-- | libjava/classpath/javax/swing/DefaultCellEditor.java | 570 |
1 files changed, 570 insertions, 0 deletions
diff --git a/libjava/classpath/javax/swing/DefaultCellEditor.java b/libjava/classpath/javax/swing/DefaultCellEditor.java new file mode 100644 index 000000000..46f637071 --- /dev/null +++ b/libjava/classpath/javax/swing/DefaultCellEditor.java @@ -0,0 +1,570 @@ +/* DefaultCellEditor.java -- + Copyright (C) 2002, 2004, 2006, Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package javax.swing; + +import java.awt.Component; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.awt.event.MouseEvent; +import java.io.Serializable; +import java.util.EventObject; + +import javax.swing.JTable; +import javax.swing.JTextField; +import javax.swing.event.CellEditorListener; +import javax.swing.table.TableCellEditor; +import javax.swing.tree.TreeCellEditor; + +/** + * The default implementation of {@link TableCellEditor} and + * {@link TreeCellEditor}. It provides editor components for + * some standard object types. + * + * @author Andrew Selkirk + * @author Audrius Meskauskas + */ +public class DefaultCellEditor + extends AbstractCellEditor + implements TableCellEditor, TreeCellEditor +{ + private static final long serialVersionUID = 3564035141373880027L; + + /** + * This changeable module access the editor component in the component + * specific way. For instance, to set the value for JTextField, we need to + * call setText(String), and for JCheckBox we need to call + * setSelected(boolean). Each default editor has the component specific + * derivative of this class. These derivatives are private inner classes of + * the DefaultCellEditor. + * + * The editor delegate is also set for the editor component as the action + * listener. It listens for the events that indicate that editing has stopped. + */ + protected class EditorDelegate + implements ActionListener, ItemListener, Serializable + { + /** + * Use the serial version UID for interoperability. + */ + private static final long serialVersionUID = -1420007406015481933L; + + /** + * The object value (updated when getting and setting the value). + */ + protected Object value; + + /** + * Constructor EditorDelegate + */ + protected EditorDelegate() + { + // Nothing to do here. + } + + /** + * Set the value for the editor component. This method is normally + * overridden to set the value in the way, specific for the text + * component, check box or combo box. + * + * @param aValue the value to set (String, Boolean or Number). + */ + public void setValue(Object aValue) + { + value = aValue; + } + + /** + * Get the value for the editor component. This method is normally + * overridden to obtain the value in the way, specific for the text + * component, check box or combo box. + * + * @return value the value of the component (String, Boolean or Number). + */ + public Object getCellEditorValue() + { + return value; + } + + /** + * The default method returns true for the {@link MouseEvent} and false + * for any other events. + * + * @param event the event to check + * + * @return true if the passed event is the mouse event and false otherwise. + */ + public boolean isCellEditable(EventObject event) + { + if (event == null || !(event instanceof MouseEvent) || + (((MouseEvent) event).getClickCount() >= getClickCountToStart())) + return true; + return false; + } // isCellEditable() + + /** + * Returns true to indicate that the editing cell can be selected. + * + * The default method returns true without action but may be overridden + * in derived classes for more specific behavior. + * + * @param event unused in default method + * + * @return true always + */ + public boolean shouldSelectCell(EventObject event) + { + // return true to indicate that the editing cell may be selected + return true; + } + + /** + * Finish the cell editing session. This method notifies the registered + * cell editor listeners (including the table) that the editing has been + * stopped. + * + * @return boolean + */ + public boolean stopCellEditing() + { + fireEditingStopped(); + return true; + } // stopCellEditing() + + /** + * Cancel the cell editing session. This method notifies the registered + * cell editor listeners (including the table) that the editing has been + * canceled. + */ + public void cancelCellEditing() + { + fireEditingCanceled(); + } // cancelCellEditing() + + /** + * Start editing session and returns true to indicate the editing has begun. + * The default method returns true without action but may be overridden + * in derived classes for more specific behavior. + * + * @param event the event. + * + * @return true, always + */ + public boolean startCellEditing(EventObject event) + { + // return true to indicate that editing has begun + return true; + } // startCellEditing() + + /** + * This event is fired by the editor component (for instance, by pressing + * ENTER in the {@link JTextField}. The default method delegates call to + * the {@link #stopCellEditing}, finishing the editing session. + * + * @param event unused in default method + */ + public void actionPerformed(ActionEvent event) + { + stopCellEditing(); + } // actionPerformed() + + /** + * This event is fired by the editor component.The default method delegates + * call to the {@link #stopCellEditing}, finishing the editing session. + * + * @param event unused in default method + */ + public void itemStateChanged(ItemEvent event) + { + stopCellEditing(); + } // itemStateChanged() + + /** + * Notify the registered listeners (including the table) that the editing + * has been completed. + */ + void fireEditingStopped() + { + CellEditorListener[] listeners = getCellEditorListeners(); + for (int index = 0; index < listeners.length; index++) + listeners[index].editingStopped(changeEvent); + + } + + /** + * Notify the registered listeners (including the table) that the editing + * has been canceled. + */ + void fireEditingCanceled() + { + CellEditorListener[] listeners = getCellEditorListeners(); + for (int index = 0; index < listeners.length; index++) + listeners[index].editingCanceled(changeEvent); + } + } // EditorDelegate + + /** + * Provides getter and setter methods to work with the text component. + * + * @author Audrius Meskauskas (audriusa@Bioinformatics.org) + */ + private class JTextFieldDelegate extends EditorDelegate + { + /** + * Use the serial version UID for interoperability. + */ + private static final long serialVersionUID = 1; + + /** + * Set the value for the editor component. + * + * @param aValue the value to set (toString() will be called). + */ + public void setValue(Object aValue) + { + value = aValue; + JTextField f = (JTextField) editorComponent; + if (value == null) + f.setText(""); + else + f.setText(value.toString()); + } + + /** + * Get the value for the editor component. + * + * @return value the value of the component (String) + */ + public Object getCellEditorValue() + { + JTextField f = (JTextField) editorComponent; + return value = f.getText(); + } + } + + /** + * Provides getter and setter methods to work with the combo box. + * + * @author Audrius Meskauskas (audriusa@Bioinformatics.org) + */ + private class JComboBoxDelegate extends EditorDelegate + { + /** + * Use the serial version UID for interoperability. + */ + private static final long serialVersionUID = 1; + + /** + * Set the value for the editor component. + * + * @param aValue the value to set. + */ + public void setValue(Object aValue) + { + value = aValue; + JComboBox c = (JComboBox) editorComponent; + if (value != null) + c.setSelectedItem(value); + } + + /** + * Get the value for the editor component. + * + * @return value the value of the component (as String) + */ + public Object getCellEditorValue() + { + JComboBox c = (JComboBox) editorComponent; + return value = c.getSelectedItem(); + } + + /** + * Returns true to indicate that the editing cell can be selected. If the + * check box is not editable, expands it. If it is editable, brings + * focus to the editor field. + * + * @param event unused in default method + * + * @return true always + */ + public boolean shouldSelectCell(EventObject event) + { + JComboBox c = (JComboBox) editorComponent; + if (!c.isEditable) + c.showPopup(); + return true; + } + } + + /** + * Provides getter and setter methods to work with the check box. + * + * @author Audrius Meskauskas (audriusa@Bioinformatics.org) + */ + private class JCheckBoxDelegate extends EditorDelegate + { + /** + * Use the serial version UID for interoperability. + */ + private static final long serialVersionUID = 1; + + /** + * Set the value for the editor component. + * + * @param value the value to set (must be Boolean). + */ + public void setValue(Object value) + { + JCheckBox c = (JCheckBox) editorComponent; + + if (value == null) + c.setSelected(false); + else + c.setSelected( ((Boolean) value).booleanValue()); + } + + /** + * Get the value for the editor component. + * + * @return value the value of the component (must be CharSequence) + */ + public Object getCellEditorValue() + { + JCheckBox c = (JCheckBox) editorComponent; + value = c.isSelected() ? Boolean.TRUE : Boolean.FALSE; + return value; + } + } + + /** + * The Swing JComponent, performing the editing session. + */ + protected JComponent editorComponent; + + /** + * The editor delegate, responsible for listening the {@link #editorComponent} + * events and getting/setting its value. + */ + protected EditorDelegate delegate; + + /** + * The number of the mouse clicks, required to start the editing session. + */ + protected int clickCountToStart; + + /** + * Create the DefaultCellEditor that uses the text field as its editor + * component (appropriate for the text content) + * + * @param textfield the text field as will be used as the editor component + */ + public DefaultCellEditor(JTextField textfield) + { + editorComponent = textfield; + clickCountToStart = 2; + delegate = new JTextFieldDelegate(); + textfield.addActionListener(delegate); + } // DefaultCellEditor() + + /** + * Constructor DefaultCellEditor that uses the checkbox (appropriate + * for boolean values) + * + * @param checkbox the checkbox that will be used with this editor. + */ + public DefaultCellEditor(JCheckBox checkbox) + { + editorComponent = checkbox; + clickCountToStart = 1; + delegate = new JCheckBoxDelegate(); + checkbox.addActionListener(delegate); + } // DefaultCellEditor() + + /** + * Constructor DefaultCellEditor that uses the combo box. + * + * @param combobox the combo box that will be used with this editor. + */ + public DefaultCellEditor(JComboBox combobox) + { + editorComponent = combobox; + clickCountToStart = 1; + delegate = new JComboBoxDelegate(); + combobox.addActionListener(delegate); + } // DefaultCellEditor() + + /** + * Get the component that performs the editing sessions. It is the same + * component that was passed in constructor. + * + * @return the component, performing the editing sessions. + */ + public Component getComponent() + { + return editorComponent; + } // getComponent() + + /** + * Get the number of mouse clicks, required to start the editing session. + * + * @return int the number of mouse clicks, required to start the session + */ + public int getClickCountToStart() + { + return clickCountToStart; + } // getClickCountToStart() + + /** + * Set the number of mouse clicks, required to start the editing session. + * + * @param count the number of clicks, required to start the session + */ + public void setClickCountToStart(int count) + { + clickCountToStart = count; + } // setClickCountToStart() + + /** + * Get the value, currently being displayed by the editor component. The + * call is forwarded to the {@link #delegate}. + * + * @return Object the value (class depends on the editor component) + */ + public Object getCellEditorValue() + { + return delegate.getCellEditorValue(); + } // getCellEditorValue() + + /** + * Forwards call to the {@link #delegate}. + * + * @param event forwarded to the delegate. + * + * @return boolean returned by delegate + */ + public boolean isCellEditable(EventObject event) + { + return delegate.isCellEditable(event); + } // isCellEditable() + + /** + * Forwards call to the {@link #delegate}. + * + * @param event forwarded to the delegate. + * + * @return boolean returned by delegate + */ + public boolean shouldSelectCell(EventObject event) + { + return delegate.shouldSelectCell(event); + } // shouldSelectCell() + + /** + * Forwards call to the {@link #delegate}. + * + * @return boolean returned by delegate + */ + public boolean stopCellEditing() + { + return delegate.stopCellEditing(); + } // stopCellEditing() + + /** + * Forwards call to the {@link #delegate}. + */ + public void cancelCellEditing() + { + delegate.cancelCellEditing(); + } // cancelCellEditing() + + /** + * Sets an initial value for the editor. + * This will cause the editor to stopEditing and lose any partially + * edited value if the editor is editing when this method is called. + * Returns the component that should be added to the client's Component + * hierarchy. Once installed in the client's hierarchy this component will + * then be able to draw and receive user input. + * + * @param tree - the JTree that is asking the editor to edit; this + * parameter can be null + * @param value - the value of the cell to be edited + * @param isSelected - true is the cell is to be renderer with selection + * highlighting + * @param expanded - true if the node is expanded + * @param leaf - true if the node is a leaf node + * @param row - the row index of the node being edited + * + * @return Component the component for editing + */ + public Component getTreeCellEditorComponent(JTree tree, Object value, + boolean isSelected, + boolean expanded, boolean leaf, + int row) + { + delegate.setValue(value); + return editorComponent; + } // getTreeCellEditorComponent() + + /** + * Get the cell editor component that will perform the editing session. If + * returned once, the same component is also returned on the repetetive calls + * again (reused). + * + * @param table the table where the editing is performed + * @param value the current value of the table. It is set as the initial + * component value. + * @param isSelected if true, the cell is currently selected + * @param row the row of the cell being edited + * @param column the column of the cell being edited + * + * @return Component the component that will perform the editing session + */ + public Component getTableCellEditorComponent(JTable table, Object value, + boolean isSelected, int row, + int column) + { + // NOTE: as specified by Sun, we don't call new() everytime, we return + // editorComponent on each call to getTableCellEditorComponent or + // getTreeCellEditorComponent. + delegate.setValue(value); + return editorComponent; + } // getTableCellEditorComponent() + +} |