package com.sap.opportunity.ui.client;
import java.util.Date;
import com.extjs.gxt.ui.client.Style.Orientation;
import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.event.SliderEvent;
import com.extjs.gxt.ui.client.util.Margins;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.Status;
import com.extjs.gxt.ui.client.widget.layout.CenterLayout;
import com.extjs.gxt.ui.client.widget.layout.RowData;
import com.extjs.gxt.ui.client.widget.layout.RowLayout;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.client.ui.RootPanel;
/**
* Entry point classes define <code>onModuleLoad()</code>.
*/
public class Main implements EntryPoint, Listener<SliderEvent>, IStatusDisplay {
private Status statusBar;
private TimeTravelPanel timeTravelPanel;
private OpportunitiesPanel opporunitiesPanel;
private ChartPanel chartPanel;
/**
* This is the entry point method.
*/
public void onModuleLoad() {
ContentPanel panel = new ContentPanel();
panel.setHeaderVisible(false);
panel.setLayout(new RowLayout(Orientation.VERTICAL));
ContentPanel statusPanel = new ContentPanel(new CenterLayout());
statusPanel.setHeaderVisible(false);
statusPanel.setBorders(false);
statusBar = new Status();
statusPanel.add(statusBar);
timeTravelPanel = new TimeTravelPanel();
timeTravelPanel.addSliderListener(this);
timeTravelPanel.setHeight(100);
chartPanel = new ChartPanel(this);
chartPanel.setHeight(300);
opporunitiesPanel = new OpportunitiesPanel(this, chartPanel);
opporunitiesPanel.setHeight(430);
panel.add(statusPanel, new RowData(1, -1, new Margins(4)));
panel.add(timeTravelPanel, new RowData(1, -1, new Margins(4)));
panel.add(chartPanel, new RowData(1, -1, new Margins(4)));
panel.add(opporunitiesPanel, new RowData(1, -1, new Margins(4)));
RootPanel.get().add(panel);
}
@Override
public void handleEvent(SliderEvent sliderEvent) {
// in case we switch to "history" mode
if (sliderEvent.getOldValue() == 0 && sliderEvent.getNewValue() < 0) {
opporunitiesPanel.switchToHistoryMode();
}
// in case we switch from "history" mode to live data
else if (sliderEvent.getOldValue() < 0 && sliderEvent.getNewValue() == 0) {
opporunitiesPanel.switchToLiveMode();
}
// update the historic data in case we are time travelling
if (sliderEvent.getNewValue() < 0) {
long ts = System.currentTimeMillis();
ts = ts + (sliderEvent.getNewValue() * 10000); // slider Range is [-180, 0]
Date txTime = new Date(ts);
//TODO: back to: CalendarUtil.addDaysToDate(txTime, sliderEvent.getNewValue());
opporunitiesPanel.updateHistoryData(txTime);
chartPanel.updateChart(txTime);
}
else {
chartPanel.updateChart();
}
}
int rpcCount = 0;
@Override
public void error(String message) {
rpcCount = 0;
statusBar.clearStatus(message);
}
@Override
public void finishRPC() {
if (--rpcCount == 0) {
rpcCount = 0;
statusBar.clearStatus("");
}
else if (rpcCount > 0) {
statusBar.setBusy("Talking with server (" + rpcCount +" pending requests)");
}
else {
rpcCount = 0;
}
}
@Override
public void startRPC() {
++rpcCount;
statusBar.setBusy("Talking with server (" + rpcCount +" pending requests)");
}
}