CVSFileNodeTable.java :  » Source-Control » gruntspud » gruntspud » ui » view » Java Open Source

Java Open Source » Source Control » gruntspud 
gruntspud » gruntspud » ui » view » CVSFileNodeTable.java
/*
 *  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;
        }
    }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.