package de.uni_luebeck.inb.krabbenhoeft.eQTL.client; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.logical.shared.HasValueChangeHandlers; import com.google.gwt.event.logical.shared.ValueChangeEvent; import com.google.gwt.event.logical.shared.ValueChangeHandler; import com.google.gwt.event.shared.GwtEvent; import com.google.gwt.event.shared.HandlerManager; import com.google.gwt.event.shared.HandlerRegistration; import com.google.gwt.i18n.client.DateTimeFormat; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.Command; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Grid; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.MenuBar; import com.google.gwt.user.client.ui.MenuItem; import com.google.gwt.user.client.ui.Widget; import de.uni_luebeck.inb.krabbenhoeft.eQTL.api.gwt.DataSetLayerOverview; import de.uni_luebeck.inb.krabbenhoeft.eQTL.api.gwt.DataSetOverview; public class DataSetLayerSelector extends Composite implements HasValueChangeHandlers<DataSetLayerOverview> { interface DataSetLayerViewUiBinder extends UiBinder<Widget, DataSetLayerSelector> { } private static DataSetLayerViewUiBinder uiBinder = GWT.create(DataSetLayerViewUiBinder.class); private final DataSetOverview dataSetOverview; private final MenuItem menuItemForLayers; @UiField Label key, name, dateCreated; @UiField Grid layerTable; public DataSetLayerSelector(DataSetOverview overview, MenuItem menuItem) { this.dataSetOverview = overview; this.menuItemForLayers = menuItem; initWidget(uiBinder.createAndBindUi(this)); key.setText(Integer.toString(dataSetOverview.key)); name.setText(dataSetOverview.name); dateCreated.setText(DateTimeFormat.getShortDateTimeFormat().format(dataSetOverview.dateCreated)); initializeLayerTableWithHeader(); updateLayerTable(); updateLayerMenu(); } private void updateLayerMenu() { menuItemForLayers.setVisible(true); MenuBar subMenu = new MenuBar(true); for (int i = 0; i < dataSetOverview.layers.length; i++) { DataSetLayerOverview layerOverview = dataSetOverview.layers[i]; final int layerIndex = i; subMenu.addItem(layerOverview.layerKey + ": " + layerOverview.operationFromLastLayer, new Command() { public void execute() { selectLayer(layerIndex); } }); } menuItemForLayers.setSubMenu(subMenu); } private void initializeLayerTableWithHeader() { layerTable.resize(1, 5); layerTable.getRowFormatter().addStyleName(0, "tableHeader"); layerTable.setText(0, 0, "Key"); layerTable.setText(0, 1, "Operation"); layerTable.setText(0, 2, "Date created"); layerTable.setText(0, 3, "Number of Rows"); layerTable.setText(0, 4, "Columns"); } private void updateLayerTable() { final int numberOfLayers = dataSetOverview.layers.length; layerTable.resize(1 + numberOfLayers, 5); for (int i = 0; i < numberOfLayers; i++) { DataSetLayerOverview layerOverview = dataSetOverview.layers[i]; final Button button = new Button(Integer.toString(layerOverview.layerKey)); final int layerIndex = i; button.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { selectLayer(layerIndex); } }); layerTable.setWidget(1 + i, 0, button); layerTable.setText(1 + i, 1, layerOverview.operationFromLastLayer); layerTable.setText(1 + i, 2, DateTimeFormat.getShortDateTimeFormat().format(layerOverview.dateCreated)); layerTable.setText(1 + i, 3, Integer.toString(layerOverview.numberOfDataRows)); String columnString = ""; for (int j = 0; j < layerOverview.columns.length; j++) { if (j > 0) columnString += ", "; columnString += layerOverview.columns[j]; } layerTable.setText(1 + i, 4, columnString); } } public void addAndSelectNewLayer(DataSetLayerOverview dataSetLayerOverview) { final DataSetLayerOverview[] oldLayers = dataSetOverview.layers; dataSetOverview.layers = new DataSetLayerOverview[oldLayers.length + 1]; System.arraycopy(oldLayers, 0, dataSetOverview.layers, 0, oldLayers.length); dataSetOverview.layers[oldLayers.length] = dataSetLayerOverview; updateLayerTable(); updateLayerMenu(); selectLayer(oldLayers.length); } private Integer currentlySelected = null; private void selectLayer(int layerIndex) { if (currentlySelected != null) layerTable.getRowFormatter().removeStyleName(currentlySelected, "selectedLayer"); currentlySelected = layerIndex + 1; layerTable.getRowFormatter().addStyleName(currentlySelected, "selectedLayer"); ValueChangeEvent.fire(this, dataSetOverview.layers[layerIndex]); } // value change event handling private HandlerManager handlers = new HandlerManager(null); public HandlerRegistration addValueChangeHandler(ValueChangeHandler<DataSetLayerOverview> handler) { return handlers.addHandler(ValueChangeEvent.getType(), handler); } public void fireEvent(GwtEvent<?> event) { handlers.fireEvent(event); } }