/* * Copyright (C) 2013-2014 たんらる */ package fourthline.mabiicco.ui.mml; import java.awt.Dimension; import java.awt.Frame; import java.awt.Toolkit; import javax.swing.ButtonGroup; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.border.TitledBorder; import javax.swing.border.LineBorder; import java.awt.Color; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.UnsupportedFlavorException; import java.io.IOException; import javax.swing.JComboBox; import javax.swing.JTextField; import fourthline.mabiicco.AppResource; import fourthline.mabiicco.midi.InstClass; import fourthline.mabiicco.midi.InstType; import fourthline.mabiicco.midi.MabiDLS; import fourthline.mabiicco.ui.IMMLManager; import fourthline.mmlTools.MMLTrack; public final class MMLInputPanel extends JPanel { private static final long serialVersionUID = -2517820687250637949L; private final JTextField textField; private final JComboBox<InstClass> comboBox; private final JRadioButton overrideButton; private final JRadioButton newTrackButton; private final IMMLManager mmlManager; private MMLTrack track; public MMLInputPanel() { this(null); } /** * @param mmlManager */ public MMLInputPanel(IMMLManager mmlManager) { this.mmlManager = mmlManager; setLayout(null); JPanel panel1 = new JPanel(); panel1.setBorder(new TitledBorder(new LineBorder(new Color(128, 128, 128), 1, true), AppResource.appText("mml.input.method"), TitledBorder.LEADING, TitledBorder.TOP, null, null)); panel1.setBounds(26, 28, 275, 87); add(panel1); panel1.setLayout(null); overrideButton = new JRadioButton(AppResource.appText("mml.input.method.override")); overrideButton.setBounds(8, 51, 174, 21); panel1.add(overrideButton); newTrackButton = new JRadioButton(AppResource.appText("mml.input.method.new")); newTrackButton.setBounds(8, 23, 144, 21); panel1.add(newTrackButton); ButtonGroup buttonGroup = new ButtonGroup(); buttonGroup.add(overrideButton); buttonGroup.add(newTrackButton); newTrackButton.setSelected(true); JPanel panel2 = new JPanel(); panel2.setBorder(new TitledBorder(new LineBorder(new Color(128, 128, 128), 1, true), AppResource.appText("mml.input.instrument"), TitledBorder.LEADING, TitledBorder.TOP, null, null)); panel2.setBounds(26, 140, 275, 75); add(panel2); panel2.setLayout(null); comboBox = new JComboBox<>( MabiDLS.getInstance().getAvailableInstByInstType(InstType.MAIN_INST_LIST) ); comboBox.setBounds(25, 33, 193, 19); comboBox.setMaximumRowCount(30); panel2.add(comboBox); JPanel panel3 = new JPanel(); panel3.setBorder(new TitledBorder(new LineBorder(new Color(128, 128, 128), 1, true), AppResource.appText("mml.input.trackname"), TitledBorder.LEADING, TitledBorder.TOP, null, null)); panel3.setBounds(26, 249, 275, 75); add(panel3); panel3.setLayout(null); textField = new JTextField(20); textField.setBounds(27, 35, 193, 19); panel3.add(textField); } @Override public Dimension getPreferredSize() { return new Dimension(350, 350); } /** * トラック名を指定して、ダイアログを表示する. * @param trackName トラック名 */ public void showDialog(Frame parentFrame, String trackName) { textField.setText(trackName); String mml = getClipboardString(); track = new MMLTrack().setMML(mml); // 各パートが全て空であれば、ダイアログ表示しない。 if ( track.isEmpty() ) { return; } int status = JOptionPane.showConfirmDialog(parentFrame, this, AppResource.appText("mml.input"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); if (status == JOptionPane.OK_OPTION) { applyMMLTrack(); } } private void applyMMLTrack() { InstClass inst = (InstClass)comboBox.getSelectedItem(); track.setProgram(inst.getProgram()); track.setTrackName(textField.getText()); if (overrideButton.isSelected()) { mmlManager.setMMLselectedTrack(track); } else { mmlManager.addMMLTrack(track); } } public static String getClipboardString() { Toolkit kit = Toolkit.getDefaultToolkit(); Clipboard clip = kit.getSystemClipboard(); try { return (String) clip.getData(DataFlavor.stringFlavor); } catch (UnsupportedFlavorException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return ""; } }