annotate org.eclipse.jface.snippets/EclipseJfaceSnippets/org/eclipse/jface/snippets/viewers/Snippet031TableViewerCustomTooltipsMultiSelection.d @ 32:c4b36186a9bc

Renamings
author Frank Benoit <benoit@tionex.de>
date Mon, 23 Mar 2009 11:25:49 +0100
parents 5d87d4191adf
children a8a838017920
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
31
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1 /*******************************************************************************
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2 * Copyright (c) 2007 Adam Neal and others.
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
3 * All rights reserved. This program and the accompanying materials
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
4 * are made available under the terms of the Eclipse Public License v1.0
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
5 * which accompanies this distribution, and is available at
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
6 * http://www.eclipse.org/legal/epl-v10.html
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
7 *
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
8 * Contributors:
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
9 * Adam Neal - initial API and implementation
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
10 * Port to the D programming language:
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
11 * yidabu at gmail dot com ( D China http://www.d-programming-language-china.org/ )
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
12 *******************************************************************************/
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
13
32
c4b36186a9bc Renamings
Frank Benoit <benoit@tionex.de>
parents: 31
diff changeset
14 module org.eclipse.jface.snippets.viewers.Snippet031TableViewerCustomTooltipsMultiSelection;
31
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
15
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
16 // http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jface.snippets/Eclipse%20JFace%20Snippets/org/eclipse/jface/snippets/viewers/Snippet031TableViewerCustomTooltipsMultiSelection.java?view=markup
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
17
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
18 import tango.util.Convert;
32
c4b36186a9bc Renamings
Frank Benoit <benoit@tionex.de>
parents: 31
diff changeset
19 import java.util.ArrayList;
31
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
20
32
c4b36186a9bc Renamings
Frank Benoit <benoit@tionex.de>
parents: 31
diff changeset
21 import org.eclipse.jface.viewers.ArrayContentProvider;
c4b36186a9bc Renamings
Frank Benoit <benoit@tionex.de>
parents: 31
diff changeset
22 import org.eclipse.jface.viewers.ILabelProviderListener;
c4b36186a9bc Renamings
Frank Benoit <benoit@tionex.de>
parents: 31
diff changeset
23 import org.eclipse.jface.viewers.ITableLabelProvider;
c4b36186a9bc Renamings
Frank Benoit <benoit@tionex.de>
parents: 31
diff changeset
24 import org.eclipse.jface.viewers.TableViewer;
c4b36186a9bc Renamings
Frank Benoit <benoit@tionex.de>
parents: 31
diff changeset
25 import org.eclipse.swt.SWT;
c4b36186a9bc Renamings
Frank Benoit <benoit@tionex.de>
parents: 31
diff changeset
26 import org.eclipse.swt.graphics.Image;
c4b36186a9bc Renamings
Frank Benoit <benoit@tionex.de>
parents: 31
diff changeset
27 import org.eclipse.swt.graphics.Point;
c4b36186a9bc Renamings
Frank Benoit <benoit@tionex.de>
parents: 31
diff changeset
28 import org.eclipse.swt.graphics.Rectangle;
c4b36186a9bc Renamings
Frank Benoit <benoit@tionex.de>
parents: 31
diff changeset
29 import org.eclipse.swt.layout.FillLayout;
c4b36186a9bc Renamings
Frank Benoit <benoit@tionex.de>
parents: 31
diff changeset
30 import org.eclipse.swt.widgets.Display;
c4b36186a9bc Renamings
Frank Benoit <benoit@tionex.de>
parents: 31
diff changeset
31 import org.eclipse.swt.widgets.Event;
c4b36186a9bc Renamings
Frank Benoit <benoit@tionex.de>
parents: 31
diff changeset
32 import org.eclipse.swt.widgets.Label;
c4b36186a9bc Renamings
Frank Benoit <benoit@tionex.de>
parents: 31
diff changeset
33 import org.eclipse.swt.widgets.Listener;
c4b36186a9bc Renamings
Frank Benoit <benoit@tionex.de>
parents: 31
diff changeset
34 import org.eclipse.swt.widgets.Shell;
c4b36186a9bc Renamings
Frank Benoit <benoit@tionex.de>
parents: 31
diff changeset
35 import org.eclipse.swt.widgets.Table;
c4b36186a9bc Renamings
Frank Benoit <benoit@tionex.de>
parents: 31
diff changeset
36 import org.eclipse.swt.widgets.TableColumn;
c4b36186a9bc Renamings
Frank Benoit <benoit@tionex.de>
parents: 31
diff changeset
37 import org.eclipse.swt.widgets.TableItem;
c4b36186a9bc Renamings
Frank Benoit <benoit@tionex.de>
parents: 31
diff changeset
38 import org.eclipse.swt.widgets.Listener;
31
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
39
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
40 alias char[] String;
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
41 void main(String[] args)
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
42 {
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
43 Snippet031TableViewerCustomTooltipsMultiSelection.main(args);
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
44 }
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
45
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
46 /**
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
47 * A simple TableViewer to demonstrate how custom tooltips could be created easily while preserving
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
48 * the multiple selection.
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
49 *
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
50 * This is a modified example taken from Tom Schindl's Snippet023TreeViewerCustomTooltips.java
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
51 *
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
52 * This code is for users pre 3.3 others could use newly added tooltip support in {@link CellLabelProvider}
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
53 * @author Adam Neal <Adam_Neal@ca.ibm.com>
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
54 *
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
55 */
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
56 public class Snippet031TableViewerCustomTooltipsMultiSelection {
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
57 public class MyLableProvider : ITableLabelProvider {
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
58
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
59 public Image getColumnImage(Object element, int columnIndex) {
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
60 return null;
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
61 }
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
62
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
63 public String getColumnText(Object element, int columnIndex) {
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
64 //if (element instanceof MyModel) {
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
65 switch (columnIndex) {
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
66 case 0: return (cast(MyModel)element).col1;
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
67 case 1: return (cast(MyModel)element).col2;
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
68 }
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
69 //}
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
70
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
71 return "";
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
72 }
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
73
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
74 public void addListener(ILabelProviderListener listener) {
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
75 /* Ignore */
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
76 }
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
77
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
78 public void dispose() {
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
79 /* Ignore */
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
80 }
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
81
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
82 public bool isLabelProperty(Object element, String property) {
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
83 return false;
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
84 }
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
85
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
86 public void removeListener(ILabelProviderListener listener) {
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
87 /* Ignore */
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
88 }
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
89
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
90 }
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
91
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
92
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
93
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
94 public this(Shell shell) {
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
95
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
96
32
c4b36186a9bc Renamings
Frank Benoit <benoit@tionex.de>
parents: 31
diff changeset
97 final Table table = new Table(shell, SWT.H_SCROLL | SWT.V_SCROLL | SWT.MULTI | SWT.FULL_SELECTION);
31
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
98 table.setHeaderVisible(true);
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
99 table.setLinesVisible(true);
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
100
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
101 final TableViewer v = new TableViewer(table);
32
c4b36186a9bc Renamings
Frank Benoit <benoit@tionex.de>
parents: 31
diff changeset
102 TableColumn tableColumn1 = new TableColumn(table, SWT.NONE);
c4b36186a9bc Renamings
Frank Benoit <benoit@tionex.de>
parents: 31
diff changeset
103 TableColumn tableColumn2 = new TableColumn(table, SWT.NONE);
31
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
104
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
105 String column1 = "Column 1", column2 = "Column 2";
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
106 /* Setup the table columns */
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
107 tableColumn1.setText(column1);
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
108 tableColumn2.setText(column2);
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
109 tableColumn1.pack();
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
110 tableColumn2.pack();
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
111
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
112 v.setColumnProperties([ column1, column2 ]);
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
113 v.setLabelProvider(new MyLableProvider());
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
114 v.setContentProvider(new ArrayContentProvider!(MyModel));
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
115 v.setInput(createModel());
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
116
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
117 tooltipLabelListener = new TooltipLabelListener();
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
118
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
119 /**
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
120 * The listener that gets added to the table. This listener is responsible for creating the tooltips
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
121 * when hovering over a cell item. This listener will listen for the following events:
32
c4b36186a9bc Renamings
Frank Benoit <benoit@tionex.de>
parents: 31
diff changeset
122 * <li>SWT.KeyDown - to remove the tooltip</li>
c4b36186a9bc Renamings
Frank Benoit <benoit@tionex.de>
parents: 31
diff changeset
123 * <li>SWT.Dispose - to remove the tooltip</li>
c4b36186a9bc Renamings
Frank Benoit <benoit@tionex.de>
parents: 31
diff changeset
124 * <li>SWT.MouseMove - to remove the tooltip</li>
c4b36186a9bc Renamings
Frank Benoit <benoit@tionex.de>
parents: 31
diff changeset
125 * <li>SWT.MouseHover - to set the tooltip</li>
31
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
126 */
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
127
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
128 Listener tableListener = dgListener(&handleTableListener, table);
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
129
32
c4b36186a9bc Renamings
Frank Benoit <benoit@tionex.de>
parents: 31
diff changeset
130 table.addListener (SWT.Dispose, tableListener);
c4b36186a9bc Renamings
Frank Benoit <benoit@tionex.de>
parents: 31
diff changeset
131 table.addListener (SWT.KeyDown, tableListener);
c4b36186a9bc Renamings
Frank Benoit <benoit@tionex.de>
parents: 31
diff changeset
132 table.addListener (SWT.MouseMove, tableListener);
c4b36186a9bc Renamings
Frank Benoit <benoit@tionex.de>
parents: 31
diff changeset
133 table.addListener (SWT.MouseHover, tableListener);
31
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
134 }
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
135
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
136 void handleTableListener(Event event, Table table)
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
137 {
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
138 Shell tooltip = null;
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
139 Label label = null;
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
140
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
141 /*
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
142 * (non-Javadoc)
32
c4b36186a9bc Renamings
Frank Benoit <benoit@tionex.de>
parents: 31
diff changeset
143 * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event)
31
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
144 */
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
145 switch (event.type) {
32
c4b36186a9bc Renamings
Frank Benoit <benoit@tionex.de>
parents: 31
diff changeset
146 case SWT.KeyDown:
c4b36186a9bc Renamings
Frank Benoit <benoit@tionex.de>
parents: 31
diff changeset
147 case SWT.Dispose:
c4b36186a9bc Renamings
Frank Benoit <benoit@tionex.de>
parents: 31
diff changeset
148 case SWT.MouseMove: {
31
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
149 if (tooltip is null) break;
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
150 tooltip.dispose ();
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
151 tooltip = null;
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
152 label = null;
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
153 break;
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
154 }
32
c4b36186a9bc Renamings
Frank Benoit <benoit@tionex.de>
parents: 31
diff changeset
155 case SWT.MouseHover: {
31
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
156 Point coords = new Point(event.x, event.y);
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
157 TableItem item = table.getItem(coords);
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
158 if (item !is null) {
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
159 int columnCount = table.getColumnCount();
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
160 for (int columnIndex = 0; columnIndex < columnCount; columnIndex++) {
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
161 if (item.getBounds(columnIndex).contains(coords)) {
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
162 /* Dispose of the old tooltip (if one exists */
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
163 if (tooltip !is null && !tooltip.isDisposed ()) tooltip.dispose ();
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
164
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
165 /* Create a new Tooltip */
32
c4b36186a9bc Renamings
Frank Benoit <benoit@tionex.de>
parents: 31
diff changeset
166 tooltip = new Shell (table.getShell(), SWT.ON_TOP | SWT.NO_FOCUS | SWT.TOOL);
c4b36186a9bc Renamings
Frank Benoit <benoit@tionex.de>
parents: 31
diff changeset
167 tooltip.setBackground (table.getDisplay().getSystemColor (SWT.COLOR_INFO_BACKGROUND));
31
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
168 FillLayout layout = new FillLayout ();
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
169 layout.marginWidth = 2;
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
170 tooltip.setLayout (layout);
32
c4b36186a9bc Renamings
Frank Benoit <benoit@tionex.de>
parents: 31
diff changeset
171 label = new Label (tooltip, SWT.NONE);
c4b36186a9bc Renamings
Frank Benoit <benoit@tionex.de>
parents: 31
diff changeset
172 label.setForeground (table.getDisplay().getSystemColor (SWT.COLOR_INFO_FOREGROUND));
c4b36186a9bc Renamings
Frank Benoit <benoit@tionex.de>
parents: 31
diff changeset
173 label.setBackground (table.getDisplay().getSystemColor (SWT.COLOR_INFO_BACKGROUND));
31
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
174
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
175 /* Store the TableItem with the label so we can pass the mouse event later */
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
176 label.setData ("_TableItem_", item);
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
177
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
178 /* Set the tooltip text */
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
179 label.setText("Tooltip: " ~ to!(char[])(item.getData()) ~ " : " ~ to!(char[])(columnIndex));
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
180
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
181 /* Setup Listeners to remove the tooltip and transfer the received mouse events */
32
c4b36186a9bc Renamings
Frank Benoit <benoit@tionex.de>
parents: 31
diff changeset
182 label.addListener (SWT.MouseExit, tooltipLabelListener);
c4b36186a9bc Renamings
Frank Benoit <benoit@tionex.de>
parents: 31
diff changeset
183 label.addListener (SWT.MouseDown, tooltipLabelListener);
31
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
184
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
185 /* Set the size and position of the tooltip */
32
c4b36186a9bc Renamings
Frank Benoit <benoit@tionex.de>
parents: 31
diff changeset
186 Point size = tooltip.computeSize (SWT.DEFAULT, SWT.DEFAULT);
31
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
187 Rectangle rect = item.getBounds (columnIndex);
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
188 Point pt = table.toDisplay (rect.x, rect.y);
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
189 tooltip.setBounds (pt.x, pt.y, size.x, size.y);
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
190
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
191 /* Show it */
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
192 tooltip.setVisible (true);
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
193 break;
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
194 }
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
195 }
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
196 }
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
197 }
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
198 }
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
199 }
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
200
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
201 /**
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
202 * This listener is added to the tooltip so that it can either dispose itself if the mouse
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
203 * exits the tooltip or so it can pass the selection event through to the table.
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
204 */
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
205 final TooltipLabelListener tooltipLabelListener;
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
206 final class TooltipLabelListener : Listener {
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
207 private bool isCTRLDown(Event e) {
32
c4b36186a9bc Renamings
Frank Benoit <benoit@tionex.de>
parents: 31
diff changeset
208 return (e.stateMask & SWT.CTRL) != 0;
31
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
209 }
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
210 /*
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
211 * (non-Javadoc)
32
c4b36186a9bc Renamings
Frank Benoit <benoit@tionex.de>
parents: 31
diff changeset
212 * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event)
31
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
213 */
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
214 public void handleEvent (Event event) {
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
215 Label label = cast(Label)event.widget;
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
216 Shell shell = label.getShell ();
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
217 switch (event.type) {
32
c4b36186a9bc Renamings
Frank Benoit <benoit@tionex.de>
parents: 31
diff changeset
218 case SWT.MouseDown: /* Handle a user Click */
31
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
219 /* Extract our Data */
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
220 Event e = new Event ();
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
221 e.item = cast(TableItem) label.getData ("_TableItem_");
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
222 Table table = (cast(TableItem) e.item).getParent();
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
223
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
224 /* Construct the new Selection[] to show */
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
225 TableItem [] newSelection = null;
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
226 if (isCTRLDown(event)) {
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
227 /* We have 2 scenario's.
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
228 * 1) We are selecting an already selected element - so remove it from the selected indices
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
229 * 2) We are selecting a non-selected element - so add it to the selected indices
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
230 */
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
231 TableItem[] sel = table.getSelection();
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
232 for (int i = 0; i < sel.length; ++i) {
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
233 //if (e.item.equals(sel[i])) {
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
234 if (e.item is sel[i]) {
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
235 // We are de-selecting this element
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
236 newSelection = new TableItem[sel.length - 1];
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
237 System.arraycopy(sel, 0, newSelection, 0, i);
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
238 System.arraycopy(sel, i+1, newSelection, i, sel.length - i - 1);
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
239 break;
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
240 }
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
241 }
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
242
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
243 /*
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
244 * If we haven't created the newSelection[] yet, than we are adding the newly selected element
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
245 * into the list of selected indicies
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
246 */
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
247 if (newSelection is null) {
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
248 newSelection = new TableItem[sel.length + 1];
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
249 System.arraycopy(sel, 0, newSelection, 0, sel.length);
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
250 newSelection[sel.length] = cast(TableItem) e.item;
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
251 }
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
252
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
253 } else {
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
254 /* CTRL is not down, so we simply select the single element */
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
255 newSelection = [ cast(TableItem) e.item ];
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
256 }
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
257 /* Set the new selection of the table and notify the listeners */
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
258 table.setSelection (newSelection);
32
c4b36186a9bc Renamings
Frank Benoit <benoit@tionex.de>
parents: 31
diff changeset
259 table.notifyListeners (SWT.Selection, e);
31
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
260
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
261 /* Remove the Tooltip */
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
262 shell.dispose ();
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
263 table.setFocus();
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
264 break;
32
c4b36186a9bc Renamings
Frank Benoit <benoit@tionex.de>
parents: 31
diff changeset
265 case SWT.MouseExit:
31
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
266 shell.dispose ();
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
267 break;
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
268 }
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
269 }
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
270 }
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
271
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
272
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
273 private ArrayList createModel() {
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
274 ArrayList list = new ArrayList;
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
275 list.add(new MyModel("A", "B"));
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
276 list.add(new MyModel("C", "D"));
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
277 list.add(new MyModel("E", "F"));
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
278 return list;
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
279 }
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
280
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
281 public static void main(String[] args) {
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
282 Display display = new Display();
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
283 Shell shell = new Shell(display);
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
284 shell.setLayout(new FillLayout());
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
285 new Snippet031TableViewerCustomTooltipsMultiSelection(shell);
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
286 shell.open();
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
287
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
288 while (!shell.isDisposed()) {
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
289 if (!display.readAndDispatch())
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
290 display.sleep();
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
291 }
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
292
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
293 display.dispose();
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
294 }
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
295 }
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
296
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
297 public class MyModel {
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
298 public String col1, col2;
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
299
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
300 public this(String c1, String c2) {
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
301 col1 = c1;
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
302 col2 = c2;
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
303 }
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
304
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
305 public String toString() {
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
306 return col1 ~ col2;
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
307 }
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
308 }
5d87d4191adf Added JFace Snippets sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
309