OSDN Git Service

リファクタリング
authorAkiyoshi Kamide <kamide@yk.rim.or.jp>
Sun, 9 Apr 2017 16:02:13 +0000 (01:02 +0900)
committerAkiyoshi Kamide <kamide@yk.rim.or.jp>
Sun, 9 Apr 2017 16:02:13 +0000 (01:02 +0900)
src/camidion/chordhelper/ChordHelperApplet.java
src/camidion/chordhelper/MidiChordHelper.java
src/camidion/chordhelper/mididevice/MidiCablePane.java
src/camidion/chordhelper/mididevice/MidiDeviceDesktopPane.java
src/camidion/chordhelper/mididevice/MidiDeviceInfoPane.java
src/camidion/chordhelper/mididevice/MidiDeviceTreeModel.java
src/camidion/chordhelper/mididevice/MidiDeviceTreeView.java
src/camidion/chordhelper/midieditor/PlaylistTableModel.java

index 8bcc915..b915f25 100644 (file)
@@ -170,20 +170,20 @@ public class ChordHelperApplet extends JApplet {
         */
        public boolean isPlaying() { return isRunning(); }
        /**
-        * 現在シーケンサにロードされているMIDIデータを
-        * Base64テキストに変換した結果を返します。
-        * @return MIDIデータをBase64テキストに変換した結果
+        * 現在シーケンサにロードされているMIDIデータをBase64テキストに変換した結果を返します。
+        * @return MIDIデータをBase64テキストに変換した結果(シーケンサにロードされていない場合null)
         * @throws IOException MIDIデータの読み込みに失敗した場合
         */
        public String getMidiDataBase64() throws IOException {
-               SequenceTrackListTableModel sequenceModel = sequencerModel.getSequenceTrackListTableModel();
+               SequenceTrackListTableModel s = sequencerModel.getSequenceTrackListTableModel();
+               if( s == null ) return null;
                Base64Dialog d = midiEditor.base64Dialog;
-               d.setMIDIData(sequenceModel.getMIDIdata());
+               d.setMIDIData(s.getMIDIdata());
                return d.getBase64Data();
        }
        /**
         * 現在シーケンサにロードされているMIDIファイルのファイル名を返します。
-        * @return MIDIファイル名(設定されていないときは空文字列)
+        * @return MIDIファイル名(設定されていないときは空文字列、シーケンサにロードされていない場合null
         */
        public String getMidiFilename() {
                SequenceTrackListTableModel s = sequencerModel.getSequenceTrackListTableModel();
@@ -272,7 +272,7 @@ public class ChordHelperApplet extends JApplet {
         */
        public static class VersionInfo {
                public static final String NAME = "MIDI Chord Helper";
-               public static final String VERSION = "Ver.20170408.1";
+               public static final String VERSION = "Ver.20170409.1";
                public static final String COPYRIGHT = "Copyright (C) 2004-2017";
                public static final String AUTHER = "@きよし - Akiyoshi Kamide";
                public static final String URL = "http://www.yk.rim.or.jp/~kamide/music/chordhelper/";
@@ -288,10 +288,12 @@ public class ChordHelperApplet extends JApplet {
         */
        public static final Insets ZERO_INSETS = new Insets(0,0,0,0);
 
-       // GUIコンポーネント
+       // GUIコンポーネント(Javaアプリメインからの参照用)
        MidiSequenceEditorDialog midiEditor;
        PlaylistTableModel playlistModel;
-       MidiSequencerModel sequencerModel;
+
+       // GUIコンポーネント(内部保存用)
+       private MidiSequencerModel sequencerModel;
        private ChordMatrix chordMatrix;
        private JPanel keyboardSequencerPanel;
        private JPanel chordGuide;
@@ -317,6 +319,7 @@ public class ChordHelperApplet extends JApplet {
        private ImageIcon imageIcon;
        public ImageIcon getImageIcon() { return imageIcon; }
 
+       @Override
        public void init() {
                // アイコン画像のロード
                URL imageIconUrl = getClass().getResource("midichordhelper.png");
index b86fb54..a83ca82 100644 (file)
@@ -26,6 +26,7 @@ import javax.swing.SwingUtilities;
 import javax.swing.WindowConstants;
 import javax.swing.event.TableModelEvent;
 
+import camidion.chordhelper.mididevice.MidiSequencerModel;
 import camidion.chordhelper.midieditor.PlaylistTableModel;
 import camidion.chordhelper.midieditor.SequenceTrackListTableModel;
 
@@ -46,30 +47,31 @@ public class MidiChordHelper {
                private JLabel status_ = new JLabel("Welcome to "+ChordHelperApplet.VersionInfo.NAME) {
                        { setFont(getFont().deriveFont(Font.PLAIN)); }
                };
-               /**
-                * 指定されたMIDIシーケンスモデルのファイル名をタイトルバーに反映します。
-                * @param seq MIDIシーケンスモデル
-                */
-               private void setFilenameToTitle(SequenceTrackListTableModel seq) {
+               private void updateFilename(SequenceTrackListTableModel sequence) {
                        String title = ChordHelperApplet.VersionInfo.NAME;
-                       if( seq != null ) {
-                               String filename = seq.getFilename();
-                               if( filename != null && ! filename.isEmpty() ) title = filename + " - " + title;
+                       if( sequence != null ) {
+                               String filename = sequence.getFilename();
+                               if( filename != null && ! filename.isEmpty() )
+                                       title = filename+" - "+title;
                        }
                        setTitle(title);
                }
+               private void updateFilename(MidiSequencerModel sequencer) {
+                       updateFilename(sequencer.getSequenceTrackListTableModel());
+               }
+               private void updateFilename(TableModelEvent event) {
+                       if( ! PlaylistTableModel.filenameChanged(event) ) return;
+                       updateFilename(((PlaylistTableModel)event.getSource()).getSequencerModel());
+               }
                public AppletFrame(ChordHelperApplet applet, List<File> fileList) {
-                       setTitle(ChordHelperApplet.VersionInfo.NAME);
                        add( applet, BorderLayout.CENTER );
                        add( status_, BorderLayout.SOUTH );
                        applet.setStub(this);
                        applet.init();
                        setIconImage(applet.getIconImage());
-                       setDefaultCloseOperation( WindowConstants.DO_NOTHING_ON_CLOSE );
                        pack();
                        setLocationRelativeTo(null);
-                       setVisible(true);
-                       applet.start();
+                       setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
                        addWindowListener(new WindowAdapter() {
                                @Override
                                public void windowClosing(WindowEvent event) {
@@ -79,15 +81,11 @@ public class MidiChordHelper {
                                        )) { applet.destroy(); System.exit(0); }
                                }
                        });
-                       // シーケンサで切り替わった再生対象ファイル名をタイトルバーに反映
-                       applet.sequencerModel.addChangeListener(e->setFilenameToTitle(applet.sequencerModel.getSequenceTrackListTableModel()));
-                       // プレイリスト上で変更された再生対象ファイル名をタイトルバーに反映
-                       applet.playlistModel.addTableModelListener(tme->{
-                               int col = tme.getColumn();
-                               if( col == PlaylistTableModel.Column.FILENAME.ordinal() || col == TableModelEvent.ALL_COLUMNS ) {
-                                       setFilenameToTitle(applet.sequencerModel.getSequenceTrackListTableModel());
-                               }
-                       });
+                       applet.playlistModel.getSequencerModel().addChangeListener(e->updateFilename((MidiSequencerModel)e.getSource()));
+                       applet.playlistModel.addTableModelListener(e->updateFilename(e));
+                       updateFilename(applet.playlistModel.getSequencerModel());
+                       setVisible(true);
+                       applet.start();
                        applet.midiEditor.play(fileList);
                }
                @Override
index 5565259..53f8da5 100644 (file)
@@ -126,10 +126,8 @@ public class MidiCablePane extends JComponent {
                public void internalFrameDeactivated(InternalFrameEvent e) { repaint(); }
                @Override
                public void internalFrameClosing(InternalFrameEvent e) {
-                       JInternalFrame f = e.getInternalFrame();
-                       if( ! (f instanceof MidiDeviceFrame) ) return;
-                       MidiDeviceModel m = ((MidiDeviceFrame)f).getMidiDeviceModel();
-                       m.getMidiDevice().getReceivers().forEach(rx->rxToColor.remove(rx));
+                       ((MidiDeviceFrame)e.getInternalFrame()).getMidiDeviceModel()
+                               .getMidiDevice().getReceivers().forEach(rx->rxToColor.remove(rx));
                        repaint();
                }
        };
index de97d1e..e5853ee 100644 (file)
@@ -13,7 +13,6 @@ import java.util.stream.Stream;
 
 import javax.sound.midi.MidiUnavailableException;
 import javax.swing.JDesktopPane;
-import javax.swing.JInternalFrame;
 import javax.swing.JLayeredPane;
 import javax.swing.JOptionPane;
 import javax.swing.TransferHandler;
@@ -49,10 +48,10 @@ public class MidiDeviceDesktopPane extends JDesktopPane {
                                return;
                        }
                }
-               JInternalFrame frame = getSelectedFrame();
-               if( frame instanceof MidiDeviceFrame ) try {
-                       ((MidiDeviceFrame)frame).setSelected(false);
-               } catch( PropertyVetoException ex ) {
+               try {
+                       MidiDeviceFrame selectedFrame = (MidiDeviceFrame)getSelectedFrame();
+                       if( selectedFrame != null ) selectedFrame.setSelected(false);
+               } catch( Exception ex ) {
                        ex.printStackTrace();
                }
        }
index 1cc9b2b..ca09b6e 100644 (file)
@@ -4,7 +4,6 @@ import java.beans.PropertyVetoException;
 
 import javax.sound.midi.MidiDevice;
 import javax.swing.JEditorPane;
-import javax.swing.JInternalFrame;
 import javax.swing.event.InternalFrameAdapter;
 import javax.swing.event.InternalFrameEvent;
 import javax.swing.event.InternalFrameListener;
@@ -48,15 +47,12 @@ public class MidiDeviceInfoPane extends JEditorPane {
                }
                @Override
                public void internalFrameActivated(InternalFrameEvent e) {
-                       JInternalFrame frame = e.getInternalFrame();
-                       if( ! (frame instanceof MidiDeviceFrame ) ) return;
-                       setText(treeNodeTextOf(((MidiDeviceFrame)frame).getMidiDeviceModel()));
+                       setText(treeNodeTextOf(((MidiDeviceFrame)e.getInternalFrame()).getMidiDeviceModel()));
                }
                @Override
                public void internalFrameClosing(InternalFrameEvent e) {
-                       JInternalFrame f = e.getInternalFrame();
-                       if( ! (f instanceof MidiDeviceFrame ) ) return;
-                       MidiDeviceModel m = ((MidiDeviceFrame)f).getMidiDeviceModel();
+                       MidiDeviceFrame f = (MidiDeviceFrame)e.getInternalFrame();
+                       MidiDeviceModel m = f.getMidiDeviceModel();
                        m.close();
                        // デバイスが閉じたことを確認してから画面を閉じる
                        if( ! m.getMidiDevice().isOpen() ) {
index 4adc7d5..9d3be05 100644 (file)
@@ -30,9 +30,8 @@ import javax.swing.tree.TreePath;
 import camidion.chordhelper.ChordHelperApplet;
 
 /**
- * 仮想MIDIデバイスを含めたすべてのMIDIデバイスモデル{@link MidiDeviceModel}をツリー構造で管理するモデル。
- * 読み取り専用のMIDIデバイスリストとしても、
- * I/Oタイプで分類されたMIDIデバイスツリーモデルとしても参照できます。
+ * 仮想MIDIデバイスを含めたすべてのMIDIデバイスモデル{@link MidiDeviceModel}をリスト構造、ツリー構造で管理するモデル。
+ * 読み取り専用のMIDIデバイスリストとしても、I/Oタイプで分類されたMIDIデバイスツリーモデルとしても参照できます。
  */
 public class MidiDeviceTreeModel extends AbstractList<MidiDeviceModel> implements TreeModel {
        @Override
index 74944f8..9ece662 100644 (file)
@@ -5,7 +5,6 @@ import java.awt.datatransfer.DataFlavor;
 import java.awt.datatransfer.Transferable;
 
 import javax.swing.JComponent;
-import javax.swing.JInternalFrame;
 import javax.swing.JTree;
 import javax.swing.ToolTipManager;
 import javax.swing.TransferHandler;
@@ -26,10 +25,8 @@ public class MidiDeviceTreeView extends JTree {
        public final InternalFrameListener midiDeviceFrameListener = new InternalFrameAdapter() {
                @Override
                public void internalFrameActivated(InternalFrameEvent e) {
-                       JInternalFrame frame = e.getInternalFrame();
-                       if( ! (frame instanceof MidiDeviceFrame ) ) return;
                        // 選択されたフレームのツリーノードを選択
-                       setSelectionPath(((MidiDeviceFrame)frame).getMidiDeviceModel().getTreePath());
+                       setSelectionPath(((MidiDeviceFrame)e.getInternalFrame()).getMidiDeviceModel().getTreePath());
                }
                @Override
                public void internalFrameClosing(InternalFrameEvent e) {
index 1fc0031..4972ff7 100644 (file)
@@ -21,6 +21,7 @@ import javax.swing.event.ChangeEvent;
 import javax.swing.event.ChangeListener;
 import javax.swing.event.ListSelectionEvent;
 import javax.swing.event.ListSelectionListener;
+import javax.swing.event.TableModelEvent;
 import javax.swing.table.AbstractTableModel;
 
 import camidion.chordhelper.ButtonIcon;
@@ -52,6 +53,15 @@ public class PlaylistTableModel extends AbstractTableModel {
                        setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
                }
        };
+       /**
+        * テーブルモデルの変更を示すイベントが、ファイル名の変更によるものかどうかをチェックします。
+        * @param event テーブルモデルの変更を示すイベント
+        * @return ファイル名の変更による場合true
+        */
+       public static boolean filenameChanged(TableModelEvent event) {
+               int c = event.getColumn();
+               return c == Column.FILENAME.ordinal() || c == TableModelEvent.ALL_COLUMNS ;
+       }
        /** 再生中のシーケンサーの秒位置リスナー */
        private ChangeListener mmssPosition = new ChangeListener() {
                private int value = 0;