/*
* Copyright (C) 2012 Gyver
*
* This program 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 3 of the License, or
* (at your option) any later version.
*
* This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.gyver.matrixmover.gui.listener;
import com.gyver.matrixmover.core.Controller;
import com.gyver.matrixmover.core.MatrixData;
import com.gyver.matrixmover.core.VisualSetup;
import com.gyver.matrixmover.effect.Effect;
import com.gyver.matrixmover.effect.Effect.EffectName;
import com.gyver.matrixmover.effect.Emboss;
import com.gyver.matrixmover.effect.Inverter;
import com.gyver.matrixmover.effect.Monocrome;
import com.gyver.matrixmover.effect.MonocromeInvers;
import com.gyver.matrixmover.effect.PassThru;
import com.gyver.matrixmover.generator.Analyser;
import com.gyver.matrixmover.generator.AudioStrobe;
import com.gyver.matrixmover.generator.ColorFade;
import com.gyver.matrixmover.generator.ColorScroll;
import com.gyver.matrixmover.generator.Fire;
import com.gyver.matrixmover.generator.Rain;
import com.gyver.matrixmover.generator.Generator;
import com.gyver.matrixmover.generator.enums.GeneratorName;
import com.gyver.matrixmover.generator.MetaBalls;
import com.gyver.matrixmover.generator.Plasma;
import com.gyver.matrixmover.generator.Shapes;
import com.gyver.matrixmover.generator.SimpleColorGenerator;
import com.gyver.matrixmover.generator.Textwriter;
import com.gyver.matrixmover.gui.Frame;
import com.gyver.matrixmover.gui.GeneratorPanel;
import com.gyver.matrixmover.gui.GeneratorSetup;
import com.gyver.matrixmover.gui.component.GeneratorSetupPanel;
import com.gyver.matrixmover.gui.generator.AnalyserConfiguration;
import com.gyver.matrixmover.gui.generator.ColorFadeConfiguration;
import com.gyver.matrixmover.gui.generator.ColorScrollConfiguration;
import com.gyver.matrixmover.gui.generator.ShapesConfiguration;
import com.gyver.matrixmover.gui.generator.DropsConfiguration;
import com.gyver.matrixmover.gui.generator.FireConfiguration;
import com.gyver.matrixmover.gui.generator.MetaBallsConfiguration;
import com.gyver.matrixmover.gui.generator.PlasmaConfiguration;
import com.gyver.matrixmover.gui.generator.AudioStrobeConfiguration;
import com.gyver.matrixmover.gui.generator.SimpleColorConfiguration;
import com.gyver.matrixmover.gui.generator.TextwriterConfiguration;
import com.gyver.matrixmover.mixer.AddSat;
import com.gyver.matrixmover.mixer.Either;
import com.gyver.matrixmover.mixer.Max;
import com.gyver.matrixmover.mixer.MinusHalf;
import com.gyver.matrixmover.mixer.Mix;
import com.gyver.matrixmover.mixer.Mixer;
import com.gyver.matrixmover.mixer.Mixer.MixerName;
import com.gyver.matrixmover.mixer.Multiply;
import com.gyver.matrixmover.mixer.NegativeMultiply;
import com.gyver.matrixmover.mixer.PassThruMixer;
import com.gyver.matrixmover.mixer.Xor;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
/**
* Listenes to the comboboxes in the gui.
* @author jonas
*/
public class GeneratorSetupListener implements ActionListener, ChangeListener {
/** The log. */
private static final Logger LOG = Logger.getLogger(GeneratorSetupListener.class.getName());
private VisualSetup vs = null;
private GeneratorSetup setupPanel = null;
public GeneratorSetupListener(VisualSetup vs, GeneratorSetup setupPanel) {
this.vs = vs;
this.setupPanel = setupPanel;
}
public void updateVisualSetup(VisualSetup vs){
this.vs = vs;
}
@Override
public void actionPerformed(ActionEvent ae) {
if (setupPanel == null) {
return;
}
if (ae.getSource() instanceof JButton) {
JButton b = (JButton) ae.getSource();
int index = setupPanel.getIndexOfGeneratorSetupBySetupPanelObject((GeneratorSetupPanel) b.getParent());
if(b.getText().equals("Config Generator")) {
openGeneratorSettingsDialog(vs.getGenerator(index));
} else if(b.getText().equals("Config Effect")) {
// not used atm.
}
} else if (ae.getSource() instanceof JComboBox) {
JComboBox cb = (JComboBox) ae.getSource();
int index = setupPanel.getIndexOfGeneratorSetupBySetupPanelObject((GeneratorSetupPanel) cb.getParent());
MatrixData md = Controller.getControllerInstance().getMatrixData();
if (cb.getSelectedItem() instanceof GeneratorName) {
vs.setGeneratorFromString(index, ((GeneratorName) cb.getSelectedItem()).toString());
} else if (cb.getSelectedItem() instanceof EffectName) {
vs.setEffectFromString(index, ((EffectName) cb.getSelectedItem()).toString());
} else if (cb.getSelectedItem() instanceof MixerName) {
vs.setMixerFromString(index, ((MixerName) cb.getSelectedItem()).toString());
}
}
setupPanel.buildGuiFromVisualSetup();
}
@Override
public void stateChanged(ChangeEvent e) {
if (e.getSource() instanceof JSlider) {
JSlider s = (JSlider) e.getSource();
int index = setupPanel.getIndexOfGeneratorSetupBySetupPanelObject((GeneratorSetupPanel) s.getParent());
vs.setGeneratorIntensity(s.getValue(), index);
}
}
private void openGeneratorSettingsDialog(Generator activGenerator) {
if (activGenerator instanceof SimpleColorGenerator) {
SimpleColorConfiguration sctDialog = new SimpleColorConfiguration(Frame.getFrameInstance(), true, (SimpleColorGenerator) activGenerator);
sctDialog.setVisible(true);
} else if (activGenerator instanceof ColorScroll) {
ColorScrollConfiguration ctDialog = new ColorScrollConfiguration(Frame.getFrameInstance(), true, (ColorScroll) activGenerator);
ctDialog.setVisible(true);
} else if (activGenerator instanceof ColorFade) {
ColorFadeConfiguration cfDialog = new ColorFadeConfiguration(Frame.getFrameInstance(), true, (ColorFade) activGenerator);
cfDialog.setVisible(true);
} else if (activGenerator instanceof Plasma) {
PlasmaConfiguration pDialog = new PlasmaConfiguration(Frame.getFrameInstance(), true, (Plasma) activGenerator);
pDialog.setVisible(true);
} else if (activGenerator instanceof Fire) {
FireConfiguration fDialog = new FireConfiguration(Frame.getFrameInstance(), true, (Fire) activGenerator);
fDialog.setVisible(true);
} else if (activGenerator instanceof Rain) {
DropsConfiguration dDialog = new DropsConfiguration(Frame.getFrameInstance(), true, (Rain) activGenerator);
dDialog.setVisible(true);
} else if (activGenerator instanceof MetaBalls) {
MetaBallsConfiguration mbDialog = new MetaBallsConfiguration(Frame.getFrameInstance(), true, (MetaBalls) activGenerator);
mbDialog.setVisible(true);
} else if (activGenerator instanceof Textwriter) {
TextwriterConfiguration twDialog = new TextwriterConfiguration(Frame.getFrameInstance(), true, (Textwriter) activGenerator);
twDialog.setVisible(true);
} else if (activGenerator instanceof Shapes) {
ShapesConfiguration sDialog = new ShapesConfiguration(Frame.getFrameInstance(), true, (Shapes) activGenerator);
sDialog.setVisible(true);
} else if (activGenerator instanceof Analyser) {
AnalyserConfiguration aDialog = new AnalyserConfiguration(Frame.getFrameInstance(), true, (Analyser) activGenerator);
aDialog.setVisible(true);
} else if (activGenerator instanceof AudioStrobe) {
AudioStrobeConfiguration ascDialog = new AudioStrobeConfiguration(Frame.getFrameInstance(), true, (AudioStrobe) activGenerator);
ascDialog.setVisible(true);
}
}
}