[prev in list] [next in list] [prev in thread] [next in thread] 

List:       tigervnc-devel
Subject:    [Tigervnc-devel] [PATCH 05/10] Add simple Message Box implementation
From:       Martin Koegler <mkoegler () auto ! tuwien ! ac ! at>
Date:       2010-11-07 16:50:56
Message-ID: 1289148661-24512-6-git-send-email-mkoegler () auto ! tuwien ! ac ! at
[Download RAW message or body]

Signed-off-by: Martin Koegler <mkoegler@auto.tuwien.ac.at>
---
 java/src/com/tigervnc/vncviewer/Dialog.java     |   80 ++++++++++++++++++++++
 java/src/com/tigervnc/vncviewer/Makefile        |    6 +-
 java/src/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 0000000..ba06b54
--- /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 46752ab..0dba158 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 0000000..123a970
--- /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;
+  }
+
+}
-- 
1.5.6.5


------------------------------------------------------------------------------
The Next 800 Companies to Lead America's Growth: New Video Whitepaper
David G. Thomson, author of the best-selling book "Blueprint to a 
Billion" shares his insights and actions to help propel your 
business during the next growth cycle. Listen Now!
http://p.sf.net/sfu/SAP-dev2dev
_______________________________________________
Tigervnc-devel mailing list
Tigervnc-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/tigervnc-devel


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic