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