/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.frinika.project.gui;
import com.frinika.project.MultiPart;
import java.awt.event.ActionEvent;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JMenu;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JPopupMenu;
import com.frinika.project.ProjectContainer;
import com.frinika.sequencer.model.MenuPlugable;
import com.frinika.sequencer.model.MenuPlugin;
import com.frinika.sequencer.model.MidiLane;
import com.frinika.sequencer.model.MidiPart;
import com.frinika.sequencer.model.Part;
import javax.swing.ButtonGroup;
import javax.swing.JMenuItem;
import javax.swing.JRadioButtonMenuItem;
public class MultiPartMenuPlugin implements MenuPlugin {
private ProjectContainer proj;
public MultiPartMenuPlugin(ProjectContainer proj) {
this.proj = proj;
}
@SuppressWarnings("serial")
public void initContextMenu(JPopupMenu popup, final MenuPlugable obj) {
if ((obj instanceof MidiPart)) {
final MidiPart mp = (MidiPart) obj;
final MultiPart multi = mp.getMultiPart();
if (multi != null) {
JMenu subMenu = new JMenu("Takes");
int take = 0;
MidiLane lane = (MidiLane) mp.getLane();
boolean isDrum = lane.isDrumLane();
ButtonGroup grp = null;
if (!isDrum) {
grp = new ButtonGroup();
}
for (final Part part : multi.getParts()) {
take++;
if (isDrum) {
final JCheckBoxMenuItem item = new JCheckBoxMenuItem();
item.setSelected(part.isAttached()
);
item.setAction(new AbstractAction(" take " + take) {
public void actionPerformed(ActionEvent e) {
proj.getEditHistoryContainer().mark("X");
if (item.isSelected()) {
part.addToModel();
} else {
part.removeFromModel();
}
proj.getEditHistoryContainer().notifyEditHistoryListeners();
}
});
subMenu.add(item);
} else {
final JRadioButtonMenuItem item = new JRadioButtonMenuItem(" take " + take, part.isAttached());
grp.add(item);
System.out.println(part + " " + take);
item.setAction(new AbstractAction(" take " + take) {
public void actionPerformed(ActionEvent e) {
proj.getEditHistoryContainer().mark("X");
System.out.println(part + " " + item.isSelected());
for (Part partX : multi.getParts()) {
System.out.println(partX + " --> " +partX.isAttached());
if (partX != part) {
if (partX.isAttached()) {
partX.removeFromModel();
}
} else {
if (!partX.isAttached()) {
partX.addToModel();
}
}
}
proj.getEditHistoryContainer().notifyEditHistoryListeners();
}
});
subMenu.add(item);
}
}
popup.add(subMenu);
}
}
}
}