/*
* Gruntspud
*
* Copyright (C) 2002 Brett Smith.
*
* Written by: Brett Smith <t_magicthize@users.sourceforge.net>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public License
* as published by the Free Software Foundation; either version 2 of
* the License, or (at your option) any later version.
* This program 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 Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
package gruntspud.ui.view;
import gruntspud.CVSFileNode;
import gruntspud.Constants;
import gruntspud.Gruntspud;
import gruntspud.GruntspudContext;
import gruntspud.SortCriteria;
import gruntspud.ui.CVSFileNodeFileSizeTableCellRenderer;
import gruntspud.ui.IconTableCellRenderer;
import gruntspud.ui.ListSearch;
import gruntspud.ui.ListSearchListener;
import gruntspud.ui.SortableTableHeader;
import gruntspud.ui.UIUtil;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Rectangle;
import javax.swing.Icon;
import javax.swing.JTable;
import javax.swing.JViewport;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
/**
* Description of the Class
*
*@author magicthize
*@created 26 May 2002
*/
public class CVSFileNodeTable
extends JTable
implements ListSearchListener {
//
private GruntspudContext context;
private String tableGeometryPropertyPrefix;
private ListSearch listSearch;
/**
* Constructor for the CVSFileNodeTable object
*/
public CVSFileNodeTable(String tableGeometryPropertyPrefix) {
super();
this.tableGeometryPropertyPrefix = tableGeometryPropertyPrefix;
}
/**
* DOCUMENT ME!
*
* @param context DOCUMENT ME!
* @param model DOCUMENT ME!
* @param sortCriteria DOCUMENT ME!
* @param textMask DOCUMENT ME!
*/
public void init(GruntspudContext context, CVSFileNodeTableModel model,
SortCriteria sortCriteria, String textMask) {
this.context = context;
int insets = context.getHost().getFileRendererInsets().top +
context.getHost().getFileRendererInsets().bottom;
Icon icon = context.getHost().getIcon(
Constants.ICON_TOOL_SMALL_DEFAULT_FOLDER_OPEN);
int rh = Math.max(
insets + ( icon == null ? 0 : icon.getIconHeight() ),
16 + insets);
setRowHeight(rh);
setModel(model);
setShowGrid(false);
setAutoResizeMode(0);
setDefaultRenderer(Icon.class, new IconTableCellRenderer());
getColumnModel().getColumn(7).setCellRenderer(new
CVSFileNodeFileSizeTableCellRenderer());
CVSFileNodeTableCellRenderer renderer = new CVSFileNodeTableCellRenderer(textMask);
setDefaultRenderer(CVSFileNode.class, renderer);
renderer.setHighlight(context.getHost().getBooleanProperty(
Constants.OPTIONS_DISPLAY_HIGHLIGHT_READ_ONLY_AND_MISSING_FILES, true));
setTableHeader(new SortableTableHeader(context.getHost(), this,
sortCriteria));
((SortableTableHeader)getTableHeader()).addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent evt) {
CVSFileNodeTable.this.context.getViewManager().refilterAndResort();
}
});
// setAutoscrolls(false); ;
UIUtil.restoreTableMetrics(this, tableGeometryPropertyPrefix,
new int[] {24, 24, 128, 96, 64, 128, 48, 64,
72, 72, 96}
, context);
if(Gruntspud.is14())
listSearch = new ListSearch(this, this);
}
public void cleanUp() {
if(listSearch != null)
listSearch.removeSearch();
}
// public int getRowHeight(int r) {
// return context.getHost().getIcon(
// Constants.ICON_TOOL_SMALL_DEFAULT_FOLDER_CLOSED).getIconHeight() + 2;
// }
/**
* DOCUMENT ME!
*
* @param searchText DOCUMENT ME!
*/
public void searchUpdated(String searchText) {
CVSFileNode n = getRootNode();
CVSFileNode s = getSelectedFileNode();
if (n != null) {
int c = ( (CVSFileNodeTableModel) getModel()).getRowCount();
for (int i = 0; i < c; i++) {
CVSFileNode f = ( (CVSFileNodeTableModel) getModel()).
getFileNodeAt(i);
if (f.getName().toLowerCase().startsWith(searchText.toLowerCase())) {
if (n != f) {
setSelectedFileNode(f);
}
scrollRectToVisible(getCellRect(i, 0, true));
break;
}
}
}
}
/**
* DOCUMENT ME!
*/
public void searchCancelled() {
}
/**
* DOCUMENT ME!
*/
public void searchComplete(String searchText) {
searchUpdated(searchText);
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public CVSFileNode getRootNode() {
return ( (CVSFileNodeTableModel) getModel()).getRootNode();
}
/**
* DOCUMENT ME!
*
* @param root DOCUMENT ME!
*/
public void setRootNode(CVSFileNode root) {
( (CVSFileNodeTableModel) getModel()).setRootNode(root);
}
/**
* DOCUMENT ME!
*/
public void saveColumnPositions() {
UIUtil.saveTableMetrics(this, tableGeometryPropertyPrefix, context);
}
/**
* Gets the selectedFileNode attribute of the CVSFileNodeTable object
*
*@return The selectedFileNode value
*/
public CVSFileNode getSelectedFileNode() {
return (getSelectedRowCount() < 1) ? null
:
( (CVSFileNodeTableModel) getModel()).getFileNodeAt(getSelectedRow());
}
/**
* Gets the selectedFileNodes attribute of the CVSFileNodeTable object
*
*@return The selectedFileNodes value
*/
public CVSFileNode[] getSelectedFileNodes() {
int[] r = getSelectedRows();
CVSFileNode[] n = new CVSFileNode[r.length];
for (int i = 0; i < r.length; i++) {
n[i] = ( (CVSFileNodeTableModel) getModel()).getFileNodeAt(r[i]);
}
return n;
}
/**
* Sets the selectedFileNode attribute of the CVSFileNodeTable object
*
*@param node The new selectedFileNode value
*/
public void setSelectedFileNode(CVSFileNode node) {
setSelectedFileNodes( (node == null) ? null : new CVSFileNode[] {node});
}
/**
* Sets the selectedFileNodes attribute of the CVSFileNodeTable object
*
*@param nodes The new selectedFileNodes value
*/
public void setSelectedFileNodes(CVSFileNode[] nodes) {
getSelectionModel().clearSelection();
if (nodes != null) {
for (int i = 0; i < nodes.length; i++) {
if (nodes[i] != null) {
int j = ( (CVSFileNodeTableModel) getModel()).indexOf(nodes[
i]);
if (j != -1) {
getSelectionModel().addSelectionInterval(j, j);
if (i == 0) {
Rectangle r = getCellRect(j, 0, true);
scrollRectToVisible(r);
}
}
}
}
}
}
/**
* Gets the preferredScrollableViewportSize attribute of the
* CVSFileNodeTable object
*
*@return The preferredScrollableViewportSize value
*/
public Dimension getPreferredScrollableViewportSize() {
return new Dimension(576,
super.getPreferredScrollableViewportSize().height);
}
/**
* Gets the scrollableTracksViewportHeight attribute of the
* CVSFileNodeTable object
*
*@return The scrollableTracksViewportHeight value
*/
public boolean getScrollableTracksViewportHeight() {
Component parent = getParent();
if (parent instanceof JViewport) {
return parent.getHeight() > getPreferredSize().height;
}
else {
return false;
}
}
}
|