package tim.prune.function; import java.awt.BorderLayout; import java.awt.Component; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.ListSelectionModel; import tim.prune.App; import tim.prune.GenericFunction; import tim.prune.I18nManager; import tim.prune.data.DataPoint; import tim.prune.data.SourceInfo; import tim.prune.data.Track; import tim.prune.load.TrackNameList; /** * Function to allow the selection of which tracks to load from the file / stream */ public class SelectTracksFunction extends GenericFunction { private Track _track = null; private SourceInfo _sourceInfo = null; private TrackNameList _trackNameList = null; private JDialog _dialog = null; private JList _trackList = null; /** * Constructor * @param inApp app object to use for load * @param inTrack loaded track object * @param inSourceInfo source information * @param inTrackNameList track name list */ public SelectTracksFunction(App inApp, Track inTrack, SourceInfo inSourceInfo, TrackNameList inTrackNameList) { super(inApp); _track = inTrack; _sourceInfo = inSourceInfo; _trackNameList = inTrackNameList; } /** * Start the function */ public void begin() { _dialog = new JDialog(_parentFrame, I18nManager.getText("function.open")); _dialog.setLocationRelativeTo(_parentFrame); _dialog.getContentPane().add(makeContents()); _dialog.pack(); _dialog.setVisible(true); selectAll(); } /** * @return the contents of the window as a Component */ private Component makeContents() { JPanel mainPanel = new JPanel(); mainPanel.setLayout(new BorderLayout()); mainPanel.add(new JLabel(I18nManager.getText("dialog.selecttracks.intro")), BorderLayout.NORTH); // track list final int numTracks = _trackNameList.getNumTracks(); String[] names = new String[numTracks]; for (int i=0; i(names); _trackList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); mainPanel.add(new JScrollPane(_trackList), BorderLayout.CENTER); // select all button JButton selectAllButton = new JButton(I18nManager.getText("button.selectall")); selectAllButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { selectAll(); } }); JPanel eastPanel = new JPanel(); eastPanel.add(selectAllButton); mainPanel.add(eastPanel, BorderLayout.EAST); // button panel at bottom JPanel buttonPanel = new JPanel(); buttonPanel.setLayout(new FlowLayout(FlowLayout.RIGHT)); JButton okButton = new JButton(I18nManager.getText("button.ok")); okButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { finish(); } }); buttonPanel.add(okButton); JButton cancelButton = new JButton(I18nManager.getText("button.cancel")); cancelButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { _dialog.dispose(); _app.informNoDataLoaded(); } }); buttonPanel.add(cancelButton); mainPanel.add(buttonPanel, BorderLayout.SOUTH); mainPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 15)); return mainPanel; } /** @return name key */ public String getNameKey() { return "dialog.selecttracks"; } /** * Select all the tracks in the list */ private void selectAll() { _trackList.setSelectionInterval(0, _trackNameList.getNumTracks()-1); } /** * OK pressed, so finish the load */ private void finish() { _dialog.dispose(); int[] tracks = _trackList.getSelectedIndices(); // Check if all tracks are selected, then don't have to filter at all if (tracks.length == _trackNameList.getNumTracks()) { _app.informDataLoaded(_track, _sourceInfo); } else { // build array of which tracks have been selected boolean[] selectedTracks = new boolean[_trackNameList.getNumTracks()]; for (int i=0; i