From a62004a307de5ebf69370816bb1063be77df5dbc Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Wed, 6 Jul 2011 00:20:34 +0200 Subject: [PATCH] tree model and selection model for tree visualization of currently tracked events/regattas/races --- .../gwt/ui/client/EventManagementPanel.java | 13 ++- .../gwt/ui/client/TrackedEventsTreeModel.java | 84 +++++++++++++++++++ .../sap/sailing/gwt/ui/shared/EventDAO.java | 8 +- .../sap/sailing/gwt/ui/shared/RegattaDAO.java | 6 +- 4 files changed, 103 insertions(+), 8 deletions(-) create mode 100755 java/com.sap.sailing.gwt.ui/src/com/sap/sailing/gwt/ui/client/TrackedEventsTreeModel.java diff --git a/java/com.sap.sailing.gwt.ui/src/com/sap/sailing/gwt/ui/client/EventManagementPanel.java b/java/com.sap.sailing.gwt.ui/src/com/sap/sailing/gwt/ui/client/EventManagementPanel.java index 8308a767f53..71402c41487 100755 --- a/java/com.sap.sailing.gwt.ui/src/com/sap/sailing/gwt/ui/client/EventManagementPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/com/sap/sailing/gwt/ui/client/EventManagementPanel.java @@ -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(); + + TrackedEventsTreeModel trackedEventsModel = new TrackedEventsTreeModel(eventsList); + final CellTree eventsCellTree = new CellTree(trackedEventsModel, trackedEventsModel.getRoot()); + grid.setWidget(8, 0, eventsCellTree); + final CellList eventsCellList = new CellList(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() {}); - eventsList = new ListDataProvider(); eventsList.addDataDisplay(eventsCellList); Button btnRemove = new Button("Remove"); diff --git a/java/com.sap.sailing.gwt.ui/src/com/sap/sailing/gwt/ui/client/TrackedEventsTreeModel.java b/java/com.sap.sailing.gwt.ui/src/com/sap/sailing/gwt/ui/client/TrackedEventsTreeModel.java new file mode 100755 index 00000000000..84f847ecbb3 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/com/sap/sailing/gwt/ui/client/TrackedEventsTreeModel.java @@ -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 events; + + public TrackedEventsTreeModel(ListDataProvider eventsList) { + this.events = eventsList; + selectionModel = new MultiSelectionModel(); + } + + @SuppressWarnings("unchecked") + private MultiSelectionModel getSelectionModel() { + return (MultiSelectionModel) selectionModel; + } + + @Override + public NodeInfo getNodeInfo(T value) { + if (value == root) { + return new DefaultNodeInfo(events, new EventCell(), + getSelectionModel(), /* valueUpdater */ null); + } else if (value instanceof EventDAO) { + return new DefaultNodeInfo(new ListDataProvider(((EventDAO) value).regattas), new RegattaCell(), + getSelectionModel(), /* valueUpdater */ null); + } else if (value instanceof RegattaDAO) { + return new DefaultNodeInfo(new ListDataProvider(((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 { + @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 { + @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 { + @Override + public void render(com.google.gwt.cell.client.Cell.Context context, RaceDAO value, SafeHtmlBuilder sb) { + sb.appendEscaped(value.name); + } + } +} diff --git a/java/com.sap.sailing.gwt.ui/src/com/sap/sailing/gwt/ui/shared/EventDAO.java b/java/com.sap.sailing.gwt.ui/src/com/sap/sailing/gwt/ui/shared/EventDAO.java index 61af8bb0d78..d6b5564a91c 100755 --- a/java/com.sap.sailing.gwt.ui/src/com/sap/sailing/gwt/ui/shared/EventDAO.java +++ b/java/com.sap.sailing.gwt.ui/src/com/sap/sailing/gwt/ui/shared/EventDAO.java @@ -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 regattas; - public Iterable competitors; + public List regattas; + public List competitors; public EventDAO() {} - public EventDAO(String name, Iterable regattas, Iterable competitors) { + public EventDAO(String name, List regattas, List competitors) { super(); this.name = name; this.regattas = regattas; diff --git a/java/com.sap.sailing.gwt.ui/src/com/sap/sailing/gwt/ui/shared/RegattaDAO.java b/java/com.sap.sailing.gwt.ui/src/com/sap/sailing/gwt/ui/shared/RegattaDAO.java index 4780e461a6d..6bb760bb194 100755 --- a/java/com.sap.sailing.gwt.ui/src/com/sap/sailing/gwt/ui/shared/RegattaDAO.java +++ b/java/com.sap.sailing.gwt.ui/src/com/sap/sailing/gwt/ui/shared/RegattaDAO.java @@ -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 races; + public List races; public RegattaDAO() {} - public RegattaDAO(BoatClassDAO boatClass, Iterable races) { + public RegattaDAO(BoatClassDAO boatClass, List races) { super(); this.boatClass = boatClass; this.races = races;