/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (the "License"). You may not use this file except in compliance * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * ident "%Z%%M% %I% %E% SMI" * * Copyright (c) 2000 by Sun Microsystems, Inc. * All rights reserved. */ /* * Copyright (C) 1996 Active Software, Inc. * All rights reserved. * * @(#) @(#) DialogShadow.java 1.60 - last change made 08/11/97 */ package sunsoft.jws.visual.rt.shadow.java.awt; import sunsoft.jws.visual.rt.base.DesignerAccess; import sunsoft.jws.visual.rt.base.*; import sunsoft.jws.visual.rt.type.AMRef; import sunsoft.jws.visual.rt.awt.RootDialog; import sunsoft.jws.visual.rt.base.Global; import java.awt.*; import java.util.Enumeration; // This class makes the assumption that dialogClass is either null or a // subclass of Frame. No error checking is done here to enforce this. /** * Wraps an AWT widget. The attributes available for this * class are listed below. In the type column, type names beginning * with "sunsoft.jws.visual.rt" have been abbreviated to begin with "rt". * *
name type default value ----------------------------------------------------------------------- frame rt.type.AMRef null modal java.lang.Boolean false resizable java.lang.Boolean true title java.lang.String "Unnamed Dialog" * < /pre> * * modal: when set to true, the dialog's presence(its being visible) * keeps the user from doing anything else in the generated application * until the dialog is popped down. * < p> * Check the super class for additional attributes. * * @see Dialog * @version 1.60, 08/11/97 */ public class DialogShadow extends WindowShadow { protected Frame dialogFrame; public DialogShadow() { attributes.add(/* NOI18N */"frame", /* NOI18N */"sunsoft.jws.visual.rt.type.AMRef", null, CONSTRUCTOR | NONBODY | HIDDEN); attributes.alias(/* NOI18N */"text", /* NOI18N */"title"); attributes.add(/* NOI18N */"title", /* NOI18N */"java.lang.String", /* JSTYLED */ Global.getMsg("sunsoft.jws.visual.rt.shadow.java.awt.DialogShadow.title"), NOEDITOR); attributes.add(/* NOI18N */"modal", /* NOI18N */"java.lang.Boolean", Boolean.FALSE, CONSTRUCTOR); attributes.add(/* NOI18N */"resizable", /* NOI18N */"java.lang.Boolean", Boolean.TRUE, 0); } // // getOnBody // protected Object getOnBody(String key) { if (body instanceof Dialog) return getOnDialogBody(key); else return getOnFrameBody(key); } private Object getOnDialogBody(String key) { Dialog dialog = (Dialog)body; if (key.equals(/* NOI18N */"modal")) { if (isLive()) return new Boolean(dialog.isModal()); else return getFromTable(/* NOI18N */"modal"); } else if (key.equals(/* NOI18N */"resizable")) return (new Boolean(dialog.isResizable())); else if (key.equals(/* NOI18N */"title")) return (dialog.getTitle()); else return (super.getOnBody(key)); } private Object getOnFrameBody(String key) { Frame frame = (Frame)body; if (key.equals(/* NOI18N */"modal")) return (getFromTable(/* NOI18N */"modal")); else if (key.equals(/* NOI18N */"resizable")) return (new Boolean(frame.isResizable())); else if (key.equals(/* NOI18N */"title")) return (frame.getTitle()); else return (super.getOnBody(key)); } // // setOnBody // protected void setOnBody(String key, Object value) { if (body instanceof Dialog) setOnDialogBody(key, value); else setOnFrameBody(key, value); } private void setOnDialogBody(String key, Object value) { Dialog dialog = (Dialog)body; if (key.equals(/* NOI18N */"modal")) return; // cannot set modal once dialog is created else if (key.equals(/* NOI18N */"resizable")) dialog.setResizable(((Boolean)value).booleanValue()); else if (key.equals(/* NOI18N */"title")) dialog.setTitle((String)value); else super.setOnBody(key, value); } private void setOnFrameBody(String key, Object value) { Frame frame = (Frame)body; if (key.equals(/* NOI18N */"modal")) return; // cannot set modal once dialog is created else if (key.equals(/* NOI18N */"resizable")) frame.setResizable(((Boolean)value).booleanValue()); else if (key.equals(/* NOI18N */"title")) frame.setTitle((String)value); else super.setOnBody(key, value); } public void create() { if (!isCreated() && Global.isWindows()) { createBody(); if (!(body instanceof Dialog)) { if (attributes.get(/* NOI18N */"font").flagged(DEFAULT)) { attributes.add(/* NOI18N */"font", /* NOI18N */"java.awt.Font", new Font(/* NOI18N */"Dialog", Font.PLAIN, 12), DONTFETCH); } } } super.create(); } public void createBody() { dialogFrame = getFrame(); // Create the dialog if (!inDesignerRoot()) { boolean modal; if (isLive()) /* JSTYLED */ modal = ((Boolean) getFromTable(/* NOI18N */"modal")).booleanValue(); else modal = false; String title = (String) getFromTable(/* NOI18N */"title"); Dialog dialog = new RootDialog(dialogFrame, title, modal); body = dialog; } else { try { body = DesignerAccess.getDialogClass().newInstance(); } catch (InstantiationException ex) { throw new Error(ex.toString()); } catch (IllegalAccessException ex) { throw new Error(ex.toString()); } } } public void showComponent() { // Call addNotify on our frame if necessary. Need to check for // null because we might not be created yet. if (dialogFrame != null && dialogFrame.getPeer() == null) dialogFrame.addNotify(); super.showComponent(); } protected Frame getFrame() { AMRef ref; FrameShadow frameShadow; Frame frame; // Determine the frame that this dialog hangs off of ref = (AMRef) getFromTable(/* NOI18N */"frame"); if (ref != null) { AttributeManager scope = getForwardingGroup(/* NOI18N */"frame"); if (scope == null) scope = this; frameShadow = (FrameShadow)ref.getRef(scope); if (frameShadow == null) /* JSTYLED */ throw new Error(Global.getMsg("sunsoft.jws.visual.rt.awt.java.awt.DialogShadow.NullFrameShadow")); frame = getFrameBody(frameShadow); } else { frame = lookupFrame(); } if (frame == null) /* JSTYLED */ throw new Error(Global.getMsg("sunsoft.jws.visual.rt.awt.java.awt.DialogShadow.NullFrame")); return frame; } private Frame lookupFrame() { Root root = getRoot(); // Try the main container AttributeManager mgr = root.getMainChild(); if (mgr instanceof Group) mgr = DesignerAccess.getContainer((Group)mgr); if (mgr instanceof FrameShadow) return getFrameBody((FrameShadow)mgr); // Try any other child of the root if we aren't the main container if (mgr != this) { Enumeration e = root.getChildList(); while (e.hasMoreElements()) { mgr = (AttributeManager)e.nextElement(); if (mgr instanceof FrameShadow) { Boolean v = (Boolean)mgr.get(/* NOI18N */"visible"); if (v.booleanValue()) return getFrameBody((FrameShadow)mgr); } } } // Try for a shadow parent of the root FrameShadow frameShadow = lookupGroupFrame(root.getGroup()); if (frameShadow != null) { Boolean v = (Boolean)mgr.get(/* NOI18N */"visible"); if (v.booleanValue()) return getFrameBody(frameShadow); } // Try the toplevel return getGroup().getTopLevel(); } private Frame getFrameBody(FrameShadow frameShadow) { Frame frame = (Frame)frameShadow.getBody(); if (frame == null) { frameShadow.createBody(); frame = (Frame)frameShadow.getBody(); } return frame; } private FrameShadow lookupGroupFrame(Group group) { if (group == null) return null; AttributeManager mgr = DesignerAccess.getContainer(group); if (mgr instanceof FrameShadow) return (FrameShadow)mgr; else return lookupGroupFrame(group.getParentGroup()); } // Overridden AMContainer interfaces public void addChildBody(Shadow child) { if (body != null) { Container cntr = (Container)body; if ((cntr.getLayout() instanceof BorderLayout) && getChildCount() == 1) cntr.add(/* NOI18N */"Center", (Component) child.getBody()); else super.addChildBody(child); } } }