/**
* 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
}