Package uk.co.caprica.vlcj.test.logo

Source Code of uk.co.caprica.vlcj.test.logo.LogoTest$ControlsPanel

/*
* This file is part of VLCJ.
*
* VLCJ 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.
*
* VLCJ 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 VLCJ.  If not, see <http://www.gnu.org/licenses/>.
*
* Copyright 2009, 2010, 2011, 2012, 2013, 2014 Caprica Software Limited.
*/

package uk.co.caprica.vlcj.test.logo;

import static uk.co.caprica.vlcj.player.Logo.logo;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import javax.swing.JSlider;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.border.TitledBorder;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import uk.co.caprica.vlcj.binding.internal.libvlc_logo_position_e;
import uk.co.caprica.vlcj.component.EmbeddedMediaPlayerComponent;
import uk.co.caprica.vlcj.test.VlcjTest;

/**
* Test the logo.
* <p>
* The enable/disable buttons simply toggle the logo on/off, to actually change logo settings you
* must use the apply button.
*/
public class LogoTest extends VlcjTest {

    private final EmbeddedMediaPlayerComponent mediaPlayerComponent;

    private final JFrame frame;

    private final JPanel cp;

    private final JPanel controlsPanel;

    public static void main(final String[] args) throws Exception {
        if(args.length != 1) {
            System.err.println("Specify a single MRL");
            System.exit(1);
        }

        setLookAndFeel();

        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new LogoTest().start(args[0]);
            }
        });
    }

    public LogoTest() {
        mediaPlayerComponent = new EmbeddedMediaPlayerComponent();

        cp = new JPanel();
        cp.setLayout(new BorderLayout());
        cp.add(mediaPlayerComponent, BorderLayout.CENTER);

        controlsPanel = new ControlsPanel();
        cp.add(controlsPanel, BorderLayout.SOUTH);

        frame = new JFrame("vlcj Logo Test");
        frame.setContentPane(cp);
        frame.setSize(1300, 800);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                mediaPlayerComponent.release(true);
            }
        });
    }

    public void start(String mrl) {
        frame.setVisible(true);
        mediaPlayerComponent.getMediaPlayer().playMedia(mrl);
    }

    @SuppressWarnings("serial")
    private class ControlsPanel extends JPanel {

        JTextField xTextField = new JTextField(4);

        JTextField yTextField = new JTextField(4);

        JComboBox positionCombo = new JComboBox();

        JSlider opacitySlider = new JSlider(0, 255);

        JTextField fileTextField = new JTextField(20);

        JCheckBox enableCheckBox = new JCheckBox("Enable");

        JButton applyButton = new JButton("Apply");

        JButton enableButton = new JButton("Enable");

        JButton disableButton = new JButton("Disable");

        private ControlsPanel() {
            setBorder(new TitledBorder("Logo Controls"));

            positionCombo.setModel(new PositionComboModel());

            JSeparator separator;

            add(new JLabel("X"));
            add(xTextField);
            add(new JLabel("Y"));
            add(yTextField);
            add(new JLabel("Position"));
            add(positionCombo);
            add(new JLabel("Opacity"));
            add(opacitySlider);
            add(new JLabel("File"));
            add(fileTextField);
            add(enableCheckBox);
            separator = new JSeparator(JSeparator.VERTICAL);
            separator.setPreferredSize(new Dimension(4, 20));
            add(separator);
            add(applyButton);
            separator = new JSeparator(JSeparator.VERTICAL);
            separator.setPreferredSize(new Dimension(4, 20));
            add(separator);
            add(enableButton);
            add(disableButton);

            opacitySlider.setPreferredSize(new Dimension(100, 16));

            opacitySlider.addChangeListener(new ChangeListener() {
                @Override
                public void stateChanged(ChangeEvent e) {
                }
            });

            applyButton.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent evt) {
                    int x = -1;
                    int y = -1;
                    try {
                        x = Integer.parseInt(xTextField.getText());
                        y = Integer.parseInt(yTextField.getText());
                    }
                    catch(NumberFormatException e) {
                    }

                    logo().file(fileTextField.getText()).location(x, y).position((libvlc_logo_position_e)positionCombo.getSelectedItem()).opacity(opacitySlider.getValue()).enable(enableCheckBox.isSelected()).apply(mediaPlayerComponent.getMediaPlayer());
                }
            });

            enableButton.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    mediaPlayerComponent.getMediaPlayer().enableLogo(true);
                }
            });

            disableButton.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    mediaPlayerComponent.getMediaPlayer().enableLogo(false);
                }
            });

            fileTextField.setText("etc/vlcj-logo.png");
        }
    }

    @SuppressWarnings("serial")
    private class PositionComboModel extends DefaultComboBoxModel {

        private PositionComboModel() {
            super(libvlc_logo_position_e.values());
            insertElementAt(null, 0);
            setSelectedItem(null);
        }
    }
}
TOP

Related Classes of uk.co.caprica.vlcj.test.logo.LogoTest$ControlsPanel

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.