diff options
Diffstat (limited to 'examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet125.java')
-rw-r--r-- | examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet125.java | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet125.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet125.java new file mode 100644 index 0000000000..55e035f8f9 --- /dev/null +++ b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet125.java @@ -0,0 +1,107 @@ +/******************************************************************************* + * Copyright (c) 2000, 2004 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.swt.snippets; + +/* + * Tool Tips example snippet: create fake tool tips for items in a table + * + * For a list of all SWT example snippets see + * http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/platform-swt-home/dev.html#snippets + */ +import org.eclipse.swt.*; +import org.eclipse.swt.graphics.*; +import org.eclipse.swt.layout.*; +import org.eclipse.swt.widgets.*; + +public class Snippet125 { + +public static void main (String[] args) { + final Display display = new Display (); + final Shell shell = new Shell (display); + shell.setLayout (new FillLayout ()); + final Table table = new Table (shell, SWT.BORDER); + for (int i = 0; i < 20; i++) { + TableItem item = new TableItem (table, SWT.NONE); + item.setText ("item " + i); + } + // Disable native tooltip + table.setToolTipText (""); + + // Implement a "fake" tooltip + final Listener labelListener = new Listener () { + public void handleEvent (Event event) { + Label label = (Label)event.widget; + Shell shell = label.getShell (); + switch (event.type) { + case SWT.MouseDown: + Event e = new Event (); + e.item = (TableItem) label.getData ("_TABLEITEM"); + // Assuming table is single select, set the selection as if + // the mouse down event went through to the table + table.setSelection (new TableItem [] {(TableItem) e.item}); + table.notifyListeners (SWT.Selection, e); + // fall through + case SWT.MouseExit: + shell.dispose (); + break; + } + } + }; + + Listener tableListener = new Listener () { + Shell tip = null; + Label label = null; + public void handleEvent (Event event) { + switch (event.type) { + case SWT.Dispose: + case SWT.KeyDown: + case SWT.MouseMove: { + if (tip == null) break; + tip.dispose (); + tip = null; + label = null; + break; + } + case SWT.MouseHover: { + TableItem item = table.getItem (new Point (event.x, event.y)); + if (item != null) { + if (tip != null && !tip.isDisposed ()) tip.dispose (); + tip = new Shell (shell, SWT.ON_TOP); + tip.setLayout (new FillLayout ()); + label = new Label (tip, SWT.NONE); + label.setForeground (display.getSystemColor (SWT.COLOR_INFO_FOREGROUND)); + label.setBackground (display.getSystemColor (SWT.COLOR_INFO_BACKGROUND)); + label.setData ("_TABLEITEM", item); + label.setText ("tooltip "+item.getText ()); + label.addListener (SWT.MouseExit, labelListener); + label.addListener (SWT.MouseDown, labelListener); + Point size = tip.computeSize (SWT.DEFAULT, SWT.DEFAULT); + Rectangle rect = item.getBounds (0); + Point pt = table.toDisplay (rect.x, rect.y); + tip.setBounds (pt.x, pt.y, size.x, size.y); + tip.setVisible (true); + } + } + } + } + }; + table.addListener (SWT.Dispose, tableListener); + table.addListener (SWT.KeyDown, tableListener); + table.addListener (SWT.MouseMove, tableListener); + table.addListener (SWT.MouseHover, tableListener); + shell.open(); + while (!shell.isDisposed()) { + if (!display.readAndDispatch()) + display.sleep(); + } + display.dispose(); +} +} |