FileDocCategorySizeDatePackage
WindowsProgressBarUI.javaAPI DocJava SE 5 API5879Fri Aug 26 14:54:50 BST 2005com.sun.java.swing.plaf.windows

WindowsProgressBarUI

public class WindowsProgressBarUI extends BasicProgressBarUI
Windows rendition of the component.

Warning: Serialized objects of this class will not be compatible with future Swing releases. The current serialization support is appropriate for short term storage or RMI between applications running the same version of Swing. A future release of Swing will provide support for long term persistence.

version
1.24 04/16/04
author
Michael C. Albers

Fields Summary
private Rectangle
boxRect
Constructors Summary
Methods Summary
public static javax.swing.plaf.ComponentUIcreateUI(javax.swing.JComponent x)

	return new WindowsProgressBarUI();
    
protected java.awt.DimensiongetPreferredInnerHorizontal()

	XPStyle xp = XPStyle.getXP();
	if (xp != null) {
	    return xp.getDimension("progress.bar.normalsize");
	} else {
	    return super.getPreferredInnerHorizontal();
	}
    
protected java.awt.DimensiongetPreferredInnerVertical()

	if (XPStyle.getXP() != null) {
	    Dimension d = getPreferredInnerHorizontal();
	    return new Dimension(d.height, d.width); // Reverse values
	} else {
	    return super.getPreferredInnerVertical();
	}
    
protected voidinstallDefaults()

	super.installDefaults();

	if (XPStyle.getXP() != null) {
	    LookAndFeel.installProperty(progressBar, "opaque", Boolean.FALSE);
	    progressBar.setBorder(null);
	}
    
protected voidpaintDeterminate(java.awt.Graphics g, javax.swing.JComponent c)

	XPStyle xp = XPStyle.getXP();
	if (xp != null) {
	    boolean vertical = (progressBar.getOrientation() == JProgressBar.VERTICAL);
	    boolean isLeftToRight = WindowsGraphicsUtils.isLeftToRight(c);
	    int barRectWidth = progressBar.getWidth();
	    int barRectHeight = progressBar.getHeight()-1;
	    // amount of progress to draw
	    int amountFull = getAmountFull(null, barRectWidth, barRectHeight);

	    paintXPBackground(g, vertical, barRectWidth, barRectHeight);
	    // Paint progress
	    if (progressBar.isStringPainted()) {
		// Do not paint the standard stripes from the skin, because they obscure
		// the text
		g.setColor(progressBar.getForeground());
		barRectHeight -= 2;
		barRectWidth -= 2;
		Graphics2D g2 = (Graphics2D)g;
		g2.setStroke(new BasicStroke((float)(vertical ? barRectWidth : barRectHeight),
					     BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL));
		if (!vertical) {
		    if (isLeftToRight) {
			g2.drawLine(2,              barRectHeight / 2 + 1,
				    amountFull - 2, barRectHeight / 2 + 1);
		    } else {
			g2.drawLine(2 + barRectWidth,
				    barRectHeight / 2 + 1,
				    2 + barRectWidth - (amountFull - 2),
				    barRectHeight / 2 + 1);
		    }
		    paintString(g, 0, 0, barRectWidth, barRectHeight, amountFull, null);
		} else {
		    g2.drawLine(barRectWidth/2 + 1, barRectHeight + 1,
				barRectWidth/2 + 1, barRectHeight + 1 - amountFull + 2);
		    paintString(g, 2, 2, barRectWidth, barRectHeight, amountFull, null);
		}

	    } else {
		XPStyle.Skin skin =
		    xp.getSkin(vertical ? "progress.chunkvert" : "progress.chunk");
		int thickness;
		if (vertical) {
		    thickness = barRectWidth - 5;
		} else {
		    thickness = barRectHeight - 5;
		}

		int chunkSize = xp.getInt("progress.progresschunksize", 2);
		int spaceSize = xp.getInt("progress.progressspacesize", 0);
		int nChunks = (amountFull-4) / (chunkSize + spaceSize);

		// See if we can squeeze in an extra chunk without spacing after
		if (spaceSize > 0 && (nChunks * (chunkSize + spaceSize) + chunkSize) < (amountFull-4)) {
		    nChunks++;
		}

		for (int i = 0; i < nChunks; i++) {
		    if (vertical) {
			skin.paintSkin(g,
				       3, barRectHeight - i * (chunkSize + spaceSize) - chunkSize - 2,
				       thickness, chunkSize, 0);
		    } else {
			if (isLeftToRight) {
			    skin.paintSkin(g,
					   4 + i * (chunkSize + spaceSize), 2,
					   chunkSize, thickness, 0);
			} else {
			    skin.paintSkin(g,
					   barRectWidth - (2 + (i+1) * (chunkSize + spaceSize)), 2,
					   chunkSize, thickness, 0);
			}
		    }
		}
	    }
	} else {
	    super.paintDeterminate(g, c);
	}
    
protected voidpaintIndeterminate(java.awt.Graphics g, javax.swing.JComponent c)

	XPStyle xp = XPStyle.getXP();
	if (xp != null) {
	    boolean vertical = (progressBar.getOrientation() == JProgressBar.VERTICAL);
	    int barRectWidth = progressBar.getWidth();
	    int barRectHeight = progressBar.getHeight()-1;
	    paintXPBackground(g, vertical, barRectWidth, barRectHeight);

	    // Paint the bouncing box.
	    boxRect = getBox(boxRect);
	    if (boxRect != null) {
		g.setColor(progressBar.getForeground());
		if (!vertical) {
		    g.fillRect(boxRect.x, boxRect.y + 2, boxRect.width, boxRect.height - 4);
		} else {
		    g.fillRect(boxRect.x + 2, boxRect.y, boxRect.width - 3, boxRect.height);
		}
		if (progressBar.isStringPainted()) {
		    if (!vertical) {
			paintString(g, -1, -1, barRectWidth, barRectHeight, 0, null);
		    } else {
			paintString(g, 1, 1, barRectWidth, barRectHeight, 0, null);
		    }
		}
	    }
	} else {
	    super.paintIndeterminate(g, c);
	}
    
private voidpaintXPBackground(java.awt.Graphics g, boolean vertical, int barRectWidth, int barRectHeight)

	XPStyle xp = XPStyle.getXP();
	String category = vertical ? "progress.barvert" : "progress.bar";
	XPStyle.Skin skin = xp.getSkin(category);

	// Paint background
	Color fillColor = xp.getColor(category + ".fillcolorhint", null);
	if (fillColor != null) {
	    g.setColor(fillColor);
	    g.fillRect(2, 2, barRectWidth-4, barRectHeight-4);
	}
	skin.paintSkin(g, 0, 0, barRectWidth, barRectHeight, 0);