001    /*
002     * Copyright 2006 Mat Gessel <mat.gessel@gmail.com>
003     * 
004     * Licensed under the Apache License, Version 2.0 (the "License"); you may not
005     * use this file except in compliance with the License. You may obtain a copy of
006     * the License at
007     * 
008     * http://www.apache.org/licenses/LICENSE-2.0
009     * 
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
012     * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
013     * License for the specific language governing permissions and limitations under
014     * the License.
015     */
016    package asquare.gwt.tk.client.ui.behavior.impl;
017    
018    import asquare.gwt.tk.client.ui.behavior.FocusModel;
019    import asquare.gwt.tk.client.util.DomUtil;
020    
021    import com.google.gwt.user.client.DOM;
022    import com.google.gwt.user.client.Event;
023    import com.google.gwt.user.client.ui.*;
024    
025    public class TabFocusControllerStandard extends AbstractTabFocusController
026    {
027            public TabFocusControllerStandard()
028            {
029                    super(Event.ONKEYDOWN);
030            }
031            
032            // EventDelegate methods
033            protected boolean doBrowserEvent(Widget widget, Event event)
034            {
035                    if (DomUtil.eventGetKeyCode(event) == KeyboardListener.KEY_TAB)
036                    {
037                            FocusModel model = getModel();
038                            if (model != null && model.getSize() > 0)
039                            {
040                                    HasFocus next = model.getNextWidget(! DOM.eventGetShiftKey(event));
041                                    if (next != null && next != model.getFocusWidget())
042                                    {
043                                            next.setFocus(true);
044                                    }
045                            }
046                            
047                            // cancel tab keydown, thereby preventing focus change
048                            return false;
049                    }
050                    return true;
051            }
052    }