/*
* Copyright (C) 2014 たんらる
*/
package fourthline.mabiicco.ui.mml;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.util.List;
import javax.swing.AbstractAction;
import javax.swing.InputMap;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.JScrollPane;
import javax.swing.JLabel;
import javax.swing.KeyStroke;
import fourthline.mabiicco.AppResource;
import fourthline.mabiicco.ui.IMMLManager;
import fourthline.mmlTools.MMLScore;
import fourthline.mmlTools.MMLTrack;
public final class MMLImportPanel extends JPanel {
private static final long serialVersionUID = -1504636951822574399L;
private TrackListTable table;
private final JDialog dialog;
private List<MMLTrack> trackList;
private IMMLManager mmlManager;
private int possibleImportTrackCount;
private JButton importButton;
/**
* @wbp.parser.constructor
*/
public MMLImportPanel(Frame parentFrame) {
this.dialog = null;
initializePanel(null);
}
public MMLImportPanel(Frame parentFrame, MMLScore score, IMMLManager mmlManager) {
this.dialog = new JDialog(parentFrame, AppResource.appText("mml.input.import"), true);
this.trackList = score.getTrackList();
this.mmlManager = mmlManager;
possibleImportTrackCount = MMLScore.MAX_TRACK - mmlManager.getMMLScore().getTrackCount();
if (score.getTrackCount() < possibleImportTrackCount) {
possibleImportTrackCount = score.getTrackCount();
}
initializePanel(trackList);
}
private void initializePanel(List<MMLTrack> trackList) {
this.trackList = trackList;
setLayout(new BorderLayout());
JPanel buttonPanel = new JPanel();
JPanel p = new JPanel();
p.setLayout(null);
importButton = new JButton(AppResource.appText("mml.input.import"));
importButton.setMargin(new Insets(5, 10, 5, 10));
buttonPanel.add(importButton);
importButton.addActionListener((event) -> {
importMMLTrack();
dialog.setVisible(false);
});
JButton closeButton = new JButton(AppResource.appText("mml.output.closeButton"));
closeButton.setMargin(new Insets(5, 10, 5, 10));
buttonPanel.add(closeButton);
closeButton.setFocusable(false);
closeButton.addActionListener((event) -> {
dialog.setVisible(false);
});
JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(12, 10, 422, 169);
p.add(scrollPane);
table = new TrackListTable(trackList, true);
table.setInitialCheck(possibleImportTrackCount);
table.addPropertyChangeListener(evt -> {
int count = 0;
for (boolean b : table.getCheckList()) {
if (b) count++;
}
importButton.setEnabled( count <= possibleImportTrackCount );
});
scrollPane.setViewportView(table);
JLabel lblNewLabel = new JLabel(AppResource.appText("mml.input.import.possibleImport")+": "+possibleImportTrackCount);
lblNewLabel.setBounds(22, 189, 300, 13);
p.add(lblNewLabel);
table.setDefaultEditor(Object.class, null);
InputMap imap = dialog.getRootPane().getInputMap(
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
imap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "close-it");
dialog.getRootPane().getActionMap().put("close-it", new AbstractAction() {
private static final long serialVersionUID = -4495368209645211523L;
@Override
public void actionPerformed(ActionEvent arg0) {
dialog.setVisible(false);
}});
add(buttonPanel, BorderLayout.SOUTH);
add(p, BorderLayout.CENTER);
}
private void importMMLTrack() {
MMLScore targetScore = mmlManager.getMMLScore();
boolean checkList[] = table.getCheckList();
for (int i = 0; i < trackList.size(); i++) {
if (checkList[i]) {
targetScore.addTrack(trackList.get(i));
}
}
mmlManager.updateActivePart(false);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(440, 240);
}
/**
* ダイアログを表示する.
*/
public void showDialog() {
dialog.getContentPane().add(this);
dialog.pack();
dialog.setResizable(false);
dialog.setLocationRelativeTo(null);
dialog.setVisible(true);
}
}