Package edu.hws.jcm.draw

# Class DraggablePoint

java.lang.Object
edu.hws.jcm.draw.Drawable
edu.hws.jcm.draw.DraggablePoint

All Implemented Interfaces:
  `InputObject`, `Draggable`, `Serializable`

public class DraggablePoint extends Drawable implements InputObject, Draggable
A DraggablePoint can be added to a DisplayCanvas, where it appears as a small disk, square, or cross. (The visual style is a settable property.) This object can be dragged with the mouse, within the limits of the CoordinateRect that contains the DraggablePoint. Either the x- or y-value of the point can be clamped to a specified Value. Typically, the y-value might be given by some function of the x-value. In that case, the point is constrained to move along the graph of the function. Or the x- or y-value can be clamped to a constant to make the point move along a vertical or horizontal line. Two Variables are associated with the DraggablePoint. These Variables represent the x- and y- values of the point. Each Variable implements the Tieable interface, so it can be synchronized with other Tieable values such as a VariableIput or VariableSlider.

See Also:
  - Serialized Form

## Field Summary

Fields
Modifier and Type
Field
Description
`static final int`
`CROSS`
A style constant that specifies the visual appearance of a DraggablePoint to be a cross.
`static final int`
`DISK`
A style constant that specifies the visual appearance of a DraggablePoint to be a disk.
`static final int`
`SQUARE`
A style constant that specifies the visual appearance of a DraggablePoint to be a square.

### Fields inherited from class edu.hws.jcm.draw.Drawable

`canvas, coords`

## Constructor Summary

Constructors
Constructor
Description
`DraggablePoint()`
Create a DraggablePoint with default values for style, radius, color.
`DraggablePoint(int style)`
Create a DraggablePoint with specified visual style.

## Method Summary

Modifier and Type
Method
Description
`void`
`checkInput()`
This method is required by the InputObject interface.
`void`
`clampX(double x)`
Clamp the x-value of the point to the constant x, so that the point is constrained to a vertical line.
`void`
`clampX(Function f)`
Clamp the x-value of the point to the function f, so that the point is constrained to move along the graph of x = f(y).
`void`
`clampX(Value v)`
Clamp the x-value of the point to v.
`void`
`clampY(double y)`
Clamp the y-value of the point to the constant y, so that the point is constrained to a horizontal line.
`void`
`clampY(Function f)`
Clamp the y-value of the point to the function f, so that the point is constrained to move along the graph of y = f(x).
`void`
`clampY(Value v)`
Clamp the y-value of the point to v.
`void`
`continueDrag(MouseEvent evt)`
Continue a drag operation begun in startDrag().
`void`
`draw(Graphics g, boolean coordsChanged)`
This method, from the Drawable interface, draws the point.
`void`
`finishDrag(MouseEvent evt)`
Finish a drag operation begun in startDrag().
`Color`
`getColor()`
Get the color used for drawing the point.
`Color`
`getGhostColor()`
Get the "ghostColor" of the point.
`Controller`
`getOnUserAction(Controller c)`
Get the Controller that is notified when the user drags the point.
`int`
`getRadius()`
Get the radius used for drawing the point.
`int`
`getStyle()`
Get the visual style of the point, which must be one of the constants DraggablePoint.DISK, DraggablePoint.SQUARE, or DraggablePoint.CROSS.
`Variable`
`getXVar()`
Get the variable that represents the current x-value of the point.
`Variable`
`getYVar()`
Get the variable that represents the current y-value of the point.
`void`
`notifyControllerOnChange(Controller c)`
Method required by InputObject interface; in this class, it simply calls setOnUserAction(c).
`void`
`setColor(Color c)`
Set the color to be used for drawing the point.
`void`
`setGhostColor(Color c)`
Set the ghoseColor to be used for drawing the point when it location is undefined or is outside the proper limits.
`void`
`setLocation(double x, double y)`
Move the point to (x,y), then "clamp" the value of x or y, if a clamp Value has been set.
`void`
`setOnUserAction(Controller c)`
Set the Controller that is to be notified when the user drags the point.
`void`
`setRadius(int r)`
Set the radius that determines the size of the point when it is drawn.
`void`
`setStyle(int style)`
Set the visual style of the point.
`boolean`
`startDrag(MouseEvent evt)`
Check whether a mouse click (as specified in the MouseEvent parameter) is a click on this DraggablePoint.

### Methods inherited from class edu.hws.jcm.draw.Drawable

`getVisible, needsRedraw, setOwnerData, setVisible`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Field Details

### DISK

public static final int DISK
A style constant that specifies the visual appearance of a DraggablePoint to be a disk.

See Also:
  - Constant Field Values

### SQUARE

public static final int SQUARE
A style constant that specifies the visual appearance of a DraggablePoint to be a square.

See Also:
  - Constant Field Values

### CROSS

public static final int CROSS
A style constant that specifies the visual appearance of a DraggablePoint to be a cross.

See Also:
  - Constant Field Values

## Constructor Details

### DraggablePoint

public DraggablePoint()
Create a DraggablePoint with default values for style, radius, color. The point appears as a dark gray disk of radius 4.

### DraggablePoint

public DraggablePoint(int style)
Create a DraggablePoint with specified visual style. Radius is 4, color is darkGray, and ghostColor is lightGray.

Parameters:
  `style` - One of the style constants DraggablePoint.DISK, DraggablePoint.SQUARE, or DraggablePoint.CROSS.

## Method Details

### clampX

public void clampX(Value v)
Clamp the x-value of the point to v. That is, if v is not null, then whenever the location of the point changes, its x-value is modified to v.getVal(). Note that if v is non-null then any clamp Value specified for y will be cleared since x and y cannot both be clamped.

### clampY

public void clampY(Value v)
Clamp the y-value of the point to v. That is, if v is not null, then whenever the location of the point changes, its y-value is modified to v.getVal(). Note that if v is non-null then any clamp Value specified for x will be cleared since x and y cannot both be clamped.

### clampX

public void clampX(double x)
Clamp the x-value of the point to the constant x, so that the point is constrained to a vertical line.

### clampY

public void clampY(double y)
Clamp the y-value of the point to the constant y, so that the point is constrained to a horizontal line.

### clampX

public void clampX(Function f)
Clamp the x-value of the point to the function f, so that the point is constrained to move along the graph of x = f(y). f must be a function of one variable.

### clampY

public void clampY(Function f)
Clamp the y-value of the point to the function f, so that the point is constrained to move along the graph of y = f(x). f must be a function of one variable.

### getRadius

public int getRadius()
Get the radius used for drawing the point. The point's height and width are given by two times the radius.

### setRadius

public void setRadius(int r)
Set the radius that determines the size of the point when it is drawn. The point's height and width are given by two times the radius.

### setStyle

public void setStyle(int style)
Set the visual style of the point. The style should be one of the constants DraggablePoint.DISK, DraggablePoint.SQUARE, or DraggablePoint.CROSS. If it is not, then nothing is done.

### getStyle

public int getStyle()
Get the visual style of the point, which must be one of the constants DraggablePoint.DISK, DraggablePoint.SQUARE, or DraggablePoint.CROSS.

### getXVar

public Variable getXVar()
Get the variable that represents the current x-value of the point. (Note that this variable can be type-cast to type Tieable.)

### getYVar

public Variable getYVar()
Get the variable that represents the current y-value of the point. (Note that this variable can be type-cast to type Tieable.)

### getColor

public Color getColor()
Get the color used for drawing the point.

### setColor

public void setColor(Color c)
Set the color to be used for drawing the point. If the specified Color value is null, then nothing is done.

### getGhostColor

public Color getGhostColor()
Get the "ghostColor" of the point. This color is used for drawing the point when its x-value or y-value is undefined or outside the range of values on the CoordinateRect that contains the point. (This can happen because of clamping of values. It can also happen if the limits on the CoordinateRect are changed.)

### setGhostColor

public void setGhostColor(Color c)
Set the ghoseColor to be used for drawing the point when it location is undefined or is outside the proper limits. If the specified Color value is null, then nothing is done.

### setOnUserAction

public void setOnUserAction(Controller c)
Set the Controller that is to be notified when the user drags the point. (The compute() method of the Controller is called.) If the Controller value is null, then no notification is done.

### notifyControllerOnChange

public void notifyControllerOnChange(Controller c)
Method required by InputObject interface; in this class, it simply calls setOnUserAction(c). This is meant to be called by JCMPanel.gatherInputs().

Specified by:
  `notifyControllerOnChange` in interface `InputObject`

### getOnUserAction

public Controller getOnUserAction(Controller c)
Get the Controller that is notified when the user drags the point. A null value means that no notification is done.

### setLocation

public void setLocation(double x, double y)
Move the point to (x,y), then "clamp" the value of x or y, if a clamp Value has been set.

### checkInput

public void checkInput()
This method is required by the InputObject interface. In this case, it just applies the clamping Values if any are specified.

Specified by:
  `checkInput` in interface `InputObject`

### draw

public void draw(Graphics g, boolean coordsChanged)
This method, from the Drawable interface, draws the point. It is not usually called directly.

Specified by:
  `draw` in class `Drawable`
Parameters:
  `g` - The graphics context in which the Drawble is to be drawn. (The drawing can change the color in g, but should not permanently change font, painting mode, etc. Thus, every drawable is responsible for setting the color it wants to use.)
  `coordsChanged` - Indicates whether the CoordinateRect has changed.

### startDrag

public boolean startDrag(MouseEvent evt)
Check whether a mouse click (as specified in the MouseEvent parameter) is a click on this DraggablePoint. If so, return true, and start a drag operation. It is expected that the continueDrag() and finishDrag() will be called to complete the drag operation. This is only meant to be called from the checkDraggables() method in class CoordinateRect.

Specified by:
  `startDrag` in interface `Draggable`

### continueDrag

public void continueDrag(MouseEvent evt)
Continue a drag operation begun in startDrag(). This is not meant to be called directly.

Specified by:
  `continueDrag` in interface `Draggable`

### finishDrag

public void finishDrag(MouseEvent evt)
Finish a drag operation begun in startDrag(). This is not meant to be called directly.

Specified by:
  `finishDrag` in interface `Draggable`