001package jmri.swing; 002 003import java.util.List; 004import javax.swing.ButtonGroup; 005import javax.swing.JMenu; 006import javax.swing.JMenuItem; 007import javax.swing.JRadioButtonMenuItem; 008import jmri.InstanceManager; 009import jmri.PowerManager; 010 011/** 012 * Create a menu for selecting the Power Manager to use 013 * 014 * @author Bob Jacobsen Copyright 2010 015 * @since 2.9.5 016 */ 017abstract public class PowerManagerMenu extends JMenu { 018 019 /** 020 * Get the currently selected manager. 021 * 022 * @return null unless overridden by subclass 023 */ 024 // should this be abstract? 025 public PowerManager get() { 026 return null; 027 } 028 029 abstract protected void choiceChanged(); 030 031 /** 032 * Create a PowerManager menu. 033 */ 034 public PowerManagerMenu() { 035 super(); 036 037 ButtonGroup group = new ButtonGroup(); 038 039 // label this menu 040 setText(Bundle.getMessage("MenuConnection")) ; 041 042 // now add an item for each available manager 043 List<PowerManager> managers = InstanceManager.getList(PowerManager.class); 044 for (PowerManager mgr : managers) { 045 if (mgr != null) { 046 JMenuItem item = new JRadioButtonMenuItem(mgr.getUserName()); 047 add(item); 048 group.add(item); 049 items.add(item); 050 item.addActionListener((java.awt.event.ActionEvent e) -> { 051 choiceChanged(); 052 }); 053 } 054 } 055 056 setDefault(); 057 } 058 059 List<JMenuItem> items = new java.util.ArrayList<>(); 060 061 void setDefault() { 062 // name of default 063 PowerManager manager = InstanceManager.getNullableDefault(jmri.PowerManager.class); 064 if (manager == null) { 065 return; 066 } 067 String defaultMgr = manager.getUserName(); 068 for (JMenuItem item : items) { 069 if (defaultMgr.equals(item.getActionCommand())) { 070 item.setSelected(true); 071 } 072 } 073 } 074 075 public PowerManager getManager() { 076 // start with default 077 PowerManager manager = InstanceManager.getNullableDefault(jmri.PowerManager.class); 078 if (manager == null) { 079 return null; 080 } 081 String name = manager.getUserName(); 082 083 // find active name 084 for (JMenuItem item : items) { 085 if (item.isSelected()) { 086 name = item.getActionCommand(); 087 break; 088 } 089 } 090 // find PowerManager and return 091 List<PowerManager> managers = InstanceManager.getList(PowerManager.class); 092 for (PowerManager mgr : managers) { 093 if (name.equals(mgr.getUserName())) { 094 return mgr; 095 } 096 } 097 // should not happen 098 return null; 099 } 100}