*/\r
public static final Color DARK_PINK = new Color(0xFF,0x50,0x80);\r
\r
+ /** 白鍵のサイズ */\r
Dimension whiteKeySize;\r
+ /** 黒鍵のサイズ */\r
Dimension blackKeySize;\r
+ /** ダークモードならtrue */\r
boolean isDark = false;\r
- float widthPerOctave = 120;\r
+ /** 1オクターブあたりの幅 */\r
+ float widthPerOctave = Music.SEMITONES_PER_OCTAVE * 10;\r
\r
+ /** すべてのピアノキー */\r
PianoKey[] keys;\r
+ /** 黒鍵 */\r
PianoKey[] blackKeys;\r
+ /** 白鍵 */\r
PianoKey[] whiteKeys;\r
\r
DefaultBoundedRangeModel octaveRangeModel;\r
DefaultBoundedRangeModel octaveSizeModel;\r
-\r
VelocityModel velocityModel = new VelocityModel();\r
-\r
DefaultMidiChannelComboBoxModel\r
midiChComboboxModel = new DefaultMidiChannelComboBoxModel();\r
\r
NoteList selectedKeyNoteList = new NoteList();\r
- private int max_selectable = 1;\r
- Music.Key key_signature = null;\r
+ Music.Key keySignature = null;\r
Music.Chord chord = null;\r
\r
class NoteList extends LinkedList<Integer> { }\r
public AnoGakkiLayeredPane anoGakkiLayeredPane;\r
public MidiChannelButtonSelecter midi_ch_button_selecter;\r
\r
- NoteList[] channel_notes = new NoteList[MIDISpec.MAX_CHANNELS];\r
- int[] pitch_bend_values = new int[MIDISpec.MAX_CHANNELS];\r
+ NoteList[] channelNotes = new NoteList[MIDISpec.MAX_CHANNELS];\r
+ int[] pitchBendValues = new int[MIDISpec.MAX_CHANNELS];\r
int[] pitch_bend_sensitivities = new int[MIDISpec.MAX_CHANNELS];\r
int[] modulations = new int[MIDISpec.MAX_CHANNELS];\r
VirtualMidiDevice midiDevice = new AbstractVirtualMidiDevice() {\r
class MidiChannelStatus extends AbstractMidiChannelStatus {\r
public MidiChannelStatus(int channel) {\r
super(channel);\r
- channel_notes[channel] = new NoteList();\r
+ channelNotes[channel] = new NoteList();\r
pitch_bend_sensitivities[channel] = 2; // Default is wholetone = 2 semitones\r
}\r
public void fireRpnChanged() {\r
}\r
public void setPitchBend(int bend) {\r
super.setPitchBend(bend);\r
- pitch_bend_values[channel] = bend;\r
+ pitchBendValues[channel] = bend;\r
repaintNotes();\r
}\r
public void resetAllControllers() {\r
// See also: Response to Reset All Controllers\r
// http://www.midi.org/about-midi/rp15.shtml\r
//\r
- pitch_bend_values[channel] = MIDISpec.PITCH_BEND_NONE;\r
+ pitchBendValues[channel] = MIDISpec.PITCH_BEND_NONE;\r
modulations[channel] = 0;\r
repaintNotes();\r
}\r
}\r
private void repaintNotes() {\r
if( midiChComboboxModel.getSelectedChannel() != channel\r
- || channel_notes[channel] == null\r
+ || channelNotes[channel] == null\r
)\r
return;\r
- if( channel_notes[channel].size() > 0 || selectedKeyNoteList.size() > 0 )\r
+ if( channelNotes[channel].size() > 0 || selectedKeyNoteList.size() > 0 )\r
repaint();\r
}\r
}\r
public MidiChannel getSelectedChannel() {\r
- return midiDevice.getChannels()[\r
- midiChComboboxModel.getSelectedChannel()\r
- ];\r
+ return midiDevice.getChannels()[midiChComboboxModel.getSelectedChannel()];\r
}\r
public void note(boolean is_on, int note_no) {\r
MidiChannel ch = getSelectedChannel();\r
public void noteOff(int note_no) { note(false,note_no); }\r
\r
class PianoKey extends Rectangle {\r
- public boolean is_black = false;\r
+ public boolean isBlack = false;\r
public int position = 0;\r
public String binded_key_char = null;\r
public Rectangle indicator;\r
boolean paintIndicator(Graphics2D g2, boolean is_small, int pitch_bend_value) {\r
if( is_small ) {\r
g2.fillOval(\r
- indicator.x + indicator.width/4,\r
- indicator.y + indicator.height/4 + 1,\r
- indicator.width/2,\r
- indicator.height/2\r
- );\r
+ indicator.x + indicator.width/4,\r
+ indicator.y + indicator.height/4 + 1,\r
+ indicator.width/2,\r
+ indicator.height/2\r
+ );\r
}\r
else {\r
int current_channel = midiChComboboxModel.getSelectedChannel();\r
addMouseListener( new MouseAdapter() {\r
public void mousePressed(MouseEvent e) {\r
int n = getNote(e.getPoint()); if( n < 0 ) return;\r
- int current_channel = midiChComboboxModel.getSelectedChannel();\r
- if( channel_notes[current_channel].contains(n) ) return;\r
+ int currentChannel = midiChComboboxModel.getSelectedChannel();\r
+ if( channelNotes[currentChannel].contains(n) ) return;\r
chord = null;\r
- keyOn( current_channel, n );\r
+ keyOn( currentChannel, n );\r
noteOn(n);\r
firePianoKeyPressed( n, e );\r
requestFocusInWindow();\r
}\r
public void mouseReleased(MouseEvent e) {\r
int current_channel = midiChComboboxModel.getSelectedChannel();\r
- if( channel_notes[current_channel].isEmpty() ) return;\r
- int n = channel_notes[current_channel].poll();\r
+ if( channelNotes[current_channel].isEmpty() ) return;\r
+ int n = channelNotes[current_channel].poll();\r
keyOff( current_channel, n );\r
noteOff(n);\r
firePianoKeyReleased( n, e );\r
public void mouseDragged(MouseEvent e) {\r
int n = getNote(e.getPoint()); if( n < 0 ) return;\r
int current_channel = midiChComboboxModel.getSelectedChannel();\r
- if( channel_notes[current_channel].contains(n) ) return;\r
- if( channel_notes[current_channel].size() > 0 ) {\r
- int old_n = channel_notes[current_channel].poll();\r
+ if( channelNotes[current_channel].contains(n) ) return;\r
+ if( channelNotes[current_channel].size() > 0 ) {\r
+ int old_n = channelNotes[current_channel].poll();\r
keyOff( current_channel, old_n );\r
noteOff(old_n);\r
firePianoKeyReleased( old_n, e );\r
}\r
int n = getNote(e); if( n < 0 ) return;\r
int current_channel = midiChComboboxModel.getSelectedChannel();\r
- if( channel_notes[current_channel].contains(n) ) return;\r
+ if( channelNotes[current_channel].contains(n) ) return;\r
chord = null;\r
keyOn( current_channel, n );\r
noteOn(n);\r
public void keyReleased(KeyEvent e) {\r
int current_channel = midiChComboboxModel.getSelectedChannel();\r
int n = getNote(e);\r
- if( n < 0 || ! channel_notes[current_channel].contains(n) ) return;\r
+ if( n < 0 || ! channelNotes[current_channel].contains(n) ) return;\r
keyOff( current_channel, n );\r
noteOff(n);\r
firePianoKeyReleased( n, e );\r
});\r
int octaves = getPerferredOctaves();\r
octaveSizeModel = new DefaultBoundedRangeModel(\r
- octaves, 0, MIN_OCTAVES, MAX_OCTAVES\r
- );\r
+ octaves, 0, MIN_OCTAVES, MAX_OCTAVES\r
+ );\r
octaveSizeModel.addChangeListener( new ChangeListener() {\r
public void stateChanged(ChangeEvent e) {\r
fireOctaveResized(e);\r
}\r
});\r
octaveRangeModel = new DefaultBoundedRangeModel(\r
- (MAX_OCTAVES - octaves) / 2, octaves, 0, MAX_OCTAVES\r
- );\r
+ (MAX_OCTAVES - octaves) / 2, octaves, 0, MAX_OCTAVES\r
+ );\r
octaveRangeModel.addChangeListener( new ChangeListener() {\r
public void stateChanged(ChangeEvent e) {\r
fireOctaveMoved(e);\r
new ListDataListener() {\r
public void contentsChanged(ListDataEvent e) {\r
int current_channel = midiChComboboxModel.getSelectedChannel();\r
- for( int n : channel_notes[current_channel] )\r
+ for( int n : channelNotes[current_channel] )\r
if( autoScroll(n) ) break;\r
repaint();\r
}\r
}\r
);\r
}\r
- //\r
- // Callback\r
- //\r
public void paint(Graphics g) {\r
- //\r
if( keys == null ) return;\r
Graphics2D g2 = (Graphics2D) g;\r
Dimension d = getSize();\r
+ //\r
+ // 鍵盤をクリア\r
g2.setBackground( getBackground() );\r
g2.clearRect( 0, 0, d.width, d.height );\r
- PianoKey key;\r
-\r
- // White keys\r
+ //\r
+ // 白鍵を描画\r
g2.setColor( isDark ? Color.gray : Color.white );\r
for( PianoKey k : whiteKeys ) k.paintKey(g2);\r
\r
- // To avoid ConcurrentModificationException when sequencer running,\r
- // copy the note-on list\r
- NoteList notes = (NoteList)channel_notes[\r
- midiChComboboxModel.getSelectedChannel()\r
- ].clone();\r
- NoteList selected_notes = (NoteList)selectedKeyNoteList.clone();\r
-\r
- // Note-on white keys\r
- for( int n : notes )\r
- if( (key=getPianoKey(n)) != null && !(key.is_black) )\r
+ NoteList notesArray[] = {\r
+ (NoteList)selectedKeyNoteList.clone(),\r
+ (NoteList)channelNotes[midiChComboboxModel.getSelectedChannel()].clone()\r
+ };\r
+ PianoKey key;\r
+ //\r
+ // ノートオン状態の白鍵を塗り重ねる\r
+ for( int n : notesArray[1] )\r
+ if( (key=getPianoKey(n)) != null && !(key.isBlack) )\r
key.paintKey(g2,true);\r
-\r
- // Black keys\r
+ //\r
+ // 黒鍵を描画\r
g2.setColor(getForeground());\r
for( PianoKey k : blackKeys ) k.paintKey(g2);\r
-\r
- // Note-on black keys\r
+ //\r
+ // ノートオン状態の黒鍵を塗り重ねる\r
g2.setColor( Color.gray );\r
- for( int n : notes )\r
- if( (key=getPianoKey(n)) != null && key.is_black )\r
+ for( int n : notesArray[1] )\r
+ if( (key=getPianoKey(n)) != null && key.isBlack )\r
key.paintKey(g2,true);\r
-\r
- // Selected pianokey indicators\r
- for( int n : selected_notes ) {\r
- if( (key=getPianoKey(n)) == null ) continue;\r
- boolean is_on_scale = (\r
- key_signature == null || key_signature.isOnScale(n)\r
- );\r
- int i_chord;\r
- if( chord != null && (i_chord = chord.indexOf(n)) >=0 ) {\r
- g2.setColor(Music.Chord.NOTE_INDEX_COLORS[i_chord]);\r
- }\r
- else {\r
- g2.setColor(\r
- isDark && is_on_scale ? Color.pink : DARK_PINK\r
- );\r
- }\r
- key.paintIndicator( g2, false,\r
- pitch_bend_values[midiChComboboxModel.getSelectedChannel()]\r
- );\r
- if( ! is_on_scale ) {\r
- g2.setColor(Color.white);\r
- key.paintIndicator( g2, true );\r
- }\r
- }\r
- // Note-on key indicators\r
- for( int n : notes ) {\r
- if( (key=getPianoKey(n)) == null ) continue;\r
- boolean is_on_scale = (\r
- key_signature == null || key_signature.isOnScale(n)\r
- );\r
- int i_chord;\r
- if( chord != null && (i_chord = chord.indexOf(n)) >=0 ) {\r
- g2.setColor(Music.Chord.NOTE_INDEX_COLORS[i_chord]);\r
- }\r
- else {\r
- g2.setColor(\r
- isDark && is_on_scale ? Color.pink : DARK_PINK\r
- );\r
- }\r
- key.paintIndicator( g2, false,\r
- pitch_bend_values[midiChComboboxModel.getSelectedChannel()]\r
- );\r
- if( ! is_on_scale ) {\r
- g2.setColor( Color.white );\r
- key.paintIndicator( g2, true );\r
+ //\r
+ // インジケータの表示\r
+ for( NoteList nl : notesArray ) {\r
+ for( int n : nl ) {\r
+ if( (key=getPianoKey(n)) == null )\r
+ continue;\r
+ boolean isOnScale = (keySignature == null || keySignature.isOnScale(n));\r
+ int chordIndex;\r
+ if( chord != null && (chordIndex = chord.indexOf(n)) >=0 ) {\r
+ g2.setColor(Music.Chord.NOTE_INDEX_COLORS[chordIndex]);\r
+ }\r
+ else {\r
+ g2.setColor(isDark && isOnScale ? Color.pink : DARK_PINK);\r
+ }\r
+ key.paintIndicator(\r
+ g2, false,\r
+ pitchBendValues[midiChComboboxModel.getSelectedChannel()]\r
+ );\r
+ if( ! isOnScale ) {\r
+ g2.setColor(Color.white);\r
+ key.paintIndicator(g2, true);\r
+ }\r
}\r
}\r
- // Focus\r
+\r
if( isFocusOwner() ) {\r
// Show PC-key binding\r
for( PianoKey k : bindedKeys ) {\r
g2.setColor(\r
- k.is_black ? Color.gray.brighter() :\r
- isDark ? getForeground() :\r
- getForeground().brighter()\r
- );\r
+ k.isBlack ? Color.gray.brighter() :\r
+ isDark ? getForeground() :\r
+ getForeground().brighter()\r
+ );\r
k.paintKeyBinding(g2);\r
}\r
}\r
PianoKey k;\r
if( i > 0 ) {\r
k = keys[i-1];\r
- if( k.is_black && !(k.out_of_bounds) && k.contains(point) ) return k;\r
+ if( k.isBlack && !(k.out_of_bounds) && k.contains(point) ) return k;\r
}\r
if( i < keys.length-1 ) {\r
k = keys[i+1];\r
- if( k.is_black && !(k.out_of_bounds) && k.contains(point) ) return k;\r
+ if( k.isBlack && !(k.out_of_bounds) && k.contains(point) ) return k;\r
}\r
return keys[i];\r
}\r
for( PianoKey k : keys ) k.getNote(getChromaticOffset());\r
}\r
void keyOff(int ch, int note_no) {\r
- if( note_no < 0 || ch < 0 || ch >= channel_notes.length ) return;\r
- channel_notes[ch].remove((Object)note_no);\r
+ if( note_no < 0 || ch < 0 || ch >= channelNotes.length ) return;\r
+ channelNotes[ch].remove((Object)note_no);\r
if( ch == midiChComboboxModel.getSelectedChannel() )\r
repaint();\r
}\r
void keyOn(int ch, int note_no) {\r
- if( note_no < 0 || ch < 0 || ch >= channel_notes.length ) return;\r
- channel_notes[ch].add(note_no);\r
+ if( note_no < 0 || ch < 0 || ch >= channelNotes.length ) return;\r
+ channelNotes[ch].add(note_no);\r
setSelectedNote(ch,note_no);\r
}\r
boolean autoScroll(int note_no) {\r
int i = note_no - getChromaticOffset();\r
if( i < 0 ) {\r
octaveRangeModel.setValue(\r
- octaveRangeModel.getValue() - ( (-i) / 12 ) - 1\r
- );\r
+ octaveRangeModel.getValue() - (-i)/Music.SEMITONES_PER_OCTAVE - 1\r
+ );\r
return true;\r
}\r
if( i >= keys.length ) {\r
octaveRangeModel.setValue(\r
- octaveRangeModel.getValue() + ( (i - keys.length) / 12 ) + 1\r
- );\r
+ octaveRangeModel.getValue() + (i-keys.length)/Music.SEMITONES_PER_OCTAVE + 1\r
+ );\r
return true;\r
}\r
return false;\r
listenerList.remove(PianoKeyboardListener.class, l);\r
}\r
int countKeyOn() {\r
- return channel_notes[\r
- midiChComboboxModel.getSelectedChannel()\r
- ].size();\r
+ return channelNotes[midiChComboboxModel.getSelectedChannel()].size();\r
}\r
int countKeyOn(int ch) {\r
- return channel_notes[ch].size();\r
+ return channelNotes[ch].size();\r
}\r
void allKeysOff(int ch, int n_marks) {\r
if( ! selectedKeyNoteList.isEmpty() ) return;\r
switch(n_marks) {\r
case -1:\r
- selectedKeyNoteList = (NoteList)(channel_notes[ch].clone());\r
+ selectedKeyNoteList = (NoteList)(channelNotes[ch].clone());\r
break;\r
case 1:\r
selectedKeyNoteList.add(\r
- channel_notes[ch].get(channel_notes[ch].size()-1)\r
- );\r
+ channelNotes[ch].get(channelNotes[ch].size()-1)\r
+ );\r
break;\r
default: break;\r
}\r
- channel_notes[ch].clear();\r
+ channelNotes[ch].clear();\r
if( midiChComboboxModel.getSelectedChannel() == ch )\r
repaint();\r
}\r
void clear() {\r
selectedKeyNoteList.clear();\r
- channel_notes[\r
- midiChComboboxModel.getSelectedChannel()\r
- ].clear();\r
+ channelNotes[midiChComboboxModel.getSelectedChannel()].clear();\r
chord = null;\r
repaint();\r
}\r
int getNote() {\r
int current_channel = midiChComboboxModel.getSelectedChannel();\r
- switch( channel_notes[current_channel].size() ) {\r
- case 1: return channel_notes[current_channel].get(0);\r
+ switch( channelNotes[current_channel].size() ) {\r
+ case 1: return channelNotes[current_channel].get(0);\r
case 0:\r
if( selectedKeyNoteList.size() == 1 )\r
return selectedKeyNoteList.get(0);\r
return -1;\r
}\r
}\r
- void setSelectedNote(int note_no) {\r
- setSelectedNote(\r
- midiChComboboxModel.getSelectedChannel(), note_no\r
- );\r
+ void setSelectedNote(int noteNumber) {\r
+ setSelectedNote(midiChComboboxModel.getSelectedChannel(), noteNumber);\r
}\r
void setSelectedNote(int ch, int note_no) {\r
if( ch != midiChComboboxModel.getSelectedChannel() )\r
return;\r
selectedKeyNoteList.add(note_no);\r
- int max_sel = (chord == null ? max_selectable : chord.numberOfNotes());\r
+ int max_sel = (chord == null ? maxSelectable : chord.numberOfNotes());\r
while( selectedKeyNoteList.size() > max_sel )\r
selectedKeyNoteList.poll();\r
if( !autoScroll(note_no) ) {\r
}\r
}\r
Integer[] getSelectedNotes() {\r
- return\r
- selectedKeyNoteList.toArray(new Integer[0]);\r
+ return selectedKeyNoteList.toArray(new Integer[0]);\r
}\r
//\r
Music.Chord getChord() { return chord; }\r
chordDisplay.setChord(chord = c);\r
}\r
void setKeySignature(Music.Key ks) {\r
- key_signature = ks;\r
+ keySignature = ks;\r
repaint();\r
}\r
//\r
+ private int maxSelectable = 1;\r
void setMaxSelectable( int max_selectable ) {\r
- this.max_selectable = max_selectable;\r
+ this.maxSelectable = max_selectable;\r
}\r
- int getMaxSelectable() { return max_selectable; }\r
+ int getMaxSelectable() { return maxSelectable; }\r
//\r
int getChromaticOffset() {\r
return octaveRangeModel.getValue() * 12 ;\r
}\r
private void octaveSizeChanged() {\r
int octaves = octaveSizeModel.getValue();\r
- String default_binded_key_chars = "zsxdcvgbhnjm,l.;/\\]";\r
+ String defaultBindedKeyChars = "zsxdcvgbhnjm,l.;/\\]";\r
Dimension keyboard_size = getSize();\r
if( keyboard_size.width == 0 ) {\r
return;\r
}\r
whiteKeySize = new Dimension(\r
- (keyboard_size.width - 1) / (octaves * 7 + 1),\r
- keyboard_size.height - 1\r
- );\r
+ (keyboard_size.width - 1) / (octaves * 7 + 1),\r
+ keyboard_size.height - 1\r
+ );\r
blackKeySize = new Dimension(\r
- whiteKeySize.width * 3 / 4,\r
- whiteKeySize.height * 3 / 5\r
- );\r
- Dimension indicator_size = new Dimension(\r
- whiteKeySize.width / 2,\r
- whiteKeySize.height / 6\r
- );\r
+ whiteKeySize.width * 3 / 4,\r
+ whiteKeySize.height * 3 / 5\r
+ );\r
+ Dimension indicatorSize = new Dimension(\r
+ whiteKeySize.width / 2,\r
+ whiteKeySize.height / 6\r
+ );\r
octaveRangeModel.setExtent( octaves );\r
octaveRangeModel.setValue( (MAX_OCTAVES - octaves) / 2 );\r
widthPerOctave = keyboard_size.width / octaves;\r
// Construct piano-keys\r
//\r
keys = new PianoKey[ octaves * 12 + 1 ];\r
- Vector<PianoKey> v_black_keys = new Vector<PianoKey>();\r
- Vector<PianoKey> v_white_keys = new Vector<PianoKey>();\r
- Point key_point = new Point(1,1);\r
+ Vector<PianoKey> vBlackKeys = new Vector<PianoKey>();\r
+ Vector<PianoKey> vWhiteKeys = new Vector<PianoKey>();\r
+ Point keyPoint = new Point(1,1);\r
PianoKey k;\r
int i, i12;\r
boolean is_CDE = true;\r
case 5: is_CDE = false; break;\r
default: break;\r
}\r
- key_point.x = whiteKeySize.width * (\r
- i/12*7 + (i12+(is_CDE?1:2))/2\r
- );\r
+ keyPoint.x = whiteKeySize.width * (\r
+ i / Music.SEMITONES_PER_OCTAVE * 7 + (i12+(is_CDE?1:2))/2\r
+ );\r
if( Music.isOnScale(i12,0) ) {\r
- k = new PianoKey( key_point, whiteKeySize, indicator_size );\r
- k.is_black = false;\r
- v_white_keys.add(k);\r
+ k = new PianoKey( keyPoint, whiteKeySize, indicatorSize );\r
+ k.isBlack = false;\r
+ vWhiteKeys.add(k);\r
}\r
else {\r
- key_point.x -=\r
- ( (is_CDE?5:12) - i12 )/2 * blackKeySize.width / (is_CDE?3:4);\r
- k = new PianoKey( key_point, blackKeySize, indicator_size );\r
- k.is_black = true;\r
- v_black_keys.add(k);\r
+ keyPoint.x -= ( (is_CDE?5:12) - i12 )/2 * blackKeySize.width / (is_CDE?3:4);\r
+ k = new PianoKey( keyPoint, blackKeySize, indicatorSize );\r
+ k.isBlack = true;\r
+ vBlackKeys.add(k);\r
}\r
(keys[i] = k).position = i;\r
}\r
- whiteKeys = v_white_keys.toArray(new PianoKey[1]);\r
- blackKeys = v_black_keys.toArray(new PianoKey[1]);\r
- changeKeyBinding(\r
- ((octaves - 1) / 2) * 12,\r
- default_binded_key_chars\r
- );\r
+ whiteKeys = vWhiteKeys.toArray(new PianoKey[1]);\r
+ blackKeys = vBlackKeys.toArray(new PianoKey[1]);\r
+ changeKeyBinding(((octaves - 1) / 2) * 12, defaultBindedKeyChars);\r
checkOutOfBounds();\r
}\r
//\r
- void setDarkMode(boolean is_dark) {\r
- this.isDark = is_dark;\r
- setBackground( is_dark ? Color.black : null );\r
+ void setDarkMode(boolean isDark) {\r
+ this.isDark = isDark;\r
+ setBackground( isDark ? Color.black : null );\r
}\r
}\r
\r
class PianoKeyboardPanel extends JPanel\r
{\r
- PianoKeyboard keyboard = new PianoKeyboard();\r
- JSlider octave_size_slider = new JSlider();\r
- JScrollBar octave_selecter = new JScrollBar( JScrollBar.HORIZONTAL );\r
- JPanel octave_bar = new JPanel();\r
+ PianoKeyboard keyboard = new PianoKeyboard();\r
+ private JSlider octaveSizeSlider = new JSlider() {\r
+ {\r
+ setToolTipText("Octave size");\r
+ }\r
+ };\r
+ private JScrollBar octaveSelecter = new JScrollBar(JScrollBar.HORIZONTAL) {\r
+ {\r
+ setToolTipText("Octave position");\r
+ }\r
+ };\r
+ private JPanel octaveBar = new JPanel() {\r
+ {\r
+ setLayout(new BoxLayout(this, BoxLayout.X_AXIS));\r
+ }\r
+ };\r
public PianoKeyboardPanel() {\r
- octave_size_slider.setToolTipText("Octave size");\r
- octave_selecter.setToolTipText("Octave position");\r
keyboard.addPianoKeyboardListener(\r
- new PianoKeyboardAdapter() {\r
- public void octaveResized(ChangeEvent e) {\r
- octave_selecter.setBlockIncrement( keyboard.getOctaves() );\r
- }\r
+ new PianoKeyboardAdapter() {\r
+ public void octaveResized(ChangeEvent e) {\r
+ octaveSelecter.setBlockIncrement(keyboard.getOctaves());\r
}\r
- );\r
- octave_selecter.setModel( keyboard.octaveRangeModel );\r
- octave_selecter.setBlockIncrement( keyboard.getOctaves() );\r
- octave_size_slider.setModel( keyboard.octaveSizeModel );\r
- octave_size_slider.setMinimumSize( new Dimension( 100, 18 ) );\r
- octave_size_slider.setMaximumSize( new Dimension( 100, 18 ) );\r
- octave_size_slider.setPreferredSize( new Dimension( 100, 18 ) );\r
- octave_bar.setLayout( new BoxLayout( octave_bar, BoxLayout.X_AXIS ) );\r
- octave_bar.add(octave_selecter);\r
- octave_bar.add(Box.createHorizontalStrut(5));\r
- octave_bar.add(octave_size_slider);\r
- setLayout( new BoxLayout( this, BoxLayout.Y_AXIS ) );\r
- add( octave_bar );\r
- add( keyboard );\r
+ }\r
+ );\r
+ octaveSelecter.setModel( keyboard.octaveRangeModel );\r
+ octaveSelecter.setBlockIncrement( keyboard.getOctaves() );\r
+ octaveSizeSlider.setModel( keyboard.octaveSizeModel );\r
+ octaveSizeSlider.setMinimumSize( new Dimension( 100, 18 ) );\r
+ octaveSizeSlider.setMaximumSize( new Dimension( 100, 18 ) );\r
+ octaveSizeSlider.setPreferredSize( new Dimension( 100, 18 ) );\r
+ octaveBar.add(octaveSelecter);\r
+ octaveBar.add(Box.createHorizontalStrut(5));\r
+ octaveBar.add(octaveSizeSlider);\r
+ setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));\r
+ add(octaveBar);\r
+ add(keyboard);\r
setAlignmentX((float)0.5);\r
}\r
- // Methods\r
- //\r
- public void setDarkMode(boolean is_dark) {\r
- Color col = is_dark ? Color.black : null;\r
- octave_selecter.setBackground( col );\r
- octave_size_slider.setBackground( col );\r
- octave_bar.setBackground( col );\r
- keyboard.setDarkMode( is_dark );\r
+ public void setDarkMode(boolean isDark) {\r
+ Color col = isDark ? Color.black : null;\r
+ octaveSelecter.setBackground( col );\r
+ octaveSizeSlider.setBackground( col );\r
+ octaveBar.setBackground( col );\r
+ keyboard.setDarkMode( isDark );\r
}\r
}\r
\r
class MidiKeyboardPanel extends JPanel {\r
MidiEventDialog eventDialog;\r
- Action query_send_event_action = new AbstractAction() {\r
- { putValue(NAME,"Send MIDI event"); }\r
+ Action sendSventAction = new AbstractAction() {\r
+ {\r
+ putValue(NAME,"Send");\r
+ }\r
public void actionPerformed(ActionEvent e) {\r
- eventDialog.setTitle("Send MIDI event");\r
- eventDialog.ok_button.setAction(send_event_action);\r
- eventDialog.midi_message_form.channelText.setSelectedChannel(\r
+ keyboardCenterPanel.keyboard.midiDevice.sendMidiMessage(\r
+ eventDialog.midiMessageForm.getMessage()\r
+ );\r
+ }\r
+ };\r
+ JButton sendEventButton = new JButton(\r
+ new AbstractAction() {\r
+ {\r
+ putValue(NAME,"Send MIDI event");\r
+ }\r
+ public void actionPerformed(ActionEvent e) {\r
+ eventDialog.setTitle("Send MIDI event");\r
+ eventDialog.okButton.setAction(sendSventAction);\r
+ eventDialog.midiMessageForm.channelText.setSelectedChannel(\r
keyboardCenterPanel.keyboard.midiChComboboxModel.getSelectedChannel()\r
- );\r
- eventDialog.openMessageForm();\r
+ );\r
+ eventDialog.openMessageForm();\r
+ }\r
+ }\r
+ );\r
+ JPanel keyboardChordPanel = new JPanel() {\r
+ {\r
+ setLayout(new BoxLayout(this, BoxLayout.X_AXIS));\r
}\r
};\r
- Action send_event_action = new AbstractAction() {\r
- { putValue(NAME,"Send"); }\r
- public void actionPerformed(ActionEvent e) {\r
- keyboardCenterPanel.keyboard.midiDevice.sendMidiMessage(\r
- eventDialog.midi_message_form.getMessage()\r
- );\r
+ JPanel keyboardSouthPanel = new JPanel() {\r
+ {\r
+ setLayout(new BoxLayout(this, BoxLayout.X_AXIS));\r
}\r
};\r
- Insets zero_insets = new Insets(0,0,0,0);\r
- KeySignatureSelecter keySelecter = new KeySignatureSelecter(false);\r
- JButton send_event_button = new JButton(query_send_event_action);\r
+ KeySignatureSelecter keySelecter = new KeySignatureSelecter(false);\r
+ PianoKeyboardPanel keyboardCenterPanel = new PianoKeyboardPanel();\r
\r
- JPanel keyboard_chord_panel, keyboard_south_panel;\r
+ MidiChannelComboSelecter midiChannelCombobox =\r
+ new MidiChannelComboSelecter(\r
+ "MIDI Channel",\r
+ keyboardCenterPanel.keyboard.midiChComboboxModel\r
+ );\r
+ MidiChannelButtonSelecter midiChannelButtons =\r
+ new MidiChannelButtonSelecter(keyboardCenterPanel.keyboard);\r
+ VelocitySelecter velocitySelecter =\r
+ new VelocitySelecter(keyboardCenterPanel.keyboard.velocityModel);\r
\r
- PianoKeyboardPanel\r
- keyboardCenterPanel = new PianoKeyboardPanel();\r
+ private static final Insets ZERO_INSETS = new Insets(0,0,0,0);\r
\r
- MidiChannelComboSelecter midi_ch_combobox =\r
- new MidiChannelComboSelecter(\r
- "MIDI Channel",\r
- keyboardCenterPanel.keyboard.midiChComboboxModel\r
- );\r
- MidiChannelButtonSelecter midi_ch_buttons =\r
- new MidiChannelButtonSelecter(keyboardCenterPanel.keyboard);\r
- VelocitySelecter velocity_selecter =\r
- new VelocitySelecter(keyboardCenterPanel.keyboard.velocityModel);\r
-\r
- public MidiKeyboardPanel( ChordMatrix chord_matrix ) {\r
- keyboardCenterPanel.keyboard.chord_matrix = chord_matrix;\r
+ public MidiKeyboardPanel( ChordMatrix chordMatrix ) {\r
+ keyboardCenterPanel.keyboard.chord_matrix = chordMatrix;\r
keyboardCenterPanel.keyboard.chordDisplay =\r
- new ChordDisplay(\r
- "MIDI Keyboard", chord_matrix,\r
- keyboardCenterPanel.keyboard\r
- );\r
- keyboard_chord_panel = new JPanel();\r
- keyboard_chord_panel.setLayout(\r
- new BoxLayout( keyboard_chord_panel, BoxLayout.X_AXIS )\r
- );\r
- keyboard_chord_panel.add( Box.createHorizontalStrut(5) );\r
- keyboard_chord_panel.add( velocity_selecter );\r
- keyboard_chord_panel.add( keySelecter );\r
- keyboard_chord_panel.add( keyboardCenterPanel.keyboard.chordDisplay );\r
- keyboard_chord_panel.add( Box.createHorizontalStrut(5) );\r
- //\r
- send_event_button.setMargin(zero_insets);\r
- //\r
- keyboard_south_panel = new JPanel();\r
- keyboard_south_panel.setLayout(\r
- new BoxLayout( keyboard_south_panel, BoxLayout.X_AXIS )\r
- );\r
- keyboard_south_panel.add( midi_ch_combobox );\r
- keyboard_south_panel.add( midi_ch_buttons );\r
- keyboard_south_panel.add( send_event_button );\r
+ new ChordDisplay(\r
+ "MIDI Keyboard", chordMatrix, keyboardCenterPanel.keyboard\r
+ );\r
+ keyboardChordPanel.add( Box.createHorizontalStrut(5) );\r
+ keyboardChordPanel.add( velocitySelecter );\r
+ keyboardChordPanel.add( keySelecter );\r
+ keyboardChordPanel.add( keyboardCenterPanel.keyboard.chordDisplay );\r
+ keyboardChordPanel.add( Box.createHorizontalStrut(5) );\r
+ sendEventButton.setMargin(ZERO_INSETS);\r
+ keyboardSouthPanel.add( midiChannelCombobox );\r
+ keyboardSouthPanel.add( midiChannelButtons );\r
+ keyboardSouthPanel.add( sendEventButton );\r
//\r
setLayout( new BoxLayout( this, BoxLayout.Y_AXIS ) );\r
- add( keyboard_chord_panel );\r
+ add( keyboardChordPanel );\r
add( keyboardCenterPanel );\r
add( Box.createVerticalStrut(5) );\r
- add( keyboard_south_panel );\r
+ add( keyboardSouthPanel );\r
}\r
\r
// Methods\r
//\r
- public void setDarkMode(boolean is_dark) {\r
- Color col = is_dark ? Color.black : null;\r
- setBackground( col );\r
- keyboardCenterPanel.setDarkMode( is_dark );\r
- keyboard_chord_panel.setBackground( col );\r
- keyboard_south_panel.setBackground( col );\r
- midi_ch_buttons.setBackground( col );\r
- midi_ch_combobox.setBackground( col );\r
- midi_ch_combobox.comboBox.setBackground( col );\r
- keySelecter.setBackground( col );\r
- keySelecter.keysigCombobox.setBackground( col );\r
- velocity_selecter.setBackground( col );\r
- keyboardCenterPanel.keyboard.chordDisplay.setDarkMode( is_dark );\r
- send_event_button.setBackground( col );\r
+ public void setDarkMode(boolean isDark) {\r
+ Color col = isDark ? Color.black : null;\r
+ setBackground(col);\r
+ keyboardCenterPanel.setDarkMode(isDark);\r
+ keyboardChordPanel.setBackground(col);\r
+ keyboardSouthPanel.setBackground(col);\r
+ midiChannelButtons.setBackground(col);\r
+ midiChannelCombobox.setBackground(col);\r
+ midiChannelCombobox.comboBox.setBackground(col);\r
+ keySelecter.setBackground(col);\r
+ keySelecter.keysigCombobox.setBackground(col);\r
+ velocitySelecter.setBackground(col);\r
+ keyboardCenterPanel.keyboard.chordDisplay.setDarkMode(isDark);\r
+ sendEventButton.setBackground(col);\r
}\r
\r
}\r