001package jmri.jmrit.operations.trains.tools; 002 003import java.awt.Dimension; 004import java.awt.GridBagLayout; 005import java.util.List; 006 007import javax.swing.*; 008 009import org.slf4j.Logger; 010import org.slf4j.LoggerFactory; 011 012import jmri.InstanceManager; 013import jmri.jmrit.operations.OperationsFrame; 014import jmri.jmrit.operations.OperationsPanel; 015import jmri.jmrit.operations.routes.*; 016import jmri.jmrit.operations.setup.Control; 017import jmri.jmrit.operations.trains.Train; 018import jmri.jmrit.operations.trains.TrainManager; 019 020/** 021 * Change Departure Time frame for operations. 022 * 023 * @author Bob Jacobsen Copyright (C) 2001 024 * @author Daniel Boudreau Copyright (C) 2013 025 */ 026public class ChangeDepartureTimesFrame extends OperationsFrame { 027 028 // major buttons 029 javax.swing.JButton changeButton = new javax.swing.JButton(Bundle.getMessage("Change")); 030 031 // combo boxes 032 javax.swing.JComboBox<Integer> hourBox = new javax.swing.JComboBox<>(); 033 034 javax.swing.JCheckBox routesCheckBox = new javax.swing.JCheckBox(Bundle.getMessage("ModifyRouteTimes")); 035 036 public ChangeDepartureTimesFrame() { 037 // general GUI config 038 039 getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS)); 040 041 // load hour combobox 042 for (int i = 1; i < 24; i++) { 043 hourBox.addItem(i); 044 } 045 046 OperationsPanel.padComboBox(hourBox, 3); 047 048 // row 2 049 JPanel pHour = new JPanel(); 050 pHour.setLayout(new GridBagLayout()); 051 pHour.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("SelectHours"))); 052 addItem(pHour, hourBox, 0, 0); 053 addItem(pHour, routesCheckBox, 1, 0); 054 055 // row 4 056 JPanel pButton = new JPanel(); 057 pButton.add(changeButton); 058 059 getContentPane().add(pHour); 060 getContentPane().add(pButton); 061 062 // add help menu to window 063 addHelpMenu("package.jmri.jmrit.operations.Operations_ChangeTrainDepartureTimes", true); // NOI18N 064 065 setTitle(Bundle.getMessage("TitleChangeDepartureTime")); 066 067 // setup buttons 068 addButtonAction(changeButton); 069 070 initMinimumSize(new Dimension(Control.panelWidth500, Control.panelHeight200)); 071 } 072 073 @Override 074 public void buttonActionPerformed(java.awt.event.ActionEvent ae) { 075 if (ae.getSource() == changeButton) { 076 log.debug("change button activated"); 077 TrainManager trainManager = InstanceManager.getDefault(TrainManager.class); 078 List<Train> trains = trainManager.getTrainsByIdList(); 079 for (Train train : trains) { 080 train.setDepartureTime(adjustHour(train.getDepartureTimeHour()), train.getDepartureTimeMinute()); 081 } 082 // now check every route to see if there are any departure times that need 083 // adjustment 084 if (routesCheckBox.isSelected()) { 085 RouteManager routeManager = InstanceManager.getDefault(RouteManager.class); 086 List<Route> routes = routeManager.getRoutesByNameList(); 087 for (Route route : routes) { 088 for (RouteLocation rl : route.getLocationsBySequenceList()) { 089 if (!rl.getDepartureTime().equals(RouteLocation.NONE)) 090 rl.setDepartureTime(adjustHour(rl.getDepartureTimeHour()), rl.getDepartureTimeMinute()); 091 } 092 } 093 } 094 } 095 } 096 097 private String adjustHour(String time) { 098 int hour = (int) hourBox.getSelectedItem() + Integer.parseInt(time); 099 if (hour > 23) { 100 hour = hour - 24; 101 } 102 return Integer.toString(hour); 103 } 104 105 private final static Logger log = LoggerFactory.getLogger(ChangeDepartureTimesFrame.class); 106}