/* class TableHeader * * Copyright (C) 2001 R M Pitman * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package charvax.swing.table; import charva.awt.Component; import charva.awt.Dimension; import charva.awt.Point; import charva.awt.Toolkit; /** * The TableHeader class is used by the ScrollPane for drawing the * column headers of a table. It shares the TableModel of its companion * Table object. */ public class TableHeader extends Component { /** Constructs a table of numRows_ and numColumns_ of empty cells * using a DefaultTableModel. */ public TableHeader(TableModel model_) { _model = model_; } public void setModel(TableModel model_) { _model = model_; } public boolean isFocusTraversable() { return false; } public void requestFocus() { } public void draw(Toolkit toolkit) { /* Get the absolute origin of this component. */ Point origin = getLocationOnScreen(); int columns = _model.getColumnCount(); int colorpair = getCursesColor(); /* Start by blanking out the table area and drawing the box * around the table. */ toolkit.blankBox(origin, getSize(), colorpair); toolkit.drawBox(origin, getSize(), colorpair); /* Now fill in the table headings */ int x = 1; int attr = Toolkit.A_BOLD; for (int i=0; i<columns; i++) { toolkit.setCursor(origin.addOffset(x, 0)); toolkit.addChar(' ', attr, colorpair); toolkit.addString(_model.getColumnName(i), attr, colorpair); toolkit.addChar(' ', attr, colorpair); x += getColumnWidth(i) + 1; } /* Now draw the vertical lines that divide the columns. */ x = getColumnWidth(0) + 1; for (int i=0; i<columns-1; i++) { toolkit.setCursor(origin.addOffset(x, 0)); toolkit.addChar(Toolkit.ACS_TTEE, 0, colorpair); // top tee x += getColumnWidth(i+1) + 1; } } /** * We pretend that the table header is two rows in height so that the * box gets drawn correctly. */ public Dimension getSize() { return new Dimension(this.getWidth(), this.getHeight()); } public Dimension minimumSize() { return getSize(); } public int getWidth() { int columns = _model.getColumnCount(); int width = 1; for (int i=0; i<columns; i++) { width += getColumnWidth(i) + 1; } return width; } public int getHeight() { return 2; } public void debug(int level_) { for (int i=0; i<level_; i++) System.err.print(" "); System.err.println("TableHeader origin=" + _origin + " size=" + getSize()); } private int getColumnWidth(int column_) { /* Calculate the column width for the specified column. */ int columnwidth = _model.getColumnName(column_).length() + 2; for (int j=0; j<_model.getRowCount(); j++) { Object value = _model.getValueAt(j, column_); if (value != null) { int width = value.toString().length(); if (width > columnwidth) columnwidth = width; } } return columnwidth; } //-------------------------------------------------------------------- // INSTANCE VARIABLES private TableModel _model = null; }