OSDN Git Service

バグ修正
authorAkiyoshi Kamide <kamide@yk.rim.or.jp>
Wed, 4 May 2016 17:38:13 +0000 (02:38 +0900)
committerAkiyoshi Kamide <kamide@yk.rim.or.jp>
Wed, 4 May 2016 17:38:13 +0000 (02:38 +0900)
・ツリーからフレーム上にドラッグ&ドロップするとcastに失敗していた
・Rxなしデバイスを閉じて再度開くとTxが表示されなくなっていた

※一度も開いていないデバイスを開くことができない問題は未解決

src/camidion/chordhelper/ChordHelperApplet.java
src/camidion/chordhelper/mididevice/MidiCablePane.java
src/camidion/chordhelper/mididevice/MidiConnecterListModel.java
src/camidion/chordhelper/mididevice/MidiConnecterListView.java
src/camidion/chordhelper/mididevice/MidiDeviceFrame.java
src/camidion/chordhelper/mididevice/MidiDeviceTreeView.java
src/camidion/chordhelper/mididevice/MidiOpenedDevicesView.java

index b602c1b..6655b64 100644 (file)
@@ -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.20160504.1";
+               public static final String      VERSION = "Ver.20160504.2";
                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 bec5fa4..283bcd3 100644 (file)
@@ -71,8 +71,9 @@ public class MidiCablePane extends JComponent {
                        JInternalFrame frame = e.getInternalFrame();
                        if( ! (frame instanceof MidiDeviceFrame) ) return;
                        MidiConnecterListModel devModel = ((MidiDeviceFrame)frame).listView.getModel();
-                       if( ! devModel.rxSupported() ) return;
-                       colorMap.remove(devModel.getMidiDevice().getReceivers().get(0));
+                       if( devModel.rxSupported() ) {
+                               colorMap.remove(devModel.getMidiDevice().getReceivers().get(0));
+                       }
                        repaint();
                }
        };
index 97c9a27..60b5472 100644 (file)
@@ -20,14 +20,7 @@ public class MidiConnecterListModel extends AbstractListModel<AutoCloseable> {
         * 実体のない新規Transmitterを表すインターフェース
         */
        public interface NewTransmitter extends Transmitter {};
-       public NewTransmitter newTransmitter = new NewTransmitter() {
-               @Override
-               public void setReceiver(Receiver receiver) { }
-               @Override
-               public Receiver getReceiver() { return null; }
-               @Override
-               public void close() { }
-       };
+       public NewTransmitter newTransmitter;
        /**
         * 指定のMIDIデバイスに属する {@link Transmitter}/{@link Receiver} のリストモデルを構築します。
         *
@@ -37,6 +30,16 @@ public class MidiConnecterListModel extends AbstractListModel<AutoCloseable> {
        public MidiConnecterListModel(MidiDevice device, List<MidiConnecterListModel> modelList) {
                this.device = device;
                this.modelList = modelList;
+               if( txSupported() ) {
+                       newTransmitter = new NewTransmitter() {
+                               @Override
+                               public void setReceiver(Receiver receiver) { }
+                               @Override
+                               public Receiver getReceiver() { return null; }
+                               @Override
+                               public void close() { }
+                       };
+               }
        }
        /**
         * 対象MIDIデバイスを返します。
@@ -61,13 +64,13 @@ public class MidiConnecterListModel extends AbstractListModel<AutoCloseable> {
                List<Transmitter> txList = device.getTransmitters();
                int txSize = txList.size();
                if( index < txSize ) return txList.get(index);
-               if( txSize != 0 && index == txSize ) return newTransmitter;
+               if( index == txSize ) return newTransmitter;
                return null;
        }
        @Override
        public int getSize() {
-               int txSize = device.getTransmitters().size();
-               return device.getReceivers().size() + (txSize == 0 ? 0 : txSize + 1);
+               int txSize = txSupported() ? device.getTransmitters().size() + 1 : 0;
+               return device.getReceivers().size() + txSize;
        }
        /**
         * 指定の要素がこのリストモデルで最初に見つかった位置を返します。
index d5165ab..7334183 100644 (file)
@@ -154,9 +154,12 @@ public class MidiConnecterListView extends JList<AutoCloseable> {
                                                event.dropComplete(false);
                                                return;
                                        }
-                                       Transferable draggedObject = event.getTransferable();
-                                       Transmitter sourceTx = (Transmitter)draggedObject.getTransferData(transmitterFlavor);
-                                       if( getModel().ConnectToReceiver(sourceTx, (Receiver)destination) == null ) {
+                                       Object source = event.getTransferable().getTransferData(transmitterFlavor);
+                                       if( ! (source instanceof Transmitter) ) {
+                                               event.dropComplete(false);
+                                               return;
+                                       }
+                                       if( getModel().ConnectToReceiver((Transmitter)source, (Receiver)destination) == null ) {
                                                event.dropComplete(false);
                                                return;
                                        }
index 65bce47..765c861 100644 (file)
@@ -46,15 +46,10 @@ public class MidiDeviceFrame extends JInternalFrame {
                setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
                addInternalFrameListener(
                        new InternalFrameAdapter() {
-                               public void internalFrameOpened(InternalFrameEvent e) {
-                                       boolean isOpen = listView.getModel().getMidiDevice().isOpen();
-                                       if( ! isOpen ) setVisible(isOpen);
-                               }
                                public void internalFrameClosing(InternalFrameEvent e) {
                                        MidiConnecterListModel m = listView.getModel();
                                        m.closeDevice();
-                                       boolean isOpen = m.getMidiDevice().isOpen();
-                                       if( isVisible() != isOpen ) setVisible(isOpen);
+                                       setVisible(m.getMidiDevice().isOpen());
                                }
                        }
                );
index 6e2a3d1..d1e547e 100644 (file)
@@ -33,7 +33,9 @@ public class MidiDeviceTreeView extends JTree
        private Transferable draggingObject = new Transferable() {
                private DataFlavor flavors[] = {TREE_MODEL_FLAVOR};
                @Override
-               public Object getTransferData(DataFlavor flavor) { return getLastSelectedPathComponent(); }
+               public Object getTransferData(DataFlavor flavor) {
+                       return getLastSelectedPathComponent();
+               }
                @Override
                public DataFlavor[] getTransferDataFlavors() { return flavors; }
                @Override
@@ -51,9 +53,8 @@ public class MidiDeviceTreeView extends JTree
                        this, DnDConstants.ACTION_COPY_OR_MOVE, new DragGestureListener() {
                                @Override
                                public void dragGestureRecognized(DragGestureEvent dge) {
-                                       if( (dge.getDragAction() & DnDConstants.ACTION_COPY_OR_MOVE) != 0 ) {
-                                               dge.startDrag(DragSource.DefaultMoveDrop, draggingObject, null);
-                                       }
+                                       if( (dge.getDragAction() & DnDConstants.ACTION_COPY_OR_MOVE) == 0 ) return;
+                                       dge.startDrag(DragSource.DefaultMoveDrop, draggingObject, null);
                                }
                        }
                );
index e3b7a9a..fe0218c 100644 (file)
@@ -87,7 +87,7 @@ public class MidiOpenedDevicesView extends JDesktopPane {
        };
        public MidiOpenedDevicesView(MidiDeviceTreeView deviceTree) {
                add(cablePane, JLayeredPane.PALETTE_LAYER);
-               int frameIndex = 0;
+               int openedFrameIndex = 0;
                MidiDeviceTreeModel treeModel = (MidiDeviceTreeModel)deviceTree.getModel();
                for( MidiConnecterListModel deviceModel : treeModel.deviceModelList ) {
                        deviceModel.addListDataListener(cablePane.midiConnecterListDataListener);
@@ -98,9 +98,9 @@ public class MidiOpenedDevicesView extends JDesktopPane {
                        frame.addInternalFrameListener(deviceTree.midiDeviceFrameListener);
                        add(frame);
                        if( deviceModel.getMidiDevice().isOpen() ) {
-                               frame.setBounds( 10+(frameIndex%2)*260, 10+frameIndex*55, 250, 100 );
+                               frame.setBounds( 10+(openedFrameIndex%2)*260, 10+openedFrameIndex*55, 250, 100 );
                                frame.setVisible(true);
-                               frameIndex++;
+                               openedFrameIndex++;
                        }
                }
                addComponentListener(new ComponentAdapter() {
@@ -120,7 +120,7 @@ public class MidiOpenedDevicesView extends JDesktopPane {
                for( JInternalFrame frame : frames ) {
                        if( ! (frame instanceof MidiDeviceFrame) ) continue;
                        MidiDeviceFrame deviceFrame = (MidiDeviceFrame)frame;
-                       if( deviceFrame.listView.getModel() == deviceModel ) return deviceFrame;
+                       if( deviceModel.equals(deviceFrame.listView.getModel()) ) return deviceFrame;
                }
                return null;
        }