Mercurial > hg > Members > riono > TreeVNC_ja_comment
annotate src/viewer_swing/java/com/glavsoft/viewer/swing/SwingViewerWindow.java @ 453:d0ca1be5c47c
show debag message for 13inch retina
author | Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 21 Jun 2016 20:39:23 +0900 |
parents | e94489c9a0bb |
children | 432e2967eaab |
rev | line source |
---|---|
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1 // Copyright (C) 2010, 2011, 2012, 2013 GlavSoft LLC. |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
2 // All rights reserved. |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
3 // |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
4 //------------------------------------------------------------------------- |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
5 // This file is part of the TightVNC software. Please visit our Web site: |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
6 // |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
7 // http://www.tightvnc.com/ |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
8 // |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
9 // This program is free software; you can redistribute it and/or modify |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
10 // it under the terms of the GNU General Public License as published by |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
11 // the Free Software Foundation; either version 2 of the License, or |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
12 // (at your option) any later version. |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
13 // |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
14 // This program is distributed in the hope that it will be useful, |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
17 // GNU General Public License for more details. |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
18 // |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
19 // You should have received a copy of the GNU General Public License along |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
20 // with this program; if not, write to the Free Software Foundation, Inc., |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
21 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
22 //------------------------------------------------------------------------- |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
23 // |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
24 |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
25 package com.glavsoft.viewer.swing; |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
26 |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
27 import com.glavsoft.core.SettingsChangedEvent; |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
28 import com.glavsoft.rfb.IChangeSettingsListener; |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
29 import com.glavsoft.rfb.client.KeyEventMessage; |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
30 import com.glavsoft.rfb.protocol.Protocol; |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
31 import com.glavsoft.rfb.protocol.ProtocolContext; |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
32 import com.glavsoft.rfb.protocol.ProtocolSettings; |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
33 import com.glavsoft.utils.Keymap; |
434
aad75cd6d9e2
Multicast joins both ipv4 and ipv6 now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
433
diff
changeset
|
34 import com.glavsoft.viewer.ConnectionPresenter; |
aad75cd6d9e2
Multicast joins both ipv4 and ipv6 now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
433
diff
changeset
|
35 import com.glavsoft.viewer.UiSettings; |
aad75cd6d9e2
Multicast joins both ipv4 and ipv6 now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
433
diff
changeset
|
36 import com.glavsoft.viewer.Viewer; |
aad75cd6d9e2
Multicast joins both ipv4 and ipv6 now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
433
diff
changeset
|
37 import com.glavsoft.viewer.ViewerInterface; |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
38 import com.glavsoft.viewer.swing.gui.OptionsDialog; |
434
aad75cd6d9e2
Multicast joins both ipv4 and ipv6 now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
433
diff
changeset
|
39 import jp.ac.u_ryukyu.treevnc.ScreenChangeRequest; |
aad75cd6d9e2
Multicast joins both ipv4 and ipv6 now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
433
diff
changeset
|
40 import jp.ac.u_ryukyu.treevnc.ScreenChangeSelectionPanel; |
aad75cd6d9e2
Multicast joins both ipv4 and ipv6 now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
433
diff
changeset
|
41 import jp.ac.u_ryukyu.treevnc.TreeRFBProto; |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
42 |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
43 import javax.swing.*; |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
44 import javax.swing.border.BevelBorder; |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
45 import javax.swing.border.Border; |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
46 import javax.swing.border.EmptyBorder; |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
47 import java.awt.*; |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
48 import java.awt.event.*; |
410 | 49 import java.lang.reflect.Field; |
407
7cd416d6a152
Show port Error dialog to server change client
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
406
diff
changeset
|
50 import java.net.Socket; |
274 | 51 import java.util.ArrayList; |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
52 import java.util.LinkedList; |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
53 import java.util.List; |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
54 import java.util.concurrent.Executors; |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
55 import java.util.concurrent.ScheduledExecutorService; |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
56 import java.util.concurrent.ScheduledFuture; |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
57 import java.util.concurrent.TimeUnit; |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
58 import java.util.logging.Logger; |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
59 |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
60 public class SwingViewerWindow implements IChangeSettingsListener { |
314 | 61 public static final int FS_SCROLLING_ACTIVE_BORDER = 20; |
62 private JToggleButton zoomFitButton; | |
63 private JToggleButton zoomFullScreenButton; | |
64 private JButton zoomInButton; | |
65 private JButton zoomOutButton; | |
66 private JButton zoomAsIsButton; | |
67 private JPanel outerPanel; | |
68 private JScrollPane scroller; | |
69 private JFrame frame; | |
70 private boolean forceResizable = true; | |
71 private ButtonsBar buttonsBar; | |
72 private Surface surface; | |
73 private boolean isSeparateFrame; | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
74 private final boolean isApplet; |
153 | 75 private ViewerInterface viewer; |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
76 private String connectionString; |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
77 private ConnectionPresenter presenter; |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
78 private Rectangle oldContainerBounds; |
314 | 79 private volatile boolean isFullScreen; |
80 private Border oldScrollerBorder; | |
81 private JLayeredPane lpane; | |
82 private EmptyButtonsBarMouseAdapter buttonsBarMouseAdapter; | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
83 private String remoteDesktopName; |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
84 private ProtocolSettings rfbSettings; |
392 | 85 |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
86 private UiSettings uiSettings; |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
87 private Protocol workingProtocol; |
225 | 88 public int width; |
89 public int height; | |
257 | 90 |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
91 private boolean isZoomToFitSelected; |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
92 private List<JComponent> kbdButtons; |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
93 |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
94 public SwingViewerWindow(Protocol workingProtocol, ProtocolSettings rfbSettings, UiSettings uiSettings, Surface surface, |
314 | 95 boolean isSeparateFrame, boolean isApplet, ViewerInterface viewer, String connectionString, |
96 ConnectionPresenter presenter, int w, int h) { | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
97 this.workingProtocol = workingProtocol; |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
98 this.rfbSettings = rfbSettings; |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
99 this.uiSettings = uiSettings; |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
100 this.surface = surface; |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
101 this.isSeparateFrame = isSeparateFrame; |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
102 this.isApplet = isApplet; |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
103 this.viewer = viewer; |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
104 this.connectionString = connectionString; |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
105 this.presenter = presenter; |
225 | 106 this.width = w; |
107 this.height = h; | |
301 | 108 |
65 | 109 if(viewer instanceof Viewer) |
314 | 110 createContainer(surface, isApplet, (Viewer)viewer); |
111 | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
112 |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
113 if (uiSettings.showControls) { |
314 | 114 if(viewer instanceof Viewer) |
115 createButtonsPanel(workingProtocol, isSeparateFrame? frame: (Viewer)viewer); | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
116 if (isSeparateFrame) registerResizeListener(frame); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
117 updateZoomButtonsState(); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
118 } |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
119 if (uiSettings.isFullScreen()) { |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
120 switchOnFullscreenMode(); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
121 } |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
122 setSurfaceToHandleKbdFocus(); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
123 if (isSeparateFrame) { |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
124 new Thread(new Runnable() { |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
125 @Override |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
126 public void run() { |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
127 try { |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
128 Thread.sleep(1000); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
129 } catch (InterruptedException e) { |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
130 // nop |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
131 } |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
132 SwingUtilities.invokeLater(new Runnable() { |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
133 @Override |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
134 public void run() { |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
135 frame.toFront(); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
136 } |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
137 }); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
138 } |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
139 }).start(); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
140 } |
314 | 141 } |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
142 |
314 | 143 private void createContainer(final Surface surface, boolean isApplet, JApplet appletWindow) { |
144 outerPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 0)) { | |
145 /** | |
83 | 146 * |
147 */ | |
148 private static final long serialVersionUID = 1L; | |
149 @Override | |
314 | 150 public Dimension getSize() { |
151 return surface.getPreferredSize(); | |
152 } | |
153 @Override | |
154 public Dimension getPreferredSize() { | |
155 return surface.getPreferredSize(); | |
156 } | |
157 }; | |
247
dd154ffe1a53
fix lostparent, in case of death last node.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
225
diff
changeset
|
158 Dimension outerPanelSize = outerPanel.getSize(); |
257 | 159 double width = outerPanelSize.getWidth(); |
247
dd154ffe1a53
fix lostparent, in case of death last node.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
225
diff
changeset
|
160 double height = outerPanelSize.getHeight(); |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
161 outerPanel.setBackground(Color.DARK_GRAY); |
314 | 162 lpane = new JLayeredPane() { |
163 /** | |
83 | 164 * |
165 */ | |
166 private static final long serialVersionUID = 1L; | |
167 @Override | |
314 | 168 public Dimension getSize() { |
169 return surface.getPreferredSize(); | |
170 } | |
171 @Override | |
172 public Dimension getPreferredSize() { | |
173 return surface.getPreferredSize(); | |
174 } | |
175 }; | |
176 lpane.setPreferredSize(surface.getPreferredSize()); | |
177 lpane.add(surface, JLayeredPane.DEFAULT_LAYER, 0); | |
178 outerPanel.add(lpane); | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
179 |
314 | 180 scroller = new JScrollPane(outerPanel); |
181 if (isSeparateFrame) { | |
182 frame = new JFrame(); | |
183 frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); | |
184 if ( ! isApplet) { | |
185 frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); | |
186 } | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
187 frame.setModalExclusionType(Dialog.ModalExclusionType.APPLICATION_EXCLUDE); |
314 | 188 Utils.setApplicationIconsForWindow(frame); |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
189 frame.setLayout(new BorderLayout(0, 0)); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
190 frame.add(scroller, BorderLayout.CENTER); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
191 |
314 | 192 // frame.pack(); |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
193 outerPanel.setSize(surface.getPreferredSize()); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
194 internalPack(null); |
204
d9d234715853
TreeManager for each interface
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
191
diff
changeset
|
195 if(viewer.getRfb().isTreeManager() || viewer.getCuiVersion()) { |
314 | 196 frame.setVisible(false); |
197 viewer.setCuiVersion(false); | |
68 | 198 } else |
314 | 199 frame.setVisible(true); |
61
d9cf08c6415c
During implementation change screen.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
57
diff
changeset
|
200 //frame.setVisible(false); |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
201 frame.validate(); |
314 | 202 } else { |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
203 appletWindow.setLayout(new BorderLayout(0, 0)); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
204 appletWindow.add(scroller, BorderLayout.CENTER); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
205 appletWindow.validate(); |
314 | 206 } |
207 } | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
208 |
314 | 209 public void pack() { |
210 final Dimension outerPanelOldSize = outerPanel.getSize(); | |
211 outerPanel.setSize(surface.getPreferredSize()); | |
212 if (isSeparateFrame && ! isZoomToFitSelected()) { | |
213 internalPack(outerPanelOldSize); | |
214 } | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
215 if (buttonsBar != null) { |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
216 updateZoomButtonsState(); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
217 } |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
218 updateWindowTitle(); |
314 | 219 } |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
220 |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
221 public boolean isZoomToFitSelected() { |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
222 return isZoomToFitSelected; |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
223 } |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
224 |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
225 public void setZoomToFitSelected(boolean zoomToFitSelected) { |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
226 isZoomToFitSelected = zoomToFitSelected; |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
227 } |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
228 |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
229 public void setRemoteDesktopName(String name) { |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
230 remoteDesktopName = name; |
207 | 231 TreeRFBProto rfb = viewer.getRfb(); |
167 | 232 if (rfb!=null) { |
314 | 233 int port = rfb.getAcceptPort(); |
234 remoteDesktopName += ":" + port; | |
167 | 235 } |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
236 updateWindowTitle(); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
237 } |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
238 |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
239 private void updateWindowTitle() { |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
240 if (isSeparateFrame) { |
314 | 241 frame.setTitle(remoteDesktopName + " [zoom: " + uiSettings.getScalePercentFormatted() + "%]"); |
242 } | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
243 } |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
244 |
314 | 245 private void internalPack(Dimension outerPanelOldSize) { |
246 final Rectangle workareaRectangle = getWorkareaRectangle(); | |
247 if (workareaRectangle.equals(frame.getBounds())) { | |
248 forceResizable = true; | |
249 } | |
250 final boolean isHScrollBar = scroller.getHorizontalScrollBar().isShowing() && ! forceResizable; | |
251 final boolean isVScrollBar = scroller.getVerticalScrollBar().isShowing() && ! forceResizable; | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
252 |
314 | 253 boolean isWidthChangeable = true; |
254 boolean isHeightChangeable = true; | |
255 if (outerPanelOldSize != null && surface.oldSize != null) { | |
256 isWidthChangeable = forceResizable || | |
257 (outerPanelOldSize.width == surface.oldSize.width && ! isHScrollBar); | |
258 isHeightChangeable = forceResizable || | |
259 (outerPanelOldSize.height == surface.oldSize.height && ! isVScrollBar); | |
260 } | |
261 forceResizable = false; | |
262 frame.validate(); | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
263 |
314 | 264 final Insets containerInsets = frame.getInsets(); |
265 Dimension preferredSize = frame.getPreferredSize(); | |
266 Rectangle preferredRectangle = new Rectangle(frame.getLocation(), preferredSize); | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
267 |
314 | 268 if (null == outerPanelOldSize && workareaRectangle.contains(preferredRectangle)) { |
269 frame.pack(); | |
270 } else { | |
271 Dimension minDimension = new Dimension( | |
272 containerInsets.left + containerInsets.right, containerInsets.top + containerInsets.bottom); | |
273 if (buttonsBar != null && buttonsBar.isVisible) { | |
274 minDimension.width += buttonsBar.getWidth(); | |
275 minDimension.height += buttonsBar.getHeight(); | |
276 } | |
277 Dimension dim = new Dimension(preferredSize); | |
278 Point location = frame.getLocation(); | |
279 if ( ! isWidthChangeable) { | |
280 dim.width = frame.getWidth(); | |
281 } else { | |
301 | 282 // このあたり、scalepercentを計算するのに使えそう |
314 | 283 if (isVScrollBar) dim.width += scroller.getVerticalScrollBar().getWidth(); |
284 if (dim.width < minDimension.width) dim.width = minDimension.width; | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
285 |
314 | 286 int dx = location.x - workareaRectangle.x; |
287 if (dx < 0) { | |
288 dx = 0; | |
289 location.x = workareaRectangle.x; | |
290 } | |
291 int w = workareaRectangle.width - dx; | |
292 if (w < dim.width) { | |
293 int dw = dim.width - w; | |
294 if (dw < dx) { | |
295 location.x -= dw; | |
296 } else { | |
297 dim.width = workareaRectangle.width; | |
298 location.x = workareaRectangle.x; | |
299 } | |
300 } | |
301 } | |
302 if ( ! isHeightChangeable) { | |
303 dim.height = frame.getHeight(); | |
304 } else { | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
305 |
314 | 306 if (isHScrollBar) dim.height += scroller.getHorizontalScrollBar().getHeight(); |
307 if (dim.height < minDimension.height) dim.height = minDimension.height; | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
308 |
314 | 309 int dy = location.y - workareaRectangle.y; |
310 if (dy < 0) { | |
311 dy = 0; | |
312 location.y = workareaRectangle.y; | |
313 } | |
314 int h = workareaRectangle.height - dy; | |
315 if (h < dim.height) { | |
316 int dh = dim.height - h; | |
317 if (dh < dy) { | |
318 location.y -= dh; | |
319 } else { | |
320 dim.height = workareaRectangle.height; | |
321 location.y = workareaRectangle.y; | |
322 } | |
323 } | |
324 } | |
412 | 325 // canet full size |
309 | 326 /* |
300 | 327 dim.width = workareaRectangle.width; |
328 dim.height = workareaRectangle.height; | |
314 | 329 */ |
330 if ( ! location.equals(frame.getLocation())) { | |
331 frame.setLocation(location); | |
332 } | |
333 if ( ! isFullScreen ) { | |
334 frame.setSize(dim); | |
335 } | |
336 } | |
337 scroller.revalidate(); | |
338 } | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
339 |
314 | 340 private Rectangle getWorkareaRectangle() { |
341 final GraphicsConfiguration graphicsConfiguration = frame.getGraphicsConfiguration(); | |
342 final Rectangle screenBounds = graphicsConfiguration.getBounds(); | |
343 final Insets screenInsets = Toolkit.getDefaultToolkit().getScreenInsets(graphicsConfiguration); | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
344 |
314 | 345 screenBounds.x += screenInsets.left; |
346 screenBounds.y += screenInsets.top; | |
347 if (width != 0) { | |
348 screenBounds.width = width; | |
349 screenBounds.height = height; | |
350 } else { | |
351 screenBounds.width -= screenInsets.left + screenInsets.right; | |
352 screenBounds.height -= screenInsets.top + screenInsets.bottom; | |
225 | 353 } |
354 | |
314 | 355 return screenBounds; |
356 } | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
357 |
314 | 358 void addZoomButtons() { |
359 buttonsBar.createStrut(); | |
360 zoomOutButton = buttonsBar.createButton("zoom-out", "Zoom Out", new ActionListener() { | |
361 @Override | |
362 public void actionPerformed(ActionEvent e) { | |
363 zoomFitButton.setSelected(false); | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
364 uiSettings.zoomOut(); |
314 | 365 } |
366 }); | |
367 zoomInButton = buttonsBar.createButton("zoom-in", "Zoom In", new ActionListener() { | |
368 @Override | |
369 public void actionPerformed(ActionEvent e) { | |
370 zoomFitButton.setSelected(false); | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
371 uiSettings.zoomIn(); |
314 | 372 } |
373 }); | |
374 zoomAsIsButton = buttonsBar.createButton("zoom-100", "Zoom 100%", new ActionListener() { | |
375 @Override | |
376 public void actionPerformed(ActionEvent e) { | |
377 zoomFitButton.setSelected(false); | |
378 forceResizable = false; | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
379 uiSettings.zoomAsIs(); |
314 | 380 } |
381 }); | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
382 |
314 | 383 zoomFitButton = buttonsBar.createToggleButton("zoom-fit", "Zoom to Fit Window", |
384 new ItemListener() { | |
385 @Override | |
386 public void itemStateChanged(ItemEvent e) { | |
387 if (e.getStateChange() == ItemEvent.SELECTED) { | |
388 setZoomToFitSelected(true); | |
389 forceResizable = true; | |
390 zoomToFit(); | |
391 updateZoomButtonsState(); | |
392 } else { | |
393 setZoomToFitSelected(false); | |
394 } | |
395 setSurfaceToHandleKbdFocus(); | |
396 } | |
397 }); | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
398 |
314 | 399 zoomFullScreenButton = buttonsBar.createToggleButton("zoom-fullscreen", "Full Screen", |
400 new ItemListener() { | |
401 @Override | |
402 public void itemStateChanged(ItemEvent e) { | |
403 updateZoomButtonsState(); | |
404 if (e.getStateChange() == ItemEvent.SELECTED) { | |
405 uiSettings.setFullScreen(switchOnFullscreenMode()); | |
406 } else { | |
407 switchOffFullscreenMode(); | |
408 uiSettings.setFullScreen(false); | |
409 } | |
410 setSurfaceToHandleKbdFocus(); | |
411 } | |
412 }); | |
413 if ( ! isSeparateFrame) { | |
414 zoomFullScreenButton.setEnabled(false); | |
415 zoomFitButton.setEnabled(false); | |
416 } | |
417 } | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
418 |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
419 protected void setSurfaceToHandleKbdFocus() { |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
420 if (surface != null && ! surface.requestFocusInWindow()) { |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
421 surface.requestFocus(); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
422 } |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
423 } |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
424 |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
425 boolean switchOnFullscreenMode() { |
314 | 426 zoomFullScreenButton.setSelected(true); |
427 oldContainerBounds = frame.getBounds(); | |
428 setButtonsBarVisible(false); | |
429 forceResizable = true; | |
430 frame.dispose(); | |
431 frame.setUndecorated(true); | |
432 frame.setResizable(false); | |
433 frame.setVisible(true); | |
434 try { | |
435 frame.getGraphicsConfiguration().getDevice().setFullScreenWindow(frame); | |
436 isFullScreen = true; | |
437 scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER); | |
438 scroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); | |
439 oldScrollerBorder = scroller.getBorder(); | |
440 scroller.setBorder(new EmptyBorder(0, 0, 0, 0)); | |
441 new FullscreenBorderDetectionThread(frame).start(); | |
442 } catch (Exception ex) { | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
443 Logger.getLogger(this.getClass().getName()).info("Cannot switch into FullScreen mode: " + ex.getMessage()); |
314 | 444 return false; |
445 } | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
446 return true; |
314 | 447 } |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
448 |
314 | 449 private void switchOffFullscreenMode() { |
450 if (isFullScreen) { | |
451 zoomFullScreenButton.setSelected(false); | |
452 isFullScreen = false; | |
453 setButtonsBarVisible(true); | |
454 try { | |
455 frame.dispose(); | |
456 frame.setUndecorated(false); | |
457 frame.setResizable(true); | |
458 frame.getGraphicsConfiguration().getDevice().setFullScreenWindow(null); | |
459 } catch (Exception e) { | |
460 // nop | |
461 } | |
462 scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED); | |
463 scroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); | |
464 scroller.setBorder(oldScrollerBorder); | |
465 this.frame.setBounds(oldContainerBounds); | |
466 frame.setVisible(true); | |
467 pack(); | |
468 } | |
469 } | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
470 |
371 | 471 public void zoomToFit() { |
314 | 472 Dimension scrollerSize = scroller.getSize(); |
473 Insets scrollerInsets = scroller.getInsets(); | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
474 uiSettings.zoomToFit(scrollerSize.width - scrollerInsets.left - scrollerInsets.right, |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
475 scrollerSize.height - scrollerInsets.top - scrollerInsets.bottom + |
314 | 476 (isFullScreen ? buttonsBar.getHeight() : 0), |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
477 workingProtocol.getFbWidth(), workingProtocol.getFbHeight()); |
314 | 478 } |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
479 |
314 | 480 void registerResizeListener(Container container) { |
481 container.addComponentListener(new ComponentAdapter() { | |
482 @Override | |
483 public void componentResized(ComponentEvent e) { | |
484 if (isZoomToFitSelected()) { | |
485 zoomToFit(); | |
486 updateZoomButtonsState(); | |
487 updateWindowTitle(); | |
488 setSurfaceToHandleKbdFocus(); | |
489 } | |
490 } | |
491 }); | |
492 } | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
493 |
314 | 494 void updateZoomButtonsState() { |
495 zoomOutButton.setEnabled(uiSettings.getScalePercent() > UiSettings.MIN_SCALE_PERCENT); | |
496 zoomInButton.setEnabled(uiSettings.getScalePercent() < UiSettings.MAX_SCALE_PERCENT); | |
497 zoomAsIsButton.setEnabled(uiSettings.getScalePercent() != 100); | |
498 } | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
499 |
314 | 500 public ButtonsBar createButtonsBar() { |
501 buttonsBar = new ButtonsBar(); | |
502 return buttonsBar; | |
503 } | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
504 |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
505 public void setButtonsBarVisible(boolean isVisible) { |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
506 setButtonsBarVisible(isVisible, frame); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
507 } |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
508 |
314 | 509 private void setButtonsBarVisible(boolean isVisible, Container container) { |
510 buttonsBar.setVisible(isVisible); | |
511 if (isVisible) { | |
512 buttonsBar.borderOff(); | |
513 container.add(buttonsBar.bar, BorderLayout.NORTH); | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
514 container.validate(); |
314 | 515 } else { |
516 container.remove(buttonsBar.bar); | |
517 buttonsBar.borderOn(); | |
518 } | |
519 } | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
520 |
314 | 521 public void setButtonsBarVisibleFS(boolean isVisible) { |
522 if (isVisible) { | |
523 if ( ! buttonsBar.isVisible) { | |
524 lpane.add(buttonsBar.bar, JLayeredPane.POPUP_LAYER, 0); | |
525 final int bbWidth = buttonsBar.bar.getPreferredSize().width; | |
526 buttonsBar.bar.setBounds( | |
527 scroller.getViewport().getViewPosition().x + (scroller.getWidth() - bbWidth)/2, 0, | |
528 bbWidth, buttonsBar.bar.getPreferredSize().height); | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
529 |
314 | 530 // prevent mouse events to through down to Surface |
531 if (null == buttonsBarMouseAdapter) buttonsBarMouseAdapter = new EmptyButtonsBarMouseAdapter(); | |
532 buttonsBar.bar.addMouseListener(buttonsBarMouseAdapter); | |
533 } | |
534 } else { | |
535 buttonsBar.bar.removeMouseListener(buttonsBarMouseAdapter); | |
536 lpane.remove(buttonsBar.bar); | |
537 lpane.repaint(buttonsBar.bar.getBounds()); | |
538 } | |
539 buttonsBar.setVisible(isVisible); | |
540 } | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
541 |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
542 public Surface getSurface() { |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
543 return surface; |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
544 } |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
545 |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
546 void close() { |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
547 if (isSeparateFrame && frame != null) { |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
548 frame.setVisible(false); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
549 frame.dispose(); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
550 } |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
551 } |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
552 |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
553 public static class ButtonsBar { |
314 | 554 private static final Insets BUTTONS_MARGIN = new Insets(2, 2, 2, 2); |
555 private JPanel bar; | |
556 private boolean isVisible; | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
557 |
314 | 558 public ButtonsBar() { |
559 bar = new JPanel(new FlowLayout(FlowLayout.LEFT, 4, 1)); | |
560 } | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
561 |
314 | 562 public JButton createButton(String iconId, String tooltipText, ActionListener actionListener) { |
563 JButton button = new JButton(Utils.getButtonIcon(iconId)); | |
564 button.setToolTipText(tooltipText); | |
565 button.setMargin(BUTTONS_MARGIN); | |
566 bar.add(button); | |
567 button.addActionListener(actionListener); | |
568 return button; | |
569 } | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
570 |
314 | 571 public void createStrut() { |
572 bar.add(Box.createHorizontalStrut(10)); | |
573 } | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
574 |
314 | 575 public JToggleButton createToggleButton(String iconId, String tooltipText, ItemListener itemListener) { |
576 JToggleButton button = new JToggleButton(Utils.getButtonIcon(iconId)); | |
577 button.setToolTipText(tooltipText); | |
578 button.setMargin(BUTTONS_MARGIN); | |
579 bar.add(button); | |
580 button.addItemListener(itemListener); | |
581 return button; | |
582 } | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
583 |
314 | 584 public void setVisible(boolean isVisible) { |
585 this.isVisible = isVisible; | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
586 if (isVisible) bar.revalidate(); |
314 | 587 } |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
588 |
314 | 589 public int getWidth() { |
590 return bar.getMinimumSize().width; | |
591 } | |
592 public int getHeight() { | |
593 return bar.getMinimumSize().height; | |
594 } | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
595 |
314 | 596 public void borderOn() { |
597 bar.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED)); | |
598 } | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
599 |
314 | 600 public void borderOff() { |
601 bar.setBorder(BorderFactory.createEmptyBorder()); | |
602 } | |
603 } | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
604 |
314 | 605 private static class EmptyButtonsBarMouseAdapter extends MouseAdapter { |
606 // empty | |
607 } | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
608 |
314 | 609 private class FullscreenBorderDetectionThread extends Thread { |
610 public static final int SHOW_HIDE_BUTTONS_BAR_DELAY_IN_MILLS = 700; | |
611 private final JFrame frame; | |
612 private ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor(); | |
613 private ScheduledFuture<?> futureForShow; | |
614 private ScheduledFuture<?> futureForHide; | |
615 private Point mousePoint, oldMousePoint; | |
616 private Point viewPosition; | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
617 |
314 | 618 public FullscreenBorderDetectionThread(JFrame frame) { |
619 super("FS border detector"); | |
620 this.frame = frame; | |
621 } | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
622 |
314 | 623 public void run() { |
624 setPriority(Thread.MIN_PRIORITY); | |
625 while(isFullScreen) { | |
626 mousePoint = MouseInfo.getPointerInfo().getLocation(); | |
627 if (null == oldMousePoint) oldMousePoint = mousePoint; | |
628 SwingUtilities.convertPointFromScreen(mousePoint, frame); | |
629 viewPosition = scroller.getViewport().getViewPosition(); | |
630 processButtonsBarVisibility(); | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
631 |
314 | 632 boolean needScrolling = processVScroll() || processHScroll(); |
633 oldMousePoint = mousePoint; | |
634 if (needScrolling) { | |
635 cancelShowExecutor(); | |
636 setButtonsBarVisibleFS(false); | |
637 makeScrolling(viewPosition); | |
638 } | |
639 try { | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
640 Thread.sleep(100); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
641 } catch (Exception e) { |
314 | 642 // nop |
643 } | |
644 } | |
645 } | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
646 |
314 | 647 private boolean processHScroll() { |
648 if (mousePoint.x < FS_SCROLLING_ACTIVE_BORDER) { | |
649 if (viewPosition.x > 0) { | |
650 int delta = FS_SCROLLING_ACTIVE_BORDER - mousePoint.x; | |
651 if (mousePoint.y != oldMousePoint.y) delta *= 2; // speedify scrolling on mouse moving | |
652 viewPosition.x -= delta; | |
653 if (viewPosition.x < 0) viewPosition.x = 0; | |
654 return true; | |
655 } | |
656 } else if (mousePoint.x > (frame.getWidth() - FS_SCROLLING_ACTIVE_BORDER)) { | |
657 final Rectangle viewRect = scroller.getViewport().getViewRect(); | |
658 final int right = viewRect.width + viewRect.x; | |
659 if (right < outerPanel.getSize().width) { | |
660 int delta = FS_SCROLLING_ACTIVE_BORDER - (frame.getWidth() - mousePoint.x); | |
661 if (mousePoint.y != oldMousePoint.y) delta *= 2; // speedify scrolling on mouse moving | |
662 viewPosition.x += delta; | |
663 if (viewPosition.x + viewRect.width > outerPanel.getSize().width) viewPosition.x = | |
664 outerPanel.getSize().width - viewRect.width; | |
665 return true; | |
666 } | |
667 } | |
668 return false; | |
669 } | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
670 |
314 | 671 private boolean processVScroll() { |
672 if (mousePoint.y < FS_SCROLLING_ACTIVE_BORDER) { | |
673 if (viewPosition.y > 0) { | |
674 int delta = FS_SCROLLING_ACTIVE_BORDER - mousePoint.y; | |
675 if (mousePoint.x != oldMousePoint.x) delta *= 2; // speedify scrolling on mouse moving | |
676 viewPosition.y -= delta; | |
677 if (viewPosition.y < 0) viewPosition.y = 0; | |
678 return true; | |
679 } | |
680 } else if (mousePoint.y > (frame.getHeight() - FS_SCROLLING_ACTIVE_BORDER)) { | |
681 final Rectangle viewRect = scroller.getViewport().getViewRect(); | |
682 final int bottom = viewRect.height + viewRect.y; | |
683 if (bottom < outerPanel.getSize().height) { | |
684 int delta = FS_SCROLLING_ACTIVE_BORDER - (frame.getHeight() - mousePoint.y); | |
685 if (mousePoint.x != oldMousePoint.x) delta *= 2; // speedify scrolling on mouse moving | |
686 viewPosition.y += delta; | |
687 if (viewPosition.y + viewRect.height > outerPanel.getSize().height) viewPosition.y = | |
688 outerPanel.getSize().height - viewRect.height; | |
689 return true; | |
690 } | |
691 } | |
692 return false; | |
693 } | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
694 |
314 | 695 private void processButtonsBarVisibility() { |
696 if (mousePoint.y < 1) { | |
697 cancelHideExecutor(); | |
698 // show buttons bar after delay | |
699 if (! buttonsBar.isVisible && (null == futureForShow || futureForShow.isDone())) { | |
700 futureForShow = scheduler.schedule(new Runnable() { | |
701 @Override | |
702 public void run() { | |
703 showButtonsBar(); | |
704 } | |
705 }, SHOW_HIDE_BUTTONS_BAR_DELAY_IN_MILLS, TimeUnit.MILLISECONDS); | |
706 } | |
707 } else { | |
708 cancelShowExecutor(); | |
709 } | |
710 if (buttonsBar.isVisible && mousePoint.y <= buttonsBar.getHeight()) { | |
711 cancelHideExecutor(); | |
712 } | |
713 if (buttonsBar.isVisible && mousePoint.y > buttonsBar.getHeight()) { | |
714 // hide buttons bar after delay | |
715 if (null == futureForHide || futureForHide.isDone()) { | |
716 futureForHide = scheduler.schedule(new Runnable() { | |
717 @Override | |
718 public void run() { | |
719 SwingUtilities.invokeLater(new Runnable() { | |
720 @Override | |
721 public void run() { | |
722 setButtonsBarVisibleFS(false); | |
723 SwingViewerWindow.this.frame.validate(); | |
724 } | |
725 }); | |
726 } | |
727 }, SHOW_HIDE_BUTTONS_BAR_DELAY_IN_MILLS, TimeUnit.MILLISECONDS); | |
728 } | |
729 } | |
730 } | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
731 |
314 | 732 private void cancelHideExecutor() { |
733 cancelExecutor(futureForHide); | |
734 } | |
735 private void cancelShowExecutor() { | |
736 cancelExecutor(futureForShow); | |
737 } | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
738 |
314 | 739 private void cancelExecutor(ScheduledFuture<?> future) { |
740 if (future != null && ! future.isDone()) { | |
741 future.cancel(true); | |
742 } | |
743 } | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
744 |
314 | 745 private void makeScrolling(final Point viewPosition) { |
746 SwingUtilities.invokeLater(new Runnable() { | |
747 @Override | |
748 public void run() { | |
749 scroller.getViewport().setViewPosition(viewPosition); | |
750 final Point mousePosition = surface.getMousePosition(); | |
751 if (mousePosition != null) { | |
752 final MouseEvent mouseEvent = new MouseEvent(frame, 0, 0, 0, | |
753 mousePosition.x, mousePosition.y, 0, false); | |
754 for (MouseMotionListener mml : surface.getMouseMotionListeners()) { | |
755 mml.mouseMoved(mouseEvent); | |
756 } | |
757 } | |
758 } | |
759 }); | |
760 } | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
761 |
314 | 762 private void showButtonsBar() { |
763 SwingUtilities.invokeLater(new Runnable() { | |
764 @Override | |
765 public void run() { | |
766 setButtonsBarVisibleFS(true); | |
767 } | |
768 }); | |
769 } | |
770 } | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
771 |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
772 protected void createButtonsPanel(final ProtocolContext context, Container container) { |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
773 final SwingViewerWindow.ButtonsBar buttonsBar = createButtonsBar(); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
774 |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
775 buttonsBar.createButton("options", "Set Options", new ActionListener() { |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
776 @Override |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
777 public void actionPerformed(ActionEvent e) { |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
778 showOptionsDialog(); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
779 setSurfaceToHandleKbdFocus(); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
780 } |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
781 }); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
782 |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
783 buttonsBar.createButton("info", "Show connection info", new ActionListener() { |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
784 @Override |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
785 public void actionPerformed(ActionEvent e) { |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
786 showConnectionInfoMessage(); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
787 setSurfaceToHandleKbdFocus(); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
788 } |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
789 }); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
790 |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
791 buttonsBar.createStrut(); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
792 |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
793 buttonsBar.createButton("refresh", "Refresh screen", new ActionListener() { |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
794 @Override |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
795 public void actionPerformed(ActionEvent e) { |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
796 context.sendRefreshMessage(); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
797 setSurfaceToHandleKbdFocus(); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
798 } |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
799 }); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
800 |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
801 addZoomButtons(); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
802 |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
803 kbdButtons = new LinkedList<JComponent>(); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
804 |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
805 buttonsBar.createStrut(); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
806 |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
807 JButton ctrlAltDelButton = buttonsBar.createButton("ctrl-alt-del", "Send 'Ctrl-Alt-Del'", new ActionListener() { |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
808 @Override |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
809 public void actionPerformed(ActionEvent e) { |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
810 sendCtrlAltDel(context); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
811 setSurfaceToHandleKbdFocus(); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
812 } |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
813 }); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
814 kbdButtons.add(ctrlAltDelButton); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
815 |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
816 JButton winButton = buttonsBar.createButton("win", "Send 'Win' key as 'Ctrl-Esc'", new ActionListener() { |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
817 @Override |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
818 public void actionPerformed(ActionEvent e) { |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
819 sendWinKey(context); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
820 setSurfaceToHandleKbdFocus(); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
821 } |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
822 }); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
823 kbdButtons.add(winButton); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
824 |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
825 JToggleButton ctrlButton = buttonsBar.createToggleButton("ctrl", "Ctrl Lock", |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
826 new ItemListener() { |
314 | 827 @Override |
828 public void itemStateChanged(ItemEvent e) { | |
829 if (e.getStateChange() == ItemEvent.SELECTED) { | |
830 context.sendMessage(new KeyEventMessage(Keymap.K_CTRL_LEFT, true)); | |
831 } else { | |
832 context.sendMessage(new KeyEventMessage(Keymap.K_CTRL_LEFT, false)); | |
833 } | |
834 setSurfaceToHandleKbdFocus(); | |
835 } | |
836 }); | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
837 kbdButtons.add(ctrlButton); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
838 |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
839 JToggleButton altButton = buttonsBar.createToggleButton("alt", "Alt Lock", |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
840 new ItemListener() { |
314 | 841 @Override |
842 public void itemStateChanged(ItemEvent e) { | |
843 if (e.getStateChange() == ItemEvent.SELECTED) { | |
844 context.sendMessage(new KeyEventMessage(Keymap.K_ALT_LEFT, true)); | |
845 } else { | |
846 context.sendMessage(new KeyEventMessage(Keymap.K_ALT_LEFT, false)); | |
847 } | |
848 setSurfaceToHandleKbdFocus(); | |
849 } | |
850 }); | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
851 kbdButtons.add(altButton); |
107 | 852 |
406
0eea469c6349
Add ScreenChangeSelectionPanel
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
405
diff
changeset
|
853 final SwingViewerWindow viewerWindow = this; |
72 | 854 JButton screenButton = buttonsBar.createButton("share", "Share my screen", new ActionListener() { |
314 | 855 @Override |
856 public void actionPerformed(ActionEvent e) { | |
301 | 857 ArrayList<Rectangle> rectangles = viewer.getScreenRectangles(); |
408
bbd844c15ab1
Disable screenChangeSelectionPanel if single display
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
407
diff
changeset
|
858 if (rectangles.size() == 1) { // single display |
bbd844c15ab1
Disable screenChangeSelectionPanel if single display
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
407
diff
changeset
|
859 screenChangeRequest(context, 0); |
447 | 860 } else if (rectangles.size() > 1){ // dual display |
408
bbd844c15ab1
Disable screenChangeSelectionPanel if single display
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
407
diff
changeset
|
861 ScreenChangeSelectionPanel selectionPanel = new ScreenChangeSelectionPanel(viewerWindow, context); |
420
0ad52aac3bc3
Send repeat FramebufferUpdateRequest from Timer class
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
417
diff
changeset
|
862 for (int i = 0; i < rectangles.size(); i++) { |
0ad52aac3bc3
Send repeat FramebufferUpdateRequest from Timer class
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
417
diff
changeset
|
863 Rectangle rectangle = rectangles.get(i); |
447 | 864 // int scale = retinaScale(i); |
865 int screenWidth = rectangle.width; // * scale; | |
866 int screenHeight = rectangle.height; // * scale; | |
420
0ad52aac3bc3
Send repeat FramebufferUpdateRequest from Timer class
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
417
diff
changeset
|
867 selectionPanel.checkBox(screenWidth+" X "+screenHeight); |
0ad52aac3bc3
Send repeat FramebufferUpdateRequest from Timer class
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
417
diff
changeset
|
868 } |
408
bbd844c15ab1
Disable screenChangeSelectionPanel if single display
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
407
diff
changeset
|
869 selectionPanel.setButton(); |
bbd844c15ab1
Disable screenChangeSelectionPanel if single display
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
407
diff
changeset
|
870 selectionPanel.visible(); |
351 | 871 } |
284 | 872 } |
61
d9cf08c6415c
During implementation change screen.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
57
diff
changeset
|
873 }); |
107 | 874 |
288 | 875 final JButton adjustHdSizeButton = buttonsBar.createButton("adjust-hd", "Adjust Hd Size", new ActionListener() { |
280
9c5874d0f37e
fix adjustHdSizeButton button, this button send REQUEST_SINGLE_DISPLAY_WIDTH
oc
parents:
279
diff
changeset
|
876 @Override |
9c5874d0f37e
fix adjustHdSizeButton button, this button send REQUEST_SINGLE_DISPLAY_WIDTH
oc
parents:
279
diff
changeset
|
877 public void actionPerformed(ActionEvent e) { |
314 | 878 // adjustHdSizeButton.setSelected(false); |
306 | 879 int singleWidth = viewer.getRfb().getSingleWidth(); |
880 uiSettings.adjustHdSize(singleWidth); | |
280
9c5874d0f37e
fix adjustHdSizeButton button, this button send REQUEST_SINGLE_DISPLAY_WIDTH
oc
parents:
279
diff
changeset
|
881 } |
9c5874d0f37e
fix adjustHdSizeButton button, this button send REQUEST_SINGLE_DISPLAY_WIDTH
oc
parents:
279
diff
changeset
|
882 }); |
9c5874d0f37e
fix adjustHdSizeButton button, this button send REQUEST_SINGLE_DISPLAY_WIDTH
oc
parents:
279
diff
changeset
|
883 |
309 | 884 final JButton fitScreenButton = buttonsBar.createButton("fit-screen", "Fit Screen", new ActionListener() { |
885 @Override | |
886 public void actionPerformed(ActionEvent e) { | |
371 | 887 fitScreen(); |
309 | 888 } |
889 }); | |
890 | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
891 ModifierButtonEventListener modifierButtonListener = new ModifierButtonEventListener(); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
892 modifierButtonListener.addButton(KeyEvent.VK_CONTROL, ctrlButton); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
893 modifierButtonListener.addButton(KeyEvent.VK_ALT, altButton); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
894 surface.addModifierListener(modifierButtonListener); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
895 |
314 | 896 // JButton fileTransferButton = new JButton(Utils.getButtonIcon("file-transfer")); |
897 // fileTransferButton.setMargin(buttonsMargin); | |
898 // buttonBar.add(fileTransferButton); | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
899 |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
900 buttonsBar.createStrut(); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
901 |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
902 buttonsBar.createButton("close", isApplet ? "Disconnect" : "Close", new ActionListener() { |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
903 @Override |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
904 public void actionPerformed(ActionEvent e) { |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
905 if (frame != null) { |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
906 frame.setVisible(false); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
907 frame.dispose(); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
908 } |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
909 presenter.setNeedReconnection(false); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
910 presenter.cancelConnection(); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
911 viewer.closeApp(); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
912 } |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
913 }).setAlignmentX(JComponent.RIGHT_ALIGNMENT); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
914 |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
915 setButtonsBarVisible(true, container); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
916 } |
346 | 917 |
406
0eea469c6349
Add ScreenChangeSelectionPanel
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
405
diff
changeset
|
918 public void screenChangeRequest(ProtocolContext context, int shareScreenNumber) { |
451
65ffb64cfb51
try to fix scroll y in fitScreen
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
450
diff
changeset
|
919 ArrayList<Rectangle> rectangles = viewer.getScreenRectangles(); |
448
344a35b7c47f
send both frame buffer size and selected screen size in Disktop size change (INIT_DATA)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
447
diff
changeset
|
920 Point offset = viewer.getScreenOffset(rectangles); |
443
967aa1f24ba4
fix screen sharing request
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
442
diff
changeset
|
921 Rectangle rectangle1 = rectangles.get(shareScreenNumber); |
967aa1f24ba4
fix screen sharing request
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
442
diff
changeset
|
922 int singleWidth = (int) (rectangle1.getWidth()); |
967aa1f24ba4
fix screen sharing request
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
442
diff
changeset
|
923 int singleHeight = (int) (rectangle1.getHeight()); |
451
65ffb64cfb51
try to fix scroll y in fitScreen
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
450
diff
changeset
|
924 int x = (int) (rectangle1.getX()) + offset.x; // convert double to int |
65ffb64cfb51
try to fix scroll y in fitScreen
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
450
diff
changeset
|
925 int y = (int) (rectangle1.getY()) + offset.y; |
443
967aa1f24ba4
fix screen sharing request
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
442
diff
changeset
|
926 int scale = retinaScale(shareScreenNumber); |
406
0eea469c6349
Add ScreenChangeSelectionPanel
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
405
diff
changeset
|
927 viewer.getRfb().setSingleDisplaySize(singleWidth, singleHeight); |
451
65ffb64cfb51
try to fix scroll y in fitScreen
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
450
diff
changeset
|
928 showScreenInfo("request screen change", 0, x, y, singleWidth, singleHeight, scale); |
420
0ad52aac3bc3
Send repeat FramebufferUpdateRequest from Timer class
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
417
diff
changeset
|
929 |
0ad52aac3bc3
Send repeat FramebufferUpdateRequest from Timer class
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
417
diff
changeset
|
930 if (viewer.getRfb().isTreeManager()) { |
451
65ffb64cfb51
try to fix scroll y in fitScreen
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
450
diff
changeset
|
931 changeVncServer(viewer, x, y, singleWidth * scale, singleHeight * scale, scale, viewer.getRfb().getId()); |
65ffb64cfb51
try to fix scroll y in fitScreen
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
450
diff
changeset
|
932 } |
65ffb64cfb51
try to fix scroll y in fitScreen
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
450
diff
changeset
|
933 if (viewer.getRfb().hasParent()) { |
406
0eea469c6349
Add ScreenChangeSelectionPanel
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
405
diff
changeset
|
934 String adr = viewer.getRfb().getMyAddress(); |
451
65ffb64cfb51
try to fix scroll y in fitScreen
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
450
diff
changeset
|
935 if (scanPort(adr, ConnectionParams.DEFAULT_RFB_PORT)) { |
65ffb64cfb51
try to fix scroll y in fitScreen
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
450
diff
changeset
|
936 // -1 means request to reverse direct connection socket |
65ffb64cfb51
try to fix scroll y in fitScreen
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
450
diff
changeset
|
937 short id = viewer.getRfb().isTreeManager() ? (short) -1 : viewer.getRfb().getId(); |
65ffb64cfb51
try to fix scroll y in fitScreen
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
450
diff
changeset
|
938 context.sendMessage(new ScreenChangeRequest(adr, ConnectionParams.DEFAULT_VNC_ROOT, id, x, y, singleWidth * scale, singleHeight * scale, scale)); |
65ffb64cfb51
try to fix scroll y in fitScreen
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
450
diff
changeset
|
939 } |
406
0eea469c6349
Add ScreenChangeSelectionPanel
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
405
diff
changeset
|
940 } |
0eea469c6349
Add ScreenChangeSelectionPanel
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
405
diff
changeset
|
941 } |
0eea469c6349
Add ScreenChangeSelectionPanel
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
405
diff
changeset
|
942 |
417
c225c7963778
Send screen position
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
412
diff
changeset
|
943 private int retinaScale(int shareScreenNumber) { |
410 | 944 int scale = 1; |
945 GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment(); | |
417
c225c7963778
Send screen position
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
412
diff
changeset
|
946 final GraphicsDevice[] devices = env.getScreenDevices(); |
410 | 947 |
948 try { | |
417
c225c7963778
Send screen position
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
412
diff
changeset
|
949 Field field = devices[shareScreenNumber].getClass().getDeclaredField("scale"); |
410 | 950 |
951 if (field != null) { | |
952 field.setAccessible(true); | |
417
c225c7963778
Send screen position
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
412
diff
changeset
|
953 Object retinaScale = field.get(devices[shareScreenNumber]); |
410 | 954 |
955 if (retinaScale instanceof Integer) { | |
431 | 956 scale = (Integer) retinaScale; |
410 | 957 return scale; |
958 } | |
959 } | |
960 } catch (Exception ignore) {} | |
961 return scale; | |
962 } | |
963 | |
408
bbd844c15ab1
Disable screenChangeSelectionPanel if single display
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
407
diff
changeset
|
964 private boolean scanPort(String adr, int port) { |
407
7cd416d6a152
Show port Error dialog to server change client
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
406
diff
changeset
|
965 try { |
7cd416d6a152
Show port Error dialog to server change client
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
406
diff
changeset
|
966 Socket socket = new Socket(adr, port); |
7cd416d6a152
Show port Error dialog to server change client
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
406
diff
changeset
|
967 socket.close(); |
7cd416d6a152
Show port Error dialog to server change client
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
406
diff
changeset
|
968 return true; |
7cd416d6a152
Show port Error dialog to server change client
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
406
diff
changeset
|
969 } catch (Exception e) { |
7cd416d6a152
Show port Error dialog to server change client
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
406
diff
changeset
|
970 String message = "Please screen sharing settings"; |
7cd416d6a152
Show port Error dialog to server change client
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
406
diff
changeset
|
971 // show error panel |
7cd416d6a152
Show port Error dialog to server change client
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
406
diff
changeset
|
972 presenter.showPortErrorDialog(message); |
7cd416d6a152
Show port Error dialog to server change client
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
406
diff
changeset
|
973 presenter.clearMessage(); |
7cd416d6a152
Show port Error dialog to server change client
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
406
diff
changeset
|
974 return false; |
7cd416d6a152
Show port Error dialog to server change client
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
406
diff
changeset
|
975 } |
7cd416d6a152
Show port Error dialog to server change client
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
406
diff
changeset
|
976 } |
7cd416d6a152
Show port Error dialog to server change client
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
406
diff
changeset
|
977 |
431 | 978 /** |
451
65ffb64cfb51
try to fix scroll y in fitScreen
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
450
diff
changeset
|
979 * change screen viewer scale to fit the selected server screen size in multi screens |
431 | 980 */ |
317 | 981 public void fitScreen() { |
982 ArrayList<Rectangle> rectangles = viewer.getScreenRectangles(); | |
435
4ac83ab4be81
find our screen on fitScreen
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
434
diff
changeset
|
983 if (rectangles.size()<=0) return; // no screens, nothing to do |
4ac83ab4be81
find our screen on fitScreen
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
434
diff
changeset
|
984 |
4ac83ab4be81
find our screen on fitScreen
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
434
diff
changeset
|
985 // find which screen we are on |
4ac83ab4be81
find our screen on fitScreen
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
434
diff
changeset
|
986 Point thisScreenLocation = frame.getLocation(); |
444
9a938b714c6b
fix fitScreen (remove all retina scale stuff)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
443
diff
changeset
|
987 int thisScreenNumber = 0; |
435
4ac83ab4be81
find our screen on fitScreen
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
434
diff
changeset
|
988 for(Rectangle rect : rectangles) { |
4ac83ab4be81
find our screen on fitScreen
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
434
diff
changeset
|
989 if ( rect.contains(thisScreenLocation) ) break; |
444
9a938b714c6b
fix fitScreen (remove all retina scale stuff)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
443
diff
changeset
|
990 thisScreenNumber++; |
435
4ac83ab4be81
find our screen on fitScreen
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
434
diff
changeset
|
991 } |
444
9a938b714c6b
fix fitScreen (remove all retina scale stuff)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
443
diff
changeset
|
992 int thisScreenWidth = (int) rectangles.get(thisScreenNumber).getWidth(); |
9a938b714c6b
fix fitScreen (remove all retina scale stuff)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
443
diff
changeset
|
993 int thisScreenHeight = (int) rectangles.get(thisScreenNumber).getHeight(); |
450
aa3822daf75a
reintroduce retina code (send retina scaled screen size on Screen Change Request)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
449
diff
changeset
|
994 int thisRetinaScale = retinaScale(thisScreenNumber); |
431 | 995 |
438 | 996 final int thatScreenX = presenter.getX(); |
997 final int thatScreenY = presenter.getY(); | |
450
aa3822daf75a
reintroduce retina code (send retina scaled screen size on Screen Change Request)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
449
diff
changeset
|
998 int thatRetinaScale = presenter.getRetinaScale(); |
448
344a35b7c47f
send both frame buffer size and selected screen size in Disktop size change (INIT_DATA)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
447
diff
changeset
|
999 final int thatScreenWidth = viewer.getRfb().getSingleWidth(); |
344a35b7c47f
send both frame buffer size and selected screen size in Disktop size change (INIT_DATA)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
447
diff
changeset
|
1000 final int thatScreenHeight = viewer.getRfb().getSingleHeight(); |
453
d0ca1be5c47c
show debag message for 13inch retina
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
452
diff
changeset
|
1001 showScreenInfo("that", 0, thatScreenX, thatScreenY, thatScreenWidth, thatScreenHeight, thatRetinaScale); |
d0ca1be5c47c
show debag message for 13inch retina
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
452
diff
changeset
|
1002 System.out.println("that FB x:" + viewer.getRfb().getContext().getFbWidth() + " y:" + viewer.getRfb().getContext().getFbHeight()); |
442 | 1003 |
438 | 1004 frame.setSize(thisScreenWidth, thisScreenHeight); |
449
d5bcae14c2cd
reuse FrameUpdateRequest for all code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
448
diff
changeset
|
1005 double scale = uiSettings.fitScreen(thisScreenWidth, thisScreenHeight, thatScreenWidth, thatScreenHeight); |
d5bcae14c2cd
reuse FrameUpdateRequest for all code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
448
diff
changeset
|
1006 // final Rectangle visible = new Rectangle((int)(thatScreenX*scale),(int)(thatScreenY*scale),(int)(thatScreenWidth*scale)-1,(int)(thatScreenHeight*scale)-1); |
453
d0ca1be5c47c
show debag message for 13inch retina
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
452
diff
changeset
|
1007 showScreenInfo("this", thisScreenNumber, 0, 0,thisScreenWidth, thisScreenHeight, thisRetinaScale); |
449
d5bcae14c2cd
reuse FrameUpdateRequest for all code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
448
diff
changeset
|
1008 final int scrollx = (int)(thatScreenX * scale); |
452
e94489c9a0bb
fitScreen correctly worked on multi screen
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
451
diff
changeset
|
1009 final int scrolly = (int)(thatScreenY * scale); |
453
d0ca1be5c47c
show debag message for 13inch retina
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
452
diff
changeset
|
1010 System.out.println("thisScrollScale: " + scale + " xmax:"+scroller.getHorizontalScrollBar().getMaximum() + " scrollx:"+scrollx); |
d0ca1be5c47c
show debag message for 13inch retina
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
452
diff
changeset
|
1011 System.out.println("thisScrollScale: " + scale + " ymax:"+scroller.getVerticalScrollBar().getMaximum() + " scrolly:"+scrolly); |
444
9a938b714c6b
fix fitScreen (remove all retina scale stuff)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
443
diff
changeset
|
1012 SwingUtilities.invokeLater(new Runnable() { |
432 | 1013 public void run() { |
449
d5bcae14c2cd
reuse FrameUpdateRequest for all code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
448
diff
changeset
|
1014 scroller.getHorizontalScrollBar().setValue(scrollx); |
d5bcae14c2cd
reuse FrameUpdateRequest for all code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
448
diff
changeset
|
1015 scroller.getVerticalScrollBar().setValue(scrolly); |
444
9a938b714c6b
fix fitScreen (remove all retina scale stuff)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
443
diff
changeset
|
1016 // scroller.scrollRectToVisible(visible); // this does not work |
432 | 1017 } |
1018 }); | |
317 | 1019 } |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1020 |
444
9a938b714c6b
fix fitScreen (remove all retina scale stuff)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
443
diff
changeset
|
1021 private void showScreenInfo(String name, int thisScreenNumber,int thisScreenX, int thisScreenY, int thisScreenWidth, int thisScreenHeight, int retinaScale) { |
9a938b714c6b
fix fitScreen (remove all retina scale stuff)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
443
diff
changeset
|
1022 System.out.println(name + "RetinaScale:" + retinaScale); |
9a938b714c6b
fix fitScreen (remove all retina scale stuff)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
443
diff
changeset
|
1023 System.out.println(name + "Screen:" + thisScreenNumber); |
9a938b714c6b
fix fitScreen (remove all retina scale stuff)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
443
diff
changeset
|
1024 System.out.println(name + "ScreenX:" + thisScreenX); |
9a938b714c6b
fix fitScreen (remove all retina scale stuff)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
443
diff
changeset
|
1025 System.out.println(name + "ScreenY:" + thisScreenY); |
9a938b714c6b
fix fitScreen (remove all retina scale stuff)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
443
diff
changeset
|
1026 System.out.println(name + "ScreenWidth:" + thisScreenWidth); |
9a938b714c6b
fix fitScreen (remove all retina scale stuff)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
443
diff
changeset
|
1027 System.out.println(name + "SreenHeight:" + thisScreenHeight); |
9a938b714c6b
fix fitScreen (remove all retina scale stuff)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
443
diff
changeset
|
1028 System.out.println(); |
9a938b714c6b
fix fitScreen (remove all retina scale stuff)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
443
diff
changeset
|
1029 } |
9a938b714c6b
fix fitScreen (remove all retina scale stuff)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
443
diff
changeset
|
1030 |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1031 private void sendCtrlAltDel(ProtocolContext context) { |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1032 context.sendMessage(new KeyEventMessage(Keymap.K_CTRL_LEFT, true)); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1033 context.sendMessage(new KeyEventMessage(Keymap.K_ALT_LEFT, true)); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1034 context.sendMessage(new KeyEventMessage(Keymap.K_DELETE, true)); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1035 context.sendMessage(new KeyEventMessage(Keymap.K_DELETE, false)); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1036 context.sendMessage(new KeyEventMessage(Keymap.K_ALT_LEFT, false)); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1037 context.sendMessage(new KeyEventMessage(Keymap.K_CTRL_LEFT, false)); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1038 } |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1039 |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1040 private void sendWinKey(ProtocolContext context) { |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1041 context.sendMessage(new KeyEventMessage(Keymap.K_CTRL_LEFT, true)); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1042 context.sendMessage(new KeyEventMessage(Keymap.K_ESCAPE, true)); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1043 context.sendMessage(new KeyEventMessage(Keymap.K_ESCAPE, false)); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1044 context.sendMessage(new KeyEventMessage(Keymap.K_CTRL_LEFT, false)); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1045 } |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1046 |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1047 @Override |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1048 public void settingsChanged(SettingsChangedEvent e) { |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1049 if (ProtocolSettings.isRfbSettingsChangedFired(e)) { |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1050 ProtocolSettings settings = (ProtocolSettings) e.getSource(); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1051 setEnabledKbdButtons( ! settings.isViewOnly()); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1052 } |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1053 } |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1054 |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1055 private void setEnabledKbdButtons(boolean enabled) { |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1056 if (kbdButtons != null) { |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1057 for (JComponent b : kbdButtons) { |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1058 b.setEnabled(enabled); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1059 } |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1060 } |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1061 } |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1062 |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1063 private void showOptionsDialog() { |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1064 OptionsDialog optionsDialog = new OptionsDialog(frame); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1065 optionsDialog.initControlsFromSettings(rfbSettings, uiSettings, false); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1066 optionsDialog.setVisible(true); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1067 presenter.saveHistory(); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1068 } |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1069 |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1070 private void showConnectionInfoMessage() { |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1071 StringBuilder message = new StringBuilder(); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1072 message.append("TightVNC Viewer v.").append(Viewer.ver()).append("\n\n"); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1073 message.append("Connected to: ").append(remoteDesktopName).append("\n"); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1074 message.append("Host: ").append(connectionString).append("\n\n"); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1075 |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1076 message.append("Desktop geometry: ") |
314 | 1077 .append(String.valueOf(surface.getWidth())) |
1078 .append(" \u00D7 ") // multiplication sign | |
1079 .append(String.valueOf(surface.getHeight())).append("\n"); | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1080 message.append("Color format: ") |
314 | 1081 .append(String.valueOf(Math.round(Math.pow(2, workingProtocol.getPixelFormat().depth)))) |
1082 .append(" colors (") | |
1083 .append(String.valueOf(workingProtocol.getPixelFormat().depth)) | |
1084 .append(" bits)\n"); | |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1085 message.append("Current protocol version: ") |
314 | 1086 .append(workingProtocol.getProtocolVersion()); |
57
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1087 if (workingProtocol.isTight()) { |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1088 message.append("tight"); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1089 } |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1090 message.append("\n"); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1091 |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1092 JOptionPane infoPane = new JOptionPane(message.toString(), JOptionPane.INFORMATION_MESSAGE); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1093 final JDialog infoDialog = infoPane.createDialog(frame, "VNC connection info"); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1094 infoDialog.setModalityType(Dialog.ModalityType.MODELESS); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1095 infoDialog.setVisible(true); |
17b702648079
version2.7.2 original version.
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1096 } |
169 | 1097 |
314 | 1098 public void setVisible(boolean b) { |
1099 frame.setVisible(b); | |
1100 } | |
292 | 1101 |
427
ed15f0bd8dfa
Remove shareScrrenNumber for ScreenChangeRequest Message
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
425
diff
changeset
|
1102 private void changeVncServer(ViewerInterface viewer, int x, int y, int width, int height, int scale, short id) { |
351 | 1103 String localhost = "127.0.0.1"; // InetAddress.getLocalHost().getHostName() |
292 | 1104 try { |
427
ed15f0bd8dfa
Remove shareScrrenNumber for ScreenChangeRequest Message
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
425
diff
changeset
|
1105 viewer.getRfb().changeVNCServer(viewer, localhost, ConnectionParams.DEFAULT_RFB_PORT, x, y, width, height, scale, id, null, null); |
292 | 1106 } catch (Exception e1) { |
1107 System.out.println("can't change server :" + e1.getMessage()); | |
1108 } | |
1109 } | |
1110 | |
392 | 1111 public UiSettings getUiSettings() { |
1112 return uiSettings; | |
1113 } | |
313 | 1114 } |