Home | History | Annotate | Download | only in tko
      1 package autotest.tko;
      2 
      3 import com.google.gwt.event.dom.client.ClickEvent;
      4 import com.google.gwt.event.dom.client.ClickHandler;
      5 import com.google.gwt.user.client.ui.Anchor;
      6 import com.google.gwt.user.client.ui.Composite;
      7 import com.google.gwt.user.client.ui.HorizontalPanel;
      8 import com.google.gwt.user.client.ui.Panel;
      9 import com.google.gwt.user.client.ui.VerticalPanel;
     10 import com.google.gwt.user.client.ui.Widget;
     11 
     12 import java.util.ArrayList;
     13 import java.util.Collections;
     14 import java.util.List;
     15 
     16 
     17 class WidgetList<T extends Widget> extends Composite implements ClickHandler {
     18     public interface ListWidgetFactory<S extends Widget> {
     19         public List<String> getWidgetTypes();
     20         public S getNewWidget(String type);
     21     }
     22 
     23     private ListWidgetFactory<T> factory;
     24     private List<T> widgets = new ArrayList<T>();
     25     private Panel widgetPanel = new VerticalPanel();
     26     private HorizontalPanel addLinksPanel = new HorizontalPanel();
     27 
     28     public WidgetList(ListWidgetFactory<T> factory) {
     29         this.factory = factory;
     30 
     31         addLinksPanel.setSpacing(10);
     32         for (String type : factory.getWidgetTypes()) {
     33             Anchor addLink = new Anchor(type);
     34             addLink.addClickHandler(this);
     35             addLinksPanel.add(addLink);
     36         }
     37 
     38         Panel outerPanel = new VerticalPanel();
     39         outerPanel.add(widgetPanel);
     40         outerPanel.add(addLinksPanel);
     41         initWidget(outerPanel);
     42     }
     43 
     44     public void addWidget(T widget) {
     45         widgets.add(widget);
     46         widgetPanel.add(widget);
     47     }
     48 
     49     public void deleteWidget(T widget) {
     50         widgets.remove(widget);
     51         widgetPanel.remove(widget);
     52     }
     53 
     54     public void onClick(ClickEvent event) {
     55         assert (event.getSource() instanceof Anchor);
     56 
     57         Anchor addLink = (Anchor) event.getSource();
     58         T widget = factory.getNewWidget(addLink.getText());
     59         addWidget(widget);
     60     }
     61 
     62     public List<T> getWidgets() {
     63         return Collections.unmodifiableList(widgets);
     64     }
     65 
     66     public void clear() {
     67         widgets.clear();
     68         widgetPanel.clear();
     69     }
     70 }
     71