annotate dwtx/jface/util/OpenStrategy.d @ 192:c3583c6ec027

Added missing default cases for switch statements
author Frank Benoit <benoit@tionex.de>
date Mon, 03 Nov 2008 22:52:26 +0100
parents 644f1334b451
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1 /*******************************************************************************
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2 * Copyright (c) 2000, 2006 IBM Corporation and others.
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
3 * All rights reserved. This program and the accompanying materials
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
4 * are made available under the terms of the Eclipse Public License v1.0
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
5 * which accompanies this distribution, and is available at
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
6 * http://www.eclipse.org/legal/epl-v10.html
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
7 *
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
8 * Contributors:
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
9 * IBM Corporation - initial API and implementation
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
10 * Port to the D programming language:
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
11 * Frank Benoit <benoit@tionex.de>
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
12 *******************************************************************************/
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
13 module dwtx.jface.util.OpenStrategy;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
14
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
15 import dwtx.jface.util.IOpenEventListener;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
16
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
17 import dwt.DWT;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
18 import dwt.custom.TableTree;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
19 import dwt.custom.TableTreeItem;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
20 import dwt.events.SelectionEvent;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
21 import dwt.events.SelectionListener;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
22 import dwt.graphics.Point;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
23 import dwt.widgets.Control;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
24 import dwt.widgets.Display;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
25 import dwt.widgets.Event;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
26 import dwt.widgets.Listener;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
27 import dwt.widgets.Table;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
28 import dwt.widgets.TableItem;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
29 import dwt.widgets.Tree;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
30 import dwt.widgets.TreeItem;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
31 import dwt.widgets.Widget;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
32 import dwtx.core.runtime.ListenerList;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
33
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
34 import dwt.dwthelper.utils;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
35 import dwt.dwthelper.Runnable;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
36
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
37 /**
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
38 * Implementation of single-click and double-click strategies.
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
39 * <p>
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
40 * Usage:
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
41 * <pre>
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
42 * OpenStrategy handler = new OpenStrategy(control);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
43 * handler.addOpenListener(new IOpenEventListener() {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
44 * public void handleOpen(SelectionEvent e) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
45 * ... // code to handle the open event.
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
46 * }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
47 * });
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
48 * </pre>
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
49 * </p>
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
50 */
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
51 public class OpenStrategy {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
52 /**
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
53 * Default behavior. Double click to open the item.
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
54 */
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
55 public static const int DOUBLE_CLICK = 0;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
56
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
57 /**
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
58 * Single click will open the item.
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
59 */
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
60 public static const int SINGLE_CLICK = 1;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
61
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
62 /**
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
63 * Hover will select the item.
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
64 */
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
65 public static const int SELECT_ON_HOVER = 1 << 1;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
66
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
67 /**
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
68 * Open item when using arrow keys
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
69 */
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
70 public static const int ARROW_KEYS_OPEN = 1 << 2;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
71
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
72 /** A single click will generate
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
73 * an open event but key arrows will not do anything.
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
74 *
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
75 * @deprecated
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
76 */
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
77 public static const int NO_TIMER = SINGLE_CLICK;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
78
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
79 /** A single click will generate an open
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
80 * event and key arrows will generate an open event after a
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
81 * small time.
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
82 *
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
83 * @deprecated
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
84 */
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
85 public static const int FILE_EXPLORER = SINGLE_CLICK | ARROW_KEYS_OPEN;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
86
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
87 /** Pointing to an item will change the selection
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
88 * and a single click will gererate an open event
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
89 *
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
90 * @deprecated
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
91 */
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
92 public static const int ACTIVE_DESKTOP = SINGLE_CLICK | SELECT_ON_HOVER;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
93
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
94 // Time used in FILE_EXPLORER and ACTIVE_DESKTOP
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
95 private static const int TIME = 500;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
96
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
97 /* SINGLE_CLICK or DOUBLE_CLICK;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
98 * In case of SINGLE_CLICK, the bits SELECT_ON_HOVER and ARROW_KEYS_OPEN
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
99 * my be set as well. */
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
100 private static int CURRENT_METHOD = DOUBLE_CLICK;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
101
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
102 private Listener eventHandler;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
103
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
104 private ListenerList openEventListeners;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
105
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
106 private ListenerList selectionEventListeners;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
107
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
108 private ListenerList postSelectionEventListeners;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
109
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
110 /**
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
111 * @param control the control the strategy is applied to
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
112 */
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
113 public this(Control control) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
114 openEventListeners = new ListenerList();
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
115 selectionEventListeners = new ListenerList();
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
116 postSelectionEventListeners = new ListenerList();
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
117 initializeHandler(control.getDisplay());
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
118 addListener(control);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
119 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
120
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
121 /**
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
122 * Adds an IOpenEventListener to the collection of openEventListeners
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
123 * @param listener the listener to add
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
124 */
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
125 public void addOpenListener(IOpenEventListener listener) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
126 openEventListeners.add(cast(Object)listener);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
127 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
128
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
129 /**
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
130 * Removes an IOpenEventListener to the collection of openEventListeners
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
131 * @param listener the listener to remove
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
132 */
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
133 public void removeOpenListener(IOpenEventListener listener) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
134 openEventListeners.remove(cast(Object)listener);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
135 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
136
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
137 /**
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
138 * Adds an SelectionListener to the collection of selectionEventListeners
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
139 * @param listener the listener to add
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
140 */
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
141 public void addSelectionListener(SelectionListener listener) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
142 selectionEventListeners.add(cast(Object)listener);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
143 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
144
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
145 /**
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
146 * Removes an SelectionListener to the collection of selectionEventListeners
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
147 * @param listener the listener to remove
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
148 */
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
149 public void removeSelectionListener(SelectionListener listener) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
150 selectionEventListeners.remove(cast(Object)listener);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
151 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
152
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
153 /**
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
154 * Adds an SelectionListener to the collection of selectionEventListeners
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
155 * @param listener the listener to add
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
156 */
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
157 public void addPostSelectionListener(SelectionListener listener) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
158 postSelectionEventListeners.add(cast(Object)listener);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
159 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
160
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
161 /**
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
162 * Removes an SelectionListener to the collection of selectionEventListeners
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
163 * @param listener the listener to remove
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
164 */
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
165 public void removePostSelectionListener(SelectionListener listener) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
166 postSelectionEventListeners.remove(cast(Object)listener);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
167 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
168
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
169 /**
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
170 * This method is internal to the framework; it should not be implemented outside
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
171 * the framework.
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
172 * @return the current used single/double-click method
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
173 *
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
174 */
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
175 public static int getOpenMethod() {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
176 return CURRENT_METHOD;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
177 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
178
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
179 /**
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
180 * Set the current used single/double-click method.
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
181 *
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
182 * This method is internal to the framework; it should not be implemented outside
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
183 * the framework.
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
184 * @param method the method to be used
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
185 * @see OpenStrategy#DOUBLE_CLICK
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
186 * @see OpenStrategy#SINGLE_CLICK
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
187 * @see OpenStrategy#SELECT_ON_HOVER
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
188 * @see OpenStrategy#ARROW_KEYS_OPEN
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
189 */
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
190 public static void setOpenMethod(int method) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
191 if (method is DOUBLE_CLICK) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
192 CURRENT_METHOD = method;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
193 return;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
194 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
195 if ((method & SINGLE_CLICK) is 0) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
196 throw new IllegalArgumentException("Invalid open mode"); //$NON-NLS-1$
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
197 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
198 if ((method & (SINGLE_CLICK | SELECT_ON_HOVER | ARROW_KEYS_OPEN)) is 0) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
199 throw new IllegalArgumentException("Invalid open mode"); //$NON-NLS-1$
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
200 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
201 CURRENT_METHOD = method;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
202 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
203
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
204 /**
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
205 * @return true if editors should be activated when opened.
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
206 */
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
207 public static bool activateOnOpen() {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
208 return getOpenMethod() is DOUBLE_CLICK;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
209 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
210
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
211 /*
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
212 * Adds all needed listener to the control in order to implement
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
213 * single-click/double-click strategies.
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
214 */
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
215 private void addListener(Control c) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
216 c.addListener(DWT.MouseEnter, eventHandler);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
217 c.addListener(DWT.MouseExit, eventHandler);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
218 c.addListener(DWT.MouseMove, eventHandler);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
219 c.addListener(DWT.MouseDown, eventHandler);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
220 c.addListener(DWT.MouseUp, eventHandler);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
221 c.addListener(DWT.KeyDown, eventHandler);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
222 c.addListener(DWT.Selection, eventHandler);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
223 c.addListener(DWT.DefaultSelection, eventHandler);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
224 c.addListener(DWT.Collapse, eventHandler);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
225 c.addListener(DWT.Expand, eventHandler);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
226 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
227
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
228 /*
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
229 * Fire the selection event to all selectionEventListeners
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
230 */
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
231 private void fireSelectionEvent(SelectionEvent e) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
232 if (e.item !is null && e.item.isDisposed()) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
233 return;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
234 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
235 Object l[] = selectionEventListeners.getListeners();
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
236 for (int i = 0; i < l.length; i++) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
237 (cast(SelectionListener) l[i]).widgetSelected(e);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
238 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
239 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
240
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
241 /*
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
242 * Fire the default selection event to all selectionEventListeners
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
243 */
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
244 private void fireDefaultSelectionEvent(SelectionEvent e) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
245 Object l[] = selectionEventListeners.getListeners();
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
246 for (int i = 0; i < l.length; i++) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
247 (cast(SelectionListener) l[i]).widgetDefaultSelected(e);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
248 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
249 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
250
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
251 /*
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
252 * Fire the post selection event to all postSelectionEventListeners
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
253 */
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
254 private void firePostSelectionEvent(SelectionEvent e) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
255 if (e.item !is null && e.item.isDisposed()) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
256 return;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
257 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
258 Object l[] = postSelectionEventListeners.getListeners();
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
259 for (int i = 0; i < l.length; i++) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
260 (cast(SelectionListener) l[i]).widgetSelected(e);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
261 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
262 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
263
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
264 /*
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
265 * Fire the open event to all openEventListeners
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
266 */
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
267 private void fireOpenEvent(SelectionEvent e) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
268 if (e.item !is null && e.item.isDisposed()) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
269 return;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
270 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
271 Object l[] = openEventListeners.getListeners();
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
272 for (int i = 0; i < l.length; i++) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
273 (cast(IOpenEventListener) l[i]).handleOpen(e);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
274 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
275 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
276
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
277 //Initialize event handler.
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
278 private void initializeHandler( Display display_) {
39
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 4
diff changeset
279 eventHandler = new class(display_) Listener {
4
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
280 Display display;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
281 bool timerStarted = false;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
282
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
283 Event mouseUpEvent = null;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
284
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
285 Event mouseMoveEvent = null;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
286
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
287 SelectionEvent selectionPendent = null;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
288
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
289 bool enterKeyDown = false;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
290
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
291 SelectionEvent defaultSelectionPendent = null;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
292
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
293 bool arrowKeyDown = false;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
294
39
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 4
diff changeset
295 int[1] count;
4
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
296
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
297 long startTime;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
298
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
299 bool collapseOccurred = false;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
300
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
301 bool expandOccurred = false;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
302
39
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 4
diff changeset
303 this(Display a){
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 4
diff changeset
304 display = a;
4
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
305 startTime = System.currentTimeMillis();
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
306 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
307
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
308 public void handleEvent( Event e) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
309 if (e.type is DWT.DefaultSelection) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
310 SelectionEvent event = new SelectionEvent(e);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
311 fireDefaultSelectionEvent(event);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
312 if (CURRENT_METHOD is DOUBLE_CLICK) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
313 fireOpenEvent(event);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
314 } else {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
315 if (enterKeyDown) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
316 fireOpenEvent(event);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
317 enterKeyDown = false;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
318 defaultSelectionPendent = null;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
319 } else {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
320 defaultSelectionPendent = event;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
321 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
322 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
323 return;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
324 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
325
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
326 switch (e.type) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
327 case DWT.MouseEnter:
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
328 case DWT.MouseExit:
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
329 mouseUpEvent = null;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
330 mouseMoveEvent = null;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
331 selectionPendent = null;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
332 break;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
333 case DWT.MouseMove:
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
334 if ((CURRENT_METHOD & SELECT_ON_HOVER) is 0) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
335 return;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
336 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
337 if (e.stateMask !is 0) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
338 return;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
339 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
340 if (e.widget.getDisplay().getFocusControl() !is e.widget) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
341 return;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
342 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
343 mouseMoveEvent = e;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
344 Runnable runnable = new class() Runnable {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
345 public void run() {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
346 long time = System.currentTimeMillis();
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
347 int diff = cast(int) (time - startTime);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
348 if (diff <= TIME) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
349 display.timerExec(diff * 2 / 3, this );
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
350 } else {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
351 timerStarted = false;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
352 setSelection(mouseMoveEvent);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
353 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
354 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
355 };
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
356 startTime = System.currentTimeMillis();
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
357 if (!timerStarted) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
358 timerStarted = true;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
359 display.timerExec(TIME * 2 / 3, runnable );
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
360 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
361 break;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
362 case DWT.MouseDown:
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
363 mouseUpEvent = null;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
364 arrowKeyDown = false;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
365 break;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
366 case DWT.Expand:
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
367 expandOccurred = true;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
368 break;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
369 case DWT.Collapse:
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
370 collapseOccurred = true;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
371 break;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
372 case DWT.MouseUp:
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
373 mouseMoveEvent = null;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
374 if ((e.button !is 1) || ((e.stateMask & ~DWT.BUTTON1) !is 0)) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
375 return;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
376 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
377 if (selectionPendent !is null
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
378 && !(collapseOccurred || expandOccurred)) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
379 mouseSelectItem(selectionPendent);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
380 } else {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
381 mouseUpEvent = e;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
382 collapseOccurred = false;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
383 expandOccurred = false;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
384 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
385 break;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
386 case DWT.KeyDown:
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
387 mouseMoveEvent = null;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
388 mouseUpEvent = null;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
389 arrowKeyDown = ((e.keyCode is DWT.ARROW_UP) || (e.keyCode is DWT.ARROW_DOWN))
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
390 && e.stateMask is 0;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
391 if (e.character is DWT.CR) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
392 if (defaultSelectionPendent !is null) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
393 fireOpenEvent(new SelectionEvent(e));
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
394 enterKeyDown = false;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
395 defaultSelectionPendent = null;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
396 } else {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
397 enterKeyDown = true;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
398 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
399 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
400 break;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
401 case DWT.Selection:
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
402 SelectionEvent event = new SelectionEvent(e);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
403 fireSelectionEvent(event);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
404 mouseMoveEvent = null;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
405 if (mouseUpEvent !is null) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
406 mouseSelectItem(event);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
407 } else {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
408 selectionPendent = event;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
409 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
410 count[0]++;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
411 // In the case of arrowUp/arrowDown when in the arrowKeysOpen mode, we
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
412 // want to delay any selection until the last arrowDown/Up occurs. This
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
413 // handles the case where the user presses arrowDown/Up successively.
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
414 // We only want to open an editor for the last selected item.
39
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 4
diff changeset
415 display.asyncExec(new class( count, e) Runnable {
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 4
diff changeset
416 int id_;
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 4
diff changeset
417 int[] count_;
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 4
diff changeset
418 Event e_;
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 4
diff changeset
419 this( int[] a, Event b){
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 4
diff changeset
420 count_ = a;
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 4
diff changeset
421 e_ = b;
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 4
diff changeset
422 id_ = count_[0];
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 4
diff changeset
423 }
4
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
424 public void run() {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
425 if (arrowKeyDown) {
39
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 4
diff changeset
426 display.timerExec(TIME, new class(id_,count_,e_) Runnable {
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 4
diff changeset
427 int id__;
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 4
diff changeset
428 Event e__;
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 4
diff changeset
429 int[] count__;
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 4
diff changeset
430 this(int a, int[] b, Event c){
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 4
diff changeset
431 id__ = a;
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 4
diff changeset
432 count__ = b;
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 4
diff changeset
433 e__ = c;
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 4
diff changeset
434 }
4
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
435 public void run() {
39
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 4
diff changeset
436 if (id__ is count__[0]) {
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 4
diff changeset
437 firePostSelectionEvent(new SelectionEvent(e__));
4
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
438 if ((CURRENT_METHOD & ARROW_KEYS_OPEN) !is 0) {
39
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 4
diff changeset
439 fireOpenEvent(new SelectionEvent(e__));
4
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
440 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
441 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
442 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
443 });
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
444 } else {
39
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 4
diff changeset
445 firePostSelectionEvent(new SelectionEvent(e_));
4
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
446 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
447 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
448 });
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
449 break;
192
c3583c6ec027 Added missing default cases for switch statements
Frank Benoit <benoit@tionex.de>
parents: 39
diff changeset
450 default:
4
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
451 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
452 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
453
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
454 void mouseSelectItem(SelectionEvent e) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
455 if ((CURRENT_METHOD & SINGLE_CLICK) !is 0) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
456 fireOpenEvent(e);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
457 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
458 mouseUpEvent = null;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
459 selectionPendent = null;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
460 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
461
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
462 void setSelection(Event e) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
463 if (e is null) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
464 return;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
465 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
466 Widget w = e.widget;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
467 if (w.isDisposed()) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
468 return;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
469 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
470
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
471 SelectionEvent selEvent = new SelectionEvent(e);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
472
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
473 /*ISSUE: May have to create a interface with method:
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
474 setSelection(Point p) so that user's custom widgets
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
475 can use this class. If we keep this option. */
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
476 if ( auto tree = cast(Tree)w) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
477 TreeItem item = tree.getItem(new Point(e.x, e.y));
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
478 if (item !is null) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
479 tree.setSelection([ item ]);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
480 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
481 selEvent.item = item;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
482 } else if ( auto table = cast(Table)w) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
483 TableItem item = table.getItem(new Point(e.x, e.y));
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
484 if (item !is null) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
485 table.setSelection([ item ]);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
486 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
487 selEvent.item = item;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
488 } else if ( auto table = cast(TableTree)w) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
489 TableTreeItem item = table.getItem(new Point(e.x, e.y));
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
490 if (item !is null) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
491 table.setSelection([ item ]);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
492 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
493 selEvent.item = item;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
494 } else {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
495 return;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
496 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
497 if (selEvent.item is null) {
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
498 return;
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
499 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
500 fireSelectionEvent(selEvent);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
501 firePostSelectionEvent(selEvent);
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
502 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
503 };
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
504 }
c87617952847 some JFace modules
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
505 }