1 package autotest.common.ui; 2 3 import com.google.gwt.dom.client.Element; 4 import com.google.gwt.dom.client.EventTarget; 5 import com.google.gwt.event.dom.client.DoubleClickEvent; 6 import com.google.gwt.event.dom.client.DoubleClickHandler; 7 import com.google.gwt.event.dom.client.HasClickHandlers; 8 import com.google.gwt.event.shared.HandlerManager; 9 import com.google.gwt.event.shared.HandlerRegistration; 10 import com.google.gwt.user.client.ui.Button; 11 import com.google.gwt.user.client.ui.Composite; 12 import com.google.gwt.user.client.ui.HorizontalPanel; 13 import com.google.gwt.user.client.ui.Panel; 14 import com.google.gwt.user.client.ui.VerticalPanel; 15 16 public class DoubleListSelector extends Composite 17 implements MultiListSelectPresenter.DoubleListDisplay, 18 DoubleClickHandler { 19 private static final int VISIBLE_ITEMS = 10; 20 21 private Panel container = new HorizontalPanel(); 22 private ExtendedListBox availableBox = new ExtendedListBox(); 23 private ExtendedListBox selectedBox = new ExtendedListBox(); 24 private Button addButton = new Button("Add >"), addAllButton = new Button("Add all >"); 25 private Button removeButton = new Button("< Remove"), 26 removeAllButton = new Button("< Remove all"); 27 private Button moveUpButton = new Button("Move up"), moveDownButton = new Button("Move down"); 28 29 private HandlerManager availableListHandlerManager = new HandlerManager(availableBox); 30 private HandlerManager selectedListHandlerManager = new HandlerManager(selectedBox); 31 DoubleListSelector()32 public DoubleListSelector() { 33 availableBox.setVisibleItemCount(VISIBLE_ITEMS); 34 selectedBox.setVisibleItemCount(VISIBLE_ITEMS); 35 36 Panel moveButtonPanel = new VerticalPanel(); 37 moveButtonPanel.add(addAllButton); 38 moveButtonPanel.add(addButton); 39 moveButtonPanel.add(removeButton); 40 moveButtonPanel.add(removeAllButton); 41 42 Panel reorderButtonPanel = new VerticalPanel(); 43 reorderButtonPanel.add(moveUpButton); 44 reorderButtonPanel.add(moveDownButton); 45 46 container.add(availableBox); 47 container.add(moveButtonPanel); 48 container.add(selectedBox); 49 container.add(reorderButtonPanel); 50 51 initWidget(container); 52 53 addDomHandler(this, DoubleClickEvent.getType()); 54 } 55 getAddAllButton()56 public HasClickHandlers getAddAllButton() { 57 return addAllButton; 58 } 59 getAddButton()60 public HasClickHandlers getAddButton() { 61 return addButton; 62 } 63 getRemoveButton()64 public HasClickHandlers getRemoveButton() { 65 return removeButton; 66 } 67 getRemoveAllButton()68 public HasClickHandlers getRemoveAllButton() { 69 return removeAllButton; 70 } 71 getMoveUpButton()72 public HasClickHandlers getMoveUpButton() { 73 return moveUpButton; 74 } 75 getMoveDownButton()76 public HasClickHandlers getMoveDownButton() { 77 return moveDownButton; 78 } 79 getAvailableList()80 public SimplifiedList getAvailableList() { 81 return availableBox; 82 } 83 getSelectedList()84 public SimplifiedList getSelectedList() { 85 return selectedBox; 86 } 87 88 @Override addDoubleClickHandler(DoubleClickHandler handler)89 public HandlerRegistration addDoubleClickHandler(DoubleClickHandler handler) { 90 availableListHandlerManager.addHandler(DoubleClickEvent.getType(), handler); 91 selectedListHandlerManager.addHandler(DoubleClickEvent.getType(), handler); 92 // removing handlers is unimplemented for now. if the need arises, it's easy to implement. 93 return null; 94 } 95 96 @Override onDoubleClick(DoubleClickEvent event)97 public void onDoubleClick(DoubleClickEvent event) { 98 EventTarget target = event.getNativeEvent().getEventTarget(); 99 Element targetElement = Element.as(target); 100 if (availableBox.getElement().isOrHasChild(targetElement)) { 101 availableListHandlerManager.fireEvent(event); 102 } else if (selectedBox.getElement().isOrHasChild(targetElement)) { 103 selectedListHandlerManager.fireEvent(event); 104 } else { 105 return; 106 } 107 108 event.stopPropagation(); 109 } 110 } 111