001package jmri.jmrit.beantable.routetable; 002 003import jmri.InstanceManager; 004import jmri.Route; 005import jmri.Sensor; 006import jmri.Turnout; 007 008import javax.swing.*; 009import java.awt.*; 010import java.awt.event.ActionEvent; 011 012/** 013 * Edit frame for the Route Table. 014 * 015 * Split from {@link jmri.jmrit.beantable.RouteTableAction} 016 * 017 * @author Dave Duchamp Copyright (C) 2004 018 * @author Bob Jacobsen Copyright (C) 2007 019 * @author Simon Reader Copyright (C) 2008 020 * @author Pete Cressman Copyright (C) 2009 021 * @author Egbert Broerse Copyright (C) 2016 022 * @author Paul Bender Copyright (C) 2020 023 */ 024public class RouteEditFrame extends AbstractRouteAddEditFrame { 025 026 private final String systemName; 027 028 public RouteEditFrame() { 029 this(Bundle.getMessage("TitleEditRoute")); 030 } 031 032 public RouteEditFrame(String systemName) { 033 this(Bundle.getMessage("TitleEditRoute"), systemName); 034 } 035 036 public RouteEditFrame(String name, String systemName) { 037 this(name,false,true, systemName); 038 } 039 040 public RouteEditFrame(String name, boolean saveSize, boolean savePosition, String systemName) { 041 super(name, saveSize, savePosition); 042 this.systemName = systemName; 043 initComponents(); 044 } 045 046 @Override 047 public final void initComponents() { 048 super.initComponents(); 049 _systemName.setText(systemName); 050 // identify the Route with this name if it already exists 051 String sName = _systemName.getText(); 052 Route g = InstanceManager.getDefault(jmri.RouteManager.class).getBySystemName(sName); 053 if (g == null) { 054 sName = _userName.getText(); 055 g = InstanceManager.getDefault(jmri.RouteManager.class).getByUserName(sName); 056 if (g == null) { 057 // Route does not exist, so cannot be edited 058 status1.setText(Bundle.getMessage("RouteAddStatusErrorNotFound")); 059 return; 060 } 061 } 062 // Route was found, make its system name not changeable 063 curRoute = g; 064 _systemName.setVisible(true); 065 _systemName.setText(sName); 066 _systemName.setEnabled(false); 067 nameLabel.setEnabled(true); 068 _autoSystemName.setVisible(false); 069 // deactivate this Route 070 curRoute.deActivateRoute(); 071 // get information for this route 072 _userName.setText(g.getUserName()); 073 074 setPageContent(g); 075 076 // begin with showing all Turnouts 077 // set up buttons and notes 078 status1.setText(Bundle.getMessage("RouteAddStatusInitial3", Bundle.getMessage("ButtonUpdate"))); 079 status2.setText(Bundle.getMessage("RouteAddStatusInitial4", Bundle.getMessage("ButtonCancelEdit", Bundle.getMessage("ButtonEdit")))); 080 status2.setVisible(true); 081 setTitle(Bundle.getMessage("TitleEditRoute")); 082 editMode = true; 083 } 084 085 @Override 086 protected JPanel getButtonPanel() { 087 final JButton cancelEditButton = new JButton(Bundle.getMessage("ButtonCancelEdit", Bundle.getMessage("ButtonEdit"))); // I18N for word sequence "Cancel Edit" 088 final JButton deleteButton = new JButton(Bundle.getMessage("ButtonDelete") + " " + Bundle.getMessage("BeanNameRoute")); // I18N "Delete Route" 089 final JButton updateButton = new JButton(Bundle.getMessage("ButtonUpdate")); 090 final JButton exportButton = new JButton(Bundle.getMessage("ButtonExport")); 091 // add Buttons panel 092 JPanel pb = new JPanel(); 093 pb.setLayout(new FlowLayout(FlowLayout.TRAILING)); 094 // CancelEdit button 095 pb.add(cancelEditButton); 096 cancelEditButton.addActionListener(this::cancelPressed); 097 cancelEditButton.setToolTipText(Bundle.getMessage("TooltipCancelRoute")); 098 // Delete Route button 099 pb.add(deleteButton); 100 deleteButton.addActionListener(this::deletePressed); 101 deleteButton.setToolTipText(Bundle.getMessage("TooltipDeleteRoute")); 102 // Update Route button 103 pb.add(updateButton); 104 updateButton.addActionListener((ActionEvent e1) -> updatePressed(false)); 105 updateButton.setToolTipText(Bundle.getMessage("TooltipUpdateRoute")); 106 // Export button 107 pb.add(exportButton); 108 exportButton.addActionListener(this::exportButtonPressed); 109 exportButton.setToolTipText(Bundle.getMessage("TooltipExportRoute")); 110 111 // Show the initial buttons, and hide the others 112 deleteButton.setVisible(true); 113 cancelEditButton.setVisible(true); 114 updateButton.setVisible(true); 115 exportButton.setVisible(true); 116 return pb; 117 } 118 119 /** 120 * Respond to the export button. 121 * 122 * @param e the action event 123 */ 124 private void exportButtonPressed(ActionEvent e){ 125 new RouteExportToLogix(_systemName.getText()).export(); 126 status1.setText(Bundle.getMessage("BeanNameRoute") 127 + "\"" + _systemName.getText() + "\" " + 128 Bundle.getMessage("RouteAddStatusExported") + " (" 129 + get_includedTurnoutList().size() + 130 Bundle.getMessage("Turnouts") + ", " + 131 get_includedSensorList().size() + " " + Bundle.getMessage("Sensors") + ")"); 132 finishUpdate(); 133 closeFrame(); 134 } 135 136 /** 137 * Respond to the CancelEdit button. 138 * 139 * @param e the action event 140 */ 141 private void cancelPressed(ActionEvent e) { 142 cancelEdit(); 143 } 144 145 /** 146 * Respond to the Delete button. 147 * 148 * @param e the action event 149 */ 150 private void deletePressed(ActionEvent e) { 151 // route is already deactivated, just delete it 152 routeManager.deleteRoute(curRoute); 153 154 curRoute = null; 155 finishUpdate(); 156 closeFrame(); 157 } 158 159}