1 import java.awt.Dimension;
\r
2 import java.awt.Insets;
\r
3 import java.awt.event.ActionEvent;
\r
4 import java.awt.event.ActionListener;
\r
5 import java.util.regex.Pattern;
\r
7 import javax.swing.Box;
\r
8 import javax.swing.BoxLayout;
\r
9 import javax.swing.JButton;
\r
10 import javax.swing.JDialog;
\r
11 import javax.swing.JLabel;
\r
12 import javax.swing.JPanel;
\r
13 import javax.swing.JScrollPane;
\r
14 import javax.swing.JTextArea;
\r
16 import org.apache.commons.codec.binary.Base64;
\r
21 public class Base64Dialog extends JDialog {
\r
22 private static final Insets ZERO_INSETS = new Insets(0,0,0,0);
\r
23 private Base64TextArea base64TextArea = null;
\r
24 private JButton addBase64Button;
\r
25 private JButton clearButton;
\r
26 private boolean base64Available;
\r
27 private static class Base64TextArea extends JTextArea {
\r
28 private static final Pattern headerLine =
\r
29 Pattern.compile( "^.*:.*$", Pattern.MULTILINE );
\r
30 public Base64TextArea(int rows, int columns) {
\r
31 super(rows,columns);
\r
33 public byte[] getBinary() {
\r
34 String text = headerLine.matcher(getText()).replaceAll("");
\r
35 return Base64.decodeBase64(text.getBytes());
\r
37 public void setBinary(byte[] binary_data, String content_type, String filename) {
\r
38 if( binary_data != null && binary_data.length > 0 ) {
\r
40 if( content_type != null && filename != null ) {
\r
41 header += "Content-Type: " + content_type + "; name=\"" + filename + "\"\n";
\r
42 header += "Content-Transfer-Encoding: base64\n";
\r
45 setText(header + new String(Base64.encodeBase64Chunked(binary_data)) + "\n");
\r
50 * Base64テキスト入力ダイアログを構築します。
\r
51 * @param midiEditor 親画面となるMIDIエディタ
\r
53 public Base64Dialog(MidiEditor midiEditor) {
\r
54 this.midiEditor = midiEditor;
\r
55 setTitle("Base64-encoded MIDI sequence - " + ChordHelperApplet.VersionInfo.NAME);
\r
57 Base64.decodeBase64( "".getBytes() );
\r
58 base64Available = true;
\r
59 } catch( NoClassDefFoundError e ) {
\r
60 base64Available = false;
\r
62 if( base64Available ) {
\r
64 setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
\r
66 setLayout(new BoxLayout(this, BoxLayout.LINE_AXIS ));
\r
67 add(new JLabel("Base64-encoded MIDI sequence:"));
\r
68 add(Box.createRigidArea(new Dimension(10, 0)));
\r
69 add(addBase64Button = new JButton(
\r
70 "Base64 Decode & Add to PlayList",
\r
71 new ButtonIcon(ButtonIcon.EJECT_ICON)
\r
73 setMargin(ZERO_INSETS);
\r
74 setToolTipText("Base64デコードして、プレイリストへ追加");
\r
76 add(clearButton = new JButton("Clear") {{
\r
77 setMargin(ZERO_INSETS);
\r
80 add(new JScrollPane(base64TextArea = new Base64TextArea(8,56)));
\r
82 addBase64Button.addActionListener(new ActionListener() {
\r
84 public void actionPerformed(ActionEvent e) {
\r
85 MidiEditor midiEditor = Base64Dialog.this.midiEditor;
\r
86 int lastIndex = midiEditor.addSequence(getMIDIData(), null);
\r
87 if( lastIndex < 0 ) {
\r
88 base64TextArea.requestFocusInWindow();
\r
89 lastIndex = midiEditor.sequenceListTableModel.getRowCount() - 1;
\r
91 midiEditor.seqSelectionModel.setSelectionInterval(lastIndex, lastIndex);
\r
95 clearButton.addActionListener(new ActionListener() {
\r
97 public void actionPerformed(ActionEvent e) {
\r
98 base64TextArea.setText(null);
\r
102 // setLocationRelativeTo(applet);
\r
103 setBounds( 300, 250, 660, 300 );
\r
105 private MidiEditor midiEditor;
\r
107 * {@link Base64} が使用できるかどうかを返します。
\r
108 * @return Apache Commons Codec ライブラリが利用できる状態ならtrue
\r
110 public boolean isBase64Available() {
\r
111 return base64Available;
\r
114 * バイナリー形式でMIDIデータを返します。
\r
115 * @return バイナリー形式のMIDIデータ
\r
117 public byte[] getMIDIData() {
\r
118 return base64TextArea.getBinary();
\r
121 * バイナリー形式のMIDIデータを設定します。
\r
122 * @param midiData バイナリー形式のMIDIデータ
\r
124 public void setMIDIData( byte[] midiData ) {
\r
125 base64TextArea.setBinary(midiData, null, null);
\r
128 * バイナリー形式のMIDIデータを、ファイル名をつけて設定します。
\r
129 * @param midiData バイナリー形式のMIDIデータ
\r
130 * @param filename ファイル名
\r
132 public void setMIDIData( byte[] midiData, String filename ) {
\r
133 base64TextArea.setBinary(midiData, "audio/midi", filename);
\r
134 base64TextArea.selectAll();
\r
137 * Base64形式でMIDIデータを返します。
\r
138 * @return Base64形式のMIDIデータ
\r
140 public String getBase64Data() {
\r
141 return base64TextArea.getText();
\r
144 * Base64形式のMIDIデータを設定します。
\r
145 * @param base64Data Base64形式のMIDIデータ
\r
147 public void setBase64Data( String base64Data ) {
\r
148 base64TextArea.setText(null);
\r
149 base64TextArea.append(base64Data);
\r