package com.smartgwt.sample.showcase.client.grid.excel;
import java.util.ArrayList;
import com.smartgwt.client.data.DSCallback;
import com.smartgwt.client.data.DSRequest;
import com.smartgwt.client.data.DSResponse;
import com.smartgwt.client.data.DataSource;
import com.smartgwt.client.data.Record;
import com.smartgwt.client.data.RecordList;
import com.smartgwt.client.data.TextImportSettings;
import com.smartgwt.client.types.Alignment;
import com.smartgwt.client.types.Autofit;
import com.smartgwt.client.types.EscapingMode;
import com.smartgwt.client.widgets.Button;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.Dialog;
import com.smartgwt.client.widgets.events.ClickEvent;
import com.smartgwt.client.widgets.events.ClickHandler;
import com.smartgwt.client.widgets.form.DynamicForm;
import com.smartgwt.client.widgets.form.fields.ButtonItem;
import com.smartgwt.client.widgets.form.fields.FormItem;
import com.smartgwt.client.widgets.form.fields.StaticTextItem;
import com.smartgwt.client.widgets.form.fields.TextAreaItem;
import com.smartgwt.client.widgets.grid.ListGrid;
import com.smartgwt.client.widgets.grid.ListGridField;
import com.smartgwt.client.widgets.layout.VLayout;
import com.smartgwt.sample.showcase.client.PanelFactory;
import com.smartgwt.sample.showcase.client.ShowcasePanel;
import com.smartgwt.sample.showcase.client.data.CountryXmlDS;
public class ExcelToGridSample extends ShowcasePanel
implements ClickHandler {
private static final String DESCRIPTION = "<p>Open an Excel" +
" spreadsheet, select some cells, and use Ctrl-C to copy them." +
" Click the <b>Paste Cells</b> button to open a dialog where" +
" you can paste the data.</p>";
public static class Factory implements PanelFactory {
private String id;
public ShowcasePanel create() {
ExcelToGridSample panel = new ExcelToGridSample();
id = panel.getID();
return panel;
}
public String getID() {
return id;
}
public String getDescription() {
return DESCRIPTION;
}
}
private ListGrid countryList;
private class MyDialog extends Dialog implements
com.smartgwt.client.widgets.form.fields.events.ClickHandler {
private DynamicForm form;
private TextAreaItem textArea;
public void onClick(com.smartgwt.client.widgets.form.fields.events.ClickEvent event) {
String text = (String) this.textArea.getValue();
ExcelToGridSample.this.pasteText(text);
this.removeItem(this.form);
this.markForDestroy();
this.hide();
};
public MyDialog() {
final int WIDTH = 525;
final int HEIGHT = 300;
final String GUIDANCE = "Press Ctrl-V (Command-V on Mac) or right click (Option-click on Mac) to paste values, then hit \"Apply\"";
StaticTextItem label = new StaticTextItem();
label.setName("label");
label.setShowTitle(false);
label.setValue(GUIDANCE);
TextAreaItem area = new TextAreaItem();
area.setName("textArea");
area.setShowTitle(false);
area.setCanEdit(true);
area.setHeight("*");
area.setWidth("*");
this.textArea = area;
ButtonItem button = new ButtonItem();
button.setName("apply");
button.setAlign(Alignment.CENTER);
button.setTitle("Apply");
button.addClickHandler(this);
DynamicForm form = new DynamicForm();
form.setNumCols(1);
form.setWidth(WIDTH);
form.setHeight(HEIGHT);
form.setAutoFocus(true);
form.setFields(new FormItem[]{ label, this.textArea, button });
this.form = form;
this.setAutoSize(true);
this.setShowToolbar(false);
this.setCanDragReposition(true);
this.setTitle("Paste Cells");
this.setShowModalMask(true);
this.setIsModal(true);
this.addItem(form);
}
};
public void onClick(ClickEvent event) {
this.new MyDialog().draw();
};
private void pasteText(String text) {
ArrayList<String> fieldNames = new ArrayList<String>();
int[][] cells = this.countryList.getCellSelection().getSelectedCells();
if (cells.length == 0) {
countryList.getCellSelection().selectCell(0, 0);
cells = countryList.getCellSelection().getSelectedCells();
}
int firstCol = cells[0][1];
ListGridField[] fields = this.countryList.getFields();
for (int col = firstCol; col < fields.length; col++) {
fieldNames.add(this.countryList.getFieldName(col));
}
TextImportSettings settings = new TextImportSettings();
settings.setFieldList(fieldNames.toArray(new String[0]));
settings.setFieldSeparator("\t");
settings.setEscapingMode(EscapingMode.DOUBLE);
DataSource dataSource = this.countryList.getDataSource();
Record[] records = dataSource.recordsFromText(text, settings);
this.countryList.applyRecordData(new RecordList(records));
};
public Canvas getViewPanel() {
DataSource dataSource = CountryXmlDS.getInstance();
final ListGrid grid = new ListGrid();
grid.setCanEdit(true);
grid.setAutoFetchData(true);
grid.setCanDragSelect(true);
grid.setCanSelectCells(true);
grid.setDataSource(dataSource);
grid.setAutoFitData(Autofit.VERTICAL);
grid.fetchData(null, new DSCallback() {
@Override
public void execute(DSResponse dsResponse, Object data,
DSRequest dsRequest) {
grid.getCellSelection().selectCell(0, 0);
}
});
this.countryList = grid;
Button button = new Button();
button.setTitle("Paste Cells");
button.addClickHandler(this);
VLayout layout = new VLayout(15);
layout.addMember(grid);
layout.addMember(button);
return layout;
}
public String getIntro() {
return DESCRIPTION;
}
};