public void checkBoxActionPerformed(java.awt.event.ActionEvent ae) {
   if (ae.getSource() == buildMsgBox) {
     trainManager.setBuildMessagesEnabled(buildMsgBox.isSelected());
   }
   if (ae.getSource() == buildReportBox) {
     trainManager.setBuildReportEnabled(buildReportBox.isSelected());
   }
   if (ae.getSource() == printPreviewBox) {
     trainManager.setPrintPreviewEnabled(printPreviewBox.isSelected());
     setPrintButtonText(); // set the button text for Print or Preview
   }
   if (ae.getSource() == openFileBox) {
     trainManager.setOpenFileEnabled(openFileBox.isSelected());
     runFileBox.setSelected(false);
     trainManager.setRunFileEnabled(false);
   }
   if (ae.getSource() == runFileBox) {
     trainManager.setRunFileEnabled(runFileBox.isSelected());
     openFileBox.setSelected(false);
     trainManager.setOpenFileEnabled(false);
   }
   if (ae.getSource() == showAllBox) {
     trainsModel.setShowAll(showAllBox.isSelected());
   }
 }
 public void radioButtonActionPerformed(java.awt.event.ActionEvent ae) {
   log.debug("radio button activated");
   if (ae.getSource() == showId) {
     trainsModel.setSort(trainsModel.SORTBYID);
   }
   if (ae.getSource() == showTime) {
     trainsModel.setSort(trainsModel.SORTBYTIME);
   }
   if (ae.getSource() == moveRB) {
     trainManager.setTrainsFrameTrainAction(MOVE);
   }
   if (ae.getSource() == terminateRB) {
     trainManager.setTrainsFrameTrainAction(TERMINATE);
   }
   if (ae.getSource() == resetRB) {
     trainManager.setTrainsFrameTrainAction(RESET);
   }
   if (ae.getSource() == conductorRB) {
     trainManager.setTrainsFrameTrainAction(CONDUCTOR);
   }
 }
 public void dispose() {
   /*
    * all JMRI window position and size are now saved in user preference file
    * trainManager.setTrainsFrameTableColumnWidths(getCurrentTableColumnWidths()); // save column widths
    * trainManager.setTrainsFrame(null);
    */
   trainsModel.dispose();
   trainManager.runShutDownScripts();
   trainManager.removePropertyChangeListener(this);
   Setup.removePropertyChangeListener(this);
   removePropertyChangeLocations();
   super.dispose();
 }
  public TrainsTableFrame() {
    super();

    updateTitle();

    // create ShutDownTasks
    createShutDownTask();
    // always check for dirty operations files
    setModifiedFlag(true);

    // general GUI configuration
    getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));

    // Set up the jtable in a Scroll Pane..
    trainsModel = new TrainsTableModel();
    sorter = new TableSorter(trainsModel);
    trainsTable = new JTable(sorter);
    sorter.setTableHeader(trainsTable.getTableHeader());
    trainsPane = new JScrollPane(trainsTable);
    trainsModel.initTable(trainsTable, this);

    // Set up the control panel
    // row 1
    JPanel cp1 = new JPanel();
    cp1.setLayout(new BoxLayout(cp1, BoxLayout.X_AXIS));

    JPanel show = new JPanel();
    show.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("ShowClickToSort")));
    show.add(showTime);
    show.add(showId);

    JPanel options = new JPanel();
    options.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("Options")));
    options.add(showAllBox);
    options.add(buildMsgBox);
    options.add(buildReportBox);
    options.add(printPreviewBox);
    options.add(openFileBox);
    options.add(runFileBox);

    JPanel action = new JPanel();
    action.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("Action")));
    action.add(moveRB);
    action.add(conductorRB);
    action.add(terminateRB);
    action.add(resetRB);

    cp1.add(show);
    cp1.add(options);
    cp1.add(action);

    // tool tips, see setPrintButtonText() for more tool tips
    addButton.setToolTipText(Bundle.getMessage("AddTrain"));
    buildButton.setToolTipText(Bundle.getMessage("BuildSelectedTip"));
    switchListsButton.setToolTipText(Bundle.getMessage("PreviewPrintSwitchLists"));

    terminateButton.setToolTipText(Bundle.getMessage("TerminateSelectedTip"));
    saveButton.setToolTipText(Bundle.getMessage("SaveBuildsTip"));
    openFileButton.setToolTipText(Bundle.getMessage("OpenFileButtonTip"));
    runFileButton.setToolTipText(Bundle.getMessage("RunFileButtonTip"));
    buildMsgBox.setToolTipText(Bundle.getMessage("BuildMessagesTip"));
    printPreviewBox.setToolTipText(Bundle.getMessage("PreviewTip"));
    openFileBox.setToolTipText(Bundle.getMessage("OpenFileTip"));
    runFileBox.setToolTipText(Bundle.getMessage("RunFileTip"));
    showAllBox.setToolTipText(Bundle.getMessage("ShowAllTrainsTip"));

    moveRB.setToolTipText(Bundle.getMessage("MoveTip"));
    terminateRB.setToolTipText(Bundle.getMessage("TerminateTip"));
    resetRB.setToolTipText(Bundle.getMessage("ResetTip"));

    // row 2
    JPanel addTrain = new JPanel();
    addTrain.setBorder(BorderFactory.createTitledBorder(""));
    addTrain.add(numTrains);
    addTrain.add(textTrains);
    addTrain.add(textSep1);
    addTrain.add(addButton);

    numTrains.setText(Integer.toString(trainManager.getNumEntries()));

    JPanel select = new JPanel();
    select.setBorder(BorderFactory.createTitledBorder(""));
    select.add(buildButton);
    select.add(printButton);
    select.add(openFileButton);
    select.add(runFileButton);
    select.add(switchListsButton);
    select.add(terminateButton);

    JPanel save = new JPanel();
    save.setBorder(BorderFactory.createTitledBorder(""));
    save.add(saveButton);

    JPanel cp2 = new JPanel();
    cp2.setLayout(new BoxLayout(cp2, BoxLayout.X_AXIS));
    cp2.add(addTrain);
    cp2.add(select);
    cp2.add(save);

    // place controls in scroll pane
    JPanel controlPanel = new JPanel();
    controlPanel.setLayout(new BoxLayout(controlPanel, BoxLayout.Y_AXIS));
    controlPanel.add(cp1);
    controlPanel.add(cp2);

    JScrollPane controlPane = new JScrollPane(controlPanel);

    getContentPane().add(trainsPane);
    getContentPane().add(controlPane);

    // setup buttons
    addButtonAction(addButton);
    addButtonAction(buildButton);
    addButtonAction(printButton);
    addButtonAction(openFileButton);
    addButtonAction(runFileButton);
    addButtonAction(switchListsButton);
    addButtonAction(terminateButton);
    addButtonAction(saveButton);

    ButtonGroup showGroup = new ButtonGroup();
    showGroup.add(showTime);
    showGroup.add(showId);
    showTime.setSelected(true);

    ButtonGroup actionGroup = new ButtonGroup();
    actionGroup.add(moveRB);
    actionGroup.add(conductorRB);
    actionGroup.add(terminateRB);
    actionGroup.add(resetRB);

    addRadioButtonAction(showTime);
    addRadioButtonAction(showId);

    addRadioButtonAction(moveRB);
    addRadioButtonAction(terminateRB);
    addRadioButtonAction(resetRB);
    addRadioButtonAction(conductorRB);

    buildMsgBox.setSelected(trainManager.isBuildMessagesEnabled());
    buildReportBox.setSelected(trainManager.isBuildReportEnabled());
    printPreviewBox.setSelected(trainManager.isPrintPreviewEnabled());
    openFileBox.setSelected(trainManager.isOpenFileEnabled());
    runFileBox.setSelected(trainManager.isRunFileEnabled());
    showAllBox.setSelected(trainsModel.isShowAll());

    // show open files only if create csv is enabled
    updateRunAndOpenButtons();

    addCheckBoxAction(buildMsgBox);
    addCheckBoxAction(buildReportBox);
    addCheckBoxAction(printPreviewBox);
    addCheckBoxAction(showAllBox);
    addCheckBoxAction(openFileBox);
    addCheckBoxAction(runFileBox);

    // Set the button text to Print or Preview
    setPrintButtonText();
    // Set the train action button text to Move or Terminate
    setTrainActionButton();

    // build menu
    JMenuBar menuBar = new JMenuBar();
    JMenu toolMenu = new JMenu(Bundle.getMessage("Tools"));
    toolMenu.add(new OptionAction(Bundle.getMessage("TitleOptions")));
    toolMenu.add(new PrintOptionAction());
    toolMenu.add(new BuildReportOptionAction());
    toolMenu.add(new TrainsByCarTypeAction(Bundle.getMessage("TitleModifyTrains")));
    toolMenu.add(new TrainByCarTypeAction(Bundle.getMessage("MenuItemShowCarTypes"), null));
    toolMenu.add(new ChangeDepartureTimesAction(Bundle.getMessage("TitleChangeDepartureTime")));
    toolMenu.add(new TrainsTableSetColorAction());
    toolMenu.add(new TrainsScheduleAction(Bundle.getMessage("TitleTimeTableTrains")));
    toolMenu.add(new TrainCopyAction(Bundle.getMessage("TitleTrainCopy")));
    toolMenu.add(new TrainsScriptAction(Bundle.getMessage("MenuItemScripts"), this));
    toolMenu.add(
        new PrintSavedTrainManifestAction(Bundle.getMessage("MenuItemPrintSavedManifest"), false));
    toolMenu.add(
        new PrintSavedTrainManifestAction(Bundle.getMessage("MenuItemPreviewSavedManifest"), true));
    toolMenu.add(new SetupExcelProgramFrameAction(Bundle.getMessage("MenuItemSetupExcelProgram")));
    toolMenu.add(new ExportTrainRosterAction());
    toolMenu.add(
        new PrintTrainsAction(Bundle.getMessage("MenuItemPrint"), new Frame(), false, this));
    toolMenu.add(
        new PrintTrainsAction(Bundle.getMessage("MenuItemPreview"), new Frame(), true, this));

    menuBar.add(toolMenu);
    menuBar.add(new jmri.jmrit.operations.OperationsMenu());
    setJMenuBar(menuBar);

    // add help menu to window
    addHelpMenu("package.jmri.jmrit.operations.Operations_Trains", true); // NOI18N

    initMinimumSize();

    addHorizontalScrollBarKludgeFix(controlPane, controlPanel);

    // listen for timetable changes
    trainManager.addPropertyChangeListener(this);
    Setup.addPropertyChangeListener(this);
    // listen for location switch list changes
    addPropertyChangeLocations();

    // auto save
    new AutoSave();
  }