From 9219c82b9ed65ea96d7fee34b19d3ee18601bf47 Mon Sep 17 00:00:00 2001 From: Adam Tkac Date: Thu, 11 Nov 2010 14:32:24 +0000 Subject: [PATCH] [Development] java: Add simple Message Box implementation. (Martin Koegler) git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4195 3789f03b-4d11-0410-bbf8-ca57d06f2519 --- java/src/com/tigervnc/vncviewer/Dialog.java | 80 ++++++++++++++++++ java/src/com/tigervnc/vncviewer/Makefile | 6 +- .../com/tigervnc/vncviewer/MessageBox.java | 82 +++++++++++++++++++ 3 files changed, 166 insertions(+), 2 deletions(-) create mode 100644 java/src/com/tigervnc/vncviewer/Dialog.java create mode 100644 java/src/com/tigervnc/vncviewer/MessageBox.java diff --git a/java/src/com/tigervnc/vncviewer/Dialog.java b/java/src/com/tigervnc/vncviewer/Dialog.java new file mode 100644 index 00000000..ba06b540 --- /dev/null +++ b/java/src/com/tigervnc/vncviewer/Dialog.java @@ -0,0 +1,80 @@ +/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved. + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + */ +// +// This Dialog class implements a pop-up dialog. This is needed because +// apparently you can't use the standard AWT Dialog from within an applet. The +// dialog can be made visible by calling its showDialog() method. Dialogs can +// be modal or non-modal. For a modal dialog box, the showDialog() method must +// be called from a thread other than the GUI thread, and it only returns when +// the dialog box has been dismissed. For a non-modal dialog box, the +// showDialog() method returns immediately. + +package com.tigervnc.vncviewer; + +import java.awt.*; + +class Dialog extends Frame { + + public Dialog(boolean modal_) { modal = modal_; } + + public boolean showDialog() { + ok = false; + done = false; + initDialog(); + Dimension dpySize = getToolkit().getScreenSize(); + Dimension mySize = getSize(); + int x = (dpySize.width - mySize.width) / 2; + int y = (dpySize.height - mySize.height) / 2; + setLocation(x, y); + show(); + if (!modal) return true; + synchronized(this) { + try { + while (!done) + wait(); + } catch (InterruptedException e) { + } + } + return ok; + } + + public void endDialog() { + done = true; + hide(); + if (modal) { + synchronized (this) { + notify(); + } + } + } + + // initDialog() can be overridden in a derived class. Typically it is used + // to make sure that checkboxes have the right state, etc. + public void initDialog() {} + + public boolean handleEvent(Event event) { + if (event.id == Event.WINDOW_DESTROY) { + ok = false; + endDialog(); + } + return super.handleEvent(event); + } + + protected boolean ok, done; + boolean modal; +} diff --git a/java/src/com/tigervnc/vncviewer/Makefile b/java/src/com/tigervnc/vncviewer/Makefile index 46752ab1..0dba158e 100644 --- a/java/src/com/tigervnc/vncviewer/Makefile +++ b/java/src/com/tigervnc/vncviewer/Makefile @@ -18,7 +18,8 @@ CLASSES = VncViewer.class RfbProto.class AuthPanel.class VncCanvas.class \ RecordingFrame.class SessionRecorder.class \ SocketFactory.class HTTPConnectSocketFactory.class \ HTTPConnectSocket.class ReloginPanel.class \ - InStream.class MemInStream.class ZlibInStream.class + InStream.class MemInStream.class ZlibInStream.class \ + Dialog.class MessageBox.class SOURCES = VncViewer.java RfbProto.java AuthPanel.java VncCanvas.java \ VncCanvas2.java \ @@ -27,7 +28,8 @@ SOURCES = VncViewer.java RfbProto.java AuthPanel.java VncCanvas.java \ RecordingFrame.java SessionRecorder.java \ SocketFactory.java HTTPConnectSocketFactory.java \ HTTPConnectSocket.java ReloginPanel.java \ - InStream.java MemInStream.java ZlibInStream.java + InStream.java MemInStream.java ZlibInStream.java \ + Dialog.java MessageBox.java all: $(CLASSES) $(ARCHIVE) diff --git a/java/src/com/tigervnc/vncviewer/MessageBox.java b/java/src/com/tigervnc/vncviewer/MessageBox.java new file mode 100644 index 00000000..123a970b --- /dev/null +++ b/java/src/com/tigervnc/vncviewer/MessageBox.java @@ -0,0 +1,82 @@ +/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved. + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + */ + +package com.tigervnc.vncviewer; + +import java.awt.*; + +public class MessageBox extends com.tigervnc.vncviewer.Dialog { + + public static final int MB_OK = 0; + public static final int MB_OKAYCANCEL = 1; + public static final int MB_YESNO = 2; + + public MessageBox(String msg, int flags) { + super(true); + GridLayout g = new GridLayout(0,1); + setLayout(g); + while (true) { + int i = msg.indexOf('\n'); + int j = (i==-1) ? msg.length() : i; + add(new Label(msg.substring(0, j))); + if (i==-1) break; + msg = msg.substring(j+1); + } + Panel p2 = new Panel(); + switch (flags & 3) { + case MB_OKAYCANCEL: + cancelButton = new Button("Cancel"); + // No break + case MB_OK: + okButton = new Button("OK"); + break; + case MB_YESNO: + okButton = new Button("Yes"); + cancelButton = new Button("No"); + break; + } + if (okButton != null) p2.add(okButton); + if (cancelButton != null) p2.add(cancelButton); + add("South", p2); + pack(); + showDialog(); + } + + public MessageBox(String msg) { + this(msg, MB_OK); + } + + + public boolean action(Event event, Object arg) { + if (event.target == okButton) { + ok = true; + endDialog(); + } else if (event.target == cancelButton) { + ok = false; + endDialog(); + } + return true; + } + + Button okButton, cancelButton; + + public boolean result() { + return ok; + } + +} -- 2.39.5