001package jmri.jmrit.roster.swing.rostergroup;
002
003import java.awt.event.ActionEvent;
004import java.awt.event.ActionListener;
005
006import javax.swing.AbstractAction;
007import javax.swing.Icon;
008import javax.swing.JButton;
009import javax.swing.JLabel;
010import javax.swing.JPanel;
011
012import org.slf4j.Logger;
013import org.slf4j.LoggerFactory;
014
015import jmri.jmrit.roster.Roster;
016import jmri.jmrit.roster.swing.CreateRosterGroupAction;
017import jmri.jmrit.roster.swing.RosterGroupComboBox;
018
019import jmri.util.swing.WindowInterface;
020
021/**
022 * Swing action to create and register a Roster Group Table.
023 *
024 * @author Bob Jacobsen Copyright (C) 2003
025 * @author Kevin Dickerson Copyright (C) 2009
026 */
027public class RosterGroupTableAction extends jmri.util.swing.JmriAbstractAction {
028
029    public RosterGroupTableAction(String s, WindowInterface wi) {
030        super(s, wi);
031    }
032
033    public RosterGroupTableAction(String s, Icon i, WindowInterface wi) {
034        super(s, i, wi);
035    }
036
037    /**
038     * Create an action with a specific title.
039     * <p>
040     * Note that the argument is the Action title, not the title of the
041     * resulting frame. Perhaps this should be changed?
042     * @param s action title though may be changed?
043     *
044     */
045    public RosterGroupTableAction(String s) {
046        super(s);
047
048    }
049
050    public RosterGroupTableAction() {
051        this(Bundle.getMessage("RosterGroupTable"));
052    }
053
054    RosterGroupTableModel m;
055    RosterGroupTableFrame f;
056
057    void createModel() {
058
059        m = new RosterGroupTableModel();
060    }
061
062    public void actionPerformed() {
063        // create the JTable model, with changes for specific NamedBean
064        createModel();
065
066        // create the frame
067        f = new RosterGroupTableFrame(m, helpTarget()) {
068            /**
069             * Include an "add" button
070             */
071            @Override
072            void extras() {
073                final var selectAddCombo = new RosterGroupComboBox();
074                selectAddCombo.setAllEntriesEnabled(false);  // don't show "All Entries" group
075                JPanel p25 = new JPanel();
076                p25.add(new JLabel(Bundle.getMessage("SelectRosterGroup")));
077                p25.add(selectAddCombo);
078                selectAddCombo.addActionListener(new ActionListener() {
079                    @Override
080                    public void actionPerformed(ActionEvent e) {
081                        try {
082                            comboAddSelected(e, selectAddCombo.getSelectedItem());
083                        } catch (Exception ex) {
084                            log.debug("Null pointer exception");
085                        }
086                    }
087                });
088                selectAddCombo.setVisible(true);
089                AbstractAction createGroupAction = new CreateRosterGroupAction(Bundle.getMessage("MenuGroupCreate"), p25);
090                var newButton = new JButton(createGroupAction);
091                p25.add(newButton);
092
093                addToTopBox(p25);
094     
095            }
096        };
097        setTitle();
098        addToFrame(f);
099        f.pack();
100        f.setVisible(true);
101    }
102
103    @Override
104    public void actionPerformed(ActionEvent e) {
105        actionPerformed();
106    }
107
108    public void addToFrame(RosterGroupTableFrame f) {
109    }
110
111    void setTitle() {
112        f.setTitle(Bundle.getMessage("RosterGroupTable"));
113    }
114
115    String helpTarget() {
116        return "package.jmri.jmrit.roster.swing.RosterGroupTable"; // NOI18N
117    }
118
119    void comboAddSelected(ActionEvent e, String group) {
120        m.setAddGroup(Roster.ROSTER_GROUP_PREFIX + group);
121        m.fireTableDataChanged();
122
123    }
124
125    @Override
126    public jmri.util.swing.JmriPanel makePanel() {
127        throw new IllegalArgumentException("Should not be invoked");
128    }
129
130    private final static Logger log = LoggerFactory.getLogger(RosterGroupTableAction.class);
131}