loci.ome.notes.editor.EnumWindow.java Source code

Java tutorial

Introduction

Here is the source code for loci.ome.notes.editor.EnumWindow.java

Source

/*
 * #%L
 * OME Notes library for flexible organization and presentation of OME-XML
 * metadata.
 * %%
 * Copyright (C) 2007 - 2013 Open Microscopy Environment:
 *   - Board of Regents of the University of Wisconsin-Madison
 *   - Glencoe Software, Inc.
 *   - University of Dundee
 * %%
 * 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, see
 * <http://www.gnu.org/licenses/gpl-2.0.html>.
 * #L%
 */

package loci.ome.notes.editor;

import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JTextField;

import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;
import com.jgoodies.forms.layout.RowSpec;

/**
 * Window for choosing which values to put in a JComboBox.
 *
 * <dl><dt><b>Source code:</b></dt>
 * <dd><a href="http://trac.openmicroscopy.org.uk/ome/browser/bioformats.git/components/legacy/ome-notes/src/loci/ome/notes/editor/EnumWindow.java">Trac</a>,
 * <a href="http://git.openmicroscopy.org/?p=bioformats.git;a=blob;f=components/legacy/ome-notes/src/loci/ome/notes/editor/EnumWindow.java;hb=HEAD">Gitweb</a></dd></dl>
 */
public class EnumWindow extends JPopupMenu implements ActionListener {

    // -- Constants --

    private static final CellConstraints CC = new CellConstraints();

    // -- Fields --

    /** Current list of options. */
    private Vector options;

    private JPanel content;
    private JTextField field;
    private TemplateEditor parent;

    // -- Constructor --

    public EnumWindow(TemplateEditor parent, String[] options) {
        super();

        this.parent = parent;

        FormLayout layout = new FormLayout(
                "pref,pref:grow,pref,pref:grow," + "pref:grow,pref,pref:grow,pref:grow,pref:grow,pref",
                "pref,pref:grow,pref,pref:grow,pref");
        content = new JPanel(layout);

        this.options = new Vector();
        if (options != null) {
            for (int i = 0; i < options.length; i++) {
                addOption(options[i]);
            }
        }

        field = new JTextField();
        content.add(field, CC.xywh(2, 2, 4, 1));

        JButton add = new JButton("Add choice");
        add.setActionCommand("add");
        add.addActionListener(this);
        content.add(add, CC.xywh(8, 2, 2, 1));

        JButton ok = new JButton("OK");
        ok.setActionCommand("ok");
        ok.addActionListener(parent);
        content.add(ok, CC.xy(5, 4));

        add(content);
        setPreferredSize(new Dimension(512, 256));
        pack();
    }

    // -- EnumWindow API methods --

    public String[] getOptions() {
        return (String[]) options.toArray(new String[0]);
    }

    // -- ActionListener API methods --

    public void actionPerformed(ActionEvent e) {
        String cmd = e.getActionCommand();

        if (cmd.equals("add")) {
            addOption(field.getText());
        } else if (cmd.equals("remove")) {
            Component[] c = content.getComponents();
            for (int i = 3; i < c.length; i++) {
                if (c[i].equals(e.getSource())) {
                    remove(content);
                    content.remove(c[i - 1]);
                    content.remove(c[i]);
                    options.removeElementAt((i - 3) / 2);
                    add(content);
                    break;
                }
            }
            pack();
            parent.repaint();
        }
    }

    // -- Helper methods --

    private void addOption(String name) {
        remove(content);
        FormLayout layout = (FormLayout) content.getLayout();
        layout.insertRow(layout.getRowCount() - 2, new RowSpec("pref:grow"));
        layout.insertRow(layout.getRowCount() - 2, new RowSpec("pref"));
        JLabel label = new JLabel(name);
        JButton remove = new JButton("Remove");
        remove.setActionCommand("remove");
        remove.addActionListener(this);

        options.add(name);

        int last = layout.getRowCount() - 4;
        content.add(label, CC.xy(2, last));
        content.add(remove, CC.xywh(7, last, 2, 1));
        add(content);
        pack();
        parent.repaint();
    }

}