001package jmri.jmrit.operations.trains.tools; 002 003import java.awt.Dimension; 004import java.awt.GridBagLayout; 005 006import javax.swing.*; 007 008import jmri.InstanceManager; 009import jmri.jmrit.operations.OperationsFrame; 010import jmri.jmrit.operations.setup.Control; 011import jmri.jmrit.operations.trains.*; 012import jmri.jmrit.operations.trains.gui.TrainEditFrame; 013import jmri.util.swing.JmriJOptionPane; 014 015/** 016 * Frame for making a new copy of a train. 017 * 018 * @author Bob Jacobsen Copyright (C) 2001 019 * @author Daniel Boudreau Copyright (C) 2011, 2013 020 */ 021public class TrainCopyFrame extends OperationsFrame { 022 023 TrainManager trainManager = InstanceManager.getDefault(TrainManager.class); 024 025 // labels 026 // text field 027 javax.swing.JTextField trainNameTextField = new javax.swing.JTextField(Control.max_len_string_train_name); 028 029 // major buttons 030 javax.swing.JButton copyButton = new javax.swing.JButton(Bundle.getMessage("ButtonCopy")); 031 032 // combo boxes 033 JComboBox<Train> trainBox = InstanceManager.getDefault(TrainManager.class).getTrainComboBox(); 034 035 public TrainCopyFrame(Train train) { 036 // general GUI config 037 038 getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS)); 039 040 // Set up the panels 041 // Layout the panel by rows 042 // row 1 043 JPanel pName = new JPanel(); 044 pName.setLayout(new GridBagLayout()); 045 pName.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("Name"))); 046 addItem(pName, trainNameTextField, 0, 0); 047 048 // row 2 049 JPanel pCopy = new JPanel(); 050 pCopy.setLayout(new GridBagLayout()); 051 pCopy.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("SelectTrain"))); 052 addItem(pCopy, trainBox, 0, 0); 053 054 trainBox.setSelectedItem(train); 055 056 // row 4 057 JPanel pButton = new JPanel(); 058 pButton.add(copyButton); 059 060 getContentPane().add(pName); 061 getContentPane().add(pCopy); 062 getContentPane().add(pButton); 063 064 // add help menu to window 065 addHelpMenu("package.jmri.jmrit.operations.Operations_CopyTrain", true); // NOI18N 066 067 pack(); 068 setMinimumSize(new Dimension(Control.panelWidth400, Control.panelHeight200)); 069 070 setTitle(Bundle.getMessage("TitleTrainCopy")); 071 072 // setup buttons 073 addButtonAction(copyButton); 074 } 075 076 @Override 077 public void buttonActionPerformed(java.awt.event.ActionEvent ae) { 078 if (ae.getSource() == copyButton) { 079 log.debug("copy train button activated"); 080 if (!checkName()) { 081 return; 082 } 083 084 Train newTrain = trainManager.getTrainByName(trainNameTextField.getText()); 085 if (newTrain != null) { 086 reportTrainExists(); 087 return; 088 } 089 if (trainBox.getSelectedItem() == null) { 090 reportTrainDoesNotExist(); 091 return; 092 } 093 Train oldTrain = (Train) trainBox.getSelectedItem(); 094 if (oldTrain == null) { 095 reportTrainDoesNotExist(); 096 return; 097 } 098 099 // now copy 100 newTrain = trainManager.copyTrain(oldTrain, trainNameTextField.getText()); 101 new TrainEditFrame(newTrain); 102 } 103 } 104 105 private void reportTrainExists() { 106 JmriJOptionPane.showMessageDialog(this, Bundle.getMessage("TrainNameExists"), Bundle 107 .getMessage("CanNotTrain", Bundle.getMessage("copy")), JmriJOptionPane.ERROR_MESSAGE); 108 } 109 110 private void reportTrainDoesNotExist() { 111 JmriJOptionPane.showMessageDialog(this, Bundle.getMessage("SelectTrain"), Bundle 112 .getMessage("CanNotTrain", Bundle.getMessage("copy")), JmriJOptionPane.ERROR_MESSAGE); 113 } 114 115 /** 116 * 117 * @return true if name isn't too long 118 */ 119 private boolean checkName() { 120 if (trainNameTextField.getText().trim().isEmpty()) { 121 JmriJOptionPane.showMessageDialog(this, Bundle.getMessage("EnterTrainName"), Bundle 122 .getMessage("CanNotTrain", Bundle.getMessage("copy")), JmriJOptionPane.ERROR_MESSAGE); 123 return false; 124 } 125 if (trainNameTextField.getText().length() > Control.max_len_string_train_name) { 126 JmriJOptionPane.showMessageDialog(this, Bundle.getMessage("TrainNameLess", 127 Control.max_len_string_train_name + 1), Bundle 128 .getMessage("CanNot", Bundle.getMessage("copy")), JmriJOptionPane.ERROR_MESSAGE); 129 return false; 130 } 131 return true; 132 } 133 134 @Override 135 public void dispose() { 136 super.dispose(); 137 } 138 139 private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(TrainCopyFrame.class); 140}