OSDN Git Service

112ea1dd3917dd768a5397de3a35719a9104026a
[midichordhelper/MIDIChordHelper.git] / src / camidion / chordhelper / mididevice / MidiDeviceDialog.java
1 package camidion.chordhelper.mididevice;
2
3 import java.awt.event.ActionEvent;
4 import java.awt.event.ActionListener;
5 import java.awt.event.WindowAdapter;
6 import java.awt.event.WindowEvent;
7 import java.beans.PropertyVetoException;
8 import java.util.List;
9
10 import javax.sound.midi.MidiDevice;
11 import javax.swing.JDialog;
12 import javax.swing.JEditorPane;
13 import javax.swing.JScrollPane;
14 import javax.swing.JSplitPane;
15 import javax.swing.event.TreeSelectionEvent;
16 import javax.swing.event.TreeSelectionListener;
17
18 /**
19  * MIDIデバイスダイアログ (View)
20  */
21 public class MidiDeviceDialog extends JDialog implements ActionListener
22 {
23         private MidiDeviceTreeView deviceTree;
24         private JEditorPane deviceInfoPane;
25         private MidiOpenedDevicesView desktopPane;
26         @Override
27         public void actionPerformed(ActionEvent event) { setVisible(true); }
28
29         public MidiDeviceDialog(List<MidiConnecterListModel> deviceModelList) {
30                 setTitle("MIDI device connection");
31                 setBounds( 300, 300, 800, 500 );
32                 deviceTree = new MidiDeviceTreeView(new MidiDeviceTreeModel(deviceModelList)) {{
33                         addTreeSelectionListener(new TreeSelectionListener() {
34                                 @Override
35                                 public void valueChanged(TreeSelectionEvent e) {
36                                         Object lastSelected = deviceTree.getLastSelectedPathComponent();
37                                         String html = "<html><head></head><body>";
38                                         if( lastSelected instanceof MidiConnecterListModel ) {
39                                                 MidiConnecterListModel deviceModel = (MidiConnecterListModel)lastSelected;
40                                                 MidiDevice.Info info = deviceModel.getMidiDevice().getDeviceInfo();
41                                                 html += "<b>"+deviceModel+"</b><br/>"
42                                                         + "<table border=\"1\"><tbody>"
43                                                         + "<tr><th>Version</th><td>"+info.getVersion()+"</td></tr>"
44                                                         + "<tr><th>Description</th><td>"+info.getDescription()+"</td></tr>"
45                                                         + "<tr><th>Vendor</th><td>"+info.getVendor()+"</td></tr>"
46                                                         + "</tbody></table>";
47                                                 MidiDeviceFrame deviceFrame = desktopPane.getMidiDeviceFrameOf(deviceModel);
48                                                 if( deviceFrame != null ) {
49                                                         try {
50                                                                 deviceFrame.setSelected(true);
51                                                         } catch( PropertyVetoException ex ) {
52                                                                 ex.printStackTrace();
53                                                         }
54                                                 }
55                                         }
56                                         else if( lastSelected instanceof MidiDeviceInOutType ) {
57                                                 MidiDeviceInOutType ioType = (MidiDeviceInOutType)lastSelected;
58                                                 html += "<b>"+ioType+"</b><br/>";
59                                                 html += ioType.getDescription()+"<br/>";
60                                         }
61                                         else if( lastSelected != null ) {
62                                                 html += lastSelected.toString();
63                                         }
64                                         html += "</body></html>";
65                                         deviceInfoPane.setText(html);
66                                 }
67                         });
68                 }};
69                 deviceInfoPane = new JEditorPane("text/html","<html></html>") {{ setEditable(false); }};
70                 desktopPane = new MidiOpenedDevicesView(deviceTree);
71                 add(new JSplitPane(
72                         JSplitPane.HORIZONTAL_SPLIT,
73                         new JSplitPane(
74                                 JSplitPane.VERTICAL_SPLIT,
75                                 new JScrollPane(deviceTree),
76                                 new JScrollPane(deviceInfoPane)
77                         ){{
78                                 setDividerLocation(260);
79                         }},
80                         desktopPane
81                 ){{
82                         setOneTouchExpandable(true);
83                         setDividerLocation(250);
84                 }});
85                 addWindowListener(new WindowAdapter() {
86                         private void setTimer(boolean flag) { desktopPane.setAllDeviceTimestampTimers(flag); }
87                         @Override
88                         public void windowClosing(WindowEvent e) { setTimer(false); }
89                         @Override
90                         public void windowActivated(WindowEvent e) { setTimer(true); }
91                 });
92         }
93 }