/******************************************************************************* * 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); } } } }