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