From: Akiyoshi Kamide
Date: Mon, 2 May 2016 17:04:50 +0000 (+0900)
Subject: MIDI Device画面の改良
X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=e9744c5ae8897b52c0bd06ed598c6c67589de808;p=midichordhelper%2FMIDIChordHelper.git
MIDI Device画面の改良
・Rx以外にドロップしたときにTxが閉じるようにした
・CloseTxボタンの廃止
---
diff --git a/src/camidion/chordhelper/ChordHelperApplet.java b/src/camidion/chordhelper/ChordHelperApplet.java
index 8f7e09a..7c565ae 100644
--- a/src/camidion/chordhelper/ChordHelperApplet.java
+++ b/src/camidion/chordhelper/ChordHelperApplet.java
@@ -284,7 +284,7 @@ public class ChordHelperApplet extends JApplet {
*/
public static class VersionInfo {
public static final String NAME = "MIDI Chord Helper";
- public static final String VERSION = "Ver.20160501.1";
+ public static final String VERSION = "Ver.20160502.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/MidiConnecterListModel.java b/src/camidion/chordhelper/mididevice/MidiConnecterListModel.java
index 196f69b..8b9c074 100644
--- a/src/camidion/chordhelper/mididevice/MidiConnecterListModel.java
+++ b/src/camidion/chordhelper/mididevice/MidiConnecterListModel.java
@@ -19,20 +19,9 @@ public class MidiConnecterListModel extends AbstractListModel {
/**
* å®ä½ã®ãªãæ°è¦Transmitterã表ãã¤ã³ã¿ã¼ãã§ã¼ã¹
*/
- public interface NewTransmitter extends Transmitter {
- /**
- * å容å
ã®ãªã¹ãã¢ãã«ãè¿ãã¾ãã
- *
- * @return å容å
ã®ãªã¹ãã¢ãã«
- */
- public MidiConnecterListModel getMidiConnecterListModel();
- };
+ public interface NewTransmitter extends Transmitter {};
public NewTransmitter newTransmitter = new NewTransmitter() {
@Override
- public MidiConnecterListModel getMidiConnecterListModel() {
- return MidiConnecterListModel.this;
- }
- @Override
public void setReceiver(Receiver receiver) { }
@Override
public Receiver getReceiver() { return null; }
@@ -134,14 +123,13 @@ public class MidiConnecterListModel extends AbstractListModel {
}
}
/**
- * å¼æ°ã§æå®ããããã©ã³ã¹ããã¿ããæåã®ã¬ã·ã¼ãã«æ¥ç¶ãã¾ãã
+ * å¼æ°ã§æå®ããããã©ã³ã¹ããã¿ãã¬ã·ã¼ããæ¥ç¶ãã¾ãã
* @param tx ãã©ã³ã¹ããã¿
- * @return æ¥ç¶ãããã¬ã·ã¼ãï¼è¦ã¤ãããªãã£ãå ´åã¯nullï¼
+ * @param rx ã¬ã·ã¼ã
+ * @return æ¥ç¶ãããã¬ã·ã¼ãï¼ãã®ãªã¹ãã«ãªãã¬ã·ã¼ããæå®ãããå ´åã¯nullï¼
*/
- public Receiver ConnectToReceiver(Transmitter tx) {
- List receivers = device.getReceivers();
- if( receivers.isEmpty() ) return null;
- Receiver rx = receivers.get(0);
+ public Receiver ConnectToReceiver(Transmitter tx, Receiver rx) {
+ if( ! device.getReceivers().contains(rx) ) return null;
tx.setReceiver(rx);
fireContentsChanged(this,0,getSize());
return rx;
diff --git a/src/camidion/chordhelper/mididevice/MidiConnecterListView.java b/src/camidion/chordhelper/mididevice/MidiConnecterListView.java
index 08cf11e..9922bdf 100644
--- a/src/camidion/chordhelper/mididevice/MidiConnecterListView.java
+++ b/src/camidion/chordhelper/mididevice/MidiConnecterListView.java
@@ -7,6 +7,10 @@ import java.awt.dnd.DnDConstants;
import java.awt.dnd.DragGestureEvent;
import java.awt.dnd.DragGestureListener;
import java.awt.dnd.DragSource;
+import java.awt.dnd.DragSourceDragEvent;
+import java.awt.dnd.DragSourceDropEvent;
+import java.awt.dnd.DragSourceEvent;
+import java.awt.dnd.DragSourceListener;
import java.awt.dnd.DropTarget;
import java.awt.dnd.DropTargetDragEvent;
import java.awt.dnd.DropTargetDropEvent;
@@ -31,7 +35,7 @@ import camidion.chordhelper.ButtonIcon;
*
*/
public class MidiConnecterListView extends JList
- implements Transferable, DragGestureListener, DropTargetListener
+ implements DragGestureListener, DragSourceListener, Transferable, DropTargetListener
{
public static final Icon MIDI_CONNECTER_ICON =
new ButtonIcon(ButtonIcon.MIDI_CONNECTOR_ICON);
@@ -45,7 +49,8 @@ public class MidiConnecterListView extends JList
) {
String text;
if( value instanceof Receiver ) text = "Rx";
- else if( value == null || value instanceof Transmitter ) text = null;
+ else if( value instanceof Transmitter ) text = "Tx";
+ else if( value == null ) text = null;
else text = value.toString();
setText(text);
setIcon(MIDI_CONNECTER_ICON);
@@ -77,32 +82,49 @@ public class MidiConnecterListView extends JList
);
new DropTarget( this, DnDConstants.ACTION_COPY_OR_MOVE, this, true );
}
+
+ @Override
+ public void dragGestureRecognized(DragGestureEvent dge) {
+ if( (dge.getDragAction() & DnDConstants.ACTION_COPY_OR_MOVE) == 0 ) return;
+ AutoCloseable e = getModel().getElementAt(locationToIndex(dge.getDragOrigin()));
+ if( e instanceof Transmitter ) {
+ if( e instanceof MidiConnecterListModel.NewTransmitter ) {
+ transferringTx = getModel().getTransmitter();
+ }
+ else {
+ transferringTx = (Transmitter)e;
+ }
+ dge.startDrag(DragSource.DefaultLinkDrop, this, this);
+ }
+ }
+
+ @Override
+ public void dragEnter(DragSourceDragEvent dsde) {}
+ @Override
+ public void dragOver(DragSourceDragEvent dsde) {}
+ @Override
+ public void dropActionChanged(DragSourceDragEvent dsde) {}
+ @Override
+ public void dragExit(DragSourceEvent dse) {}
+ @Override
+ public void dragDropEnd(DragSourceDropEvent dsde) {
+ if( ! dsde.getDropSuccess() ) getModel().closeTransmitter(transferringTx);
+ transferringTx = null;
+ }
+
+ private Transmitter transferringTx = null;
private static final DataFlavor transmitterFlavor =
new DataFlavor(Transmitter.class, "Transmitter");
private static final DataFlavor transmitterFlavors[] = {transmitterFlavor};
@Override
- public Object getTransferData(DataFlavor flavor) {
- return getModel().getElementAt(getSelectedIndex());
- }
+ public Object getTransferData(DataFlavor flavor) { return transferringTx; }
@Override
- public DataFlavor[] getTransferDataFlavors() {
- return transmitterFlavors;
- }
+ public DataFlavor[] getTransferDataFlavors() { return transmitterFlavors; }
@Override
public boolean isDataFlavorSupported(DataFlavor flavor) {
return flavor.equals(transmitterFlavor);
}
- @Override
- public void dragGestureRecognized(DragGestureEvent dge) {
- int action = dge.getDragAction();
- if( (action & DnDConstants.ACTION_COPY_OR_MOVE) == 0 )
- return;
- int index = locationToIndex(dge.getDragOrigin());
- AutoCloseable data = getModel().getElementAt(index);
- if( data instanceof Transmitter ) {
- dge.startDrag(DragSource.DefaultLinkDrop, this, null);
- }
- }
+
@Override
public void dragEnter(DropTargetDragEvent event) {
if( event.isDataFlavorSupported(transmitterFlavor) )
@@ -123,22 +145,15 @@ public class MidiConnecterListView extends JList
event.dropComplete(false);
return;
}
- Transferable t = event.getTransferable();
- Object data = t.getTransferData(transmitterFlavor);
- Transmitter newTransmitter = null;
- if( data instanceof MidiConnecterListModel.NewTransmitter ) {
- newTransmitter = ((MidiConnecterListModel.NewTransmitter)data).getMidiConnecterListModel().getTransmitter();
- }
- else if( data instanceof Transmitter ) {
- newTransmitter = (Transmitter)data;
- }
- else {
+ AutoCloseable destination = getModel().getElementAt(locationToIndex(event.getLocation()));
+ if( ! (destination instanceof Receiver) ) {
event.dropComplete(false);
return;
}
- if( getModel().ConnectToReceiver(newTransmitter) == null ) {
- newTransmitter.close();
+ Transmitter sourceTx = (Transmitter)event.getTransferable().getTransferData(transmitterFlavor);
+ if( getModel().ConnectToReceiver(sourceTx, (Receiver)destination) == null ) {
event.dropComplete(false);
+ return;
}
event.dropComplete(true);
}
diff --git a/src/camidion/chordhelper/mididevice/MidiDeviceFrame.java b/src/camidion/chordhelper/mididevice/MidiDeviceFrame.java
index 0a30604..5c97aab 100644
--- a/src/camidion/chordhelper/mididevice/MidiDeviceFrame.java
+++ b/src/camidion/chordhelper/mididevice/MidiDeviceFrame.java
@@ -1,13 +1,11 @@
package camidion.chordhelper.mididevice;
-import java.awt.Insets;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.sound.midi.MidiDevice;
import javax.swing.BoxLayout;
-import javax.swing.JButton;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
@@ -20,7 +18,6 @@ import javax.swing.event.InternalFrameEvent;
* MIDIããã¤ã¹ãã¬ã¼ã ãã¥ã¼
*/
public class MidiDeviceFrame extends JInternalFrame {
- private static Insets ZERO_INSETS = new Insets(0,0,0,0);
/**
* ããã¤ã¹ã®ä»®æ³MIDI端åãªã¹ããã¥ã¼
*/
@@ -64,17 +61,6 @@ public class MidiDeviceFrame extends JInternalFrame {
setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));
add(new JScrollPane(listView));
add(new JPanel() {{
- if( listView.getModel().txSupported() ) {
- add(new JButton("Close Tx") {{
- setMargin(ZERO_INSETS);
- addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent event) {
- listView.closeSelectedTransmitter();
- }
- });
- }});
- }
add(new JLabel() {{
timer = new Timer(50, new ActionListener() {
private long sec = -2;
@@ -94,7 +80,6 @@ public class MidiDeviceFrame extends JInternalFrame {
});
}});
}});
- setSize(250,100);
}
/**
* æå®ãããã¤ã³ããã¯ã¹ã示ãä»®æ³MIDI端åãªã¹ãã®è¦ç´ ã®ã»ã«ç¯å²ãè¿ãã¾ãã