ButtonPanel.java 4.9 KB

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