📄 vojxtadialogview.java
字号:
/* * VoJxtaDialogView.java * * Created on February 26, 2005, 1:56 PM */package net.jxta.myjxta.plugins.vojxta;import net.jxta.logging.Logging;import net.jxta.myjxta.View;import net.jxta.myjxta.dialog.Dialog;import net.jxta.myjxta.dialog.DialogMessage;import net.jxta.myjxta.plugin.PluginView;import net.jxta.myjxta.util.Resources;import javax.swing.*;import javax.swing.border.TitledBorder;import javax.swing.event.ChangeEvent;import javax.swing.event.ChangeListener;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.ItemEvent;import java.awt.event.ItemListener;import java.io.File;import java.util.Dictionary;import java.util.Hashtable;import java.util.ResourceBundle;import java.util.logging.Level;import java.util.logging.Logger;/** * @author Jeff Moore, Ravi * @modified 2005-03-04 jamoore : add call control panel, audio controls * @modified 2005-03-14 jamoore : add config panel * @modified 2005-03-15 jamoore : add stats panel, UI update thread * @modified 2005-03-22 jamoore : add stats per interval * @modified 2005-03-26 jamoore : add resource strings */public final class VoJxtaDialogView extends JPanel implements PluginView { static final Logger LOG = Logger.getLogger(VoJxtaDialogView.class.getName()); private static final ResourceBundle STRINGS = Resources.getStrings(); //hACK! public static final String INITIATED_LOCALLY = "VoJxtaDialogInitiatedLocally"; /** * display strings... replace with resources */ private static final String DISPLAY_SESSION_VOJXTA_DISCONNECTED = STRINGS.getString("label.vojxta.disconnected"); private static final String DISPLAY_SESSION_VOJXTA_DISCONNECTING = STRINGS.getString("label.vojxta.disconnecting"); private static final String DISPLAY_SESSION_VOJXTA_CONNECTED = STRINGS.getString("label.vojxta.connected"); private static final String DISPLAY_SESSION_VOJXTA_CONNECTING = STRINGS.getString("label.vojxta.connecting"); ; private static final String DEFAULT_SESSION_FILE_NAME = "MyJxtaAudioLog.speex"; private static final String DISPLAY_SESSION_VOJXTA_STARTING = STRINGS.getString("label.vojxta.starting"); private static final String DISPLAY_SESSION_VOJXTA_STARTED = STRINGS.getString("label.vojxta.started"); private static final String DISPLAY_SESSION_VOJXTA_ENDING = STRINGS.getString("label.vojxta.ending"); private static final String DISPLAY_SESSION_VOJXTA_ENDED = STRINGS.getString("label.vojxta.ended"); private static final String DISPLAY_SESSION_VOJXTA_INCALL = STRINGS.getString("label.vojxta.incall"); private static final String DISPLAY_SESSION_VOJXTA_HOLDING = STRINGS.getString("label.vojxta.holding"); /** * Panel names for card layout */ private static final String CONFIG_PANEL = "ConfigPanel"; private static final String STATS_PANEL = "StatsPanel"; private static final String CALL_PANEL = "CallPanel"; /** * sleep time for the UI update thread */ private static final int UI_UPDATE_INTERVAL = 1000; /** * sleep time while waiting for dialog pipe to connect */ private static final int CONNECT_SLEEP_TIME = 200; /** * UI constructs */ private JButton startCallButton = null; private JButton endCallButton = null; private JButton configButton = null; private JButton holdCallButton = null; private JButton dismissButton = null; private JLabel messageLabel = null; private JLabel incomingBufferSizeLabel = null; private JLabel incomingBufferCapacityLabel = null; private JLabel outgoingBufferSizeLabel = null; private JLabel outgoingBufferCapacityLabel = null; private JLabel sessionLogFileNameLabel = null; private JLabel statusLabel = null; private JSlider qualitySlider = null; private JSlider speakerVolumeSlider = null; private final JSlider outgoingMessageSizeSlider = null; private JSlider micVolumeSlider = null; private JCheckBox speakerMuteCheckBox = null; private final JCheckBox saveConvoCheckBox = null; private JCheckBox micMuteCheckBox = null; private JLabel bytesReceivedLabel = null; private JLabel messagesReceivedLabel = null; private JLabel bytesSentLabel = null; private final JLabel outgoingMessageSizeSliderValueLabel = null; private JLabel messagesSentLabel = null; private CardLayout cardLayout = null; private JPanel deckPanel = null; private JLabel speakerLabel = null; private JButton statsButton = null; private final JLabel encodedBufferSizeLabel = null; private JLabel audioBlockSizeLabel = null; private JLabel encodedBlockSizeLabel = null; private JLabel callElapsedTimeLabel = null; private JLabel callStartTimeLabel = null; private JLabel callEndTimeLabel = null; private JLabel outgoingMessagesPerSecondLabel = null; private JLabel incomingMessagesPerSecondLabel = null; private JLabel outgoingBytesPerSecondLabel = null; private JLabel incomingBytesPerSecondLabel = null; private JLabel compressionRatioLabel = null; private JLabel qualityLabel = null; private JLabel averageDecodeTimeLabel = null; private JLabel averageEncodeTimeLabel = null; private final JLabel encodedMessageSizeLabel = null; private JLabel pcmBufferSizeLabel = null; private JLabel sourceLineAvailableLabel = null; private JLabel micLabel = null; Insets panelInsets = null; Insets subComponentInsets = null; /** * dilaog on which to receive messages */ private Dialog vojxtaDialog = null; /** * controller */ private View view = null; /** * if we initiated the audio session this static is set to true. at present * it is set in the UI action for vojxta */ private static boolean initiatedLocally = false; /** * Only one audio session at a time may be initiated */ private static boolean inSession = false; /** * This table is used by the encode/decode routines to map quality levels * to ecoded block size in bytes. This will allow us to change the quality * on startup and in the future dynamically while in a call */ Dictionary qualityLabelTable = null; /** * recreating a new dialog message takes too much time. use this indstaed */ private final DialogMessage templateMessage = null; /** * cycles for updates to the UI, used for stats collection */ private UIUpdateThread updateThread = null; /** * protocol handler for jxta audio */ private VoJxtaCallControl callControl = null; /** * Updates the UI with statistical info statistics */ /** statistics */ private long previousIncomingBytesValue = 0; /** * statistics */ private long previousOutgoingBytesValue = 0; /** * statistics */ private long previousIncomingMessagesValue = 0; /** * statistics */ private long previousOutgoingMessagesValue = 0; /** * Creates a new instance of VOJXTADialogPanelent tag denoting */ public VoJxtaDialogView(View p_view, Dialog dialog) { super(); /** lookup table for slider tick labels */ qualityLabelTable = new Hashtable(); qualityLabelTable.put(new Integer(0), new JLabel("Good")); qualityLabelTable.put(new Integer(1), new JLabel("1")); qualityLabelTable.put(new Integer(2), new JLabel("2")); qualityLabelTable.put(new Integer(3), new JLabel("3")); qualityLabelTable.put(new Integer(4), new JLabel("4")); qualityLabelTable.put(new Integer(5), new JLabel("5")); qualityLabelTable.put(new Integer(6), new JLabel("6")); qualityLabelTable.put(new Integer(7), new JLabel("7")); qualityLabelTable.put(new Integer(8), new JLabel("8")); qualityLabelTable.put(new Integer(9), new JLabel("9")); qualityLabelTable.put(new Integer(10), new JLabel("Best")); LOG.setLevel(Level.INFO); panelInsets = new Insets(5, 5, 5, 5); subComponentInsets = new Insets(3, 3, 3, 3); if (Logging.SHOW_INFO && LOG.isLoggable(Level.INFO)) { LOG.info("start vojxtadialogpanel"); } this.view = p_view; this.vojxtaDialog = dialog; this.callControl = new VoJxtaCallControl(this, this.view, dialog, initiatedLocally); if (!this.vojxtaDialog.isConnected()) { if (Logging.SHOW_INFO && LOG.isLoggable(Level.INFO)) { LOG.info("Constructor : VoJxtaDialog not connected"); } localActionDismiss(); } else { UI(); /** UI update thread for stats, call times etc*/ updateThread = new UIUpdateThread(); updateThread.setDaemon(true); setVisible(true); //LOG.setLevel (Level.SEVERE); } } /** * We need to inject who inititated the audio session. This is problematic. * Since there is only one set of hardware (mic, speaker) there can only be * one session running at a time. We can logically separate sessions but * they all must access the same hardware. At the moment the solution is to * keep audio session limited to one. If another session i sactive, by calling * VoXJTADialog.isInSession() then we fail the invite. */ public static void setInitiatedLocally(boolean initiatedLocally) { VoJxtaDialogView.initiatedLocally = initiatedLocally; setInSession(initiatedLocally); } /** * Returns if this audio session was inited locally (true) or initiated from * a remote peer (false) */ protected static boolean isInitiatedLocally() { return initiatedLocally; } /** * Returns if a call is already in session. At the moment only one audio * session per myjxta instance is allowed. */ public static boolean isInSession() { return inSession; } protected static void setInSession(boolean inSession) { VoJxtaDialogView.inSession = inSession; } /** * Switch cardlayout to show a new panel */ protected void localActionShowPanel(final String panelName) { EventQueue.invokeLater(new Runnable() { public void run() { cardLayout.show(deckPanel, panelName); } }); } public void dismiss() { if (Logging.SHOW_INFO && LOG.isLoggable(Level.INFO)) { LOG.info("Dismiss called"); } // any close operations go here this.vojxtaDialog.clear(); if (getCallControl() != null) { this.getCallControl().destroy(); } this.callControl = null; } public Dialog getDialog() { return this.vojxtaDialog; } /** * Signal from the UI denoting a change in the speaker volume sluder */ private void localActionSpeakerGainChanged(float newValue) { getCallControl().adjustSpeakerGainControl(newValue); } /** * UI action denoting config setting have been accepted */ private void localActionApplyConfigSettings() { getCallControl().setLocalVoiceQuality(qualitySlider.getValue()); cardLayout.show(deckPanel, this.CALL_PANEL); } /** * UI action denoting the user adjusted the quality slider */ private void localActionQualityChanged(int quality) { getCallControl().setLocalVoiceQuality(quality);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -