/** * 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.RepeatingCommand; import com.sencha.gxt.desktopapp.client.DesktopBus; import com.sencha.gxt.desktopapp.client.FileBasedMiniAppPresenterImpl; import com.sencha.gxt.desktopapp.client.persistence.FileModel; import com.sencha.gxt.desktopapp.client.persistence.FileSystem; public class SpreadsheetPresenterImpl extends FileBasedMiniAppPresenterImpl implements SpreadsheetPresenter { private SpreadsheetChartPresenter spreadsheetChartPresenter; private Worksheet worksheet; public SpreadsheetPresenterImpl(DesktopBus desktopBus, FileSystem fileSystem, FileModel fileModel) { super(desktopBus, fileSystem, fileModel); } @Override public void onCellValueChange(int rowIndex, int columnIndex, String cellValue) { String cellName = SpreadsheetUtilities.getCellName(rowIndex, columnIndex); getSpreadsheetView().updateDetails(cellName, cellValue); // Give the change a chance to propagate to model and store Scheduler.get().scheduleFixedDelay(new RepeatingCommand() { @Override public boolean execute() { onSave(); getSpreadsheetView().refresh(); return false; } }, 250); } @Override public void onColumnCountChange(int newColumnCount) { getWorksheet().changeColumnCount(newColumnCount); getSpreadsheetView().updateGrid(); onSave(); updateChart(); } @Override public void onColumnMove() { onSave(); } @Override public void onDeleteColumn() { int deleteColumnIndex = getSpreadsheetView().getSelectedColumn(); if (deleteColumnIndex != -1) { getWorksheet().deleteColumn(deleteColumnIndex); getSpreadsheetView().updateGrid(); onSave(); updateChart(); } } @Override public void onDeleteRow() { int deleteRowIndex = getSpreadsheetView().getSelectedRow(); if (deleteRowIndex != -1) { getWorksheet().deleteRow(deleteRowIndex); getSpreadsheetView().updateGrid(); onSave(); } } @Override public void onDetailValueChange(String value) { getSpreadsheetView().updateSelectedCells(value); onSave(); } @Override public void onDragDrop() { onSave(); } @Override public void onInsertAbove() { insertRow(0); } @Override public void onInsertBelow() { insertRow(1); } @Override public void onInsertLeft() { insertColumn(0); } @Override public void onInsertRight() { insertColumn(1); } @Override public void onOpenChart() { getSpreadsheetChartPresenter().go(null); // before configure getSpreadsheetChartPresenter().configure(getFileModel(), getWorksheet()); getSpreadsheetChartPresenter().updateTitle(); } @Override public void onRowCountChange(int newRowCount) { getWorksheet().changeRowCount(newRowCount); onSave(); } @Override protected SpreadsheetView createFileBasedMiniAppView() { return new SpreadsheetViewImpl(this); } @Override protected String getTitle() { return "Spreadsheet - " + super.getTitle(); } @Override protected void setDisplayedContent(String value) { super.setDisplayedContent(value); getWorksheet().setValue(value); getSpreadsheetView().setValue(getWorksheet()); updateChart(); } protected void updateChart() { if (isSpreadsheetChartPresenter()) { getSpreadsheetChartPresenter().configure(getFileModel(), getWorksheet()); } } @Override protected void updateTitle() { super.updateTitle(); if (isSpreadsheetChartPresenter()) { getSpreadsheetChartPresenter().updateTitle(); } } private SpreadsheetChartPresenter getSpreadsheetChartPresenter() { if (spreadsheetChartPresenter == null) { spreadsheetChartPresenter = new SpreadsheetChartPresenterImpl(getFileSystem()); } return spreadsheetChartPresenter; } private SpreadsheetView getSpreadsheetView() { return (SpreadsheetView) super.getFileBasedMiniAppView(); } private Worksheet getWorksheet() { if (worksheet == null) { worksheet = new Worksheet((ColumnProvider) getSpreadsheetView()); } return worksheet; } private void insertColumn(int delta) { int insertColumnIndex = getSpreadsheetView().getSelectedColumn(); if (insertColumnIndex != -1) { getWorksheet().insertColumn(insertColumnIndex + delta); getSpreadsheetView().updateGrid(); onSave(); updateChart(); } } private void insertRow(int delta) { int insertRowIndex = getSpreadsheetView().getSelectedRow(); if (insertRowIndex != -1) { getWorksheet().insertRow(insertRowIndex + delta); getSpreadsheetView().updateGrid(); onSave(); } } private boolean isSpreadsheetChartPresenter() { return spreadsheetChartPresenter != null; } }