/* * jPhoneMini.java * * Created on Mar 22, 2010, 6:31:03 PM * * @author pquiring@gmail.com * */ import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*; import java.net.*; import java.util.*; import javaforce.*; import javaforce.voip.*; /** jphonelite Panel */ public class PhoneMini extends BasePhone implements MeterController, GUI { public String number = ""; //forced number to always dial /** Creates new form jPhoneMini */ public PhoneMini(WindowController wc, String number) { try { this.number = number; initBasePhone(this, wc); Settings.isApplet = true; initComponents(); init(); //must set focus to something or VK_BACK_SPACE beeps SwingUtilities.invokeLater(new Runnable(){ public void run(){ call.requestFocusInWindow(); //must be called from EDT or when window is visible } }); } catch (Exception e) { JFLog.log("Error:" + e); } } /** 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() { shareDesktopMenu = new javax.swing.JPopupMenu(); shareDesktopViewOnly = new javax.swing.JMenuItem(); shareDesktopRemoteControl = new javax.swing.JMenuItem(); call = new javax.swing.JToggleButton(); end = new javax.swing.JToggleButton(); n1 = new javax.swing.JButton(); n2 = new javax.swing.JButton(); n3 = new javax.swing.JButton(); n4 = new javax.swing.JButton(); n5 = new javax.swing.JButton(); n6 = new javax.swing.JButton(); n7 = new javax.swing.JButton(); n8 = new javax.swing.JButton(); n9 = new javax.swing.JButton(); n0 = new javax.swing.JButton(); nstar = new javax.swing.JButton(); npound = new javax.swing.JButton(); clear = new javax.swing.JButton(); status = new javax.swing.JTextField(); meterRec = new javax.swing.JProgressBar(); meterPlay = new javax.swing.JProgressBar(); mute = new javax.swing.JButton(); headsetPic = new javax.swing.JLabel(); micPic = new javax.swing.JLabel(); backSpace = new javax.swing.JButton(); micScale = new javax.swing.JLabel(); spkScale = new javax.swing.JLabel(); volRec = new javax.swing.JSlider(); volPlay = new javax.swing.JSlider(); spk = new javax.swing.JButton(); labels1 = new javax.swing.JLabel(); spkPic = new javax.swing.JLabel(); mutePic = new javax.swing.JLabel(); labels2 = new javax.swing.JLabel(); shareDesktopViewOnly.setText("Share Desktop (view only)"); shareDesktopMenu.add(shareDesktopViewOnly); shareDesktopRemoteControl.setText("Share Desktop (remote control)"); shareDesktopMenu.add(shareDesktopRemoteControl); setLayout(null); call.setText("Call"); call.setFocusCycleRoot(true); call.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { callActionPerformed(evt); } }); add(call); call.setBounds(10, 40, 70, 50); end.setText("End"); end.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { endActionPerformed(evt); } }); add(end); end.setBounds(210, 40, 70, 50); n1.setText("1"); n1.setMargin(new java.awt.Insets(2, 2, 2, 2)); n1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { n1ActionPerformed(evt); } }); add(n1); n1.setBounds(90, 40, 30, 30); n2.setText("2"); n2.setMargin(new java.awt.Insets(2, 2, 2, 2)); n2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { n2ActionPerformed(evt); } }); add(n2); n2.setBounds(130, 40, 30, 30); n3.setText("3"); n3.setMargin(new java.awt.Insets(2, 2, 2, 2)); n3.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { n3ActionPerformed(evt); } }); add(n3); n3.setBounds(170, 40, 30, 30); n4.setText("4"); n4.setMargin(new java.awt.Insets(2, 2, 2, 2)); n4.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { n4ActionPerformed(evt); } }); add(n4); n4.setBounds(90, 80, 30, 30); n5.setText("5"); n5.setMargin(new java.awt.Insets(2, 2, 2, 2)); n5.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { n5ActionPerformed(evt); } }); add(n5); n5.setBounds(130, 80, 30, 30); n6.setText("6"); n6.setMargin(new java.awt.Insets(2, 2, 2, 2)); n6.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { n6ActionPerformed(evt); } }); add(n6); n6.setBounds(170, 80, 30, 30); n7.setText("7"); n7.setMargin(new java.awt.Insets(2, 2, 2, 2)); n7.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { n7ActionPerformed(evt); } }); add(n7); n7.setBounds(90, 120, 30, 30); n8.setText("8"); n8.setMargin(new java.awt.Insets(2, 2, 2, 2)); n8.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { n8ActionPerformed(evt); } }); add(n8); n8.setBounds(130, 120, 30, 30); n9.setText("9"); n9.setMargin(new java.awt.Insets(2, 2, 2, 2)); n9.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { n9ActionPerformed(evt); } }); add(n9); n9.setBounds(170, 120, 30, 30); n0.setText("0"); n0.setMargin(new java.awt.Insets(2, 2, 2, 2)); n0.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { n0ActionPerformed(evt); } }); add(n0); n0.setBounds(130, 160, 30, 30); nstar.setText("*"); nstar.setMargin(new java.awt.Insets(2, 2, 2, 2)); nstar.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { nstarActionPerformed(evt); } }); add(nstar); nstar.setBounds(90, 160, 30, 30); npound.setText("#"); npound.setMargin(new java.awt.Insets(2, 2, 2, 2)); npound.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { npoundActionPerformed(evt); } }); add(npound); npound.setBounds(170, 160, 30, 30); clear.setText("CLR"); clear.setToolTipText("Clear"); clear.setMargin(new java.awt.Insets(2, 0, 2, 0)); clear.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { clearActionPerformed(evt); } }); add(clear); clear.setBounds(150, 200, 30, 30); status.setEditable(false); add(status); status.setBounds(10, 10, 270, 20); meterRec.setOrientation(1); add(meterRec); meterRec.setBounds(30, 100, 10, 90); meterPlay.setOrientation(1); add(meterPlay); meterPlay.setBounds(270, 100, 10, 90); mute.setToolTipText("Mute"); mute.setMargin(new java.awt.Insets(2, 0, 2, 0)); mute.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { muteActionPerformed(evt); } }); add(mute); mute.setBounds(10, 200, 30, 30); headsetPic.setText("."); add(headsetPic); headsetPic.setBounds(210, 120, 30, 30); micPic.setText("."); add(micPic); micPic.setBounds(50, 120, 30, 30); backSpace.setText("<"); backSpace.setMargin(new java.awt.Insets(2, 2, 2, 2)); backSpace.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { backSpaceActionPerformed(evt); } }); add(backSpace); backSpace.setBounds(110, 200, 30, 30); micScale.setText("."); add(micScale); micScale.setBounds(20, 100, 10, 90); spkScale.setText("."); add(spkScale); spkScale.setBounds(260, 100, 10, 90); volRec.setOrientation(javax.swing.JSlider.VERTICAL); volRec.setValue(75); volRec.addChangeListener(new javax.swing.event.ChangeListener() { public void stateChanged(javax.swing.event.ChangeEvent evt) { volRecStateChanged(evt); } }); add(volRec); volRec.setBounds(0, 100, 20, 90); volPlay.setOrientation(javax.swing.JSlider.VERTICAL); volPlay.setValue(75); volPlay.addChangeListener(new javax.swing.event.ChangeListener() { public void stateChanged(javax.swing.event.ChangeEvent evt) { volPlayStateChanged(evt); } }); add(volPlay); volPlay.setBounds(240, 100, 20, 90); spk.setMargin(new java.awt.Insets(2, 0, 2, 0)); spk.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { spkActionPerformed(evt); } }); add(spk); spk.setBounds(250, 200, 30, 30); add(labels1); labels1.setBounds(10, 70, 270, 10); add(spkPic); spkPic.setBounds(250, 230, 30, 10); add(mutePic); mutePic.setBounds(10, 230, 30, 10); add(labels2); labels2.setBounds(10, 110, 270, 10); }// </editor-fold>//GEN-END:initComponents private void n3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_n3ActionPerformed addDigit('3'); }//GEN-LAST:event_n3ActionPerformed private void n1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_n1ActionPerformed addDigit('1'); }//GEN-LAST:event_n1ActionPerformed private void n2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_n2ActionPerformed addDigit('2'); }//GEN-LAST:event_n2ActionPerformed private void n4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_n4ActionPerformed addDigit('4'); }//GEN-LAST:event_n4ActionPerformed private void n5ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_n5ActionPerformed addDigit('5'); }//GEN-LAST:event_n5ActionPerformed private void n6ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_n6ActionPerformed addDigit('6'); }//GEN-LAST:event_n6ActionPerformed private void n7ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_n7ActionPerformed addDigit('7'); }//GEN-LAST:event_n7ActionPerformed private void n8ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_n8ActionPerformed addDigit('8'); }//GEN-LAST:event_n8ActionPerformed private void n9ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_n9ActionPerformed addDigit('9'); }//GEN-LAST:event_n9ActionPerformed private void nstarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_nstarActionPerformed addDigit('*'); }//GEN-LAST:event_nstarActionPerformed private void n0ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_n0ActionPerformed addDigit('0'); }//GEN-LAST:event_n0ActionPerformed private void npoundActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_npoundActionPerformed addDigit('#'); }//GEN-LAST:event_npoundActionPerformed private void clearActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_clearActionPerformed clear(); }//GEN-LAST:event_clearActionPerformed private void callActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_callActionPerformed selectLine(0); lines[0].dial = number; call(); }//GEN-LAST:event_callActionPerformed private void endActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_endActionPerformed end(); }//GEN-LAST:event_endActionPerformed private void muteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_muteActionPerformed toggleMute(); }//GEN-LAST:event_muteActionPerformed private void backSpaceActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_backSpaceActionPerformed addDigit((char)KeyEvent.VK_BACK_SPACE); }//GEN-LAST:event_backSpaceActionPerformed private void volRecStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_volRecStateChanged setVolRec(); }//GEN-LAST:event_volRecStateChanged private void volPlayStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_volPlayStateChanged setVolPlay(); }//GEN-LAST:event_volPlayStateChanged private void spkActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_spkActionPerformed toggleSpeaker(); }//GEN-LAST:event_spkActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton backSpace; private javax.swing.JToggleButton call; private javax.swing.JButton clear; private javax.swing.JToggleButton end; private javax.swing.JLabel headsetPic; private javax.swing.JLabel labels1; private javax.swing.JLabel labels2; private javax.swing.JProgressBar meterPlay; private javax.swing.JProgressBar meterRec; private javax.swing.JLabel micPic; private javax.swing.JLabel micScale; private javax.swing.JButton mute; private javax.swing.JLabel mutePic; private javax.swing.JButton n0; private javax.swing.JButton n1; private javax.swing.JButton n2; private javax.swing.JButton n3; private javax.swing.JButton n4; private javax.swing.JButton n5; private javax.swing.JButton n6; private javax.swing.JButton n7; private javax.swing.JButton n8; private javax.swing.JButton n9; private javax.swing.JButton npound; private javax.swing.JButton nstar; private javax.swing.JPopupMenu shareDesktopMenu; private javax.swing.JMenuItem shareDesktopRemoteControl; private javax.swing.JMenuItem shareDesktopViewOnly; private javax.swing.JButton spk; private javax.swing.JLabel spkPic; private javax.swing.JLabel spkScale; private javax.swing.JTextField status; private javax.swing.JSlider volPlay; private javax.swing.JSlider volRec; // End of variables declaration//GEN-END:variables /** Init panel variables. */ public void init() { loadIcons(); Settings.loadSettings(); setFonts(); wc.setPanelAlwaysOnTop(Settings.current.alwaysOnTop); JFLog.setEnabled(!Settings.current.disableLogging); JFLog.log("jphonelite/" + version); updateContactList(); updateRecentList(); lines = new PhoneLine[6]; for(int a=0;a<6;a++) { lines[a] = new PhoneLine(); } numButtons = new JButton[12]; numButtons[0] = n1; numButtons[1] = n2; numButtons[2] = n3; numButtons[3] = n4; numButtons[4] = n5; numButtons[5] = n6; numButtons[6] = n7; numButtons[7] = n8; numButtons[8] = n9; numButtons[9] = n0; numButtons[10] = nstar; numButtons[11] = npound; for(int a=0;a<12;a++) { numButtons[a].addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { JButton o = (JButton)e.getSource(); pressDigit(o.getText().charAt(0)); } public void mouseReleased(MouseEvent e) { JButton o = (JButton)e.getSource(); releaseDigit(o.getText().charAt(0)); } }); } //set PICs call.setText(""); call.setIcon(ii[PIC_CALL]); // call.setPressedIcon(ii[PIC_CALL2]); call.setSelectedIcon(ii[PIC_CALL2]); end.setText(""); end.setIcon(ii[PIC_END]); // end.setPressedIcon(ii[PIC_END2]); end.setSelectedIcon(ii[PIC_END2]); micPic.setText(""); micPic.setIcon(ii[PIC_MIC]); headsetPic.setText(""); headsetPic.setIcon(ii[PIC_HEADSET]); spk.setText(""); spk.setIcon(ii[Settings.current.speakerMode ? PIC_GREEN : PIC_GREY]); spkPic.setText(""); spkPic.setIcon(ii[PIC_SPK]); mute.setText(""); mute.setIcon(ii[PIC_GREY]); mutePic.setText(""); mutePic.setIcon(ii[PIC_MUTE]); keepAliveinit(); boolean sound_init = sound.init(lines, this); setScales(); //requires sound.init() new Thread() { public void run() { reRegisterAll(); } }.start(); if (!sound_init) { JOptionPane.showMessageDialog(this, "No compatible sound found", "Warning", JOptionPane.INFORMATION_MESSAGE); } } /** MeterController : Sets the recording level on the display meter. */ public void setMeterRec(int lvl) {meterRec.setValue(lvl);} /** MeterController : Sets the playback level on the display meter. */ public void setMeterPlay(int lvl) {meterPlay.setValue(lvl);} /** MeterController : Sets the speaker mic status (green=true red=false). */ public void setSpeakerStatus(boolean state) { if (!Settings.current.speakerMode) return; //could happen just after turned off spk.setIcon(ii[state ? PIC_GREEN : PIC_RED]); } /** Change volume from slider control. */ public void setVolRec() { sound.setVolRec(volRec.getValue()); } /** Change volume from slider control. */ public void setVolPlay() { sound.setVolPlay(volPlay.getValue()); } public void setScales() { if (sound.isSWVolRec()) { micScale.setText(""); micScale.setIcon(ii[PIC_SWSCALE]); volRec.setValue(75); sound.setVolRec(75); } else { micScale.setText(""); micScale.setIcon(ii[PIC_HWSCALE]); volRec.setValue(100); sound.setVolRec(100); } if (sound.isSWVolPlay()) { spkScale.setText(""); spkScale.setIcon(ii[PIC_SWSCALE]); volPlay.setValue(75); sound.setVolPlay(75); } else { spkScale.setText(""); spkScale.setIcon(ii[PIC_HWSCALE]); volPlay.setValue(100); sound.setVolPlay(100); } } /** Select a new line. */ public void selectLine(int newline) { //make sure line is valid if ((line != -1) && (lines[line].dtmf != 'x')) lines[line].dtmfend = true; line = newline; if (line == -1) { status.setText(""); return; } sound.selectLine(line); updateLine(); } /** Update the number to be dialed, status and buttons for current selected line. */ public void updateLine() { end.setSelected(false); if (lines[line].incall) { call.setSelected(true); } else { call.setSelected(false); } status.setText(lines[line].status); } public void updateCallButton(boolean state) { call.setSelected(state); } public void updateEndButton(boolean state) { end.setSelected(state); } public void endLineUpdate(int xline) { } public void callInviteUpdate() { } /** Sets a contacts icon status when received from a NOTIFY message. */ public void setStatus(String number, String server, String status) {} /** Updates contact list after a change. */ public void updateContactList() {} /** Update recent lists after a change. */ public void updateRecentList() {} public void hld_setIcon(ImageIcon ii) { } public void aa_setIcon(ImageIcon ii) { } public void ac_setIcon(ImageIcon ii) { } public void dnd_setIcon(ImageIcon ii) { } public void cnf_setIcon(ImageIcon ii) { } public void mute_setIcon(ImageIcon ii) { mute.setIcon(ii); } public void spk_setIcon(ImageIcon ii) { spk.setIcon(ii); } public void setFonts() { // JFLog.log("Font name= " + l1.getFont().getName() + ",stype=" + l1.getFont().getStyle() + ",size=" + l1.getFont().getSize() ); //sets font sizes for all buttons int small = 10; int large = 12; //default size if (Settings.current.smallerFont) { small -= 2; large -= 2; } Font smallFont = new java.awt.Font("Dialog", 0, small); Font largeFont = new java.awt.Font("Dialog", 0, large); //these components use three or more letter and require a smaller font mute.setFont(smallFont); clear.setFont(smallFont); } public void onRegister(SIPClient sip) { } public void rtp_jpeg_receive(RTPChannel rtp, byte data[], int pos, int len) {} public void rtp_h263_receive(RTPChannel rtp, byte data[], int pos, int len) {} public void rtp_h263_1998_receive(RTPChannel rtp, byte data[], int pos, int len) {} public void rtp_h263_2000_receive(RTPChannel rtp, byte data[], int pos, int len) {} public void rtp_h264_receive(RTPChannel rtp, byte data[], int pos, int len) {} public void rtp_vp8_receive(RTPChannel rtp, byte data[], int pos, int len) {} public String getLineStatus() { return status.getText(); } public void doConfig() {} }