Java tutorial
/****************************************************************************** * Copyright (c) 2010 Oracle * 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: * Konstantin Komissarchik - initial implementation and ongoing maintenance ******************************************************************************/ package org.eclipse.wst.common.project.facet.ui.internal.util; import static java.lang.Math.max; import static org.eclipse.jface.resource.JFaceResources.getColorRegistry; import static org.eclipse.jface.resource.JFaceResources.getDefaultFont; import static org.eclipse.jface.resource.JFaceResources.getFontRegistry; import static org.eclipse.wst.common.project.facet.ui.internal.util.GridLayoutUtil.gdfill; import static org.eclipse.wst.common.project.facet.ui.internal.util.GridLayoutUtil.gdhfill; import static org.eclipse.wst.common.project.facet.ui.internal.util.GridLayoutUtil.gdwhint; import static org.eclipse.wst.common.project.facet.ui.internal.util.GridLayoutUtil.gl; import static org.eclipse.wst.common.project.facet.ui.internal.util.GridLayoutUtil.glmargins; import static org.eclipse.wst.common.project.facet.ui.internal.util.SwtUtil.getPreferredWidth; import org.eclipse.jface.window.ToolTip; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.RGB; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; /** * @author <a href="mailto:konstantin.komissarchik@oracle.com">Konstantin Komissarchik</a> */ public abstract class HeaderToolTip extends ToolTip { private static final String HEADER_BG_COLOR = HeaderToolTip.class.getName() + ".TOOLTIP_HEAD_BG_COLOR"; //$NON-NLS-1$ private static final String HEADER_FG_COLOR = HeaderToolTip.class.getName() + ".TOOLTIP_HEAD_FG_COLOR"; //$NON-NLS-1$ private static final String HEADER_FONT = HeaderToolTip.class.getName() + ".TOOLTIP_HEAD_FONT"; //$NON-NLS-1$ static { getColorRegistry().put(HEADER_BG_COLOR, new RGB(255, 255, 255)); getColorRegistry().put(HEADER_FG_COLOR, new RGB(0, 0, 0)); final String defaultFontName = getDefaultFont().getFontData()[0].getName(); final FontData[] fontData = getFontRegistry().getBold(defaultFontName).getFontData(); getFontRegistry().put(HEADER_FONT, fontData); } public HeaderToolTip(final Control control) { super(control); setPopupDelay(1000); setShift(new Point(10, 3)); } @Override protected final Composite createToolTipContentArea(final Event event, final Composite parent) { final Composite composite = new Composite(parent, SWT.NONE); final GridLayout layout = glmargins(gl(1), 0, 0); layout.verticalSpacing = 1; composite.setLayout(layout); final Composite topArea = new Composite(composite, SWT.NONE); topArea.setBackground(getColorRegistry().get(HEADER_BG_COLOR)); topArea.setLayout(glmargins(gl(3), 5, 5, 2, 2)); final Label titleLabel = new Label(topArea, SWT.NONE); titleLabel.setLayoutData(gdfill()); titleLabel.setBackground(getColorRegistry().get(HEADER_BG_COLOR)); titleLabel.setFont(getFontRegistry().get(HEADER_FONT)); titleLabel.setForeground(getColorRegistry().get(HEADER_FG_COLOR)); titleLabel.setText(getToolTipTitle(event)); final Control content = createContentArea(event, composite); final int width = max(getPreferredWidth(titleLabel) + 50, 300); topArea.setLayoutData(gdwhint(gdhfill(), width)); content.setLayoutData(gdwhint(gdfill(), width)); return composite; } protected abstract String getToolTipTitle(Event event); protected abstract Composite createContentArea(Event event, Composite parent); }