1 package camidion.chordhelper;
3 import java.applet.Applet;
4 import java.applet.AppletContext;
5 import java.applet.AppletStub;
6 import java.applet.AudioClip;
7 import java.awt.BorderLayout;
10 import java.awt.Image;
11 import java.awt.Toolkit;
12 import java.awt.event.WindowAdapter;
13 import java.awt.event.WindowEvent;
15 import java.io.IOException;
16 import java.io.InputStream;
18 import java.util.Enumeration;
19 import java.util.Iterator;
20 import java.util.List;
21 import java.util.Vector;
23 import javax.swing.JFrame;
24 import javax.swing.JLabel;
25 import javax.swing.SwingUtilities;
26 import javax.swing.WindowConstants;
27 import javax.swing.event.ChangeEvent;
28 import javax.swing.event.ChangeListener;
29 import javax.swing.event.TableModelEvent;
30 import javax.swing.event.TableModelListener;
32 import camidion.chordhelper.mididevice.MidiSequencerModel;
33 import camidion.chordhelper.midieditor.PlaylistTableModel;
34 import camidion.chordhelper.midieditor.SequenceTrackListTableModel;
37 * MIDI Chord Helper を Java アプリとして起動します。
39 public class MidiChordHelper {
40 private static int count = 0;
41 private static AppletFrame frame = null;
42 private static List<File> fileList = new Vector<File>();
44 * MIDI Chord Helper を Java アプリとして起動します。
45 * @param args コマンドライン引数
46 * @throws Exception 何らかの異常が発生した場合にスローされる
48 public static void main(String[] args) throws Exception {
49 if( args.length > 0 ) {
50 for( String arg : args ) fileList.add(new File(arg));
52 SwingUtilities.invokeLater(new Runnable(){
55 ChordHelperApplet applet;
56 if( count++ > 0 && frame != null) {
57 applet = frame.applet;
58 int windowState = frame.getExtendedState();
59 if( ( windowState & Frame.ICONIFIED ) == 0 ) {
62 frame.setExtendedState(windowState &= ~(Frame.ICONIFIED));
65 frame = new AppletFrame(applet = new ChordHelperApplet());
67 applet.deviceModelList.getEditorDialog().loadAndPlay(fileList);
71 private static class AppletFrame extends JFrame
72 implements AppletStub, AppletContext
75 ChordHelperApplet applet;
76 public AppletFrame(ChordHelperApplet applet) {
77 setTitle(ChordHelperApplet.VersionInfo.NAME);
78 (status_ = new JLabel()).setFont(
79 status_.getFont().deriveFont(Font.PLAIN)
81 add( this.applet = applet, BorderLayout.CENTER );
82 add( status_, BorderLayout.SOUTH );
85 Image iconImage = applet.imageIcon == null ? null : applet.imageIcon.getImage();
86 setIconImage(iconImage);
87 setDefaultCloseOperation( WindowConstants.DO_NOTHING_ON_CLOSE );
88 addWindowListener(new WindowAdapter() {
90 public void windowClosing(WindowEvent evt) {
91 if( AppletFrame.this.applet.isConfirmedToExit() )
95 new TitleUpdater(applet);
97 setLocationRelativeTo(null);
104 private class TitleUpdater implements ChangeListener, TableModelListener {
105 MidiSequencerModel sequencerModel;
108 * @param applet 対象アプレット
110 public TitleUpdater(ChordHelperApplet applet) {
111 applet.deviceModelList.getEditorDialog().sequenceListTable.getModel().addTableModelListener(this);
112 sequencerModel = applet.deviceModelList.getSequencerModel();
113 sequencerModel.addChangeListener(this);
116 * プレイリスト上で変更されたファイル名をタイトルバーに反映します。
119 public void tableChanged(TableModelEvent e) {
120 int col = e.getColumn();
121 if( col == PlaylistTableModel.Column.FILENAME.ordinal() ) {
122 setFilenameToTitle();
124 if( col == TableModelEvent.ALL_COLUMNS ) {
125 setFilenameToTitle();
129 * 再生中にファイルが切り替わったら、そのファイル名をタイトルバーに反映します。
132 public void stateChanged(ChangeEvent e) { setFilenameToTitle(); }
134 * シーケンサーにロードされている曲のファイル名をタイトルバーに反映します。
136 private void setFilenameToTitle() {
137 SequenceTrackListTableModel seq = sequencerModel.getSequenceTrackListTableModel();
138 String filename = ( seq == null ? null : seq.getFilename() );
139 String title = ChordHelperApplet.VersionInfo.NAME;
140 if( filename != null && ! filename.isEmpty() ) {
141 title = filename + " - " + title;
147 public boolean isActive() { return true; }
149 public URL getDocumentBase() { return null; }
151 public URL getCodeBase() { return null; }
153 public String getParameter(String name) { return null; }
155 public AppletContext getAppletContext() { return this; }
157 public void appletResize(int width, int height) {}
159 public AudioClip getAudioClip(URL url) { return null; }
161 public Image getImage(URL url) {
162 return Toolkit.getDefaultToolkit().getImage(url);
165 public Applet getApplet(String name) { return null; }
167 public Enumeration<Applet> getApplets() { return (null); }
169 public void showDocument(URL url) {}
171 public void showDocument(URL url, String target) {}
173 public void showStatus(String status) { status_.setText(status); }
175 public InputStream getStream(String key) { return null; }
177 public Iterator<String> getStreamKeys() { return null; }
179 public void setStream(String key, InputStream stream) throws IOException {}