blob: 472f11f8140774c6d3dd9278a6bcb7f50c4c3206 [file] [log] [blame]
DRCc5dc0382011-05-13 21:42:14 +00001/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.
Brian Hinz430d8cf2014-01-02 01:23:56 +00002 * Copyright (C) 2011-2014 Brian P. Hinz
Brian Hinzc0a36092013-05-12 15:46:09 +00003 *
DRCc5dc0382011-05-13 21:42:14 +00004 * This is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
Brian Hinzc0a36092013-05-12 15:46:09 +00008 *
DRCc5dc0382011-05-13 21:42:14 +00009 * This software is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
Brian Hinzc0a36092013-05-12 15:46:09 +000013 *
DRCc5dc0382011-05-13 21:42:14 +000014 * You should have received a copy of the GNU General Public License
15 * along with this software; if not, write to the Free Software
Brian Hinzb213da62012-04-11 22:00:55 +000016 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
DRCc5dc0382011-05-13 21:42:14 +000017 * USA.
18 */
19
20package com.tigervnc.vncviewer;
21
Brian Hinz4a95c7f2012-09-01 19:24:26 +000022import java.awt.*;
DRCc5dc0382011-05-13 21:42:14 +000023import java.awt.Cursor;
24import java.awt.event.*;
25import javax.swing.JFrame;
Brian Hinz92ddde22012-08-29 03:56:01 +000026import javax.swing.JFileChooser;
DRCc5dc0382011-05-13 21:42:14 +000027import javax.swing.JPopupMenu;
DRCc5dc0382011-05-13 21:42:14 +000028import javax.swing.JMenuItem;
29import javax.swing.JCheckBoxMenuItem;
30
31import com.tigervnc.rfb.*;
32
33public class F8Menu extends JPopupMenu implements ActionListener {
34 public F8Menu(CConn cc_) {
35 super("VNC Menu");
36 setLightWeightPopupEnabled(false);
37 cc = cc_;
38 restore = addMenuItem("Restore",KeyEvent.VK_R);
Brian P. Hinz09e15072015-08-20 18:27:15 -040039 restore.setEnabled(!cc.viewer.embed.getValue());
DRCc5dc0382011-05-13 21:42:14 +000040 move = addMenuItem("Move");
41 move.setEnabled(false);
42 size = addMenuItem("Size");
43 size.setEnabled(false);
44 minimize = addMenuItem("Minimize", KeyEvent.VK_N);
Brian P. Hinz09e15072015-08-20 18:27:15 -040045 minimize.setEnabled(!cc.viewer.embed.getValue());
DRCc5dc0382011-05-13 21:42:14 +000046 maximize = addMenuItem("Maximize", KeyEvent.VK_X);
Brian P. Hinz09e15072015-08-20 18:27:15 -040047 maximize.setEnabled(!cc.viewer.embed.getValue());
DRCc5dc0382011-05-13 21:42:14 +000048 addSeparator();
49 exit = addMenuItem("Close Viewer", KeyEvent.VK_C);
50 addSeparator();
51 fullScreen = new JCheckBoxMenuItem("Full Screen");
52 fullScreen.setMnemonic(KeyEvent.VK_F);
Brian Hinz64ee6fd2012-04-08 19:12:50 +000053 fullScreen.setSelected(cc.fullScreen);
DRCc5dc0382011-05-13 21:42:14 +000054 fullScreen.addActionListener(this);
Brian Hinz430d8cf2014-01-02 01:23:56 +000055 fullScreen.setEnabled(!cc.viewer.embed.getValue());
DRCc5dc0382011-05-13 21:42:14 +000056 add(fullScreen);
57 addSeparator();
58 clipboard = addMenuItem("Clipboard...");
59 addSeparator();
Brian Hinz3b5ce722012-08-26 18:06:52 +000060 f8 = addMenuItem("Send "+KeyEvent.getKeyText(MenuKey.getMenuKeyCode()), MenuKey.getMenuKeyCode());
DRCc5dc0382011-05-13 21:42:14 +000061 ctrlAltDel = addMenuItem("Send Ctrl-Alt-Del");
62 addSeparator();
63 refresh = addMenuItem("Refresh Screen", KeyEvent.VK_H);
64 addSeparator();
65 newConn = addMenuItem("New connection...", KeyEvent.VK_W);
Brian Hinz430d8cf2014-01-02 01:23:56 +000066 newConn.setEnabled(!cc.viewer.embed.getValue());
DRCc5dc0382011-05-13 21:42:14 +000067 options = addMenuItem("Options...", KeyEvent.VK_O);
Brian Hinz92ddde22012-08-29 03:56:01 +000068 save = addMenuItem("Save connection info as...", KeyEvent.VK_S);
DRCc5dc0382011-05-13 21:42:14 +000069 info = addMenuItem("Connection info...", KeyEvent.VK_I);
Brian Hinz652953c2011-10-06 06:21:32 +000070 about = addMenuItem("About VncViewer...", KeyEvent.VK_A);
DRCc5dc0382011-05-13 21:42:14 +000071 addSeparator();
72 dismiss = addMenuItem("Dismiss menu");
73 setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
74 }
75
76 JMenuItem addMenuItem(String str, int mnemonic) {
77 JMenuItem item = new JMenuItem(str, mnemonic);
78 item.addActionListener(this);
79 add(item);
80 return item;
81 }
82
83 JMenuItem addMenuItem(String str) {
84 JMenuItem item = new JMenuItem(str);
85 item.addActionListener(this);
86 add(item);
87 return item;
88 }
89
90 boolean actionMatch(ActionEvent ev, JMenuItem item) {
91 return ev.getActionCommand().equals(item.getActionCommand());
92 }
93
94 public void actionPerformed(ActionEvent ev) {
95 if (actionMatch(ev, exit)) {
Brian Hinz932fac52012-08-26 20:52:15 +000096 cc.close();
DRCc5dc0382011-05-13 21:42:14 +000097 } else if (actionMatch(ev, fullScreen)) {
98 cc.toggleFullScreen();
99 } else if (actionMatch(ev, restore)) {
100 if (cc.fullScreen) cc.toggleFullScreen();
101 cc.viewport.setExtendedState(JFrame.NORMAL);
102 } else if (actionMatch(ev, minimize)) {
103 if (cc.fullScreen) cc.toggleFullScreen();
104 cc.viewport.setExtendedState(JFrame.ICONIFIED);
105 } else if (actionMatch(ev, maximize)) {
106 if (cc.fullScreen) cc.toggleFullScreen();
107 cc.viewport.setExtendedState(JFrame.MAXIMIZED_BOTH);
108 } else if (actionMatch(ev, clipboard)) {
Brian Hinz06b92cf2011-10-24 02:11:53 +0000109 cc.clipboardDialog.showDialog(cc.viewport);
DRCc5dc0382011-05-13 21:42:14 +0000110 } else if (actionMatch(ev, f8)) {
Brian Hinz1e252c62013-02-09 02:42:14 +0000111 cc.writeKeyEvent(MenuKey.getMenuKeySym(), true);
112 cc.writeKeyEvent(MenuKey.getMenuKeySym(), false);
DRCc5dc0382011-05-13 21:42:14 +0000113 } else if (actionMatch(ev, ctrlAltDel)) {
114 cc.writeKeyEvent(Keysyms.Control_L, true);
115 cc.writeKeyEvent(Keysyms.Alt_L, true);
116 cc.writeKeyEvent(Keysyms.Delete, true);
117 cc.writeKeyEvent(Keysyms.Delete, false);
118 cc.writeKeyEvent(Keysyms.Alt_L, false);
119 cc.writeKeyEvent(Keysyms.Control_L, false);
120 } else if (actionMatch(ev, refresh)) {
121 cc.refresh();
122 } else if (actionMatch(ev, newConn)) {
123 VncViewer.newViewer(cc.viewer);
124 } else if (actionMatch(ev, options)) {
Brian Hinz06b92cf2011-10-24 02:11:53 +0000125 cc.options.showDialog(cc.viewport);
Brian Hinz92ddde22012-08-29 03:56:01 +0000126 } else if (actionMatch(ev, save)) {
127 JFileChooser fc = new JFileChooser();
128 fc.setDialogTitle("Save current configuration as:");
129 fc.setApproveButtonText("OK");
130 fc.setFileHidingEnabled(false);
Brian Hinz4a95c7f2012-09-01 19:24:26 +0000131 Window fullScreenWindow = Viewport.getFullScreenWindow();
132 if (fullScreenWindow != null)
133 Viewport.setFullScreenWindow(null);
Brian Hinz8b61dd52013-03-01 00:55:42 +0000134 int ret = fc.showOpenDialog(cc.viewport);
Brian Hinz4a95c7f2012-09-01 19:24:26 +0000135 if (fullScreenWindow != null)
136 Viewport.setFullScreenWindow(fullScreenWindow);
Brian Hinz92ddde22012-08-29 03:56:01 +0000137 if (ret == JFileChooser.APPROVE_OPTION) {
138 String filename = fc.getSelectedFile().toString();
139 if (filename != null)
140 Configuration.save(filename);
141 }
DRCc5dc0382011-05-13 21:42:14 +0000142 } else if (actionMatch(ev, info)) {
143 cc.showInfo();
144 } else if (actionMatch(ev, about)) {
145 cc.showAbout();
146 } else if (actionMatch(ev, dismiss)) {
147 firePopupMenuCanceled();
148 }
149 }
150
151 CConn cc;
152 JMenuItem restore, move, size, minimize, maximize;
153 JMenuItem exit, clipboard, ctrlAltDel, refresh;
Brian Hinz92ddde22012-08-29 03:56:01 +0000154 JMenuItem newConn, options, save, info, about, dismiss;
DRCc5dc0382011-05-13 21:42:14 +0000155 static JMenuItem f8;
156 JCheckBoxMenuItem fullScreen;
157 static LogWriter vlog = new LogWriter("F8Menu");
158}