Hi all
I am trying to implement a CellTable with a custom Column Header which 
displays a SearchBox (simple Textbox) below the normal Column Text for 
searching purposes. Something like that:

|   Header 1        |   Header 2          |
|  SEARCHBOX  |     SEARCHBOX |
-------------------------------------------------------
|    ROW 1 
------------------------------------------------------
|    ROW 2 

As soon as the user types in a character into the SearchBox a 
RangeChangeEvent is fired which leads to a server requests and the CellTable 
is updated with the new filtered list. 
Basically everything works fine. 
However as soon as the CellTable is refreshed (after typing in a character 
into the searchbox) also the SearchBox loses its focus and the user has to 
click with the mouse again into the SearchBox which is a little bit clumsy. 
This is probably related to the fact that the render method of the custom 
header and its cell is called after the CellTable refresh. Is there any way 
how to set the focus back to the SearchBox? I tried to set tabindex=0 but it 
didn't help. 
The important code is in the SearchCell class. In override the 
onBrowserEvent function and in the *keyup *part I set the boolean flag 
isChanged = True. In the *blur *part I set it back to False. How can I check 
this flag and set the focus on the SearchBox again?


*Custom Header Class:*

public static class SearchHeader extends Header<SearchTerm> {
    @Override
    public void render(Context context, SafeHtmlBuilder sb) {
        super.render(context, sb);
    }
    private SearchTerm searchTerm;
    public SearchHeader(SearchTerm searchTerm,ValueUpdater<SearchTerm> 
valueUpdater) {
        super(new SearchCell());
        setUpdater(valueUpdater);
        this.searchTerm = searchTerm;
    }
    @Override
    public SearchTerm getValue() {
        return searchTerm;
    }
 }


*Custom Search Cell (used in the custom Header)*
*
*

public static class SearchCell extends AbstractCell<SearchTerm> {

    interface Template extends SafeHtmlTemplates {
        @Template("<div style=\"\">{0}</div>")
        SafeHtml header(String columnName);

        @Template("<div style=\"\"><input type=\"text\" 
value=\"{0}\"/></div>")
        SafeHtml input(String value);
    }

   private static Template template;
   private boolean isChanged = false;

   public SearchCell() {
       super("keydown","keyup","change","blur");
       if (template == null) {
           template = GWT.create(Template.class);
       }
   }

   @Override
   public void render(com.google.gwt.cell.client.Cell.Context context,
       SearchTerm value, SafeHtmlBuilder sb) {
       sb.append(template.header(value.getCriteria().toString()));
       sb.append(template.input(value.getValue()));
   }

            @Override
            public void onBrowserEvent(Context context,Element parent, 
SearchTerm value,NativeEvent event,ValueUpdater<SearchTerm> valueUpdater) {
                if (value == null)
                    return;
                super.onBrowserEvent(context, parent, value, event, 
valueUpdater);

      if ("keyup".equals(event.getType()))
      {
          isChanged = true;
          InputElement elem = getInputElement(parent);
          value.setValue(elem.getValue());
          if (valueUpdater != null)
              valueUpdater.update(value);
      }
      else if ("blur".equals(event.getType())) {
          isChanged =false;
      }
 }

          protected InputElement getInputElement(Element parent) {
              Element elem = 
parent.getElementsByTagName("input").getItem(0);
              assert(elem.getClass() == InputElement.class);
              return elem.cast();
          }
    }

-- 
You received this message because you are subscribed to the Google Groups 
"Google Web Toolkit" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/google-web-toolkit/-/aZDrRSejucAJ.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-web-toolkit?hl=en.

Reply via email to