OSDN Git Service

リファクタリング
[midichordhelper/MIDIChordHelper.git] / src / camidion / chordhelper / midieditor / MidiProgramSelecter.java
1 package camidion.chordhelper.midieditor;
2
3 import javax.swing.JComboBox;
4
5 import camidion.chordhelper.music.MIDISpec;
6
7 /**
8  * MIDI Instrument (Program) - 音色選択
9  */
10 public class MidiProgramSelecter extends JComboBox<String> {
11         private int family;
12         private MidiProgramFamilySelecter familySelecter = null;
13         public MidiProgramSelecter() {
14                 setFamily(-1);
15         }
16         public void setFamilySelecter( MidiProgramFamilySelecter mpfs ) {
17                 familySelecter = mpfs;
18         }
19         public void setFamily( int family ) {
20                 int program_no = getProgram();
21                 this.family = family;
22                 removeAllItems();
23                 if( family < 0 ) {
24                         setMaximumRowCount(16);
25                         for( int i=0; i < MIDISpec.instrumentNames.length; i++ ) {
26                                 addItem(i+": " + MIDISpec.instrumentNames[i]);
27                         }
28                         setSelectedIndex(program_no);
29                 }
30                 else {
31                         setMaximumRowCount(8);
32                         for( int i=0; i < 8; i++ ) {
33                                 program_no = i + family * 8;
34                                 addItem( program_no + ": " + MIDISpec.instrumentNames[program_no] );
35                         }
36                         setSelectedIndex(0);
37                 }
38         }
39         public int getProgram() {
40                 int program_no = getSelectedIndex();
41                 if( family > 0 && program_no >= 0 ) program_no += family * 8;
42                 return program_no;
43         }
44         public String getProgramName() { return (String)( getSelectedItem() ); }
45         public void setProgram( int program_no ) {
46                 if( getItemCount() == 0 ) return; // To ignore event triggered by removeAllItems()
47                 if( family >= 0 && program_no >= 0 && family == program_no / 8 ) {
48                         setSelectedIndex(program_no % 8);
49                 }
50                 else {
51                         if( family >= 0 ) setFamily(-1);
52                         if( familySelecter != null ) familySelecter.setSelectedIndex(0);
53                         if( program_no < getItemCount() ) setSelectedIndex(program_no);
54                 }
55         }
56 }