package es.udc.cartolab.gvsig.navtable.contextualmenu; import java.awt.Color; import java.awt.Component; import java.awt.Cursor; import java.awt.Font; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.font.TextAttribute; import java.util.ArrayList; import java.util.List; import javax.swing.JButton; import net.miginfocom.swing.MigLayout; import sun.font.AttributeMap; import com.iver.andami.PluginServices; import es.icarto.gvsig.commons.gui.AbstractIWindow; import es.icarto.gvsig.commons.gui.OkCancelPanel; import es.icarto.gvsig.commons.gui.WidgetFactory; import es.icarto.gvsig.commons.utils.Field; @SuppressWarnings("serial") public class ChooseSortFieldDialog extends AbstractIWindow implements ActionListener { List<ChooseSortFieldPanel> list = new ArrayList<ChooseSortFieldPanel>(); private String status = OkCancelPanel.CANCEL_ACTION_COMMAND; private final OkCancelPanel okPanel; public ChooseSortFieldDialog(final List<Field> fields) { super(new MigLayout("insets 10, wrap 1")); okPanel = WidgetFactory.okCancelPanel(this, this, this); final JButton addAnother = linkButton(PluginServices.getPluginServices( this).getText("sort_add_another")); addAnother.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { ChooseSortFieldPanel field = new ChooseSortFieldPanel(list .size(), fields); list.add(field); add(field); revalidate(); repaint(); getWindowInfo().setHeight( getWindowInfo().getHeight() + field.getPreferredSize().height + addAnother.getPreferredSize().height); } }); add(addAnother, "dock south"); ChooseSortFieldPanel field = new ChooseSortFieldPanel(list.size(), fields); list.add(field); add(field); } /** * Returns a JButton which looks like an hyperlink */ private JButton linkButton(String text) { final JButton addAnother = new JButton(text); addAnother.setFocusPainted(false); addAnother.setCursor(new Cursor(Cursor.HAND_CURSOR)); addAnother.setMargin(new Insets(0, 0, 0, 0)); addAnother.setContentAreaFilled(false); addAnother.setBorderPainted(false); addAnother.setOpaque(false); Font font = new Font("Arial", Font.BOLD | Font.ITALIC, 11); addAnother.setFont(font); addAnother.setForeground(new Color(0, 60, 140)); AttributeMap attributes = (AttributeMap) font.getAttributes(); attributes.put(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON); return addAnother; } /** * Returns the fields that have a SortOrder != UNSORTED */ public List<Field> getFields() { List<Field> orderedFields = new ArrayList<Field>(); for (ChooseSortFieldPanel l : list) { if (l.getSelected() != null) { orderedFields.add(l.getSelected()); } } return orderedFields; } @Override public void actionPerformed(ActionEvent e) { status = e.getActionCommand(); PluginServices.getMDIManager().closeWindow(this); } public String open() { super.openDialog(); return status; } @Override protected JButton getDefaultButton() { return okPanel.getOkButton(); } @Override protected Component getDefaultFocusComponent() { return null; } }