// Copyright (C) 2006 Steve Taylor.
// Distributed under the Toot Software License, Version 1.0. (See
// accompanying file LICENSE_1_0.txt or copy at
// http://www.toot.org/LICENSE_1_0.txt)
package com.frinika.tootX.gui;
import com.frinika.tootX.midi.MidiLearnIF;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import uk.org.toot.audio.fader.FaderControl;
import uk.org.toot.control.BooleanControl;
import uk.org.toot.control.CompoundControl;
import uk.org.toot.control.Control;
import uk.org.toot.control.ControlSelector;
import uk.org.toot.control.EnumControl;
import uk.org.toot.control.FloatControl;
import uk.org.toot.swingui.audioui.AudioCompoundControlPanel;
import uk.org.toot.swingui.audioui.AudioPanelFactory;
import uk.org.toot.swingui.audioui.faderui.FaderPanel;
import uk.org.toot.swingui.controlui.BooleanControlPanel;
import uk.org.toot.swingui.controlui.BooleanIndicatorPanel;
import uk.org.toot.swingui.controlui.EnumControlPanel;
import uk.org.toot.swingui.controlui.FloatControlPanel;
import uk.org.toot.swingui.controlui.PanelFactory;
public class FrinikaMixerPanelFactory extends AudioPanelFactory
{
ControlFocus focus=null;
public FrinikaMixerPanelFactory(MidiLearnIF midiLearnIF) {
focus=new ControlFocus(midiLearnIF);
}
public JComponent createComponent(Control control, int axis, boolean hasHeader) {
// System.out.println(" Creating Mixer Component " + control + " " + control.getAnnotation() );
if ( control instanceof FaderControl ) {
// System.out.println(" FrinikaFader");
JPanel faderPanel = new FaderPanel((FaderControl)control, isFaderRotary(control));
focus.addComponent(faderPanel);
faderPanel.setAlignmentY(0.25f); // ??? !!!
return faderPanel;
}
if ( control instanceof CompoundControl ) {
// System.out.println(" FrinikaCompound");
CompoundControl cc = (CompoundControl)control;
int a = axis;
if ( cc.isAlwaysVertical() ) {
a = BoxLayout.Y_AXIS;
} else if ( cc.isAlwaysHorizontal() ) {
a = BoxLayout.X_AXIS;
}
// brute force service provider lookup
// expected slow-down but it still seems fast! causes sound glitches
// JComponent comp = ControlPanelServices.createControlPanel(cc, a, null, this, axis == BoxLayout.X_AXIS, hasHeader);
// if ( comp != null ) return comp;
// default compound UI
return createCompoundComponent(cc, a, null, this, true, hasHeader);
} else if ( control instanceof FloatControl ) {
JPanel floatPanel;
if ( control.isIndicator() ) {
// !!! !!! !!!
floatPanel = new uk.org.toot.swingui.audioui.meterui.GainReductionIndicatorPanel((FloatControl)control);
} else {
// System.out.println(" FrinikaFLoat");
floatPanel = new FloatControlPanel((FloatControl)control, axis);
floatPanel.setAlignmentY(0.25f); // ??? !!!
}
focus.addComponent(floatPanel);
return floatPanel;
} else if ( control instanceof BooleanControl ) {
if ( control.isIndicator() ) {
return new BooleanIndicatorPanel((BooleanControl)control);
} else {
return new BooleanControlPanel((BooleanControl)control);
}
} else if ( control instanceof EnumControl ) {
if ( control.isIndicator() ) {
JLabel label = new JLabel(((EnumControl)control).getValue().toString());
label.setBorder(BorderFactory.createEmptyBorder(3, 1, 2, 2));
label.setAlignmentX(0.5f);
return label;
} else {
return new EnumControlPanel((EnumControl)control);
}
} else { // !!! !!!
}
return null;
}
protected JComponent createCompoundComponent(CompoundControl c, int axis,
ControlSelector s, PanelFactory f, boolean hasBorder, boolean hasHeader) {
// boolean hb = hasBorder && !c.isAlwaysHorizontal(); // ControlRow hack !!! !!!
return new AudioCompoundControlPanel(c, axis, s, f, hasBorder, hasHeader);
}
public boolean isFaderRotary(Control control) {
return true;
}
}