org.eclipse.jst.jsf.facesconfig.ui.preference.TitleBarButton.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.jst.jsf.facesconfig.ui.preference.TitleBarButton.java

Source

/*******************************************************************************
 * Copyright (c) 2004, 2006 Sybase, Inc. and others.
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     Sybase, Inc. - initial API and implementation
 *******************************************************************************/

package org.eclipse.jst.jsf.facesconfig.ui.preference;

import java.util.Iterator;

import org.eclipse.draw2d.ActionEvent;
import org.eclipse.draw2d.ActionListener;
import org.eclipse.draw2d.Button;
import org.eclipse.draw2d.ColorConstants;
import org.eclipse.draw2d.Cursors;
import org.eclipse.draw2d.Graphics;
import org.eclipse.draw2d.MouseEvent;
import org.eclipse.draw2d.MouseMotionListener;
import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.swt.graphics.Image;

/**
 * A title bar button
 *
 */
/*package*/ final class TitleBarButton extends Button {
    private boolean state = false;

    private Image uncheckedImage;

    private Image checkedImage;

    private Image uncheckedHiliteImage;

    private Image checkedHiliteImage;

    private RectangleList uncheckedRects;

    private RectangleList checkedRects;

    private boolean hilite = false;

    /**
     * @param unchecked
     * @param uncheckedHilite
     * @param checked
     * @param checkedHilite
     */
    public TitleBarButton(Image unchecked, Image uncheckedHilite, Image checked, Image checkedHilite) {
        super();
        uncheckedImage = unchecked;
        if (uncheckedHilite == null)
            uncheckedHiliteImage = unchecked;
        else
            uncheckedHiliteImage = uncheckedHilite;
        if (checked == null)
            checkedImage = unchecked;
        else
            checkedImage = checked;
        if (checkedHilite == null)
            checkedHiliteImage = unchecked;
        else
            checkedHiliteImage = checkedHilite;
        initialize();
    }

    /**
     * @param rects
     */
    public TitleBarButton(RectangleList rects) {
        super();
        uncheckedRects = rects;
        initialize();
    }

    /**
     * @param unchecked
     * @param checked
     */
    public TitleBarButton(RectangleList unchecked, RectangleList checked) {
        super();
        uncheckedRects = unchecked;
        checkedRects = checked;
        initialize();
    }

    /**
     * @return the state
     */
    public boolean getState() {
        return state;
    }

    /**
     * @param newState
     */
    public void setState(boolean newState) {
        state = newState;
        hilite = false;
    }

    private void initialize() {
        setRequestFocusEnabled(true);
        setFocusTraversable(true);

        if (uncheckedImage != null) {
            org.eclipse.swt.graphics.Rectangle r = uncheckedImage.getBounds();
            setBounds(new Rectangle(0, 0, r.width, r.height));
            prefSize = new Dimension(r.width, r.height);
        } else {
            setForegroundColor(ColorConstants.black);
            setBackgroundColor(ColorConstants.white);
            calculatePreferredSize();
            setBounds(new Rectangle(0, 0, prefSize.width, prefSize.height));
        }
        setCursor(Cursors.ARROW);
        setBorder(null);
        setFont(JFaceResources.getFontRegistry().get(JFaceResources.DEFAULT_FONT));

        addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                setState(!state);
            }
        });
        this.addMouseMotionListener(new MouseMotionListener() {

            public void mouseDragged(MouseEvent me) {
                // TODO Auto-generated method stub

            }

            public void mouseEntered(MouseEvent me) {
                hilite = true;
                repaint();
            }

            public void mouseExited(MouseEvent me) {
                hilite = false;
                repaint();
            }

            public void mouseHover(MouseEvent me) {
                // TODO Auto-generated method stub

            }

            public void mouseMoved(MouseEvent me) {
                // TODO Auto-generated method stub

            }
        });
    }

    /**
     * @return the preferred size dimensions
     */
    public Dimension calculatePreferredSize() {
        if (prefSize == null) {
            Rectangle rect = new Rectangle(0, 0, 0, 0);
            if (uncheckedRects != null) {
                Iterator<Rectangle> iter = uncheckedRects.iterator();
                while (iter.hasNext()) {
                    /*Point p =*/ getLocation();
                    Rectangle r = iter.next().getCopy();
                    rect = rect.getUnion(r);
                }
            }
            if (checkedRects != null) {
                Iterator<Rectangle> iter = checkedRects.iterator();
                while (iter.hasNext()) {
                    /*Point p =*/ getLocation();
                    Rectangle r = iter.next().getCopy();
                    rect = rect.getUnion(r);
                }
            }
            prefSize = rect.getSize();
            if (prefSize.width > prefSize.height)
                prefSize.height = prefSize.width;
            else if (prefSize.height > prefSize.width)
                prefSize.width = prefSize.height;
            prefSize.width += 4;
            prefSize.height += 4;
        }
        return prefSize;
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.draw2d.IFigure#paint(org.eclipse.draw2d.Graphics)
     */
    public void paint(Graphics graphics) {
        if (!isVisible())
            return;
        if (uncheckedImage != null) {
            if (hilite) {
                if (state == false)
                    graphics.drawImage(uncheckedHiliteImage, getLocation());
                else
                    graphics.drawImage(checkedHiliteImage, getLocation());
            } else {
                if (state == false)
                    graphics.drawImage(uncheckedImage, getLocation());
                else
                    graphics.drawImage(checkedImage, getLocation());
            }
        } else {
            Iterator<Rectangle> iter = null;
            if (state == false)
                iter = uncheckedRects.iterator();
            else
                iter = checkedRects.iterator();
            while (iter.hasNext()) {
                Point p = getLocation();
                Rectangle r = iter.next().getCopy();
                r = r.translate(p.x, p.y);
                graphics.setForegroundColor(getForegroundColor());
                if (hilite)
                    graphics.setBackgroundColor(ColorConstants.lightBlue);
                else
                    graphics.setBackgroundColor(ColorConstants.white);
                graphics.fillRectangle(r);
                graphics.drawRectangle(r);
            }
        }
    }
}