OSDN Git Service

ファイルが選択されていないときにBase64ダイアログが開けなかった問題を修正
authorAkiyoshi Kamide <kamide@yk.rim.or.jp>
Sun, 8 Dec 2013 12:04:27 +0000 (12:04 +0000)
committerAkiyoshi Kamide <kamide@yk.rim.or.jp>
Sun, 8 Dec 2013 12:04:27 +0000 (12:04 +0000)
git-svn-id: https://svn.sourceforge.jp/svnroot/midichordhelper/MIDIChordHelper@25 302f1594-2db2-43b1-aaa4-6307b5a2a2de

src/Base64Dialog.java
src/ChordHelperApplet.java
src/MIDIEditor.java

index 7421a89..bf50dee 100644 (file)
@@ -12,6 +12,7 @@ import javax.swing.BoxLayout;
 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
@@ -39,12 +40,26 @@ public class Base64Dialog extends JDialog {
                }\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
index e27fb2a..af2db08 100644 (file)
@@ -268,7 +268,7 @@ public class ChordHelperApplet extends JApplet {
         */\r
        public static class VersionInfo {\r
                public static final String      NAME = "MIDI Chord Helper";\r
-               public static final String      VERSION = "Ver.20131208.1";\r
+               public static final String      VERSION = "Ver.20131208.2";\r
                public static final String      COPYRIGHT = "Copyright (C) 2004-2013";\r
                public static final String      AUTHER = "@きよし - Akiyoshi Kamide";\r
                public static final String      URL = "http://www.yk.rim.or.jp/~kamide/music/chordhelper/";\r
index fdf90d5..1ad1945 100644 (file)
@@ -76,6 +76,7 @@ import javax.swing.event.ChangeListener;
 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
@@ -280,10 +281,11 @@ class MidiEditor extends JDialog implements DropTargetListener {
                        //\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
@@ -495,33 +497,38 @@ class MidiEditor extends JDialog implements DropTargetListener {
                /**\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
@@ -530,9 +537,9 @@ class MidiEditor extends JDialog implements DropTargetListener {
                                                }\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
@@ -540,27 +547,6 @@ class MidiEditor extends JDialog implements DropTargetListener {
                                        }\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
@@ -571,7 +557,8 @@ class MidiEditor extends JDialog implements DropTargetListener {
                                }\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
@@ -1258,17 +1245,17 @@ class MidiEditor extends JDialog implements DropTargetListener {
                                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