*/
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/";
import javax.sound.midi.Transmitter;
/**
- * 実体のない新規{@link Transmitter}
+ * レシーバを保持するだけのダミートランスミッタを表すクラスです。
*/
public class DummyTransmitter implements Transmitter {
private Receiver receiver;
/**
* 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();
+ }
+
+ };
/**
* ドラッグ終了時に再描画するためのソースリスナー
*/
* @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);
@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() {
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;
}
* {@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);
}
}
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}を返します。
* @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デバイス
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}がリストにあれば、それを閉じます。
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();
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 ) {
* @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);
@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) {
// ドロップされたダミートランスミッタに接続されたレシーバを
// 新しい本物のトランスミッタに付け替える
try {
- getModel().getUnconnectedTransmitter().setReceiver(droppedTx.getReceiver());
+ getModel().getTransmitter().setReceiver(droppedTx.getReceiver());
} catch (Exception exception) {
exception.printStackTrace();
}
};
DragSource dragSource = new DragSource();
dragSource.createDefaultDragGestureRecognizer(this, DnDConstants.ACTION_COPY_OR_MOVE, dgl);
- dragSource.addDragSourceMotionListener(cablePane);
+ dragSource.addDragSourceMotionListener(cablePane.dragSourceMotionListener);
//
// 外からドラッグされたレシーバを、ドロップした場所のトランスミッタに接続する
DropTargetListener dtl = new DropTargetAdapter() {
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;
}