All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jdesktop.swingx.rollover.ListRolloverController Maven / Gradle / Ivy

There is a newer version: 1.7.2
Show newest version
/*
 * $Id: ListRolloverController.java 3707 2010-07-08 19:19:25Z kschaefe $
 *
 * Copyright 2008 Sun Microsystems, Inc., 4150 Network Circle,
 * Santa Clara, California 95054, U.S.A. All rights reserved.
 *
 * 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 */
package org.jdesktop.swingx.rollover;

import javax.swing.JList;
import javax.swing.ListCellRenderer;
import java.awt.Cursor;
import java.awt.Point;
import java.awt.Rectangle;

/**
 * listens to rollover properties. Repaints effected component regions.
 * Updates link cursor.
 *
 * @author Jeanette Winzenburg
 */
public class ListRolloverController> extends RolloverController {

    private Cursor oldCursor;

    // --------------------------------- JList rollover

    @Override
    protected void rollover(Point oldLocation, Point newLocation) {
        // PENDING JW - track down the -1 in location.y
        if (oldLocation != null) {
            Rectangle r = component.getCellBounds(oldLocation.y, oldLocation.y);
            if (r != null) {
                component.repaint(r);
            }
        }
        if (newLocation != null) {
            Rectangle r = component.getCellBounds(newLocation.y, newLocation.y);
            if (r != null) {
                component.repaint(r);
            }
        }
        setRolloverCursor(newLocation);
    }

    /**
     * something weird: cursor in JList behaves different from JTable?
     * Hmm .. no: using the table code snippets seems to fix #503-swingx
     *
     * @param location
     */
    private void setRolloverCursor(Point location) {
        if (hasRollover(location)) {
            if (oldCursor == null) {
                oldCursor = component.getCursor();
                component.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
            }
        } else {
            if (oldCursor != null) {
                component.setCursor(oldCursor);
                oldCursor = null;
            }
        }
    }

    @SuppressWarnings({"rawtypes", "unchecked"})
    @Override
    protected RolloverRenderer getRolloverRenderer(Point location, boolean prepare) {
        ListCellRenderer renderer = component.getCellRenderer();
        RolloverRenderer rollover = renderer instanceof RolloverRenderer ? (RolloverRenderer) renderer : null;
        if (rollover != null && !rollover.isEnabled()) {
            rollover = null;
        }
        if (rollover != null && prepare) {
            Object element = component.getModel().getElementAt(location.y);
            renderer.getListCellRendererComponent(component, element, location.y, false, true);
        }
        return rollover;
    }

    @Override
    protected Point getFocusedCell() {
        int leadRow = component.getLeadSelectionIndex();
        if (leadRow < 0)
            return null;
        return new Point(0, leadRow);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy