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());
}
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);
@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);
}
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;