OSDN Git Service

リファクタリング
authorAkiyoshi Kamide <kamide@yk.rim.or.jp>
Wed, 29 Jun 2016 15:33:34 +0000 (00:33 +0900)
committerAkiyoshi Kamide <kamide@yk.rim.or.jp>
Wed, 29 Jun 2016 15:33:34 +0000 (00:33 +0900)
src/camidion/chordhelper/ChordHelperApplet.java
src/camidion/chordhelper/mididevice/AbstractTransceiverListModel.java [moved from src/camidion/chordhelper/mididevice/TransceiverListModel.java with 85% similarity]
src/camidion/chordhelper/mididevice/AbstractTransceiverListView.java [moved from src/camidion/chordhelper/mididevice/TransceiverListView.java with 85% similarity]
src/camidion/chordhelper/mididevice/MidiCablePane.java
src/camidion/chordhelper/mididevice/ReceiverListModel.java
src/camidion/chordhelper/mididevice/ReceiverListView.java
src/camidion/chordhelper/mididevice/TransmitterListModel.java
src/camidion/chordhelper/mididevice/TransmitterListView.java

index 85d7d36..6289250 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.20160628.1";
+               public static final String      VERSION = "Ver.20160629.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/";
@@ -9,8 +9,8 @@ import javax.swing.AbstractListModel;
 /**
  * {@link Transmitter}または{@link Receiver}のリストを表す{@link javax.swing.ListModel}の基底抽象クラス
  */
-public abstract class TransceiverListModel<E> extends AbstractListModel<E> {
-       public TransceiverListModel(MidiDeviceModel deviceModel) {
+public abstract class AbstractTransceiverListModel<E> extends AbstractListModel<E> {
+       public AbstractTransceiverListModel(MidiDeviceModel deviceModel) {
                this.deviceModel = deviceModel;
        }
        protected MidiDeviceModel deviceModel;
@@ -11,14 +11,14 @@ import javax.swing.ListSelectionModel;
 /**
  * MIDIレシーバ({@link Receiver})またはMIDIトランスミッタ({@link Transmitter})のリストを表示する基底の抽象リストビューです。
  */
-public abstract class TransceiverListView<E> extends JList<E> {
+public abstract class AbstractTransceiverListView<E> extends JList<E> {
        /**
         * このリストによって表示されるリストを保持するデータモデルを返します。
         * @return 表示されるリストを提供するデータモデル
         */
        @Override
-       public TransceiverListModel<E> getModel() {
-               return (TransceiverListModel<E>) super.getModel();
+       public AbstractTransceiverListModel<E> getModel() {
+               return (AbstractTransceiverListModel<E>) super.getModel();
        }
        /**
         * このリストの座標系内の指定された位置にある要素を返します。
@@ -41,7 +41,7 @@ public abstract class TransceiverListView<E> extends JList<E> {
         * 仮想MIDI端子リストビューを生成します。
         * @param model このビューから参照されるデータモデル
         */
-       public TransceiverListView(TransceiverListModel<E> model) {
+       public AbstractTransceiverListView(AbstractTransceiverListModel<E> model) {
                super(model);
                setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
                setLayoutOrientation(JList.HORIZONTAL_WRAP);
index c0d9152..c6186de 100644 (file)
@@ -7,11 +7,6 @@ import java.awt.Graphics2D;
 import java.awt.Point;
 import java.awt.Rectangle;
 import java.awt.Stroke;
-import java.awt.dnd.DragSourceAdapter;
-import java.awt.dnd.DragSourceDragEvent;
-import java.awt.dnd.DragSourceDropEvent;
-import java.awt.dnd.DragSourceListener;
-import java.awt.dnd.DragSourceMotionListener;
 import java.awt.event.ComponentAdapter;
 import java.awt.event.ComponentEvent;
 import java.awt.event.ComponentListener;
@@ -37,32 +32,16 @@ public class MidiCablePane extends JComponent {
        static DraggingTransceiver dragging = new DraggingTransceiver();
        private Point draggingPoint;
        /**
-        * ドラッグしている最中に再描画するためのソースモーションリスナー
+        * ドラッグ中の場所を更新し、再描画を予約します。
+        * @param p ドラッグ中の場所(ドラッグ&ドロップ終了時はnullを指定)
         */
-       public final DragSourceMotionListener dragSourceMotionListener = new DragSourceMotionListener() {
-               @Override
-               public void dragMouseMoved(DragSourceDragEvent dsde) {
-                       setDraggingLocation(dsde.getLocation());
+       public void updateDraggingLocation(Point p) {
+               if( (draggingPoint = p) == null ) {
+                       dragging.setData(null);
+               } else {
+                       Point origin = getLocationOnScreen();
+                       draggingPoint.translate(-origin.x, -origin.y);
                }
-       };
-       public void setDraggingLocation(Point p) {
-               Point origin = getLocationOnScreen();
-               draggingPoint = p;
-               draggingPoint.translate(-origin.x, -origin.y);
-               repaint();
-       }
-       /**
-        * ドラッグ終了時に再描画するためのソースリスナー
-        */
-       public final DragSourceListener dragSourceListener = new DragSourceAdapter() {
-               @Override
-               public void dragDropEnd(DragSourceDropEvent dsde) {
-                       MidiCablePane.this.dragDropEnd();
-               }
-       };
-       public void dragDropEnd() {
-               dragging.setData(null);
-               draggingPoint = null;
                repaint();
        }
        /**
index 967738a..2b65802 100644 (file)
@@ -10,7 +10,7 @@ import javax.sound.midi.Transmitter;
 /**
  * {@link Receiver} のリストを表す {@link javax.swing.ListModel}
  */
-public class ReceiverListModel extends TransceiverListModel<Receiver> {
+public class ReceiverListModel extends AbstractTransceiverListModel<Receiver> {
        public ReceiverListModel(MidiDeviceModel deviceModel) { super(deviceModel); }
        protected List<Receiver> getTransceivers() {
                return deviceModel.getMidiDevice().getReceivers();
index c4d727d..145d21a 100644 (file)
@@ -6,6 +6,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.DragSourceAdapter;
+import java.awt.dnd.DragSourceDragEvent;
+import java.awt.dnd.DragSourceDropEvent;
+import java.awt.dnd.DragSourceMotionListener;
 import java.awt.dnd.DropTarget;
 import java.awt.dnd.DropTargetAdapter;
 import java.awt.dnd.DropTargetDragEvent;
@@ -18,10 +22,8 @@ import javax.swing.JList;
 
 /**
  * MIDIレシーバ({@link Receiver})のリストビューです。
- * レシーバをこのビューからドラッグし、
- * {@link TransmitterListView} のトランスミッタにドロップして接続できます。
  */
-public class ReceiverListView extends TransceiverListView<Receiver> {
+public class ReceiverListView extends AbstractTransceiverListView<Receiver> {
        /**
         * このリストによって表示される{@link Receiver}のリストを保持するデータモデルを返します。
         * @return 表示される{@link Receiver}のリストを提供するデータモデル
@@ -44,19 +46,29 @@ public class ReceiverListView extends TransceiverListView<Receiver> {
                                return this;
                        }
                });
+               // ドラッグ
                DragSource dragSource = new DragSource();
                DragGestureListener dgl = new DragGestureListener() {
                        @Override
                        public void dragGestureRecognized(DragGestureEvent event) {
                                if( (event.getDragAction() & DnDConstants.ACTION_COPY_OR_MOVE) == 0 ) return;
                                MidiCablePane.dragging.setData(getElementAt(event.getDragOrigin()));
-                               event.startDrag(DragSource.DefaultLinkDrop, MidiCablePane.dragging, cablePane.dragSourceListener);
+                               event.startDrag(DragSource.DefaultLinkDrop, MidiCablePane.dragging, new DragSourceAdapter() {
+                                       @Override
+                                       public void dragDropEnd(DragSourceDropEvent dsde) {
+                                               cablePane.updateDraggingLocation(null);
+                                       }
+                               });
                        }
                };
                dragSource.createDefaultDragGestureRecognizer(this, DnDConstants.ACTION_COPY_OR_MOVE, dgl);
-               dragSource.addDragSourceMotionListener(cablePane.dragSourceMotionListener);
-               //
-               // 外からドラッグされたトランスミッタを、ドロップした場所のレシーバに接続する
+               dragSource.addDragSourceMotionListener(new DragSourceMotionListener() {
+                       @Override
+                       public void dragMouseMoved(DragSourceDragEvent dsde) {
+                               cablePane.updateDraggingLocation(dsde.getLocation());
+                       }
+               });
+               // ドロップ
                DropTargetListener dtl = new DropTargetAdapter() {
                        @Override
                        public void dragEnter(DropTargetDragEvent event) {
index c5421b2..653b88d 100644 (file)
@@ -12,7 +12,7 @@ import javax.sound.midi.Transmitter;
 /**
  * {@link Transmitter} のリストを表す {@link javax.swing.ListModel}
  */
-public class TransmitterListModel extends TransceiverListModel<Transmitter> {
+public class TransmitterListModel extends AbstractTransceiverListModel<Transmitter> {
        public TransmitterListModel(MidiDeviceModel deviceModel) { super(deviceModel); }
        protected List<Transmitter> getTransceivers() {
                return deviceModel.getMidiDevice().getTransmitters();
index 13299dc..19d1f83 100644 (file)
@@ -7,7 +7,9 @@ import java.awt.dnd.DragGestureEvent;
 import java.awt.dnd.DragGestureListener;
 import java.awt.dnd.DragSource;
 import java.awt.dnd.DragSourceAdapter;
+import java.awt.dnd.DragSourceDragEvent;
 import java.awt.dnd.DragSourceDropEvent;
+import java.awt.dnd.DragSourceMotionListener;
 import java.awt.dnd.DropTarget;
 import java.awt.dnd.DropTargetAdapter;
 import java.awt.dnd.DropTargetDragEvent;
@@ -20,10 +22,8 @@ import javax.swing.JList;
 
 /**
  * MIDIトランスミッタ({@link Transmitter})のリストビューです。
- * トランスミッタをこのビューからドラッグし、
- * {@link ReceiverListView} のレシーバにドロップして接続できます。
  */
-public class TransmitterListView extends TransceiverListView<Transmitter> {
+public class TransmitterListView extends AbstractTransceiverListView<Transmitter> {
        /**
         * このリストによって表示される{@link Transmitter}のリストを保持するデータモデルを返します。
         * @return 表示される{@link Transmitter}のリストを提供するデータモデル
@@ -51,6 +51,7 @@ public class TransmitterListView extends TransceiverListView<Transmitter> {
                                return this;
                        }
                });
+               // ドラッグ
                DragSource dragSource = new DragSource();
                DragGestureListener dgl = new DragGestureListener() {
                        @Override
@@ -72,15 +73,19 @@ public class TransmitterListView extends TransceiverListView<Transmitter> {
                                                                exception.printStackTrace();
                                                        }
                                                }
-                                               cablePane.dragSourceListener.dragDropEnd(event);
+                                               cablePane.updateDraggingLocation(null);
                                        }
                                });
                        }
                };
                dragSource.createDefaultDragGestureRecognizer(this, DnDConstants.ACTION_COPY_OR_MOVE, dgl);
-               dragSource.addDragSourceMotionListener(cablePane.dragSourceMotionListener);
-               //
-               // 外からドラッグされたレシーバを、ドロップした場所のトランスミッタに接続する
+               dragSource.addDragSourceMotionListener(new DragSourceMotionListener() {
+                       @Override
+                       public void dragMouseMoved(DragSourceDragEvent dsde) {
+                               cablePane.updateDraggingLocation(dsde.getLocation());
+                       }
+               });
+               // ドロップ
                DropTargetListener dtl = new DropTargetAdapter() {
                        @Override
                        public void dragEnter(DropTargetDragEvent event) {