package net.sf.nmedit.nordmodular;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import javax.swing.JFrame;
import net.sf.nmedit.jpatch.clavia.nordmodular.NMPatch;
import net.sf.nmedit.jtheme.clavia.nordmodular.NMKnobAssignmentWindow;
import net.sf.nmedit.nomad.core.Nomad;
import net.sf.nmedit.nomad.core.swing.document.Document;
import net.sf.nmedit.nomad.core.swing.document.DocumentEvent;
import net.sf.nmedit.nomad.core.swing.document.DocumentListener;
public class KnobController implements ActionListener, DocumentListener, WindowListener
{
private NMKnobAssignmentWindow kaw = null;
private void ensureCreated()
{
if (kaw != null) return;
NMContextData data = NMContextData.sharedInstance();
kaw = new NMKnobAssignmentWindow(data.getJTContext());
kaw.getFrame().setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
public void actionPerformed(ActionEvent e)
{
ensureCreated();
documentChanged(Nomad.sharedInstance().getDocumentManager().getSelection());
kaw.getFrame().setVisible(true);
kaw.getFrame().addWindowListener(this);
}
public void documentAdded(DocumentEvent e)
{
// no op
}
public void documentRemoved(DocumentEvent e)
{
// TODO Auto-generated method stub
}
public void documentSelected(DocumentEvent e)
{
documentChanged(e.getDocument());
}
private void documentChanged(Document document)
{
if (kaw == null) return;
NMPatch newPatch = null;
if (document != null && document instanceof PatchDocument)
{
newPatch = ((PatchDocument) document).getPatch();
}
kaw.setPatch(newPatch);
}
public void windowClosed(WindowEvent e)
{
if (kaw != null)
{
kaw.getFrame().removeWindowListener(this);
kaw.setPatch(null);
kaw = null;
}
}
public void windowActivated(WindowEvent e)
{
// no op
}
public void windowClosing(WindowEvent e)
{
// no op
}
public void windowDeactivated(WindowEvent e)
{
// no op
}
public void windowDeiconified(WindowEvent e)
{
// no op
}
public void windowIconified(WindowEvent e)
{
// no op
}
public void windowOpened(WindowEvent e)
{
// no op
}
}