-package camidion.chordhelper.midieditor;\r
-\r
-import javax.sound.midi.MetaEventListener;\r
-import javax.sound.midi.MetaMessage;\r
-import javax.swing.JComboBox;\r
-import javax.swing.JLabel;\r
-import javax.swing.JPanel;\r
-import javax.swing.JSpinner;\r
-import javax.swing.SpinnerNumberModel;\r
-import javax.swing.SwingUtilities;\r
-\r
-/**\r
- * 拍子選択ビュー\r
- */\r
-public class TimeSignatureSelecter extends JPanel implements MetaEventListener {\r
- SpinnerNumberModel upperTimesigSpinnerModel = new SpinnerNumberModel(4, 1, 32, 1);\r
- private JSpinner upperTimesigSpinner = new JSpinner(\r
- upperTimesigSpinnerModel\r
- ) {\r
- {\r
- setToolTipText("Time signature (upper digit) - 拍子の分子");\r
- }\r
- };\r
- JComboBox<String> lowerTimesigCombobox = new JComboBox<String>() {\r
- {\r
- setToolTipText("Time signature (lower digit) - 拍子の分母");\r
- for( int i=0; i<6; i++ ) addItem( "/" + (1<<i) );\r
- setSelectedIndex(2);\r
- }\r
- };\r
- private class SetValueRunnable implements Runnable {\r
- byte[] qpm;\r
- public SetValueRunnable(byte[] qpm) { this.qpm = qpm; }\r
- @Override\r
- public void run() { setValue(qpm);}\r
- }\r
- @Override\r
- public void meta(MetaMessage msg) {\r
- switch(msg.getType()) {\r
- case 0x58: // Time signature (4 bytes) - 拍子\r
- if( ! SwingUtilities.isEventDispatchThread() ) {\r
- SwingUtilities.invokeLater(new SetValueRunnable(msg.getData()));\r
- break;\r
- }\r
- setValue(msg.getData());\r
- break;\r
- }\r
- }\r
- private class TimeSignatureLabel extends JLabel {\r
- private byte upper = -1;\r
- private byte lower_index = -1;\r
- {\r
- setToolTipText("Time signature - 拍子");\r
- }\r
- public void setTimeSignature(byte upper, byte lower_index) {\r
- if( this.upper == upper && this.lower_index == lower_index ) {\r
- return;\r
- }\r
- setText("<html><font size=\"+1\">" + upper + "/" + (1 << lower_index) + "</font></html>");\r
- }\r
- }\r
- private TimeSignatureLabel timesigValueLabel = new TimeSignatureLabel();\r
- private boolean editable;\r
- public TimeSignatureSelecter() {\r
- add(upperTimesigSpinner);\r
- add(lowerTimesigCombobox);\r
- add(timesigValueLabel);\r
- setEditable(true);\r
- }\r
- public void clear() {\r
- upperTimesigSpinnerModel.setValue(4);\r
- lowerTimesigCombobox.setSelectedIndex(2);\r
- }\r
- public int getUpperValue() {\r
- return upperTimesigSpinnerModel.getNumber().intValue();\r
- }\r
- public byte getUpperByte() {\r
- return upperTimesigSpinnerModel.getNumber().byteValue();\r
- }\r
- public int getLowerValueIndex() {\r
- return lowerTimesigCombobox.getSelectedIndex();\r
- }\r
- public byte getLowerByte() {\r
- return (byte)getLowerValueIndex();\r
- }\r
- public byte[] getByteArray() {\r
- byte[] data = new byte[4];\r
- data[0] = getUpperByte();\r
- data[1] = getLowerByte();\r
- data[2] = (byte)( 96 >> getLowerValueIndex() );\r
- data[3] = 8;\r
- return data;\r
- }\r
- public void setValue(byte upper, byte lowerIndex) {\r
- upperTimesigSpinnerModel.setValue( upper );\r
- lowerTimesigCombobox.setSelectedIndex( lowerIndex );\r
- timesigValueLabel.setTimeSignature( upper, lowerIndex );\r
- }\r
- public void setValue(byte[] data) {\r
- if(data == null)\r
- clear();\r
- else\r
- setValue(data[0], data[1]);\r
- }\r
- public boolean isEditable() { return editable; }\r
- public void setEditable( boolean editable ) {\r
- this.editable = editable;\r
- upperTimesigSpinner.setVisible(editable);\r
- lowerTimesigCombobox.setVisible(editable);\r
- timesigValueLabel.setVisible(!editable);\r
- if( !editable ) {\r
- timesigValueLabel.setTimeSignature(getUpperByte(), getLowerByte());\r
- }\r
- }\r
+package camidion.chordhelper.midieditor;
+
+import javax.sound.midi.MetaEventListener;
+import javax.sound.midi.MetaMessage;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JSpinner;
+import javax.swing.SpinnerNumberModel;
+import javax.swing.SwingUtilities;
+
+/**
+ * 拍子選択ビュー
+ */
+public class TimeSignatureSelecter extends JPanel implements MetaEventListener {
+ SpinnerNumberModel upperTimesigSpinnerModel = new SpinnerNumberModel(4, 1, 32, 1);
+ private JSpinner upperTimesigSpinner = new JSpinner(
+ upperTimesigSpinnerModel
+ ) {
+ {
+ setToolTipText("Time signature (upper digit) - 拍子の分子");
+ }
+ };
+ JComboBox<String> lowerTimesigCombobox = new JComboBox<String>() {
+ {
+ setToolTipText("Time signature (lower digit) - 拍子の分母");
+ for( int i=0; i<6; i++ ) addItem( "/" + (1<<i) );
+ setSelectedIndex(2);
+ }
+ };
+ private class SetValueRunnable implements Runnable {
+ byte[] timesig;
+ public SetValueRunnable(byte[] timesig) { this.timesig = timesig; }
+ @Override
+ public void run() { setValue(timesig);}
+ }
+ @Override
+ public void meta(MetaMessage msg) {
+ switch(msg.getType()) {
+ case 0x58: // Time signature (4 bytes) - 拍子
+ if( SwingUtilities.isEventDispatchThread() ) {
+ setValue(msg.getData());
+ } else {
+ SwingUtilities.invokeLater(new SetValueRunnable(msg.getData()));
+ }
+ break;
+ }
+ }
+ private class TimeSignatureLabel extends JLabel {
+ private byte upper = -1;
+ private byte lower_index = -1;
+ {
+ setToolTipText("Time signature - 拍子");
+ }
+ public void setTimeSignature(byte upper, byte lower_index) {
+ if( this.upper == upper && this.lower_index == lower_index ) {
+ return;
+ }
+ setText("<html><font size=\"+1\">" + upper + "/" + (1 << lower_index) + "</font></html>");
+ }
+ }
+ private TimeSignatureLabel timesigValueLabel = new TimeSignatureLabel();
+ private boolean editable;
+ public TimeSignatureSelecter() {
+ add(upperTimesigSpinner);
+ add(lowerTimesigCombobox);
+ add(timesigValueLabel);
+ setEditable(true);
+ }
+ public void clear() {
+ upperTimesigSpinnerModel.setValue(4);
+ lowerTimesigCombobox.setSelectedIndex(2);
+ }
+ public int getUpperValue() {
+ return upperTimesigSpinnerModel.getNumber().intValue();
+ }
+ public byte getUpperByte() {
+ return upperTimesigSpinnerModel.getNumber().byteValue();
+ }
+ public int getLowerValueIndex() {
+ return lowerTimesigCombobox.getSelectedIndex();
+ }
+ public byte getLowerByte() {
+ return (byte)getLowerValueIndex();
+ }
+ public byte[] getByteArray() {
+ byte[] data = new byte[4];
+ data[0] = getUpperByte();
+ data[1] = getLowerByte();
+ data[2] = (byte)( 96 >> getLowerValueIndex() );
+ data[3] = 8;
+ return data;
+ }
+ public void setValue(byte upper, byte lowerIndex) {
+ upperTimesigSpinnerModel.setValue( upper );
+ lowerTimesigCombobox.setSelectedIndex( lowerIndex );
+ timesigValueLabel.setTimeSignature( upper, lowerIndex );
+ }
+ public void setValue(byte[] data) {
+ if(data == null)
+ clear();
+ else
+ setValue(data[0], data[1]);
+ }
+ public boolean isEditable() { return editable; }
+ public void setEditable( boolean editable ) {
+ this.editable = editable;
+ upperTimesigSpinner.setVisible(editable);
+ lowerTimesigCombobox.setVisible(editable);
+ timesigValueLabel.setVisible(!editable);
+ if( !editable ) {
+ timesigValueLabel.setTimeSignature(getUpperByte(), getLowerByte());
+ }
+ }
}
\ No newline at end of file