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}