Java tutorial
/*! ****************************************************************************** * * Pentaho Data Integration * * Copyright (C) 2002-2017 by Hitachi Vantara : http://www.pentaho.com * ******************************************************************************* * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ******************************************************************************/ package org.pentaho.di.ui.core.widget; import java.util.ArrayList; import java.util.List; import org.eclipse.jface.window.ToolTip; import org.eclipse.swt.SWT; import org.eclipse.swt.events.PaintEvent; import org.eclipse.swt.events.PaintListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.layout.FormAttachment; import org.eclipse.swt.layout.FormData; import org.eclipse.swt.layout.FormLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; import org.pentaho.di.ui.core.gui.GUIResource; public class CheckBoxToolTip extends ToolTip { private String message; private String title; private Image image; private String checkBoxMessage; private boolean visible; private List<CheckBoxToolTipListener> listeners; private Display display; protected Rectangle checkBoxBounds; private boolean showingScrollBars; public CheckBoxToolTip(Control control) { super(control, ToolTip.RECREATE, true); image = control.getDisplay().getSystemImage(SWT.ICON_INFORMATION); listeners = new ArrayList<CheckBoxToolTipListener>(); visible = false; display = control.getDisplay(); super.setRespectMonitorBounds(true); super.setRespectDisplayBounds(true); super.setHideDelay(50000); super.setPopupDelay(0); super.setHideOnMouseDown(false); } protected Composite createToolTipContentArea(Event event, Composite parent) { Composite composite = new Composite(parent, SWT.NONE); FormLayout compLayout = new FormLayout(); compLayout.marginHeight = 5; compLayout.marginWidth = 5; composite.setLayout(compLayout); composite.setBackground(display.getSystemColor(SWT.COLOR_INFO_BACKGROUND)); Label imageLabel = new Label(composite, SWT.NONE); imageLabel.setImage(image); imageLabel.setBackground(display.getSystemColor(SWT.COLOR_INFO_BACKGROUND)); FormData fdImageLabel = new FormData(); fdImageLabel.left = new FormAttachment(0, 0); fdImageLabel.top = new FormAttachment(0, 0); imageLabel.setLayoutData(fdImageLabel); Label titleLabel = new Label(composite, SWT.LEFT); titleLabel.setText(title); titleLabel.setBackground(display.getSystemColor(SWT.COLOR_INFO_BACKGROUND)); titleLabel.setFont(GUIResource.getInstance().getFontBold()); FormData fdTitleLabel = new FormData(); fdTitleLabel.left = new FormAttachment(imageLabel, 20); fdTitleLabel.top = new FormAttachment(0, 0); titleLabel.setLayoutData(fdTitleLabel); Label line = new Label(composite, SWT.SEPARATOR | SWT.HORIZONTAL); line.setBackground(display.getSystemColor(SWT.COLOR_INFO_BACKGROUND)); FormData fdLine = new FormData(); fdLine.left = new FormAttachment(imageLabel, 5); fdLine.right = new FormAttachment(100, -5); fdLine.top = new FormAttachment(titleLabel, 5); line.setLayoutData(fdLine); // Text messageLabel = new Text(composite, SWT.LEFT | ( showingScrollBars ? SWT.H_SCROLL | SWT.V_SCROLL : SWT.NONE ) // ); /* * Text messageLabel = new Text(composite, SWT.SINGLE | SWT.LEFT); messageLabel.setText(message); * messageLabel.setBackground(display.getSystemColor(SWT.COLOR_INFO_BACKGROUND)); FormData fdMessageLabel = new * FormData(); fdMessageLabel.left = new FormAttachment(imageLabel, 20); fdMessageLabel.top = new * FormAttachment(line, 5); if (showingScrollBars) { fdMessageLabel.right = new FormAttachment(imageLabel, 500); * fdMessageLabel.bottom= new FormAttachment(line, 400); } messageLabel.setLayoutData(fdMessageLabel); */ Label messageLabel = new Label(composite, SWT.LEFT); messageLabel.setText(message); messageLabel.setBackground(display.getSystemColor(SWT.COLOR_INFO_BACKGROUND)); FormData fdMessageLabel = new FormData(); fdMessageLabel.left = new FormAttachment(imageLabel, 20); fdMessageLabel.top = new FormAttachment(line, 5); messageLabel.setLayoutData(fdMessageLabel); final Button disable = new Button(composite, SWT.CHECK); disable.setText(checkBoxMessage); disable.setBackground(display.getSystemColor(SWT.COLOR_INFO_BACKGROUND)); disable.setSelection(false); FormData fdDisable = new FormData(); fdDisable.left = new FormAttachment(0, 0); fdDisable.top = new FormAttachment(messageLabel, 20); fdDisable.bottom = new FormAttachment(100, 0); disable.setLayoutData(fdDisable); disable.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { for (CheckBoxToolTipListener listener : listeners) { listener.checkBoxSelected(false); } hide(); } }); disable.addPaintListener(new PaintListener() { public void paintControl(PaintEvent arg0) { checkBoxBounds = disable.getBounds(); } }); composite.layout(); checkBoxBounds = disable.getBounds(); return composite; } public void show(Point location) { super.show(location); visible = true; } public void hide() { visible = false; super.hide(); } public void addCheckBoxToolTipListener(CheckBoxToolTipListener listener) { listeners.add(listener); } protected void afterHideToolTip(Event event) { super.afterHideToolTip(event); visible = false; } /** * @return the message */ public String getMessage() { return message; } /** * @param message * the message to set */ public void setMessage(String message) { this.message = message; } /** * @return the title */ public String getTitle() { return title; } /** * @param title * the title to set */ public void setTitle(String title) { this.title = title; } /** * @return the image */ public Image getImage() { return image; } /** * @param image * the image to set */ public void setImage(Image image) { this.image = image; } /** * @return the checkBoxMessage */ public String getCheckBoxMessage() { return checkBoxMessage; } /** * @param checkBoxMessage * the checkBoxMessage to set */ public void setCheckBoxMessage(String checkBoxMessage) { this.checkBoxMessage = checkBoxMessage; } /** * @return the visible */ public boolean isVisible() { return visible; } /** * @param visible * the visible to set */ public void setVisible(boolean visible) { this.visible = visible; } /** * @return the checkBoxBounds */ public Rectangle getCheckBoxBounds() { return checkBoxBounds; } /** * @param checkBoxBounds * the checkBoxBounds to set */ public void setCheckBoxBounds(Rectangle checkBoxBounds) { this.checkBoxBounds = checkBoxBounds; } /** * @return the showingScrollBars */ public boolean isShowingScrollBars() { return showingScrollBars; } /** * @param showingScrollBars * the showingScrollBars to set */ public void setShowingScrollBars(boolean showingScrollBars) { this.showingScrollBars = showingScrollBars; } }