package org.jabref.gui.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 org.jabref.gui.BasePanel;
import org.jabref.gui.JabRefFrame;
import org.jabref.logic.util.OS;
import org.jabref.model.entry.specialfields.SpecialField;
import org.jabref.model.entry.specialfields.SpecialFieldValue;
import com.jgoodies.looks.HeaderStyle;
import com.jgoodies.looks.Options;
public class SpecialFieldDropDown {
private SpecialFieldDropDown() {
}
public static JButton generateSpecialFieldButtonWithDropDown(SpecialField field, JabRefFrame frame) {
Dimension buttonDim = new Dimension(23, 23);
SpecialFieldViewModel viewModel = new SpecialFieldViewModel(field);
JButton button = new JButton(viewModel.getRepresentingIcon());
button.setToolTipText(viewModel.getLocalization());
button.setPreferredSize(buttonDim);
if (!OS.OS_X) {
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 final Dimension dim;
private final JabRefFrame frame;
private final SpecialField field;
private final JButton button;
public MenuButtonActionListener(SpecialField field, JabRefFrame frame, JButton button, Dimension dim) {
this.field = field;
this.dim = dim;
this.frame = frame;
this.button = button;
}
@Override
public void actionPerformed(ActionEvent e) {
if (popup == null) {
popup = new JPopupMenu();
for (SpecialFieldValue val : field.getValues()) {
SpecialFieldValueViewModel viewModel = new SpecialFieldValueViewModel(val);
JMenuItem item = new JMenuItem(viewModel.getSpecialFieldValueIcon());
item.setText(viewModel.getMenuString());
item.setToolTipText(viewModel.getToolTipText());
item.addActionListener(new PopupitemActionListener(frame.getCurrentBasePanel(), new SpecialFieldValueViewModel(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 final BasePanel panel;
private final String actionName;
public PopupitemActionListener(BasePanel panel, String actionName) {
this.panel = panel;
this.actionName = actionName;
}
@Override
public void actionPerformed(ActionEvent e) {
panel.runCommand(actionName);
popup.setVisible(false);
}
}
}
}