OSDN Git Service

リファクタリング
authorAkiyoshi Kamide <kamide@yk.rim.or.jp>
Thu, 30 Jun 2016 15:38:06 +0000 (00:38 +0900)
committerAkiyoshi Kamide <kamide@yk.rim.or.jp>
Thu, 30 Jun 2016 15:38:06 +0000 (00:38 +0900)
src/camidion/chordhelper/ChordHelperApplet.java
src/camidion/chordhelper/mididevice/AbstractTransceiverListView.java
src/camidion/chordhelper/mididevice/ReceiverListView.java
src/camidion/chordhelper/mididevice/TransmitterListModel.java
src/camidion/chordhelper/mididevice/TransmitterListView.java

index 6289250..38c2e0b 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.20160629.1";
+               public static final String      VERSION = "Ver.20160630.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/";
index 9189242..4a71351 100644 (file)
@@ -1,5 +1,6 @@
 package camidion.chordhelper.mididevice;
 
+import java.awt.Component;
 import java.awt.Point;
 import java.awt.Rectangle;
 
@@ -13,7 +14,7 @@ import javax.swing.ListSelectionModel;
  */
 public abstract class AbstractTransceiverListView<E> extends JList<E> {
        /**
-        * ã\81\93ã\81®ã\83ªã\82¹ã\83\88によって表示されるリストを保持するデータモデルを返します。
+        * ã\81\93ã\81®ã\83\93ã\83¥ã\83¼によって表示されるリストを保持するデータモデルを返します。
         * @return 表示されるリストを提供するデータモデル
         */
        @Override
@@ -38,6 +39,12 @@ public abstract class AbstractTransceiverListView<E> extends JList<E> {
                return getCellBounds(index,index);
        }
        /**
+        * 指定された要素のツールチップに表示する文字列を返します。
+        * @param element 要素
+        * @return ツールチップ文字列
+        */
+       protected abstract String toolTipTextFor(E element);
+       /**
         * 仮想MIDI端子リストビューを生成します。
         * @param model このビューから参照されるデータモデル
         */
@@ -46,5 +53,14 @@ public abstract class AbstractTransceiverListView<E> extends JList<E> {
                setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
                setLayoutOrientation(JList.HORIZONTAL_WRAP);
                setVisibleRowCount(0);
+               setCellRenderer(new TransceiverListCellRenderer<E>() {
+                       public Component getListCellRendererComponent(JList<? extends E> list,
+                                       E value, int index, boolean isSelected, boolean cellHasFocus)
+                       {
+                               super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
+                               setToolTipText(toolTipTextFor(value));
+                               return this;
+                       }
+               });
        }
 }
index 145d21a..31788fa 100644 (file)
@@ -1,6 +1,5 @@
 package camidion.chordhelper.mididevice;
 
-import java.awt.Component;
 import java.awt.datatransfer.Transferable;
 import java.awt.dnd.DnDConstants;
 import java.awt.dnd.DragGestureEvent;
@@ -18,18 +17,17 @@ import java.awt.dnd.DropTargetListener;
 
 import javax.sound.midi.Receiver;
 import javax.sound.midi.Transmitter;
-import javax.swing.JList;
 
 /**
- * MIDIレシーバ({@link Receiver})のリストビューです。
+ * {@link Receiver}のリストビュー
  */
 public class ReceiverListView extends AbstractTransceiverListView<Receiver> {
-       /**
-        * このリストによって表示される{@link Receiver}のリストを保持するデータモデルを返します。
-        * @return 表示される{@link Receiver}のリストを提供するデータモデル
-        */
        @Override
        public ReceiverListModel getModel() { return (ReceiverListModel) super.getModel(); }
+       @Override
+       protected String toolTipTextFor(Receiver rx) {
+               return "受信端子(Rx):ドラッグ&ドロップしてTxに接続できます。";
+       }
        /**
         * 仮想MIDI端子リストビューを生成します。
         * @param model このビューから参照されるデータモデル
@@ -37,16 +35,14 @@ public class ReceiverListView extends AbstractTransceiverListView<Receiver> {
         */
        public ReceiverListView(ReceiverListModel model, MidiCablePane cablePane) {
                super(model);
-               setCellRenderer(new TransceiverListCellRenderer<Receiver>() {
-                       public Component getListCellRendererComponent(JList<? extends Receiver> list,
-                                       Receiver value, int index, boolean isSelected, boolean cellHasFocus)
-                       {
-                               super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
-                               setToolTipText("受信端子(Rx):ドラッグ&ドロップしてTxに接続できます。");
-                               return this;
-                       }
-               });
-               // ドラッグ
+               setupDrag(cablePane);
+               setupDrop();
+       }
+       /**
+        * {@link Receiver}をドラッグできるようにします。
+        * @param cablePane MIDIケーブル描画面
+        */
+       private void setupDrag(MidiCablePane cablePane) {
                DragSource dragSource = new DragSource();
                DragGestureListener dgl = new DragGestureListener() {
                        @Override
@@ -68,7 +64,11 @@ public class ReceiverListView extends AbstractTransceiverListView<Receiver> {
                                cablePane.updateDraggingLocation(dsde.getLocation());
                        }
                });
-               // ドロップ
+       }
+       /**
+        * {@link Transmitter}のドロップを受け付けます。
+        */
+       private void setupDrop() {
                DropTargetListener dtl = new DropTargetAdapter() {
                        @Override
                        public void dragEnter(DropTargetDragEvent event) {
index 653b88d..5836db1 100644 (file)
@@ -35,14 +35,15 @@ public class TransmitterListModel extends AbstractTransceiverListModel<Transmitt
        }
        /**
         * 新しい{@link Transmitter}を{@link MidiDevice#getTransmitter}で生成し、
-        * このモデルを参照しているビューに通知します。
+        * 要素数が1個増えたことをこのモデルを参照しているビューへ通知します。
         *
         * @return 未接続の{@link Transmitter}
         * @throws MidiUnavailableException リソースの制約のためにトランスミッタを使用できない場合にスローされる
         */
        public Transmitter openTransmitter() throws MidiUnavailableException {
+               int index = getTransceivers().size();
                Transmitter tx = deviceModel.getMidiDevice().getTransmitter();
-               fireIntervalAdded(this, 0, getSize());
+               fireIntervalAdded(this, index, index);
                return tx;
        }
        /**
@@ -58,14 +59,14 @@ public class TransmitterListModel extends AbstractTransceiverListModel<Transmitt
                deviceModel.getTransmitterListModel().openTransmitter().setReceiver(rxList.get(0));
        }
        /**
-        * 指定の{@link Transmitter}を閉じ、要素が減ったことを、
-        * このモデルを参照しているビューに通知します。
+        * 指定の{@link Transmitter}を閉じ、要素数が1個減ったことをこのモデルを参照しているビューへ通知します。
         *
         * @param tx このリストモデルで開いている{@link Transmitter}
         */
        public void closeTransmitter(Transmitter tx) {
+               int index = indexOf(tx);
                tx.close();
-               fireIntervalRemoved(this, 0, getSize());
+               fireIntervalRemoved(this, index, index);
        }
        /**
         * このリストモデルにある{@link Transmitter}のうち、
index 19d1f83..c30d71c 100644 (file)
@@ -1,6 +1,5 @@
 package camidion.chordhelper.mididevice;
 
-import java.awt.Component;
 import java.awt.datatransfer.Transferable;
 import java.awt.dnd.DnDConstants;
 import java.awt.dnd.DragGestureEvent;
@@ -18,18 +17,21 @@ import java.awt.dnd.DropTargetListener;
 
 import javax.sound.midi.Receiver;
 import javax.sound.midi.Transmitter;
-import javax.swing.JList;
 
 /**
- * MIDIトランスミッタ({@link Transmitter})のリストビューです。
+ * {@link Transmitter}のリストビュー
  */
 public class TransmitterListView extends AbstractTransceiverListView<Transmitter> {
-       /**
-        * このリストによって表示される{@link Transmitter}のリストを保持するデータモデルを返します。
-        * @return 表示される{@link Transmitter}のリストを提供するデータモデル
-        */
        @Override
        public TransmitterListModel getModel() { return (TransmitterListModel) super.getModel(); }
+       @Override
+       protected String toolTipTextFor(Transmitter tx) {
+               if( tx instanceof DummyTransmitter ) {
+                       return "未接続の送信端子(Tx):ドラッグ&ドロップしてRxに接続できます。";
+               } else {
+                       return "接続済の送信端子(Tx):ドラッグ&ドロップして接続先Rxを変更、または切断できます。";
+               }
+       }
        /**
         * 仮想MIDI端子リストビューを生成します。
         * @param model このビューから参照されるデータモデル
@@ -37,21 +39,14 @@ public class TransmitterListView extends AbstractTransceiverListView<Transmitter
         */
        public TransmitterListView(TransmitterListModel model, MidiCablePane cablePane) {
                super(model);
-               setCellRenderer(new TransceiverListCellRenderer<Transmitter>() {
-                       @Override
-                       public Component getListCellRendererComponent(JList<? extends Transmitter> list,
-                                       Transmitter value, int index, boolean isSelected, boolean cellHasFocus)
-                       {
-                               super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
-                               if( value instanceof DummyTransmitter ) {
-                                       setToolTipText("未接続の送信端子(Tx):ドラッグ&ドロップしてRxに接続できます。");
-                               } else {
-                                       setToolTipText("接続済の送信端子(Tx):ドラッグ&ドロップして接続先Rxを変更、または切断できます。");
-                               }
-                               return this;
-                       }
-               });
-               // ドラッグ
+               setupDrag(cablePane);
+               setupDrop();
+       }
+       /**
+        * {@link Transmitter}をドラッグできるようにします。
+        * @param cablePane MIDIケーブル描画面
+        */
+       private void setupDrag(MidiCablePane cablePane) {
                DragSource dragSource = new DragSource();
                DragGestureListener dgl = new DragGestureListener() {
                        @Override
@@ -85,7 +80,11 @@ public class TransmitterListView extends AbstractTransceiverListView<Transmitter
                                cablePane.updateDraggingLocation(dsde.getLocation());
                        }
                });
-               // ドロップ
+       }
+       /**
+        * {@link Receiver}のドロップを受け付けます。
+        */
+       private void setupDrop() {
                DropTargetListener dtl = new DropTargetAdapter() {
                        @Override
                        public void dragEnter(DropTargetDragEvent event) {