package org.geogebra.web.web.gui.view.data;
import org.geogebra.common.gui.view.data.TwoVarInferenceModel.UpdatePanel;
import org.geogebra.common.gui.view.data.TwoVarStatModel;
import org.geogebra.common.gui.view.data.TwoVarStatModel.TwoVarStatListener;
import org.geogebra.common.kernel.geos.GeoList;
import org.geogebra.common.main.Localization;
import org.geogebra.web.html5.gui.util.LayoutUtilW;
import org.geogebra.web.html5.main.AppW;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
/**
* Extension of StatTable that displays summary statistics for two data sets.
* The two data sets are taken from the current collection of data provided by a
* MultiVar StatDialog. JComboBoxes for choosing data sets are embedded in the
* table.
*
* @author G. Sturr
*
*/
public class TwoVarStatPanelW extends StatTableW implements TwoVarStatListener {
protected AppW app;
protected DataAnalysisViewW statDialog;
protected MyTable statTable;
private TwoVarStatModel model;
private UpdatePanel listener;
public TwoVarStatPanelW(AppW app, DataAnalysisViewW statDialog,
boolean isPairedData, UpdatePanel listener) {
super();
model = new TwoVarStatModel(app, isPairedData, this);
this.app = app;
this.statDialog = statDialog;
statTable = getTable();
this.listener = listener;
setTable(isPairedData);
}
public void setTable(boolean isPairedData) {
model.setPairedData(isPairedData);
setStatTable(model.getRowCount(), model.getRowNames(),
model.getColumnCount(), model.getColumnNames());
// create an array of data titles for the table celll comboboxes
// the array includes and extra element to store the combo box label
String[] titles = statDialog.getDataTitles();
Localization loc = app.getLocalization();
createListBoxCell(0, 0, loc.getMenu("Sample1"), titles,
model.getSelectedDataIndex0());
createListBoxCell(1, 0, loc.getMenu("Sample2"), titles,
model.getSelectedDataIndex1());
}
private void createListBoxCell(final int row, final int col, String title, String[] items,
int selectedIdx) {
Label label = new Label(title);
final ListBox listBox = new ListBox();
for (String item: items) {
listBox.addItem(item);
}
listBox.addChangeHandler(new ChangeHandler() {
@Override
public void onChange(ChangeEvent event) {
int idx = listBox.getSelectedIndex();
if (row == 0) {
model.setSelectedDataIndex0(idx);
} else {
model.setSelectedDataIndex1(idx);
}
updatePanel();
listener.updatePanel();
}
});
listBox.setSelectedIndex(selectedIdx);
FlowPanel p = new FlowPanel();
p.add(LayoutUtilW.panelRow(label, listBox));
getTable().setWidget(row, col, p);
}
public void updatePanel() {
model.update();
}
@Override
public void setValueAt(String value, int row, int col) {
statTable.setValueAt(value, row, col);
}
@Override
public void setValueAt(double value, int row, int col) {
statTable.setValueAt(statDialog.format(value), row, col);
}
@Override
public GeoList getDataSelected() {
return statDialog.getController().getDataSelected();
}
@Override
public double[] getValueArray(GeoList list) {
return statDialog.getController().getValueArray(list);
}
public Integer[] getSelectedDataIndex() {
return model.getSelectedDataIndex();
}
}