0
|
1 //
|
|
2 // Copyright (C) 2001,2002 HorizonLive.com, Inc. All Rights Reserved.
|
|
3 // Copyright (C) 1999 AT&T Laboratories Cambridge. All Rights Reserved.
|
|
4 //
|
|
5 // This is free software; you can redistribute it and/or modify
|
|
6 // it under the terms of the GNU General Public License as published by
|
|
7 // the Free Software Foundation; either version 2 of the License, or
|
|
8 // (at your option) any later version.
|
|
9 //
|
|
10 // This software is distributed in the hope that it will be useful,
|
|
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13 // GNU General Public License for more details.
|
|
14 //
|
|
15 // You should have received a copy of the GNU General Public License
|
|
16 // along with this software; if not, write to the Free Software
|
|
17 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
|
18 // USA.
|
|
19 //
|
|
20
|
|
21 //
|
|
22 // ButtonPanel class implements panel with four buttons in the
|
|
23 // VNCViewer desktop window.
|
|
24 //
|
|
25
|
|
26 import java.awt.*;
|
|
27 import java.awt.event.*;
|
|
28 import java.io.*;
|
|
29
|
|
30 class ButtonPanel extends Panel implements ActionListener {
|
|
31
|
|
32 VncViewer viewer;
|
|
33 Button disconnectButton;
|
|
34 Button optionsButton;
|
|
35 Button recordButton;
|
|
36 Button clipboardButton;
|
|
37 Button ctrlAltDelButton;
|
|
38 Button refreshButton;
|
|
39
|
|
40 ButtonPanel(VncViewer v) {
|
|
41 viewer = v;
|
|
42
|
|
43 setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
|
|
44 disconnectButton = new Button("Disconnect");
|
|
45 disconnectButton.setEnabled(false);
|
|
46 add(disconnectButton);
|
|
47 disconnectButton.addActionListener(this);
|
|
48 optionsButton = new Button("Options");
|
|
49 add(optionsButton);
|
|
50 optionsButton.addActionListener(this);
|
|
51 clipboardButton = new Button("Clipboard");
|
|
52 clipboardButton.setEnabled(false);
|
|
53 add(clipboardButton);
|
|
54 clipboardButton.addActionListener(this);
|
|
55 if (viewer.rec != null) {
|
|
56 recordButton = new Button("Record");
|
|
57 add(recordButton);
|
|
58 recordButton.addActionListener(this);
|
|
59 }
|
|
60 ctrlAltDelButton = new Button("Send Ctrl-Alt-Del");
|
|
61 ctrlAltDelButton.setEnabled(false);
|
|
62 add(ctrlAltDelButton);
|
|
63 ctrlAltDelButton.addActionListener(this);
|
|
64 refreshButton = new Button("Refresh");
|
|
65 refreshButton.setEnabled(false);
|
|
66 add(refreshButton);
|
|
67 refreshButton.addActionListener(this);
|
|
68 }
|
|
69
|
|
70 //
|
|
71 // Enable buttons on successful connection.
|
|
72 //
|
|
73
|
|
74 public void enableButtons() {
|
|
75 disconnectButton.setEnabled(true);
|
|
76 clipboardButton.setEnabled(true);
|
|
77 refreshButton.setEnabled(true);
|
|
78 }
|
|
79
|
|
80 //
|
|
81 // Disable all buttons on disconnect.
|
|
82 //
|
|
83
|
|
84 public void disableButtonsOnDisconnect() {
|
|
85 remove(disconnectButton);
|
|
86 disconnectButton = new Button("Hide desktop");
|
|
87 disconnectButton.setEnabled(true);
|
|
88 add(disconnectButton, 0);
|
|
89 disconnectButton.addActionListener(this);
|
|
90
|
|
91 optionsButton.setEnabled(false);
|
|
92 clipboardButton.setEnabled(false);
|
|
93 ctrlAltDelButton.setEnabled(false);
|
|
94 refreshButton.setEnabled(false);
|
|
95
|
|
96 validate();
|
|
97 }
|
|
98
|
|
99 //
|
|
100 // Enable/disable controls that should not be available in view-only
|
|
101 // mode.
|
|
102 //
|
|
103
|
|
104 public void enableRemoteAccessControls(boolean enable) {
|
|
105 ctrlAltDelButton.setEnabled(enable);
|
|
106 }
|
|
107
|
|
108 //
|
|
109 // Event processing.
|
|
110 //
|
|
111
|
|
112 public void actionPerformed(ActionEvent evt) {
|
|
113
|
|
114 viewer.moveFocusToDesktop();
|
|
115
|
|
116 if (evt.getSource() == disconnectButton) {
|
|
117 viewer.disconnect();
|
|
118
|
|
119 } else if (evt.getSource() == optionsButton) {
|
|
120 viewer.options.setVisible(!viewer.options.isVisible());
|
|
121
|
|
122 } else if (evt.getSource() == recordButton) {
|
|
123 viewer.rec.setVisible(!viewer.rec.isVisible());
|
|
124
|
|
125 } else if (evt.getSource() == clipboardButton) {
|
|
126 viewer.clipboard.setVisible(!viewer.clipboard.isVisible());
|
|
127
|
|
128 } else if (evt.getSource() == ctrlAltDelButton) {
|
|
129 try {
|
|
130 final int modifiers = InputEvent.CTRL_MASK | InputEvent.ALT_MASK;
|
|
131
|
|
132 KeyEvent ctrlAltDelEvent =
|
|
133 new KeyEvent(this, KeyEvent.KEY_PRESSED, 0, modifiers, 127);
|
|
134 viewer.rfb.writeKeyEvent(ctrlAltDelEvent);
|
|
135
|
|
136 ctrlAltDelEvent =
|
|
137 new KeyEvent(this, KeyEvent.KEY_RELEASED, 0, modifiers, 127);
|
|
138 viewer.rfb.writeKeyEvent(ctrlAltDelEvent);
|
|
139
|
|
140 } catch (IOException e) {
|
|
141 e.printStackTrace();
|
|
142 }
|
|
143 } else if (evt.getSource() == refreshButton) {
|
|
144 try {
|
|
145 RfbProto rfb = viewer.rfb;
|
|
146 rfb.writeFramebufferUpdateRequest(0, 0, rfb.framebufferWidth,
|
|
147 rfb.framebufferHeight, false);
|
|
148 } catch (IOException e) {
|
|
149 e.printStackTrace();
|
|
150 }
|
|
151 }
|
|
152 }
|
|
153 }
|
|
154
|