• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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