001package jmri.jmrit.operations.setup.gui; 002 003import java.awt.GridBagLayout; 004import java.util.Hashtable; 005 006import javax.swing.*; 007 008import jmri.InstanceManager; 009import jmri.jmrit.operations.setup.*; 010import jmri.jmrit.operations.trains.TrainManager; 011import jmri.jmrit.operations.trains.schedules.TrainScheduleManager; 012 013/** 014 * Panel for user edit of day to name mapping 015 * @author Dan Boudreau Copyright (C) 2026 016 */ 017public class EditDayToNameMapPanel extends OperationsPreferencesPanel { 018 019 // major buttons 020 JButton saveButton = new JButton(Bundle.getMessage("ButtonSave")); 021 JButton daysButton = new JButton(Bundle.getMessage("DaysOfWeek")); 022 JButton resetButton = new JButton(Bundle.getMessage("Reset")); 023 024 protected Hashtable<Integer, JTextField> hashTableDayToName = new Hashtable<>(); 025 026 027 public EditDayToNameMapPanel() { 028 setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); 029 JPanel pDays = new JPanel(); 030 JScrollPane pManifestPane = new JScrollPane(pDays); 031 pManifestPane.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("BorderLayoutDays"))); 032 pDays.setLayout(new BoxLayout(pDays, BoxLayout.Y_AXIS)); 033 034 for (int i = 0; i < Control.numberOfDays; i++) { 035 JPanel pDay = new JPanel(); 036 pDay.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("BorderLayoutDay", i))); 037 JTextField textField = new JTextField(25); 038 pDay.add(textField); 039 pDays.add(pDay); 040 String name = Setup.getDayToName(Integer.toString(i)); 041 textField.setText(name); 042 hashTableDayToName.put(i, textField); 043 } 044 045 // row 11 046 JPanel pControl = new JPanel(); 047 pControl.setBorder(BorderFactory.createTitledBorder("")); 048 pControl.setLayout(new GridBagLayout()); 049 addItem(pControl, resetButton, 0, 0); 050 addItem(pControl, daysButton, 1, 0); 051 addItem(pControl, saveButton, 2, 0); 052 053 add(pManifestPane); 054 add(pControl); 055 056 // set up buttons 057 addButtonAction(resetButton); 058 addButtonAction(daysButton); 059 addButtonAction(saveButton); 060 061 } 062 063 // Save buttons 064 @Override 065 public void buttonActionPerformed(java.awt.event.ActionEvent ae) { 066 if (ae.getSource() == resetButton) { 067 hashTableDayToName.forEach((key, textField) -> { 068 textField.setText(""); 069 }); 070 } 071 if (ae.getSource() == daysButton) { 072 loadDays(); 073 } 074 if (ae.getSource() == saveButton) { 075 savePreferences(); 076 var topLevelAncestor = getTopLevelAncestor(); 077 if (Setup.isCloseWindowOnSaveEnabled() && topLevelAncestor instanceof EditDayToNameMapFrame) { 078 ((EditDayToNameMapFrame) topLevelAncestor).dispose(); 079 } 080 } 081 } 082 083 private void loadDays() { 084 String[] days = InstanceManager.getDefault(TrainScheduleManager.class).getDaysOfWeek(); 085 int j = 0; 086 for (int i = 0; i < Control.numberOfDays; i++) { 087 JTextField textField = hashTableDayToName.get(i); 088 textField.setText(days[j++]); 089 if (j == days.length) { 090 j = 0; 091 } 092 } 093 } 094 095 @Override 096 public String getTabbedPreferencesTitle() { 097 return Bundle.getMessage("TitleDayToNameMap"); 098 } 099 100 @Override 101 public String getPreferencesTooltip() { 102 return null; 103 } 104 105 @Override 106 public void savePreferences() { 107 for (int i = 0; i < Control.numberOfDays; i++) { 108 JTextField textField = hashTableDayToName.get(i); 109 Setup.setDayToName(Integer.toString(i), textField.getText()); 110 } 111 InstanceManager.getDefault(OperationsSetupXml.class).writeOperationsFile(); 112 InstanceManager.getDefault(TrainManager.class).setTrainsModified(); 113 } 114 115 @Override 116 public boolean isDirty() { 117 return false; 118 } 119}