Package nodebox.client.devicehandler

Source Code of nodebox.client.devicehandler.AudioInputDeviceHandler$AudioInputDeviceControl

package nodebox.client.devicehandler;

import nodebox.client.MinimInputApplet;
import nodebox.node.Device;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.Map;

public class AudioInputDeviceHandler implements DeviceHandler {

    private String name;
    private boolean syncWithTimeline;
    private JFrame frame = null;

    private MinimInputApplet applet = null;

    public AudioInputDeviceHandler(String name) {
        this(name, false);
    }

    public AudioInputDeviceHandler(String name, boolean syncWithTimeline) {
        this.name = name;
        this.syncWithTimeline = syncWithTimeline;
    }

    @Override
    public String getName() {
        return name;
    }

    @Override
    public boolean isSyncedWithTimeline() {
        return syncWithTimeline;
    }

    @Override
    public void start() {
        if (frame != null) stop();
        frame = new JFrame();
        applet = new MinimInputApplet();
        applet.init();
        frame.add(applet);
    }

    @Override
    public void resume() {
        if (frame == null) start();
    }

    @Override
    public void pause() {
        // Do nothing.
    }

    @Override
    public void stop() {
        if (frame != null) {
            applet.stop();
            applet.dispose();
            frame.dispose();
            frame = null;
        }
    }

    @Override
    public void addData(Map<String, Object> map) {
        if (applet != null && applet.getInput() != null) {
            map.put(getName() + ".source", applet.getInput());
            map.put(getName() + ".beat", applet.getBeatDetect());
        }
    }

    public AbstractDeviceControl createControl() {
        return new AudioInputDeviceControl(this);
    }

    private class AudioInputDeviceControl extends AbstractDeviceControl {
        private JLabel deviceNameLabel;
        private JCheckBox syncWithTimelineCheck;
        private JButton startButton;
        private JButton stopButton;

        public AudioInputDeviceControl(AudioInputDeviceHandler deviceHandler) {
            super(deviceHandler);
            setLayout(new BoxLayout(this, BoxLayout.X_AXIS));

            Dimension d = new Dimension(500, 60);
            setPreferredSize(d);
            setMaximumSize(d);
            setSize(d);

            deviceNameLabel = new JLabel(deviceHandler.getName());

            add(Box.createHorizontalStrut(10));
            add(deviceNameLabel);
            add(Box.createHorizontalStrut(5));

            syncWithTimelineCheck = new JCheckBox("Sync with Timeline");
            syncWithTimelineCheck.setSelected(isSyncedWithTimeline());
            syncWithTimelineCheck.addItemListener(new ItemListener() {
                @Override
                public void itemStateChanged(ItemEvent itemEvent) {
                    syncWithTimeline = syncWithTimelineCheck.isSelected();
                    setPropertyValue(Device.TIMELINE_SYNC, String.valueOf(syncWithTimeline));
                }
            });

            startButton = new JButton("Start");
            startButton.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent actionEvent) {
                    start();
                    setButtons();
                }
            });
            stopButton = new JButton("Stop");
            stopButton.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent actionEvent) {
                    stop();
                    setButtons();
                }
            });

            setButtons();

            JPanel startStopPanel = new JPanel();
            startStopPanel.setLayout(new BoxLayout(startStopPanel, BoxLayout.X_AXIS));
            startStopPanel.add(syncWithTimelineCheck);
            startStopPanel.add(Box.createHorizontalStrut(5));
            startStopPanel.add(startButton);
            startStopPanel.add(Box.createHorizontalStrut(5));
            startStopPanel.add(stopButton);
            startStopPanel.add(Box.createHorizontalGlue());

            JPanel mainPanel = new JPanel();
            mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
            mainPanel.add(startStopPanel);

            add(mainPanel);
            add(Box.createHorizontalGlue());
        }

        private void setButtons() {
            startButton.setEnabled(frame == null);
            stopButton.setEnabled(frame != null);
        }

    }
}
TOP

Related Classes of nodebox.client.devicehandler.AudioInputDeviceHandler$AudioInputDeviceControl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.