OSDN Git Service

MIDI Device Connection から MIDI Editor へ意図しないオブジェクトを
[midichordhelper/MIDIChordHelper.git] / src / camidion / chordhelper / mididevice / SequencerTimeView.java
1 package camidion.chordhelper.mididevice;
2
3 import java.awt.Color;
4
5 import javax.swing.BoxLayout;
6 import javax.swing.JLabel;
7 import javax.swing.JPanel;
8 import javax.swing.event.ChangeEvent;
9 import javax.swing.event.ChangeListener;
10
11 /**
12  * シーケンサの現在位置(分:秒)を表示するビュー
13  */
14 public class SequencerTimeView extends JPanel implements ChangeListener {
15         /**
16          * シーケンサの現在位置(分:秒)を表示するビューを構築します。
17          * @param model MIDIシーケンサモデル
18          */
19         public SequencerTimeView(MidiSequencerModel model) {
20                 setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
21                 add(timePositionLabel);
22                 add(timeLengthLabel);
23                 (this.model = model).addChangeListener(this);
24         }
25         @Override
26         public void stateChanged(ChangeEvent e) {
27                 timeLengthLabel.setTimeInSecond(model.getMaximum()/1000);
28                 timePositionLabel.setTimeInSecond(model.getValue()/1000);
29         }
30         private MidiSequencerModel model;
31         private SequencerTimeView.TimeLabel timePositionLabel = new TimePositionLabel();
32         private SequencerTimeView.TimeLabel timeLengthLabel = new TimeLengthLabel();
33         private static abstract class TimeLabel extends JLabel {
34                 /**
35                  * 時間の値(秒)
36                  */
37                 private int valueInSec;
38                 /**
39                  * 時間の値を秒単位で設定します。
40                  * @param sec 秒単位の時間
41                  */
42                 public void setTimeInSecond(int sec) {
43                         if(valueInSec != sec) setText(toTimeString(valueInSec = sec));
44                 }
45                 /**
46                  * 時間の値を文字列に変換します。
47                  * @param sec 秒単位の時間
48                  * @return 変換結果(分:秒)
49                  */
50                 protected String toTimeString(int sec) {
51                         return String.format("%02d:%02d", sec/60, sec%60);
52                 }
53         }
54         private static class TimePositionLabel extends SequencerTimeView.TimeLabel {
55                 public TimePositionLabel() {
56                         setFont( getFont().deriveFont(getFont().getSize2D() + 4) );
57                         setForeground( new Color(0x80,0x00,0x00) );
58                         setToolTipText("Time position - 現在位置(分:秒)");
59                         setText(toTimeString(0));
60                 }
61         }
62         private static class TimeLengthLabel extends SequencerTimeView.TimeLabel {
63                 public TimeLengthLabel() {
64                         setToolTipText("Time length - 曲の長さ(分:秒)");
65                         setText(toTimeString(0));
66                 }
67                 @Override
68                 protected String toTimeString(int sec) {
69                         return "/"+super.toTimeString(sec);
70                 }
71         }
72 }