OSDN Git Service

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

index 7951ace..42fd448 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.20160621.1";
+               public static final String      VERSION = "Ver.20160622.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 3cf1b92..96469d7 100644 (file)
@@ -13,5 +13,5 @@ public class DummyTransmitter implements Transmitter {
        @Override
        public Receiver getReceiver() { return receiver; }
        @Override
-       public void close() { }
+       public void close() { receiver = null; }
 }
index d6dd7be..f29ba5f 100644 (file)
@@ -34,40 +34,36 @@ public class TransmitterListModel extends AbstractListModel<Transmitter> {
                return dummyTx.equals(element) ? txList.size() : txList.indexOf(element);
        }
        /**
-        * レシーバに未接続の最初の{@link Transmitter}を返します。
-        * ã\81ªã\81\84å ´å\90\88ã\81¯{@link MidiDevice#getTransmitter}ã\81§æ\96°ã\81\9fã\81«å\8f\96å¾\97ã\81\97ã\81¦è¿\94します。
+        * 新しい{@link Transmitter}を{@link MidiDevice#getTransmitter}で生成し、
+        * ã\81\93ã\81®ã\83¢ã\83\87ã\83«ã\82\92å\8f\82ç\85§ã\81\97ã\81¦ã\81\84ã\82\8bã\83\93ã\83¥ã\83¼ã\81«é\80\9aç\9f¥します。
         *
         * @return 未接続の{@link Transmitter}
         * @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 = device.getTransmitter();
+       public Transmitter openTransmitter() throws MidiUnavailableException {
+               Transmitter tx = deviceModel.getMidiDevice().getTransmitter();
                fireIntervalAdded(this, 0, getSize());
                return tx;
        }
        /**
-        * このリストモデルの{@link #getTransmitter()}が返した{@link Transmitter}を、
-        * 相手のMIDIデバイスが持つ最初の{@link Receiver}に接続します。
+        * 相手のMIDIデバイスが持つ最初の{@link Receiver}を、
+        * このリストモデルの新規{@link Transmitter}に接続します。
         *
         * @param anotherDeviceModel 接続相手のMIDIデバイス
         * @throws MidiUnavailableException リソースの制約のためにトランスミッタを使用できない場合にスローされる
         */
        public void connectToFirstReceiverOfDevice(MidiDeviceModel anotherDeviceModel) throws MidiUnavailableException {
                List<Receiver> rxList = anotherDeviceModel.getMidiDevice().getReceivers();
-               if( ! rxList.isEmpty() )
-                       deviceModel.getTransmitterListModel().getTransmitter().setReceiver(rxList.get(0));
+               if( rxList.isEmpty() ) return;
+               deviceModel.getTransmitterListModel().openTransmitter().setReceiver(rxList.get(0));
        }
        /**
-        * æ\8c\87å®\9aã\81®{@link Transmitter}ã\81\8cã\83ªã\82¹ã\83\88ã\81«ã\81\82ã\82\8cã\81°ã\80\81ã\81\9dã\82\8cã\82\92é\96\89ã\81\98ã\81¾ã\81\99ã\80\82
-        * 閉じるとリストから自動的に削除されるので、表示の更新も行います。
+        * æ\8c\87å®\9aã\81®{@link Transmitter}ã\82\92é\96\89ã\81\98ã\80\81è¦\81ç´ ã\81\8cæ¸\9bã\81£ã\81\9fã\81\93ã\81¨ã\82\92ã\80\81
+        * このモデルを参照しているビューに通知します。
         *
         * @param tx このリストモデルで開いている{@link Transmitter}
         */
-       public void close(Transmitter tx) {
-               if( ! deviceModel.getMidiDevice().getTransmitters().contains(tx) ) return;
+       public void closeTransmitter(Transmitter tx) {
                tx.close();
                fireIntervalRemoved(this, 0, getSize());
        }
@@ -126,7 +122,7 @@ public class TransmitterListModel extends AbstractListModel<Transmitter> {
                device.close();
                try {
                        device.open();
-                       for( Receiver peerRx : peerRxList ) getTransmitter().setReceiver(peerRx);
+                       for( Receiver peerRx : peerRxList ) openTransmitter().setReceiver(peerRx);
                        if( ! rxList.isEmpty() ) {
                                Receiver rx = rxList.get(0);
                                for( Transmitter peerTx : peerTxList ) peerTx.setReceiver(rx);
index 950ae50..e15c52b 100644 (file)
@@ -88,23 +88,22 @@ public class TransmitterListView extends JList<Transmitter> {
                        @Override
                        public void dragGestureRecognized(DragGestureEvent event) {
                                if( (event.getDragAction() & DnDConstants.ACTION_COPY_OR_MOVE) == 0 ) return;
-                               MidiCablePane.dragging.setData(getModel().getElementAt(locationToIndex(event.getDragOrigin())));
+                               Transmitter tx = getModel().getElementAt(locationToIndex(event.getDragOrigin()));
+                               MidiCablePane.dragging.setData(tx);
                                event.startDrag(DragSource.DefaultLinkDrop, MidiCablePane.dragging, new DragSourceAdapter() {
                                        @Override
                                        public void dragDropEnd(DragSourceDropEvent event) {
-                                               Transmitter droppedTx = (Transmitter)MidiCablePane.dragging.getData();
+                                               Transmitter tx = (Transmitter)MidiCablePane.dragging.getData();
                                                if( ! event.getDropSuccess() ) {
-                                                       // 所定の場所にドロップされなかったトランスミッタを閉じる
-                                                       getModel().close(droppedTx);
-                                               } else if( droppedTx instanceof DummyTransmitter ) {
-                                                       // ドロップされたダミートランスミッタに接続されたレシーバを
-                                                       // 新しい本物のトランスミッタに付け替える
+                                                       getModel().closeTransmitter(tx);
+                                               } else if( tx instanceof DummyTransmitter ) {
+                                                       Receiver rx = tx.getReceiver();
+                                                       tx.close();
                                                        try {
-                                                               getModel().getTransmitter().setReceiver(droppedTx.getReceiver());
+                                                               getModel().openTransmitter().setReceiver(rx);
                                                        } catch (Exception exception) {
                                                                exception.printStackTrace();
                                                        }
-                                                       droppedTx.setReceiver(null);
                                                }
                                                cablePane.dragSourceListener.dragDropEnd(event);
                                        }
@@ -140,7 +139,7 @@ public class TransmitterListView extends JList<Transmitter> {
                                        Object rx = t.getTransferData(DraggingTransceiver.receiverFlavor);
                                        if( rx != null ) {
                                                Transmitter tx = getModel().getElementAt(locationToIndex(event.getLocation()));
-                                               if( tx instanceof DummyTransmitter ) tx = getModel().getTransmitter();
+                                               if( tx instanceof DummyTransmitter ) tx = getModel().openTransmitter();
                                                tx.setReceiver((Receiver)rx);
                                                event.dropComplete(true);
                                                return;