Package org.jdesktop.wonderland.modules.audiomanager.client

Source Code of org.jdesktop.wonderland.modules.audiomanager.client.VuMeterMiniPanel$DelayButton

/**
* Open Wonderland
*
* Copyright (c) 2010 - 2011, Open Wonderland Foundation, All Rights Reserved
*
* Redistributions in source code form must reproduce the above
* copyright and this condition.
*
* The contents of this file are subject to the GNU General Public
* License, Version 2 (the "License"); you may not use this file
* except in compliance with the License. A copy of the License is
* available at http://www.opensource.org/licenses/gpl-license.php.
*
* The Open Wonderland Foundation designates this particular file as
* subject to the "Classpath" exception as provided by the Open Wonderland
* Foundation in the License file that accompanied this code.
*/
package org.jdesktop.wonderland.modules.audiomanager.client;

import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.io.IOException;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.SwingWorker;
import org.jdesktop.wonderland.client.softphone.SoftphoneControlImpl;
import org.jdesktop.wonderland.client.softphone.SoftphoneListener;

/**
*
* @author jkaplan
*/
public class VuMeterMiniPanel extends javax.swing.JPanel
        implements SoftphoneListener {

    private static final Logger LOGGER =
            Logger.getLogger(VuMeterMiniPanel.class.getName());
    private static final ResourceBundle BUNDLE = ResourceBundle.getBundle(
            "org/jdesktop/wonderland/modules/audiomanager/client/resources/Bundle");


    private final AudioManagerClient client;

    private final ImageIcon micMutedIcon;
    private final ImageIcon micUnmutedIcon;
    private final ImageIcon micDisconnectedIcon;

    private boolean connected = false;

    /** Creates new form VuMeterMiniPanel */
    public VuMeterMiniPanel(final AudioManagerClient client) {
        this.client = client;

        initComponents();

        SoftphoneControlImpl sc = SoftphoneControlImpl.getInstance();
        sc.addSoftphoneListener(this);

        micMutedIcon = new ImageIcon(getClass().getResource(
                "/org/jdesktop/wonderland/modules/audiomanager/client/" +
                "resources/UserListMicMuteOn24x24.png"));
        micUnmutedIcon = new ImageIcon(getClass().getResource(
                "/org/jdesktop/wonderland/modules/audiomanager/client/" +
                "resources/UserListMicMuteOff24x24.png"));
        micDisconnectedIcon = new ImageIcon(getClass().getResource(
                "/org/jdesktop/wonderland/modules/audiomanager/client/" +
                "resources/UserListMicMuteOn24x24.png"));

        // set initial state
        try {
            softphoneConnected(sc.isRunning() && sc.isConnected());
            softphoneMuted(sc.isMuted());
        } catch (IOException ioe) {
            LOGGER.log(Level.WARNING, "Error getting softphone state", ioe);
        }


    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        muteButton = new javax.swing.JButton();
        pttButton = new DelayButton();
        panelToggleButton = new javax.swing.JButton();

        setPreferredSize(new java.awt.Dimension(160, 26));
        setLayout(null);

        muteButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/jdesktop/wonderland/modules/audiomanager/client/resources/UserListMicMuteOn24x24.png"))); // NOI18N
        muteButton.setFocusable(false);
        muteButton.setPreferredSize(new java.awt.Dimension(24, 24));
        muteButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                muteButtonActionPerformed(evt);
            }
        });
        add(muteButton);
        muteButton.setBounds(2, 1, 24, 24);

        pttButton.setText("Push to talk");
        pttButton.setPreferredSize(new java.awt.Dimension(119, 24));
        pttButton.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mousePressed(java.awt.event.MouseEvent evt) {
                pttButtonMousePressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                pttButtonMouseReleased(evt);
            }
        });
        pttButton.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                pttButtonKeyPressed(evt);
            }
            public void keyReleased(java.awt.event.KeyEvent evt) {
                pttButtonKeyReleased(evt);
            }
        });
        add(pttButton);
        pttButton.setBounds(28, 0, 108, 24);

        panelToggleButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/jdesktop/wonderland/modules/audiomanager/client/resources/upArrow23x10.png"))); // NOI18N
        panelToggleButton.setToolTipText(BUNDLE.getString("Toggle_full"));
        panelToggleButton.setBorder(null);
        panelToggleButton.setBorderPainted(false);
        panelToggleButton.setMaximumSize(new java.awt.Dimension(63, 14));
        panelToggleButton.setMinimumSize(new java.awt.Dimension(63, 14));
        panelToggleButton.setPreferredSize(new java.awt.Dimension(20, 14));
        panelToggleButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                panelToggleButtonActionPerformed(evt);
            }
        });
        add(panelToggleButton);
        panelToggleButton.setBounds(138, 0, 20, 14);
    }// </editor-fold>//GEN-END:initComponents

    private void panelToggleButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_panelToggleButtonActionPerformed
        client.fullVUMeter();
}//GEN-LAST:event_panelToggleButtonActionPerformed

    private void pttButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_pttButtonMousePressed
        client.setMute(false);
    }//GEN-LAST:event_pttButtonMousePressed

    private void pttButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_pttButtonMouseReleased
        client.setMute(true);
    }//GEN-LAST:event_pttButtonMouseReleased

    private void muteButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_muteButtonActionPerformed
        client.toggleMute();
    }//GEN-LAST:event_muteButtonActionPerformed

    private void pttButtonKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_pttButtonKeyPressed
        if (evt.getKeyCode() == KeyEvent.VK_SPACE) {
            client.setMute(false);
        }
    }//GEN-LAST:event_pttButtonKeyPressed

    private void pttButtonKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_pttButtonKeyReleased
        if (evt.getKeyCode() == KeyEvent.VK_SPACE) {
            client.setMute(true);
        }
    }//GEN-LAST:event_pttButtonKeyReleased

    public void softphoneVisible(boolean isVisible) {
    }

    public void softphoneMuted(boolean muted) {
        if (connected && muted) {
            muteButton.setIcon(micMutedIcon);
            muteButton.setToolTipText(BUNDLE.getString("Audio_muted"));
            pttButton.setEnabled(true);
            pttButton.setText(BUNDLE.getString("Push_to_talk"));
        } else if (connected && !muted) {
            muteButton.setIcon(micUnmutedIcon);
            muteButton.setToolTipText(BUNDLE.getString("Audio_unmuted"));
            pttButton.setEnabled(false);
            pttButton.setText(BUNDLE.getString("Talking"));
        }
    }

    public void softphoneConnected(boolean connected) {
        this.connected = connected;

        if (connected) {
            pttButton.setText(BUNDLE.getString("Push_to_talk"));
            pttButton.setEnabled(true);

            muteButton.setEnabled(true);
            softphoneMuted(client.isMute());
        } else {
            pttButton.setText(BUNDLE.getString("Disconnected"));
            pttButton.setEnabled(false);

            muteButton.setIcon(micDisconnectedIcon);
            muteButton.setToolTipText(BUNDLE.getString("Audio_disconnected"));
            muteButton.setEnabled(false);
        }
    }

    public void softphoneExited() {
        softphoneConnected(false);
    }

    public void softphoneProblem(String problem) {
    }

    public void softphoneTestUDPPort(int port, int duration) {
    }

    public void microphoneGainTooHigh() {
    }

    static class DelayButton extends JButton {
        private final int delay;
        private MouseEvent delayed;

        public DelayButton() {
            this.delay = AudioManagerClient.PTT_DELAY;
        }

        @Override
        protected void processMouseEvent(MouseEvent e) {
            if (e.getID() != MouseEvent.MOUSE_RELEASED ||
                e.getButton() != MouseEvent.BUTTON1)
            {
                super.processMouseEvent(e);
                return;
            }

            delayed = e;

            SwingWorker sw = new SwingWorker() {

                @Override
                protected Object doInBackground() throws Exception {
                    try {
                        Thread.sleep(delay);
                    } catch (InterruptedException ie) {

                    }

                    return null;
                }

                @Override
                protected void done() {
                    if (delayed != null) {
                        superMouseEvent(delayed);
                        delayed = null;
                    }
                }
            };

            sw.execute();
        }

        private void superMouseEvent(MouseEvent e) {
            super.processMouseEvent(e);
        }
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton muteButton;
    private javax.swing.JButton panelToggleButton;
    private javax.swing.JButton pttButton;
    // End of variables declaration//GEN-END:variables
}
TOP

Related Classes of org.jdesktop.wonderland.modules.audiomanager.client.VuMeterMiniPanel$DelayButton

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.