summaryrefslogtreecommitdiffstats
path: root/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet125.java
diff options
context:
space:
mode:
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.java107
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();
+}
+}