blob: 2e2e79dad1224701711a6d80c79ecf3d5fd57d42 [file] [log] [blame]
// Created on 09.08.2009
package org.eclipse.swt.custom;
import java.text.MessageFormat;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Control;
class SpreadSheetUtils {
static void checkNotNegative( final int parameter,
final String parameterName )
{
if( parameter < 0 ) {
String txt = "A negative value for parameter ''{0}'' is not allowed.";
String msg = MessageFormat.format( txt, new Object[] { parameterName } );
throw new IllegalArgumentException( msg );
}
}
static void checkNotNull( Object parameter, String parameterName ) {
if( parameter == null ) {
String txt = "Parameter ''{0}'' must not be null.";
String msg = MessageFormat.format( txt, new Object[]{ parameterName } );
throw new IllegalArgumentException( msg );
}
}
static int calcVisibleRows( final int height, final SpreadSheetModel model ) {
int rowIndex = 0;
int rowOffset = model.getRowOffset();
int calculatedHeight = model.getRowHeight( rowIndex + rowOffset );
while( calculatedHeight < height ) {
rowIndex++;
calculatedHeight += model.getRowHeight( rowIndex + rowOffset );
}
// we asume that the visible area most probably will show at least
// one row;
return rowIndex + 1;
}
static int calcVisibleColumns( final int width,
final SpreadSheetModel model )
{
int columnIndex = 0;
int columnOffset = model.getColumnOffset();
int calculatedWidth = model.getColumnWidth( columnIndex + columnOffset );
while( calculatedWidth < width ) {
columnIndex++;
calculatedWidth += model.getColumnWidth( columnIndex + columnOffset );
}
// we asume that the visible area most probably will show at least
// one column;
return columnIndex + 1;
}
static int calcYPosition( final int yOffset,
final int startIndex,
final int rowIndex,
final SpreadSheetModel model )
{
int result = yOffset;
for( int i = startIndex; i < rowIndex; i++ ) {
result += model.getRowHeight( i );
}
return result;
}
static int calcXPosition( final int xOffset,
final int startIndex,
final int columnIndex,
final SpreadSheetModel model )
{
int result = xOffset;
for( int i = startIndex; i < columnIndex; i++ ) {
result += model.getColumnWidth( i );
}
return result;
}
static void computeBounds( final Rectangle clientArea,
final Control control,
final SpreadSheetModel model )
{
SpreadSheetData data = ( SpreadSheetData )control.getLayoutData();
if( data != null ) {
int x = calcXPosition( clientArea.x,
0,
data.getColumnIndex(),
model );
int y = calcYPosition( clientArea.y,
0,
data.getRowIndex(),
model );
int width = model.getColumnWidth( data.getColumnIndex() )
- CellController.DEFAULT_GRID_LINE_BREADTH;
int height = model.getRowHeight( data.getRowIndex() )
- CellController.DEFAULT_GRID_LINE_BREADTH;
control.setBounds( x, y, width, height );
}
}
private SpreadSheetUtils() {
// prevent instance creation
}
}