package com.smartgwt.sample.showcase.client.basics.interaction; import com.smartgwt.client.types.Alignment; import com.smartgwt.client.types.DragAppearance; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.Img; import com.smartgwt.client.widgets.Label; import com.smartgwt.client.widgets.events.DrawEvent; import com.smartgwt.client.widgets.events.DrawHandler; import com.smartgwt.client.widgets.events.FocusChangedEvent; import com.smartgwt.client.widgets.events.FocusChangedHandler; import com.smartgwt.client.widgets.form.DynamicForm; import com.smartgwt.client.widgets.form.fields.ComboBoxItem; import com.smartgwt.client.widgets.form.fields.DateItem; import com.smartgwt.client.widgets.layout.HStack; import com.smartgwt.client.widgets.layout.VLayout; import com.smartgwt.sample.showcase.client.PanelFactory; import com.smartgwt.sample.showcase.client.ShowcasePanel; public class BasicFocusTabbingSample extends ShowcasePanel { private static final String DESCRIPTION = "Press the Tab key to cycle through the tab order starting from " + "the blue piece. Then drag reorder either piece, click on the leftmost piece and use Tab to cycle through " + "again. Tab order is automatically updated to reflect the visual order."; public static class Factory implements PanelFactory { private String id; public Canvas create() { BasicFocusTabbingSample panel = new BasicFocusTabbingSample(); id = panel.getID(); return panel; } public String getID() { return id; } public String getDescription() { return DESCRIPTION; } } public Canvas getViewPanel() { HStack hStack = new HStack(); hStack.setWidth(300); hStack.setHeight(100); hStack.setShowEdges(true); hStack.setCanAcceptDrop(true); hStack.setAnimateMembers(true); hStack.setDropLineThickness(4); final Label focusLabel = new Label(); focusLabel.setID("focusLabel"); focusLabel.setAlign(Alignment.CENTER); focusLabel.setTop(150); focusLabel.setWidth(300); focusLabel.setHeight(50); final Img bluePawn = new Img(); bluePawn.setID("bluePawn"); bluePawn.setLayoutAlign(Alignment.CENTER); bluePawn.setWidth(48); bluePawn.setHeight(48); bluePawn.setCanFocus(true); bluePawn.setSrc("pieces/48/pawn_blue.png"); bluePawn.setCanDragReposition(true); bluePawn.setCanDrop(true); bluePawn.setDragAppearance(DragAppearance.TARGET); bluePawn.addDrawHandler(new DrawHandler() { public void onDraw(DrawEvent event) { bluePawn.focus(); } }); bluePawn.addFocusChangedHandler(new FocusChangedHandler() { public void onFocusChanged(FocusChangedEvent event) { changeLabel(focusLabel, bluePawn.getID(), event.getHasFocus()); } }); ComboBoxItem field1 = new ComboBoxItem(); field1.setName("field1"); field1.setValueMap("Option 1", "Option 2"); DateItem field2 = new DateItem(); field2.setName("field2"); final DynamicForm simpleForm = new DynamicForm(); simpleForm.setID("simpleForm"); simpleForm.setLayoutAlign(Alignment.CENTER); simpleForm.setHeight(48); simpleForm.setFields(field1, field2); simpleForm.addFocusChangedHandler(new FocusChangedHandler() { public void onFocusChanged(FocusChangedEvent event) { changeLabel(focusLabel, simpleForm.getID(), event.getHasFocus()); } }); final Img greenPawn = new Img(); greenPawn.setID("greenPawn"); greenPawn.setLayoutAlign(Alignment.CENTER); greenPawn.setWidth(48); greenPawn.setHeight(48); greenPawn.setCanFocus(true); greenPawn.setSrc("pieces/48/pawn_green.png"); greenPawn.setCanDragReposition(true); greenPawn.setCanDrop(true); greenPawn.setDragAppearance(DragAppearance.TARGET); greenPawn.addFocusChangedHandler(new FocusChangedHandler() { public void onFocusChanged(FocusChangedEvent event) { changeLabel(focusLabel, greenPawn.getID(), event.getHasFocus()); } }); hStack.addMember(bluePawn); hStack.addMember(simpleForm); hStack.addMember(greenPawn); VLayout vLayout = new VLayout(); vLayout.setMembersMargin(10); vLayout.addMember(hStack); vLayout.addMember(focusLabel); return vLayout; } public String getIntro() { return DESCRIPTION; } private void changeLabel(Label label, String id, boolean hasFocus) { if (hasFocus) label.setContents(id + " has focus"); else label.setContents(""); } }