OSDN Git Service

リファクタリング(MIDIデバイス周り)
authorAkiyoshi Kamide <kamide@yk.rim.or.jp>
Tue, 21 Jun 2016 16:38:16 +0000 (01:38 +0900)
committerAkiyoshi Kamide <kamide@yk.rim.or.jp>
Tue, 21 Jun 2016 16:38:16 +0000 (01:38 +0900)
src/camidion/chordhelper/ChordHelperApplet.java
src/camidion/chordhelper/mididevice/DummyTransmitter.java
src/camidion/chordhelper/mididevice/MidiCablePane.java
src/camidion/chordhelper/mididevice/ReceiverListView.java
src/camidion/chordhelper/mididevice/TransmitterListModel.java
src/camidion/chordhelper/mididevice/TransmitterListView.java

index fcda283..7951ace 100644 (file)
@@ -285,7 +285,7 @@ public class ChordHelperApplet extends JApplet {
         */
        public static class VersionInfo {
                public static final String      NAME = "MIDI Chord Helper";
-               public static final String      VERSION = "Ver.20160619.2";
+               public static final String      VERSION = "Ver.20160621.1";
                public static final String      COPYRIGHT = "Copyright (C) 2004-2016";
                public static final String      AUTHER = "@きよし - Akiyoshi Kamide";
                public static final String      URL = "http://www.yk.rim.or.jp/~kamide/music/chordhelper/";
index 0f84d14..3cf1b92 100644 (file)
@@ -4,7 +4,7 @@ import javax.sound.midi.Receiver;
 import javax.sound.midi.Transmitter;
 
 /**
- * 実体のない新規{@link Transmitter}
+ * レシーバを保持するだけのダミートランスミッタを表すクラスです。
  */
 public class DummyTransmitter implements Transmitter {
        private Receiver receiver;
index e4f4b03..a6710bc 100644 (file)
@@ -33,19 +33,22 @@ import javax.swing.event.ListDataListener;
 /**
  * MIDI ケーブル描画面
  */
-public class MidiCablePane extends JComponent implements DragSourceMotionListener {
+public class MidiCablePane extends JComponent {
        static DraggingTransceiver dragging = new DraggingTransceiver();
        private Point draggingPoint;
        /**
         * ドラッグしている最中に再描画するためのソースモーションリスナー
         */
-       @Override
-       public void dragMouseMoved(DragSourceDragEvent dsde) {
-               Point origin = getLocationOnScreen();
-               draggingPoint = dsde.getLocation();
-               draggingPoint.translate(-origin.x, -origin.y);
-               repaint();
-       }
+       public final DragSourceMotionListener dragSourceMotionListener = new DragSourceMotionListener() {
+               @Override
+               public void dragMouseMoved(DragSourceDragEvent dsde) {
+                       Point origin = getLocationOnScreen();
+                       draggingPoint = dsde.getLocation();
+                       draggingPoint.translate(-origin.x, -origin.y);
+                       repaint();
+               }
+
+       };
        /**
         * ドラッグ終了時に再描画するためのソースリスナー
         */
index 780fb33..bc1905d 100644 (file)
@@ -70,7 +70,7 @@ public class ReceiverListView extends JList<Receiver> {
         * @param model このビューから参照されるデータモデル
         * @param cablePane MIDIケーブル描画面
         */
-       public ReceiverListView(ReceiverListModel model, final MidiCablePane cablePane) {
+       public ReceiverListView(ReceiverListModel model, MidiCablePane cablePane) {
                super(model);
                setCellRenderer(new CellRenderer());
                setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
@@ -82,15 +82,13 @@ public class ReceiverListView extends JList<Receiver> {
                        @Override
                        public void dragGestureRecognized(DragGestureEvent event) {
                                if( (event.getDragAction() & DnDConstants.ACTION_COPY_OR_MOVE) == 0 ) return;
-                               int draggingIndex = locationToIndex(event.getDragOrigin());
-                               MidiCablePane.dragging.setData(getModel().getElementAt(draggingIndex));
-                               event.startDrag(DragSource.DefaultLinkDrop,
-                                               MidiCablePane.dragging, cablePane.dragSourceListener);
+                               MidiCablePane.dragging.setData(getModel().getElementAt(locationToIndex(event.getDragOrigin())));
+                               event.startDrag(DragSource.DefaultLinkDrop, MidiCablePane.dragging, cablePane.dragSourceListener);
                        }
                };
                DragSource dragSource = new DragSource();
                dragSource.createDefaultDragGestureRecognizer(this, DnDConstants.ACTION_COPY_OR_MOVE, dgl);
-               dragSource.addDragSourceMotionListener(cablePane);
+               dragSource.addDragSourceMotionListener(cablePane.dragSourceMotionListener);
                //
                // 外からドラッグされたトランスミッタを、ドロップした場所のレシーバに接続する
                DropTargetListener dtl = new DropTargetAdapter() {
@@ -114,9 +112,9 @@ public class ReceiverListView extends JList<Receiver> {
                                        return;
                                }
                                try {
-                                       Object sourceTx = t.getTransferData(DraggingTransceiver.transmitterFlavor);
-                                       if( sourceTx != null ) {
-                                               ((Transmitter)sourceTx).setReceiver(getModel().getElementAt(locationToIndex(event.getLocation())));
+                                       Object tx = t.getTransferData(DraggingTransceiver.transmitterFlavor);
+                                       if( tx != null ) {
+                                               ((Transmitter)tx).setReceiver(getModel().getElementAt(locationToIndex(event.getLocation())));
                                                event.dropComplete(true);
                                                return;
                                        }
index 37dbecb..d6dd7be 100644 (file)
@@ -14,16 +14,14 @@ import javax.swing.AbstractListModel;
  * {@link Transmitter} のリストを表す {@link javax.swing.ListModel}
  */
 public class TransmitterListModel extends AbstractListModel<Transmitter> {
-       protected Transmitter dummyTransmitter = new DummyTransmitter();
        protected MidiDeviceModel deviceModel;
-       public TransmitterListModel(MidiDeviceModel deviceModel) {
-               this.deviceModel = deviceModel;
-       }
+       public TransmitterListModel(MidiDeviceModel deviceModel) { this.deviceModel = deviceModel; }
+       private Transmitter dummyTx = new DummyTransmitter();
        @Override
        public Transmitter getElementAt(int index) {
                List<Transmitter> txList = deviceModel.getMidiDevice().getTransmitters();
                int length = txList.size();
-               if( index == length ) return dummyTransmitter;
+               if( index == length ) return dummyTx;
                if( index > length || index < 0 ) return null;
                return txList.get(index);
        }
@@ -33,7 +31,7 @@ public class TransmitterListModel extends AbstractListModel<Transmitter> {
        }
        public int indexOf(Object element) {
                List<Transmitter> txList = deviceModel.getMidiDevice().getTransmitters();
-               return dummyTransmitter.equals(element) ? txList.size() : txList.indexOf(element);
+               return dummyTx.equals(element) ? txList.size() : txList.indexOf(element);
        }
        /**
         * レシーバに未接続の最初の{@link Transmitter}を返します。
@@ -42,17 +40,16 @@ public class TransmitterListModel extends AbstractListModel<Transmitter> {
         * @return 未接続の{@link Transmitter}
         * @throws MidiUnavailableException リソースの制約のためにトランスミッタを使用できない場合にスローされる
         */
-       public Transmitter getUnconnectedTransmitter() throws MidiUnavailableException {
+       public Transmitter getTransmitter() throws MidiUnavailableException {
                MidiDevice device = deviceModel.getMidiDevice();
                List<Transmitter> txList = device.getTransmitters();
                for( Transmitter tx : txList ) if( tx.getReceiver() == null ) return tx;
-               Transmitter tx;
-               tx = device.getTransmitter();
+               Transmitter tx = device.getTransmitter();
                fireIntervalAdded(this, 0, getSize());
                return tx;
        }
        /**
-        * このリストモデルの{@link #getUnconnectedTransmitter()}が返した{@link Transmitter}を、
+        * このリストモデルの{@link #getTransmitter()}が返した{@link Transmitter}を、
         * 相手のMIDIデバイスが持つ最初の{@link Receiver}に接続します。
         *
         * @param anotherDeviceModel 接続相手のMIDIデバイス
@@ -61,7 +58,7 @@ public class TransmitterListModel extends AbstractListModel<Transmitter> {
        public void connectToFirstReceiverOfDevice(MidiDeviceModel anotherDeviceModel) throws MidiUnavailableException {
                List<Receiver> rxList = anotherDeviceModel.getMidiDevice().getReceivers();
                if( ! rxList.isEmpty() )
-                       deviceModel.getTransmitterListModel().getUnconnectedTransmitter().setReceiver(rxList.get(0));
+                       deviceModel.getTransmitterListModel().getTransmitter().setReceiver(rxList.get(0));
        }
        /**
         * 指定の{@link Transmitter}がリストにあれば、それを閉じます。
@@ -114,10 +111,10 @@ public class TransmitterListModel extends AbstractListModel<Transmitter> {
                        Receiver rx = tx.getReceiver();
                        if( rx != null ) peerRxList.add(rx);
                }
-               List<Receiver> myRxList = device.getReceivers();
                List<Transmitter> peerTxList = new Vector<Transmitter>();
                MidiDeviceModelList deviceModelList = deviceModel.getDeviceModelList();
-               for( Receiver rx : myRxList ) {
+               List<Receiver> rxList = device.getReceivers();
+               for( Receiver rx : rxList ) {
                        for( MidiDeviceModel m : deviceModelList ) {
                                if( m == deviceModel ) continue;
                                List<Transmitter> peerSourceTxList = m.getMidiDevice().getTransmitters();
@@ -129,9 +126,9 @@ public class TransmitterListModel extends AbstractListModel<Transmitter> {
                device.close();
                try {
                        device.open();
-                       for( Receiver peerRx : peerRxList ) getUnconnectedTransmitter().setReceiver(peerRx);
-                       if( ! myRxList.isEmpty() ) {
-                               Receiver rx = myRxList.get(0);
+                       for( Receiver peerRx : peerRxList ) getTransmitter().setReceiver(peerRx);
+                       if( ! rxList.isEmpty() ) {
+                               Receiver rx = rxList.get(0);
                                for( Transmitter peerTx : peerTxList ) peerTx.setReceiver(rx);
                        }
                } catch( MidiUnavailableException e ) {
index 6c15c91..950ae50 100644 (file)
@@ -76,7 +76,7 @@ public class TransmitterListView extends JList<Transmitter> {
         * @param model このビューから参照されるデータモデル
         * @param cablePane MIDIケーブル描画面
         */
-       public TransmitterListView(TransmitterListModel model, final MidiCablePane cablePane) {
+       public TransmitterListView(TransmitterListModel model, MidiCablePane cablePane) {
                super(model);
                setCellRenderer(new CellRenderer());
                setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
@@ -88,8 +88,7 @@ public class TransmitterListView extends JList<Transmitter> {
                        @Override
                        public void dragGestureRecognized(DragGestureEvent event) {
                                if( (event.getDragAction() & DnDConstants.ACTION_COPY_OR_MOVE) == 0 ) return;
-                               int draggingIndex = locationToIndex(event.getDragOrigin());
-                               MidiCablePane.dragging.setData(getModel().getElementAt(draggingIndex));
+                               MidiCablePane.dragging.setData(getModel().getElementAt(locationToIndex(event.getDragOrigin())));
                                event.startDrag(DragSource.DefaultLinkDrop, MidiCablePane.dragging, new DragSourceAdapter() {
                                        @Override
                                        public void dragDropEnd(DragSourceDropEvent event) {
@@ -101,7 +100,7 @@ public class TransmitterListView extends JList<Transmitter> {
                                                        // ドロップされたダミートランスミッタに接続されたレシーバを
                                                        // 新しい本物のトランスミッタに付け替える
                                                        try {
-                                                               getModel().getUnconnectedTransmitter().setReceiver(droppedTx.getReceiver());
+                                                               getModel().getTransmitter().setReceiver(droppedTx.getReceiver());
                                                        } catch (Exception exception) {
                                                                exception.printStackTrace();
                                                        }
@@ -114,7 +113,7 @@ public class TransmitterListView extends JList<Transmitter> {
                };
                DragSource dragSource = new DragSource();
                dragSource.createDefaultDragGestureRecognizer(this, DnDConstants.ACTION_COPY_OR_MOVE, dgl);
-               dragSource.addDragSourceMotionListener(cablePane);
+               dragSource.addDragSourceMotionListener(cablePane.dragSourceMotionListener);
                //
                // 外からドラッグされたレシーバを、ドロップした場所のトランスミッタに接続する
                DropTargetListener dtl = new DropTargetAdapter() {
@@ -138,11 +137,11 @@ public class TransmitterListView extends JList<Transmitter> {
                                        return;
                                }
                                try {
-                                       Object sourceRx = t.getTransferData(DraggingTransceiver.receiverFlavor);
-                                       if( sourceRx != null ) {
+                                       Object rx = t.getTransferData(DraggingTransceiver.receiverFlavor);
+                                       if( rx != null ) {
                                                Transmitter tx = getModel().getElementAt(locationToIndex(event.getLocation()));
-                                               if( tx instanceof DummyTransmitter ) tx = getModel().getUnconnectedTransmitter();
-                                               tx.setReceiver((Receiver)sourceRx);
+                                               if( tx instanceof DummyTransmitter ) tx = getModel().getTransmitter();
+                                               tx.setReceiver((Receiver)rx);
                                                event.dropComplete(true);
                                                return;
                                        }