gcc/libjava/javax/swing/JList.java
Graydon Hoare 5757917258 [multiple changes]
2004-08-31  Michael Koch  <konqueror@gmx.de>

	* javax/swing/plaf/basic/BasicTextAreaUI.java
	(create): New method.
	* javax/swing/text/DefaultHighlighter.java
	(DefaultHighlightPainter.debugRect): Removed.
	* javax/swing/text/StyleContext.java
	(DEFAULT_STYLE): New field.

2004-08-31  Michael Koch  <konqueror@gmx.de>

	* javax/swing/plaf/basic/BasicLookAndFeel.java
	(initComponentDefaults): Add keybindings for selection.backward and
	selection-forward for text components.
	* javax/swing/plaf/basic/BasicTextUI.java
	(paintSafely): Paint highlight only when something is actually
	selected.
	* javax/swing/text/DefaultCaret.java
	(handleHighlight): New method.
	(setSelectionVisible): Don't do anything when nothing changes.
	Handle highlight.
	(moveDot): Reimplemented. Handle highlight.
	(setDot): Set mark too. Handle highlight.
	(getSelectionPainter): New method.
	* javax/swing/text/DefaultEditorKit.java
	(defaultActions): Added new actions for text selection.
	* javax/swing/text/DefaultHighlighter.java
	(DefaultHighlightPainter): New inner class.
	(DefaultPainter): New field.
	(paint): Implemented.
	* javax/swing/text/PlainView.java
	(paint): Don't draw background here again.
	* javax/swing/text/Utilities.java
	(getTabbedTextWidth): Use width of ' ' instead of 'm' for tabsize.
	(drawTabbedText): Likewise.

2004-08-31  Graydon Hoare  <graydon@redhat.com>

	* javax/swing/JComponent.java
	(resetKeyboardActions): Add null checks.

2004-08-31  Graydon Hoare  <graydon@redhat.com>

	* javax/swing/DefaultButtonModel.java:
	Skip group notification when no group is set.

2004-08-31  Graydon Hoare  <graydon@redhat.com>

	* javax/swing/JColorChooser.java:
	Make a couple inner classes static, for jikes.

2004-08-31  Michael Koch  <konqueror@gmx.de>

	* javax/swing/plaf/basic/BasicTextUI.java
	(RottView.modelToView): New method.
	(UpdateHandler): Renamed from EventHandler.
	(updateHandler): Renamed from eventHandler.
	(modelToView): Implemented.
	* javax/swing/text/AbstractDocument.java
	(BranchElement.getElement): Return null for non-existing indeces.
	(BranchElement.getElementIndex): Return 0 in some corner cases.
	* javax/swing/text/FieldView.java
	(modelToView): New method.
	* javax/swing/text/PlainView.java
	(modelToView): Made public.

2004-08-31  Kim Ho  <kho@redhat.com>

	* Makefile.am: New files.
	* Makefile.in: Regenerate.
	* gcj/Makefile.in: Regenerate.
	* include/Makefile.in: Regenerate.
	* java/awt/Color.java: Fix documentation.
	(RGBtoHSB): Use floats for conversions.
	* javax/swing/ButtonGroup.java: Run Jalopy.
	(setSelected): Reimplement.
	* javax/swing/DefaultButtonModel.java: Run Jalopy.
	(changeState): Let ButtonGroup know that the button
	is changing state.
	* javax/swing/JColorChooser.java: Implement.
	* javax/swing/JLabel.java: Run Jalopy.
	* javax/swing/JSpinner.java: Run Jalopy.
	(setValue): New method.
	* javax/swing/JTabbedPane.java: Run Jalopy.
	(removeTabAt): Call correct remove method.
	* javax/swing/SpinnerNumberModel.java: Run Jalopy.
	(getPreviousValue): Compare minimum value.
	* javax/swing/Timer.java: Run Jalopy.
	(run): Comment out println.
	* javax/swing/ToolTipManager.java:
	(mouseMoved): Get new tooltip text for location.
	* javax/swing/colorchooser/AbstractColorChooserPanel.java:
	Jalopy and Javadoc.
	* javax/swing/colorchooser/ColorChooserComponentFactory.java:
	Implement.
	* javax/swing/colorchooser/DefaultColorSelectionModel.java:
	Run Jalopy.
	(setSelectedColor): Fire ChangeEvent.
	* javax/swing/colorchooser/DefaultHSBChooserPanel.java:
	New file. Implement.
	* javax/swing/colorchooser/DefaultPreviewPanel.java:
	Ditto.
	* javax/swing/colorchooser/DefaultRGBChooserPanel.java:
	Ditto.
	* javax/swing/colorchooser/DefaultSwatchChooserPanel.java:
	Ditto.
	* javax/swing/plaf/basic/BasicArrowButton.java:
	(getArrow): Fix size of upward pointing button.
	* javax/swing/plaf/basic/BasicColorChooserUI.java:
	Implement.
	* javax/swing/plaf/basic/BasicSliderUI.java:
	(getWidthOfWidestLabel): Use preferred dimensions.
	(getHeightOfTallestLabel): Ditto.
	* javax/swing/plaf/basic/BasicSpinnerUI.java:
	Run Jalopy.
	(mousePressed): Disable changes to spinner if it is not enabled.
	* testsuite/Makefile.in: Regenerate.


2004-08-31  Michael Koch  <konqueror@gmx.de>

	* javax/swing/plaf/basic/BasicTableHeaderUI.java,
	javax/swing/plaf/basic/BasicTableUI.java:
	Added copyright notice.

2004-08-31  Olga Rodimina  <rodimina@redhat.com>

	* Makefile.am: Added new files.
	* Makefile.in: Regenerate.
	* javax/swing/ComboBoxEditor.java: Added javadocs.
	* javax/swing/ComboBoxModel.java: Likewise.
	* javax/swing/DefaultComboBoxModel.java: Implemented.
	* javax/swing/DefaultListCellRenderer.java: Added javadocs
	and ran through jalopy to fix formatting style.
	(getListCellRendererComponent): Use appropriate border
	if renderer has focus and use noFocusBorder when it doesn't.
	* javax/swing/JComboBox.java: Implemented.
	* javax/swing/JList.java:
	(locationToIndex): New Method. Implemented.
	(indexToLocation): New Method.
	* javax/swing/JPopupMenu.java:
	(visible): New field.
	(isVisible): Changed to use new field above.
	(setVisible): Likewise.
	* javax/swing/MutableComboBoxModel.java: Added javadocs.
	* javax/swing/plaf/basic/BasicArrowButton.java:
	(shadow): Changed default color to Color.gray.
	* javax/swing/plaf/basic/BasicComboBoxUI.java: New File.
	UI delegate for JComboBox.
	* javax/swing/plaf/basic/BasicComboPopup.java: New File.
	Popup menu containing list of JComboBox's items.
	* javax/swing/plaf/basic/BasicComboBoxEditor.java: New File.
	* javax/swing/plaf/basic/BasicComboBoxRenderer.java: New File.
	* javax/swing/plaf/basic/BasicComboBoxUI.java: New File.
	* javax/swing/plaf/basic/BasicComboPopup.java: New File.
	* javax/swing/plaf/basic/BasicPopupMenuUI.java:
	(popupMenuWillBecomeVisible): Set selected path to the first
	element only if it is of type MenuElement. Also fix formatting
	style.
	* javax/swing/plaf/basic/ComboPopup.java: Added javadocs and missing
	methods signatures.

2004-08-31  Michael Koch  <konqueror@gmx.de>

	* javax/swing/text/AbstractDocument.java
	(createBranchElement): Use new constructor of BranchElement.
	(createLeafElement): Renamed arguments.
	(getRootElements): Implemented.
	(BranchElement.start): Removed.
	(BranchElement.end): Likewise.
	(BranchElement.BranchElement): Fixed arguments.
	(BranchElement.getEndOffset): Reimplemented.
	(BranchElement.getStartOffset): Likewis.
	* javax/swing/text/DefaultCaret.java
	(paint): Draw simple vertical line as caret instead of a rectangle.
	* javax/swing/text/JTextComponent.java
	(setText): Use doc directly.
	* javax/swing/text/PlainView.java
	(nextTabStop): Implemented.
	* javax/swing/text/Utilities.java
	(drawTabbedText): nextTabStop() returns an absolute x position.
	(getTabbedTextWidth): Likewise.

2004-08-31  Graydon Hoare  <graydon@redhat.com>

	* java/awt/Component.java
	(isFocusTraversable): Predicate on isLightweight()
	(setFocusable): Set isFocusTraversableOverridden.
	(requestFocus): Predicate peer dispatch on !isLightweight()
	(requestFocusInWindow): Likewise.
	(dispatchEventImpl): Coordinate with KeyboardFocusManager.
	* java/awt/Container.java
	(dispatchEventImpl): Predicate on event mask.
	(LightweightDispatcher): Remove focus machinery.
	* java/awt/DefaultFocusTraversalPolicy.java
	(accept): Expand predicate to include isFocusable().
	* java/awt/DefaultKeyboardFocusManager.java:
	Globally change c.dispatchEvent(e) to redispatchEvent(c,e)
	* java/awt/KeyboardFocusManager.java
	(redispatchEvent): Synchronize on event to prevent feedback.
	* javax/swing/AbstractButton.java
	(ButtonFocusListener): Remove class.
	(init): Set focusPainted, focusable.
	* javax/swing/ActionMap.java (get): Check parent for null.
	* javax/swing/InputMap.java (get): Likewise.
	* javax/swing/JComponent.java
	(inputMap_whenFocused): New InputMap.
	(inputMap_whenAncestorOfFocused): Likewise.
	(inputMap_whenInFocusedWindow): Likewise.
	(getActionForKeyStroke): Rewrite.
	(getConditionForKeystroke): Likewise.
	(ActionListenerProxy): New private class.
	(setInputMap): Implement.
	(getInputMap): Likewise.
	(setActionMap): Likewise.
	(getActionMap): Likewise.
	(processComponentKeyEvent): New empty method.
	(processKeyEvent): Implement.
	(processKeyBinding): Likewise.
	(resetKeyboardActions): Rewrite.
	* javax/swing/KeyStroke.java: Rewrite.
	* javax/swing/SwingUtilities.java
	(notifyAction): Implement.
	(replaceUIActionMap): Likewise.
	(replaceUIInputMap): Likewise.
	* javax/swing/plaf/basic/BasicButtonListener.java
	(focusGained): Implement.
	(focusLost): Repaint if focusPainted().
	(installKeyboardActions): Install pressed / released actions.
	(uninstallKeyboardActions): Implement.
	* javax/swing/plaf/basic/BasicButtonUI.java
	(focusColor): New field.
	(installDefaults): Load focus color, install input map.
	(installKeyboardActions): Implement.
	(uninstallKeyboardActions): Likewise.
	(paintFocus): Rewrite.
	* javax/swing/plaf/basic/BasicLookAndFeel.java
	(Button.focus): New default, midPurple.
	* javax/swing/plaf/basic/BasicTextUI.java
	(kit): Make static.
	(installUI): Get doc from kit, load defaults.
	(getKeymapName): Implement.
	(createKeymap): Likewise.
	(installKeyboardActions): Likewise.
	(getInputMap): Likewise.
	(getActionMap): Likewise.
	(createActionMap): Likewise.
	* javax/swing/text/AbstractDocument.java
	(getStartPosition): Implement.
	(getEndPosition): Likewise.
	* javax/swing/text/DefaultEditorKit.java
	(CopyAction): New class.
	(CutAction): Likewise.
	(DefaultKeyTypedAction): Likewise.
	(InsertBreakAction): Likewise.
	(InsertContentAction): Likewise.
	(InsertTabAction): Likewise.
	(PasteAction): Likewise.
	(defaultActions): New static table.
	(createCaret): Implement.
	(getActions): Likewise.
	* javax/swing/text/JTextComponent.java
	(KeymapWrapper): New private class.
	(KeymapActionMap): Likewise.
	(DefaultKeymap): New class.
	(keymaps): New static table.
	(keymap): New field.
	(getKeymap): Implement.
	(removeKeymap): Likewise.
	(addKeymap): Likewise.
	(setKeymap): Likewise.
	(loadKeymap): Likewise.
	(getActions): Likewise.
	(margin): New field.
	(JTextComponent): Build and install default keymap.
	* javax/swing/text/TextAction.java
	(textAction): Call super properly.
	(getTextComponent): Implement.
	* javax/swing/text/Utilities.java
	(drawTabbedText): Adjust position by ascent.

2004-08-31  David Jee  <djee@redhat.com>

	PR AWT/17156

	* gnu/java/awt/peer/gtk/GtkMenuItemPeer.java
	(setEnabled): Make it a native method.
	* java/awt/DefaultKeyboardFocusManager.java
	(postProcessKeyEvent): Only post event if the menu item
	is active.
	* java/awt/MenuItem.java:
	Private field 'enabled' should be true by default.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c
	(setEnabled): New function.

2004-08-31  David Jee  <djee@redhat.com>

	PR AWT/17059

	* gnu/java/awt/peer/gtk/GtkMenuBarPeer.java
	(nativeSetHelpMenu): New native method declaration.
	(addHelpMenu): Call nativeSetHelpMenu().
	(addMenu): Remove.
	* java/awt/MenuBar.java
	(setHelpMenu): Call addNotify() on the new help menu.
	(add): Call addNotify() on the new menu.
	(addNotify): Set the help menu if one exists.
	* java/awt/peer/MenuBarPeer.java
	(addMenu): Remove.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c
	(nativeSetHelpMenu): New method.

2004-08-31  Graydon Hoare  <graydon@redhat.com>

	* Makefile.am: Add new files.
	* Makefile.in: Regenerate.
	* javax/swing/Box.java: Fix setting of layout in ctor.
	* javax/swing/JScrollPane.java: Scroll headers as well.
	* javax/swing/JTable.java: Reimplement.
	* javax/swing/JViewPort.java: Only add non-null children.
	* javax/swing/ScrollPaneLayout.java: Correct header calculations.
	* javax/swing/Timer.java: Fix stopping null waker.
	* javax/swing/plaf/basic/BasicTableHeaderUI.java: New file.
	* javax/swing/plaf/basic/BasicTableUI.java: New file.
	* javax/swing/table/DefaultTableCellRenderer.java: Configure.
	* javax/swing/table/DefaultTableColumnModel.java: Flesh out.
	* javax/swing/table/DefaultTableModel.java: Clean up.
	* javax/swing/table/JTableHeader.java: Implement.

2004-08-31  Mark Wielaard  <mark@klomp.org>

	* javax/swing/JSpinner.java (getChangeListeners): Remove double
	semi-colon.

2004-08-31  Mark Wielaard  <mark@klomp.org>

	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkClasspathFontPeerMetrics.c:
	Declare variables at top of functions/block.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c: Likewise.

2004-08-31  Mark Wielaard  <mark@klomp.org>

	* java/lang/Rectangle.java (intersects): Check r.width and r.height
	first.

2004-08-31  Michael Koch  <konqueror@gmx.de>

	* javax/swing/text/PlainView.java
	(selectedColor): New field.
	(unselectedColor): Likewise.
	(font): Likewise.
	(updateMetrics): New method.
	(lineToRect): Likewise.
	(modelToView): Likewise.
	(drawSelectedText): Use color from JTextComponent ad draw with
	Utilities class.
	(drawUnselectedText): Likewise.
	(paint): Initialize helper fields.
	* javax/swing/text/View.java
	(getChildAllocation): New method.
	(getViewIndex): Likewise.
	(getToolTipText): Likewise.

2004-08-31  Michael Koch  <konqueror@gmx.de>

	* javax/swing/text/Utilities.java
	(drawTabbedText): Reimplemented.
	(getTabbedTextWidth): Likewise.

2004-08-31  Michael Koch  <konqueror@gmx.de>

	* javax/swing/plaf/basic/BasicTextUI.java
	(installDefaults): Install caret and highlighter.
	(modelToView): Use Bias.Forward when calling sibling.
	* javax/swing/text/AbstractDocument.java
	(ElementEdit): Implements DocumentEvent.ElementChange.
	(ElementEdit.ElementEdit): New method.
	(ElementEdit.getChildrenAdded): Likewise.
	(ElementEdit.getChildrenRemoved): Likewise.
	(ElementEdit.getElement): Likewise.
	(ElementEdit.getIndex): Likewise.
	* javax/swing/text/DefaultCaret.java
	(color): Removed.
	(textComponent): Renamed from parent, made private.
	(selectionVisible): Renamed from vis_sel, made private.
	(blinkRate): Renamed from blink, made private.
	(magicCaretPosition): Renamed from magic, made private.
	(visible): Renamed from vis, made private.
	(dot): Made private.
	(mark): Likewise.
	(deinstall): Remove as MouseMotionListener.
	(install): Initialize textComponent first. Add as MouseMotionListener.
	(paint): Reimplemented.
	* javax/swing/text/JTextComponent.java
	(setCaret): Deinstall old caret, install new one and fire property
	change after setting property.
	(setHighlighter): Deinstall old highlighter, install new one and fire
	property change after setting property.
	(setCaretColor): Fire property change after setting property.
	(setDisabledTextColor): Likewise.
	(setSelectedTextColor): Likewise.
	(setSelectionColor): Likewise.
	(modelToView): New method.

2004-08-31  Michael Koch  <konqueror@gmx.de>

	* javax/swing/text/AbstractDocument.java
	(getText): Simplified.
	* javax/swing/text/Segment.java
	(current): New field.
	(current): Reimplemented.
	(first): Likewise.
	(getIndex): Likewise.
	(last): Likewise.
	(next): Likewise.
	(previous): Likewise.
	(setIndex): Likewise.

2004-08-31  Michael Koch  <konqueror@gmx.de>

	* javax/swing/plaf/basic/BasicButtonUI.java
	(defaultTextIconGap): Made protected.
	(defaultTextShiftOffset): Likewise.
	(textShiftOffset): New field.
	(clearTextShiftOffset): New method.
	(getTextShiftOffset): Likewise.
	(setTextShiftOffset): Likewise.

2004-08-31  Michael Koch  <konqueror@gmx.de>

	* javax/swing/plaf/basic/BasicTextUI.java
	(installUI): Add eventHandler as property listener.
	(uninstallUI): remove eventHandler as propert listener.
	(installDefaults): Added comment.
	(installListeners): Likewise.
	(installKeyboardActions): Likewise.
	(uninstallDefaults): Likewise.
	(uninstallListeners): Likewise.
	(uninstallKeyboardActions): Likewise.

2004-08-31  Michael Koch  <konqueror@gmx.de>

	* javax/swing/text/AbstractDocument.java:
	Fixed some typos in comments.
	(insertString): Reimplemented.
	(remove): Likewise.
	(replace): New method.
	(children): Dont use fully qualified class name.
	(DefaultDocumentEvent.offset): Renamed from off.
	(DefaultDocumentEvent.length): Renamed from len.
	(DefaultDocumentEvent.type): New field.
	(DefaultDocumentEvent.DefaultDocumentEvent): New constructor.
	(DefaultDocumentEvent.getType): Implemented.

2004-08-31  Michael Koch  <konqueror@gmx.de>

	* javax/swing/plaf/basic/BasicTextUI.java
	(RootView.textComponent): Removed.
	(RootView.RootView): Don't initialize textComponent.
	(RootView.getViewFactory): New method.
	(EventHandler): New inner class.
	(rootView): Initialize at instance creation.
	(eventHandler): New field.
	(installUI): Don't create view hierarchy directly,
	call modelChanged() instead.
	(modelChanged): New method.
	* javax/swing/text/JTextComponent.java
	(setDocument): Fire property change event.

2004-08-31  Michael Koch  <konqueror@gmx.de>

	* javax/swing/plaf/basic/BasicTextUI.java
	(RootView.paint): Removed debug output.
	(paintSafely): Draw highlighter before text.
	(paintBackground): Use background color of text component.
	* javax/swing/plaf/basic/BasicToggleButtonUI.java:
	Reformatted.

2004-08-31  Michael Koch  <konqueror@gmx.de>

	* javax/swing/plaf/basic/BasicToolBarUI.java
	(BasicToolBarUI): Fixed arguments for constructor.
	(createUI): Fixed creation of object.

2004-08-31  Michael Koch  <konqueror@gmx.de>

	* javax/swing/DefaultListSelectionModel.java
	(fireValueChanged): Renamed from fireSelectionValueChanged,
	made protected.

2004-08-31  Michael Koch  <konqueror@gmx.de>

	* javax/swing/text/TabSet.java
	(TabSet): Implements java.io.Serializable.
	* javax/swing/text/TabStop.java
	(TabStop): Implements java.io.Serializable.
	(TabStop): Made public.

2004-08-31  Michael Koch  <konqueror@gmx.de>

	* javax/swing/JComponent.java
	(setUI): Fire PropertyChange.
	* javax/swing/JLabel.java
	(text): Renamed from labelText.
	(horizontalAlignment): New default vlaue.
	(icon): Renamed from activeIcon.
	(displayedMnemonic): Renamed from mnemonicKey, added default value.
	(displayedMnemonicIndex): Renamed from underlineChar.
	(setDisplayedMnemonic): Reimplemented.
	* javax/swing/JRadioButton.java
	(JRadioButton): New constructors.
	* javax/swing/JTextField.java
	(JTextField): Throw exception if colums < 0, initialitialz
	this.columns directly and initialize document with text conditionally.

2004-08-31  Michael Koch  <konqueror@gmx.de>

	* javax/swing/plaf/basic/BasicFormattedTextFieldUI.java,
	javax/swing/plaf/basic/BasicPasswordFieldUI.java,
	javax/swing/plaf/basic/BasicTextAreaUI.java: New files.
	* javax/swing/text/FieldView.java
	(paint): Just call super method for now.
	* Makefile.am: Added new files.
	* Makefile.in: Regenerated.

2004-08-31  Ka-Hing Cheung  <kahing@javabsp.org>

	* javax/swing/AbstractSpinnerModel.java,
	javax/swing/JSpinner.java,
	javax/swing/SpinnerNumberModel.java,
	javax/swing/plaf/basic/BasicSpinnerUI.java:
	New files.
	* javax/swing/plaf/basic/BasicLookAndFeel.java
	(initClassDefaults): Added defaults for BasicSpinnerUI.

2004-08-31  Michael Koch  <konqueror@gmx.de>

	* Makefile.am: Added new files.
	* Makefile.in: Regenerated.

2004-08-31  Michael Koch  <konqueror@gmx.de>

	* javax/swing/TransferHandler.java,
	javax/swing/plaf/basic/ComboPopup.java: New files
	* Makefile.am: Added javax/swing/TransferHandler.java and
	javax/swing/plaf/basic/ComboPopup.java
	* Makefile.in: Regenerated.

2004-08-31  Roman Kennke  <roman@ontographics.com>

	* javax/swing/text/Utilities.java: New file.

2004-08-31  Michael Koch  <konqueror@gmx.de>

	* Makefile.am: Added javax/swing/text/Utilities.java.
	* Makefile.in: Regenerated.

2004-08-31  Graydon Hoare  <graydon@redhat.com>

	* javax/swing/text/SimpleAttributeSet.java: New file.
	* javax/swing/text/StyleConstants.java: New file.
	* javax/swing/text/StyleContext.java: New file.
	* javax/swing/text/TabSet.java: New file.
	* javax/swing/text/TabStop.java: New file.
	* javax/swing/text/AbstactDocument.java:
	(AbstractElement): Implement attribute support.
	* javax/swing/text/AttributeSet.java
	(NameAttribute): New static field.
	(ResolveAttribute): New static field.
	* Makefile.am: Update for new files.
	* Makefile.in: Regenerate.

2004-08-31  Craig Black  <craig.black@aonix.com>

	* gnu/java/awt/peer/gtk/GdkGraphics.java
	(drawImage): Add support for scaling pixmaps.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c
	(copyAndScalePixmap): New native method.

2004-08-31  Thomas Fitzsimmons  <fitzsim@redhat.com>

	PR AWT/16121
	* jni/gtk-peer/gthread-jni.c: Include stdio.h.  Eliminate
	type-punning compiler warnings using unions.
	(throw): Replace bzero with memset.

2004-08-31  Andreas Tobler  <a.tobler@schweiz.ch>
	    Thomas Fitzsimmons  <fitzsim@redhat.com>

	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c: Move
	NSA_PB macros to gtkpeer.h.  Include gtkpeer.h.
	* jni/gtk-peer/gtkpeer.h: Move NSA_PB macros here.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
	(nativeSetIconImageFromDecoder): Use NSA_GET_PB_PTR macro.

2004-08-31  Mark Wielaard  <mark@klomp.org>

	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c:
	#include gdk.h, not gtk.h. #include jni.h, native_state.h, string.h
	and stdlib.h, not gtkpeer.h.
	(*vm): New static variable.
	(areaPreparedID): Make static.
	(areaUpdatedID): Likewise.
	(area_prepared): Get and use JNIEnv through stored JavaVM *vm.
	(area_prepared): Likewise.
	(area_updated): Likewise.
	(closed): Likewise.
	(initStaticState): Initialize *vm javaVM.
	(pumpBytes): Use given env, not global gdk_env.

2004-08-31  Mark Wielaard  <mark@klomp.org>

	* java/awt/geom/CubicCurve2D.java (solveCubic): Removed duplicate
	comments.

2004-08-31  Sven de Marothy  <sven@physto.se>

	* java/awt/geom/CubicCurve2D.java: Reindent.
	(contains): Implemented.
	(intersects): Implemented.
	* java/awt/geom/QuadCurve2D.java: Likewise.
	* java/awt/geom/GeneralPath.java: Reindent and document.
	Fully (re)implemented using separate xpoints and ypoints
	float[] coords.
	* java/awt/geom/RoundRectangle2D.java: Several bugfixes (Bug #6007).

2004-08-31  Michael Koch  <konqueror@gmx.de>

	* javax/swing/JMenuItem.java
	(getMenuDragMouseListeners): New method.
	(getMenuKeyListeners): Likewise.

2004-08-31  Michael Koch  <konqueror@gmx.de>

	* javax/swing/AbstractButton.java
	(model): Made protected.
	(actionListener): Likewise.
	(changeListener): Likewise.
	(itemListener): Likewise.
	(multiClickThreshhold): New field.
	(getActionListeners): New method.
	(getChangeListeners): Likewise.
	(getItemListeners): Likewise.
	(fireItemStateChanged): Simplified implementation.
	(fireActionPerformed): Likewise.
	(fireStateChanged): Likewise.
	(getMultiClickThreshhold): New method.
	(setMultiClickThreshhold): Likewise.

2004-08-31  Tom Tromey  <tromey@redhat.com>

	* java/awt/image/Kernel.java (clone): Use super.clone().

2004-08-31  David Jee  <djee@redhat.com>

	PR AWT/16682
	* gnu/java/awt/peer/gtk/GtkFramePeer.java
	(nativeSetIconImage): Rename to nativeSetIconImageFromDecoder.
	(nativeSetIconImageFromData): New native method declaration.
	(setIconImage): Handle images not produced from GdkPixbufDecoder.
	* gnu/java/awt/peer/gtk/GtkImage.java
	(getPixelCache): New method.
	(getColorModel): New method.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
	(nativeSetIconImage): Rename to nativeSetIconImageFromDecoder.
	(free_pixbuf_data): New helper function.
	(nativeSetIconImageFromData): New function.

2004-08-31  Graydon Hoare  <graydon@redhat.com>

	PR SWING/16576
	* javax/swing/JLayeredPane.java
	(setLayer): Permit changing layer after addition.
	(setPosition): Permit over-length positions.
	(layerToRange): Compare intValue()s.
	* javax/swing/Box.java (createHorizontalBox): Implement.
	(createRigidArea): Likewise.
	(createVerticalBox): Likewise.

2004-08-31  Kim Ho  <kho@redhat.com>

	* java/awt/Component.java:
	(processMouseEvent): Consume event after
	listeners process it.
	(processMouseMotionEvent): ditto.
	(processMouseWheelEvent): ditto.
	* java/awt/Container.java:
	(acquireComponentForMouseEvent):
	Do not dispatch to events that have been
	removed from the Container.
	(handleEvent): Consume the MouseEvents.
	* javax/swing/RepaintManager.java:
	(paintDirtyRegions): Do not add to list of
	damaged areas if the component has no root.

2004-08-31  Michael Koch  <konqueror@gmx.de>

	* javax/swing/plaf/basic/BasicMenuItemUI.java: Clean ip imports.

2004-08-31  Mark Wielaard  <mark@klomp.org>

	* gnu/java/awt/peer/gtk/GtkToolkit.java (getFontPeer): Don't return
	null when a MissingResourceException is thrown. Should never happen.

2004-08-31  Mark Wielaard  <mark@klomp.org>

	* java/awt/EventQueue.java (postEvent): Throw NullPointerException
	when argument is null.

2004-08-31  Mark Wielaard  <mark@klomp.org>

	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_addExposeFilter):
	Define hid at start of function.
	(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_removeExposeFilter):
	Likewise.

2004-08-31  Mark Wielaard  <mark@klomp.org>

	* gnu/java/awt/EmbeddedWindow.java: Reindent.
	* javax/swing/JButton.java: Reindent.
	* javax/swing/JCheckBox.java: Reindent.

2004-08-31  Mark Wielaard  <mark@klomp.org>

	* Makefile.am (gtk_c_source_files): Added
	jni/gtk-peer/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.c.
	(gtk_awt_peer_sources): Added
	gnu/java/awt/peer/gtk/GThreadMutex.java and
	gnu/java/awt/peer/gtk/GThreadNativeMethodRunner.java.
	* Makefile.in: Regenerated.

2004-08-31  Archie Cobbs  <archie@dellroad.org>

	* jni/gtk-peer/gthread-jni.c: don't #include nonexistent files

2004-08-31  Steven Augart  <augart@watson.ibm.com>

	* jni/gtk-peer/gthread-jni.c (c-font-lock-extra-types):
	Added jfieldID, jmethodID.

2004-08-31  Mark Wielaard  <mark@klomp.org>

	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c
	(Java_gnu_java_awt_peer_gtk_GtkMainThread_gtkInit): Initialize
	gdk_env before calling any gdk or gtk function.

	* gnu/java/awt/peer/gtk/GtkMainThread.java (gtkInitCalled): New field.
	(GtkMainThread): Call wait() in while loop waiting for gtkInitCalled.
	(run): Set gtkInitCalled.

2004-08-31  Steven Augart  <augart@watson.ibm.com>

	* gnu/java/awt/peer/gtk/GtkMainThread.java (run): Pass the value of
	the gnu.classpath.awt.gtk.portable.native.sync system property to C.

	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c
	(Java_gnu_java_awt_peer_gtk_GtkMainThread_gtkInit): New argument,
	portableNativeSync.  Delegate PORTABLE_NATIVE_SYNC work to
	init_glib_threads.
	(init_glib_threads): New function.

2004-08-31  Mark Wielaard  <mark@klomp.org>

	* jni/gtk-peer/gthread-jni.c: Define MIN_, MAX_ and NORM_
	PRIORITY when not already defined in header file.

2004-08-31  Mark Wielaard  <mark@klomp.org>

	* jni/gtk-peer/gthread-jni.c (setup_cache): Call
	ExceptionOccurred, not ExceptionCheck, when we don't have JNI 1.2.

2004-08-31  Steven Augart  <augart@watson.ibm.com>

	* gnu/native/jni/gtk-peer/gthread-jni.c: Indentation fixes.
	Implemented missing functions for GTK2.
	Added error handling.
	Renamed static functions out of the g_ namespace.
	Added TRACE_API_CALLS, EXPLAIN_TROUBLE, EXPLAIN_BROKEN,
	EXPLAIN_BADLY_BROKEN, and DELETE_LOCAL_REFS options.
	Rewrote global-reference code.
	Eliminated cascading errors.
	(mutex_trylock_jni_impl) Fully implemented.
	(cond_timed_wait_jni_impl) Went from millisecond to microsecond
	resolution.
	(setup_cache) New function.
	(mutex_cond_wait_jni_impl, mutex_cond_timed_wait_jni_impl) Fixed
	bug where they were not unlocking the GMutex associated with the
	condition variable during the wait on that condition variable.

	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c,
	native/jni/gtk-peer/gthread-jni.c,
	native/jni/gtk-peer/gthread-jni.h
	(g_thread_jni_functions): Renamed to ...
	(portable_native_sync_jni_functions): this name.
	(gdk_vm): Renamed to...
	(the_vm): this name.

	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c
	(gdk_vm): Removed duplicate definition.
	(gtkInit): Removed stray message to stdout.
	(gtkInit): Use g_malloc and g_free instead of malloc and free.
	(gtkInit): Fix a const assignment bug.
	(gtkInit): Simplified code.

	* gnu/java/awt/peer/gtk/GThreadNativeMethodRunner.java,
	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.c,
	native/jni/gtk-peer/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.h,
	gnu/java/awt/peer/gtk/GThreadMutex.java:
	New files.

2004-08-31  Mark Wielaard  <mark@klomp.org>

	* javax/swing/Box.java: Put FIXME comment above class declaration.
	* javax/swing/JButton.java: Remove illegal L&F HTML from comments.
	* javax/swing/JCheckBox.java: Likewise.
	* javax/swing/JDialog.java: Likewise.
	* javax/swing/JRadioButton.java: Likewise.
	* javax/swing/JToggleButton.java: Likewise.
	* javax/swing/UIManager.java: Likewise.
	* javax/swing/border/TitledBorder.java: Likewise.
	* javax/swing/plaf/basic/BasicLabelUI.java: Likewise.
	* javax/swing/plaf/basic/BasicLookAndFeel.java: Likewise.
	* javax/swing/plaf/basic/BasicPopupMenuSeparatorUI.java: Likewise.
	* javax/swing/plaf/basic/BasicProgressBarUI.java: Likewise.
	* javax/swing/plaf/basic/BasicScrollBarUI.java: Likewise.
	* javax/swing/plaf/basic/BasicSeparatorUI.java: Likewise.
	* javax/swing/text/JTextComponent.java: Likewise.

2004-08-31  David Jee  <djee@redhat.com>

	PR AWT/16682
	* gnu/java/awt/peer/gtk/GtkFramePeer.java
	(setIconImage): Add a FIXME for unhandled cases.

2004-08-31  Thomas Fitzsimmons  <fitzsim@redhat.com>

	PR AWT/16040
	* gnu/awt/LightweightRedirector.java: Call getModifiersEx, not
	getModifiers.  Replace old button masks with new ones.
	* gnu/awt/xlib/XEventLoop.java: Likewise.
	* gnu/java/awt/peer/gtk/GtkButtonPeer.java: Likewise.
	* gnu/java/awt/peer/gtk/GtkComponentPeer.java,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c: Likewise.
	* gnu/java/awt/peer/gtk/GtkListPeer.java: Likewise.
	* gnu/java/awt/peer/gtk/GtkTextFieldPeer.java: Likewise.
	* java/awt/AWTKeyStroke.java: Remove old modifier masks.
	* java/awt/Component.java: Replace old modifier	masks with new
	ones.
	* java/awt/Container.java: Call getModifiersEx, not
	getModifiers.
	* java/awt/DefaultKeyboardFocusManager.java: Likewise.  Remove
	old modifier masks.
	* javax/swing/JMenuItem.java: Replace old button masks with new
	ones.
	* javax/swing/KeyStroke.java: Call getModifiersEx, not
	getModifiers.
	* javax/swing/SwingUtilities.java: Likewise.
	* javax/swing/plaf/basic/BasicButtonListener.java: Likewise.
	* javax/swing/plaf/basic/BasicInternalFrameUI.java: Likewise.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c: Replace old
	mask macros with new ones.
	* jni/gtk-peer/gtkpeer.h: Replace old button and modifier mask
	macros with new ones representing new masks.

2004-08-31  Craig Black  <craig.black@aonix.com>

	* gnu/java/awt/peer/gtk/GdkGraphics.java
	(drawRoundRect): Implemented.
	(fillRoundRect): Implemented.
	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
	(drawRoundRect): Reimplemented to match GdkGraphics.
	(fillRoundRect): Reimplemented to match GdkGraphics.

2004-08-31  Mark Wielaard  <mark@klomp.org>

	* Makefile.in: Regenerated.

2004-08-31  Michael Koch  <konqueror@gmx.de>

	* gnu/java/awt/EmbeddedWindow.java
	(addNotify): Use AccessController to allow execution of privileged
	code.

2004-08-31  Michael Koch  <konqueror@gmx.de>

	* gnu/java/awt/EmbeddedWindow.java
	(static): Removed.
	(addNotify): Set peer via reflection.
	(setWindowPeer): Removed.
	* gnu/java/awt/natEmbeddedWindow.cc: Removed.
	* Makefile.am (nat_source_files):
	Removed gnu/java/awt/natEmbeddedWindow.cc.

2004-08-31  Bryce McKinlay  <mckinlay@redhat.com>

	* Makefile.am: Add  gnu/java/security/action/GetPropertyAction.java
	and gnu/java/security/action/SetAccessibleAction.java.

2004-08-31  Bryce McKinlay  <mckinlay@redhat.com>

	* gnu/java/security/action/GetPropertyAction.java (setParameters):
	Renamed from 'setName'. New 2-argument form with default value.
	(run): Pass default 'value' parameter to System.getProperty().
	* gnu/java/security/action/SetAccessibleAction.java: Fix javadoc
	typos.

2004-08-31  Bryce McKinlay  <mckinlay@redhat.com>

	* gnu/java/security/action/GetPropertyAction.java: New class.
	* gnu/java/security/action/SetAccessibleAction.java: New class.

2004-08-31  David Jee  <djee@redhat.com>

	* gnu/java/awt/peer/gtk/GtkFramePeer.java
	(setIconImage): Check if image is null.

2004-08-31  David Jee  <djee@redhat.com>

	* gnu/java/awt/peer/gtk/GtkFramePeer.java
	(create): Set the icon image.
	(nativeSetIconImage): New native method declaration.
	(setIconImage): Implement.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
	(nativeSetIconImage): New function.

2004-08-31  Dalibor Topic <robilad@kaffe.org>

	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
	(filenameFilterCallback): Declare local variable accepted before use.

2004-08-31  Dalibor Topic <robilad@kaffe.org>

	* gnu/java/awt/ComponentDataBlitOp.java:
	Cleaned up imports.

2004-08-31  Tom Tromey  <tromey@redhat.com>

	* gnu/java/awt/peer/GLightweightPeer.java,
	gnu/java/awt/peer/gtk/GdkGraphics2D.java,
	gnu/java/awt/peer/gtk/GtkComponentPeer.java,
	javax/swing/JScrollPane.java: Removed
	redundant imports.

2004-08-31  David Jee  <djee@redhat.com>

	* java/awt/DefaultKeyboardFocusManager.java
	(postProcessKeyEvent): Only activate MenuShortcuts on KEY_PRESSED
	event.  Fix shift modifier checking.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c
	(accel_attach): Remove.
	(setupAccelGroup): Remove calls to accel_attach.

2004-08-31  Thomas Fitzsimmons  <fitzsim@redhat.com>

	* gnu/java/awt/peer/gtk/GtkArg.java: Remove file.
	* gnu/java/awt/peer/gtk/GtkArgList.java: Remove file.

	* Makefile.am (gtk_awt_peer_sources): Remove GtkArg.java and
	GtkArgList.java.
	(gtk_c_files): Use CAIRO_CFLAGS and PANGOFT2_CFLAGS, not _LIBS.
	* Makefile.in: Regenerate.
	* gnu/java/awt/peer/gtk/GtkButtonPeer.java,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
	(create(String)): New method.
	(create): Call new create method.
	(getArgs): Remove method.
	* gnu/java/awt/peer/gtk/GtkCheckboxPeer.java,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
	(nativeCreate): Rename to create.
	(gtkSetLabel): Rename to gtkButtonSetLabel.
	(gtkToggleButtonSetActive): New method.
	(create): Call gtkToggleButtonSetActive and gtkButtonSetLabel.
	(setState): Replace set call with gtkToggleButtonSetActive.
	(setLabel): Replace gtkSetLabel call with gtkButtonSetLabel.
	(getArgs): Remove method.
	* gnu/java/awt/peer/gtk/GtkComponentPeer.java,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
	(gtkWidgetSetSensitive): New method.
	(gtkWidgetSetParent): Likewise.
	(GtkComponentPeer): Call setParent, setComponentBounds and
	setVisibleAndEnabled.
	(setParent): New method.
	(setComponentBounds): New method.
	(setVisibleAndEnabled): New method.
	(setEnabled): Call gtkWidgetSetSensitive.
	(getArgs): Remove method.
	Remove all set methods.
	* gnu/java/awt/peer/gtk/GtkDialogPeer.java (create): Call
	gtkWindowSetModal, setTitle and setResizable.
	(getArgs): Remove method.
	* gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
	(setComponentBounds): New method.
	* gnu/java/awt/peer/gtk/GtkFramePeer.java (setResizable):
	Replace set call with gtkWindowSetResizable.
	(getArgs): Remove method.
	(create): Call setTitle and setResizable.
	* gnu/java/awt/peer/gtk/GtkWindowPeer.java,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
	(gtkWindowSetTitle): New method.
	(gtkWindowSetResizable): New method.
	(gtkWindowSetModal): New method.
	(setParent): New method.
	(setVisibleAndEnabled): New method.
	(getArgs): Remove method.
	(setTitle): Call gtkWindowSetTitle.
	(setResizable): Call gtkWindowSetResizable.
	* jni/gtk-peer/gtkpeer.h [DEBUG_LOCKING]: New define to turn on
	and off locking instrumentation.

2004-08-31  Kim Ho  <kho@redhat.com>

	* Makefile.am: Add new file.
	* Makefile.in: Regenerate.
	* gcj/Makefile.in: Regenerate
	* include/Makefile.in:
	* java/awt/Container.java:
	(acquireComponentForMouseEvent): Respect
	the event mask when looking for candidate.
	* javax/swing/JComponent.java:
	Remove toolTip field.
	(createToolTip): Create a tooltip on demand.
	(setToolTipText): Register with the ToolTipManager.
	(getToolTipText(MouseEvent)): Return getToolTipText().
	* javax/swing/JToolTip.java: Implement.
	* javax/swing/Timer.java: Jalopy.
	(restart): Call stop, then start.
	(stop): Interrupt the timer rather than wait for
	the timer to come to a stop naturally.
	* javax/swing/ToolTipManager.java: Implement.
	* javax/swing/plaf/basic/BasicLookAndFeel.java:
	Change ToolTip.background color.
	* javax/swing/plaf/basic/BasicToolTipUI.java:
	Implement.
	* testsuite/Makefile.in: Regenerate

2004-08-31  Jerry Quinn  <jlquinn@optonline.net>

	* java/awt/image/DirectColorModel.java (DirectColorModel): Fix
	constructor param comments.

2004-08-31  Thomas Fitzsimmons  <fitzsim@redhat.com>

	* java/awt/Component.java: Document AWT 1.0 event handler
	methods.

2004-08-31  Roman Kennke  <roman@ontographics.com>

	* javax/swing/Box.java:
	(createGlue): Implemented
	(createHorizontalGlue): Implemented
	(createHorizontalStrut): Implemented
	(createVerticalGlue): Implemented
	(createVerticalStrut): Implemented

2004-08-31  David Jee  <djee@redhat.com>

	* gnu/java/awt/peer/gtk/GtkChoicePeer.java
	(GtkChoicePeer): Do not automatically select first item.
	(getHistory): Remove.
	(nativeGetSelected): New method.
	(nativeRemoveAll): New method.
	(add): Use nativeGetSelected() instead of getHistory().
	(remove): Likewise.
	(removeAll): Call nativeRemoveAll().
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c
	(create): Migrate to GtkComboBox.
	(append): Likewise.
	(nativeAdd): Likewise.
	(nativeRemove): Likewise.
	(select): Likewise.
	(nativeRemoveAll): New method.
	(nativeGetSelected): New method.
	(selection_changed): New method.
	(getHistory): Remove.
	(item_activate): Remove.
	(item_removed): Remove.
	(connect_choice_item_selectable_hook): Remove.

2004-08-31  Thomas Fitzsimmons  <fitzsim@redhat.com>

	* gnu/java/awt/peer/gtk/GtkTextFieldPeer.java (create): Use tf
	variable in setEditable call.

	* gnu/java/awt/peer/gtk/GtkTextFieldPeer.java,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c
	(gtkWidgetSetBackground): New method.
	(gtkWidgetSetForeground): Likewise.
	(create): Set peer's editable state based on awtComponent's.

	* java/awt/Button.java (Button()): Use empty string rather than
	null in no-label constructor.

2004-08-31  Roman Kennke  <roman@ontographics.com>

	* javax/swing/BoxLayout.java: Reimplement.

2004-08-31  Thomas Fitzsimmons  <fitzsim@redhat.com>

	* gnu/java/awt/peer/gtk/GdkGraphics.java,
	gnu_java_awt_peer_gtk_GdkGraphics.c
	(initState(GtkComponentPeer)): Don't return array of colour
	values.
	(GdkGraphics(int,int)): Set default font to size 12.
	(GdkGraphics(GtkComponentPeer)): Set graphics colour to
	component's foreground colour.
	* gnu/java/awt/peer/gtk/GdkGraphics2D.java,
	gnu_java_awt_peer_gtk_GdkGraphics2D.c
	(initState(GtkComponentPeer)): Don't return array of colour
	values.
	(GdkGraphics2D(GtkComponentPeer)): Set foreground and background
	colours to component's colours.
	(current_colors_of_widget): Remove function.
	* gnu/java/awt/peer/gtk/GtkOffScreenImage.java (getGraphics):
	Return a new graphics object.
	* java/awt/Font.java (toString): Fix format.
	* java/awt/Graphics.java (toString): Likewise.

2004-08-31  Craig Black  <craig.black@aonix.com>

	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c
	(addTearOff): New function.
	* gnu/java/awt/peer/gtk/GtkMenuPeer.java (addTearOff):
	New native method.
	(init): Call addTearOff() when menu.isTearOff().

2004-08-31  Bryce McKinlay  <mckinlay@redhat.com>

	* gnu/java/awt/ClasspathToolkit.java (createImageProducer): New.
	Default implementation.
	* gnu/java/awt/peer/gtk/GtkToolkit.java (createImageProducer): New.
	Implement using GdkPixbufDecoder.

2004-08-31  David Jee  <djee@redhat.com>

	* gnu/java/awt/peer/gtk/GtkComponentPeer.java
	(GtkComponentPeer): Use gtkWidgetGetPreferredDimensions() for
	setting the size of GtkFileDialogPeers.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
	(gtkWidgetGetPreferredDimensions): For widgets extending GtkWindow,
	use their default sizes rather than their natural requisitions.

2004-08-31  Michael Koch  <konqueror@gmx.de>

	* javax/swing/JFormattedTextField.java
	(JFormattedTextField): Implemented.
	* javax/swing/text/DefaultEditorKit.java
	(BeepAction): New inner class.
	* javax/swing/text/Segment.java
	(partialReturn): New field.
	(setPartialReturn): New method.
	(isPartialReturn): Likewise.
	* javax/swing/text/View.java
	(createFragment): Fixed typo.
	(getStartOffset): New method.
	(getEndOffset): Likewise.

2004-08-31  Michael Koch  <konqueror@gmx.de>

	* javax/swing/table/DefaultTableColumnModel.java
	(serialVersionUID): Made private.
	(listenerList): Initialize.
	(changeEvent): Initialize.
	* javax/swing/table/JTableHeader.java
	(JTableHeader): New constructors.
	(createDefaultColumnModel): New method.
	* javax/swing/table/TableColumn.java
	(setHeaderRenderer): Simplified code.
	(setCellRenderer): Likewise.
	(setWidth): Likewise.

From-SVN: r86956
2004-09-02 05:10:34 +00:00

1199 lines
39 KiB
Java

/* JList.java --
Copyright (C) 2002, 2003 Free Software Foundation, Inc.
This file is part of GNU Classpath.
GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU Classpath is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA.
Linking this library statically or dynamically with other modules is
making a combined work based on this library. Thus, the terms and
conditions of the GNU General Public License cover the whole
combination.
As a special exception, the copyright holders of this library give you
permission to link this library with independent modules to produce an
executable, regardless of the license terms of these independent
modules, and to copy and distribute the resulting executable under
terms of your choice, provided that you also meet, for each linked
independent module, the terms and conditions of the license of that
module. An independent module is a module which is not derived from
or based on this library. If you modify this library, you may extend
this exception to your version of the library, but you are not
obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
package javax.swing;
import java.awt.Color;
import java.awt.Component;
import java.awt.ComponentOrientation;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.Rectangle;
import java.util.Vector;
import javax.accessibility.Accessible;
import javax.accessibility.AccessibleContext;
import javax.swing.event.ListDataEvent;
import javax.swing.event.ListDataListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.plaf.ListUI;
/**
* <p>This class is a facade over three separate objects: {@link
* javax.swing.ListModel}, {@link javax.swing.ListSelectionModel} and
* {@link javax.swing.plaf.ListUI}. The facade represents a unified "list"
* concept, with independently replacable (possibly client-provided) models
* for its contents and its current selection. In addition, each element in
* the list is rendered via a strategy class {@link
* javax.swing.ListCellRenderer}.</p>
*
* <p>Lists have many properties, some of which are stored in this class
* while others are delegated to the list's model or selection. The
* following properties are available:</p>
*
* <table>
* <tr><th>Property </th><th>Stored in</th><th>Bound?</th></tr>
* <tr><td>accessibleContext </td><td>list </td><td>no </td></tr>
* <tr><td>anchorSelectionIndex </td><td>selection</td><td>no </td></tr>
* <tr><td>cellRenderer </td><td>list </td><td>yes </td></tr>
* <tr><td>dragEnabled </td><td>list </td><td>no </td></tr>
* <tr><td>firstVisibleIndex </td><td>list </td><td>no </td></tr>
* <tr><td>fixedCellHeight </td><td>list </td><td>yes </td></tr>
* <tr><td>fixedCellWidth </td><td>list </td><td>yes </td></tr>
* <tr><td>lastVisibleIndex </td><td>list </td><td>no </td></tr>
* <tr><td>layoutOrientation </td><td>list </td><td>yes </td></tr>
* <tr><td>leadSelectionIndex </td><td>selection</td><td>no </td></tr>
* <tr><td>maxSelectionIndex </td><td>selection</td><td>no </td></tr>
* <tr><td>minSelectionIndex </td><td>selection</td><td>no </td></tr>
* <tr><td>model </td><td>list </td><td>yes </td></tr>
* <tr><td>opaque </td><td>list </td><td>no </td></tr>
* <tr><td>preferredScrollableViewportSize</td><td>list </td><td>no </td></tr>
* <tr><td>prototypeCellValue </td><td>list </td><td>yes </td></tr>
* <tr><td>scrollableTracksViewportHeight </td><td>list </td><td>no </td></tr>
* <tr><td>scrollableTracksViewportWidth </td><td>list </td><td>no </td></tr>
* <tr><td>selectedIndex </td><td>selection</td><td>no </td></tr>
* <tr><td>selectedIndices </td><td>selection</td><td>no </td></tr>
* <tr><td>selectedValue </td><td>model </td><td>no </td></tr>
* <tr><td>selectedValues </td><td>model </td><td>no </td></tr>
* <tr><td>selectionBackground </td><td>list </td><td>yes </td></tr>
* <tr><td>selectionEmpty </td><td>selection</td><td>no </td></tr>
* <tr><td>selectionForeground </td><td>list </td><td>yes </td></tr>
* <tr><td>selectionMode </td><td>selection</td><td>no </td></tr>
* <tr><td>selectionModel </td><td>list </td><td>yes </td></tr>
* <tr><td>UI </td><td>list </td><td>yes </td></tr>
* <tr><td>UIClassID </td><td>list </td><td>no </td></tr>
* <tr><td>valueIsAdjusting </td><td>list </td><td>no </td></tr>
* <tr><td>visibleRowCount </td><td>list </td><td>no </td></tr>
* </table>
*
* @author Graydon Hoare (graydon@redhat.com)
*/
public class JList extends JComponent implements Accessible, Scrollable
{
private static final long serialVersionUID = 4406629526391098046L;
/**
* Constant value used in "layoutOrientation" property. This value means
* that cells are laid out in a single vertical column. This is the default.
*/
public static final int VERTICAL = 0;
/**
* Constant value used in "layoutOrientation" property. This value means
* that cells are laid out in multiple columns "newspaper style", filling
* vertically first, then horizontally.
*/
public static final int VERTICAL_WRAP = 1;
/**
* Constant value used in "layoutOrientation" property. This value means
* that cells are laid out in multiple columns "newspaper style",
* filling horizontally first, then vertically.
*/
public static final int HORIZONTAL_WRAP = 2;
/** Fired in a PropertyChangeEvent when the "cellRenderer" property changes. */
public static final String CELL_RENDERER_PROPERTY_CHANGED = "cellRenderer";
/** Fired in a PropertyChangeEvent when the "fixedCellHeight" property changes. */
public static final String FIXED_CELL_HEIGHT_PROPERTY_CHANGED = "fixedCellHeight";
/** Fired in a PropertyChangeEvent when the "fixedCellWidth" property changes. */
public static final String FIXED_CELL_WIDTH_PROPERTY_CHANGED = "fixedCellWidth";
/** Fired in a PropertyChangeEvent when the "layoutOrientation" property changes. */
public static final String LAYOUT_ORIENTATION_PROPERTY_CHANGED = "layoutOrientation";
/** Fired in a PropertyChangeEvent when the "model" property changes. */
public static final String MODEL_PROPERTY_CHANGED = "model";
/** Fired in a PropertyChangeEvent when the "prototypeCellValue" property changes. */
public static final String PROTOTYPE_CELL_VALUE_PROPERTY_CHANGED = "prototypeCellValue";
/** Fired in a PropertyChangeEvent when the "selectionBackground" property changes. */
public static final String SELECTION_BACKGROUND_PROPERTY_CHANGED = "selectionBackground";
/** Fired in a PropertyChangeEvent when the "selectionForeground" property changes. */
public static final String SELECTION_FOREGROUND_PROPERTY_CHANGED = "selectionForeground";
/** Fired in a PropertyChangeEvent when the "selectionModel" property changes. */
public static final String SELECTION_MODEL_PROPERTY_CHANGED = "selectionModel";
/**
* This property indicates whether "drag and drop" functions are enabled
* on the list.
*/
boolean dragEnabled;
/** This property provides a strategy for rendering cells in the list. */
ListCellRenderer cellRenderer;
/**
* This property indicates an fixed width to assign to all cells in the
* list. If its value is <code>-1</code>, no width has been
* assigned. This value can be set explicitly, or implicitly by setting
* the {@link #prototypeCellValue} property.
*/
int fixedCellWidth;
/**
* This property indicates an fixed height to assign to all cells in the
* list. If its value is <code>-1</code>, no height has been
* assigned. This value can be set explicitly, or implicitly by setting
* the {@link #prototypeCellValue} property.
*/
int fixedCellHeight;
/**
* This property holds the current layout orientation of the list, which
* is one of the integer constants {@link #VERTICAL}, {@link
* #VERTICAL_WRAP}, or {@link #HORIZONTAL_WRAP}.
*/
int layoutOrientation;
/** This property holds the data elements displayed by the list. */
ListModel model;
/**
* <p>This property holds a reference to a "prototype" data value --
* typically a String -- which is used to calculate the {@link
* #fixedCellWidth} and {@link #fixedCellHeight} properties, using the
* {@link #cellRenderer} property to acquire a component to render the
* prototype.</p>
*
* <p>It is important that you <em>not</em> set this value to a
* component. It has to be a <em>data value</em> such as the objects you
* would find in the list's model. Setting it to a component will have
* undefined (and undesirable) affects. </p>
*/
Object prototypeCellValue;
/**
* This property specifies a foreground color for the selected cells in
* the list. When {@link ListCellRenderer.getListCellRendererComponent}
* is called with a selected cell object, the component returned will
* have its "foreground" set to this color.
*/
Color selectionBackground;
/**
* This property specifies a background color for the selected cells in
* the list. When {@link ListCellRenderer.getListCellRendererComponent}
* is called with a selected cell object, the component returned will
* have its "background" property set to this color.
*/
Color selectionForeground;
/**
* This property holds a description of which data elements in the {@link
* #model} property should be considered "selected", when displaying and
* interacting with the list.
*/
ListSelectionModel selectionModel;
/**
* This property indicates that the list's selection is currently
* "adjusting" -- perhaps due to a user actively dragging the mouse over
* multiple list elements -- and is therefore likely to change again in
* the near future. A {@link ListSelectionListener} might choose to delay
* updating its view of the list's selection until this property is
* false, meaning that the adjustment has completed.
*/
boolean valueIsAdjusting;
/**
* This property indicates a <em>preference</em> for the number of rows
* displayed in the list, and will scale the
* {@link #preferredScrollableViewportSize} property accordingly. The actual
* number of displayed rows, when the list is placed in a real {@link
* Viewport} or other component, may be greater or less than this number.
*/
int visibleRowCount;
/**
* Fire a {@link ListSelectionEvent} to all the registered ListSelectionListeners.
*/
void fireSelectionValueChanged(int firstIndex, int lastIndex, boolean isAdjusting)
{
ListSelectionEvent evt = new ListSelectionEvent(this, firstIndex, lastIndex, isAdjusting);
ListSelectionListener listeners[] = getListSelectionListeners();
for (int i = 0; i < listeners.length; ++i)
{
listeners[i].valueChanged(evt);
}
}
/**
* This private listener propagates {@link ListSelectionEvent} events
* from the list's "selectionModel" property to the list's {@link
* ListSelectionListener} listeners. It also listens to {@link
* ListDataEvent} events from the list's {@link #model} property. If this
* class receives either type of event, it triggers repainting of the
* list.
*/
private class ListListener
implements ListSelectionListener, ListDataListener
{
// ListDataListener events
public void contentsChanged(ListDataEvent event)
{
JList.this.revalidate();
JList.this.repaint();
}
public void intervalAdded(ListDataEvent event)
{
JList.this.revalidate();
JList.this.repaint();
}
public void intervalRemoved(ListDataEvent event)
{
JList.this.revalidate();
JList.this.repaint();
}
// ListSelectionListener events
public void valueChanged(ListSelectionEvent event)
{
JList.this.fireSelectionValueChanged(event.getFirstIndex(),
event.getLastIndex(),
event.getValueIsAdjusting());
JList.this.repaint();
}
};
/**
* Shared ListListener instance, subscribed to both the current {@link
* #model} and {@link #selectionModel} properties of the list.
*/
ListListener listListener;
/**
* Creates a new JList object.
*/
public JList()
{
init();
}
/**
* Creates a new JList object.
*
* @param listData Initial data to populate the list with
*/
public JList(Object[] listData)
{
init();
setListData(listData);
}
/**
* Creates a new JList object.
*
* @param listData Initial data to populate the list with
*/
public JList(Vector listData)
{
init();
setListData(listData);
}
/**
* Creates a new JList object.
*
* @param listData Initial data to populate the list with
*/
public JList(ListModel listData)
{
init();
setModel(listData);
}
void init()
{
dragEnabled = false;
fixedCellHeight = -1;
fixedCellWidth = -1;
layoutOrientation = VERTICAL;
opaque = true;
valueIsAdjusting = false;
visibleRowCount = 8;
cellRenderer = new DefaultListCellRenderer();
listListener = new ListListener();
setModel(new DefaultListModel());
setSelectionModel(new DefaultListSelectionModel());
updateUI();
}
/**
* Gets the value of the {@link #fixedCellHeight} property. This property
* may be <code>-1</code> to indicate that no cell height has been
* set. This property is also set implicitly when the
* {@link #prototypeCellValue} property is set.
*
* @return The current value of the property
*
* @see #fixedCellHeight
* @see #setFixedCellHeight
* @see #setPrototypeCellValue
*/
public int getFixedCellHeight()
{
return fixedCellHeight;
}
/**
* Sets the value of the {@link #fixedCellHeight} property. This property
* may be <code>-1</code> to indicate that no cell height has been
* set. This property is also set implicitly when the {@link
* #prototypeCellValue} property is set, but setting it explicitly
* overrides the height computed from {@link #prototypeCellValue}.
*
* @see #getFixedCellHeight
* @see #getPrototypeCellValue
*/
public void setFixedCellHeight(int h)
{
int old = fixedCellHeight;
fixedCellHeight = h;
firePropertyChange(FIXED_CELL_WIDTH_PROPERTY_CHANGED, old, h);
}
/**
* Gets the value of the {@link #fixedCellWidth} property. This property
* may be <code>-1</code> to indicate that no cell width has been
* set. This property is also set implicitly when the {@link
* #prototypeCellValue} property is set.
*
* @return The current value of the property
*
* @see #setFixedCellWidth
* @see #setPrototypeCellValue
*/
public int getFixedCellWidth()
{
return fixedCellWidth;
}
/**
* Sets the value of the {@link #fixedCellWidth} property. This property
* may be <code>-1</code> to indicate that no cell width has been
* set. This property is also set implicitly when the {@link
* #prototypeCellValue} property is set, but setting it explicitly
* overrides the width computed from {@link #prototypeCellValue}.
*
* @see #getFixedCellWidth
* @see #getPrototypeCellValue
*/
public void setFixedCellWidth(int h)
{
int old = fixedCellHeight;
fixedCellHeight = h;
firePropertyChange(FIXED_CELL_HEIGHT_PROPERTY_CHANGED, old, h);
}
/**
* Gets the value of the {@link #visibleRowCount} property.
*
* @return the current value of the property.
*/
public int getVisibleRowCount()
{
return visibleRowCount;
}
/**
* Sets the value of the {@link #visibleRowCount} property.
*
* @param visibleRowCount The new property value
*/
public void setVisibleRowCount(int vc)
{
visibleRowCount = vc;
revalidate();
repaint();
}
/**
* Adds a {@link ListSelectionListener} to the listener list for this
* list. The listener will be called back with a {@link
* ListSelectionEvent} any time the list's {@link #selectionModel}
* property changes. The source of such events will be the JList,
* not the selection model.
*
* @param listener The new listener to add
*/
public void addListSelectionListener(ListSelectionListener listener)
{
listenerList.add (ListSelectionListener.class, listener);
}
/**
* Removes a {@link ListSelectionListener} from the listener list for
* this list. The listener will no longer be called when the list's
* {@link #selectionModel} changes.
*
* @param listener The listener to remove
*/
public void removeListSelectionListener(ListSelectionListener listener)
{
listenerList.remove(ListSelectionListener.class, listener);
}
/**
* Returns an array of all ListSelectionListeners subscribed to this
* list.
*
* @return The current subscribed listeners
*
* @since 1.4
*/
public ListSelectionListener[] getListSelectionListeners()
{
return (ListSelectionListener[]) getListeners(ListSelectionListener.class);
}
/**
* Sets the list's "selectionMode" property, which simply mirrors the
* same property on the list's {@link #selectionModel} property. This
* property should be one of the integer constants
* <code>SINGLE_SELECTION</code>, <code>SINGLE_INTERVAL_SELECTION</code>,
* or <code>MULTIPLE_INTERVAL_SELECTION</code> from the {@link
* ListSelectionModel} interface.
*
* @param a The new selection mode
*/
public void setSelectionMode(int a)
{
selectionModel.setSelectionMode(a);
}
/**
* Adds the interval <code>[a,a]</code> to the set of selections managed
* by this list's {@link #selectionModel} property. Depending on the
* selection mode, this may cause existing selections to become invalid,
* or may simply expand the set of selections.
*
* @param a A number in the half-open range <code>[0, x)</code> where
* <code>x = getModel.getSize()</code>, indicating the index of an
* element in the list to select.
*
* @see #setSelectionMode
* @see #selectionModel
*/
public void setSelectedIndex(int a)
{
selectionModel.setSelectionInterval(a, a);
}
/**
* For each element <code>a[i]</code> of the provided array
* <code>a</code>, calls {@link #setSelectedIndex} on <code>a[i]</code>.
*
* @see #setSelectionMode
* @see #selectionModel
*/
public void setSelectedIndices(int [] a)
{
for (int i = 0; i < a.length; ++i)
setSelectedIndex(a[i]);
}
/**
* Returns the minimum index of an element in the list which is currently
* selected.
*
* @return A number in the half-open range <code>[0, x)</code> where
* <code>x = getModel.getSize()</code>, indicating the minimum index of
* an element in the list for which the element is selected, or
* <code>-1</code> if no elements are selected
*/
public int getSelectedIndex()
{
return selectionModel.getMinSelectionIndex();
}
/**
* Returns <code>true</code> if the model's selection is empty, otherwise
* <code>false</code>.
*
* @return The return value of {@link ListSelectionModel#isSelectionEmpty}
*/
public boolean isSelectionEmpty()
{
return selectionModel.isSelectionEmpty();
}
/**
* Returns the list index of the upper left or upper right corner of the
* {@link #visibleRect} property, depending on the {@link
* #componentOrientation} property.
*
* @return The index of the first visible list cell, or <code>-1</code>
* if none is visible.
*/
public int getFirstVisibleIndex()
{
ComponentOrientation or = getComponentOrientation();
Rectangle r = getVisibleRect();
if (or == ComponentOrientation.RIGHT_TO_LEFT)
r.translate((int) r.getWidth(), 0);
return getUI().locationToIndex(this, r.getLocation());
}
/**
* Returns index of the cell to which specified location is closest to
* @param location for which to look for in the list
*
* @return index of the cell to which specified location is closest to.
*/
public int locationToIndex(Point location) {
return getUI().locationToIndex(this, location);
}
/**
* Returns location of the cell located at the specified index in the list.
* @param index of the cell for which location will be determined
*
* @return location of the cell located at the specified index in the list.
*/
public Point indexToLocation(int index){
//FIXME: Need to implement.
return null;
}
/**
* Returns the list index of the lower right or lower left corner of the
* {@link #visibleRect} property, depending on the {@link
* #componentOrientation} property.
*
* @return The index of the first visible list cell, or <code>-1</code>
* if none is visible.
*/
public int getLastVisibleIndex()
{
ComponentOrientation or = getComponentOrientation();
Rectangle r = getVisibleRect();
r.translate(0, (int) r.getHeight());
if (or == ComponentOrientation.LEFT_TO_RIGHT)
r.translate((int) r.getWidth(), 0);
return getUI().locationToIndex(this, r.getLocation());
}
/**
* Returns the indices of values in the {@link #model} property which are
* selected.
*
* @return An array of model indices, each of which is selected according
* to the {@link #selection} property
*/
public int[] getSelectedIndices()
{
int lo, hi, n, i, j;
if (selectionModel.isSelectionEmpty())
return new int[0];
lo = selectionModel.getMinSelectionIndex();
hi = selectionModel.getMaxSelectionIndex();
n = 0;
for (i = lo; i < hi; ++i)
if (selectionModel.isSelectedIndex(i))
n++;
int [] v = new int[n];
j = 0;
for (i = lo; i < hi; ++i)
if (selectionModel.isSelectedIndex(i))
v[j++] = i;
return v;
}
/**
* Indicates whether the list element at a given index value is
* currently selected.
*
* @param a The index to check
* @return <code>true</code> if <code>a</code> is the index of a selected
* list element
*/
public boolean isSelectedIndex(int a)
{
return selectionModel.isSelectedIndex(a);
}
/**
* Returns the first value in the list's {@link #model} property which is
* selected, according to the list's {@link #selectionModel} property.
* This is equivalent to calling
* <code>getModel()getElementAt(getSelectedIndex())</code>, with a check
* for the special index value of <code>-1</code> which returns null
* <code>null</code>.
*
* @return The first selected element, or <code>null</code> if no element
* is selected.
*
* @see getSelectedValues
*/
public Object getSelectedValue()
{
int index = getSelectedIndex();
if (index == -1)
return null;
return getModel().getElementAt(index);
}
/**
* Returns all the values in the list's {@link #model} property which
* are selected, according to the list's {@link #selectionModel} property.
*
* @return An array containing all the selected values
*
* @see getSelectedValue
*/
public Object[] getSelectedValues()
{
int [] idx = getSelectedIndices();
Object [] v = new Object[idx.length];
for (int i = 0; i < idx.length; ++i)
v[i] = getModel().getElementAt(i);
return v;
}
/**
* Gets the value of the {@link #selectionBackground} property.
*
* @return The current value of the property
*/
public Color getSelectionBackground()
{
return selectionBackground;
}
/**
* Sets the value of the {@link #selectionBackground} property.
*
* @param c The new value of the property
*/
public void setSelectionBackground(Color c)
{
Color old = selectionBackground;
selectionBackground = c;
firePropertyChange(SELECTION_BACKGROUND_PROPERTY_CHANGED, old, c);
repaint();
}
/**
* Gets the value of the {@link #selectionForeground} property.
*
* @return The current value of the property
*/
public Color getSelectionForeground()
{
return selectionForeground;
}
/**
* Sets the value of the {@link #selectionForeground} property.
*
* @param c The new value of the property
*/
public void setSelectionForeground(Color c)
{
Color old = selectionForeground;
selectionForeground = c;
firePropertyChange(SELECTION_FOREGROUND_PROPERTY_CHANGED, old, c);
}
/**
* Sets the selection to cover only the specified value, if it
* exists in the model.
*
* @param obj The object to select
* @param scroll Whether to scroll the list to make the newly selected
* value visible
*
* @see #ensureIndexIsVisible
*/
public void setSelectedValue(Object obj, boolean scroll)
{
for (int i = 0; i < model.getSize(); ++i)
{
if (model.getElementAt(i).equals(obj))
{
setSelectedIndex(i);
if (scroll)
ensureIndexIsVisible(i);
break;
}
}
}
/**
* Scrolls this list to make the specified cell visible. This
* only works if the list is contained within a viewport.
*
* @param i The list index to make visible
*
* @see JComponent#scrollRectToVisible
*/
public void ensureIndexIsVisible(int i)
{
scrollRectToVisible(getUI().getCellBounds(this, i, i));
}
/**
* Sets the {@link #model} property of the list to a new anonymous
* {@link AbstractListModel} subclass which accesses the provided Object
* array directly.
*
* @param listData The object array to build a new list model on
* @see #setModel
*/
public void setListData(final Object[] listData)
{
setModel(new AbstractListModel()
{
public int getSize()
{
return listData.length;
}
public Object getElementAt(int i)
{
return listData[i];
}
});
}
/**
* Sets the {@link #model} property of the list to a new anonymous {@link
* AbstractListModel} subclass which accesses the provided vector
* directly.
*
* @param listData The object array to build a new list model on
* @see #setModel
*/
public void setListData(final Vector listData)
{
setModel(new AbstractListModel()
{
public int getSize()
{
return listData.size();
}
public Object getElementAt(int i)
{
return listData.elementAt(i);
}
});
}
/**
* Gets the value of the {@link #cellRenderer} property.
*
* @return The current value of the property
*/
public ListCellRenderer getCellRenderer()
{
return cellRenderer;
}
/**
* Sets the value of the {@link #celLRenderer} property.
*
* @param cellRenderer The new property value
*/
public void setCellRenderer(ListCellRenderer cr)
{
ListCellRenderer old = cellRenderer;
cellRenderer = cr;
firePropertyChange(CELL_RENDERER_PROPERTY_CHANGED, old, cr);
revalidate();
repaint();
}
/**
* Gets the value of the {@link #model} property.
*
* @return The current value of the property
*/
public ListModel getModel()
{
return model;
}
/**
* Sets the value of the {@link #model} property. The list's {@link
* #listListener} is unsubscribed from the existing model, if it exists,
* and re-subscribed to the new model.
*
* @param model The new property value
*/
public void setModel(ListModel m)
{
ListModel old = model;
if (old != null)
old.removeListDataListener(listListener);
model = m;
if (model != null)
model.addListDataListener(listListener);
firePropertyChange(MODEL_PROPERTY_CHANGED, old, m);
revalidate();
repaint();
}
public ListSelectionModel getSelectionModel()
{
return selectionModel;
}
/**
* Sets the value of the {@link #selectionModel} property. The list's
* {@link #listListener} is unsubscribed from the existing selection
* model, if it exists, and re-subscribed to the new selection model.
*
* @param l The new property value
*/
public void setSelectionModel(ListSelectionModel l)
{
ListSelectionModel old = selectionModel;
if (old != null)
old.removeListSelectionListener(listListener);
selectionModel = l;
if (selectionModel != null)
selectionModel.addListSelectionListener(listListener);
firePropertyChange(SELECTION_MODEL_PROPERTY_CHANGED, old, l);
revalidate();
repaint();
}
/**
* Gets the value of the UI property.
*
* @return The current property value
*/
public ListUI getUI()
{
return (ListUI) ui;
}
/**
* Sets the value of the UI property.
*
* @param ui The new property value
*/
public void setUI(ListUI ui)
{
super.setUI(ui);
}
/**
* Calls {@link #setUI} with the {@link ListUI} subclass
* returned from calling {@link UIManager#getUI}.
*/
public void updateUI()
{
setUI((ListUI) UIManager.getUI(this));
}
/**
* Return the class identifier for the list's UI property. This should
* be the constant string <code>"ListUI"</code>, and map to an
* appropriate UI class in the {@link UIManager}.
*
* @return The class identifier
*/
public String getUIClassID()
{
return "ListUI";
}
/**
* Returns the current value of the {@link #prototypeCellValue}
* property. This property holds a reference to a "prototype" data value
* -- typically a String -- which is used to calculate the {@link
* #fixedCellWidth} and {@link #fixedCellHeight} properties, using the
* {@link #cellRenderer} property to acquire a component to render the
* prototype.
*
* @return The current prototype cell value
* @see #setPrototypeCellValue
*/
public Object getPrototypeCellValue()
{
return prototypeCellValue;
}
/**
* <p>Set the {@link #prototypeCellValue} property. This property holds a
* reference to a "prototype" data value -- typically a String -- which
* is used to calculate the {@link #fixedCellWidth} and {@link
* #fixedCellHeight} properties, using the {@link #cellRenderer} property
* to acquire a component to render the prototype.</p>
*
* <p>It is important that you <em>not</em> set this value to a
* component. It has to be a <em>data value</em> such as the objects you
* would find in the list's model. Setting it to a component will have
* undefined (and undesirable) affects. </p>
*
* @param obj The new prototype cell value
* @see #getPrototypeCellValue
*/
public void setPrototypeCellValue(Object obj)
{
Object old = prototypeCellValue;
Component comp = getCellRenderer()
.getListCellRendererComponent(this, obj, 0, false, false);
Dimension d = comp.getPreferredSize();
fixedCellWidth = d.width;
fixedCellHeight = d.height;
prototypeCellValue = obj;
firePropertyChange(PROTOTYPE_CELL_VALUE_PROPERTY_CHANGED, old, obj);
}
public AccessibleContext getAccessibleContext()
{
return null;
}
/**
* Returns a size indicating how much space this list would like to
* consume, when contained in a scrollable viewport. This is part of the
* {@link Scrollable} interface, which interacts with {@link
* ScrollPaneLayout} and {@link Viewport} to define scrollable objects.
*
* @return The preferred size
*/
public Dimension getPreferredScrollableViewportSize()
{
int vis = getVisibleRowCount();
int nrows = getModel() == null ? 0 : getModel().getSize();
// FIXME: this is a somewhat arbitrary default, but.. ?
Dimension single = new Dimension(10, 10);;
Rectangle bounds = null;
if (vis > nrows)
{
if (fixedCellWidth != -1 &&
fixedCellHeight != -1)
{
single = new Dimension(fixedCellWidth, fixedCellHeight);
}
else if (nrows != 0 && getUI() != null)
{
Rectangle tmp = getUI().getCellBounds(this, 0, 0);
if (tmp != null)
single = tmp.getSize();
}
}
else if (getUI() != null)
{
return getUI().getCellBounds(this, 0, vis - 1).getSize();
}
return new Dimension(single.width, single.height * vis);
}
/**
* <p>Return the number of pixels the list must scroll in order to move a
* "unit" of the list into the provided visible rectangle. When the
* provided direction is positive, the call describes a "downwards"
* scroll, which will be exposing a cell at a <em>greater</em> index in
* the list than those elements currently showing. Then the provided
* direction is negative, the call describes an "upwards" scroll, which
* will be exposing a cell at a <em>lesser</em> index in the list than
* those elements currently showing.</p>
*
* <p>If the provided orientation is <code>HORIZONTAL</code>, the above
* comments refer to "rightwards" for positive direction, and "leftwards"
* for negative.</p>
*
*
* @param visibleRect The rectangle to scroll an element into
* @param orientation One of the numeric consants <code>VERTICAL</code>
* or <code>HORIZONTAL</code>
* @param direction An integer indicating the scroll direction: positive means
* forwards (down, right), negative means backwards (up, left)
*
* @return The scrollable unit increment, in pixels
*/
public int getScrollableUnitIncrement(Rectangle visibleRect,
int orientation, int direction)
{
ListUI lui = this.getUI();
if (orientation == SwingConstants.VERTICAL)
{
if (direction > 0)
{
// Scrolling down
Point bottomLeft = new Point(visibleRect.x,
visibleRect.y + visibleRect.height);
int curIdx = lui.locationToIndex(this, bottomLeft);
Rectangle curBounds = lui.getCellBounds(this, curIdx, curIdx);
if (curBounds.y + curBounds.height == bottomLeft.y)
{
// we are at the exact bottom of the current cell, so we
// are being asked to scroll to the end of the next one
if (curIdx + 1 < model.getSize())
{
// there *is* a next item in the list
Rectangle nxtBounds = lui.getCellBounds(this, curIdx + 1, curIdx + 1);
return nxtBounds.height;
}
else
{
// no next item, no advance possible
return 0;
}
}
else
{
// we are part way through an existing cell, so we are being
// asked to scroll to the bottom of it
return (curBounds.y + curBounds.height) - bottomLeft.y;
}
}
else
{
// scrolling up
Point topLeft = new Point(visibleRect.x, visibleRect.y);
int curIdx = lui.locationToIndex(this, topLeft);
Rectangle curBounds = lui.getCellBounds(this, curIdx, curIdx);
if (curBounds.y == topLeft.y)
{
// we are at the exact top of the current cell, so we
// are being asked to scroll to the top of the previous one
if (curIdx > 0)
{
// there *is* a previous item in the list
Rectangle nxtBounds = lui.getCellBounds(this, curIdx - 1, curIdx - 1);
return -nxtBounds.height;
}
else
{
// no previous item, no advance possible
return 0;
}
}
else
{
// we are part way through an existing cell, so we are being
// asked to scroll to the top of it
return curBounds.y - topLeft.y;
}
}
}
// FIXME: handle horizontal scrolling (also wrapping?)
return 1;
}
/**
* <p>Return the number of pixels the list must scroll in order to move a
* "block" of the list into the provided visible rectangle. When the
* provided direction is positive, the call describes a "downwards"
* scroll, which will be exposing a cell at a <em>greater</em> index in
* the list than those elements currently showing. Then the provided
* direction is negative, the call describes an "upwards" scroll, which
* will be exposing a cell at a <em>lesser</em> index in the list than
* those elements currently showing.</p>
*
* <p>If the provided orientation is <code>HORIZONTAL</code>, the above
* comments refer to "rightwards" for positive direction, and "leftwards"
* for negative.</p>
*
*
* @param visibleRect The rectangle to scroll an element into
* @param orientation One of the numeric consants <code>VERTICAL</code>
* or <code>HORIZONTAL</code>
* @param direction An integer indicating the scroll direction: positive means
* forwards (down, right), negative means backwards (up, left)
*
* @return The scrollable unit increment, in pixels
*/
public int getScrollableBlockIncrement(Rectangle visibleRect,
int orientation, int direction)
{
if (orientation == VERTICAL)
return visibleRect.height * direction;
else
return visibleRect.width * direction;
}
/**
* Gets the value of the {@link #scrollableTracksViewportWidth} property.
*
* @return <code>true</code> if the viewport is larger (horizontally)
* than the list and the list should be expanded to fit the viewport;
* <code>false</code> if the viewport is smaller than the list and the
* list should scroll (horizontally) within the viewport
*/
public boolean getScrollableTracksViewportWidth()
{
return false;
}
/**
* Gets the value of the {@link #scrollableTracksViewportWidth} property.
*
* @return <code>true</code> if the viewport is larger (vertically)
* than the list and the list should be expanded to fit the viewport;
* <code>false</code> if the viewport is smaller than the list and the
* list should scroll (vertically) within the viewport
*/
public boolean getScrollableTracksViewportHeight()
{
return false;
}
}