diff options
author | Graydon Hoare <graydon@gcc.gnu.org> | 2004-03-17 21:29:02 +0000 |
---|---|---|
committer | Graydon Hoare <graydon@gcc.gnu.org> | 2004-03-17 21:29:02 +0000 |
commit | 86881a7b541b2ec6557b1a315f841b211d14c576 (patch) | |
tree | 02790a2b250b62643a1de68b63bd078238bfaf46 /libjava/javax/swing/JScrollBar.java | |
parent | ab3533d6559205bee768b8d9e359111d52d10733 (diff) | |
download | gcc-86881a7b541b2ec6557b1a315f841b211d14c576.zip gcc-86881a7b541b2ec6557b1a315f841b211d14c576.tar.gz gcc-86881a7b541b2ec6557b1a315f841b211d14c576.tar.bz2 |
[multiple changes]
2004-03-12 Graydon Hoare <graydon@redhat.com>
* gnu/java/awt/peer/gtk/GdkGraphics2D.java: Clipping fixes.
* javax/swing/JComponent.java (paint): Use persistent double buffer.
* javax/swing/JList.java (ListListener): Revalidate on changes.
* javax/swing/JScrollPane.java: Reimplement.
* javax/swing/JViewport.java: Reimplement.
* javax/swing/ScrollPaneLayout.java: Reimplement.
* javax/swing/ViewportLayout.java: Tidy up.
* javax/swing/plaf/basic/BasicButtonListener.java: Remove printlns.
* javax/swing/plaf/basic/BasicScrollPaneUI.java: Reimplement.
* javax/swing/plaf/basic/BasicSliderUI.java: Handle missing labels.
* javax/swing/plaf/basic/BasicViewportUI.java: Implement in terms of
backing store only.
2004-03-11 Thomas Fitzsimmons <fitzsim@redhat.com>
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
(window_wm_protocols_filter): New function.
(window_focus_in_cb): Remove function.
(window_focus_out_cb): Likewise.
(window_focus_or_active_state_change_cb): New function.
(create): Add filter that removes WM_TAKE_FOCUS client messages.
(connectSignals): Don't attach handlers to focus-in-event or
focus-out-event signals. Handle notify signal.
2004-03-11 David Jee <djee@redhat.com>
* gnu/java/awt/peer/gtk/GtkCheckboxPeer.java
(gtkSetLabel): New native method declaration.
(setLabel): Use gtkSetLabel.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
(Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_gtkSetLabel): New method.
2004-03-10 Thomas Fitzsimmons <fitzsim@redhat.com>
* gnu/java/awt/peer/gtk/GdkGraphics.java (setColor): Default to
black when color argument is null.
2004-03-10 Kim Ho <kho@redhat.com>
* java/awt/Container.java: Remove check
for drag events.
2004-03-10 Kim Ho <kho@redhat.com>
* java/awt/Container.java: (visitChild):
Remove candidate clip. Use the component
clip to intersect.
* gnu/java/awt/peer/gtk/GtkComponentPeer.java:
(handleEvent): Use the PaintEvent's clip.
2004-03-10 Kim Ho <kho@redhat.com>
* gnu/java/awt/peer/gtk/GtkComponentPeer.java:
(handleEvent): Don't set the clip for the
Graphics object.
2004-03-09 Graydon Hoare <graydon@redhat.com>
* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c:
Fix double <-> fixed macros, reset font transform.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeerMetrics.c:
Likewise.
2004-03-09�� Kim Ho <kho@redhat.com>
* java/awt/Container.java: (visitChild): Move
the x and y coordinate of the component rectangle
to correct position.
(handleEvent): Forward drag events to the pressed
component.
* javax/swing/plaf/basic/BasicScrollBarUI.java:
Fix comments.
(ArrowButtonListener::mousePressed): Stop the
existing timer.
(mouseDragged): Implement.
(TrackListener::mousePressed): Only react if
the press doesn't occur on the thumb, otherwise
just set the offset.
(TrackListener::mouseReleased): Unset the isAdjusting
value.
(createIncreaseIcon): Switch icon.
(createDecreaseIcon): Switch icon.
(calculatePreferredSize): Use width.
(getThumbBounds): Use the top as the lower value.
(layoutVScrollBar): Switch the button locations.
(paintIncreaseHighlight): Paint correct side of thumb.
(paintDecreaseHighlight): ditto.
(valueForYPosition): Use top as the lower value.
* javax/swing/plaf/basic/BasicSliderUI.java:
Fix comments.
(mouseDragged): Implement.
(mousePressed): Only react when the thumb isn't
pressed, otherwise just set offset.
(mouseReleased): Handle a release of the thumb.
(scrollDueToClickInTrack): Stop the timer first.
* javax/swing/JProgressBar.java:
(setString): Fix change condition.
* javax/swing/JSeparator.java:
Remove println's.
2004-03-08 David Jee <djee@redhat.com>
* java/awt/image/AffineTransformOp.java:
(filter): Use Graphics2D interface instead of directly using the
GdkGraphics2D peer.
2004-03-05 David Jee <djee@redhat.com>
* gnu/java/awt/peer/gtk/GtkButtonPeer.java
(handleEvent): Action events are generated upon MOUSE_RELEASED.
* java/awt/Container.java
(acquireComponentForMouseEvent): Fixed.
(handleEvent): Fixed.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
(state_to_awt_mods_with_button_states): New method.
(pre_event_handler): Fixed mouse event generation.
2004-03-05 Olga Rodimina <rodimina@redhat.com>
gnu/java/awt/peer/gtk/GdkGraphics2D.java
(GdkGraphics2D (BufferedImage)): Initialize
pixmap associated with specified BufferedImage.
(setPaint): Changed implementation of Texture
Paint to use AffineTransformOp.
* java/awt/image/AffineTransformOp.java
(createCompatibleDestRaster): Throw RasterFormatException
if resulting width or height of raster is 0.
2004-03-04 Olga Rodimina <rodimina@redhat.com>
* java/awt/image/AffineTransformOp.java:
Removed unnecessary field interpolationType.
Formatted some of the lines to be consistent with
the GNU style.
(AffineTransformOp): Create new RenderingHints
containing specified interpolation type.
(createCompatibleDestImage): Implemented.
(createCompatibleDestRaster): Implemented.
(filter): Implemented.
(getBounds2D(BufferedImage)): Implemented.
(getBounds2D(Raster)): Implemented.
(getInterpolationType): Get interpolation value from
rendering hints.
2004-03-04 David Jee <djee@redhat.com>
* gnu/java/awt/peer/gtk/GtkContainerPeer.java
(setFont): Check if child peers are null.
2004-03-04 Graydon Hoare <graydon@redhat.com>
* testsuite/lib/libjava.exp (libjava_find_lib): Don't include
.libs in -L option.
(libjava_arguments): Add new libraries to argument list.
2004-03-04 Tom Tromey <tromey@redhat.com>
* Makefile.in: Rebuilt.
* Makefile.am (toolexeclib_LTLIBRARIES): Added lib-java-awt.la,
lib-javax-swing.la, lib-java-applet.la, lib-java-beans.la.
(misc_java_source_files): New macro.
(swing_java_source_files): Likewise.
(awt_java_source_files): Pruned.
(applet_java_source_files): New macro.
(beans_java_source_files): Likewise.
(lib_java_applet_la_SOURCES): Likewise.
(lib_java_awt_la_SOURCES): Likewise.
(lib_javax_swing_la_SOURCES): Likewise.
(lib_java_beans_la_SOURCES): Likewise.
(all_java_object_files): Likewise.
(%.lo: %.java): Use all_java_object_files.
(all_java_source_files): Added new _SOURCES.
(ordinary_java_source_files): Removed awt_java_source_files.
2004-03-02 Olga Rodimina <rodimina@redhat.com>
* Makefile.am: Added java/awt/image/AffineTransformOp.java
* Makefile.in: Re-generated.
* java/awt/image/AffineTransformOp.java: New Class.
2004-03-01 Olga Rodimina <rodimina@redhat.com>
* gnu/java/awt/peer/gtk/GdkGraphics2D.java
(setPaint): Interpret correctly TexturePaint's
anchor rectangle.
(drawImage): Fixed scale factors of the affine
transform.
2004-02-27 David Jee <djee@redhat.com>
* gnu/java/awt/peer/gtk/GdkGraphics.java
(GdkGraphics(Component)): Inherit font from component.
(drawString): Use font style.
* gnu/java/awt/peer/gtk/GtkCheckboxPeer.java
(gtkSetFont): New native method declaration.
(setFont): New method.
* gnu/java/awt/peer/gtk/GtkComponentPeer.java
(gtkSetFont): New native method declaration.
(setFont): Call new native method gtkSetFont.
* gnu/java/awt/peer/gtk/GtkContainerPeer.java
(setFont): For all child components who do not their fonts set,
set their peers' fonts with this container's font.
* gnu/java/awt/peer/gtk/GtkLabelPeer.java:
Move all native method declarations to the top for readability.
(gtkSetFont): New native method declaration.
(setFont): New method.
* java/awt/Component.java
(setFont): Invalidate after setting the font.
* java/awt/Container.java
(invalidateTree): New method.
(setFont): Invalidate the container tree after setting the font.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c
(Java_gnu_java_awt_peer_gtk_GdkGraphics_drawString): Use font style.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
(Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_gtkSetFont): New method.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkSetFont): New method.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c
(Java_gnu_java_awt_peer_gtk_GtkLabelPeer_gtkSetFont): New method.
2004-02-27 Olga Rodimina <rodimina@redhat.com>
* gnu/java/awt/peer/gtk/GdkGraphics2D.java
(updateBufferedImage): New helper function.
Updates BufferedImage in memory if it was changed.
(draw): changed to update BufferedImage in memory after
this drawing operation
(fill): Ditto.
(draw3DRect): Ditto.
(fill3DRect): Ditto.
(clearRect): Ditto.
(drawRaster): Ditto.
(drawImage) : Ditto. Update only in case of GtkOffScreenImage with
no affine transformation.
(drawGlyphVector): Ditto.
2004-02-26 Olga Rodimina <rodimina@redhat.com>
* gnu/java/awt/peer/gtk/GdkGraphics2D.java
(isBufferedImageGraphics): New Helper function.
Returns true if this graphics2d can be used to draw
into buffered image and false otherwise.
(updateImagePixels): New Helper function.
Updates pixels in the BufferedImage.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
(getImagePixels): New function. Returns pixels
of the buffered image associated with
this Graphics2D.
2004-02-26 David Jee <djee@redhat.com>
* java/awt/BorderLayout.java
(layoutContainer): Fix width and height calculations to ensure
that they're non-negative.
* java/awt/Component.java
(setBackground): If c is null, inherit from closest ancestor whose
background color is set.
2004-02-26�� Kim Ho�� <kho@redhat.com>
* Makefile.am: Add new files.
* Makefile.in: Re-generate.
* javax/swing/JProgressBar.java:
(JProgressBar(int, int int)): Throw
IllegalArgumentException if orientation is
invalid.
(JProgressBar(BoundedRangeModel)): Create
ChangeListener and register it. UpdateUI.
(getChangeListeners): Implement.
(setModel): Reset ChangeListener.
* javax/swing/JScrollBar.java: Implement.
* javax/swing/JSeparator.java: Implement.
* javax/swing/JSlider.java:
(JSlider(int, int, int, int)): Throw
IllegalArgumentException if orientation
is invalid.
(getChangeListeners): Fix method name.
* javax/swing/SwingUtilities.java:
(layoutCompoundLabel): If there is no text,
set the text rectangle dimensions to 0.
* javax/swing/plaf/basic/BasicButtonUI.java:
(paint): If there is no text, don't paint it.
* javax/swing/plaf/basic/BasicScrollBarUI.java:
Implement.
* javax/swing/plaf/basic/BasicSeparatorUI.java:
Implement.
* javax/swing/plaf/basic/BasicSliderUI.java:
(propertyChange): If the model changes, change
the listeners accordingly.
2004-02-25 Graydon Hoare <graydon@redhat.com>
* javax/swing/AbstractButton.java: Add "final" qualifiers.
* javax/swing/JList.java: Reimplement.
* javax/swing/DefaultListSelectionModel.java: Reimplement.
* javax/swing/plaf/basic/BasicListUI.java: Reimplement.
* javax/swing/plaf/basic/BasicLookAndFeel.java: Add "purple" values.
* javax/swing/ListModel.java: Javadoc.
* javax/swing/ListSelectionModel.java: Add missing methods.
* javax/swing/AbstractListModel.java: Javadoc and corrections.
* javax/swing/DefaultListModel.java: Javadoc and corrections.
* javax/swing/ListModel.java: Javadoc and corrections.
* javax/swing/DefaultListCellRenderer.java: Minor tidying.
2004-02-25 David Jee <djee@redhat.com>
* gnu/java/awt/peer/gtk/GtkFontPeer.java
(GtkFontPeer): Change default size to 12.
* gnu/java/awt/peer/gtk/GtkToolkit.java
(getFontPeer): Change default size to 12.
(getClasspathFontPeer): Likewise. Set default name to "Default".
* java/awt/Font.java
(Font(Map)): Call Font(String,Map).
(Font(String,Map)): If attrs is null, initialize it as an empty
HashMap, which will ensure that the Font will get default attributes.
2004-02-25 David Jee <djee@redhat.com>
* gnu/java/awt/peer/gtk/GtkFontPeer.java
(GtkFontPeer(String,int)): Call the new constructor with size 1.
(GtkFontPeer(String,int,int)): New constructor with size attribute.
* gnu/java/awt/peer/gtk/GtkToolkit.java
(getFontPeer(String,int)): Call the new overload method with size 1.
(getFontPeer(String,int,int)): New method. Overloaded with size
attribute.
(getClasspathFontPeer): Set the size of the font.
2004-02-24 Olga Rodimina <rodimina@redhat.com>
* gnu/java/awt/peer/gtk/GdkGraphics2D.java
(bimage): New field.
(GdkGraphics2D): New Constructor. Constructs Graphics
object that can be used to draw into the Buffered Image.
* gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java:
(GdkGraphicsEnvironment): Fixed to include public
keyword.
(createGraphics): Implemented.
* gnu/java/awt/peer/gtk/GtkToolkit.java
(getLocalGraphicsEnvironment): Implemented.
* java/awt/GraphicsEnvironment.java:
(getLocalGraphicsEnvironment): Implemented.
* java/awt/image/BufferedImage.java:
(createGraphics): Implemented.
2004-02-24 David Jee <djee@redhat.com>
* java/awt/Component.java
(eventTypeEnabled): Add MOUSE_MOVED and MOUSE_DRAGGED event types.
* java/awt/Container.java
(addNotifyContainerChildren): Fix event enabling.
2004-02-23 Olga Rodimina <rodimina@redhat.com>
* Makefile.am: Added
gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java
* Makefile.in: Re-generated.
* gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java:
New Class.
2004-02-19 Kim Ho <kho@redhat.com>
* Makefile.am: Add BasicProgressBarUI
* Makefile.in: Regenerate.
* javax/swing/JProgressBar.java:
Re-implement.
* javax/swing/plaf/basic/BasicLookAndFeel.java
Add constants for JProgressBar.
* javax/swing/plaf/basic/BasicProgressBarUI.java
Implement.
* javax/swing/plaf/basic/BasicSliderUI.java
Change comments.
(calculateGeometry): New method
(paint): Remove unnecessary size calculations.
2004-02-18 Olga Rodimina <rodimina@redhat.com>
* gnu/java/awt/peer/gtk/GdkGraphics2D.java
(drawRaster): Fixed small error that caused
imageToUser transformation to be set incorrectly.
(toString): Implemented.
2004-02-18 David Jee <djee@redhat.com>
* java/awt/CardLayout.java
(addLayoutComponent): Show the first component added as the default.
(removeLayoutComponent): After removing, show the next component.
(gotoComponent): If there is only one component, show it and return.
2004-02-18 Kim Ho <kho@redhat.com>
* javax/swing/JSlider.java: Re-order
modifiers.
* javax/swing/JLabel.java: Re-order
modifiers.
* javax/swing/JComponent.java:
(addPropertyChangeListener):
Implement.
(removePropertyChangeListener):
ditto.
(firePropertyChangeEvent):
ditto.
2004-02-17 David Jee <djee@redhat.com>
* java/awt/Component.java
(show): Dispatch ComponentEvent via system event queue.
(hide): Likewise.
(move): Likewise.
(resize): Likewise.
(reshape): Likewise.
* java/awt/Window.java
(setBoundsCallback): Likewise.
2004-02-17 David Jee <djee@redhat.com>
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_setNativeBounds):
Use gtk_widget_set_size_request() instead of the deprecated
gtk_widget_set_usize().
2004-02-17 Kim Ho <kho@redhat.com>
* javax/swing/JSlider.java: Fix comments and
make property strings constants.
(createStandardLabels): Use the labels
preferred size as bounds.
* javax/swing/plaf/basic/BasicSliderUI.java
Fix comments.
(ScrollHandler::actionPerformed): Don't
calculate the timer stop value. Let the
MouseListeners find the stop location.
(getPreferredHorizontalSize): Re-implement.
(getPreferredVerticalSize): ditto.
(getMinimumHorizontalSize): ditto.
(getMinimumVerticalSize): ditto.
(getPreferredSize): ditto.
(getMinimumSize): ditto.
(getMaximumSize): ditto.
(paintTicks): Use doubles to find the
tick location.
(paintHorizontalLabel):�� Use preferredSize
as initial width and height.
(paintVerticalLabel): ditto.
2004-02-17 Kim Ho <kho@redhat.com>
* javax/swing/JLabel.java: Changed
property strings to constants.
(DISPLAYED_MNEMONIC_INDEX_CHANGED_PROPERTY):
New property.
(setText): Change mnemonic index if
text is too short.
(setDisplayedMnemonicIndex): Fire property
change event.
(getDisplayedMnemonicIndex): Remove check
against short text.
2004-02-17 Olga Rodimina <rodimina@redhat.com>
* gnu/java/awt/peer/gtk/GdkGraphics2D.java:
(drawImage(img,xform,obs)): Invert xform before
passing the xform to cairo.
(drawImage(img,x,y,bgcolor,obs)): Implemented.
(drawImage (img,x,y,w,h,bgcolor,obs)): Partly
implemented.
(drawImage (img,x,y,w,h,obs)): Implemented.
(drawImage (img,dx1,dy1,dx2,dy2,sx1,sy1,sx2,sy2,
bgcolor,obs)): Partly implemented.
(drawImage (img,dx1,dy1,dx2,dy2,sx1,sy1,sx2,sy2,obs)):
Implemented.
* java/awt/image/BufferedImage.java:
(copyData): if dest is null, create raster with same
dimensions as the current image.
2004-02-16 Graydon Hoare <graydon@redhat.com>
* javax/swing/plaf/basic/BasicLabelUI.java
(getPreferredSize): Use layoutCL.
* javax/swing/plaf/basic/BasicGraphicsUtils.java
(getPreferredButtonSize): Start with empty view rect, layout using
component's preferred alignment.
* javax/swing/plaf/basic/BasicLookAndFeel.java: Add some Label and
List defaults.
2004-02-16 David Jee <djee@redhat.com>
* java/awt/Component.java
(show): Dispatch COMPONENT_SHOWN ComponentEvent.
(hide): Dispatch COMPONENT_HIDDEN ComponentEvent.
(move): Erase old bounds and repaint new bounds. Dispatch
COMPONENT_MOVED ComponentEvent.
(resize): Erase old bounds and repaint new bounds. Dispatch
COMPONENT_RESIZED ComponentEvent.
(reshape): Dispatch COMPONENT_RESIZED and COMPONENT_MOVED
ComponentEvents.
* java/awt/Window.java
(setBoundsCallback): Dispatch COMPONENT_RESIZED and COMPONENT_MOVED
ComponentEvents.
2004-02-16 Olga Rodimina <rodimina@redhat.com>
* gnu/java/awt/peer/gtk/GdkGraphics2D.java:
(setRenderingHint): Added implementation of
Interpolation rendering hints.
(setRenderingHints): Ditto.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c:
(drawPixels): fixed to allow user to choose type
of filtering that should be used when displaying images.
(cairoSurfaceSetFilter): New method. Sets filter type for
interpolation of pixel values.
2004-02-16 David Jee <djee@redhat.com>
* java/awt/GridBagLayout.java
(calcCellSizes): Rows or columns with zero sizes should still be
considered for extra space distribution.
2004-02-16 Kim Ho <kho@redhat.com>
* javax/swing/JLabel.java: Re-implement.
* javax/swing/plaf/basic/BasicLabelUI.java
Re-implement.
* javax/swing/plaf/basic/BasicLookAndFeel.java:
Added constant.
2004-02-16�� Kim Ho�� <kho@redhat.com>
* javax/swing/JSlider.java: Fix indentation and comments.
(setModel): Remove null check to conform with Sun's.
(setOrientation): Throw exception if not
HORIZONTAL or VERTICAL.
(getInverted): Use private variable instead of
ComponentOrientation.
(setInverted): ditto.
* javax/swing/plaf/basic/BasicSliderUI.java:
Fix indentation and comments.
(propertyChange): Remove check for inverted slider, handle
in main paint.
(getMinimumSize): Return preferred size.
(getMaximumSize): ditto.
(calculateFocusRect): Don't relocate rectangle.
(drawInverted): Return XOR of the slider's inversion and
the component's orientation.
(paint): Update leftToRightCache
2004-02-13 David Jee <djee@redhat.com>
* java/awt/GridBagLayout.java
(GetLayoutInfo): Fix weight and size distribution. Relocate repeated
code to helper methods.
(sortBySpan): New helper method.
(distributeSizeAndWeight): Likewise.
(calcCellWeights): Likewise.
(calcCellSizes): Add comments.
2004-02-13 David Jee <djee@redhat.com>
* java/awt/Component.java
(show): Only do something if component is invisible at the moment.
(hide): Only do something if component is visible at the moment.
(reshape): If lightweight, erase old bounds and repaint new bounds.
2004-02-13�� Kim Ho�� <kho@redhat.com>
* Makefile.am: Updated for new file.
* Makefile.in: Regenerated.
* javax/swing/JSlider.java: Reimplement.
* javax/swing/SwingUtilities.java
(layoutCompoundLabel): Use icon height
instead of width.
(paintComponent): Implement.
* javax/swing/plaf/basic/BasicLookAndFeel.java:
Add JSlider defaults.
* javax/swing/plaf/basic/BasicSliderUI.java:
Implement. New file.
From-SVN: r79607
Diffstat (limited to 'libjava/javax/swing/JScrollBar.java')
-rw-r--r-- | libjava/javax/swing/JScrollBar.java | 702 |
1 files changed, 698 insertions, 4 deletions
diff --git a/libjava/javax/swing/JScrollBar.java b/libjava/javax/swing/JScrollBar.java index 1cf6667..7ee0510 100644 --- a/libjava/javax/swing/JScrollBar.java +++ b/libjava/javax/swing/JScrollBar.java @@ -1,5 +1,5 @@ -/* JScrollBar.java -- - Copyright (C) 2002 Free Software Foundation, Inc. +/* JScrollBar.java -- + Copyright (C) 2002, 2004 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -35,13 +35,707 @@ 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.Adjustable; +import java.awt.Dimension; +import java.awt.event.AdjustmentEvent; import java.awt.event.AdjustmentListener; import javax.accessibility.Accessible; +import javax.accessibility.AccessibleContext; +import javax.accessibility.AccessibleRole; +import javax.accessibility.AccessibleStateSet; +import javax.accessibility.AccessibleValue; +import javax.swing.SwingConstants; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import javax.swing.event.EventListenerList; +import javax.swing.plaf.ProgressBarUI; +import javax.swing.plaf.ScrollBarUI; + -public class JScrollBar extends JComponent +/** + * The JScrollBar. Two buttons control how the values that the + * scroll bar can take. You can also drag the thumb or click the track + * to move the scroll bar. Typically, the JScrollBar is used with + * other components to translate the value of the bar to the viewable + * contents of the other components. + */ +public class JScrollBar extends JComponent implements Adjustable, Accessible { + /** + * DOCUMENT ME! + */ + protected class AccessibleJScrollBar extends JComponent.AccessibleJComponent + implements AccessibleValue + { + /** + * Creates a new AccessibleJSlider object. + * + * @param value0 DOCUMENT ME! + */ + protected AccessibleJScrollBar(JScrollBar value0) + { + super(value0); + } + + /** + * DOCUMENT ME! + * + * @return DOCUMENT ME! + */ + public AccessibleStateSet getAccessibleStateSet() + { + return null; + } + + /** + * DOCUMENT ME! + * + * @return DOCUMENT ME! + */ + public AccessibleRole getAccessibleRole() + { + return null; + } + + /** + * DOCUMENT ME! + * + * @return DOCUMENT ME! + */ + public AccessibleValue getAccessibleValue() + { + return null; + } + + /** + * DOCUMENT ME! + * + * @return DOCUMENT ME! + */ + public Number getCurrentAccessibleValue() + { + return null; + } + + /** + * setCurrentAccessibleValue + * + * @param value0 TODO + * + * @return boolean + */ + public boolean setCurrentAccessibleValue(Number value0) + { + return false; + } + + /** + * getMinimumAccessibleValue + * + * @return Number + */ + public Number getMinimumAccessibleValue() + { + return null; + } + + /** + * getMaximumAccessibleValue + * + * @return Number + */ + public Number getMaximumAccessibleValue() + { + return null; + } + } + + /** Fired in a PropertyChangeEvent when the "blockIncrement" changes. */ + public static final String BLOCK_INCREMENT_CHANGED_PROPERTY = "blockIncrement"; + + /** Fired in a PropertyChangeEvent when the "model" changes. */ + public static final String MODEL_CHANGED_PROPERTY = "model"; + + /** Fired in a PropertyChangeEvent when the "orientation" changes. */ + public static final String ORIENTATION_CHANGED_PROPERTY = "orientation"; + + /** Fired in a PropertyChangeEvent when the "unitIncrement" changes. */ + public static final String UNIT_INCREMENT_CHANGED_PROPERTY = "unitIncrement"; + + /** How much the thumb moves when moving in a block. */ + protected int blockIncrement = 10; + + /** The model that holds the scroll bar's data. */ + protected BoundedRangeModel model; + + /** The orientation of the scroll bar. */ + protected int orientation = SwingConstants.HORIZONTAL; + + /** How much the thumb moves when moving in a unit. */ + protected int unitIncrement = 1; + + /** A list of all ChangeListeners attached to the scroll bar. */ + private transient EventListenerList changeListenerList; + + /** A list of all AdjustmentListeners attached to the scroll bar. */ + private transient EventListenerList adjustmentListenerList; + + /** The ChangeListener that listens to the model. */ + private transient ChangeListener changeListener; + + /** The ChangeEvent that's fired. */ + private transient ChangeEvent changeEvent; + + /** + * Creates a new horizontal JScrollBar object with a minimum + * of 0, a maxmium of 100, a value of 0 and an extent of 10. + */ + public JScrollBar() + { + this(SwingConstants.HORIZONTAL, 0, 10, 0, 100); + } + + /** + * Creates a new JScrollBar object with a minimum of 0, a + * maximum of 100, a value of 0, an extent of 10 and the given + * orientation. + * + * @param orientation The orientation of the JScrollBar. + */ + public JScrollBar(int orientation) + { + this(orientation, 0, 10, 0, 100); + } + + /** + * Creates a new JScrollBar object with the given orientation, + * value, min, max, and extent. + * + * @param orientation The orientation to use. + * @param value The value to use. + * @param extent The extent to use. + * @param min The minimum value of the scrollbar. + * @param max The maximum value of the scrollbar. + */ + public JScrollBar(int orientation, int value, int extent, int min, int max) + { + model = new DefaultBoundedRangeModel(value, extent, min, max); + if (orientation != SwingConstants.HORIZONTAL + && orientation != SwingConstants.VERTICAL) + throw new IllegalArgumentException(orientation + + " is not a legal orientation"); + this.orientation = orientation; + changeListener = createChangeListener(); + changeListenerList = new EventListenerList(); + adjustmentListenerList = new EventListenerList(); + model.addChangeListener(changeListener); + updateUI(); + } + + /** + * This method sets the UI of this scrollbar to + * the given UI. + * + * @param ui The UI to use with this scrollbar. + */ + public void setUI(ScrollBarUI ui) + { + super.setUI(ui); + } + + /** + * This method returns the UI that is being used + * with this scrollbar. + * + * @return The scrollbar's current UI. + */ + public ScrollBarUI getUI() + { + return (ScrollBarUI) ui; + } + + /** + * This method changes the UI to be the + * default for the current look and feel. + */ + public void updateUI() + { + setUI((ScrollBarUI) UIManager.getUI(this)); + invalidate(); + repaint(); + } + + /** + * This method returns an identifier to + * choose the correct UI delegate for the + * scrollbar. + * + * @return The identifer to choose the UI delegate; "ScrollBarUI" + */ + public String getUIClassID() + { + return "ScrollBarUI"; + } + + /** + * This method returns the orientation of the scrollbar. + * + * @return The orientation of the scrollbar. + */ + public int getOrientation() + { + return orientation; + } + + /** + * This method sets the orientation of the scrollbar. + * + * @param orientation The orientation of the scrollbar. + */ + public void setOrientation(int orientation) + { + if (orientation != SwingConstants.HORIZONTAL + && orientation != SwingConstants.VERTICAL) + throw new IllegalArgumentException("orientation must be one of HORIZONTAL or VERTICAL"); + if (orientation != this.orientation) + { + int oldOrientation = this.orientation; + this.orientation = orientation; + firePropertyChange(ORIENTATION_CHANGED_PROPERTY, oldOrientation, + this.orientation); + } + } + + /** + * This method returns the model being used with + * the scrollbar. + * + * @return The scrollbar's model. + */ + public BoundedRangeModel getModel() + { + return model; + } + + /** + * This method sets the model to use with + * the scrollbar. + * + * @param newModel The new model to use with the scrollbar. + */ + public void setModel(BoundedRangeModel newModel) + { + if (model != newModel) + { + BoundedRangeModel oldModel = model; + model = newModel; + oldModel.removeChangeListener(changeListener); + model.addChangeListener(changeListener); + firePropertyChange(MODEL_CHANGED_PROPERTY, oldModel, model); + } + } + + /** + * This method returns how much the scrollbar's value + * should change for a unit increment depending on the + * given direction. + * + * @param direction The direction to scroll in. + * + * @return The amount the scrollbar's value will change given the direction. + */ + public int getUnitIncrement(int direction) + { + return direction * unitIncrement; + } + + /** + * This method sets the unitIncrement property. + * + * @param unitIncrement The new unitIncrement. + */ + public void setUnitIncrement(int unitIncrement) + { + if (unitIncrement != this.unitIncrement) + { + int oldInc = this.unitIncrement; + this.unitIncrement = unitIncrement; + firePropertyChange(UNIT_INCREMENT_CHANGED_PROPERTY, oldInc, + this.unitIncrement); + } + } + + /** + * The method returns how much the scrollbar's value + * should change for a block increment depending on + * the given direction. + * + * @param direction The direction to scroll in. + * + * @return The amount the scrollbar's value will change given the direction. + */ + public int getBlockIncrement(int direction) + { + return direction * blockIncrement; + } + + /** + * This method sets the blockIncrement property. + * + * @param blockIncrement The new blockIncrement. + */ + public void setBlockIncrement(int blockIncrement) + { + if (blockIncrement != this.blockIncrement) + { + int oldInc = this.blockIncrement; + this.blockIncrement = blockIncrement; + firePropertyChange(BLOCK_INCREMENT_CHANGED_PROPERTY, oldInc, + this.blockIncrement); + } + } + + /** + * This method returns the unitIncrement. + * + * @return The unitIncrement. + */ + public int getUnitIncrement() + { + return unitIncrement; + } + + /** + * This method returns the blockIncrement. + * + * @return The blockIncrement. + */ + public int getBlockIncrement() + { + return blockIncrement; + } + + /** + * This method returns the value of the scrollbar. + * + * @return The value of the scrollbar. + */ + public int getValue() + { + return model.getValue(); + } + + /** + * This method changes the value of the scrollbar. + * + * @param value The new value of the scrollbar. + */ + public void setValue(int value) + { + if (isEnabled() && value != getValue()) + { + model.setValue(value); + fireAdjustmentValueChanged(AdjustmentEvent.ADJUSTMENT_VALUE_CHANGED, + AdjustmentEvent.TRACK, value); + } + } + + /** + * This method returns the visible amount (AKA extent). + * The visible amount can be used by UI delegates to + * determine the size of the thumb. + * + * @return The visible amount (AKA extent). + */ + public int getVisibleAmount() + { + return model.getExtent(); + } + + /** + * This method sets the visible amount (AKA extent). + * + * @param extent The visible amount (AKA extent). + */ + public void setVisibleAmount(int extent) + { + if (extent != getVisibleAmount()) + { + model.setExtent(extent); + fireAdjustmentValueChanged(AdjustmentEvent.ADJUSTMENT_VALUE_CHANGED, + AdjustmentEvent.TRACK, extent); + } + } + + /** + * This method returns the minimum value of the scrollbar. + * + * @return The minimum value of the scrollbar. + */ + public int getMinimum() + { + return model.getMinimum(); + } + + /** + * This method sets the minimum value of the scrollbar. + * + * @param minimum The minimum value of the scrollbar. + */ + public void setMinimum(int minimum) + { + if (minimum != getMinimum()) + { + model.setMinimum(minimum); + fireAdjustmentValueChanged(AdjustmentEvent.ADJUSTMENT_VALUE_CHANGED, + AdjustmentEvent.TRACK, minimum); + } + } + + /** + * This method returns the maximum value of the scrollbar. + * + * @return The maximum value of the scrollbar. + */ + public int getMaximum() + { + return model.getMaximum(); + } + + /** + * This method sets the maximum value of the scrollbar. + * + * @param maximum The maximum value of the scrollbar. + */ + public void setMaximum(int maximum) + { + if (maximum != getMaximum()) + { + model.setMaximum(maximum); + fireAdjustmentValueChanged(AdjustmentEvent.ADJUSTMENT_VALUE_CHANGED, + AdjustmentEvent.TRACK, maximum); + } + } + + /** + * This method returns the model's isAjusting value. + * + * @return The model's isAdjusting value. + */ + public boolean getValueIsAdjusting() + { + return model.getValueIsAdjusting(); + } + + /** + * This method sets the model's isAdjusting value. + * + * @param b The new isAdjusting value. + */ + public void setValueIsAdjusting(boolean b) + { + model.setValueIsAdjusting(b); + } + + /** + * This method sets the value, extent, minimum and + * maximum. + * + * @param newValue The new value. + * @param newExtent The new extent. + * @param newMin The new minimum. + * @param newMax The new maximum. + */ + public void setValue(int newValue, int newExtent, int newMin, int newMax) + { + if (!isEnabled()) + newValue = model.getValue(); + // It seems to be that on any change the value is fired. + if (newValue != getValue() || newExtent != getVisibleAmount() || + newMin != getMinimum() || newMax != getMaximum()) + { + model.setRangeProperties(newValue, newExtent, newMin, newMax, + model.getValueIsAdjusting()); + fireAdjustmentValueChanged(AdjustmentEvent.ADJUSTMENT_VALUE_CHANGED, + AdjustmentEvent.TRACK, newValue); + } + } + + /** + * This method creates a new ChangeListener. + * + * @return A new ChangeListener. + */ + private ChangeListener createChangeListener() + { + return new ChangeListener() + { + public void stateChanged(ChangeEvent e) + { + fireStateChanged(); + } + }; + } + + /** + * This method is called whenever the model fires a ChangeEvent. It should + * propagate the ChangeEvent to its listeners with a new ChangeEvent that + * identifies the scroll bar as the source. + */ + private void fireStateChanged() + { + Object[] changeListeners = changeListenerList.getListenerList(); + if (changeEvent == null) + changeEvent = new ChangeEvent(this); + for (int i = changeListeners.length - 2; i >= 0; i -= 2) + { + if (changeListeners[i] == ChangeListener.class) + ((ChangeListener) changeListeners[i + 1]).stateChanged(changeEvent); + } + } + + /** + * This method adds a ChangeListener to the scroll bar. + * + * @param listener The listener to add. + */ + public void addChangeListener(ChangeListener listener) + { + changeListenerList.add(ChangeListener.class, listener); + } + + /** + * This method removes a ChangeListener from the scroll bar. + * + * @param listener The listener to remove. + */ + public void removeChangeListener(ChangeListener listener) + { + changeListenerList.remove(ChangeListener.class, listener); + } + + /** + * This method returns an array of all ChangeListeners listening to this + * scroll bar. + * + * @return An array of ChangeListeners listening to this scroll bar. + */ + public ChangeListener[] getChangeListeners() + { + return (ChangeListener[]) changeListenerList.getListenerList(); + } + + /** + * This method adds an AdjustmentListener to the scroll bar. + * + * @param listener The listener to add. + */ + public void addAdjustmentListener(AdjustmentListener listener) + { + adjustmentListenerList.add(AdjustmentListener.class, listener); + } + + /** + * This method removes an AdjustmentListener from the scroll bar. + * + * @param listener The listener to remove. + */ + public void removeAdjustmentListener(AdjustmentListener listener) + { + adjustmentListenerList.remove(AdjustmentListener.class, listener); + } + + /** + * This method returns an arry of all AdjustmentListeners listening to + * this scroll bar. + * + * @return An array of AdjustmentListeners listening to this scroll bar. + */ + public AdjustmentListener[] getAdjustmentListeners() + { + return (AdjustmentListener[]) adjustmentListenerList.getListenerList(); + } + + /** + * This method is called to fired AdjustmentEvents to the listeners + * of this scroll bar. All AdjustmentEvents that are fired + * will have an ID of ADJUSTMENT_VALUE_CHANGED and a type of + * TRACK. + * + * @param id The ID of the adjustment event. + * @param type The Type of change. + * @param value The new value for the property that was changed.. + */ + protected void fireAdjustmentValueChanged(int id, int type, int value) + { + Object[] adjustmentListeners = adjustmentListenerList.getListenerList(); + AdjustmentEvent adjustmentEvent = new AdjustmentEvent(this, + AdjustmentEvent.ADJUSTMENT_VALUE_CHANGED, + AdjustmentEvent.TRACK, + value); + for (int i = adjustmentListeners.length - 2; i >= 0; i -= 2) + { + if (adjustmentListeners[i] == AdjustmentListener.class) + ((AdjustmentListener) adjustmentListeners[i + 1]).adjustmentValueChanged(adjustmentEvent); + } + } + + /** + * This method returns the minimum size for this scroll bar. + * + * @return The minimum size. + */ + public Dimension getMinimumSize() + { + return ui.getMinimumSize(this); + } + + /** + * This method returns the maximum size for this scroll bar. + * + * @return The maximum size. + */ + public Dimension getMaximumSize() + { + return ui.getMaximumSize(this); + } + + /** + * This method overrides the setEnabled in JComponent. + * When the scroll bar is disabled, the knob cannot + * be moved. + * + * @param x Whether the scrollbar is enabled. + */ + public void setEnabled(boolean x) + { + // nothing special needs to be done here since we + // just check the enabled setting before changing the value. + super.setEnabled(x); + } + + /** + * A string that describes this JScrollBar. Normally only used + * for debugging. + * + * @return A string describing this JScrollBar. + */ + protected String paramString() + { + return "JScrollBar"; + } + + /** + * DOCUMENT ME! + * + * @return DOCUMENT ME! + */ + public AccessibleContext getAccessibleContext() + { + if (accessibleContext == null) + accessibleContext = new AccessibleJScrollBar(this); + return accessibleContext; + } } |