Package com.eviware.soapui.support.swing

Source Code of com.eviware.soapui.support.swing.AbstractListMouseListener

/*
* Copyright 2004-2014 SmartBear Software
*
* Licensed under the EUPL, Version 1.1 or - as soon as they will be approved by the European Commission - subsequent
* versions of the EUPL (the "Licence");
* You may not use this work except in compliance with the Licence.
* You may obtain a copy of the Licence at:
*
* http://ec.europa.eu/idabc/eupl
*
* Unless required by applicable law or agreed to in writing, software distributed under the Licence is
* distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the Licence for the specific language governing permissions and limitations
* under the Licence.
*/

package com.eviware.soapui.support.swing;

import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JList;
import javax.swing.JPopupMenu;

import com.eviware.soapui.support.UISupport;
import com.eviware.soapui.support.action.swing.ActionList;
import com.eviware.soapui.support.action.swing.ActionSupport;

/**
* Abstract MouseListener for JLists that displays a row-sensitive popup-menu
*
* @author ole.matzura
*/

public abstract class AbstractListMouseListener extends MouseAdapter {
    private boolean enablePopup;
    private JPopupMenu menu;

    protected abstract ActionList getActionsForRow(JList list, int row);

    public AbstractListMouseListener() {
        this(true);
    }

    public AbstractListMouseListener(boolean enablePopup) {
        this.enablePopup = enablePopup;
    }

    public void mouseClicked(MouseEvent e) {
        if (e.getClickCount() < 2) {
            return;
        }

        JList list = (JList) e.getSource();

        int selectedIndex = list.getSelectedIndex();

        ActionList actions = selectedIndex == -1 ? getDefaultActions() : getActionsForRow(list, selectedIndex);

        if (actions != null) {
            actions.performDefaultAction(new ActionEvent(this, 0, null));
        }
    }

    protected ActionList getDefaultActions() {
        return null;
    }

    public void mousePressed(MouseEvent e) {
        if (e.isPopupTrigger()) {
            showPopup(e);
        }
    }

    public void mouseReleased(MouseEvent e) {
        if (e.isPopupTrigger()) {
            showPopup(e);
        }
    }

    public void showPopup(MouseEvent e) {
        if (!enablePopup) {
            return;
        }

        ActionList actions = null;
        JList list = (JList) e.getSource();
        int row = list.locationToIndex(e.getPoint());
        if (row == -1 || !list.getCellBounds(row, row).contains(e.getPoint())) {
            if (list.getSelectedIndex() != -1) {
                list.clearSelection();
            }

            actions = getDefaultActions();
        } else {
            if (list.getSelectedIndex() != row) {
                list.setSelectedIndex(row);
            }

            actions = getActionsForRow(list, row);
        }

        if (actions == null || actions.getActionCount() == 0) {
            return;
        }

        JPopupMenu popup = menu == null ? ActionSupport.buildPopup(actions) : menu;
        UISupport.showPopup(popup, list, e.getPoint());
    }

    public void setPopupMenu(JPopupMenu menu) {
        this.menu = menu;
    }
}
TOP

Related Classes of com.eviware.soapui.support.swing.AbstractListMouseListener

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.