/* Copyright (C) 2006 Christian Schneider * * This file is part of Nomad. * * Nomad is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * Nomad is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Nomad; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */package net.sf.nmedit.jtheme.clavia.nordmodular; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Insets; import java.awt.RenderingHints; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import net.sf.nmedit.jtheme.JTContext; import net.sf.nmedit.jtheme.clavia.nordmodular.graphics.FilterE; import net.sf.nmedit.jtheme.component.JTControlAdapter; import net.sf.nmedit.jtheme.component.JTDisplay; import net.sf.nmedit.jtheme.store2.BindParameter; public class JTFilterEDisplay extends JTDisplay implements ChangeListener { /** * */ private static final long serialVersionUID = -4230718814779546880L; private FilterE filterE; private JTControlAdapter cutoffAdapter; private JTControlAdapter resonanceAdapter; private JTControlAdapter typeAdapter; private JTControlAdapter slopeAdapter; private JTControlAdapter gainControlAdapter; public JTFilterEDisplay(JTContext context) { super(context); filterE = new FilterE(); } protected void paintComponent(Graphics g) { if (filterE.isModified()) { filterE.setModified(false); setDoubleBufferNeedsUpdate(); } super.paintComponentWithDoubleBuffer(g); } protected void paintDynamicLayer(Graphics2D g) { g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); Insets insets = getInsets(); int w = getWidth()-insets.left-insets.right; int h = getHeight()-insets.top-insets.bottom; g.setColor(JTNM1Context.GRAPH_DISPLAY_LINE); int y = (int)(insets.top+h*.45); g.drawLine(insets.left, y, w-1, y); g.setColor(getForeground()); filterE.setBounds(0, 0, w, h); g.translate(insets.left, insets.top); g.setColor(JTNM1Context.GRAPH_DISPLAY_FILL); g.fill(filterE); g.setColor(JTNM1Context.GRAPH_DISPLAY_FILL_LINE); g.draw(filterE); g.translate(-insets.left, -insets.top); // undo translation } public float getCutoff() { return filterE.getCutOff(); } public float getResonance() { return filterE.getResonance(); } public int getType() { return filterE.getType(); } public int getSlope() { return filterE.getSlope(); } public int getGainControl(){ return filterE.getGainControl(); } public void setCutoff(float value) { if (getCutoff() != value) { filterE.setCutOff(value); repaint(); } } public void setResonance(float value) { if (getResonance() != value) { filterE.setResonance(value); repaint(); } } public void setType(int value) { if (getType() != value) { filterE.setType(value); repaint(); } } public void setSlope(int value) { if (getSlope() != value) { filterE.setSlope(value); repaint(); } } public void setGainControl(int value){ if (getGainControl() != value) { filterE.setGainControl(value); repaint(); } } public JTControlAdapter getCutoffAdapter() { return cutoffAdapter; } public JTControlAdapter getResonanceAdapter() { return resonanceAdapter; } public JTControlAdapter getTypeAdapter() { return typeAdapter; } public JTControlAdapter getSlopeAdapter() { return slopeAdapter; } @BindParameter(name="cutoff") public void setCutoffAdapter(JTControlAdapter adapter) { JTControlAdapter oldAdapter = this.cutoffAdapter; if (oldAdapter != adapter) { if (oldAdapter != null) oldAdapter.setChangeListener(null); this.cutoffAdapter = adapter; if (adapter != null) adapter.setChangeListener(this); updateCutoff(); } } @BindParameter(name="resonance") public void setResonanceAdapter(JTControlAdapter adapter) { JTControlAdapter oldAdapter = this.resonanceAdapter; if (oldAdapter != adapter) { if (oldAdapter != null) oldAdapter.setChangeListener(null); this.resonanceAdapter = adapter; if (adapter != null) adapter.setChangeListener(this); updateResonance(); } } @BindParameter(name="type") public void setTypeAdapter(JTControlAdapter adapter) { JTControlAdapter oldAdapter = this.typeAdapter; if (oldAdapter != adapter) { if (oldAdapter != null) oldAdapter.setChangeListener(null); this.typeAdapter = adapter; if (adapter != null) adapter.setChangeListener(this); updateType(); } } @BindParameter(name="slope") public void setSlopeAdapter(JTControlAdapter adapter) { JTControlAdapter oldAdapter = this.slopeAdapter; if (oldAdapter != adapter) { if (oldAdapter != null) oldAdapter.setChangeListener(null); this.slopeAdapter = adapter; if (adapter != null) adapter.setChangeListener(this); updateSlope(); } } @BindParameter(name="gain-control") public void setGainControlAdapter(JTControlAdapter adapter) { JTControlAdapter oldAdapter = this.gainControlAdapter; if (oldAdapter != adapter) { if (oldAdapter != null) oldAdapter.setChangeListener(null); this.gainControlAdapter = adapter; if (adapter != null) adapter.setChangeListener(this); updateGainControl(); } } protected void updateCutoff() { if (cutoffAdapter != null) setCutoff((float)cutoffAdapter.getNormalizedValue()); } protected void updateResonance() { if (resonanceAdapter != null) setResonance((float)resonanceAdapter.getNormalizedValue()); } protected void updateType() { if (typeAdapter != null) setType(typeAdapter.getValue()); } protected void updateSlope() { if (slopeAdapter != null){ setSlope(slopeAdapter.getValue()); } } protected void updateGainControl() { if (gainControlAdapter!= null){ setGainControl(gainControlAdapter.getValue()); } } public void stateChanged(ChangeEvent e) { if (e.getSource() == cutoffAdapter) { updateCutoff(); return; } if (e.getSource() == resonanceAdapter) { updateResonance(); return; } if (e.getSource() == typeAdapter) { updateType(); return; } if (e.getSource() == slopeAdapter) { updateSlope(); return; } if (e.getSource() == gainControlAdapter) { updateGainControl(); return; } } }