Mercurial > projects > dwt-win
comparison dwt/widgets/EventTable.d @ 213:36f5cb12e1a2
Update to SWT 3.4M7
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Sat, 17 May 2008 17:34:28 +0200 |
parents | 92c102dd64a3 |
children | fd9c62a2998e |
comparison
equal
deleted
inserted
replaced
212:ab60f3309436 | 213:36f5cb12e1a2 |
---|---|
30 | 30 |
31 class EventTable { | 31 class EventTable { |
32 int [] types; | 32 int [] types; |
33 Listener [] listeners; | 33 Listener [] listeners; |
34 int level; | 34 int level; |
35 static final int GROW_SIZE = 4; | |
36 | |
37 public Listener [] getListeners (int eventType) { | |
38 if (types is null) return new Listener [0]; | |
39 int count = 0; | |
40 for (int i=0; i<types.length; i++) { | |
41 if (types [i] is eventType) count++; | |
42 } | |
43 if (count is 0) return new Listener [0]; | |
44 Listener [] result = new Listener [count]; | |
45 count = 0; | |
46 for (int i=0; i<types.length; i++) { | |
47 if (types [i] is eventType) { | |
48 result [count++] = listeners [i]; | |
49 } | |
50 } | |
51 return result; | |
52 } | |
35 | 53 |
36 public void hook (int eventType, Listener listener) { | 54 public void hook (int eventType, Listener listener) { |
37 if (types is null) types = new int [4]; | 55 if (types is null) types = new int [GROW_SIZE]; |
38 if (listeners is null) listeners = new Listener [4]; | 56 if (listeners is null) listeners = new Listener [GROW_SIZE]; |
39 int length = types.length, index = length - 1; | 57 int length = types.length, index = length - 1; |
40 while (index >= 0) { | 58 while (index >= 0) { |
41 if (types [index] !is 0) break; | 59 if (types [index] !is 0) break; |
42 --index; | 60 --index; |
43 } | 61 } |
44 index++; | 62 index++; |
45 if (index is length) { | 63 if (index is length) { |
46 int [] newTypes = new int [length + 4]; | 64 int [] newTypes = new int [length + GROW_SIZE]; |
47 System.arraycopy (types, 0, newTypes, 0, length); | 65 System.arraycopy (types, 0, newTypes, 0, length); |
48 types = newTypes; | 66 types = newTypes; |
49 Listener [] newListeners = new Listener [length + 4]; | 67 Listener [] newListeners = new Listener [length + GROW_SIZE]; |
50 SimpleType!(Listener).arraycopy (listeners, 0, newListeners, 0, length); | 68 SimpleType!(Listener).arraycopy (listeners, 0, newListeners, 0, length); |
51 listeners = newListeners; | 69 listeners = newListeners; |
52 } | 70 } |
53 types [index] = eventType; | 71 types [index] = eventType; |
54 listeners [index] = listener; | 72 listeners [index] = listener; |