package vafusion.gui;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JComponent;
import jm.music.data.Note;
import jm.util.Play;
@SuppressWarnings("serial")
public class KeyComponent extends JComponent{
private vafusion.data.Key key;
public KeyComponent(int x, int y, int height, int width, int note, boolean isWhite){
this.key = new vafusion.data.Key(x, y, height, width, note, isWhite);
}
public void paint(Graphics g){
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.black);
if(key.isWhite()){
g2d.draw(key.getClickableArea());
}else{
g2d.fill(key.getClickableArea());
}
if(key.isPressed()){
g2d.setColor(Color.cyan);
g2d.fill(key.getHighlightArea());
}else{
if(key.isWhite()){
g2d.setColor(Color.white);
g2d.fill(key.getHighlightArea());
}else{
g2d.setColor(Color.black);
g2d.fill(key.getHighlightArea());
}
}
}
public void press(){
key.setPressed(true);
((PianoComponent) this.getParent()).getPiano().getCurrentChord().add(new Note(key.getNote() , ((PianoComponent) this.getParent()).getPiano().getCurrentRhythm()));
if(((PianoComponent)getParent()).getPiano().isRecording())
((PianoComponent)this.getParent()).getScore().addNote(new Note(key.getNote() , ((PianoComponent) this.getParent()).getPiano().getCurrentRhythm()));
this.repaint();
this.getParent().repaint();
}
public void unpress(){
key.setPressed(false);
// if(((PianoComponent)getParent()).getPiano().isRecording()) {
// System.out.println("Recording current phrase");
// ((PianoComponent)getParent()).getPiano().getRecordedPhrase().addNoteList(((PianoComponent)getParent()).getPiano().getCurrentChord().toArray(new Note[0]));
// }
Note curr = new Note(key.getNote(), ((PianoComponent) this.getParent()).getPiano().getCurrentRhythm());
for(Note n : ((PianoComponent) this.getParent()).getPiano().getCurrentChord())
if(n.samePitch(curr)) {
((PianoComponent) this.getParent()).getPiano().getCurrentChord().remove(n);
System.out.println("Removed note: " + n);
}
try {
Play.stopMidi();
} catch (NullPointerException e) {
//e.printStackTrace();
}
this.repaint();
}
public vafusion.data.Key getKey(){
return key;
}
}