org.opensourcephysics.tools
Class FunctionEditor

java.lang.Object
  extended by java.awt.Component
      extended by java.awt.Container
          extended by javax.swing.JComponent
              extended by javax.swing.JPanel
                  extended by org.opensourcephysics.tools.FunctionEditor
All Implemented Interfaces:
java.awt.image.ImageObserver, java.awt.MenuContainer, java.beans.PropertyChangeListener, java.io.Serializable, java.util.EventListener, javax.accessibility.Accessible
Direct Known Subclasses:
DataFunctionEditor, ParamEditor, UserFunctionEditor

public class FunctionEditor
extends javax.swing.JPanel
implements java.beans.PropertyChangeListener

A JPanel that manages a table of objects with editable names and expressions.

Author:
Douglas Brown
See Also:
Serialized Form

Nested Class Summary
protected  class FunctionEditor.DefaultEdit
          A class to undo/redo edits.
 class FunctionEditor.Table
          Class description
protected  class FunctionEditor.TableModel
          The table model.
 
Nested classes/interfaces inherited from class javax.swing.JPanel
javax.swing.JPanel.AccessibleJPanel
 
Nested classes/interfaces inherited from class javax.swing.JComponent
javax.swing.JComponent.AccessibleJComponent
 
Nested classes/interfaces inherited from class java.awt.Container
java.awt.Container.AccessibleAWTContainer
 
Nested classes/interfaces inherited from class java.awt.Component
java.awt.Component.AccessibleAWTComponent, java.awt.Component.BaselineResizeBehavior, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
 
Field Summary
static int ADD_EDIT
           
protected  boolean anglesInDegrees
           
protected  javax.swing.JPanel buttonPanel
           
protected  java.util.Collection<java.lang.Object> circularErrors
           
protected  javax.swing.JButton copyButton
           
protected  javax.swing.AbstractButton[] customButtons
           
protected  javax.swing.JButton cutButton
           
static java.lang.String DEGREES
           
protected static java.lang.String[] editTypes
           
protected  java.util.Collection<java.lang.Object> errors
           
protected  java.util.List<java.lang.Object> evaluate
           
static int EXPRESSION_EDIT
           
protected  java.util.HashSet<java.lang.String> forbiddenNames
           
protected  FunctionPanel functionPanel
           
static int NAME_EDIT
           
protected  java.lang.String[] names
           
protected  javax.swing.JButton newButton
           
protected  java.util.ArrayList<java.lang.Object> objects
           
static java.lang.String OMEGA
           
protected  ParamEditor paramEditor
           
protected  javax.swing.JButton pasteButton
           
protected  boolean removablesAtTop
           
static int REMOVE_EDIT
           
protected  java.util.ArrayList<java.lang.Object> sortedObjects
           
protected  FunctionEditor.Table table
           
protected  org.opensourcephysics.tools.FunctionEditor.CellEditor tableCellEditor
           
protected  org.opensourcephysics.tools.FunctionEditor.CellRenderer tableCellRenderer
           
protected  FunctionEditor.TableModel tableModel
           
protected  javax.swing.JScrollPane tableScroller
           
static java.lang.String THETA
           
protected  boolean usePopupEditor
           
 
Fields inherited from class javax.swing.JComponent
accessibleContext, listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
 
Fields inherited from class java.awt.Component
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
 
Fields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
 
Constructor Summary
FunctionEditor()
          No-arg constructor
 
Method Summary
 java.lang.Object addObject(java.lang.Object obj, boolean postEdit)
          Adds an object.
 java.lang.Object addObject(java.lang.Object obj, int row, boolean postEdit, boolean firePropertyChange)
          Adds an object at a specified row.
protected  boolean containsInvalidExpressions()
          Returns true if any objects have invalid expressions.
protected  void createGUI()
          Creates the GUI.
protected  java.lang.Object createObject(java.lang.String name, java.lang.String expression, java.lang.Object obj)
          Creates an object with specified name and expression.
protected  java.lang.Object createUniqueObject(java.lang.Object obj, java.lang.String proposedName, boolean confirmChanges)
          Creates an object with a unique name.
 void evaluateAll()
          Evaluates all current objects.
static java.lang.String format(double value, double zeroLevel)
          Formats a number.
protected  XMLControl[] getClipboardContents()
          Gets the clipboard contents.
protected  java.lang.String getDefaultName()
          Returns the default name for newly created objects.
 java.lang.String getExpression(java.lang.Object obj)
          Returns the expression of the object.
 java.lang.String getName(java.lang.Object obj)
          Returns the name of the object.
 java.lang.String[] getNames()
          Gets an array containing the names of the objects.
 java.lang.Object getObject(java.lang.String name)
          Gets an existing object with specified name.
 java.util.List<java.lang.Object> getObjects()
          Gets a shallow clone of the objects list.
protected  ParamEditor getParamEditor()
          Gets the param editor that defines parameters for functions.
protected  int getPartlyEditableRowCount()
          Returns the number of editable rows.
 java.awt.Dimension getPreferredSize()
          Override getPreferredSize().
protected  java.util.Set<java.lang.String> getReferences(java.lang.String name, java.util.Set<java.lang.String> references)
          Gets the names of functions referenced in a named function expression either directly or indirectly.
protected  java.lang.Object getSelectedObject()
          Returns the currently selected object, if any.
protected  java.lang.Object[] getSelectedObjects()
          Returns the currently selected objects, if any.
 FunctionEditor.Table getTable()
          Gets the table.
 java.lang.String getTooltip(java.lang.Object obj)
          Returns a tooltip for the object.
protected  javax.swing.undo.UndoableEdit getUndoableEdit(int type, java.lang.Object redo, int redoRow, int redoCol, java.lang.Object undo, int undoRow, int undoCol, java.lang.String name)
          Gets an undoable edit.
protected  java.lang.String getVariablesString(java.lang.String separator)
          Returns a String with the names of variables available for expressions.
protected  boolean isDisallowedName(java.lang.Object obj, java.lang.String name)
          Returns true if a name is forbidden or in use.
 boolean isExpressionEditable(java.lang.Object obj)
          Determines if an object's expression is editable.
protected  boolean isImportant(java.lang.Object obj)
          Determines if an object is important.
protected  boolean isInvalidExpression(java.lang.Object obj)
          Returns true if the object expression is invalid.
 boolean isNameEditable(java.lang.Object obj)
          Determines if an object's name is editable.
protected  boolean isRemovable(java.lang.Object obj)
          Determines if an object is removable.
protected  void paste()
          Pastes the clipboard contents.
 void propertyChange(java.beans.PropertyChangeEvent e)
          Responds to property change events.
protected  void refreshButtons()
          Refreshes button states.
protected  void refreshGUI()
          Refreshes the GUI.
 void refreshStrings()
          Refreshes button strings based on current locale.
 java.lang.Object removeObject(java.lang.Object obj, boolean postEdit)
          Removes an object.
 void setAnglesInDegrees(boolean degrees)
          Sets the anglesInDegrees flag.
 void setCustomButtons(javax.swing.AbstractButton[] buttons)
          Sets custom buttons on the button panel.
 void setExpression(java.lang.String name, java.lang.String expression, boolean postEdit)
          Sets the expression of an existing named object, if any.
 void setObjects(java.util.List<java.lang.Object> newObjects)
          Replaces the current objects with new ones.
protected  void setParamEditor(ParamEditor editor)
          Sets the param editor that defines parameters for functions.
protected  void setReferences(java.lang.Object obj, java.util.List<java.lang.Object> referencedObjects)
          Subclasses implement to set objects referenced in an object's expression.
 void setUsePopupEditor(boolean popup)
          sets the usePopupEditor flag.
 
Methods inherited from class javax.swing.JPanel
getAccessibleContext, getUI, getUIClassID, paramString, setUI, updateUI
 
Methods inherited from class javax.swing.JComponent
addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, paintComponent, paintImmediately, paintImmediately, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update
 
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, addImpl, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusBackward, transferFocusDownCycle, validate, validateTree
 
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, hide, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusUpCycle
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

THETA

public static final java.lang.String THETA

OMEGA

public static final java.lang.String OMEGA

DEGREES

public static final java.lang.String DEGREES
See Also:
Constant Field Values

ADD_EDIT

public static final int ADD_EDIT
See Also:
Constant Field Values

REMOVE_EDIT

public static final int REMOVE_EDIT
See Also:
Constant Field Values

NAME_EDIT

public static final int NAME_EDIT
See Also:
Constant Field Values

EXPRESSION_EDIT

public static final int EXPRESSION_EDIT
See Also:
Constant Field Values

editTypes

protected static java.lang.String[] editTypes

paramEditor

protected ParamEditor paramEditor

objects

protected java.util.ArrayList<java.lang.Object> objects

names

protected java.lang.String[] names

sortedObjects

protected java.util.ArrayList<java.lang.Object> sortedObjects

forbiddenNames

protected java.util.HashSet<java.lang.String> forbiddenNames

removablesAtTop

protected boolean removablesAtTop

circularErrors

protected java.util.Collection<java.lang.Object> circularErrors

errors

protected java.util.Collection<java.lang.Object> errors

evaluate

protected java.util.List<java.lang.Object> evaluate

table

protected FunctionEditor.Table table

tableModel

protected FunctionEditor.TableModel tableModel

tableCellEditor

protected org.opensourcephysics.tools.FunctionEditor.CellEditor tableCellEditor

tableCellRenderer

protected org.opensourcephysics.tools.FunctionEditor.CellRenderer tableCellRenderer

tableScroller

protected javax.swing.JScrollPane tableScroller

newButton

protected javax.swing.JButton newButton

cutButton

protected javax.swing.JButton cutButton

copyButton

protected javax.swing.JButton copyButton

pasteButton

protected javax.swing.JButton pasteButton

buttonPanel

protected javax.swing.JPanel buttonPanel

functionPanel

protected FunctionPanel functionPanel

customButtons

protected javax.swing.AbstractButton[] customButtons

anglesInDegrees

protected boolean anglesInDegrees

usePopupEditor

protected boolean usePopupEditor
Constructor Detail

FunctionEditor

public FunctionEditor()
No-arg constructor

Method Detail

getTable

public FunctionEditor.Table getTable()
Gets the table.

Returns:
the table

getPreferredSize

public java.awt.Dimension getPreferredSize()
Override getPreferredSize().

Overrides:
getPreferredSize in class javax.swing.JComponent
Returns:
the table size plus button and instruction heights

setObjects

public void setObjects(java.util.List<java.lang.Object> newObjects)
Replaces the current objects with new ones.

Parameters:
newObjects - a list of objects

getObjects

public java.util.List<java.lang.Object> getObjects()
Gets a shallow clone of the objects list.

Returns:
a list of objects

getNames

public java.lang.String[] getNames()
Gets an array containing the names of the objects.

Returns:
an array of names

getName

public java.lang.String getName(java.lang.Object obj)
Returns the name of the object.

Parameters:
obj - the object
Returns:
the name

getExpression

public java.lang.String getExpression(java.lang.Object obj)
Returns the expression of the object.

Parameters:
obj - the object
Returns:
the expression

getTooltip

public java.lang.String getTooltip(java.lang.Object obj)
Returns a tooltip for the object.

Parameters:
obj - the object
Returns:
the tooltip

getObject

public java.lang.Object getObject(java.lang.String name)
Gets an existing object with specified name. May return null.

Parameters:
name - the name
Returns:
the object

setExpression

public void setExpression(java.lang.String name,
                          java.lang.String expression,
                          boolean postEdit)
Sets the expression of an existing named object, if any.

Parameters:
name - the name
expression - the expression
postEdit - true to post an undoable edit

addObject

public java.lang.Object addObject(java.lang.Object obj,
                                  boolean postEdit)
Adds an object.

Parameters:
obj - the object
postEdit - true to post an undoable edit
Returns:
the added object

addObject

public java.lang.Object addObject(java.lang.Object obj,
                                  int row,
                                  boolean postEdit,
                                  boolean firePropertyChange)
Adds an object at a specified row.

Parameters:
obj - the object
row - the row
postEdit - true to post an undoable edit
firePropertyChange - true to fire a property change event
Returns:
the added object

removeObject

public java.lang.Object removeObject(java.lang.Object obj,
                                     boolean postEdit)
Removes an object.

Parameters:
obj - the object to remove
postEdit - true to post an undoable edit
Returns:
the removed object

refreshStrings

public void refreshStrings()
Refreshes button strings based on current locale.


propertyChange

public void propertyChange(java.beans.PropertyChangeEvent e)
Responds to property change events.

Specified by:
propertyChange in interface java.beans.PropertyChangeListener
Parameters:
e - the event

setCustomButtons

public void setCustomButtons(javax.swing.AbstractButton[] buttons)
Sets custom buttons on the button panel. Setting buttons to null removes all buttons from this editor.


setUsePopupEditor

public void setUsePopupEditor(boolean popup)
sets the usePopupEditor flag.

Parameters:
popup - true to use the popup editor.

getUndoableEdit

protected javax.swing.undo.UndoableEdit getUndoableEdit(int type,
                                                        java.lang.Object redo,
                                                        int redoRow,
                                                        int redoCol,
                                                        java.lang.Object undo,
                                                        int undoRow,
                                                        int undoCol,
                                                        java.lang.String name)
Gets an undoable edit.

Parameters:
type - may be ADD_EDIT, REMOVE_EDIT, NAME_EDIT, or EXPRESSION_EDIT
redo - the new state
redoRow - the newly selected row
redoCol - the newly selected column
undo - the previous state
undoRow - the previously selected row
undoCol - the previously selected column
name - the name of the edited object

isNameEditable

public boolean isNameEditable(java.lang.Object obj)
Determines if an object's name is editable.

Parameters:
obj - the object
Returns:
true if the name is editable

isExpressionEditable

public boolean isExpressionEditable(java.lang.Object obj)
Determines if an object's expression is editable.

Parameters:
obj - the object
Returns:
true if the expression is editable

isRemovable

protected boolean isRemovable(java.lang.Object obj)
Determines if an object is removable.

Parameters:
obj - the object
Returns:
true if removable

isImportant

protected boolean isImportant(java.lang.Object obj)
Determines if an object is important.

Parameters:
obj - the object
Returns:
true if important

setAnglesInDegrees

public void setAnglesInDegrees(boolean degrees)
Sets the anglesInDegrees flag. Angles are displayed in degrees when true, radians when false.

Parameters:
degrees - true to display angles in degrees

evaluateAll

public void evaluateAll()
Evaluates all current objects.


getReferences

protected java.util.Set<java.lang.String> getReferences(java.lang.String name,
                                                        java.util.Set<java.lang.String> references)
Gets the names of functions referenced in a named function expression either directly or indirectly.

Parameters:
name - the name of the function
references - a Set to add references to (may be null)
Returns:
the set filled with names of referenced functions

setReferences

protected void setReferences(java.lang.Object obj,
                             java.util.List<java.lang.Object> referencedObjects)
Subclasses implement to set objects referenced in an object's expression.


createGUI

protected void createGUI()
Creates the GUI.


refreshGUI

protected void refreshGUI()
Refreshes the GUI.


refreshButtons

protected void refreshButtons()
Refreshes button states.


getParamEditor

protected ParamEditor getParamEditor()
Gets the param editor that defines parameters for functions.


setParamEditor

protected void setParamEditor(ParamEditor editor)
Sets the param editor that defines parameters for functions. By default, the editor pased in is ignored unless not yet set.


getDefaultName

protected java.lang.String getDefaultName()
Returns the default name for newly created objects.


getVariablesString

protected java.lang.String getVariablesString(java.lang.String separator)
Returns a String with the names of variables available for expressions. This default returns the names of all objects in this panel except the selected object.


getPartlyEditableRowCount

protected int getPartlyEditableRowCount()
Returns the number of editable rows.


isInvalidExpression

protected boolean isInvalidExpression(java.lang.Object obj)
Returns true if the object expression is invalid.


containsInvalidExpressions

protected boolean containsInvalidExpressions()
Returns true if any objects have invalid expressions.


paste

protected void paste()
Pastes the clipboard contents.


getClipboardContents

protected XMLControl[] getClipboardContents()
Gets the clipboard contents.


getSelectedObject

protected java.lang.Object getSelectedObject()
Returns the currently selected object, if any.


getSelectedObjects

protected java.lang.Object[] getSelectedObjects()
Returns the currently selected objects, if any.


createObject

protected java.lang.Object createObject(java.lang.String name,
                                        java.lang.String expression,
                                        java.lang.Object obj)
Creates an object with specified name and expression. An existing object may be passed in for modification or cloning, but there is no guarantee the same object will be returned.

Parameters:
name - the name
expression - the expression
obj - an object to assign values (may be null)
Returns:
the object

isDisallowedName

protected boolean isDisallowedName(java.lang.Object obj,
                                   java.lang.String name)
Returns true if a name is forbidden or in use.

Parameters:
obj - the object (may be null)
name - the proposed name for the object
Returns:
true if disallowed

createUniqueObject

protected java.lang.Object createUniqueObject(java.lang.Object obj,
                                              java.lang.String proposedName,
                                              boolean confirmChanges)
Creates an object with a unique name.

Parameters:
obj - the object (may be null)
proposedName - the proposed name
confirmChanges - true to require user to confirm changes
Returns:
the object

format

public static java.lang.String format(double value,
                                      double zeroLevel)
Formats a number.

Parameters:
value - the number
zeroLevel - the level below which the value is considered zero
Returns:
the formatted string