📄 jingleroom.java.svn-base
字号:
/** * $Revision$ * $Date$ * * Copyright (C) 1999-2005 Jive Software. All rights reserved. * This software is the proprietary information of Jive Software. Use is subject to license terms. */package org.jivesoftware.sparkplugin;import org.jivesoftware.smack.XMPPException;import org.jivesoftware.smackx.jingle.JingleSession;import org.jivesoftware.spark.ChatManager;import org.jivesoftware.spark.SparkManager;import org.jivesoftware.spark.component.RolloverButton;import org.jivesoftware.spark.component.tabbedPane.SparkTab;import org.jivesoftware.spark.ui.ChatRoom;import org.jivesoftware.spark.util.log.Log;import java.awt.Color;import java.awt.Component;import java.awt.Dimension;import java.awt.Font;import java.awt.GradientPaint;import java.awt.Graphics;import java.awt.Graphics2D;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 java.awt.image.BufferedImage;import java.text.SimpleDateFormat;import java.util.Date;import javax.swing.BorderFactory;import javax.swing.JLabel;import javax.swing.JPanel;/** * The UI for calls with Roster members. * * @author Derek DeMoro */public class JingleRoom extends JPanel { private JLabel connectedLabel; private String phoneNumber; private JLabel phoneLabel; private PreviousConversationPanel historyPanel; private boolean onHold; private boolean muted; private CallPanelButton muteButton; private RolloverButton hangUpButton; private final SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy h:mm a"); private static String CONNECTED = "Connected"; protected final Color greenColor = new Color(91, 175, 41); protected final Color orangeColor = new Color(229, 139, 11); protected final Color blueColor = new Color(64, 103, 162); protected final Color redColor = new Color(211, 0, 0); private boolean callWasTransferred; private ChatRoom chatRoom; private JingleSession session; private JavaMixer mixer = new JavaMixer(); public JingleRoom(JingleSession session, ChatRoom chatRoom) { this.session = session; this.chatRoom = chatRoom; setLayout(new GridBagLayout()); setBorder(BorderFactory.createLineBorder(Color.lightGray)); // Build Top Layer final JPanel topPanel = buildTopPanel(); add(topPanel, new GridBagConstraints(1, 5, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(2, 2, 2, 2), 0, 0)); // Build Control Panel final JPanel controlPanel = buildControlPanel(); add(controlPanel, new GridBagConstraints(1, 6, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(2, 2, 2, 2), 0, 0)); // Add Previous Conversation historyPanel = new PreviousConversationPanel(); historyPanel.addPreviousConversations(""); // add(historyPanel, new GridBagConstraints(1, 8, 1, 1, 0.0, 1.0, GridBagConstraints.SOUTH, GridBagConstraints.BOTH, new Insets(2, 2, 2, 2), 0, 100)); // Setup default settings setupDefaults(); } /** * Builds the information block. * * @return the UI representing the Information Block. */ private JPanel buildTopPanel() { final JPanel panel = new JPanel(new GridBagLayout()); panel.setOpaque(false); // Add phone label phoneLabel = new JLabel(); phoneLabel.setFont(new Font("Arial", Font.BOLD, 13)); phoneLabel.setForeground(new Color(64, 103, 162)); panel.add(phoneLabel, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, GridBagConstraints.NORTHWEST, GridBagConstraints.NONE, new Insets(0, 2, 2, 2), 0, 0)); // Add Connected Label connectedLabel = new JLabel(CONNECTED); connectedLabel.setFont(new Font("Arial", Font.BOLD, 13)); connectedLabel.setHorizontalTextPosition(JLabel.CENTER); connectedLabel.setHorizontalAlignment(JLabel.CENTER); panel.add(connectedLabel, new GridBagConstraints(0, 1, 2, 1, 1.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(2, 2, 2, 2), 0, 0)); return panel; } /** * Builds the Control Panel. * * @return the control panel. */ private JPanel buildControlPanel() { // Add Control Panel final JPanel mainPanel = new JPanel(new GridBagLayout()); mainPanel.setOpaque(false); // Add Volume Control try { final ControlPanel inputPanel = new ControlPanel(new GridBagLayout()); Component inputComp = mixer.getPrefferedInputVolume(); if (inputComp != null) { final JLabel inputIcon = new JLabel(JinglePhoneRes.getImageIcon("MICROPHONE_IMAGE")); inputPanel.add(inputComp, new GridBagConstraints(0, 0, 1, 1, 0.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.VERTICAL, new Insets(2, 2, 2, 2), 0, 0)); inputPanel.add(inputIcon, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(2, 2, 2, 2), 0, 0)); mainPanel.add(inputPanel, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.2, GridBagConstraints.NORTHWEST, GridBagConstraints.VERTICAL, new Insets(2, 1, 2, 1), 0, 50)); } } catch (Exception e) { Log.error(e); } // Add master volume control. try { final ControlPanel outputPanel = new ControlPanel(new GridBagLayout()); Component outputControl = mixer.getPrefferedMasterVolume(); if (outputControl!=null) { final JLabel outputIcon = new JLabel(JinglePhoneRes.getImageIcon("SPEAKER_IMAGE")); outputPanel.add(outputControl, new GridBagConstraints(0, 0, 1, 1, 0.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.VERTICAL, new Insets(2, 2, 2, 2), 0, 0)); outputPanel.add(outputIcon, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(2, 2, 2, 2), 0, 0)); mainPanel.add(outputPanel, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.2, GridBagConstraints.NORTHWEST, GridBagConstraints.VERTICAL, new Insets(2, 1, 2, 1), 0, 50)); } } catch (Exception e) { Log.error(e); } // Build ControlPanel List muteButton = new CallPanelButton(JinglePhoneRes.getImageIcon("MUTE_IMAGE").getImage(), "Mute"); muteButton.setToolTipText("Mute this call."); // Add Components to Main Panel mainPanel.add(muteButton, new GridBagConstraints(2, 0, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(2, 1, 2, 1), 0, 0)); // Add End Call button hangUpButton = new RolloverButton(" End Call", JinglePhoneRes.getImageIcon("HANG_UP_PHONE_77x24_IMAGE")); hangUpButton.setHorizontalTextPosition(JLabel.CENTER); hangUpButton.setFont(new Font("Dialog", Font.BOLD, 11)); hangUpButton.setForeground(new Color(153, 32, 10)); hangUpButton.setMargin(new Insets(0, 0, 0, 0)); mainPanel.add(hangUpButton, new GridBagConstraints(0, 1, 3, 1, 0.0, 0.8, GridBagConstraints.SOUTH, GridBagConstraints.NONE, new Insets(2, 2, 2, 2), 0, 0)); return mainPanel; } public void setupDefaults() { muteButton.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent mouseEvent) { toggleMute(); } }); hangUpButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent actionEvent) { hangUpButton.setEnabled(false); try { session.terminate(); } catch (XMPPException e) { e.printStackTrace(); } } }); } /** * Called when a new call is established. */ private void callStarted() { // Show History historyPanel.removeAll(); historyPanel.addPreviousConversations(phoneNumber); hangUpButton.setEnabled(true); muteButton.setEnabled(true); setStatus(CONNECTED, false); // Add notification to ChatRoom if one exists. if (chatRoom != null) { final SimpleDateFormat formatter = new SimpleDateFormat("h:mm a"); String time = formatter.format(new Date()); chatRoom.getTranscriptWindow().insertNotificationMessage("Call started at " + time, ChatManager.NOTIFICATION_COLOR); } } /** * Called when the call is ended. This does basic container cleanup. */ public void callEnded() { if (!callWasTransferred) { historyPanel.callEnded(); setStatus("Call Ended", redColor); } hangUpButton.setEnabled(false); hangUpButton.setOpaque(false); muteButton.setEnabled(false); muteButton.setOpaque(false); setStatus("Call Ended", redColor); // Add notification to ChatRoom if one exists. if (chatRoom != null) { final SimpleDateFormat formatter = new SimpleDateFormat("h:mm a"); String time = formatter.format(new Date()); chatRoom.getTranscriptWindow().insertNotificationMessage("Call ended at " + time, ChatManager.NOTIFICATION_COLOR); } } private void setStatus(String status, boolean alert) { if (alert) { connectedLabel.setForeground(orangeColor); } else { connectedLabel.setForeground(greenColor); } connectedLabel.setText(status); } private void setStatus(String status, Color color) { connectedLabel.setForeground(color); connectedLabel.setText(status); } private void toggleMute() { if (muted) { muted = false; muteButton.setToolTipText("Mute"); muteButton.setButtonSelected(false); setStatus(CONNECTED, false); // Change state JingleStateManager.getInstance().addJingleSession(chatRoom, JingleStateManager.JingleRoomState.inJingleCall); } else { muted = true; muteButton.setToolTipText("Unmute"); muteButton.setButtonSelected(true); setStatus("Muted", true); // Change state JingleStateManager.getInstance().addJingleSession(chatRoom, JingleStateManager.JingleRoomState.muted); } session.getJingleMediaSession().setTrasmit(!muted); muteButton.invalidate(); muteButton.validate(); muteButton.repaint(); // Notify state change SparkManager.getChatManager().notifySparkTabHandlers(chatRoom); } public void actionPerformed(ActionEvent e) { } public void paintComponent(Graphics g) { BufferedImage cache = new BufferedImage(2, getHeight(), BufferedImage.TYPE_INT_RGB); Graphics2D g2d = cache.createGraphics(); GradientPaint paint = new GradientPaint(0, 0, new Color(241, 245, 250), 0, getHeight(), new Color(244, 250, 255), true); g2d.setPaint(paint); g2d.fillRect(0, 0, getWidth(), getHeight()); g2d.dispose(); g.drawImage(cache, 0, 0, getWidth(), getHeight(), null); } public Dimension getPreferredSize() { Dimension dim = super.getPreferredSize(); dim.width = 200; return dim; } public SparkTab getSparkTab() { int index = SparkManager.getChatManager().getChatContainer().indexOfComponent(chatRoom); return SparkManager.getChatManager().getChatContainer().getTabAt(index); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -