Fixed jdk7 problem in Multislider and NPE when there is no motor in the
ThrustCurveMotorSelectionPanel.
This commit is contained in:
parent
7687568f81
commit
e4afa7961e
@ -461,7 +461,7 @@ public class ThrustCurveMotorSelectionPanel extends JPanel implements MotorSelec
|
||||
|
||||
List<ThrustCurveMotor> getFilteredCurves() {
|
||||
List<ThrustCurveMotor> motors = selectedMotorSet.getMotors();
|
||||
if (hideSimilarBox.isSelected()) {
|
||||
if (hideSimilarBox.isSelected() && selectedMotor != null) {
|
||||
List<ThrustCurveMotor> filtered = new ArrayList<ThrustCurveMotor>(motors.size());
|
||||
for (int i = 0; i < motors.size(); i++) {
|
||||
ThrustCurveMotor m = motors.get(i);
|
||||
@ -469,7 +469,6 @@ public class ThrustCurveMotorSelectionPanel extends JPanel implements MotorSelec
|
||||
filtered.add(m);
|
||||
continue;
|
||||
}
|
||||
|
||||
double similarity = MotorCorrelation.similarity(selectedMotor, m);
|
||||
log.debug("Motor similarity: " + similarity);
|
||||
if (similarity < MOTOR_SIMILARITY_THRESHOLD) {
|
||||
|
@ -48,505 +48,524 @@ import javax.swing.plaf.SliderUI;
|
||||
*/
|
||||
|
||||
public class MultiSlider extends JSlider {
|
||||
/***
|
||||
* @see #getUIClassID
|
||||
* @see #readObject
|
||||
*/
|
||||
private static final String uiClassID = "MultiSliderUI";
|
||||
/***
|
||||
* @see #getUIClassID
|
||||
* @see #readObject
|
||||
*/
|
||||
private static final String uiClassID = "MultiSliderUI";
|
||||
|
||||
/***
|
||||
* An array of data models that handle the numeric maximum values,
|
||||
* minimum values, and current-position values for the multi slider.
|
||||
*/
|
||||
private BoundedRangeModel[] sliderModels;
|
||||
/***
|
||||
* An array of data models that handle the numeric maximum values,
|
||||
* minimum values, and current-position values for the multi slider.
|
||||
*/
|
||||
private BoundedRangeModel[] sliderModels;
|
||||
|
||||
/***
|
||||
* If it is true, a thumb is bounded by adjacent thumbs.
|
||||
*/
|
||||
private boolean bounded = false;
|
||||
/***
|
||||
* If it is true, a thumb is bounded by adjacent thumbs.
|
||||
*/
|
||||
private boolean bounded = false;
|
||||
|
||||
/***
|
||||
* This is a color to paint the current thumb
|
||||
*/
|
||||
private Color currentThumbColor = Color.red;
|
||||
/***
|
||||
* This is a color to paint the current thumb
|
||||
*/
|
||||
private Color currentThumbColor = Color.red;
|
||||
|
||||
transient private int valueBeforeStateChange;
|
||||
transient private int valueBeforeStateChange;
|
||||
|
||||
/***
|
||||
* Creates a slider with the specified orientation and the
|
||||
* specified mimimum, maximum, and initial values.
|
||||
*
|
||||
* @exception IllegalArgumentException if orientation is not one of VERTICAL, HORIZONTAL
|
||||
*
|
||||
* @see #setOrientation
|
||||
* @see #setMinimum
|
||||
* @see #setMaximum
|
||||
* @see #setValue
|
||||
*/
|
||||
public MultiSlider(int orientation, int min, int max,
|
||||
int val1, int val2) {
|
||||
checkOrientation(orientation);
|
||||
this.orientation = orientation;
|
||||
setNumberOfThumbs(min,max,new int[]{val1,val2});
|
||||
}
|
||||
|
||||
/***
|
||||
* Creates a slider with the specified orientation and the
|
||||
* specified mimimum, maximum, and the number of thumbs.
|
||||
*
|
||||
* @exception IllegalArgumentException if orientation is not one of VERTICAL, HORIZONTAL
|
||||
*
|
||||
* @see #setOrientation
|
||||
* @see #setMinimum
|
||||
* @see #setMaximum
|
||||
* @see #setValue
|
||||
*/
|
||||
public MultiSlider(int orientation, int min, int max) {
|
||||
checkOrientation(orientation);
|
||||
this.orientation = orientation;
|
||||
setNumberOfThumbs(min, max, 2);
|
||||
}
|
||||
|
||||
/***
|
||||
* Creates a horizontal slider with the range 0 to 100 and
|
||||
* an intitial value of 50.
|
||||
*/
|
||||
public MultiSlider() {
|
||||
this(HORIZONTAL, 0, 100);
|
||||
}
|
||||
|
||||
|
||||
/***
|
||||
* Creates a slider using the specified orientation with the
|
||||
* range 0 to 100 and an intitial value of 50.
|
||||
*/
|
||||
public MultiSlider(int orientation) {
|
||||
this(orientation, 0, 100);
|
||||
}
|
||||
|
||||
|
||||
/***
|
||||
* Creates a horizontal slider using the specified min and max
|
||||
* with an intitial value of 50.
|
||||
*/
|
||||
public MultiSlider(int min, int max) {
|
||||
this(HORIZONTAL, min, max);
|
||||
}
|
||||
|
||||
public void setCurrentThumbColor(Color c) {
|
||||
this.currentThumbColor = c;
|
||||
}
|
||||
|
||||
public Color getCurrentThumbColor() {
|
||||
return this.currentThumbColor;
|
||||
}
|
||||
|
||||
public int getTrackBuffer() {
|
||||
return ((MultiSliderUI) this.ui).getTrackBuffer();
|
||||
}
|
||||
|
||||
/***
|
||||
* Validates the orientation parameter.
|
||||
*/
|
||||
private void checkOrientation(int orientation) {
|
||||
switch (orientation) {
|
||||
case VERTICAL:
|
||||
case HORIZONTAL:
|
||||
break;
|
||||
default:
|
||||
throw new IllegalArgumentException("orientation must be one of: VERTICAL, HORIZONTAL");
|
||||
}
|
||||
}
|
||||
|
||||
/***
|
||||
* Notification from the UIFactory that the L&F has changed.
|
||||
* Called to replace the UI with the latest version from the
|
||||
* default UIFactory.
|
||||
*
|
||||
* @see JComponent#updateUI
|
||||
*/
|
||||
public void updateUI() {
|
||||
updateLabelUIs();
|
||||
MultiSliderUI ui = new MultiSliderUI();
|
||||
if (this.sliderModels != null) {
|
||||
ui.setThumbCount(this.sliderModels.length);
|
||||
}
|
||||
setUI((SliderUI) ui);
|
||||
}
|
||||
|
||||
/***
|
||||
* Returns the number of thumbs in the slider.
|
||||
*/
|
||||
public int getNumberOfThumbs() {
|
||||
return this.sliderModels.length;
|
||||
}
|
||||
|
||||
/***
|
||||
* Sets the number of thumbs with the specified parameters.
|
||||
*/
|
||||
private void setNumberOfThumbs(int min, int max, int num, boolean useEndPoints) {
|
||||
int [] values = createDefaultValues(min, max, num, useEndPoints);
|
||||
setNumberOfThumbs(min, max, values);
|
||||
}
|
||||
|
||||
/***
|
||||
* Sets the number of thumbs with the specified parameters.
|
||||
*/
|
||||
private void setNumberOfThumbs(int min, int max, int num) {
|
||||
setNumberOfThumbs(min, max, num, false);
|
||||
}
|
||||
|
||||
/***
|
||||
* Sets the number of thumbs with the specified parameters.
|
||||
*/
|
||||
private void setNumberOfThumbs(int min, int max, int[] values) {
|
||||
if (values == null || values.length < 1) {
|
||||
values = new int[] {50};
|
||||
}
|
||||
int num = values.length;
|
||||
this.sliderModels = new BoundedRangeModel[num];
|
||||
for (int i = 0; i < num; i++) {
|
||||
this.sliderModels[i] = new DefaultBoundedRangeModel(values[i], 0, min, max);
|
||||
this.sliderModels[i].addChangeListener(changeListener);
|
||||
}
|
||||
updateUI();
|
||||
}
|
||||
|
||||
/***
|
||||
* Sets the number of thumbs.
|
||||
*/
|
||||
private void setNumberOfThumbs(int num) {
|
||||
setNumberOfThumbs(num, false);
|
||||
}
|
||||
|
||||
/***
|
||||
* Sets the number of thumbs.
|
||||
*/
|
||||
private void setNumberOfThumbs(int num, boolean useEndPoints) {
|
||||
if (getNumberOfThumbs() != num) {
|
||||
setNumberOfThumbs(getMinimum(), getMaximum(), num, useEndPoints);
|
||||
}
|
||||
}
|
||||
|
||||
/***
|
||||
* Sets the number of thumbs by specifying the initial values.
|
||||
*/
|
||||
private void setNumberOfThumbs(int[] values) {
|
||||
setNumberOfThumbs(getMinimum(), getMaximum(), values);
|
||||
}
|
||||
|
||||
/***
|
||||
* creates evenly spaced values for thumbs.
|
||||
*/
|
||||
private int[] createDefaultValues(int min, int max, int num_of_values, boolean useEndPoints) {
|
||||
int[] values = new int[num_of_values];
|
||||
int range = max - min;
|
||||
|
||||
if (!useEndPoints) {
|
||||
int step = range / (num_of_values + 1);
|
||||
for (int i = 0; i < num_of_values; i++) {
|
||||
values[i] = min + (i + 1) * step;
|
||||
}
|
||||
} else {
|
||||
if (num_of_values < 1) {
|
||||
return new int[0];
|
||||
}
|
||||
values[0] = getMinimum();
|
||||
values[num_of_values - 1] = getMaximum();
|
||||
int[] def = createDefaultValues(getMinimum(), getMaximum(), num_of_values - 2, false);
|
||||
for (int i = 0; i < def.length; i++) {
|
||||
values[i + 1] = def[i];
|
||||
}
|
||||
}
|
||||
return values;
|
||||
}
|
||||
|
||||
/***
|
||||
* Returns the index number of currently operated thumb.
|
||||
*/
|
||||
public int getCurrentThumbIndex() {
|
||||
return ((MultiSliderUI)ui).getCurrentIndex();
|
||||
}
|
||||
|
||||
/***
|
||||
* Returns data model that handles the sliders three
|
||||
* fundamental properties: minimum, maximum, value.
|
||||
*
|
||||
* @see #setModel
|
||||
*/
|
||||
public BoundedRangeModel getModel() {
|
||||
return getModelAt(getCurrentThumbIndex());
|
||||
}
|
||||
|
||||
/***
|
||||
* Returns data model that handles the sliders three
|
||||
* fundamental properties: minimum, maximum, value.
|
||||
*
|
||||
* @see #setModel
|
||||
*/
|
||||
public BoundedRangeModel getModelAt(int index) {
|
||||
if (this.sliderModels == null || index >= this.sliderModels.length) {
|
||||
return null;
|
||||
}
|
||||
return this.sliderModels[index];
|
||||
}
|
||||
|
||||
/***
|
||||
* Returns data model that handles the sliders three
|
||||
* fundamental properties: minimum, maximum, value.
|
||||
*
|
||||
* @see #setModel
|
||||
*/
|
||||
public BoundedRangeModel[] getModels() {
|
||||
return this.sliderModels;
|
||||
}
|
||||
|
||||
/***
|
||||
* Sets the model that handles the sliders three
|
||||
* fundamental properties: minimum, maximum, value.
|
||||
*
|
||||
* @see #getModel
|
||||
* @beaninfo
|
||||
* bound: true
|
||||
* description: The sliders BoundedRangeModel.
|
||||
*/
|
||||
public void setModel(BoundedRangeModel newModel) {
|
||||
setModelAt(getCurrentThumbIndex(), newModel);
|
||||
}
|
||||
|
||||
/***
|
||||
* Sets the model that handles the sliders three
|
||||
* fundamental properties: minimum, maximum, value.
|
||||
*
|
||||
* @see #getModel
|
||||
* @beaninfo
|
||||
* bound: true
|
||||
* description: The sliders BoundedRangeModel.
|
||||
*/
|
||||
public void setModelAt(int index, BoundedRangeModel newModel) {
|
||||
BoundedRangeModel oldModel = getModelAt(index);
|
||||
|
||||
if (oldModel != null) {
|
||||
oldModel.removeChangeListener(changeListener);
|
||||
/***
|
||||
* Creates a slider with the specified orientation and the
|
||||
* specified mimimum, maximum, and initial values.
|
||||
*
|
||||
* @exception IllegalArgumentException if orientation is not one of VERTICAL, HORIZONTAL
|
||||
*
|
||||
* @see #setOrientation
|
||||
* @see #setMinimum
|
||||
* @see #setMaximum
|
||||
* @see #setValue
|
||||
*/
|
||||
public MultiSlider(int orientation, int min, int max,
|
||||
int val1, int val2) {
|
||||
checkOrientation(orientation);
|
||||
this.orientation = orientation;
|
||||
setNumberOfThumbs(min,max,new int[]{val1,val2});
|
||||
}
|
||||
|
||||
this.sliderModels[index] = newModel;
|
||||
|
||||
if (newModel != null) {
|
||||
newModel.addChangeListener(changeListener);
|
||||
|
||||
if (accessibleContext != null) {
|
||||
accessibleContext.firePropertyChange(
|
||||
AccessibleContext.ACCESSIBLE_VALUE_PROPERTY,
|
||||
(oldModel == null
|
||||
? null : new Integer(oldModel.getValue())),
|
||||
(newModel == null
|
||||
? null : new Integer(newModel.getValue())));
|
||||
}
|
||||
/***
|
||||
* Creates a slider with the specified orientation and the
|
||||
* specified mimimum, maximum, and the number of thumbs.
|
||||
*
|
||||
* @exception IllegalArgumentException if orientation is not one of VERTICAL, HORIZONTAL
|
||||
*
|
||||
* @see #setOrientation
|
||||
* @see #setMinimum
|
||||
* @see #setMaximum
|
||||
* @see #setValue
|
||||
*/
|
||||
public MultiSlider(int orientation, int min, int max) {
|
||||
checkOrientation(orientation);
|
||||
this.orientation = orientation;
|
||||
setNumberOfThumbs(min, max, 2);
|
||||
}
|
||||
|
||||
firePropertyChange("model", oldModel, this.sliderModels[index]);
|
||||
}
|
||||
|
||||
/***
|
||||
* Sets the models minimum property.
|
||||
*
|
||||
* @see #getMinimum
|
||||
* @see BoundedRangeModel#setMinimum
|
||||
* @beaninfo
|
||||
* bound: true
|
||||
* preferred: true
|
||||
* description: The sliders minimum value.
|
||||
*/
|
||||
public void setMinimum(int minimum) {
|
||||
int count = getNumberOfThumbs();
|
||||
int oldMin = getModel().getMinimum();
|
||||
for (int i = 0; i < count; i++) {
|
||||
getModelAt(i).setMinimum(minimum);
|
||||
/***
|
||||
* Creates a horizontal slider with the range 0 to 100 and
|
||||
* an intitial value of 50.
|
||||
*/
|
||||
public MultiSlider() {
|
||||
this(HORIZONTAL, 0, 100);
|
||||
}
|
||||
firePropertyChange( "minimum", new Integer( oldMin ), new Integer( minimum ) );
|
||||
}
|
||||
|
||||
/***
|
||||
* Sets the models maximum property.
|
||||
*
|
||||
* @see #getMaximum
|
||||
* @see BoundedRangeModel#setMaximum
|
||||
* @beaninfo
|
||||
* bound: true
|
||||
* preferred: true
|
||||
* description: The sliders maximum value.
|
||||
*/
|
||||
public void setMaximum(int maximum) {
|
||||
int count = getNumberOfThumbs();
|
||||
int oldMax = getModel().getMaximum();
|
||||
for (int i = 0; i < count; i++) {
|
||||
getModelAt(i).setMaximum(maximum);
|
||||
|
||||
/***
|
||||
* Creates a slider using the specified orientation with the
|
||||
* range 0 to 100 and an intitial value of 50.
|
||||
*/
|
||||
public MultiSlider(int orientation) {
|
||||
this(orientation, 0, 100);
|
||||
}
|
||||
firePropertyChange( "maximum", new Integer( oldMax ), new Integer( maximum ) );
|
||||
}
|
||||
|
||||
/***
|
||||
* Returns the sliders value.
|
||||
* @return the models value property
|
||||
* @see #setValue
|
||||
*/
|
||||
public int getValue() {
|
||||
return getValueAt(getCurrentThumbIndex());
|
||||
}
|
||||
|
||||
/***
|
||||
* Returns the sliders value.
|
||||
* @return the models value property
|
||||
* @see #setValue
|
||||
*/
|
||||
public int getValueAt(int index) {
|
||||
return getModelAt(index).getValue();
|
||||
}
|
||||
|
||||
/***
|
||||
* Sets the sliders current value. This method just forwards
|
||||
* the value to the model.
|
||||
*
|
||||
* @see #getValue
|
||||
* @beaninfo
|
||||
* preferred: true
|
||||
* description: The sliders current value.
|
||||
*/
|
||||
public void setValue(int n) {
|
||||
setValueAt(getCurrentThumbIndex(), n);
|
||||
}
|
||||
|
||||
/***
|
||||
* Sets the sliders current value. This method just forwards
|
||||
* the value to the model.
|
||||
*
|
||||
* @see #getValue
|
||||
* @beaninfo
|
||||
* preferred: true
|
||||
* description: The sliders current value.
|
||||
*/
|
||||
public void setValueAt(int index, int n) {
|
||||
BoundedRangeModel m = getModelAt(index);
|
||||
int oldValue = m.getValue();
|
||||
m.setValue(n);
|
||||
|
||||
if (accessibleContext != null) {
|
||||
accessibleContext.firePropertyChange(
|
||||
AccessibleContext.ACCESSIBLE_VALUE_PROPERTY,
|
||||
new Integer(oldValue),
|
||||
new Integer(m.getValue()));
|
||||
/***
|
||||
* Creates a horizontal slider using the specified min and max
|
||||
* with an intitial value of 50.
|
||||
*/
|
||||
public MultiSlider(int min, int max) {
|
||||
this(HORIZONTAL, min, max);
|
||||
}
|
||||
}
|
||||
|
||||
/***
|
||||
* True if the slider knob is being dragged.
|
||||
*
|
||||
* @return the value of the models valueIsAdjusting property
|
||||
* @see #setValueIsAdjusting
|
||||
*/
|
||||
public boolean getValueIsAdjusting() {
|
||||
boolean result = false;
|
||||
int count = getNumberOfThumbs();
|
||||
for (int i = 0; i < count; i++) {
|
||||
result = (result || getValueIsAdjustingAt(i));
|
||||
public void setCurrentThumbColor(Color c) {
|
||||
this.currentThumbColor = c;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/***
|
||||
* True if the slider knob is being dragged.
|
||||
*/
|
||||
public boolean getValueIsAdjustingAt(int index) {
|
||||
return getModelAt(index).getValueIsAdjusting();
|
||||
}
|
||||
|
||||
/***
|
||||
* Sets the models valueIsAdjusting property. Slider look and
|
||||
* feel implementations should set this property to true when
|
||||
* a knob drag begins, and to false when the drag ends. The
|
||||
* slider model will not generate ChangeEvents while
|
||||
* valueIsAdjusting is true.
|
||||
*
|
||||
* @see #getValueIsAdjusting
|
||||
* @see BoundedRangeModel#setValueIsAdjusting
|
||||
* @beaninfo
|
||||
* expert: true
|
||||
* description: True if the slider knob is being dragged.
|
||||
*/
|
||||
public void setValueIsAdjusting(boolean b) {
|
||||
setValueIsAdjustingAt(getCurrentThumbIndex(), b);
|
||||
}
|
||||
|
||||
/***
|
||||
* Sets the models valueIsAdjusting property. Slider look and
|
||||
* feel implementations should set this property to true when
|
||||
* a knob drag begins, and to false when the drag ends. The
|
||||
* slider model will not generate ChangeEvents while
|
||||
* valueIsAdjusting is true.
|
||||
*/
|
||||
public void setValueIsAdjustingAt(int index, boolean b) {
|
||||
BoundedRangeModel m = getModelAt(index);
|
||||
boolean oldValue = m.getValueIsAdjusting();
|
||||
m.setValueIsAdjusting(b);
|
||||
|
||||
if ((oldValue != b) && (accessibleContext != null)) {
|
||||
accessibleContext.firePropertyChange(
|
||||
AccessibleContext.ACCESSIBLE_STATE_PROPERTY,
|
||||
((oldValue) ? AccessibleState.BUSY : null),
|
||||
((b) ? AccessibleState.BUSY : null));
|
||||
public Color getCurrentThumbColor() {
|
||||
return this.currentThumbColor;
|
||||
}
|
||||
}
|
||||
|
||||
/***
|
||||
* Sets the size of the range "covered" by the knob. Most look
|
||||
* and feel implementations will change the value by this amount
|
||||
* if the user clicks on either side of the knob.
|
||||
*
|
||||
* @see #getExtent
|
||||
* @see BoundedRangeModel#setExtent
|
||||
* @beaninfo
|
||||
* expert: true
|
||||
* description: Size of the range covered by the knob.
|
||||
*/
|
||||
public void setExtent(int extent) {
|
||||
int count = getNumberOfThumbs();
|
||||
for (int i = 0; i < count; i++) {
|
||||
getModelAt(i).setExtent(extent);
|
||||
public int getTrackBuffer() {
|
||||
return ((MultiSliderUI) this.ui).getTrackBuffer();
|
||||
}
|
||||
|
||||
/***
|
||||
* Validates the orientation parameter.
|
||||
*/
|
||||
private void checkOrientation(int orientation) {
|
||||
switch (orientation) {
|
||||
case VERTICAL:
|
||||
case HORIZONTAL:
|
||||
break;
|
||||
default:
|
||||
throw new IllegalArgumentException("orientation must be one of: VERTICAL, HORIZONTAL");
|
||||
}
|
||||
}
|
||||
|
||||
/***
|
||||
* Notification from the UIFactory that the L&F has changed.
|
||||
* Called to replace the UI with the latest version from the
|
||||
* default UIFactory.
|
||||
*
|
||||
* @see JComponent#updateUI
|
||||
*/
|
||||
public void updateUI() {
|
||||
updateLabelUIs();
|
||||
MultiSliderUI ui = new MultiSliderUI();
|
||||
if (this.sliderModels != null) {
|
||||
ui.setThumbCount(this.sliderModels.length);
|
||||
}
|
||||
setUI((SliderUI) ui);
|
||||
}
|
||||
|
||||
/***
|
||||
* Returns the number of thumbs in the slider.
|
||||
*/
|
||||
public int getNumberOfThumbs() {
|
||||
return this.sliderModels.length;
|
||||
}
|
||||
|
||||
/***
|
||||
* Sets the number of thumbs with the specified parameters.
|
||||
*/
|
||||
private void setNumberOfThumbs(int min, int max, int num, boolean useEndPoints) {
|
||||
int [] values = createDefaultValues(min, max, num, useEndPoints);
|
||||
setNumberOfThumbs(min, max, values);
|
||||
}
|
||||
|
||||
/***
|
||||
* Sets the number of thumbs with the specified parameters.
|
||||
*/
|
||||
private void setNumberOfThumbs(int min, int max, int num) {
|
||||
setNumberOfThumbs(min, max, num, false);
|
||||
}
|
||||
|
||||
/***
|
||||
* Sets the number of thumbs with the specified parameters.
|
||||
*/
|
||||
private void setNumberOfThumbs(int min, int max, int[] values) {
|
||||
if (values == null || values.length < 1) {
|
||||
values = new int[] {50};
|
||||
}
|
||||
int num = values.length;
|
||||
this.sliderModels = new BoundedRangeModel[num];
|
||||
for (int i = 0; i < num; i++) {
|
||||
this.sliderModels[i] = new DefaultBoundedRangeModel(values[i], 0, min, max);
|
||||
this.sliderModels[i].addChangeListener(changeListener);
|
||||
}
|
||||
updateUI();
|
||||
}
|
||||
|
||||
/***
|
||||
* Sets the number of thumbs.
|
||||
*/
|
||||
private void setNumberOfThumbs(int num) {
|
||||
setNumberOfThumbs(num, false);
|
||||
}
|
||||
|
||||
/***
|
||||
* Sets the number of thumbs.
|
||||
*/
|
||||
private void setNumberOfThumbs(int num, boolean useEndPoints) {
|
||||
if (getNumberOfThumbs() != num) {
|
||||
setNumberOfThumbs(getMinimum(), getMaximum(), num, useEndPoints);
|
||||
}
|
||||
}
|
||||
|
||||
/***
|
||||
* Sets the number of thumbs by specifying the initial values.
|
||||
*/
|
||||
private void setNumberOfThumbs(int[] values) {
|
||||
setNumberOfThumbs(getMinimum(), getMaximum(), values);
|
||||
}
|
||||
|
||||
/***
|
||||
* creates evenly spaced values for thumbs.
|
||||
*/
|
||||
private int[] createDefaultValues(int min, int max, int num_of_values, boolean useEndPoints) {
|
||||
int[] values = new int[num_of_values];
|
||||
int range = max - min;
|
||||
|
||||
if (!useEndPoints) {
|
||||
int step = range / (num_of_values + 1);
|
||||
for (int i = 0; i < num_of_values; i++) {
|
||||
values[i] = min + (i + 1) * step;
|
||||
}
|
||||
} else {
|
||||
if (num_of_values < 1) {
|
||||
return new int[0];
|
||||
}
|
||||
values[0] = getMinimum();
|
||||
values[num_of_values - 1] = getMaximum();
|
||||
int[] def = createDefaultValues(getMinimum(), getMaximum(), num_of_values - 2, false);
|
||||
for (int i = 0; i < def.length; i++) {
|
||||
values[i + 1] = def[i];
|
||||
}
|
||||
}
|
||||
return values;
|
||||
}
|
||||
|
||||
/***
|
||||
* Returns the index number of currently operated thumb.
|
||||
*/
|
||||
public int getCurrentThumbIndex() {
|
||||
return ((MultiSliderUI)ui).getCurrentIndex();
|
||||
}
|
||||
|
||||
/***
|
||||
* Returns data model that handles the sliders three
|
||||
* fundamental properties: minimum, maximum, value.
|
||||
*
|
||||
* @see #setModel
|
||||
*/
|
||||
public BoundedRangeModel getModel() {
|
||||
return getModelAt(getCurrentThumbIndex());
|
||||
}
|
||||
|
||||
/***
|
||||
* Returns data model that handles the sliders three
|
||||
* fundamental properties: minimum, maximum, value.
|
||||
*
|
||||
* @see #setModel
|
||||
*/
|
||||
public BoundedRangeModel getModelAt(int index) {
|
||||
if (this.sliderModels == null || index >= this.sliderModels.length) {
|
||||
return null;
|
||||
}
|
||||
return this.sliderModels[index];
|
||||
}
|
||||
|
||||
/***
|
||||
* Returns data model that handles the sliders three
|
||||
* fundamental properties: minimum, maximum, value.
|
||||
*
|
||||
* @see #setModel
|
||||
*/
|
||||
public BoundedRangeModel[] getModels() {
|
||||
return this.sliderModels;
|
||||
}
|
||||
|
||||
/***
|
||||
* Sets the model that handles the sliders three
|
||||
* fundamental properties: minimum, maximum, value.
|
||||
*
|
||||
* @see #getModel
|
||||
* @beaninfo
|
||||
* bound: true
|
||||
* description: The sliders BoundedRangeModel.
|
||||
*/
|
||||
public void setModel(BoundedRangeModel newModel) {
|
||||
// Hack around jdk 7 problem: http://code.google.com/p/geoviz/issues/detail?id=80
|
||||
|
||||
try
|
||||
{
|
||||
setModelAt(getCurrentThumbIndex(), newModel);
|
||||
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
this.sliderModel = newModel;
|
||||
}
|
||||
}
|
||||
|
||||
/***
|
||||
* Sets the model that handles the sliders three
|
||||
* fundamental properties: minimum, maximum, value.
|
||||
*
|
||||
* @see #getModel
|
||||
* @beaninfo
|
||||
* bound: true
|
||||
* description: The sliders BoundedRangeModel.
|
||||
*/
|
||||
public void setModelAt(int index, BoundedRangeModel newModel) {
|
||||
BoundedRangeModel oldModel = getModelAt(index);
|
||||
|
||||
if (oldModel != null) {
|
||||
oldModel.removeChangeListener(changeListener);
|
||||
}
|
||||
|
||||
this.sliderModels[index] = newModel;
|
||||
|
||||
if (newModel != null) {
|
||||
newModel.addChangeListener(changeListener);
|
||||
|
||||
if (accessibleContext != null) {
|
||||
accessibleContext.firePropertyChange(
|
||||
AccessibleContext.ACCESSIBLE_VALUE_PROPERTY,
|
||||
(oldModel == null
|
||||
? null : new Integer(oldModel.getValue())),
|
||||
(newModel == null
|
||||
? null : new Integer(newModel.getValue())));
|
||||
}
|
||||
}
|
||||
|
||||
firePropertyChange("model", oldModel, this.sliderModels[index]);
|
||||
}
|
||||
|
||||
/***
|
||||
* Sets the models minimum property.
|
||||
*
|
||||
* @see #getMinimum
|
||||
* @see BoundedRangeModel#setMinimum
|
||||
* @beaninfo
|
||||
* bound: true
|
||||
* preferred: true
|
||||
* description: The sliders minimum value.
|
||||
*/
|
||||
public void setMinimum(int minimum) {
|
||||
int count = getNumberOfThumbs();
|
||||
int oldMin = getModel().getMinimum();
|
||||
for (int i = 0; i < count; i++) {
|
||||
getModelAt(i).setMinimum(minimum);
|
||||
}
|
||||
firePropertyChange( "minimum", new Integer( oldMin ), new Integer( minimum ) );
|
||||
}
|
||||
|
||||
/***
|
||||
* Sets the models maximum property.
|
||||
*
|
||||
* @see #getMaximum
|
||||
* @see BoundedRangeModel#setMaximum
|
||||
* @beaninfo
|
||||
* bound: true
|
||||
* preferred: true
|
||||
* description: The sliders maximum value.
|
||||
*/
|
||||
public void setMaximum(int maximum) {
|
||||
int count = getNumberOfThumbs();
|
||||
int oldMax = getModel().getMaximum();
|
||||
for (int i = 0; i < count; i++) {
|
||||
getModelAt(i).setMaximum(maximum);
|
||||
}
|
||||
firePropertyChange( "maximum", new Integer( oldMax ), new Integer( maximum ) );
|
||||
}
|
||||
|
||||
/***
|
||||
* Returns the sliders value.
|
||||
* @return the models value property
|
||||
* @see #setValue
|
||||
*/
|
||||
public int getValue() {
|
||||
// Hack around jdk 7 problem: http://code.google.com/p/geoviz/issues/detail?id=80
|
||||
try
|
||||
{
|
||||
return getValueAt(getCurrentThumbIndex());
|
||||
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/***
|
||||
* Returns the sliders value.
|
||||
* @return the models value property
|
||||
* @see #setValue
|
||||
*/
|
||||
public int getValueAt(int index) {
|
||||
return getModelAt(index).getValue();
|
||||
}
|
||||
|
||||
/***
|
||||
* Sets the sliders current value. This method just forwards
|
||||
* the value to the model.
|
||||
*
|
||||
* @see #getValue
|
||||
* @beaninfo
|
||||
* preferred: true
|
||||
* description: The sliders current value.
|
||||
*/
|
||||
public void setValue(int n) {
|
||||
setValueAt(getCurrentThumbIndex(), n);
|
||||
}
|
||||
|
||||
/***
|
||||
* Sets the sliders current value. This method just forwards
|
||||
* the value to the model.
|
||||
*
|
||||
* @see #getValue
|
||||
* @beaninfo
|
||||
* preferred: true
|
||||
* description: The sliders current value.
|
||||
*/
|
||||
public void setValueAt(int index, int n) {
|
||||
BoundedRangeModel m = getModelAt(index);
|
||||
int oldValue = m.getValue();
|
||||
m.setValue(n);
|
||||
|
||||
if (accessibleContext != null) {
|
||||
accessibleContext.firePropertyChange(
|
||||
AccessibleContext.ACCESSIBLE_VALUE_PROPERTY,
|
||||
new Integer(oldValue),
|
||||
new Integer(m.getValue()));
|
||||
}
|
||||
}
|
||||
|
||||
/***
|
||||
* True if the slider knob is being dragged.
|
||||
*
|
||||
* @return the value of the models valueIsAdjusting property
|
||||
* @see #setValueIsAdjusting
|
||||
*/
|
||||
public boolean getValueIsAdjusting() {
|
||||
boolean result = false;
|
||||
int count = getNumberOfThumbs();
|
||||
for (int i = 0; i < count; i++) {
|
||||
result = (result || getValueIsAdjustingAt(i));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/***
|
||||
* True if the slider knob is being dragged.
|
||||
*/
|
||||
public boolean getValueIsAdjustingAt(int index) {
|
||||
return getModelAt(index).getValueIsAdjusting();
|
||||
}
|
||||
|
||||
/***
|
||||
* Sets the models valueIsAdjusting property. Slider look and
|
||||
* feel implementations should set this property to true when
|
||||
* a knob drag begins, and to false when the drag ends. The
|
||||
* slider model will not generate ChangeEvents while
|
||||
* valueIsAdjusting is true.
|
||||
*
|
||||
* @see #getValueIsAdjusting
|
||||
* @see BoundedRangeModel#setValueIsAdjusting
|
||||
* @beaninfo
|
||||
* expert: true
|
||||
* description: True if the slider knob is being dragged.
|
||||
*/
|
||||
public void setValueIsAdjusting(boolean b) {
|
||||
setValueIsAdjustingAt(getCurrentThumbIndex(), b);
|
||||
}
|
||||
|
||||
/***
|
||||
* Sets the models valueIsAdjusting property. Slider look and
|
||||
* feel implementations should set this property to true when
|
||||
* a knob drag begins, and to false when the drag ends. The
|
||||
* slider model will not generate ChangeEvents while
|
||||
* valueIsAdjusting is true.
|
||||
*/
|
||||
public void setValueIsAdjustingAt(int index, boolean b) {
|
||||
BoundedRangeModel m = getModelAt(index);
|
||||
boolean oldValue = m.getValueIsAdjusting();
|
||||
m.setValueIsAdjusting(b);
|
||||
|
||||
if ((oldValue != b) && (accessibleContext != null)) {
|
||||
accessibleContext.firePropertyChange(
|
||||
AccessibleContext.ACCESSIBLE_STATE_PROPERTY,
|
||||
((oldValue) ? AccessibleState.BUSY : null),
|
||||
((b) ? AccessibleState.BUSY : null));
|
||||
}
|
||||
}
|
||||
|
||||
/***
|
||||
* Sets the size of the range "covered" by the knob. Most look
|
||||
* and feel implementations will change the value by this amount
|
||||
* if the user clicks on either side of the knob.
|
||||
*
|
||||
* @see #getExtent
|
||||
* @see BoundedRangeModel#setExtent
|
||||
* @beaninfo
|
||||
* expert: true
|
||||
* description: Size of the range covered by the knob.
|
||||
*/
|
||||
public void setExtent(int extent) {
|
||||
int count = getNumberOfThumbs();
|
||||
for (int i = 0; i < count; i++) {
|
||||
getModelAt(i).setExtent(extent);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/***
|
||||
* Sets a bounded attribute of a slider thumb.
|
||||
* <PRE>
|
||||
* </PRE>
|
||||
*
|
||||
* @param b
|
||||
* @return void
|
||||
*/
|
||||
public void setBounded(boolean b) {
|
||||
this.bounded = b;
|
||||
}
|
||||
/***
|
||||
* Sets a bounded attribute of a slider thumb.
|
||||
* <PRE>
|
||||
* </PRE>
|
||||
*
|
||||
* @param b
|
||||
* @return void
|
||||
*/
|
||||
public void setBounded(boolean b) {
|
||||
this.bounded = b;
|
||||
}
|
||||
|
||||
/***
|
||||
* Returns a bounded attribute of a slider thumb.
|
||||
* <PRE>
|
||||
* </PRE>
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public boolean isBounded() {
|
||||
return this.bounded;
|
||||
}
|
||||
/***
|
||||
* Returns a bounded attribute of a slider thumb.
|
||||
* <PRE>
|
||||
* </PRE>
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public boolean isBounded() {
|
||||
return this.bounded;
|
||||
}
|
||||
|
||||
public int getValueBeforeStateChange() {
|
||||
return this.valueBeforeStateChange;
|
||||
}
|
||||
public int getValueBeforeStateChange() {
|
||||
return this.valueBeforeStateChange;
|
||||
}
|
||||
|
||||
void setValueBeforeStateChange(int v) {
|
||||
this.valueBeforeStateChange = v;
|
||||
}
|
||||
void setValueBeforeStateChange(int v) {
|
||||
this.valueBeforeStateChange = v;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user