tree model and selection model for tree visualization of currently tracked events/regattas/races

This commit is contained in:
Axel Uhl committed 2011-07-06 00:20:34 +02:00
1 parent 4446a60bec
commit a62004a307
4 files changed
+103 -8

No files matched your search

@@ -17,6 +17,7 @@ import com.google.gwt.event.dom.client.KeyUpHandler;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.user.cellview.client.CellList;
import com.google.gwt.user.cellview.client.CellTable;
import com.google.gwt.user.cellview.client.CellTree;
import com.google.gwt.user.cellview.client.Column;
import com.google.gwt.user.cellview.client.ColumnSortEvent.Handler;
import com.google.gwt.user.cellview.client.ColumnSortEvent.ListHandler;
@@ -75,7 +76,7 @@ public class EventManagementPanel extends FormPanel {
this.setWidget(verticalPanel);
verticalPanel.setSize("100%", "100%");
Grid grid = new Grid(9, 2);
Grid grid = new Grid(10, 2);
verticalPanel.add(grid);
verticalPanel.setCellWidth(grid, "100%");
@@ -244,13 +245,19 @@ public class EventManagementPanel extends FormPanel {
sb.appendEscaped(value.name);
}
};
eventsList = new ListDataProvider<EventDAO>();
TrackedEventsTreeModel trackedEventsModel = new TrackedEventsTreeModel(eventsList);
final CellTree eventsCellTree = new CellTree(trackedEventsModel, trackedEventsModel.getRoot());
grid.setWidget(8, 0, eventsCellTree);
final CellList<EventDAO> eventsCellList = new CellList<EventDAO>(eventCell);
grid.setWidget(8, 0, eventsCellList);
grid.setWidget(9, 0, eventsCellList);
grid.getCellFormatter().setHeight(6, 0, "100%");
eventsCellList.setWidth("100%");
eventsCellList.setVisibleRange(0, 5);
eventsCellList.setSelectionModel(new MultiSelectionModel<EventDAO>() {});
eventsList = new ListDataProvider<EventDAO>();
eventsList.addDataDisplay(eventsCellList);
Button btnRemove = new Button("Remove");
@@ -0,0 +1,84 @@
package com.sap.sailing.gwt.ui.client;
import com.google.gwt.cell.client.AbstractCell;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.view.client.ListDataProvider;
import com.google.gwt.view.client.MultiSelectionModel;
import com.google.gwt.view.client.TreeViewModel;
import com.sap.sailing.gwt.ui.shared.EventDAO;
import com.sap.sailing.gwt.ui.shared.RaceDAO;
import com.sap.sailing.gwt.ui.shared.RegattaDAO;
public class TrackedEventsTreeModel implements TreeViewModel {
private final String root = "Events";
private MultiSelectionModel<?> selectionModel;
private final ListDataProvider<EventDAO> events;
public TrackedEventsTreeModel(ListDataProvider<EventDAO> eventsList) {
this.events = eventsList;
selectionModel = new MultiSelectionModel<Object>();
}
@SuppressWarnings("unchecked")
private <T> MultiSelectionModel<T> getSelectionModel() {
return (MultiSelectionModel<T>) selectionModel;
}
@Override
public <T> NodeInfo<?> getNodeInfo(T value) {
if (value == root) {
return new DefaultNodeInfo<EventDAO>(events, new EventCell(),
getSelectionModel(), /* valueUpdater */ null);
} else if (value instanceof EventDAO) {
return new DefaultNodeInfo<RegattaDAO>(new ListDataProvider<RegattaDAO>(((EventDAO) value).regattas), new RegattaCell(),
getSelectionModel(), /* valueUpdater */ null);
} else if (value instanceof RegattaDAO) {
return new DefaultNodeInfo<RaceDAO>(new ListDataProvider<RaceDAO>(((RegattaDAO) value).races), new RaceCell(),
getSelectionModel(), /* valueUpdater */ null);
} else if (value instanceof RaceDAO) {
return null; // TODO do we need to return something more "useful" here?
} else {
throw new RuntimeException("Unknown object type in event tree: "+value+" ("+value.getClass().getName()+")");
}
}
@Override
public boolean isLeaf(Object value) {
if (value == root) {
return false;
} else if (value instanceof EventDAO) {
return false;
} else if (value instanceof RegattaDAO) {
return ((RegattaDAO) value).races.isEmpty();
} else {
return true;
}
}
public Object getRoot() {
return root;
}
private class EventCell extends AbstractCell<EventDAO> {
@Override
public void render(com.google.gwt.cell.client.Cell.Context context, EventDAO value, SafeHtmlBuilder sb) {
sb.appendEscaped(value.name);
}
}
private class RegattaCell extends AbstractCell<RegattaDAO> {
@Override
public void render(com.google.gwt.cell.client.Cell.Context context, RegattaDAO value, SafeHtmlBuilder sb) {
sb.appendEscaped(value.boatClass.name);
}
}
private class RaceCell extends AbstractCell<RaceDAO> {
@Override
public void render(com.google.gwt.cell.client.Cell.Context context, RaceDAO value, SafeHtmlBuilder sb) {
sb.appendEscaped(value.name);
}
}
}
@@ -1,15 +1,17 @@
package com.sap.sailing.gwt.ui.shared;
import java.util.List;
import com.google.gwt.user.client.rpc.IsSerializable;
public class EventDAO implements IsSerializable {
public String name;
public Iterable<RegattaDAO> regattas;
public Iterable<CompetitorDAO> competitors;
public List<RegattaDAO> regattas;
public List<CompetitorDAO> competitors;
public EventDAO() {}
public EventDAO(String name, Iterable<RegattaDAO> regattas, Iterable<CompetitorDAO> competitors) {
public EventDAO(String name, List<RegattaDAO> regattas, List<CompetitorDAO> competitors) {
super();
this.name = name;
this.regattas = regattas;
@@ -1,14 +1,16 @@
package com.sap.sailing.gwt.ui.shared;
import java.util.List;
import com.google.gwt.user.client.rpc.IsSerializable;
public class RegattaDAO implements IsSerializable {
public BoatClassDAO boatClass;
public Iterable<RaceDAO> races;
public List<RaceDAO> races;
public RegattaDAO() {}
public RegattaDAO(BoatClassDAO boatClass, Iterable<RaceDAO> races) {
public RegattaDAO(BoatClassDAO boatClass, List<RaceDAO> races) {
super();
this.boatClass = boatClass;
this.races = races;