/* ******************************************************************* * 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(); } }