From: Akiyoshi Kamide Date: Tue, 21 Jun 2016 16:38:16 +0000 (+0900) Subject: リファクタリング(MIDIデバイス周り) X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=26249f2502d752332cdf7e129927388cfff941ff;p=midichordhelper%2FMIDIChordHelper.git リファクタリング(MIDIデバイス周り) --- diff --git a/src/camidion/chordhelper/ChordHelperApplet.java b/src/camidion/chordhelper/ChordHelperApplet.java index fcda283..7951ace 100644 --- a/src/camidion/chordhelper/ChordHelperApplet.java +++ b/src/camidion/chordhelper/ChordHelperApplet.java @@ -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/"; diff --git a/src/camidion/chordhelper/mididevice/DummyTransmitter.java b/src/camidion/chordhelper/mididevice/DummyTransmitter.java index 0f84d14..3cf1b92 100644 --- a/src/camidion/chordhelper/mididevice/DummyTransmitter.java +++ b/src/camidion/chordhelper/mididevice/DummyTransmitter.java @@ -4,7 +4,7 @@ import javax.sound.midi.Receiver; import javax.sound.midi.Transmitter; /** - * 実体のない新規{@link Transmitter} + * レシーバを保持するだけのダミートランスミッタを表すクラスです。 */ public class DummyTransmitter implements Transmitter { private Receiver receiver; diff --git a/src/camidion/chordhelper/mididevice/MidiCablePane.java b/src/camidion/chordhelper/mididevice/MidiCablePane.java index e4f4b03..a6710bc 100644 --- a/src/camidion/chordhelper/mididevice/MidiCablePane.java +++ b/src/camidion/chordhelper/mididevice/MidiCablePane.java @@ -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(); + } + + }; /** * ドラッグ終了時に再描画するためのソースリスナー */ diff --git a/src/camidion/chordhelper/mididevice/ReceiverListView.java b/src/camidion/chordhelper/mididevice/ReceiverListView.java index 780fb33..bc1905d 100644 --- a/src/camidion/chordhelper/mididevice/ReceiverListView.java +++ b/src/camidion/chordhelper/mididevice/ReceiverListView.java @@ -70,7 +70,7 @@ public class ReceiverListView extends JList { * @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 { @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 { 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; } diff --git a/src/camidion/chordhelper/mididevice/TransmitterListModel.java b/src/camidion/chordhelper/mididevice/TransmitterListModel.java index 37dbecb..d6dd7be 100644 --- a/src/camidion/chordhelper/mididevice/TransmitterListModel.java +++ b/src/camidion/chordhelper/mididevice/TransmitterListModel.java @@ -14,16 +14,14 @@ import javax.swing.AbstractListModel; * {@link Transmitter} のリストを表す {@link javax.swing.ListModel} */ public class TransmitterListModel extends AbstractListModel { - 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 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 { } public int indexOf(Object element) { List 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 { * @return 未接続の{@link Transmitter} * @throws MidiUnavailableException リソースの制約のためにトランスミッタを使用できない場合にスローされる */ - public Transmitter getUnconnectedTransmitter() throws MidiUnavailableException { + public Transmitter getTransmitter() throws MidiUnavailableException { MidiDevice device = deviceModel.getMidiDevice(); List 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 { public void connectToFirstReceiverOfDevice(MidiDeviceModel anotherDeviceModel) throws MidiUnavailableException { List 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 { Receiver rx = tx.getReceiver(); if( rx != null ) peerRxList.add(rx); } - List myRxList = device.getReceivers(); List peerTxList = new Vector(); MidiDeviceModelList deviceModelList = deviceModel.getDeviceModelList(); - for( Receiver rx : myRxList ) { + List rxList = device.getReceivers(); + for( Receiver rx : rxList ) { for( MidiDeviceModel m : deviceModelList ) { if( m == deviceModel ) continue; List peerSourceTxList = m.getMidiDevice().getTransmitters(); @@ -129,9 +126,9 @@ public class TransmitterListModel extends AbstractListModel { 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 ) { diff --git a/src/camidion/chordhelper/mididevice/TransmitterListView.java b/src/camidion/chordhelper/mididevice/TransmitterListView.java index 6c15c91..950ae50 100644 --- a/src/camidion/chordhelper/mididevice/TransmitterListView.java +++ b/src/camidion/chordhelper/mididevice/TransmitterListView.java @@ -76,7 +76,7 @@ public class TransmitterListView extends JList { * @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 { @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 { // ドロップされたダミートランスミッタに接続されたレシーバを // 新しい本物のトランスミッタに付け替える 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 { }; 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 { 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; }