blob: 37440c11615e9581902d5814dadf8cb8b5526698 [file] [log] [blame]
// Created on 22.08.2009
package org.eclipse.swt.custom;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Slider;
public class SliderController {
static final int PAGE_INCREMENT_OFFSET = 2;
static final int SLIDER_BREADTH = 20;
private final Composite spreadSheet;
private final HeaderController headerController;
private final Slider horizontalSlider;
private final Slider verticalSlider;
private final SpreadSheetModel model;
protected SliderController( final Composite spreadSheet,
final HeaderController headerController,
final SpreadSheetModel model )
{
SpreadSheetUtils.checkNotNull( spreadSheet, "spreadSheet" );
SpreadSheetUtils.checkNotNull( headerController, "headerController" );
this.spreadSheet = spreadSheet;
this.headerController = headerController;
this.model = model;
horizontalSlider = new Slider( spreadSheet, SWT.H_SCROLL );
horizontalSlider.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( final SelectionEvent evt ) {
int selection = SliderController.this.horizontalSlider.getSelection();
SliderController.this.model.setColumnOffset( selection );
}
} );
verticalSlider = new Slider( spreadSheet, SWT.V_SCROLL );
verticalSlider.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( final SelectionEvent evt ) {
int selection = SliderController.this.verticalSlider.getSelection();
SliderController.this.model.setRowOffset( selection );
};
} );
}
int getBreadth() {
return SliderController.SLIDER_BREADTH;
}
void adjustSlider() {
Rectangle clientArea = spreadSheet.getClientArea();
adjustHorizontalSlider( clientArea );
adjustVerticalSlider( clientArea );
}
private void adjustVerticalSlider( final Rectangle clientArea ) {
int vX = clientArea.width + headerController.getRowHeaderWidth();
int vHeight = clientArea.height + getBreadth();
verticalSlider.setBounds( vX, 0, getBreadth(), vHeight );
int rows = model.getVisibleRows();
verticalSlider.setMinimum( 0 );
verticalSlider.setMaximum( rows + PAGE_INCREMENT_OFFSET );
verticalSlider.setThumb( rows );
verticalSlider.setSelection( model.getRowOffset() );
}
private void adjustHorizontalSlider( final Rectangle clientArea ) {
int hY = clientArea.height + getBreadth();
int hWidth = clientArea.width + headerController.getRowHeaderWidth();
horizontalSlider.setBounds( 0, hY, hWidth, getBreadth() );
int columns = model.getVisibleColumns();
horizontalSlider.setMinimum( 0 );
horizontalSlider.setMaximum( columns + PAGE_INCREMENT_OFFSET );
horizontalSlider.setThumb( columns );
horizontalSlider.setSelection( model.getColumnOffset() );
}
}