/** * This file is part of Archiv-Editor. * * The software Archiv-Editor serves as a client user interface for working with * the Person Data Repository. See: pdr.bbaw.de * * The software Archiv-Editor was developed at the Berlin-Brandenburg Academy * of Sciences and Humanities, Jägerstr. 22/23, D-10117 Berlin. * www.bbaw.de * * Copyright (C) 2010-2013 Berlin-Brandenburg Academy * of Sciences and Humanities * * The software Archiv-Editor was developed by @author: Christoph Plutte. * * Archiv-Editor is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Archiv-Editor is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with Archiv-Editor. * If not, see <http://www.gnu.org/licenses/lgpl-3.0.html>. */ package org.bbaw.pdr.ae.view.control.customSWTWidges; import org.bbaw.pdr.ae.common.CommonActivator; import org.bbaw.pdr.ae.common.icons.IconsInternal; import org.eclipse.jface.resource.ImageRegistry; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.util.Policy; import org.eclipse.swt.SWT; import org.eclipse.swt.events.MouseAdapter; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; 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; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; /** * The Class MarkupTooltip. * @author Christoph Plutte */ public class MarkupTooltip extends CustomTooltip { /** The parent shell. */ private Shell _parentShell; /** The tool tip text. */ private String _toolTipText; /** The link. */ private Text _text; /** The image reg. */ private ImageRegistry _imageReg = CommonActivator.getDefault().getImageRegistry(); /** The header text. */ private String _headerText = "Markup Information"; private Composite _parentComposite; /** The Constant HEADER_BG_COLOR. */ public static final String HEADER_BG_COLOR = Policy.JFACE + ".TOOLTIP_HEAD_BG_COLOR"; /** The Constant HEADER_FG_COLOR. */ public static final String HEADER_FG_COLOR = Policy.JFACE + ".TOOLTIP_HEAD_FG_COLOR"; /** The Constant HEADER_FONT. */ public static final String HEADER_FONT = Policy.JFACE + ".TOOLTIP_HEAD_FONT"; /** The Constant HEADER_CLOSE_ICON. */ public static final String HEADER_CLOSE_ICON = Policy.JFACE + ".TOOLTIP_CLOSE_ICON"; /** The Constant HEADER_HELP_ICON. */ public static final String HEADER_HELP_ICON = Policy.JFACE + ".TOOLTIP_HELP_ICON"; /** * Instantiates a new markup tooltip. * @param control the control */ public MarkupTooltip(final Control control) { super(control); this._parentShell = control.getShell(); } public MarkupTooltip(final Control control, String headerText) { super(control); this._parentShell = control.getShell(); this._headerText = headerText; } /** * Creates the content area. * @param parent the parent * @return the composite */ protected final Composite createContentArea(final Composite parent) { this._parentComposite = parent; Composite comp = new Composite(parent, SWT.NONE); comp.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_INFO_BACKGROUND)); GridLayout layout = new GridLayout(); layout.marginWidth = 5; comp.setLayout(layout); _text = new Text(comp, SWT.NONE | SWT.WRAP | SWT.MULTI); if (_toolTipText != null) { _text.setText(_toolTipText); } _text.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_INFO_BACKGROUND)); _text.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent e) { openURL(); } }); Point p = _text.computeSize(250, SWT.DEFAULT); _text.setSize(p); _text.setLayoutData(new GridData(p.x, p.y)); // _text.redraw(); // _text.update(); _text.pack(true); return comp; } @Override protected final Composite createToolTipContentArea(final Event event, final Composite parent) { Composite comp = new Composite(parent, SWT.NONE); GridLayout gl = new GridLayout(1, false); gl.marginBottom = 0; gl.marginTop = 0; gl.marginHeight = 0; gl.marginWidth = 0; gl.marginLeft = 0; gl.marginRight = 0; gl.verticalSpacing = 1; comp.setLayout(gl); Composite topArea = new Composite(comp, SWT.NONE); GridData data = new GridData(SWT.FILL, SWT.FILL, true, false); data.widthHint = 200; topArea.setLayoutData(data); topArea.setBackground(JFaceResources.getColorRegistry().get(HEADER_BG_COLOR)); gl = new GridLayout(2, false); gl.marginBottom = 2; gl.marginTop = 2; gl.marginHeight = 0; gl.marginWidth = 0; gl.marginLeft = 5; gl.marginRight = 2; topArea.setLayout(gl); Label l = new Label(topArea, SWT.NONE); l.setText(_headerText); l.setBackground(JFaceResources.getColorRegistry().get(HEADER_BG_COLOR)); l.setFont(JFaceResources.getFontRegistry().get(HEADER_FONT)); l.setForeground(JFaceResources.getColorRegistry().get(HEADER_FG_COLOR)); l.setLayoutData(new GridData(GridData.FILL_BOTH)); Composite iconComp = new Composite(topArea, SWT.NONE); iconComp.setLayoutData(new GridData()); iconComp.setLayout(new GridLayout(2, false)); iconComp.setBackground(JFaceResources.getColorRegistry().get(HEADER_BG_COLOR)); gl = new GridLayout(2, false); gl.marginBottom = 0; gl.marginTop = 0; gl.marginHeight = 0; gl.marginWidth = 0; gl.marginLeft = 0; gl.marginRight = 0; iconComp.setLayout(gl); Label helpIcon = new Label(iconComp, SWT.NONE); helpIcon.setBackground(JFaceResources.getColorRegistry().get(HEADER_BG_COLOR)); helpIcon.setImage(_imageReg.get(IconsInternal.MARKUP)); helpIcon.addMouseListener(new MouseAdapter() { @Override public void mouseDown(final MouseEvent e) { hide(); // MarkupTooltip.this.dispose(); openHelp(); } }); Label closeIcon = new Label(iconComp, SWT.NONE); closeIcon.setBackground(JFaceResources.getColorRegistry().get(HEADER_BG_COLOR)); closeIcon.setImage(JFaceResources.getImage(HEADER_CLOSE_ICON)); closeIcon.addMouseListener(new MouseAdapter() { @Override public void mouseDown(final MouseEvent e) { _parentShell.setFocus(); hide(); // MarkupTooltip.this.dispose(); } }); createContentArea(comp).setLayoutData(new GridData(GridData.FILL_BOTH)); return comp; } /** * Gets the tool tip text. * @return the tool tip text */ public final String getToolTipText() { return _toolTipText; } /** * Open help. */ protected void openHelp() { // parentShell.setFocus(); // // MessageBox box = new MessageBox(parentShell,SWT.ICON_INFORMATION); // box.setText("Info"); // box.setMessage("Here is where we'd show some information."); // box.open(); } /** * Open url. */ protected void openURL() { // MessageBox box = new MessageBox(parentShell,SWT.ICON_INFORMATION); // box.setText("Eclipse.org"); // box.setMessage("Here is where we'd open the URL."); // box.open(); } /** * Sets the tool tip text. * @param toolTipText the new tool tip text */ public final void setToolTipText(final String toolTipText) { this._toolTipText = toolTipText; if (_text != null && !_text.isDisposed()) { _text.setText(toolTipText); _text.pack(true); } } }