OSDN Git Service

MIDIケーブルを6色使い切るまで色を重複させないようにした
authorAkiyoshi Kamide <kamide@yk.rim.or.jp>
Fri, 6 May 2016 16:42:04 +0000 (01:42 +0900)
committerAkiyoshi Kamide <kamide@yk.rim.or.jp>
Fri, 6 May 2016 16:42:04 +0000 (01:42 +0900)
src/camidion/chordhelper/ChordHelperApplet.java
src/camidion/chordhelper/mididevice/MidiCablePane.java
src/camidion/chordhelper/mididevice/MidiDeviceFrame.java

index 3643166..52522c3 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.20160506.1";
+               public static final String      VERSION = "Ver.20160506.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 eb5b56b..cd311d0 100644 (file)
@@ -12,6 +12,7 @@ import java.awt.dnd.DragSourceMotionListener;
 import java.awt.event.ComponentAdapter;
 import java.awt.event.ComponentEvent;
 import java.awt.event.ComponentListener;
+import java.util.Arrays;
 import java.util.Hashtable;
 import java.util.List;
 
@@ -71,8 +72,11 @@ public class MidiCablePane extends JComponent {
                        JInternalFrame frame = e.getInternalFrame();
                        if( ! (frame instanceof MidiDeviceFrame) ) return;
                        MidiDeviceFrame f = (MidiDeviceFrame)frame;
-                       List<Receiver> rxList = f.getMidiConnecterListView().getModel().getMidiDevice().getReceivers();
+                       MidiConnecterListModel m = f.getMidiConnecterListView().getModel();
+                       List<Receiver> rxList = m.getMidiDevice().getReceivers();
                        for( Receiver rx : rxList ) colorMap.remove(rx);
+                       m.closeDevice();
+                       frame.setVisible(m.getMidiDevice().isOpen());
                        repaint();
                }
        };
@@ -98,23 +102,28 @@ public class MidiCablePane extends JComponent {
 
        private static final Stroke CABLE_STROKE = new BasicStroke(
                        3, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND);
-       private static final Color[] CABLE_COLORS = {
+       private static final List<Color> CABLE_COLORS = Arrays.asList(
                new Color(255, 0, 0,144),
                new Color(0, 255, 0,144),
                new Color(0, 0, 255,144),
                new Color(191,191,0,144),
                new Color(0,191,191,144),
-               new Color(191,0,191,144),
-       };
+               new Color(191,0,191,144)
+       );
        private static final Color ADDING_CABLE_COLOR = new Color(0, 0, 0, 144);
        private static final Color REMOVING_CABLE_COLOR = new Color(128, 128, 128, 144);
-       private int nextColorIndex = 0;
        private Hashtable<Receiver,Color> colorMap = new Hashtable<>();
        private Color colorOf(Receiver rx) {
                Color color = colorMap.get(rx);
                if( color == null ) {
-                       colorMap.put(rx, color=CABLE_COLORS[nextColorIndex++]);
-                       if( nextColorIndex >= CABLE_COLORS.length ) nextColorIndex = 0;
+                       for( Color c : CABLE_COLORS ) {
+                               if( ! colorMap.containsValue(c) ) {
+                                       colorMap.put(rx, c);
+                                       return c;
+                               }
+                       }
+                       color = CABLE_COLORS.get((int)( Math.random() * CABLE_COLORS.size() ));
+                       colorMap.put(rx, color);
                }
                return color;
        }
index f5b0fc4..2f6049d 100644 (file)
@@ -12,8 +12,6 @@ import javax.swing.JInternalFrame;
 import javax.swing.JLabel;
 import javax.swing.JScrollPane;
 import javax.swing.Timer;
-import javax.swing.event.InternalFrameAdapter;
-import javax.swing.event.InternalFrameEvent;
 
 /**
  * MIDIデバイスフレームビュー
@@ -48,14 +46,6 @@ public class MidiDeviceFrame extends JInternalFrame {
                addComponentListener(cablePane.midiDeviceFrameComponentListener);
                setTitle("[" + model.getMidiDeviceInOutType().getShortName() + "] " + model);
                setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
-               addInternalFrameListener(new InternalFrameAdapter() {
-                       @Override
-                       public void internalFrameClosing(InternalFrameEvent e) {
-                               MidiConnecterListModel m = listView.getModel();
-                               m.closeDevice();
-                               setVisible(m.getMidiDevice().isOpen());
-                       }
-               });
                add(new JLabel("--:--") {{
                        timer = new Timer(50, new ActionListener() {
                                private long sec = -2;