From bbe53f03c8de1126e442866620409007c7df88fe Mon Sep 17 00:00:00 2001 From: Michael Koch Date: Tue, 24 Jun 2003 20:17:27 +0000 Subject: [PATCH] AncestorEvent.java, [...]: New versions from classpath. 2003-06-24 Michael Koch * javax/swing/event/AncestorEvent.java, javax/swing/event/HyperlinkEvent.java, javax/swing/event/InternalFrameEvent.java, javax/swing/event/ListDataEvent.java, javax/swing/event/TableModelEvent.java, javax/swing/event/TreeWillExpandListener.java, javax/swing/plaf/ComponentUI.java, javax/swing/plaf/DesktopIconUI.java, javax/swing/plaf/DesktopPaneUI.java, javax/swing/plaf/DimensionUIResource.java, javax/swing/plaf/FileChooserUI.java, javax/swing/plaf/FontUIResource.java, javax/swing/plaf/IconUIResource.java, javax/swing/plaf/InputMapUIResource.java, javax/swing/plaf/InsetsUIResource.java, javax/swing/plaf/InternalFrameUI.java, javax/swing/plaf/LabelUI.java, javax/swing/plaf/ListUI.java, javax/swing/plaf/MenuBarUI.java, javax/swing/plaf/MenuItemUI.java, javax/swing/plaf/OptionPaneUI.java, javax/swing/plaf/PanelUI.java, javax/swing/plaf/ProgressBarUI.java, javax/swing/plaf/doc-files/ComponentUI-1.dia, javax/swing/plaf/doc-files/ComponentUI-1.png: New versions from classpath. From-SVN: r68438 --- libjava/ChangeLog | 29 ++ libjava/javax/swing/event/AncestorEvent.java | 144 +++----- libjava/javax/swing/event/HyperlinkEvent.java | 256 ++++++------- .../javax/swing/event/InternalFrameEvent.java | 136 +++---- libjava/javax/swing/event/ListDataEvent.java | 141 +++----- .../javax/swing/event/TableModelEvent.java | 269 ++++++-------- .../swing/event/TreeWillExpandListener.java | 33 +- libjava/javax/swing/plaf/ComponentUI.java | 342 ++++++++++++++---- libjava/javax/swing/plaf/DesktopIconUI.java | 35 +- libjava/javax/swing/plaf/DesktopPaneUI.java | 36 +- .../javax/swing/plaf/DimensionUIResource.java | 30 +- libjava/javax/swing/plaf/FileChooserUI.java | 163 +++++---- libjava/javax/swing/plaf/FontUIResource.java | 63 +++- libjava/javax/swing/plaf/IconUIResource.java | 69 +++- .../javax/swing/plaf/InputMapUIResource.java | 41 ++- .../javax/swing/plaf/InsetsUIResource.java | 35 +- libjava/javax/swing/plaf/InternalFrameUI.java | 38 +- libjava/javax/swing/plaf/LabelUI.java | 21 +- libjava/javax/swing/plaf/ListUI.java | 74 +++- libjava/javax/swing/plaf/MenuBarUI.java | 38 +- libjava/javax/swing/plaf/MenuItemUI.java | 38 +- libjava/javax/swing/plaf/OptionPaneUI.java | 39 +- libjava/javax/swing/plaf/PanelUI.java | 20 +- libjava/javax/swing/plaf/ProgressBarUI.java | 38 +- .../swing/plaf/doc-files/ComponentUI-1.dia | Bin 3079 -> 3085 bytes .../swing/plaf/doc-files/ComponentUI-1.png | Bin 24898 -> 32683 bytes 26 files changed, 1247 insertions(+), 881 deletions(-) diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 90cd57f36b7..54f805114dc 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,32 @@ +2003-06-24 Michael Koch + + * javax/swing/event/AncestorEvent.java, + javax/swing/event/HyperlinkEvent.java, + javax/swing/event/InternalFrameEvent.java, + javax/swing/event/ListDataEvent.java, + javax/swing/event/TableModelEvent.java, + javax/swing/event/TreeWillExpandListener.java, + javax/swing/plaf/ComponentUI.java, + javax/swing/plaf/DesktopIconUI.java, + javax/swing/plaf/DesktopPaneUI.java, + javax/swing/plaf/DimensionUIResource.java, + javax/swing/plaf/FileChooserUI.java, + javax/swing/plaf/FontUIResource.java, + javax/swing/plaf/IconUIResource.java, + javax/swing/plaf/InputMapUIResource.java, + javax/swing/plaf/InsetsUIResource.java, + javax/swing/plaf/InternalFrameUI.java, + javax/swing/plaf/LabelUI.java, + javax/swing/plaf/ListUI.java, + javax/swing/plaf/MenuBarUI.java, + javax/swing/plaf/MenuItemUI.java, + javax/swing/plaf/OptionPaneUI.java, + javax/swing/plaf/PanelUI.java, + javax/swing/plaf/ProgressBarUI.java, + javax/swing/plaf/doc-files/ComponentUI-1.dia, + javax/swing/plaf/doc-files/ComponentUI-1.png: + New versions from classpath. + 2003-06-24 Michael Koch * java/nio/Buffer.java diff --git a/libjava/javax/swing/event/AncestorEvent.java b/libjava/javax/swing/event/AncestorEvent.java index 0c86badc764..7acc2881cdb 100644 --- a/libjava/javax/swing/event/AncestorEvent.java +++ b/libjava/javax/swing/event/AncestorEvent.java @@ -43,99 +43,57 @@ import java.awt.Container; import javax.swing.JComponent; /** - * Ancestor Event * @author Andrew Selkirk * @author Ronald Veldema */ -public class AncestorEvent extends AWTEvent { - - //------------------------------------------------------------- - // Constants -------------------------------------------------- - //------------------------------------------------------------- - - /** - * ANCESTOR_ADDED constant - */ - public static int ANCESTOR_ADDED = 0; - - /** - * ANCESTOR_MOVED constant - */ - public static int ANCESTOR_MOVED = 1; - - /** - * ANCESTOR_REMOVED constant - */ - public static int ANCESTOR_REMOVED = 2; - - - //------------------------------------------------------------- - // Variables -------------------------------------------------- - //------------------------------------------------------------- - - /** - * Source component - */ - private JComponent sourceComponent = null; - - /** - * Ancestor - */ - private Container ancestor = null; - - /** - * Ancestor Parent - */ - private Container ancestorParent = null; - - - //------------------------------------------------------------- - // Initialization --------------------------------------------- - //------------------------------------------------------------- - - /** - * Constructor AncestorEvent - * @param source Source component - * @param id ID - * @param ancestor ancestor - * @param ancestorParent parent ancestor - */ - public AncestorEvent(JComponent source, int id, Container ancestor, - Container ancestorParent) { - super(source, id); - this.sourceComponent = source; - this.ancestor = ancestor; - this.ancestorParent = ancestorParent; - } // AncestorEvent() - - - //------------------------------------------------------------- - // Methods ---------------------------------------------------- - //------------------------------------------------------------- - - /** - * Get ancestor - * @return ancestor - */ - public Container getAncestor() { - return ancestor; - } // getAncestor() - - /** - * Get ancestor parent - * @return ancestor parent - */ - public Container getAncestorParent() { - return ancestorParent; - } // getAncestorParent() - - /** - * Get component - * @return component - */ - public JComponent getComponent() { - return sourceComponent; - } // getComponent() - - -} // AncestorEvent +public class AncestorEvent extends AWTEvent +{ + private static final serialVersionUID = 4799843792513591457L; + + public static int ANCESTOR_ADDED = 0; + public static int ANCESTOR_MOVED = 1; + public static int ANCESTOR_REMOVED = 2; + + private JComponent sourceComponent; + private Container ancestor; + private Container ancestorParent; + + /** + * @param source Source component + * @param id ID + * @param ancestor ancestor + * @param ancestorParent parent ancestor + */ + public AncestorEvent(JComponent source, int id, Container ancestor, + Container ancestorParent) + { + super(source, id); + this.sourceComponent = source; + this.ancestor = ancestor; + this.ancestorParent = ancestorParent; + } + + /** + * Returns the ancestor of this event. + */ + public Container getAncestor() + { + return ancestor; + } + + /** + * Returns the ancester parent of this event. + */ + public Container getAncestorParent() + { + return ancestorParent; + } + + /** + * Returns the source of this event. + */ + public JComponent getComponent() + { + return sourceComponent; + } +} diff --git a/libjava/javax/swing/event/HyperlinkEvent.java b/libjava/javax/swing/event/HyperlinkEvent.java index 26ccaa81c50..a6bef2e679b 100644 --- a/libjava/javax/swing/event/HyperlinkEvent.java +++ b/libjava/javax/swing/event/HyperlinkEvent.java @@ -43,155 +43,117 @@ import java.util.EventObject; import javax.swing.text.Element; /** - * HyperlinkEvent * @author Andrew Selkirk * @author Ronald Veldema */ public class HyperlinkEvent extends EventObject { - - //------------------------------------------------------------- - // Classes ---------------------------------------------------- - //------------------------------------------------------------- - - /** - * EventType - */ - public static final class EventType { - - //------------------------------------------------------------- - // Variables -------------------------------------------------- - //------------------------------------------------------------- - - /** - * ENTERED - */ - public static final EventType ENTERED = new EventType("ENTERED"); // TODO - - /** - * EXITED - */ - public static final EventType EXITED = new EventType("EXITED"); // TODO - - /** - * ACTIVATED - */ - public static final EventType ACTIVATED = new EventType("ACTIVATED"); // TODO - - /** - * type - */ - private String type; - - - //------------------------------------------------------------- - // Initialization --------------------------------------------- - //------------------------------------------------------------- - - /** - * Constructor EventType - * @param type TODO - */ - private EventType(String type) { - this.type = type; - } // EventType() - - - //------------------------------------------------------------- - // Methods ---------------------------------------------------- - //------------------------------------------------------------- - - /** - * toString - * @returns String - */ - public String toString() { - return type; // TODO - } // toString() - - - } // EventType - - - //------------------------------------------------------------- - // Variables -------------------------------------------------- - //------------------------------------------------------------- - - /** - * type - */ - private EventType type; - - /** - * url - */ - private URL url; - - /** - * description - */ - private String description; - - - //------------------------------------------------------------- - // Initialization --------------------------------------------- - //------------------------------------------------------------- - - /** - * Constructor HyperlinkEvent - * @param source TODO - * @param type TODO - * @param url TODO - */ - public HyperlinkEvent(Object source, EventType type, URL url) { - super(source); - this.type = type; - this.url = url; - this.description = null; - } // HyperlinkEvent() - - /** - * Constructor HyperlinkEvent - * @param source TODO - * @param type TODO - * @param url TODO - * @param description TODO - */ - public HyperlinkEvent(Object source, EventType type, URL url, String description) { - super(source); - this.type = type; - this.url = url; - this.description = null; - } // HyperlinkEvent() - - - //------------------------------------------------------------- - // Methods ---------------------------------------------------- - //------------------------------------------------------------- - - /** - * getURL - * @returns URL - */ - public URL getURL() { - return url; - } // getURL() - - /** - * getEventType - * @returns EventType - */ - public EventType getEventType() { - return type; - } // getEventType() - - /** - * getDescription - * @returns String - */ - public String getDescription() { - return description; - } // getDescription() - - -} // HyperlinkEvent + public static final class EventType + { + public static final EventType ENTERED = new EventType("ENTERED"); // TODO + public static final EventType EXITED = new EventType("EXITED"); // TODO + public static final EventType ACTIVATED = new EventType("ACTIVATED"); // TODO + + private String type; + + /** + * Creates a new Event type. + * + * @param type String representing the event type. + */ + private EventType(String type) + { + this.type = type; + } + + /** + * Returns a String of this object. + */ + public String toString() + { + return type; + } + } + + private static final long serialVersionUID = -8168964465779154277L; + + private EventType type; + private URL url; + private String description; + private Element element; + + /** + * Creates a new HyperlinkEvent with the given arguments. + * + * @param source The object this link is associated to. + * @param type The type of event. + * @param url The URL this link pointing too. + */ + public HyperlinkEvent(Object source, EventType type, URL url) + { + this (source, type, url, null, null); + } + + /** + * Creates a new HyperlinkEvent with the given arguments. + * + * @param source The object this link is associated to. + * @param type The type of event. + * @param url The URL this link pointing too. + * @param description The description for this link. + */ + public HyperlinkEvent(Object source, EventType type, URL url, String description) + { + this (source, type, url, description, null); + } + + /** + * Creates a new HyperlinkEvent with the given arguments. + * + * @param source The object this link is associated to. + * @param type The type of event. + * @param url The URL this link pointing too. + * @param description The description for this link. + * @param element The element in the document representing the anchor. + */ + public HyperlinkEvent(Object source, EventType type, URL url, String description) + { + super(source); + this.type = type; + this.url = url; + this.description = description; + this.element = element; + } + + /** + * Returns the element of the document repesenting this anchor. + */ + public Element getSourceElement() + { + return element; + } + + /** + * Returns the URL of this event. + */ + public URL getURL() + { + return url; + } + + /** + * Returns the type of this event. + */ + public EventType getEventType() + { + return type; + } + + /** + * Returns the description of this event. + */ + public String getDescription() + { + return description; + } +} diff --git a/libjava/javax/swing/event/InternalFrameEvent.java b/libjava/javax/swing/event/InternalFrameEvent.java index 345568b7b61..d802cd26083 100644 --- a/libjava/javax/swing/event/InternalFrameEvent.java +++ b/libjava/javax/swing/event/InternalFrameEvent.java @@ -42,73 +42,73 @@ import java.awt.AWTEvent; import javax.swing.JInternalFrame; /** - * InternalFrameEvent * @author Andrew Selkirk */ -public class InternalFrameEvent extends AWTEvent { - - //------------------------------------------------------------- - // Constants -------------------------------------------------- - //------------------------------------------------------------- - - /** - * Internal frame activated event - */ - public static int INTERNAL_FRAME_ACTIVATED = 25554; - - /** - * Internal frame closed event - */ - public static int INTERNAL_FRAME_CLOSED = 25551; - - /** - * Internal frame closing event - */ - public static int INTERNAL_FRAME_CLOSING = 25550; - - /** - * Internal frame deactivated event - */ - public static int INTERNAL_FRAME_DEACTIVATED = 25555; - - /** - * Internal frame deiconifed event - */ - public static int INTERNAL_FRAME_DEICONIFIED = 25553; - - /** - * Internal frame frame first event - */ - public static int INTERNAL_FRAME_FIRST = 25549; - - /** - * Internal frame iconified event - */ - public static int INTERNAL_FRAME_ICONIFIED = 2552; - - /** - * Internal frame last event - */ - public static int INTERNAL_FRAME_LAST = 25555; - - /** - * Internal frame opened event - */ - public static int INTERNAL_FRAME_OPENED = 25550; - - - //------------------------------------------------------------- - // Initialization --------------------------------------------- - //------------------------------------------------------------- - - /** - * Constructor InternalFrameEvent - * @param source JInternalFrame - * @param id Event ID - */ - public InternalFrameEvent(JInternalFrame source, int id) { - super(source, id); - } // InternalFrameEvent() - - -} // InternalFrameEvent +public class InternalFrameEvent extends AWTEvent +{ + private static final serialVersionUID = 9195444901064686684L; + + /** + * Internal frame activated event + */ + public static int INTERNAL_FRAME_ACTIVATED = 25554; + + /** + * Internal frame closed event + */ + public static int INTERNAL_FRAME_CLOSED = 25551; + + /** + * Internal frame closing event + */ + public static int INTERNAL_FRAME_CLOSING = 25550; + + /** + * Internal frame deactivated event + */ + public static int INTERNAL_FRAME_DEACTIVATED = 25555; + + /** + * Internal frame deiconifed event + */ + public static int INTERNAL_FRAME_DEICONIFIED = 25553; + + /** + * Internal frame frame first event + */ + public static int INTERNAL_FRAME_FIRST = 25549; + + /** + * Internal frame iconified event + */ + public static int INTERNAL_FRAME_ICONIFIED = 2552; + + /** + * Internal frame last event + */ + public static int INTERNAL_FRAME_LAST = 25555; + + /** + * Internal frame opened event + */ + public static int INTERNAL_FRAME_OPENED = 25550; + + /** + * Creates a JInternalFrameEvent object. + * + * @param source The source of this event. + * @param id Then event ID of this event. + */ + public InternalFrameEvent(JInternalFrame source, int id) + { + super(source, id); + } + + /** + * Returns the JInternalFrame object stored in this event. + */ + public JInternalFrame getInternalFrame() + { + return source; + } +} diff --git a/libjava/javax/swing/event/ListDataEvent.java b/libjava/javax/swing/event/ListDataEvent.java index 4c6e39f00a3..46f567a5e42 100644 --- a/libjava/javax/swing/event/ListDataEvent.java +++ b/libjava/javax/swing/event/ListDataEvent.java @@ -41,99 +41,58 @@ package javax.swing.event; import java.util.EventObject; /** - * ListDataEvent * @author Andrew Selkirk * @author Ronald Veldema */ -public class ListDataEvent extends EventObject { - - //------------------------------------------------------------- - // Constants -------------------------------------------------- - //------------------------------------------------------------- +public class ListDataEvent extends EventObject +{ + private static final serialVersionUID = -7131487416250401903L; + + public static int CONTENTS_CHANGED = 0; + public static int INTERVAL_ADDED = 1; + public static int INTERVAL_REMOVED = 2; + + private int type = 0; + private int index0 = 0; + private int index1 = 0; - /** - * Contents changed - */ - public static int CONTENTS_CHANGED = 0; - - /** - * Internal added - */ - public static int INTERVAL_ADDED = 1; - - /** - * Interval removed - */ - public static int INTERVAL_REMOVED = 2; - - - //------------------------------------------------------------- - // Variables -------------------------------------------------- - //------------------------------------------------------------- - - /** - * type - */ - private int type = 0; - - /** - * index0 - */ - private int index0 = 0; + /** + * Creates a ListDataEvent object. + * + * @param source The source of the event. + * @param type The type of the event + * @param index0 Bottom of range + * @param index1 Top of range + */ + public ListDataEvent(Object source, int type, int index0, int index1) + { + super(source); + this.type = type; + this.index0 = index0; + this.index1 = index1; + } - /** - * index1 - */ - private int index1 = 0; - - - //------------------------------------------------------------- - // Initialization --------------------------------------------- - //------------------------------------------------------------- - - /** - * Constructor ListDataEvent - * @param source Source - * @param type Event type - * @param index0 Bottom of range - * @param index1 Top of range - */ - public ListDataEvent(Object source, int type, - int index0, int index1) { - super(source); - this.type = type; - this.index0 = index0; - this.index1 = index1; - } // ListDataEvent() - - - //------------------------------------------------------------- - // Methods ---------------------------------------------------- - //------------------------------------------------------------- - - /** - * getIndex0 - * @returns index0 - */ - public int getIndex0() { - return index0; - } // getIndex0() - - /** - * getIndex1 - * @returns index1 - */ - public int getIndex1() { - return index1; - } // getIndex1() - - /** - * Event type - * @returns Event type - */ - public int getType() { - return type; - } // getType() - - -} // ListDataEvent + /** + * Returns the bottom index. + */ + public int getIndex0() + { + return index0; + } + + /** + * Returns the top index. + */ + public int getIndex1() + { + return index1; + } + + /** + * Returns the type of this event. + */ + public int getType() + { + return type; + } +} diff --git a/libjava/javax/swing/event/TableModelEvent.java b/libjava/javax/swing/event/TableModelEvent.java index c5989558099..222d194c91e 100644 --- a/libjava/javax/swing/event/TableModelEvent.java +++ b/libjava/javax/swing/event/TableModelEvent.java @@ -42,163 +42,116 @@ import java.util.EventObject; import javax.swing.table.TableModel; /** - * TableModelEvent * @author Andrew Selkirk */ -public class TableModelEvent extends EventObject { - - //------------------------------------------------------------- - // Constants -------------------------------------------------- - //------------------------------------------------------------- - - /** - * ALL_COLUMNS - */ - public static int ALL_COLUMNS = -1; - - /** - * DELETE - */ - public static int DELETE = -1; - - /** - * HEADER_ROW - */ - public static int HEADER_ROW = -1; - - /** - * INSERT - */ - public static int INSERT = 1; - - /** - * UPDATE - */ - public static int UPDATE = 0; - - - //------------------------------------------------------------- - // Variables -------------------------------------------------- - //------------------------------------------------------------- - - /** - * column - */ - protected int column = 0; - - /** - * firstRow - */ - protected int firstRow = 0; - - /** - * lastRow - */ - protected int lastRow = 0; - - /** - * type - */ - protected int type = 0; - - - //------------------------------------------------------------- - // Initialization --------------------------------------------- - //------------------------------------------------------------- - - /** - * Constructor TableModelEvent - * @param source Source object - */ - public TableModelEvent(TableModel source) { - this(source, 0, source.getRowCount(), ALL_COLUMNS, UPDATE); - } // TableModelEvent() - - /** - * Constructor TableModelEvent - * @param source Source table model - * @param row Updated row - */ - public TableModelEvent(TableModel source, int row) { - this(source, row, row, ALL_COLUMNS, UPDATE); - } // TableModelEvent() - - /** - * Constructor TableModelEvent - * @param source Source table model - * @param firstRow First row of update - * @param lastRow Last row of update - */ - public TableModelEvent(TableModel source, int firstRow, - int lastRow) { - this(source, firstRow, lastRow, ALL_COLUMNS, UPDATE); - } // TableModelEvent() - - /** - * Constructor TableModelEvent - * @param source Source table model - * @param firstRow First row of update - * @param lastRow Last row of update - * @param column Affected column - */ - public TableModelEvent(TableModel source, int firstRow, - int lastRow, int column) { - this(source, firstRow, lastRow, column, UPDATE); - } // TableModelEvent() - - /** - * Constructor TableModelEvent - * @param source Source table model - * @param firstRow First row of update - * @param lastRow Last row of update - * @param column Affected column - * @param type Type of change - */ - public TableModelEvent(TableModel source, int firstRow, - int lastRow, int column, int type) { - super(source); - this.firstRow = firstRow; - this.lastRow = lastRow; - this.column = column; - this.type = type; - } // TableModelEvent() - - - //------------------------------------------------------------- - // Methods ---------------------------------------------------- - //------------------------------------------------------------- - - /** - * getColumn - * @returns column - */ - public int getColumn() { - return column; - } // getColumn() - - /** - * getFirstRow - * @returns row - */ - public int getFirstRow() { - return firstRow; - } // getFirstRow() - - /** - * getLastRow - * @returns row - */ - public int getLastRow() { - return lastRow; - } // getLastRow() - - /** - * Get type - * @returns Type of event - */ - public int getType() { - return type; - } // getType() - - -} // TableModelEvent +public class TableModelEvent extends EventObject +{ + private static final serialVersionUID = -7037680193569691706L; + + public static int ALL_COLUMNS = -1; + public static int DELETE = -1; + public static int HEADER_ROW = -1; + public static int INSERT = 1; + public static int UPDATE = 0; + + protected int column = 0; + protected int firstRow = 0; + protected int lastRow = 0; + protected int type = 0; + + /** + * Creates a TableModelEvent event. + * + * @param source The source object + */ + public TableModelEvent(TableModel source) + { + this(source, 0, source.getRowCount(), ALL_COLUMNS, UPDATE); + } + + /** + * Creates a TableModelEvent event. + * + * @param source The source object + * @param row The updated row + */ + public TableModelEvent(TableModel source, int row) + { + this(source, row, row, ALL_COLUMNS, UPDATE); + } + + /** + * Creates a TableModelEvent event. + * + * @param source The source object + * @param firstRow The first row of update + * @param lastRow The last row of update + */ + public TableModelEvent(TableModel source, int firstRow, int lastRow) + { + this(source, firstRow, lastRow, ALL_COLUMNS, UPDATE); + } + + /** + * Creates a TableModelEvent event. + * + * @param source The source object + * @param firstRow The first row of update + * @param lastRow The last row of update + * @param column The affected column + */ + public TableModelEvent(TableModel source, int firstRow, int lastRow, int column) + { + this(source, firstRow, lastRow, column, UPDATE); + } + + /** + * Creates a TableModelEvent event. + * + * @param source The source object + * @param firstRow The first row of update + * @param lastRow The last row of update + * @param column The affected column + * @param type The type of change + */ + public TableModelEvent(TableModel source, int firstRow, int lastRow, int column, int type) + { + super(source); + this.firstRow = firstRow; + this.lastRow = lastRow; + this.column = column; + this.type = type; + } + + /** + * Returns the affected column of this event. + */ + public int getColumn() + { + return column; + } + + /** + * Returns the first affected row of this event. + */ + public int getFirstRow() + { + return firstRow; + } + + /** + * Returns the last affected row of this event. + */ + public int getLastRow() + { + return lastRow; + } + + /** + * Returns the type of change of this event. + */ + public int getType() + { + return type; + } +} diff --git a/libjava/javax/swing/event/TreeWillExpandListener.java b/libjava/javax/swing/event/TreeWillExpandListener.java index e11416dbf1f..c286fef8016 100644 --- a/libjava/javax/swing/event/TreeWillExpandListener.java +++ b/libjava/javax/swing/event/TreeWillExpandListener.java @@ -42,22 +42,23 @@ import java.util.EventListener; import javax.swing.tree.ExpandVetoException; /** - * TreeWillExpandListener interface * @author Andrew Selkirk */ -public interface TreeWillExpandListener extends EventListener { +public interface TreeWillExpandListener extends EventListener +{ + /** + * Invoked whenever a node in the tree is about to be collapsed. + * + * @param event The tree expansion Event + */ + public void treeWillCollapse(TreeExpansionEvent event) + throws ExpandVetoException; - /** - * Tree will collapse - * @param event Tree Expansion Event - */ - public void treeWillCollapse(TreeExpansionEvent event); - - /** - * Tree will expand - * @param event Tree Expansion Event - */ - public void treeWillExpand(TreeExpansionEvent event); - - -} // TreeWillExpandListener + /** + * Invoked whenever a node in the tree is about to be expanded. + * + * @param event The tree expansion Event + */ + public void treeWillExpand(TreeExpansionEvent event) + throws ExpandVetoException; +} diff --git a/libjava/javax/swing/plaf/ComponentUI.java b/libjava/javax/swing/plaf/ComponentUI.java index dba15f71c4f..00832789c1f 100644 --- a/libjava/javax/swing/plaf/ComponentUI.java +++ b/libjava/javax/swing/plaf/ComponentUI.java @@ -1,5 +1,5 @@ /* ComponentUI.java - Copyright (C) 2002 Free Software Foundation, Inc. + Copyright (C) 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -38,89 +38,291 @@ exception statement from your version. */ package javax.swing.plaf; -import java.awt.*; -import javax.swing.border.*; -import javax.swing.*; +import java.awt.Dimension; +import java.awt.Graphics; +import javax.accessibility.Accessible; +import javax.swing.JComponent; -import javax.accessibility.*; +/** + * The abstract base class for all delegates that provide the + * pluggable look and feel for Swing components. User applications + * should not need to access this class; it is internal to Swing + * and the look-and-feel implementations. + * + *

[UML diagram illustrating the architecture for pluggable
+ * look and feels] + * + *

Components such as {@link javax.swing.JSlider} do not directly + * implement operations related to the look and feel of the user + * interface, such as painting or layout. Instead, they use a delegate + * object for all such tasks. In the case of JSlider, the + * user interface would be provided by some concrete subclass of + * {@link javax.swing.plaf.SliderUI}. + * + *

Soon after its creation, a ComponentUI will be sent + * an {@link #installUI} message. The ComponentUI will + * react by setting properties such as the border or the background + * color of the JComponent for which it provides its + * services. Soon before the end of its lifecycle, the + * ComponentUI will receive an {@link #uninstallUI} + * message, at which time the ComponentUI is expected to + * undo any changes. + * + *

Note that the ui of a JComponent + * changes whenever the user switches between look and feels. For + * example, the ui property of a JSlider + * could change from an instance of MetalSliderUI to an + * instance of FooSliderUI. This switch can happen at any + * time, but it will always be performed from inside the Swing thread. + * + * @author Sascha Brawer (brawer@dandelis.ch) + */ public abstract class ComponentUI - implements UIResource // ?? { - boolean contains(JComponent c, int x, int y) - { - return c.inside(x,y); - } + /** + * Constructs a new UI delegate. + */ + public ComponentUI() + { + } + + + /** + * Sets up the specified component so it conforms the the design + * guidelines of the implemented look and feel. When the look and + * feel changes, a ComponentUI delegate is created. + * The delegate object then receives an installUI + * message. + * + *

This method should perform the following tasks: + * + *

  • Set visual properties such as borders, fonts, colors, or + * icons. However, no change should be performed for those + * properties whose values have been directly set by the client + * application. To allow the distinction, LookAndFeels are expected + * to use values that implement the {@link UIResource} marker + * interface, such as {@link BorderUIResource} or {@link + * ColorUIResource}.
  • + * + *
  • If necessary, install a {@link java.awt.LayoutManager}.
  • + * + *
  • Embed custom sub-components. For instance, the UI delegate + * for a {@link javax.swing.JSplitPane} might install a special + * component for the divider.
  • + * + *
  • Register event listeners.
  • + * + *
  • Set up properties related to keyborad navigation, such as + * mnemonics or focus traversal policies.
+ * + * @param c the component for which this delegate will provide + * services. + * + * @see #uninstallUI + * @see javax.swing.JComponent#setUI + * @see javax.swing.JComponent#updateUI + */ + public void installUI(JComponent c) + { + // The default implementation does not change any properties. + } - // this SHOULD thow an error: - public static ComponentUI createUI(JComponent c) - { - Exception e = new Exception("createUI from ComponentUI should never be called"); - e.printStackTrace(); - System.exit(1); - return null; - } - public Accessible getAccessibleChild(JComponent c, int i) - { - //Return the nth Accessible child of the object. - return null; - } + /** + * Puts the specified component into the state it had before + * {@link #installUI} was called. + * + * @param c the component for which this delegate has provided + * services. + * + * @see #installUI + * @see javax.swing.JComponent#setUI + * @see javax.swing.JComponent#updateUI + */ + public void uninstallUI(JComponent c) + { + // The default implementation does not change any properties. + } + + + /** + * Paints the component according to the design guidelines + * of the look and feel. Most subclasses will want to override + * this method. + * + * @param g the graphics for painting. + * + * @param c the component for which this delegate performs + * services. + */ + public void paint(Graphics g, JComponent c) + { + } - public int getAccessibleChildrenCount(JComponent c) - { - //Returns the number of accessible children in the object. - return 0; - } - public Dimension getMaximumSize(JComponent c) + /** + * Fills the specified component with its background color + * (unless the opaque property is false) + * before calling {@link #paint}. + * + *

It is unlikely that a subclass needs to override this method. + * The actual rendering should be performed by the {@link #paint} + * method. + * + * @param g the graphics for painting. + * + * @param c the component for which this delegate performs + * services. + * + * @see #paint + * @see javax.swing.JComponent#paintComponent + */ + public void update(Graphics g, JComponent c) + { + if (c.isOpaque()) { - return getPreferredSize(c); + g.setColor(c.getBackground()); + g.fillRect(0, 0, c.getWidth(), c.getHeight()); } + paint(g, c); + } + + + /** + * Determines the preferred size of a component. The default + * implementation returns null, which means that + * c’s layout manager should be asked to + * calculate the preferred size. + * + * @param c the component for which this delegate performs services. + * + * @return the preferred size, or null to indicate that + * c’s layout manager should be asked + * for the preferred size. + */ + public Dimension getPreferredSize(JComponent c) + { + return null; + } + + + /** + * Determines the minimum size of a component. The default + * implementation calls {@link #getPreferredSize}, but subclasses + * might want to override this. + * + * @param c the component for which this delegate performs services. + * + * @return the minimum size, or null to indicate that + * c’s layout manager should be asked + * to calculate the minimum size. + */ + public Dimension getMinimumSize(JComponent c) + { + return getPreferredSize(c); + } - public Dimension getMinimumSize(JComponent c) - { - return getPreferredSize(c); - } - public Dimension getPreferredSize(JComponent c) - { - return null; - } + /** + * Determines the maximum size of a component. The default + * implementation calls {@link #getPreferredSize}, but subclasses + * might want to override this. + * + * @param c the component for which this delegate performs services. + * + * @return the maximum size, or null to indicate that + * c’s layout manager should be asked + * to calculate the maximum size. + */ + public Dimension getMaximumSize(JComponent c) + { + return getPreferredSize(c); + } - public void installUI(JComponent c) - { - String id = c.getUIClassID() + ".border"; - - Border s = UIManager.getBorder( id ); - - if (s != null) - { - c.setBorder( s ); - //System.out.println("OK-INSTALL: " + this + ", ID=" + id + ",B="+s); - } - else - { - ///System.out.println("FAIL-INSTALL: " + this + ", " + id); - } - } - public void paint(Graphics g, JComponent c) - { - // System.out.println("UI-COMPONENT-> unimplemented paint: " + c + ", UI="+this); - } + /** + * Determines whether a click into the component at a specified + * location is considered as having hit the component. The default + * implementation checks whether the point falls into the + * component’s bounding rectangle. Some subclasses might want + * to override this, for example in the case of a rounded button. + * + * @param c the component for which this delegate performs services. + * + * @param x the x coordinate of the point, relative to the local + * coordinate system of the component. Zero would be be + * component’s left edge, irrespective of the location + * inside its parent. + * + * @param y the y coordinate of the point, relative to the local + * coordinate system of the component. Zero would be be + * component’s top edge, irrespective of the location + * inside its parent. + */ + public boolean contains(JComponent c, int x, int y) + { + /* JComponent.contains calls the ui delegate for hit + * testing. Therefore, endless mutual recursion would result if we + * called c.contains(x, y) here. + * + * The previous Classpath implementation called the deprecated + * method java.awt.Component.inside. In the Sun implementation, it + * can be observed that inside, other than contains, does not call + * the ui delegate. But that inside() behaves different to + * contains() clearly is in violation of the method contract, and + * it is not something that a good implementation should rely upon + * -- even if Classpath ends up being forced to replicate this + * apparent bug of the Sun implementation. + */ + return (x >= 0) && (x < c.getWidth()) + && (y >= 0) && (y < c.getHeight()); + } + + + /** + * Creates a delegate object for the specified component. Users + * should use the createUI method of a suitable + * subclass. The implementation of ComponentUI + * always throws an error. + * + * @param c the component for which a UI delegate is requested. + */ + public static ComponentUI createUI(JComponent c) + { + throw new Error( + "javax.swing.plaf.ComponentUI does not implement createUI; call " + + "createUI on a subclass."); + } + - public void uninstallUI(JComponent c) - { - } + /** + * Counts the number of accessible children in the component. The + * default implementation delegates the inquiry to the {@link + * javax.accessibility.AccessibleContext} of c. + * + * @param c the component whose accessible children + * are to be counted. + */ + public int getAccessibleChildrenCount(JComponent c) + { + return c.getAccessibleContext().getAccessibleChildrenCount(); + } - public void update(Graphics g, JComponent c) { - if (c.isOpaque()) { - g.setColor(c.getBackground()); - g.fillRect(0, 0, c.getWidth(),c.getHeight()); - } - paint(g, c); - } - -} + /** + * Returns the specified accessible child of the component. The + * default implementation delegates the inquiry to the {@link + * javax.accessibility.AccessibleContext} of c. + * + * @param i the index of the accessible child, starting at zero. + * + * @param c the component whose i-th accessible child + * is requested. + */ + public Accessible getAccessibleChild(JComponent c, int i) + { + return c.getAccessibleContext().getAccessibleChild(i); + } +} diff --git a/libjava/javax/swing/plaf/DesktopIconUI.java b/libjava/javax/swing/plaf/DesktopIconUI.java index 880fa43915c..0e6f63ad2cf 100644 --- a/libjava/javax/swing/plaf/DesktopIconUI.java +++ b/libjava/javax/swing/plaf/DesktopIconUI.java @@ -1,5 +1,5 @@ /* DesktopIconUI.java -- - Copyright (C) 2002 Free Software Foundation, Inc. + Copyright (C) 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -38,22 +38,19 @@ exception statement from your version. */ package javax.swing.plaf; /** - * DesktopIconUI - * @author Andrew Selkirk - * @version 1.0 + * An abstract base class for delegates that implement the pluggable + * look and feel for a desktop icon. + * + * @author Andrew Selkirk (aselkirk@sympatico.ca) + * @author Sascha Brawer (brawer@dandelis.ch) */ -public abstract class DesktopIconUI extends ComponentUI { - - //------------------------------------------------------------- - // Initialization --------------------------------------------- - //------------------------------------------------------------- - - /** - * Constructor DesktopIconUI - */ - public DesktopIconUI() { - // TODO - } // DesktopIconUI() - - -} // DesktopIconUI +public abstract class DesktopIconUI + extends ComponentUI +{ + /** + * Constructs a new DesktopIconUI. + */ + public DesktopIconUI() + { + } +} diff --git a/libjava/javax/swing/plaf/DesktopPaneUI.java b/libjava/javax/swing/plaf/DesktopPaneUI.java index 9cb278839fb..61bad723216 100644 --- a/libjava/javax/swing/plaf/DesktopPaneUI.java +++ b/libjava/javax/swing/plaf/DesktopPaneUI.java @@ -1,5 +1,5 @@ /* DesktopPaneUI.java -- - Copyright (C) 2002 Free Software Foundation, Inc. + Copyright (C) 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -38,22 +38,22 @@ exception statement from your version. */ package javax.swing.plaf; /** - * DesktopPaneUI - * @author Andrew Selkirk - * @version 1.0 + * An abstract base class for delegates that implement the pluggable + * look and feel for a JDesktopPane. + * + * @see javax.swing.JDesktopPane + * + * @author Andrew Selkirk (aselkirk@sympatico.ca) + * @author Sascha Brawer (brawer@dandelis.ch) */ -public abstract class DesktopPaneUI extends ComponentUI { +public abstract class DesktopPaneUI + extends ComponentUI +{ + /** + * Constructs a new DesktopPaneUI. + */ + public DesktopPaneUI() + { + } +} - //------------------------------------------------------------- - // Initialization --------------------------------------------- - //------------------------------------------------------------- - - /** - * Constructor DesktopPaneUI - */ - public DesktopPaneUI() { - // TODO - } // DesktopPaneUI() - - -} // DesktopPaneUI diff --git a/libjava/javax/swing/plaf/DimensionUIResource.java b/libjava/javax/swing/plaf/DimensionUIResource.java index 52ea7a912f6..3f64b30abf2 100644 --- a/libjava/javax/swing/plaf/DimensionUIResource.java +++ b/libjava/javax/swing/plaf/DimensionUIResource.java @@ -1,5 +1,5 @@ /* DimensionUIResource.java - Copyright (C) 2002 Free Software Foundation, Inc. + Copyright (C) 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -37,14 +37,32 @@ exception statement from your version. */ package javax.swing.plaf; + import java.awt.Dimension; + /** - * STUBBED + * A Dimension that is marked as UIResource, which + * indicates that it has been installed by a pluggable + * LookAndFeel. Such dimensions are replaced when the LookAndFeel + * changes. + * + * @see java.awt.Dimension + * + * @author Andrew Selkirk (aselkirk@sympatico.ca) + * @author Sascha Brawer (brawer@dandelis.ch) */ -public class DimensionUIResource extends Dimension implements UIResource +public class DimensionUIResource + extends Dimension + implements UIResource { - public DimensionUIResource(int w, int h) + /** + * Constructs a new DimensionUIResource, given its width and height. + * + * @param width the width in pixels. + * @param height the height in pixels. + */ + public DimensionUIResource(int width, int height) { - super(w, h); + super(width, height); } -} // class DimensionUIResource +} diff --git a/libjava/javax/swing/plaf/FileChooserUI.java b/libjava/javax/swing/plaf/FileChooserUI.java index 00595eb7c66..193362ee605 100644 --- a/libjava/javax/swing/plaf/FileChooserUI.java +++ b/libjava/javax/swing/plaf/FileChooserUI.java @@ -1,5 +1,5 @@ /* FileChooserUI.java -- - Copyright (C) 2002 Free Software Foundation, Inc. + Copyright (C) 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -37,75 +37,100 @@ exception statement from your version. */ package javax.swing.plaf; -// Imports -import java.io.*; -import javax.swing.*; -import javax.swing.filechooser.*; +import java.io.File; +import javax.swing.JFileChooser; import javax.swing.filechooser.FileFilter; +import javax.swing.filechooser.FileView; /** - * FileChooserUI - * @author Andrew Selkirk - * @version 1.0 + * An abstract base class for delegates that implement the pluggable + * look and feel for a JFileChooser. + * + * @see javax.swing.JFileChooser + * + * @author Andrew Selkirk (aselkirk@sympatico.ca) + * @author Sascha Brawer (brawer@dandelis.ch) */ -public abstract class FileChooserUI extends ComponentUI { - - //------------------------------------------------------------- - // Initialization --------------------------------------------- - //------------------------------------------------------------- - - /** - * Constructor FileChooserUI - */ - public FileChooserUI() { - // TODO - } // FileChooserUI() - - - //------------------------------------------------------------- - // Methods ---------------------------------------------------- - //------------------------------------------------------------- - - /** - * getAcceptAllFileFilter - * @param chooser TODO - * @returns FileFilter - */ - public abstract FileFilter getAcceptAllFileFilter(JFileChooser chooser); - - /** - * getFileView - * @param chooser TODO - * @returns FileView - */ - public abstract FileView getFileView(JFileChooser chooser); - - /** - * getApproveButtonText - * @param chooser TODO - * @returns String - */ - public abstract String getApproveButtonText(JFileChooser chooser); - - /** - * getDialogTitle - * @param chooser TODO - * @returns String - */ - public abstract String getDialogTitle(JFileChooser chooser); - - /** - * rescanCurrentDirectory - * @param value0 TODO - */ - public abstract void rescanCurrentDirectory(JFileChooser chooser); - - /** - * ensureFileIsVisible - * @param chooser TODO - * @param file TODO - */ - public abstract void ensureFileIsVisible(JFileChooser chooser, File file); - - -} // FileChooserUI +public abstract class FileChooserUI + extends ComponentUI +{ + /** + * Constructs a new FileChooserUI. + */ + public FileChooserUI() + { + } + + + /** + * Returns a FileFilter that accepts every file. While + * the filtering itself is not specific to any look and feel, the + * text returned by FileFilter.getDescription() need + * not be the same across all look and feels. + * + * @param chooser the JFileChooser for which + * a FileFilter is requested. + * + * @see javax.swing.JFileChooser#getAcceptAllFileFilter + * @see javax.swing.filechooser.FileFilter#getDescription + */ + public abstract FileFilter getAcceptAllFileFilter(JFileChooser chooser); + + + /** + * Returns a view to a file, which is able to retrieve its name, + * icon, and other properties that are relevant for presenting + * the file to the user. + * + * @param chooser the JFileChooser for which + * a FileFilter is requested. + */ + public abstract FileView getFileView(JFileChooser chooser); + + + /** + * Determines which text is appropriate for the approve button + * according to the design guidelines of the implemented + * look and feel. + * + * @param chooser the JFileChooser whose + * button text is requested. + * + * @see javax.swing.JFileChoose#getApproveButtonText + */ + public abstract String getApproveButtonText(JFileChooser chooser); + + + /** + * Determines which text is appropriate for the title bar of a + * JFileChooser according to the design guidelines of + * the implemented look and feel. + * + * @param chooser the JFileChooser whose + * dialog title is requested. + * + * @see javax.swing.JFileChoose#getDialogtitle + */ + public abstract String getDialogTitle(JFileChooser chooser); + + + /** + * Refreshes the currently displayed directory. + * + * @param chooser the JFileChooser whose + * dialog title needs re-scanning. + */ + public abstract void rescanCurrentDirectory(JFileChooser chooser); + + + /** + * Ensures that a specified file is visible in the + * JFileChooser + * + * @param chooser the JFileChooser that + * should display the file file. + * + * @param file the file that needs to be made visible. + */ + public abstract void ensureFileIsVisible(JFileChooser chooser, File file); +} diff --git a/libjava/javax/swing/plaf/FontUIResource.java b/libjava/javax/swing/plaf/FontUIResource.java index e158ced7403..e906035711b 100644 --- a/libjava/javax/swing/plaf/FontUIResource.java +++ b/libjava/javax/swing/plaf/FontUIResource.java @@ -1,5 +1,5 @@ /* FontUIResource.java - Copyright (C) 2002 Free Software Foundation, Inc. + Copyright (C) 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -37,18 +37,65 @@ exception statement from your version. */ package javax.swing.plaf; + import java.awt.Font; + + /** - * STUBBED + * A font that is marked as UIResource, which + * indicates that it has been installed by a pluggable + * LookAndFeel. Such dimensions are replaced when the LookAndFeel + * changes. + * + * @author Andrew Selkirk (aselkirk@sympatico.ca) + * @author Sascha Brawer (brawer@dandelis.ch) */ -public class FontUIResource extends Font implements UIResource +public class FontUIResource + extends Font + implements UIResource { - public FontUIResource(Font f) - { - super(f.getName(), f.getStyle(), f.getSize()); - } + /** + * Constructs a new FontUIResource given + * the name, style and size of the font. + * + * @param name the name of the font. A number of + * “logical” names are supported by any Java + * implementation. These are + * “Dialog”, + * “DialogInput”, + * “Monospaced”, + * “Serif”, and + * “SansSerif”. + * + * @param style the style of the font, for instance {@link + * java.awt.Font#BOLD} or {@link java.awt.Font#PLAIN}. + * + * @param size the size of the font in typographic points, for + * instance 10, 12 or 13. Designers of LookAndFeels should be + * aware that some languages (like Japanese and Chinese) have + * glyphs that are too complex to be legible at small point + * sizes. + */ public FontUIResource(String name, int style, int size) { super(name, style, size); } -} // class FontUIResource + + + /** + * Constructs a new FontUIResource given + * an existing font. + * + * @param f the font that serves as a template. + */ + public FontUIResource(Font f) + { + /* This implementation will get rid of many font properties, + * such as skewing, values of multiple master design axes, + * etc., unless they get encoded into the name. It probably + * is not a problem for LookAndFeels because user interfaces + * are usually not very advanced with respect to typography. + */ + super(f.getName(), f.getStyle(), f.getSize()); + } +} diff --git a/libjava/javax/swing/plaf/IconUIResource.java b/libjava/javax/swing/plaf/IconUIResource.java index 2d948d7823d..7097d879790 100644 --- a/libjava/javax/swing/plaf/IconUIResource.java +++ b/libjava/javax/swing/plaf/IconUIResource.java @@ -1,5 +1,5 @@ /* IconUIResource.java - Copyright (C) 2002 Free Software Foundation, Inc. + Copyright (C) 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -37,29 +37,86 @@ exception statement from your version. */ package javax.swing.plaf; + import java.awt.Component; import java.awt.Graphics; import java.io.Serializable; import javax.swing.Icon; + + /** - * STUBBED + * An icon that is marked as UIResource, which + * indicates that it has been installed by a pluggable + * LookAndFeel. Such icons are replaced when the LookAndFeel + * changes. + * + * @author Andrew Selkirk (aselkirk@sympatico.ca) + * @author Sascha Brawer (brawer@dandelis.ch) */ -public class IconUIResource implements Icon, UIResource, Serializable +public class IconUIResource + implements Icon, UIResource, Serializable { + /** + * Verified using the serialver tool of Sun JDK 1.4.1_01 + * on GNU/Linux 2.4.18. + */ static final long serialVersionUID = 3327049506004830542L; + + /** + * The icon that is wrapped by this IconUIResource. + */ + private Icon delegate; + + + /** + * Constructs a IconUIResource that wraps another + * icon. All messages are forwarded to the delegate icon. + * + * @param delegate the icon that is wrapped by this + * IconUIResource. + */ public IconUIResource(Icon delegate) { + this.delegate = delegate; } + + + /** + * Paints the icon by asking the delegate icon to paint itself. + * + * @param c the Component whose icon is being painted. Some icons + * use this argument to retrieve properties like the + * background color. + * + * @param g the graphics into which the icon will be painted. + * + * @param x the horizontal position of the icon. + * + * @param y the vertical position of the icon. + */ public void paintIcon(Component c, Graphics g, int x, int y) { + delegate.paintIcon(c, g, x, y); } + + + /** + * Returns the width of the icon in pixels. The implementation + * determines and returns the width of the delegate icon. + */ public int getIconWidth() { - return 0; + return delegate.getIconWidth(); } + + + /** + * Returns the height of the icon in pixels. The implementation + * determines and returns the height of the delegate icon. + */ public int getIconHeight() { - return 0; + return delegate.getIconHeight(); } -} // class IconUIResource +} diff --git a/libjava/javax/swing/plaf/InputMapUIResource.java b/libjava/javax/swing/plaf/InputMapUIResource.java index 4d6793bd0a8..5bcc76da973 100644 --- a/libjava/javax/swing/plaf/InputMapUIResource.java +++ b/libjava/javax/swing/plaf/InputMapUIResource.java @@ -1,5 +1,5 @@ /* InputMapUIResource.java -- - Copyright (C) 2002 Free Software Foundation, Inc. + Copyright (C) 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -37,26 +37,27 @@ exception statement from your version. */ package javax.swing.plaf; -// Imports -import javax.swing.*; +import javax.swing.InputMap; + /** - * InputMapUIResource - * @author Andrew Selkirk - * @version 1.0 + * An InputMap that is marked as UIResource, + * which indicates that it has been installed by a pluggable + * LookAndFeel. Such dimensions are replaced when the LookAndFeel + * changes. + * + * @author Andrew Selkirk (aselkirk@sympatico.ca) + * @author Sascha Brawer (brawer@dandelis.ch) */ -public class InputMapUIResource extends InputMap implements UIResource { - - //------------------------------------------------------------- - // Initialization --------------------------------------------- - //------------------------------------------------------------- - - /** - * Constructor InputMapUIResource - */ - public InputMapUIResource() { - // TODO - } // InputMapUIResource() - +public class InputMapUIResource + extends InputMap + implements UIResource +{ + /** + * Constructs a new InputMapUIResource. + */ + public InputMapUIResource() + { + } +} -} // InputMapUIResource diff --git a/libjava/javax/swing/plaf/InsetsUIResource.java b/libjava/javax/swing/plaf/InsetsUIResource.java index 7c989ab2ee0..cdedc832f0a 100644 --- a/libjava/javax/swing/plaf/InsetsUIResource.java +++ b/libjava/javax/swing/plaf/InsetsUIResource.java @@ -1,5 +1,5 @@ /* InsetsUIResource.java - Copyright (C) 2002 Free Software Foundation, Inc. + Copyright (C) 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -37,14 +37,41 @@ exception statement from your version. */ package javax.swing.plaf; + import java.awt.Insets; +import java.io.Serializable; + + /** - * STUBBED + * An Insets that is marked as UIResource, + * which indicates that it has been installed by a pluggable + * LookAndFeel. Such insets are replaced when the LookAndFeel changes. + * + * @author Andrew Selkirk (aselkirk@sympatico.ca) + * @author Sascha Brawer (brawer@dandelis.ch) */ -public class InsetsUIResource extends Insets implements UIResource +public class InsetsUIResource + extends Insets + implements Cloneable, UIResource, Serializable { + /** + * Determined using the serialver tool + * of Apple/Sun JDK 1.3.1 on MacOS X 10.1.5. + */ + static final long serialVersionUID = 5622110143266315421L; + + + /** + * Constructs a new InsetsUIResource given the + * inset at each edge. + * + * @param top the inset at the top, in pixels. + * @param left the inset at the left, in pixels. + * @param bottom the inset at the bottom, in pixels. + * @param right the inset at the right, in pixels. + */ public InsetsUIResource(int top, int left, int bottom, int right) { super(top, left, bottom, right); } -} // class InsetsUIResource +} diff --git a/libjava/javax/swing/plaf/InternalFrameUI.java b/libjava/javax/swing/plaf/InternalFrameUI.java index 3019460c74a..0e1ae59aed1 100644 --- a/libjava/javax/swing/plaf/InternalFrameUI.java +++ b/libjava/javax/swing/plaf/InternalFrameUI.java @@ -1,5 +1,5 @@ /* InternalFrameUI.java -- - Copyright (C) 2002 Free Software Foundation, Inc. + Copyright (C) 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -37,23 +37,23 @@ exception statement from your version. */ package javax.swing.plaf; + /** - * InternalFrameUI - * @author Andrew Selkirk - * @version 1.0 + * An abstract base class for delegates that implement the pluggable + * look and feel for a JInternalFrame. + * + * @see javax.swing.JInternalFrame + * + * @author Andrew Selkirk (aselkirk@sympatico.ca) + * @author Sascha Brawer (brawer@dandelis.ch) */ -public abstract class InternalFrameUI extends ComponentUI { - - //------------------------------------------------------------- - // Initialization --------------------------------------------- - //------------------------------------------------------------- - - /** - * Constructor InternalFrameUI - */ - public InternalFrameUI() { - // TODO - } // InternalFrameUI() - - -} // InternalFrameUI +public abstract class InternalFrameUI + extends ComponentUI +{ + /** + * Constructs a new InternalFrameUI. + */ + public InternalFrameUI() + { + } +} diff --git a/libjava/javax/swing/plaf/LabelUI.java b/libjava/javax/swing/plaf/LabelUI.java index dc70ae284a8..3a5025e9508 100644 --- a/libjava/javax/swing/plaf/LabelUI.java +++ b/libjava/javax/swing/plaf/LabelUI.java @@ -1,5 +1,5 @@ /* LabelUI.java - Copyright (C) 2002 Free Software Foundation, Inc. + Copyright (C) 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -38,7 +38,22 @@ exception statement from your version. */ package javax.swing.plaf; - -public class LabelUI extends ComponentUI +/** + * An abstract base class for delegates that implement the pluggable + * look and feel for a JLabel. + * + * @see javax.swing.JLabel + * + * @author Andrew Selkirk (aselkirk@sympatico.ca) + * @author Sascha Brawer (brawer@dandelis.ch) + */ +public abstract class LabelUI + extends ComponentUI { + /** + * Constructs a new LabelUI. + */ + public LabelUI() + { + } } diff --git a/libjava/javax/swing/plaf/ListUI.java b/libjava/javax/swing/plaf/ListUI.java index be60eb4863b..2e798b95a49 100644 --- a/libjava/javax/swing/plaf/ListUI.java +++ b/libjava/javax/swing/plaf/ListUI.java @@ -1,5 +1,5 @@ /* ListUI.java - Copyright (C) 2002 Free Software Foundation, Inc. + Copyright (C) 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -38,7 +38,77 @@ exception statement from your version. */ package javax.swing.plaf; +import java.awt.Point; +import java.awt.Rectangle; +import javax.swing.JList; -public class ListUI extends ComponentUI + +/** + * An abstract base class for delegates that implement the pluggable + * look and feel for a JList. + * + * @author Sascha Brawer (brawer@dandelis.ch) + */ +public abstract class ListUI + extends ComponentUI { + /** + * Constructs a new ListUI. + */ + public ListUI() + { + } + + + /** + * Determines the cell index which is the closest to the specified + * location. The find out whether the returned cell actually + * contains the location, the caller should also use {@link + * #getCellBounds}. + * + * @param list the JList for which this delegate object + * provides the pluggable user interface. + * + * @param location a point in the JList coordinate + * system. + * + * @return the index of the closest cell, or -1 if the list model + * is empty. + */ + public abstract int locationToIndex(JList index, Point location); + + + /** + * Determines the location of the specified cell. + * + * @param list the JList for which this delegate object + * provides the pluggable user interface. + * + * @param index the zero-based index of the cell whose location shall be + * determined. + * + * @return the position of the top left corner of the cell in the + * JList coordinate system, or null + * if cell does not designate a valid cell. + */ + public abstract Point indexToLocation(JList list, int index); + + + /** + * Determines the bounding box of the rectangle spanned by + * two list indices. + * + * @param list the JList for which this delegate object + * provides the pluggable user interface. + * + * @param index1 the zero-based index of the first cell. + * + * @param index2 the zero-based index of the second cell. + * + * @return the spanned rectangle, or null if either + * index1 or index2 does not + * designate a valid cell. + */ + public abstract Rectangle getCellBounds(JList list, + int index1, int index2); } diff --git a/libjava/javax/swing/plaf/MenuBarUI.java b/libjava/javax/swing/plaf/MenuBarUI.java index 84c29d13ef5..a107a3e0304 100644 --- a/libjava/javax/swing/plaf/MenuBarUI.java +++ b/libjava/javax/swing/plaf/MenuBarUI.java @@ -1,5 +1,5 @@ /* MenuBarUI.java -- - Copyright (C) 2002 Free Software Foundation, Inc. + Copyright (C) 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -37,23 +37,23 @@ exception statement from your version. */ package javax.swing.plaf; + /** - * MenuBarUI - * @author Andrew Selkirk - * @version 1.0 + * An abstract base class for delegates that implement the pluggable + * look and feel for a JMenuBar. + * + * @see javax.swing.JMenuBar + * + * @author Andrew Selkirk (aselkirk@sympatico.ca) + * @author Sascha Brawer (brawer@dandelis.ch) */ -public abstract class MenuBarUI extends ComponentUI { - - //------------------------------------------------------------- - // Initialization --------------------------------------------- - //------------------------------------------------------------- - - /** - * Constructor MenuBarUI - */ - public MenuBarUI() { - // TODO - } // MenuBarUI() - - -} // MenuBarUI +public abstract class MenuBarUI + extends ComponentUI +{ + /** + * Constructs a new MenuBarUI. + */ + public MenuBarUI() + { + } +} diff --git a/libjava/javax/swing/plaf/MenuItemUI.java b/libjava/javax/swing/plaf/MenuItemUI.java index a9271219c83..3fa30a83b68 100644 --- a/libjava/javax/swing/plaf/MenuItemUI.java +++ b/libjava/javax/swing/plaf/MenuItemUI.java @@ -1,5 +1,5 @@ /* MenuItemUI.java -- - Copyright (C) 2002 Free Software Foundation, Inc. + Copyright (C) 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -37,23 +37,23 @@ exception statement from your version. */ package javax.swing.plaf; + /** - * MenuItemUI - * @author Andrew Selkirk - * @version 1.0 + * An abstract base class for delegates that implement the pluggable + * look and feel for a JMenuItem. + * + * @see javax.swing.JMenuItem + * + * @author Andrew Selkirk (aselkirk@sympatico.ca) + * @author Sascha Brawer (brawer@dandelis.ch) */ -public abstract class MenuItemUI extends ButtonUI { - - //------------------------------------------------------------- - // Initialization --------------------------------------------- - //------------------------------------------------------------- - - /** - * Constructor MenuItemUI - */ - public MenuItemUI() { - // TODO - } // MenuItemUI() - - -} // MenuItemUI +public abstract class MenuItemUI + extends ButtonUI +{ + /** + * Constructs a new MenuItemUI. + */ + public MenuItemUI() + { + } +} diff --git a/libjava/javax/swing/plaf/OptionPaneUI.java b/libjava/javax/swing/plaf/OptionPaneUI.java index 94de7943292..e9ee57c164a 100644 --- a/libjava/javax/swing/plaf/OptionPaneUI.java +++ b/libjava/javax/swing/plaf/OptionPaneUI.java @@ -1,5 +1,5 @@ /* OptionPaneUI.java - Copyright (C) 2002 Free Software Foundation, Inc. + Copyright (C) 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -35,10 +35,41 @@ 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.plaf; -import javax.accessibility.*; -public class OptionPaneUI extends ComponentUI +import javax.swing.JOptionPane; + +/** + * An abstract base class for delegates that implement the pluggable + * look and feel for a JOptionPane. + * + * @see javax.swing.JOptionPane + * + * @author Sascha Brawer (brawer@dandelis.ch) + */ +public abstract class OptionPaneUI + extends ComponentUI { + /** + * Gives keyboard input focus to the component that represents + * the default value. + * + * @param pane the JOptionPane for which this delegate + * object provides the pluggable user interface. + */ + public abstract void selectInitialValue(JOptionPane pane); + + + /** + * Determines whether the user has provided custom components + * for the options or the message. + * + * @param pane the JOptionPane for which this delegate + * object provides the pluggable user interface. + * + * @return true if the user has supplied any custom + * components; false if all components are + * provided by Swing or a LookAndFeel. + */ + public abstract boolean containsCustomComponents(JOptionPane pane); } diff --git a/libjava/javax/swing/plaf/PanelUI.java b/libjava/javax/swing/plaf/PanelUI.java index 8a418342e82..7030925ecae 100644 --- a/libjava/javax/swing/plaf/PanelUI.java +++ b/libjava/javax/swing/plaf/PanelUI.java @@ -1,5 +1,5 @@ /* PanelUI.java - Copyright (C) 2002 Free Software Foundation, Inc. + Copyright (C) 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -38,7 +38,21 @@ exception statement from your version. */ package javax.swing.plaf; - -public class PanelUI extends ComponentUI +/** + * An abstract base class for delegates that implement the pluggable + * look and feel for a JPanel. + * + * @see javax.swing.JPanel + * + * @author Sascha Brawer (brawer@dandelis.ch) + */ +public abstract class PanelUI + extends ComponentUI { + /** + * Constructs a new PanelUI. + */ + public PanelUI() + { + } } diff --git a/libjava/javax/swing/plaf/ProgressBarUI.java b/libjava/javax/swing/plaf/ProgressBarUI.java index c5f6466e7ab..7b60e0b05e4 100644 --- a/libjava/javax/swing/plaf/ProgressBarUI.java +++ b/libjava/javax/swing/plaf/ProgressBarUI.java @@ -1,5 +1,5 @@ /* ProgressBarUI.java -- - Copyright (C) 2002 Free Software Foundation, Inc. + Copyright (C) 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -37,23 +37,23 @@ exception statement from your version. */ package javax.swing.plaf; + /** - * ProgressBarUI - * @author Andrew Selkirk - * @version 1.0 + * An abstract base class for delegates that implement the pluggable + * look and feel for a JProgressBar. + * + * @see javax.swing.JProgressBar + * + * @author Andrew Selkirk (aselkirk@sympatico.ca) + * @author Sascha Brawer (brawer@dandelis.ch) */ -public abstract class ProgressBarUI extends ComponentUI { - - //------------------------------------------------------------- - // Initialization --------------------------------------------- - //------------------------------------------------------------- - - /** - * Constructor ProgressBarUI - */ - public ProgressBarUI() { - // TODO - } // ProgressBarUI() - - -} // ProgressBarUI +public abstract class ProgressBarUI + extends ComponentUI +{ + /** + * Constructs a new ProgressBarUI. + */ + public ProgressBarUI() + { + } +} diff --git a/libjava/javax/swing/plaf/doc-files/ComponentUI-1.dia b/libjava/javax/swing/plaf/doc-files/ComponentUI-1.dia index a78d97b90e68fbc3229f179fce8721ca07ca5f62..02bfbbe90f11fba4c63b0c6ec9e591c0f5824e18 100644 GIT binary patch literal 3085 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 diff --git a/libjava/javax/swing/plaf/doc-files/ComponentUI-1.png b/libjava/javax/swing/plaf/doc-files/ComponentUI-1.png index da4a0fc8dc9c7a4ab1bf6360ea773f8faacaa8e8..def4cbc6c47a6201d1984d30ad36d37955ff4be1 100644 GIT binary patch literal 32683 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 PLZtobdi!$d$1eUK7pPd? literal 24898 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 aB#Qg(aev43!f?D1lFy1Y%P%k@5B&=$?^)IW -- 2.30.2