/**
* $RCSfile: ,v $
* $Revision: $
* $Date: $
*
* Copyright (C) 2004-2011 Jive Software. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jivesoftware.sparkplugin.ui;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JTabbedPane;
import javax.swing.JToggleButton;
import javax.swing.UIManager;
import net.java.sipmack.sip.InterlocutorUI;
import net.java.sipmack.softphone.gui.DefaultGuiManager;
import org.jivesoftware.spark.component.RolloverButton;
import org.jivesoftware.spark.plugin.phone.resource.PhoneRes;
import org.jivesoftware.spark.util.GraphicUtils;
import org.jivesoftware.spark.util.log.Log;
import org.jivesoftware.sparkplugin.ui.components.JavaMixer;
/**
*
*/
public class PhoneControl extends JPanel {
private static final long serialVersionUID = 5275596365479885608L;
private JLabel stateLabel = new JLabel(PhoneRes.getIString("phone.connected")+":");
private JLabel callerIDLabel = new JLabel();
private JLabel phoneNumberLabel = new JLabel();
final private InterlocutorUI interlocutorUI;
private RolloverButton chatButton;
private JToggleButton muteButton;
private RolloverButton transferButton;
private RolloverButton endCallButton;
private RolloverButton dialButton;
private RolloverButton speakerButton;
private RolloverButton micButton;
private JavaMixer javaMixer = new JavaMixer();
//private PhonePad phonePad = new PhonePad();
public PhoneControl(final InterlocutorUI interlocutorUI, final DefaultGuiManager defaultGuiManager) {
setLayout(new GridBagLayout());
this.interlocutorUI = interlocutorUI;
callerIDLabel.setText(interlocutorUI.getName());
phoneNumberLabel.setText(interlocutorUI.getAddress());
chatButton = new RolloverButton(PhoneRes.getImageIcon("CHAT_IMAGE"));
muteButton = new JToggleButton(PhoneRes.getImageIcon("ON_HOLD_IMAGE"));
transferButton = new RolloverButton(PhoneRes.getImageIcon("TRANSFER_IMAGE"));
endCallButton = new RolloverButton(PhoneRes.getImageIcon("HANG_UP_PHONE_IMAGE"));
dialButton = new RolloverButton(PhoneRes.getImageIcon("TELEPHONE_IMAGE"));
speakerButton = new RolloverButton(PhoneRes.getImageIcon("VOLUME_IMAGE"));
micButton = new RolloverButton(PhoneRes.getImageIcon("MICROPHONE_IMAGE"));
add(stateLabel, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(1, 1, 1, 1), 0, 0));
add(callerIDLabel, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(1, 1, 1, 1), 0, 0));
add(dialButton, new GridBagConstraints(2, 0, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(1, 1, 1, 1), 0, 0));
add(phoneNumberLabel, new GridBagConstraints(1, 1, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(1, 1, 1, 1), 0, 0));
// Add Button panel
final JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
buttonPanel.add(chatButton);
buttonPanel.add(muteButton);
buttonPanel.add(transferButton);
buttonPanel.add(endCallButton);
buttonPanel.add(micButton);
buttonPanel.add(speakerButton);
add(buttonPanel, new GridBagConstraints(0, 2, 3, 1, 1.0, 0.0, GridBagConstraints.SOUTH, GridBagConstraints.HORIZONTAL, new Insets(1, 1, 1, 1), 0, 0));
add(javaMixer.getPrefferedMasterVolume(), new GridBagConstraints(3, 0, 1, 3, 0.0, 0.0, GridBagConstraints.EAST, GridBagConstraints.VERTICAL, new Insets(1, 1, 1, 1), 0, 0));
add(javaMixer.getPrefferedInputVolume(), new GridBagConstraints(4, 0, 1, 3, 0.0, 0.0, GridBagConstraints.EAST, GridBagConstraints.VERTICAL, new Insets(1, 1, 1, 1), 0, 0));
dialButton.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent mouseEvent) {
// phonePad.showDialpad(null, dialButton, mouseEvent);
}
});
speakerButton.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent mouseEvent) {
final JPopupMenu menu = new JPopupMenu();
menu.add(javaMixer.getPrefferedMasterVolume());
menu.show(speakerButton, mouseEvent.getX(), mouseEvent.getY());
}
});
endCallButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
defaultGuiManager.hangup(interlocutorUI);
}
});
muteButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
defaultGuiManager.mute(interlocutorUI,!muteButton.isSelected());
}
});
setOpaque(false);
buttonPanel.setOpaque(false);
}
public InterlocutorUI getInterlocutorUI() {
return interlocutorUI;
}
public static void main(String args[]) {
try {
String classname = UIManager.getSystemLookAndFeelClassName();
if (classname.indexOf("Windows") != -1) {
UIManager.setLookAndFeel(new com.jgoodies.looks.windows.WindowsLookAndFeel());
} else if (classname.indexOf("mac") != -1 || classname.indexOf("apple") != -1) {
UIManager.setLookAndFeel(classname);
} else {
UIManager.setLookAndFeel(new com.jgoodies.looks.plastic.Plastic3DLookAndFeel());
}
}
catch (Exception e) {
Log.error(e);
}
final JFrame f = new JFrame();
JTabbedPane pane = new JTabbedPane(JTabbedPane.LEFT);
//pane.addTab("Matt Tucker", PhoneRes.getImageIcon("ON_HOLD_IMAGE"), new PhoneControl("Matt Tucker", "503-972-6134"));
//pane.addTab("Derek DeMoro", PhoneRes.getImageIcon("ON_PHONE_IMAGE"), new PhoneControl("Derek DeMoro", "503-972-6133"));
//pane.addTab("Gato", PhoneRes.getImageIcon("ON_HOLD_IMAGE"), new PhoneControl("Gaston Dombiak", "503-976-LOVE"));
f.getContentPane().add(pane);
f.pack();
f.setSize(400, 400);
GraphicUtils.centerWindowOnScreen(f);
f.setVisible(true);
}
public Dimension getPreferredSize() {
final Dimension dim = super.getPreferredSize();
dim.height = 75;
return dim;
}
}