package jp.co.nri.rid.search;

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.table.JTableHeader;

class SPHeaderListener implements MouseListener {
    /** SCCS ID */
    private static final String SCCSID = "@(#)SPHeaderListener.java";

    /** RCS ID */
    private static final String RCSID =
	"$Id: SPHeaderListener.java,v 1.6 2003-06-26 16:09:39+09 nsmr Exp $";

    public void mouseEntered(MouseEvent e){
    }

    public void mouseExited(MouseEvent e){
    }

    public void mousePressed(MouseEvent e){
    }

    public void mouseReleased(MouseEvent e){
    }

    public void mouseClicked(MouseEvent e) {
        /* イベント発生元のテーブルヘッダを取得
           発生元が JTableHeader 以外の場合は return */
        JTableHeader header = getTableHeader(e);
        if (header == null) {
            return;
        } 

        /* イベント発生元のテーブルヘッダが SPTableModel のヘッダでなければ
           return */
        Object o = header.getTable().getModel();
        if (!(o instanceof SPTableModel)) {
            return;
        }
        SPTableModel model = (SPTableModel)o;

        int columnIndex = getColumnIndex(e);
        if (columnIndex >= 0) {
            model.sort(columnIndex, true);
        }
    }

    /**
     * イベントの発生したカラムの、モデル上の index を返す
     * @param e マウスイベント
     * @return ヘッダの renderer
     */
    int getColumnIndex(MouseEvent e) {
        JTableHeader header = getTableHeader(e);
        if (header == null) {
            return -1;
        }

        /* 表示上の列番号の取得 */
        int columnPos = header.columnAtPoint(e.getPoint());

        if (columnPos < 0) {
            return -1;
        }

        /* データモデル上の列番号の取得 */
        return header.getColumnModel().getColumn(columnPos).getModelIndex();
    } /* getColumnIndex */


    /**
     * イベントの発生したヘッダを返す
     * @param e マウスイベント
     * @return テーブルのヘッダ
     */
    JTableHeader getTableHeader(MouseEvent e) {
        JTableHeader header;

        Object o = e.getSource();
        if (!(o instanceof JTableHeader)) {
            return null;
        }
        return (JTableHeader)o;
    } /* getTableHeader */
} /* class SPHeaderListener */
