/******************************************************************************* * Copyright (c) Emil Crumhorn - Hexapixel.com - emil.crumhorn@gmail.com * 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: * emil.crumhorn@gmail.com - initial API and implementation *******************************************************************************/ package org.eclipse.nebula.widgets.ganttchart; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CLabel; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.RowLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; class GanttToolTip { private static boolean _codeHoverBelow = false; private static Shell _shell; private static String _lastText; private static Point _lastLocation; public static void makeDialog(final IColorManager colorManager, final String name, final String text, final Point location) { internalMakeDialog(colorManager, name, text, null, null, null, location); } public static void makeDialog(final IColorManager colorManager, final String name, final String text, final String text2, final Point location) { internalMakeDialog(colorManager, name, text, text2, null, null, location); } public static void makeDialog(final IColorManager colorManager, final String name, final String text, final String text2, final String text3, final Point location) { internalMakeDialog(colorManager, name, text, text2, text3, null, location); } public static void makeDialog(final IColorManager colorManager, final String name, final String text, final String text2, final String text3, final String text4, final Point location) { internalMakeDialog(colorManager, name, text, text2, text3, text4, location); } private static void internalMakeDialog(final IColorManager colorManager, final String name, final String text, final String text2, final String text3, final String text4, final Point loc) { Point location = new Point(loc.x, loc.y); if (_shell != null && !_shell.isDisposed()) { if (!_codeHoverBelow) { location = new Point(location.x, location.y - _shell.getSize().y - 20); } // same text as before, same place as before, let tooltip stand if (_lastText != null && _lastText.equals(text) && _lastLocation != null && _lastLocation.equals(location)) { return; } _shell.dispose(); } _lastText = text; _shell = new Shell(Display.getDefault().getActiveShell(), SWT.ON_TOP | SWT.TOOL); final RowLayout rowLayout = new RowLayout(); rowLayout.marginLeft = 1; rowLayout.marginRight = 1; rowLayout.marginTop = 1; rowLayout.marginBottom = 1; _shell.setLayout(rowLayout); _shell.setBackground(colorManager.getTooltipBackgroundColor()); final Composite comp = new Composite(_shell, SWT.NULL); comp.setBackground(colorManager.getTooltipBackgroundColor()); final FillLayout fillLayout = new FillLayout(); fillLayout.type = SWT.VERTICAL; fillLayout.marginHeight = 0; fillLayout.marginWidth = 0; comp.setLayout(fillLayout); final CLabel label = new CLabel(comp, SWT.LEFT); label.setBackground(colorManager.getTooltipBackgroundColor()); label.setForeground(colorManager.getTooltipForegroundColor()); label.setText(name); Font cur = label.getFont(); cur = applyBoldFont(cur); label.setFont(cur); final CLabel textLabel = new CLabel(comp, SWT.LEFT); textLabel.setBackground(colorManager.getTooltipBackgroundColor()); if (text4 != null) { textLabel.setForeground(colorManager.getTooltipForegroundColorFaded()); } textLabel.setText(text); if (text2 != null) { final CLabel text2Label = new CLabel(comp, SWT.LEFT); text2Label.setBackground(colorManager.getTooltipBackgroundColor()); text2Label.setForeground(colorManager.getTooltipForegroundColorFaded()); text2Label.setText(text2); } if (text3 != null) { final CLabel text3Label = new CLabel(comp, SWT.LEFT); text3Label.setBackground(colorManager.getTooltipBackgroundColor()); text3Label.setForeground(colorManager.getTooltipForegroundColorFaded()); text3Label.setText(text3); } if (text4 != null) { final CLabel text4Label = new CLabel(comp, SWT.LEFT); text4Label.setBackground(colorManager.getTooltipBackgroundColor()); text4Label.setForeground(colorManager.getTooltipForegroundColorFaded()); text4Label.setText(text4); } _shell.pack(); // show above code inside, automatically below otherwise if (!_codeHoverBelow) { location = new Point(location.x, location.y - _shell.getSize().y - 10); } _shell.setLocation(location); _lastLocation = location; _shell.setVisible(true); } private static Font applyBoldFont(final Font font) { if (font == null) { return null; } final FontData[] fontDataArray = font.getFontData(); if (fontDataArray == null) { return null; } for (int index = 0; index < fontDataArray.length; index++) { final FontData fData = fontDataArray[index]; fData.setStyle(SWT.BOLD); } return new Font(Display.getDefault(), fontDataArray); } public static void kill() { if (_shell != null && !_shell.isDisposed()) { _shell.dispose(); } } public static boolean isActive() { return (_shell != null && !_shell.isDisposed()); } }