AJButtonMenuCombo.java
/* *******************************************************************
* Copyright (c) 1999-2001 Xerox Corporation,
* 2002 Palo Alto Research Center, Incorporated (PARC).
* All rights reserved.
* This program and the accompanying materials are made available
* under the terms of the Eclipse Public License v 2.0
* which accompanies this distribution and is available at
* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt
*
* Contributors:
* Xerox/PARC initial implementation
* Helen Hawkins Converted to new interface (bug 148190)
* ******************************************************************/
package org.aspectj.ajde.ui.swing;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.BorderFactory;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import org.aspectj.ajde.Ajde;
public class AJButtonMenuCombo extends JPanel {
private static final long serialVersionUID = -4866207530403336160L;
private JButton mainButton;
private JButton popupButton;
private JPopupMenu menu;
// private boolean depressable = false;
private boolean isPressed = false;
public AJButtonMenuCombo(String name,
String toolTipText,
Icon icon,
JPopupMenu menu,
boolean depressable) {
this.menu = menu;
// this.depressable = depressable;
mainButton = new JButton();
mainButton.setIcon(icon);
mainButton.setBorder(AjdeWidgetStyles.DEFAULT_BORDER);
mainButton.setToolTipText(toolTipText);
mainButton.setPreferredSize(new Dimension(22, 20));
mainButton.setMinimumSize(new Dimension(22, 20));
mainButton.setMaximumSize(new Dimension(22, 20));
popupButton = new JButton();
popupButton.setIcon(Ajde.getDefault().getIconRegistry().getPopupIcon());
popupButton.setBorder(BorderFactory.createEmptyBorder());
popupButton.setToolTipText(toolTipText);
popupButton.setPreferredSize(new Dimension(13, 20));
popupButton.setMinimumSize(new Dimension(13, 20));
popupButton.setMaximumSize(new Dimension(13, 20));
PopupListener popupListener = new PopupListener(mainButton);
if (depressable) {
mainButton.addActionListener(new ButtonActionListener());
} else {
mainButton.addMouseListener(popupListener);
}
popupButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
popupButton.setBorder(null);
}
});
BorderUpdateListener borderUpdateListner = new BorderUpdateListener();
mainButton.addMouseListener(borderUpdateListner);
popupButton.addMouseListener(borderUpdateListner);
popupButton.addMouseListener(popupListener);
this.setLayout(new BorderLayout());
this.add(mainButton, BorderLayout.CENTER);
this.add(popupButton, BorderLayout.EAST);
this.setMinimumSize(new Dimension(35, 20));
this.setMaximumSize(new Dimension(35, 20));
}
class ButtonActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (isPressed) {
mainButton.setBorder(AjdeWidgetStyles.DEFAULT_BORDER);
isPressed = false;
} else {
mainButton.setBorder(AjdeWidgetStyles.LOWERED_BEVEL_BORDER);
isPressed = true;
}
}
}
class BorderUpdateListener extends MouseAdapter {
public void mouseEntered(MouseEvent e) {
popupButton.setBorder(AjdeWidgetStyles.RAISED_BEVEL_BORDER);
mainButton.setBorder(AjdeWidgetStyles.RAISED_BEVEL_BORDER);
}
public void mouseExited(MouseEvent e) {
popupButton.setBorder(AjdeWidgetStyles.DEFAULT_BORDER);
if (isPressed) {
mainButton.setBorder(AjdeWidgetStyles.LOWERED_BEVEL_BORDER);
} else {
mainButton.setBorder(AjdeWidgetStyles.DEFAULT_BORDER);
}
}
}
class PopupListener extends MouseAdapter {
private JButton button;
public PopupListener(JButton button) {
this.button = button;
}
public void mousePressed(MouseEvent e) {
maybeShowPopup(e);
}
public void mouseReleased(MouseEvent e) {
maybeShowPopup(e);
}
private void maybeShowPopup(MouseEvent e) {
menu.show(e.getComponent(), button.getX(), button.getY() + popupButton.getHeight());
}
}
public void setEnabled(boolean enabled) {
mainButton.setEnabled(enabled);
popupButton.setEnabled(enabled);
}
public void setMenu(JPopupMenu menu) {
this.menu = menu;
this.repaint();
}
}