/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved. * * This is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this software; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, * USA. */ package vncviewer; import java.awt.*; @SuppressWarnings({"unchecked", "deprecation", "serial"}) class OptionsDialog extends vncviewer.Dialog { public OptionsDialog(OptionsDialogCallback cb_) { super(false); cb = cb_; setTitle("VNC Viewer: Connection Options"); setLayout(new BorderLayout()); Panel tabPanel = new Panel(); tabPanel.add(encodingSel=new Button("Encoding")); tabPanel.add(inputSel=new Button("Inputs")); tabPanel.add(miscSel=new Button("Misc")); add(tabPanel, BorderLayout.NORTH); cardPanel = new Panel(); cardPanel.setLayout(new CardLayout()); add(cardPanel, BorderLayout.CENTER); mainGBC = new GridBagConstraints(); mainGBC.gridwidth = GridBagConstraints.REMAINDER; mainGBC.anchor = GridBagConstraints.WEST; mainGBC.ipadx = 2; mainGBC.ipady = 2; startPanel("Encoding and Colour Level:"); panelGBC.gridwidth = 1; autoSelect = addCheckbox("Auto select"); encodingGroup = new CheckboxGroup(); colourGroup = new CheckboxGroup(); panelGBC.gridwidth = GridBagConstraints.REMAINDER; fullColour = addRadioCheckbox("Full (all available colours)", colourGroup); panelGBC.gridwidth = 1; zrle = addRadioCheckbox("ZRLE", encodingGroup); panelGBC.gridwidth = GridBagConstraints.REMAINDER; mediumColour = addRadioCheckbox("Medium (256 colours)", colourGroup); panelGBC.gridwidth = 1; hextile = addRadioCheckbox("Hextile", encodingGroup); panelGBC.gridwidth = GridBagConstraints.REMAINDER; lowColour = addRadioCheckbox("Low (64 colours)", colourGroup); panelGBC.gridwidth = 1; raw = addRadioCheckbox("Raw", encodingGroup); panelGBC.gridwidth = GridBagConstraints.REMAINDER; veryLowColour = addRadioCheckbox("Very low (8 colours)", colourGroup); startPanel("Inputs:"); viewOnly = addCheckbox("View only (ignore mouse & keyboard)"); acceptClipboard = addCheckbox("Accept clipboard from server"); sendClipboard = addCheckbox("Send clipboard to server"); startPanel("Misc:"); shared = addCheckbox("Shared (don't disconnect other viewers)"); useLocalCursor = addCheckbox("Render cursor locally"); fastCopyRect = addCheckbox("Fast CopyRect"); Panel pb = new Panel(); okButton = new Button("OK"); pb.add(okButton); cancelButton = new Button("Cancel"); pb.add(cancelButton); add(pb, BorderLayout.SOUTH); pack(); makeBold(encodingSel); } public void initDialog() { if (cb != null) cb.setOptions(); zrle.setEnabled(!autoSelect.getState()); hextile.setEnabled(!autoSelect.getState()); raw.setEnabled(!autoSelect.getState()); } void startPanel(String title) { panelGB = new GridBagLayout(); panel = new Panel(panelGB); cardPanel.add(panel, title); panelGBC = new GridBagConstraints(); panelGBC.gridwidth = GridBagConstraints.REMAINDER; panelGBC.anchor = GridBagConstraints.WEST; panelGBC.ipadx = 2; panelGBC.ipady = 2; panelGBC.insets = new Insets(0,4,0,0); Label l = new Label(title); panelGB.setConstraints(l, panelGBC); panel.add(l); } Checkbox addCheckbox(String str) { Checkbox c = new Checkbox(str); panelGB.setConstraints(c, panelGBC); panel.add(c); return c; } Checkbox addRadioCheckbox(String str, CheckboxGroup group) { Checkbox c = new Checkbox(str, group, false); panelGB.setConstraints(c, panelGBC); panel.add(c); return c; } public boolean action(Event event, Object arg) { if (event.target == okButton) { ok = true; if (cb != null) cb.getOptions(); endDialog(); } else if (event.target == cancelButton) { ok = false; endDialog(); } else if (event.target == autoSelect) { zrle.setEnabled(!autoSelect.getState()); hextile.setEnabled(!autoSelect.getState()); raw.setEnabled(!autoSelect.getState()); } else if (event.target == encodingSel) { ((CardLayout)cardPanel.getLayout()).show(cardPanel, "Encoding and Colour Level:"); makeBold(encodingSel); } else if (event.target == inputSel) { ((CardLayout)cardPanel.getLayout()).show(cardPanel, "Inputs:"); makeBold(inputSel); } else if (event.target == miscSel) { ((CardLayout)cardPanel.getLayout()).show(cardPanel, "Misc:"); makeBold(miscSel); } return true; } private void makeBold ( Button b ) { int size = b.getFont().getSize(); // Don't want to rely on getFontSize() String name = b.getFont().getName(); // Can't rely on getFontName() encodingSel.setFont(new Font(name,(b==encodingSel) ? Font.BOLD : Font.PLAIN,size)); inputSel.setFont(new Font(name,(b==inputSel) ? Font.BOLD : Font.PLAIN,size)); miscSel.setFont(new Font(name,(b==miscSel) ? Font.BOLD : Font.PLAIN,size)); } OptionsDialogCallback cb; Button encodingSel, inputSel, miscSel; //GridBagLayout mainGB; GridBagConstraints mainGBC; GridBagLayout panelGB; GridBagConstraints panelGBC; Panel cardPanel; Panel panel; Checkbox autoSelect; CheckboxGroup encodingGroup, colourGroup; Checkbox zrle, hextile, raw; Checkbox fullColour, mediumColour, lowColour, veryLowColour; Checkbox viewOnly, acceptClipboard, sendClipboard; Checkbox shared, useLocalCursor, fastCopyRect; Button okButton, cancelButton; }