/**
* Sencha GXT 3.0.0b - Sencha for GWT
* Copyright(c) 2007-2012, Sencha, Inc.
* licensing@sencha.com
*
* http://www.sencha.com/products/gxt/license/
*/
package com.sencha.gxt.desktopapp.client.spreadsheet;
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.core.client.Scheduler.ScheduledCommand;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.KeyDownEvent;
import com.google.gwt.event.dom.client.KeyDownHandler;
import com.google.gwt.event.logical.shared.SelectionEvent;
import com.google.gwt.event.logical.shared.SelectionHandler;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Widget;
import com.sencha.gxt.desktopapp.client.spreadsheet.images.Images;
import com.sencha.gxt.widget.core.client.button.TextButton;
import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutData;
import com.sencha.gxt.widget.core.client.event.SelectEvent;
import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler;
import com.sencha.gxt.widget.core.client.form.NumberPropertyEditor;
import com.sencha.gxt.widget.core.client.form.SpinnerField;
import com.sencha.gxt.widget.core.client.form.TextField;
import com.sencha.gxt.widget.core.client.toolbar.LabelToolItem;
import com.sencha.gxt.widget.core.client.toolbar.ToolBar;
public class SpreadsheetToolBar implements IsWidget {
private SpreadsheetPresenter spreadsheetPresenter;
private ToolBar toolBar;
private TextButton openChartTextButton;
private SpinnerField<Integer> columnCountSpinnerField;
private SpinnerField<Integer> rowCountSpinnerField;
private LabelToolItem cellNameLabel;
private TextField cellValueTextField;
private SelectHandler openChartSelectHandler;
public SpreadsheetToolBar(SpreadsheetPresenter spreadsheetPresenter) {
this.spreadsheetPresenter = spreadsheetPresenter;
}
@Override
public Widget asWidget() {
return getToolBar();
}
public void setDetails(String cellName, String cellValue) {
getCellNameLabel().setLabel(getCellLabel(cellName));
getCellValueTextField().setValue(cellValue);
}
public void setDimensions(int rowCount, int columnCount) {
getRowCountSpinnerField().setValue(rowCount);
getColumnCountSpinnerField().setValue(columnCount);
}
private SpinnerField<Integer> createSpinner(final ValueChangeHandler<Integer> valueChangeHandler) {
final SpinnerField<Integer> spinnerField = new SpinnerField<Integer>(
new NumberPropertyEditor.IntegerPropertyEditor());
spinnerField.addSelectionHandler(new SelectionHandler<Integer>() {
@Override
public void onSelection(SelectionEvent<Integer> event) {
ValueChangeEvent.fire(spinnerField, event.getSelectedItem());
}
});
spinnerField.addValueChangeHandler(valueChangeHandler);
spinnerField.setMaxValue(100);
spinnerField.setMinValue(1);
spinnerField.setAllowNegative(false);
spinnerField.setAllowBlank(false);
spinnerField.setAllowDecimals(false);
spinnerField.setWidth(50);
return spinnerField;
}
private String getCellLabel(String cellName) {
return cellName == null ? "Cell: " : (cellName + ": ");
}
private LabelToolItem getCellNameLabel() {
if (cellNameLabel == null) {
cellNameLabel = new LabelToolItem(getCellLabel(null));
}
return cellNameLabel;
}
private BoxLayoutData getCellValueLayoutData() {
BoxLayoutData cellLayoutData = new BoxLayoutData();
cellLayoutData.setFlex(1);
return cellLayoutData;
}
private TextField getCellValueTextField() {
if (cellValueTextField == null) {
cellValueTextField = new TextField();
cellValueTextField.setToolTip(SpreadsheetViewImpl.CELL_TOOL_TIP);
cellValueTextField.addKeyDownHandler(new KeyDownHandler() {
@Override
public void onKeyDown(KeyDownEvent event) {
if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) {
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
@Override
public void execute() {
getPresenter().onDetailValueChange(cellValueTextField.getValue());
}
});
}
}
});
}
return cellValueTextField;
}
private SpinnerField<Integer> getColumnCountSpinnerField() {
if (columnCountSpinnerField == null) {
columnCountSpinnerField = createSpinner(new ValueChangeHandler<Integer>() {
@Override
public void onValueChange(ValueChangeEvent<Integer> event) {
getPresenter().onColumnCountChange(event.getValue());
}
});
}
return columnCountSpinnerField;
}
private SelectHandler getOpenChartSelectHandler() {
if (openChartSelectHandler == null) {
openChartSelectHandler = new SelectHandler() {
@Override
public void onSelect(SelectEvent event) {
getPresenter().onOpenChart();
}
};
}
return openChartSelectHandler;
}
private TextButton getOpenChartTextButton() {
if (openChartTextButton == null) {
openChartTextButton = new TextButton();
openChartTextButton.setToolTip("Open Chart");
openChartTextButton.setIcon(Images.getImageResources().chart_bar());
openChartTextButton.addSelectHandler(getOpenChartSelectHandler());
}
return openChartTextButton;
}
private SpreadsheetPresenter getPresenter() {
return spreadsheetPresenter;
}
private SpinnerField<Integer> getRowCountSpinnerField() {
if (rowCountSpinnerField == null) {
rowCountSpinnerField = createSpinner(new ValueChangeHandler<Integer>() {
@Override
public void onValueChange(ValueChangeEvent<Integer> event) {
getPresenter().onRowCountChange(event.getValue());
}
});
}
return rowCountSpinnerField;
}
private Widget getToolBar() {
if (toolBar == null) {
toolBar = new ToolBar();
toolBar.add(getOpenChartTextButton());
toolBar.add(new LabelToolItem("Rows: "));
toolBar.add(getRowCountSpinnerField());
toolBar.add(new LabelToolItem("Cols: "));
toolBar.add(getColumnCountSpinnerField());
toolBar.add(getCellNameLabel());
toolBar.add(getCellValueTextField(), getCellValueLayoutData());
}
return toolBar;
}
}