View Javadoc
1 /* 2 * Created on 11.03.2004 3 */ 4 package org.xpcards.utils; 5 6 import java.util.Vector; 7 8 import org.eclipse.swt.widgets.Listener; 9 10 /*** 11 * @author galu02 12 */ 13 public class EventListenersSupport { 14 15 Class[] types; 16 Object[] listeners; 17 int level; 18 19 public void hook(Class type, Object listener) { 20 21 if ( listener == null || type == null || !type.isAssignableFrom(listener.getClass())) { 22 return; 23 } 24 25 if (types == null) 26 types = new Class[4]; 27 if (listeners == null) 28 listeners = new Listener[4]; 29 30 int length = types.length, index = length - 1; 31 while (index >= 0) { 32 if (types[index] != null) 33 break; 34 --index; 35 } 36 index++; 37 if (index == length) { 38 if (level == 0) { 39 index = 0; 40 for (int i = 0; i < types.length; i++) { 41 if (types[i] != null) { 42 types[index] = types[i]; 43 listeners[index] = listeners[i]; 44 index++; 45 } 46 } 47 for (int i = index; i < types.length; i++) { 48 types[i] = null; 49 listeners[i] = null; 50 } 51 } 52 if (index == length) { 53 Class[] newTypes = new Class[length + 4]; 54 System.arraycopy(types, 0, newTypes, 0, length); 55 types = newTypes; 56 Listener[] newListeners = new Listener[length + 4]; 57 System.arraycopy(listeners, 0, newListeners, 0, length); 58 listeners = newListeners; 59 } 60 } 61 types[index] = type; 62 listeners[index] = listener; 63 } 64 65 public boolean hooks(Class eventType) { 66 if (types == null) 67 return false; 68 for (int i = 0; i < types.length; i++) { 69 if (types[i] == eventType) 70 return true; 71 } 72 return false; 73 } 74 75 public Object[] getListeners(Class type) { 76 if (types == null) 77 return null; 78 level++; 79 try { 80 Vector v = null; 81 82 for (int i = 0; i < types.length; i++) { 83 if (types[i] == type) { 84 Object listener = listeners[i]; 85 if (listener != null) { 86 v.add(listener); 87 } 88 } 89 } 90 if ( v != null ) { 91 return v.toArray(); 92 } 93 } finally { 94 --level; 95 } 96 return null; 97 } 98 99 public int size() { 100 if (types == null) 101 return 0; 102 int count = 0; 103 for (int i = 0; i < types.length; i++) { 104 if (types[i] != null ) 105 count++; 106 } 107 return count; 108 } 109 110 void remove(int index) { 111 if (level == 0) { 112 int end = types.length - 1; 113 System.arraycopy(types, index + 1, types, index, end - index); 114 System.arraycopy( 115 listeners, 116 index + 1, 117 listeners, 118 index, 119 end - index); 120 index = end; 121 } 122 types[index] = null; 123 listeners[index] = null; 124 } 125 126 public void unhook(Class eventType, Listener listener) { 127 if (types == null) 128 return; 129 for (int i = 0; i < types.length; i++) { 130 if (types[i] == eventType && listeners[i] == listener) { 131 remove(i); 132 return; 133 } 134 } 135 } 136 137 }

This page was automatically generated by Maven