import javax.swing.JButton;\r
import javax.swing.JDialog;\r
import javax.swing.JLabel;\r
+import javax.swing.JOptionPane;\r
import javax.swing.JPanel;\r
import javax.swing.JScrollPane;\r
import javax.swing.JTextArea;\r
}\r
@Override\r
public void actionPerformed(ActionEvent event) {\r
+ byte[] data = getMIDIData();\r
+ if( data == null || data.length == 0 ) {\r
+ String message = "No data entered - データが入力されていません。";\r
+ JOptionPane.showMessageDialog(\r
+ Base64Dialog.this, message,\r
+ ChordHelperApplet.VersionInfo.NAME,\r
+ JOptionPane.WARNING_MESSAGE\r
+ );\r
+ base64TextArea.requestFocusInWindow();\r
+ return;\r
+ }\r
SequenceListTableModel sltm = midiEditor.sequenceListTable.getModel();\r
try {\r
- sltm.addSequence(getMIDIData(), null);\r
+ sltm.addSequence(data, null);\r
} catch(IOException | InvalidMidiDataException e) {\r
- midiEditor.showWarning(e.getMessage());\r
+ String message = "例外 "+e+" が発生しました。"+e.getMessage();\r
+ e.printStackTrace();\r
+ midiEditor.showWarning(message);\r
base64TextArea.requestFocusInWindow();\r
+ return;\r
}\r
setVisible(false);\r
}\r
import javax.swing.event.ListSelectionEvent;\r
import javax.swing.event.ListSelectionListener;\r
import javax.swing.event.TableModelEvent;\r
+import javax.swing.filechooser.FileFilter;\r
import javax.swing.filechooser.FileNameExtensionFilter;\r
import javax.swing.table.AbstractTableModel;\r
import javax.swing.table.JTableHeader;\r
//\r
// Base64エンコードアクションの生成\r
if( base64Dialog.isBase64Available() ) {\r
- base64EncodeAction = model.new SelectedSequenceAction(\r
- "Base64",\r
- "Encode selected sequence to Base64 textdata - 選択した曲をBase64テキストにエンコード"\r
- ) {\r
+ base64EncodeAction = new AbstractAction("Base64") {\r
+ {\r
+ String tooltip = "Base64 text conversion - Base64テキスト変換";\r
+ putValue(Action.SHORT_DESCRIPTION, tooltip);\r
+ }\r
@Override\r
public void actionPerformed(ActionEvent e) {\r
SequenceTrackListTableModel mstm = getModel().getSelectedSequenceModel();\r
/**\r
* ファイル選択ダイアログ(アプレットでは使用不可)\r
*/\r
- private class MidiFileChooser extends JFileChooser implements ListSelectionListener {\r
+ private class MidiFileChooser extends JFileChooser {\r
+ {\r
+ String description = "MIDI sequence (*.mid)";\r
+ String extension = "mid";\r
+ FileFilter filter = new FileNameExtensionFilter(description, extension);\r
+ setFileFilter(filter);\r
+ }\r
/**\r
* ファイル保存アクション\r
*/\r
- public Action saveMidiFileAction = new AbstractAction("Save") {\r
- {\r
- String tooltip = "Save selected MIDI sequence to file - 選択したMIDIシーケンスをファイルに保存";\r
- putValue(Action.SHORT_DESCRIPTION, tooltip);\r
- }\r
+ public Action saveMidiFileAction = getModel().new SelectedSequenceAction(\r
+ "Save",\r
+ "Save selected MIDI sequence to file - 選択したMIDIシーケンスをファイルに保存"\r
+ ) {\r
@Override\r
public void actionPerformed(ActionEvent e) {\r
- SequenceTrackListTableModel sequenceTableModel =\r
- getModel().getSelectedSequenceModel();\r
- String filename = sequenceTableModel.getFilename();\r
- File midiFile;\r
+ SequenceListTableModel model = getModel();\r
+ SequenceTrackListTableModel sequenceModel = model.getSelectedSequenceModel();\r
+ String filename = sequenceModel.getFilename();\r
+ File selectedFile;\r
if( filename != null && ! filename.isEmpty() ) {\r
// プレイリスト上でファイル名が入っていたら、それを初期選択\r
- setSelectedFile(midiFile = new File(filename));\r
+ setSelectedFile(selectedFile = new File(filename));\r
}\r
int saveOption = showSaveDialog(MidiEditor.this);\r
if( saveOption != JFileChooser.APPROVE_OPTION ) {\r
// 保存ダイアログでキャンセルされた場合\r
return;\r
}\r
- if( (midiFile = getSelectedFile()).exists() ) {\r
+ if( (selectedFile = getSelectedFile()).exists() ) {\r
// 指定されたファイルがすでにあった場合\r
- String fn = midiFile.getName();\r
+ String fn = selectedFile.getName();\r
String message = "Overwrite " + fn + " ?\n";\r
message += fn + " を上書きしてよろしいですか?";\r
if( ! confirm(message) ) {\r
}\r
}\r
// 保存を実行\r
- try ( FileOutputStream out = new FileOutputStream(midiFile) ) {\r
- out.write(sequenceTableModel.getMIDIdata());\r
- sequenceTableModel.setModified(false);\r
+ try ( FileOutputStream out = new FileOutputStream(selectedFile) ) {\r
+ out.write(sequenceModel.getMIDIdata());\r
+ sequenceModel.setModified(false);\r
}\r
catch( IOException ex ) {\r
showError( ex.getMessage() );\r
}\r
}\r
};\r
- {\r
- // ファイルフィルタの設定\r
- setFileFilter(new FileNameExtensionFilter("MIDI sequence (*.mid)", "mid"));\r
- //\r
- // 選択状態のリスニングを開始\r
- getModel().sequenceListSelectionModel.addListSelectionListener(this);\r
- updateEnabled();\r
- }\r
- /**\r
- * シーケンスの選択有無に応じて、保存ボタンのイネーブル状態を更新します。\r
- */\r
- private void updateEnabled() {\r
- boolean en = (getModel().sequenceListSelectionModel.getMinSelectionIndex() >= 0);\r
- saveMidiFileAction.setEnabled(en);\r
- }\r
- @Override\r
- public void valueChanged(ListSelectionEvent e) {\r
- if( e.getValueIsAdjusting() )\r
- return;\r
- updateEnabled();\r
- }\r
/**\r
* ファイルを開くアクション\r
*/\r
}\r
@Override\r
public void actionPerformed(ActionEvent event) {\r
- if(showOpenDialog(MidiEditor.this) == JFileChooser.APPROVE_OPTION) {\r
+ int openOption = showOpenDialog(MidiEditor.this);\r
+ if(openOption == JFileChooser.APPROVE_OPTION) {\r
try {\r
getModel().addSequence(getSelectedFile());\r
} catch( IOException|InvalidMidiDataException e ) {\r
add(new JButton(sequenceListTableModel.moveToBottomAction) {{\r
setMargin(ZERO_INSETS);\r
}});\r
- if( sequenceListTable.midiFileChooser != null ) {\r
+ if(sequenceListTable.base64EncodeAction != null) {\r
add(Box.createRigidArea(new Dimension(5, 0)));\r
- add(new JButton(\r
- sequenceListTable.midiFileChooser.saveMidiFileAction\r
- ) {{\r
+ add(new JButton(sequenceListTable.base64EncodeAction) {{\r
setMargin(ZERO_INSETS);\r
}});\r
}\r
- if(sequenceListTable.base64EncodeAction != null) {\r
+ if( sequenceListTable.midiFileChooser != null ) {\r
add(Box.createRigidArea(new Dimension(5, 0)));\r
- add(new JButton(sequenceListTable.base64EncodeAction) {{\r
+ add(new JButton(\r
+ sequenceListTable.midiFileChooser.saveMidiFileAction\r
+ ) {{\r
setMargin(ZERO_INSETS);\r
}});\r
}\r