/*
 * @(#)WindowsSliderUI.java	1.16 03/12/19
 *
 * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
 * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 */

package com.sun.java.swing.plaf.windows;

import java.awt.*;

import javax.swing.plaf.*;
import javax.swing.plaf.basic.*;
import javax.swing.*;



/**
 * Windows rendition of the component.
 * <p>
 * <strong>Warning:</strong>
 * 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.
 */
public class WindowsSliderUI extends BasicSliderUI
{
    public WindowsSliderUI(JSlider b){
	super(b);
    }

    public static ComponentUI createUI(JComponent b) {
        return new WindowsSliderUI((JSlider)b);
    }


    public void paintTrack(Graphics g)  {        
	XPStyle xp = XPStyle.getXP();
	if (xp != null) {
	    boolean vertical = (slider.getOrientation() == JSlider.VERTICAL);
	    String category = vertical ? "trackbar.trackvert" : "trackbar.track";
	    XPStyle.Skin skin = xp.getSkin(category);

	    if (vertical) {
		int x = (trackRect.width - skin.getWidth()) / 2;
		skin.paintSkin(g, trackRect.x + x, trackRect.y, skin.getWidth(), trackRect.height, 0);
	    } else {
		int y = (trackRect.height - skin.getHeight()) / 2;
		skin.paintSkin(g, trackRect.x, trackRect.y + y, trackRect.width, skin.getHeight(), 0);
	    }
	} else {
	    super.paintTrack(g);
	}
    }


    protected void paintMinorTickForHorizSlider( Graphics g, Rectangle tickBounds, int x ) {
	XPStyle xp = XPStyle.getXP();
	if (xp != null) {
	    g.setColor(xp.getColor("trackbar.tics.color", Color.black));
	}
	super.paintMinorTickForHorizSlider(g, tickBounds, x);
    }

    protected void paintMajorTickForHorizSlider( Graphics g, Rectangle tickBounds, int x ) {
	XPStyle xp = XPStyle.getXP();
	if (xp != null) {
	    g.setColor(xp.getColor("trackbar.tics.color", Color.black));
	}
	super.paintMajorTickForHorizSlider(g, tickBounds, x);
    }

    protected void paintMinorTickForVertSlider( Graphics g, Rectangle tickBounds, int y ) {
	XPStyle xp = XPStyle.getXP();
	if (xp != null) {
	    g.setColor(xp.getColor("trackbar.ticsvert.color", Color.black));
	}
	super.paintMinorTickForVertSlider(g, tickBounds, y);
    }

    protected void paintMajorTickForVertSlider( Graphics g, Rectangle tickBounds, int y ) {
	XPStyle xp = XPStyle.getXP();
	if (xp != null) {
	    g.setColor(xp.getColor("trackbar.ticsvert.color", Color.black));
	}
	super.paintMajorTickForVertSlider(g, tickBounds, y);
    }


    public void paintThumb(Graphics g)  {        
	XPStyle xp = XPStyle.getXP();
	if (xp != null) {
	    // Pending: Implement all five states
            int index = 0;
            if (!slider.isEnabled()) {
                index = 4;
            }
            getXPThumbSkin().paintSkin(g, thumbRect.x, thumbRect.y, index);
	} else {
	    super.paintThumb(g);
	}
    }

    protected Dimension getThumbSize() {
        XPStyle xp = XPStyle.getXP();
	if (xp != null) {
            Dimension size = new Dimension();
            XPStyle.Skin s = getXPThumbSkin();
            size.width = s.getWidth();
            size.height = s.getHeight();
            return size;
	} else {
	    return super.getThumbSize();
	}
    }

    private XPStyle.Skin getXPThumbSkin() {
	XPStyle xp = XPStyle.getXP();
	String category;
        boolean vertical = (slider.getOrientation() == JSlider.VERTICAL);
	boolean leftToRight = slider.getComponentOrientation().isLeftToRight();
	Boolean paintThumbArrowShape =
		(Boolean)slider.getClientProperty("Slider.paintThumbArrowShape");
	if ((!slider.getPaintTicks() && paintThumbArrowShape == null) ||
            paintThumbArrowShape == Boolean.FALSE) {
		category = vertical ? "trackbar.thumbvert"
				    : "trackbar.thumb";
	} else {
		category = vertical ? (leftToRight ? "trackbar.thumbright" : "trackbar.thumbleft")
				    : "trackbar.thumbbottom";
	}
	return xp.getSkin(category);
    }
}

