package oak.spreadsheetview;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
/**
* This cell is used within the SpreadsheetView
*/
public class SpreadsheetCell {
private Paint cellPaint;
private Paint selectedCellPaint;
private Paint textPaint;
private Paint selectedTextPaint;
private Paint borderPaint;
private Paint selectedBorderPaint;
private float drawnWidth;
private float drawnHeight;
private float insetCellWidth;
private float insetCellHeight;
private SpreadsheetView table;
private Drawable shape;
private Drawable selectedShape;
private float horizontalBorderWidth;
private float verticalBorderWidth;
public SpreadsheetCell(SpreadsheetView table, Paint cellPaint, Paint textPaint, Paint borderPaint,
float horizontalBorderWidth, float verticalBorderWidth) {
this.cellPaint = cellPaint;
this.selectedCellPaint = new Paint(cellPaint);
this.textPaint = textPaint;
this.selectedTextPaint = new Paint(textPaint);
this.textPaint.setTextAlign(Paint.Align.CENTER);
this.selectedTextPaint.setTextAlign(Paint.Align.CENTER);
this.borderPaint = borderPaint;
this.selectedBorderPaint = new Paint(borderPaint);
this.horizontalBorderWidth = horizontalBorderWidth;
this.verticalBorderWidth = verticalBorderWidth;
this.table = table;
this.shape = null;
}
public SpreadsheetCell(SpreadsheetView table, Drawable shape, Drawable selectedShape, Paint borderPaint,
Paint textPaint, float horizontalBorderWidth, float verticalBorderWidth) {
this.table = table;
this.shape = shape;
this.selectedShape = selectedShape;
this.textPaint = textPaint;
this.borderPaint = borderPaint;
this.selectedTextPaint = new Paint(textPaint);
this.textPaint.setTextAlign(Paint.Align.CENTER);
this.selectedTextPaint.setTextAlign(Paint.Align.CENTER);
this.horizontalBorderWidth = horizontalBorderWidth;
this.verticalBorderWidth = verticalBorderWidth;
this.selectedBorderPaint = new Paint(borderPaint);
}
/**
* Set the text size for the cells
*
* @param size size of text
*/
public void setTextSize(float size) {
textPaint.setTextSize(size);
selectedTextPaint.setTextSize(size);
}
public Paint getTextPaint() {
return textPaint;
}
/**
* Sets custom paint parameter to the text in each cell
*
* @param paint paint for text
*/
public void setTextPaint(Paint paint) {
textPaint = paint;
}
/**
* Seta custom typeface to the text
*
* @param typeface typeface for text
*/
public void setTypeface(Typeface typeface) {
textPaint.setTypeface(typeface);
}
public Typeface getTypeface() {
return textPaint.getTypeface();
}
/**
* Sets time in seconds for how long after touch buttons fade out
*
* @param typeface typeface for text
*/
public void setSelectedTypeface(Typeface typeface) {
selectedTextPaint.setTypeface(typeface);
}
/**
* Sets cusotm color to the text of each cell
*
* @param color color of text
*/
public void setTextColor(int color) {
textPaint.setColor(color);
}
public int getTextColor() {
return textPaint.getColor();
}
public Paint getSelectedTextPaint() {
return selectedTextPaint;
}
/**
* Set custom paint to the selected text of each cell
*
* @param paint paint for text
*/
public void setSelectedTextPaint(Paint paint) {
this.selectedTextPaint = paint;
}
/**
* Set custom color to the selected text of each cell
*
* @param color color of text
*/
public void setSelectedTextColor(int color) {
selectedTextPaint.setColor(color);
}
public int getSelectedTextColor() {
return selectedTextPaint.getColor();
}
/**
* Set the text size of the selected text of each cell
*
* @param size size of text
*/
public void setSelectedTextSize(float size) {
selectedTextPaint.setTextSize(size);
}
public float getSelectedTextSize() {
return selectedTextPaint.getTextSize();
}
public Paint getBorderPaint() {
return borderPaint;
}
/**
* Set custom paint used as the border of eachc ell
*
* @param paint paint for selected border
*/
public void setBorderPaint(Paint paint) {
this.borderPaint = paint;
}
public Paint getSelectedBorderPaint() {
return selectedBorderPaint;
}
/**
* Sets a custom paint border to a selected cell
*
* @param paint paint for border
*/
public void setSelectedBorderPaint(Paint paint) {
this.selectedBorderPaint = paint;
}
public Paint getCellPaint() {
return cellPaint;
}
/**
* Set custom paint to each cell
*
* @param paint paint for cell
*/
public void setCellPaint(Paint paint) {
this.cellPaint = paint;
}
public Paint getSelectedCellPaint() {
return selectedCellPaint;
}
/**
* Set custom paint to a cell used when selected
*
* @param paint paint for text
*/
public void setSelectedCellPaint(Paint paint) {
this.selectedCellPaint = paint;
}
public Drawable getDrawable() {
return this.shape;
}
/**
* Set custom drawable used for each cell
*
* @param drawable drawable for each cell
*/
public void setDrawable(Drawable drawable) {
this.shape = drawable;
}
public Drawable getSelectedDrawable() {
return this.selectedShape;
}
/**
* Set a custom drawable used when a cell is selected
*
* @param drawable drawable for each cell
*/
public void setSelectedDrawable(Drawable drawable) {
this.selectedShape = drawable;
}
/**
* Set the horizontal border width for each cell
*
* @param width width of border
*/
public void setHorizontalBorderWidth(float width) {
this.horizontalBorderWidth = width;
}
public float getHorizontalBorderWidth() {
return this.horizontalBorderWidth;
}
/**
* Set the vertical border width for each cell
*
* @param width width of border
*/
public void setVerticalBorderWidth(float width) {
this.verticalBorderWidth = width;
}
public float getVerticalBorderWidth() {
return this.verticalBorderWidth;
}
public void draw(Canvas canvas, String text, float leftX, float topY, float cellWidth,
float cellHeight, boolean selected) {
drawnWidth = cellWidth;
drawnHeight = cellHeight;
/*
if (leftX+cellWidth > table.getStickyTableWidth()){
drawnWidth = table.getStickyTableWidth() -leftX;
}
if (topY + cellHeight > table.getStickyTableHeight()){
drawnHeight = table.getStickyTableHeight() - topY;
}
*/
//draw the cell border
if (selected && selectedBorderPaint != null) {
canvas.drawRect(leftX, topY, leftX + drawnWidth, topY + drawnHeight, selectedBorderPaint);
} else if (borderPaint != null) {
canvas.drawRect(leftX, topY, leftX + drawnWidth, topY + drawnHeight, borderPaint);
}
//draw the cell itself
insetCellHeight = cellHeight - verticalBorderWidth * 2;
/*
if (insetCellHeight + verticalBorderWidth > drawnHeight){
insetCellHeight = drawnHeight - verticalBorderWidth;
}
*/
if (insetCellHeight < 0) {
insetCellHeight = 0;
}
insetCellWidth = cellWidth - horizontalBorderWidth * 2;
/*
if (insetCellWidth + horizontalBorderWidth>drawnWidth){
insetCellWidth = drawnWidth - horizontalBorderWidth;
}
*/
if (insetCellWidth < 0) {
insetCellWidth = 0;
}
if (selected) {
if (selectedShape != null) {
selectedShape.setBounds((int) (leftX + horizontalBorderWidth), (int) (topY + verticalBorderWidth),
(int) (leftX + horizontalBorderWidth + insetCellWidth),
(int) (topY + verticalBorderWidth + insetCellHeight));
selectedShape.draw(canvas);
} else {
canvas.drawRect(leftX + horizontalBorderWidth, topY + verticalBorderWidth,
leftX + horizontalBorderWidth + insetCellWidth,
topY + verticalBorderWidth + insetCellHeight, selectedCellPaint);
}
if (text == null) {
text = "null";
}
canvas.drawText(text, leftX + cellWidth / 2, topY + cellHeight / 2, selectedTextPaint); //may draw out of bounds
} else {
if (shape != null) {
shape.setBounds((int) (leftX + horizontalBorderWidth), (int) (topY + verticalBorderWidth),
(int) (leftX + horizontalBorderWidth + insetCellWidth),
(int) (topY + verticalBorderWidth + insetCellHeight));
shape.draw(canvas);
} else {
canvas.drawRect(leftX + horizontalBorderWidth, topY + verticalBorderWidth,
leftX + horizontalBorderWidth + insetCellWidth,
topY + verticalBorderWidth + insetCellHeight, cellPaint);
}
if (text == null) {
text = "null";
}
canvas.drawText(text, leftX + cellWidth / 2, topY + cellHeight / 2, textPaint); //may draw out of bounds
}
}
}