1 16 package com.google.gwt.user.client.ui; 17 18 import com.google.gwt.user.client.DOM; 19 import com.google.gwt.user.client.Element; 20 import com.google.gwt.user.client.Event; 21 import com.google.gwt.user.client.ui.impl.FocusImpl; 22 23 26 public abstract class FocusWidget extends Widget implements SourcesClickEvents, 27 SourcesFocusEvents, HasFocus { 28 29 private static final FocusImpl impl = FocusImpl.getFocusImplForWidget(); 30 31 36 protected static FocusImpl getFocusImpl() { 37 return impl; 38 } 39 40 private ClickListenerCollection clickListeners; 41 private FocusListenerCollection focusListeners; 42 private KeyboardListenerCollection keyboardListeners; 43 44 48 protected FocusWidget() { 49 } 50 51 56 protected FocusWidget(Element elem) { 57 setElement(elem); 58 } 59 60 public void addClickListener(ClickListener listener) { 61 if (clickListeners == null) { 62 clickListeners = new ClickListenerCollection(); 63 } 64 clickListeners.add(listener); 65 } 66 67 public void addFocusListener(FocusListener listener) { 68 if (focusListeners == null) { 69 focusListeners = new FocusListenerCollection(); 70 } 71 focusListeners.add(listener); 72 } 73 74 public void addKeyboardListener(KeyboardListener listener) { 75 if (keyboardListeners == null) { 76 keyboardListeners = new KeyboardListenerCollection(); 77 } 78 keyboardListeners.add(listener); 79 } 80 81 public int getTabIndex() { 82 return impl.getTabIndex(getElement()); 83 } 84 85 90 public boolean isEnabled() { 91 return !DOM.getElementPropertyBoolean(getElement(), "disabled"); 92 } 93 94 public void onBrowserEvent(Event event) { 95 switch (DOM.eventGetType(event)) { 96 case Event.ONCLICK: 97 if (clickListeners != null) { 98 clickListeners.fireClick(this); 99 } 100 break; 101 102 case Event.ONBLUR: 103 case Event.ONFOCUS: 104 if (focusListeners != null) { 105 focusListeners.fireFocusEvent(this, event); 106 } 107 break; 108 109 case Event.ONKEYDOWN: 110 case Event.ONKEYUP: 111 case Event.ONKEYPRESS: 112 if (keyboardListeners != null) { 113 keyboardListeners.fireKeyboardEvent(this, event); 114 } 115 break; 116 } 117 } 118 119 public void removeClickListener(ClickListener listener) { 120 if (clickListeners != null) { 121 clickListeners.remove(listener); 122 } 123 } 124 125 public void removeFocusListener(FocusListener listener) { 126 if (focusListeners != null) { 127 focusListeners.remove(listener); 128 } 129 } 130 131 public void removeKeyboardListener(KeyboardListener listener) { 132 if (keyboardListeners != null) { 133 keyboardListeners.remove(listener); 134 } 135 } 136 137 public void setAccessKey(char key) { 138 DOM.setElementProperty(getElement(), "accessKey", "" + key); 139 } 140 141 147 public void setEnabled(boolean enabled) { 148 DOM.setElementPropertyBoolean(getElement(), "disabled", !enabled); 149 } 150 151 public void setFocus(boolean focused) { 152 if (focused) { 153 impl.focus(getElement()); 154 } else { 155 impl.blur(getElement()); 156 } 157 } 158 159 public void setTabIndex(int index) { 160 impl.setTabIndex(getElement(), index); 161 } 162 163 protected void setElement(Element elem) { 164 super.setElement(elem); 165 sinkEvents(Event.ONCLICK | Event.FOCUSEVENTS | Event.KEYEVENTS); 166 } 167 168 171 void fireClickListeners() { 172 176 if (clickListeners != null) { 177 clickListeners.fireClick(this); 178 } 179 } 180 } 181 | Popular Tags |