From f28318c002dc4ad62457c960a0b42620dcc0fd87 Mon Sep 17 00:00:00 2001 From: Matti Tahvonen Date: Thu, 29 Nov 2007 07:21:03 +0000 Subject: [PATCH] fixes #1133 svn changeset:3029/svn branch:trunk --- .../terminal/gwt/client/ui/IFilterSelect.java | 105 ++++++++++-------- 1 file changed, 60 insertions(+), 45 deletions(-) diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/IFilterSelect.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/IFilterSelect.java index e208e91846..48991eec3b 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/IFilterSelect.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/IFilterSelect.java @@ -419,6 +419,7 @@ public class IFilterSelect extends Composite implements Paintable, private int totalMatches; private boolean allowNewItem; private boolean nullSelectionAllowed; + private boolean enabled; public IFilterSelect() { selectedItemIcon.setVisible(false); @@ -484,6 +485,14 @@ public class IFilterSelect extends Composite implements Paintable, paintableId = uidl.getId(); this.client = client; + if (uidl.hasAttribute("disabled") || uidl.hasAttribute("readonly")) { + tb.setEnabled(false); + enabled = false; + } else { + tb.setEnabled(true); + enabled = true; + } + if (client.updateComponent(this, uidl, true)) { return; } @@ -585,7 +594,7 @@ public class IFilterSelect extends Composite implements Paintable, } public void onKeyDown(Widget sender, char keyCode, int modifiers) { - if (suggestionPopup.isAttached()) { + if (enabled && suggestionPopup.isAttached()) { switch (keyCode) { case KeyboardListener.KEY_DOWN: suggestionPopup.selectNextItem(); @@ -618,26 +627,28 @@ public class IFilterSelect extends Composite implements Paintable, } public void onKeyUp(Widget sender, char keyCode, int modifiers) { - switch (keyCode) { - case KeyboardListener.KEY_ENTER: - case KeyboardListener.KEY_TAB: - ; // NOP - break; - case KeyboardListener.KEY_DOWN: - case KeyboardListener.KEY_UP: - case KeyboardListener.KEY_PAGEDOWN: - case KeyboardListener.KEY_PAGEUP: - if (suggestionPopup.isAttached()) { + if (enabled) { + switch (keyCode) { + case KeyboardListener.KEY_ENTER: + case KeyboardListener.KEY_TAB: + ; // NOP break; - } else { - // open popup as from gadget - filterOptions(0, ""); - tb.selectAll(); + case KeyboardListener.KEY_DOWN: + case KeyboardListener.KEY_UP: + case KeyboardListener.KEY_PAGEDOWN: + case KeyboardListener.KEY_PAGEUP: + if (suggestionPopup.isAttached()) { + break; + } else { + // open popup as from gadget + filterOptions(0, ""); + tb.selectAll(); + break; + } + default: + filterOptions(currentPage); break; } - default: - filterOptions(currentPage); - break; } } @@ -645,39 +656,43 @@ public class IFilterSelect extends Composite implements Paintable, * Listener for popupopener */ public void onClick(Widget sender) { - // ask suggestionPopup if it was just closed, we are using GWT Popup's - // auto close feature - if (!suggestionPopup.isJustClosed()) { - filterOptions(0, ""); - } - DOM.eventPreventDefault(DOM.eventGetCurrentEvent()); - tb.selectAll(); - tb.setFocus(true); + if (enabled) { + // ask suggestionPopup if it was just closed, we are using GWT + // Popup's + // auto close feature + if (!suggestionPopup.isJustClosed()) { + filterOptions(0, ""); + } + DOM.eventPreventDefault(DOM.eventGetCurrentEvent()); + tb.selectAll(); + tb.setFocus(true); + + } } /* * Calculate minumum width for FilterSelect textarea */ private native int minWidth(String captions) /*-{ - if(!captions || captions.length <= 0) - return 0; - captions = captions.split("|"); - var d = $wnd.document.createElement("div"); - var html = ""; - for(var i=0; i < captions.length; i++) { - html += "
" + captions[i] + "
"; - // TODO apply same CSS classname as in suggestionmenu - } - d.style.position = "absolute"; - d.style.top = "0"; - d.style.left = "0"; - d.style.visibility = "hidden"; - d.innerHTML = html; - $wnd.document.body.appendChild(d); - var w = d.offsetWidth; - $wnd.document.body.removeChild(d); - return w; - }-*/; + if(!captions || captions.length <= 0) + return 0; + captions = captions.split("|"); + var d = $wnd.document.createElement("div"); + var html = ""; + for(var i=0; i < captions.length; i++) { + html += "
" + captions[i] + "
"; + // TODO apply same CSS classname as in suggestionmenu + } + d.style.position = "absolute"; + d.style.top = "0"; + d.style.left = "0"; + d.style.visibility = "hidden"; + d.innerHTML = html; + $wnd.document.body.appendChild(d); + var w = d.offsetWidth; + $wnd.document.body.removeChild(d); + return w; + }-*/; public void onFocus(Widget sender) { // NOP -- 2.39.5