/* Copyright (C) 2012 JabRef contributors. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ package net.sf.jabref.specialfields; import java.awt.Dimension; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JMenuItem; import javax.swing.JPopupMenu; import com.jgoodies.looks.HeaderStyle; import com.jgoodies.looks.Options; import net.sf.jabref.BasePanel; import net.sf.jabref.Globals; import net.sf.jabref.JabRefFrame; public class SpecialFieldDropDown { public static JButton generateSpecialFieldButtonWithDropDown(SpecialField field, JabRefFrame frame) { Dimension buttonDim = new Dimension(23,23); JButton button = new JButton(field.getRepresentingIcon()); button.setToolTipText(field.getToolTip()); button.setPreferredSize(buttonDim); if (!Globals.ON_MAC) button.setMargin(new Insets(1, 0, 2, 0)); button.setBorder(null); button.setBorderPainted(false); button.setRolloverEnabled(true); button.setOpaque(false); button.setBounds(0, 0, buttonDim.width, buttonDim.height); button.setSize(buttonDim); button.setMinimumSize(buttonDim); button.setMaximumSize(buttonDim); button.putClientProperty(Options.HEADER_STYLE_KEY, HeaderStyle.BOTH); button.addActionListener(new MenuButtonActionListener(field, frame, button, buttonDim)); return button; } private static class MenuButtonActionListener implements ActionListener { private JPopupMenu popup; private Dimension dim; private JabRefFrame frame; private SpecialField field; private JButton button; public MenuButtonActionListener(SpecialField field, JabRefFrame frame, JButton button, Dimension dim) { this.field = field; this.dim = dim; this.frame = frame; this.button = button; } public void actionPerformed(ActionEvent e) { if (popup == null) { popup = new JPopupMenu(); for (SpecialFieldValue val: field.getValues()) { JMenuItem item = new JMenuItem(val.getIcon()); item.setText(val.getMenuString()); item.setToolTipText(val.getToolTipText()); item.addActionListener(new PopupitemActionListener(frame.basePanel(), val.getActionName())); item.setMargin(new Insets(0,0,0,0)); popup.add(item); } } popup.show(button, 0, dim.height); } private class PopupitemActionListener implements ActionListener { private BasePanel panel; private String actionName; public PopupitemActionListener(BasePanel panel, String actionName) { this.panel = panel; this.actionName = actionName; } public void actionPerformed(ActionEvent e) { panel.runCommand(actionName); popup.setVisible(false); } } } }