add src files decompiled via jad
[rsa2client.git] / src / mcsClient / McsToolBar.java
diff --git a/src/mcsClient/McsToolBar.java b/src/mcsClient/McsToolBar.java
new file mode 100644 (file)
index 0000000..ed6c790
--- /dev/null
@@ -0,0 +1,585 @@
+// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
+// Jad home page: http://www.kpdus.com/jad.html
+// Decompiler options: packimports(3) fieldsfirst nonlb space 
+
+package mcsClient;
+
+import java.awt.*;
+import java.awt.event.*;
+import java.io.PrintStream;
+import java.util.*;
+import javax.swing.*;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+// Referenced classes of package mcsClient:
+//            KeyButton, Help, Options, KeyData, 
+//            KeyButtonListener, LiveVideoPanel, DatagramReader, McsKeyAdapter, 
+//            ComboKeyArray
+
+public final class McsToolBar extends JToolBar
+    implements KeyButtonListener {
+
+    public static final int BITRATES[] = {
+        0, 10240, 20480, 30720, 40960, 51200, 0x19000, 0x25800, 0x32000, 0x3e800, 
+        0x4b000, 0x96000, 0xe1000, 0x12c000, 0x177000, 0x2ee000, 0x4e2000
+    };
+    private McsKeyAdapter keyAdapter;
+    private LiveVideoPanel videoPanel;
+    private DatagramReader datagramReader;
+    private JSlider slider;
+    private int lastBitrate;
+    private Help sliderHelp;
+    private JLabel configLink;
+    private Options options;
+    private KeyButton japan1Button;
+    private KeyButton japan1aButton;
+    private KeyButton japan131Button;
+    private KeyButton japan132Button;
+    private KeyButton japan132aButton;
+    private KeyButton japan132sButton;
+    private KeyButton japan133Button;
+    private KeyButton japan133aButton;
+    private KeyButton japan133sButton;
+    private KeyButton japan30Button;
+    private KeyButton japan30aButton;
+    private KeyButton tildeButton;
+    private KeyButton circumflexButton;
+    private KeyButton diaeresisButton;
+    private KeyButton graveButton;
+    private KeyButton acuteButton;
+    private KeyButton rightSquareBracketButton;
+    private KeyButton leftSquareBracketButton;
+    private KeyButton rightCurlyBracketButton;
+    private KeyButton leftCurlyBracketButton;
+    private KeyButton backslashButton;
+    private KeyButton atButton;
+    private static final String SLIDER_HELP_DATA[] = {
+        "The Video Speed selector is used to limit the bandwidth that is devoted to the\n", "Remote Console display on your computer.  Reducing the Video Speed can\n", "improve the rate at which the Remote Console display is refreshed by limiting\n", "the video data that must be displayed.  You can reduce, or even stop, video\n", "data to allow more bandwidth for Remote Disk, if desired.  Move the slider\n", "left or right until you find the bandwidth that achieves the best results."
+    };
+
+    public McsToolBar(McsKeyAdapter mcskeyadapter, LiveVideoPanel livevideopanel) {
+        slider = new JSlider(0, 16);
+        lastBitrate = 16;
+        configLink = new JLabel("<html><u>Preferences</u></html>");
+        keyAdapter = mcskeyadapter;
+        videoPanel = livevideopanel;
+        japan1Button = new KeyButton(Toolkit.getDefaultToolkit().getImage(getClass().getResource("japan1.gif")));
+        japan1Button.setToolTipText("Send Hankaku/Zenkaku to the server");
+        japan1Button.addKeyButtonListener(this);
+        japan1aButton = new KeyButton(Toolkit.getDefaultToolkit().getImage(getClass().getResource("japan1a.gif")));
+        japan1aButton.setToolTipText("Send Kanji to the server");
+        japan1aButton.addKeyButtonListener(this);
+        japan131Button = new KeyButton(Toolkit.getDefaultToolkit().getImage(getClass().getResource("japan131.gif")));
+        japan131Button.setToolTipText("Send Muhehkan to the server");
+        japan131Button.addKeyButtonListener(this);
+        japan132Button = new KeyButton(Toolkit.getDefaultToolkit().getImage(getClass().getResource("japan132.gif")));
+        japan132Button.setToolTipText("Send Henkan to the server");
+        japan132Button.addKeyButtonListener(this);
+        japan132aButton = new KeyButton(Toolkit.getDefaultToolkit().getImage(getClass().getResource("japan132a.gif")));
+        japan132aButton.setToolTipText("Send Zenkouho to the server");
+        japan132aButton.addKeyButtonListener(this);
+        japan132sButton = new KeyButton(Toolkit.getDefaultToolkit().getImage(getClass().getResource("japan132s.gif")));
+        japan132sButton.setToolTipText("Send Zenkouho to the server");
+        japan132sButton.addKeyButtonListener(this);
+        japan133Button = new KeyButton(Toolkit.getDefaultToolkit().getImage(getClass().getResource("japan133.gif")));
+        japan133Button.setToolTipText("Send Hiragana to the server");
+        japan133Button.addKeyButtonListener(this);
+        japan133aButton = new KeyButton(Toolkit.getDefaultToolkit().getImage(getClass().getResource("japan133a.gif")));
+        japan133aButton.setToolTipText("Send Romanji to the server");
+        japan133aButton.addKeyButtonListener(this);
+        japan133sButton = new KeyButton(Toolkit.getDefaultToolkit().getImage(getClass().getResource("japan133s.gif")));
+        japan133sButton.setToolTipText("Send Katakana to the server");
+        japan133sButton.addKeyButtonListener(this);
+        japan30Button = new KeyButton(Toolkit.getDefaultToolkit().getImage(getClass().getResource("japan30.gif")));
+        japan30Button.setToolTipText("Send Eisuu to the server");
+        japan30Button.addKeyButtonListener(this);
+        japan30aButton = new KeyButton(Toolkit.getDefaultToolkit().getImage(getClass().getResource("japan30a.gif")));
+        japan30aButton.setToolTipText("Send Kanji Bangou to the server");
+        japan30aButton.addKeyButtonListener(this);
+        tildeButton = new KeyButton(Toolkit.getDefaultToolkit().getImage(getClass().getResource("tilde.gif")));
+        tildeButton.setToolTipText("Send tilde modifier to the server");
+        tildeButton.addKeyButtonListener(this);
+        circumflexButton = new KeyButton(Toolkit.getDefaultToolkit().getImage(getClass().getResource("circumflex.gif")));
+        circumflexButton.setToolTipText("Send circumflex modifier to the server");
+        circumflexButton.addKeyButtonListener(this);
+        diaeresisButton = new KeyButton(Toolkit.getDefaultToolkit().getImage(getClass().getResource("diaeresis.gif")));
+        diaeresisButton.setToolTipText("Send diaeresis modifier to the server");
+        diaeresisButton.addKeyButtonListener(this);
+        acuteButton = new KeyButton(Toolkit.getDefaultToolkit().getImage(getClass().getResource("acute.gif")));
+        acuteButton.setToolTipText("Send acute modifier to the server");
+        acuteButton.addKeyButtonListener(this);
+        graveButton = new KeyButton(Toolkit.getDefaultToolkit().getImage(getClass().getResource("grave.gif")));
+        graveButton.setToolTipText("Send grave modifier to the server");
+        graveButton.addKeyButtonListener(this);
+        leftSquareBracketButton = new KeyButton(Toolkit.getDefaultToolkit().getImage(getClass().getResource("leftsquarebracket.gif")));
+        leftSquareBracketButton.setToolTipText("Send left square bracket to the server");
+        leftSquareBracketButton.addKeyButtonListener(this);
+        rightSquareBracketButton = new KeyButton(Toolkit.getDefaultToolkit().getImage(getClass().getResource("rightsquarebracket.gif")));
+        rightSquareBracketButton.setToolTipText("Send right square bracket to the server");
+        rightSquareBracketButton.addKeyButtonListener(this);
+        leftCurlyBracketButton = new KeyButton(Toolkit.getDefaultToolkit().getImage(getClass().getResource("leftbracket.gif")));
+        leftCurlyBracketButton.setToolTipText("Send left curly bracket to the server");
+        leftCurlyBracketButton.addKeyButtonListener(this);
+        rightCurlyBracketButton = new KeyButton(Toolkit.getDefaultToolkit().getImage(getClass().getResource("rightbracket.gif")));
+        rightCurlyBracketButton.setToolTipText("Send right curly bracket to the server");
+        rightCurlyBracketButton.addKeyButtonListener(this);
+        backslashButton = new KeyButton(Toolkit.getDefaultToolkit().getImage(getClass().getResource("backslash.gif")));
+        backslashButton.setToolTipText("Send backslash to the server");
+        backslashButton.addKeyButtonListener(this);
+        atButton = new KeyButton(Toolkit.getDefaultToolkit().getImage(getClass().getResource("atsign.gif")));
+        atButton.setToolTipText("Send at symbol to the server");
+        atButton.addKeyButtonListener(this);
+        setPreferredSize(new Dimension(95, 350));
+        setLayout(new FlowLayout(0, 2, 2));
+    }
+
+    public McsToolBar(String s, McsKeyAdapter mcskeyadapter, LiveVideoPanel livevideopanel, DatagramReader datagramreader, McsToolBar mcstoolbar) {
+        slider = new JSlider(0, 16);
+        lastBitrate = 16;
+        configLink = new JLabel("<html><u>Preferences</u></html>");
+        keyAdapter = mcskeyadapter;
+        videoPanel = livevideopanel;
+        datagramReader = datagramreader;
+        setLayout(new FlowLayout(0, 3, 3));
+        slider.setToolTipText("Video speed selector");
+        slider.setBackground(getBackground());
+        slider.setPreferredSize(new Dimension(260, 40));
+        slider.setPaintTicks(true);
+        slider.setMajorTickSpacing(2);
+        slider.setMinorTickSpacing(1);
+        slider.setSnapToTicks(true);
+        slider.setPaintLabels(true);
+        Hashtable hashtable = new Hashtable();
+        hashtable.put(new Integer(0), new JLabel("0"));
+        hashtable.put(new Integer(2), new JLabel("20k"));
+        hashtable.put(new Integer(4), new JLabel("40k"));
+        hashtable.put(new Integer(6), new JLabel("100k"));
+        hashtable.put(new Integer(8), new JLabel("200k"));
+        hashtable.put(new Integer(10), new JLabel("300k"));
+        hashtable.put(new Integer(12), new JLabel("900k"));
+        hashtable.put(new Integer(14), new JLabel("1.5M"));
+        hashtable.put(new Integer(16), new JLabel("5M"));
+        slider.setLabelTable(hashtable);
+        slider.addChangeListener(new ChangeListener() {
+
+            public void stateChanged(ChangeEvent changeevent) {
+                JSlider jslider = (JSlider)changeevent.getSource();
+                int j = McsToolBar.BITRATES[jslider.getValue()];
+                if (lastBitrate == 0 && j > 0)
+                    videoPanel.resumeVideo();
+                else
+                if (lastBitrate > 0 && j == 0)
+                    videoPanel.pauseVideo();
+                datagramReader.setInitialBitRate(j);
+                lastBitrate = j;
+            }
+
+        }
+);
+        sliderHelp = new Help("Video Speed Help", Toolkit.getDefaultToolkit().getImage(getClass().getResource("help.gif")), SLIDER_HELP_DATA.length);
+        sliderHelp.setToolTipText("Video Speed Help");
+        for (int i = 0; i < SLIDER_HELP_DATA.length; i++)
+            sliderHelp.append(SLIDER_HELP_DATA[i]);
+
+        options = new Options(s, mcskeyadapter, datagramreader, this, mcstoolbar);
+        options.hide();
+        livevideopanel.addSliderListener(this);
+        datagramreader.addSliderListener(this);
+    }
+
+    public void keyPressed(MouseEvent mouseevent) {
+        if (mouseevent.getSource() == japan1Button)
+            keyAdapter.sendKeyEvent(10, 53, 1);
+        else
+        if (mouseevent.getSource() == japan1aButton) {
+            keyAdapter.sendKeyEvent(10, 226, 1);
+            keyAdapter.sendKeyEvent(10, 53, 1);
+        } else
+        if (mouseevent.getSource() == japan30Button)
+            keyAdapter.sendKeyEvent(10, 57, 1);
+        else
+        if (mouseevent.getSource() == japan30aButton) {
+            keyAdapter.sendKeyEvent(10, 226, 1);
+            keyAdapter.sendKeyEvent(10, 57, 1);
+        } else
+        if (mouseevent.getSource() == japan131Button)
+            keyAdapter.sendKeyEvent(10, 139, 1);
+        else
+        if (mouseevent.getSource() == japan132Button)
+            keyAdapter.sendKeyEvent(10, 138, 1);
+        else
+        if (mouseevent.getSource() == japan132aButton) {
+            keyAdapter.sendKeyEvent(10, 226, 1);
+            keyAdapter.sendKeyEvent(10, 138, 1);
+        } else
+        if (mouseevent.getSource() == japan132sButton) {
+            keyAdapter.sendKeyEvent(10, 225, 1);
+            keyAdapter.sendKeyEvent(10, 138, 1);
+        } else
+        if (mouseevent.getSource() == japan133Button)
+            keyAdapter.sendKeyEvent(10, 136, 1);
+        else
+        if (mouseevent.getSource() == japan133aButton) {
+            keyAdapter.sendKeyEvent(10, 226, 1);
+            keyAdapter.sendKeyEvent(10, 136, 1);
+        } else
+        if (mouseevent.getSource() == japan133sButton) {
+            keyAdapter.sendKeyEvent(10, 225, 1);
+            keyAdapter.sendKeyEvent(10, 136, 1);
+        } else
+        if (mouseevent.getSource() == tildeButton) {
+            int i = keyAdapter.getButtonModifierCode(1);
+            if (i != 0)
+                keyAdapter.sendKeyEvent(10, i, 1);
+            keyAdapter.sendKeyEvent(10, keyAdapter.getButtonCode(1), 1);
+        } else
+        if (mouseevent.getSource() == circumflexButton) {
+            int j = keyAdapter.getButtonModifierCode(2);
+            if (j != 0)
+                keyAdapter.sendKeyEvent(10, j, 1);
+            keyAdapter.sendKeyEvent(10, keyAdapter.getButtonCode(2), 1);
+        } else
+        if (mouseevent.getSource() == diaeresisButton) {
+            int k = keyAdapter.getButtonModifierCode(3);
+            if (k != 0)
+                keyAdapter.sendKeyEvent(10, k, 1);
+            keyAdapter.sendKeyEvent(10, keyAdapter.getButtonCode(3), 1);
+        } else
+        if (mouseevent.getSource() == graveButton) {
+            int l = keyAdapter.getButtonModifierCode(4);
+            if (l != 0)
+                keyAdapter.sendKeyEvent(10, l, 1);
+            keyAdapter.sendKeyEvent(10, keyAdapter.getButtonCode(4), 1);
+        } else
+        if (mouseevent.getSource() == acuteButton) {
+            int i1 = keyAdapter.getButtonModifierCode(5);
+            if (i1 != 0)
+                keyAdapter.sendKeyEvent(10, i1, 1);
+            keyAdapter.sendKeyEvent(10, keyAdapter.getButtonCode(5), 1);
+        } else
+        if (mouseevent.getSource() == leftSquareBracketButton) {
+            int j1 = keyAdapter.getButtonModifierCode(6);
+            if (j1 != 0)
+                keyAdapter.sendKeyEvent(10, j1, 1);
+            keyAdapter.sendKeyEvent(10, keyAdapter.getButtonCode(6), 1);
+        } else
+        if (mouseevent.getSource() == rightSquareBracketButton) {
+            int k1 = keyAdapter.getButtonModifierCode(7);
+            if (k1 != 0)
+                keyAdapter.sendKeyEvent(10, k1, 1);
+            keyAdapter.sendKeyEvent(10, keyAdapter.getButtonCode(7), 1);
+        } else
+        if (mouseevent.getSource() == leftCurlyBracketButton) {
+            int l1 = keyAdapter.getButtonModifierCode(8);
+            if (l1 != 0)
+                keyAdapter.sendKeyEvent(10, l1, 1);
+            keyAdapter.sendKeyEvent(10, keyAdapter.getButtonCode(8), 1);
+        } else
+        if (mouseevent.getSource() == rightCurlyBracketButton) {
+            int i2 = keyAdapter.getButtonModifierCode(9);
+            if (i2 != 0)
+                keyAdapter.sendKeyEvent(10, i2, 1);
+            keyAdapter.sendKeyEvent(10, keyAdapter.getButtonCode(9), 1);
+        } else
+        if (mouseevent.getSource() == backslashButton) {
+            int j2 = keyAdapter.getButtonModifierCode(10);
+            if (j2 != 0)
+                keyAdapter.sendKeyEvent(10, j2, 1);
+            keyAdapter.sendKeyEvent(10, keyAdapter.getButtonCode(10), 1);
+        } else
+        if (mouseevent.getSource() == atButton) {
+            int k2 = keyAdapter.getButtonModifierCode(11);
+            if (k2 != 0)
+                keyAdapter.sendKeyEvent(10, k2, 1);
+            keyAdapter.sendKeyEvent(10, keyAdapter.getButtonCode(11), 1);
+        }
+    }
+
+    public void keyReleased(MouseEvent mouseevent) {
+        if (mouseevent.getSource() == japan1Button)
+            keyAdapter.sendKeyEvent(11, 53, 1);
+        else
+        if (mouseevent.getSource() == japan1aButton) {
+            keyAdapter.sendKeyEvent(11, 53, 1);
+            keyAdapter.sendKeyEvent(11, 226, 1);
+        } else
+        if (mouseevent.getSource() == japan30Button)
+            keyAdapter.sendKeyEvent(11, 57, 1);
+        else
+        if (mouseevent.getSource() == japan30aButton) {
+            keyAdapter.sendKeyEvent(11, 57, 1);
+            keyAdapter.sendKeyEvent(11, 226, 1);
+        } else
+        if (mouseevent.getSource() == japan131Button)
+            keyAdapter.sendKeyEvent(11, 139, 1);
+        else
+        if (mouseevent.getSource() == japan132Button)
+            keyAdapter.sendKeyEvent(11, 138, 1);
+        else
+        if (mouseevent.getSource() == japan132aButton) {
+            keyAdapter.sendKeyEvent(11, 138, 1);
+            keyAdapter.sendKeyEvent(11, 226, 1);
+        } else
+        if (mouseevent.getSource() == japan132sButton) {
+            keyAdapter.sendKeyEvent(11, 138, 1);
+            keyAdapter.sendKeyEvent(11, 225, 1);
+        } else
+        if (mouseevent.getSource() == japan133Button)
+            keyAdapter.sendKeyEvent(11, 136, 1);
+        else
+        if (mouseevent.getSource() == japan133aButton) {
+            keyAdapter.sendKeyEvent(11, 136, 1);
+            keyAdapter.sendKeyEvent(11, 226, 1);
+        } else
+        if (mouseevent.getSource() == japan133sButton) {
+            keyAdapter.sendKeyEvent(11, 136, 1);
+            keyAdapter.sendKeyEvent(11, 225, 1);
+        } else
+        if (mouseevent.getSource() == tildeButton) {
+            keyAdapter.sendKeyEvent(11, keyAdapter.getButtonCode(1), 1);
+            int i = keyAdapter.getButtonModifierCode(1);
+            if (i != 0)
+                keyAdapter.sendKeyEvent(11, i, 1);
+        } else
+        if (mouseevent.getSource() == circumflexButton) {
+            keyAdapter.sendKeyEvent(11, keyAdapter.getButtonCode(2), 1);
+            int j = keyAdapter.getButtonModifierCode(2);
+            if (j != 0)
+                keyAdapter.sendKeyEvent(11, j, 1);
+        } else
+        if (mouseevent.getSource() == diaeresisButton) {
+            keyAdapter.sendKeyEvent(11, keyAdapter.getButtonCode(3), 1);
+            int k = keyAdapter.getButtonModifierCode(3);
+            if (k != 0)
+                keyAdapter.sendKeyEvent(11, k, 1);
+        } else
+        if (mouseevent.getSource() == graveButton) {
+            keyAdapter.sendKeyEvent(11, keyAdapter.getButtonCode(4), 1);
+            int l = keyAdapter.getButtonModifierCode(4);
+            if (l != 0)
+                keyAdapter.sendKeyEvent(11, l, 1);
+        } else
+        if (mouseevent.getSource() == acuteButton) {
+            keyAdapter.sendKeyEvent(11, keyAdapter.getButtonCode(5), 1);
+            int i1 = keyAdapter.getButtonModifierCode(5);
+            if (i1 != 0)
+                keyAdapter.sendKeyEvent(11, i1, 1);
+        } else
+        if (mouseevent.getSource() == leftSquareBracketButton) {
+            keyAdapter.sendKeyEvent(11, keyAdapter.getButtonCode(6), 1);
+            int j1 = keyAdapter.getButtonModifierCode(6);
+            if (j1 != 0)
+                keyAdapter.sendKeyEvent(11, j1, 1);
+        } else
+        if (mouseevent.getSource() == rightSquareBracketButton) {
+            keyAdapter.sendKeyEvent(11, keyAdapter.getButtonCode(7), 1);
+            int k1 = keyAdapter.getButtonModifierCode(7);
+            if (k1 != 0)
+                keyAdapter.sendKeyEvent(11, k1, 1);
+        } else
+        if (mouseevent.getSource() == leftCurlyBracketButton) {
+            keyAdapter.sendKeyEvent(11, keyAdapter.getButtonCode(8), 1);
+            int l1 = keyAdapter.getButtonModifierCode(8);
+            if (l1 != 0)
+                keyAdapter.sendKeyEvent(11, l1, 1);
+        } else
+        if (mouseevent.getSource() == rightCurlyBracketButton) {
+            keyAdapter.sendKeyEvent(11, keyAdapter.getButtonCode(9), 1);
+            int i2 = keyAdapter.getButtonModifierCode(9);
+            if (i2 != 0)
+                keyAdapter.sendKeyEvent(11, i2, 1);
+        } else
+        if (mouseevent.getSource() == backslashButton) {
+            keyAdapter.sendKeyEvent(11, keyAdapter.getButtonCode(10), 1);
+            int j2 = keyAdapter.getButtonModifierCode(10);
+            if (j2 != 0)
+                keyAdapter.sendKeyEvent(11, j2, 1);
+        } else
+        if (mouseevent.getSource() == atButton) {
+            keyAdapter.sendKeyEvent(11, keyAdapter.getButtonCode(11), 1);
+            int k2 = keyAdapter.getButtonModifierCode(11);
+            if (k2 != 0)
+                keyAdapter.sendKeyEvent(11, k2, 1);
+        }
+        videoPanel.requestFocusInWindow();
+        videoPanel.requestFocus();
+    }
+
+    public void populateCountryKeyBar(int i) {
+        removeAll();
+        setVisible(false);
+        switch (i) {
+        case 5: // '\005'
+            add(japan1Button);
+            add(japan1aButton);
+            add(japan30Button);
+            add(japan30aButton);
+            add(japan131Button);
+            add(japan132Button);
+            add(japan132sButton);
+            add(japan132aButton);
+            add(japan133Button);
+            add(japan133sButton);
+            add(japan133aButton);
+            setVisible(true);
+            break;
+
+        case 6: // '\006'
+            add(circumflexButton);
+            add(diaeresisButton);
+            add(graveButton);
+            add(acuteButton);
+            add(tildeButton);
+            add(leftSquareBracketButton);
+            add(rightSquareBracketButton);
+            add(leftCurlyBracketButton);
+            add(rightCurlyBracketButton);
+            add(backslashButton);
+            setVisible(true);
+            break;
+
+        case 4: // '\004'
+            add(graveButton);
+            add(tildeButton);
+            add(atButton);
+            setVisible(true);
+            break;
+
+        case 3: // '\003'
+            add(circumflexButton);
+            add(graveButton);
+            add(acuteButton);
+            add(backslashButton);
+            setVisible(true);
+            break;
+
+        case 2: // '\002'
+            add(circumflexButton);
+            add(diaeresisButton);
+            add(tildeButton);
+            add(graveButton);
+            setVisible(true);
+            break;
+
+        case 1: // '\001'
+            add(circumflexButton);
+            add(diaeresisButton);
+            add(tildeButton);
+            add(graveButton);
+            add(acuteButton);
+            setVisible(true);
+            break;
+        }
+        validate();
+    }
+
+    public void buildCustomizedButtonBar(ComboKeyArray combokeyarray) {
+        removeAll();
+        add(new JLabel("Video Speed (bps)"));
+        add(slider);
+        add(sliderHelp);
+        add(new javax.swing.JToolBar.Separator());
+        for (int i = 0; i < 12; i++) {
+            final ArrayList keyData = combokeyarray.getKeysForButton(i);
+            if (keyData != null) {
+                StringBuffer stringbuffer = new StringBuffer();
+                for (Iterator iterator = keyData.iterator(); iterator.hasNext();) {
+                    KeyData keydata = (KeyData)iterator.next();
+                    String s = keydata.getKeyName();
+                    if (s.endsWith(")"))
+                        s = s.substring(0, s.indexOf('(') - 1);
+                    stringbuffer.append(s);
+                    if (iterator.hasNext())
+                        stringbuffer.append("+");
+                }
+
+                JButton jbutton = new JButton(stringbuffer.toString());
+                jbutton.addActionListener(new ActionListener() {
+
+                    public void actionPerformed(ActionEvent actionevent) {
+                        for (int j = 0; j < keyData.size(); j++) {
+                            KeyData keydata1 = (KeyData)keyData.get(j);
+                            if (keydata1 != null)
+                                keyAdapter.sendKeyEvent(10, keydata1.getUsageCode(), 1);
+                        }
+
+                        for (int k = keyData.size() - 1; k >= 0; k--) {
+                            KeyData keydata2 = (KeyData)keyData.get(k);
+                            if (keydata2 != null)
+                                keyAdapter.sendKeyEvent(11, keydata2.getUsageCode(), 1);
+                        }
+
+                    }
+
+                }
+);
+                add(jbutton);
+            }
+        }
+
+        add(new javax.swing.JToolBar.Separator());
+        configLink.setForeground(Color.BLUE);
+        configLink.addMouseListener(new MouseListener() {
+
+            public void mouseClicked(MouseEvent mouseevent) {
+                options.show();
+            }
+
+            public void mousePressed(MouseEvent mouseevent) {
+                configLink.setForeground(Color.LIGHT_GRAY);
+            }
+
+            public void mouseReleased(MouseEvent mouseevent) {
+                configLink.setForeground(Color.GRAY);
+            }
+
+            public void mouseEntered(MouseEvent mouseevent) {
+                configLink.setForeground(Color.GRAY);
+            }
+
+            public void mouseExited(MouseEvent mouseevent) {
+                configLink.setForeground(Color.BLUE);
+            }
+
+        }
+);
+        add(configLink);
+        validate();
+    }
+
+    public void setSliderInitialBitRate(long l) {
+        if (l <= (long)BITRATES[1]) {
+            slider.setValue(1);
+            datagramReader.setInitialBitRate(BITRATES[1]);
+            return;
+        }
+        if (l >= (long)BITRATES[BITRATES.length - 1]) {
+            slider.setValue(BITRATES.length - 1);
+            datagramReader.setInitialBitRate(BITRATES[BITRATES.length - 1]);
+            return;
+        }
+        for (int i = 0; i < BITRATES.length; i++)
+            if (l < (long)BITRATES[i]) {
+                int j = BITRATES[i - 1] + (BITRATES[i] - BITRATES[i - 1]) / 2;
+                if (l < (long)j) {
+                    slider.setValue(i - 1);
+                    datagramReader.setInitialBitRate(BITRATES[i - 1]);
+                } else {
+                    slider.setValue(i);
+                    datagramReader.setInitialBitRate(BITRATES[i]);
+                }
+                return;
+            }
+
+        System.out.println("Error: Failed to set bitrate: " + l);
+    }
+
+
+
+
+
+
+
+
+}