11package swingjs .plaf ;
22
33import javajs .api .JSFunction ;
4+
5+ import java .awt .Color ;
6+ import java .awt .Dimension ;
47import java .awt .Insets ;
58import java .awt .Rectangle ;
69import java .awt .Toolkit ;
1215import javax .swing .JComponent ;
1316import javax .swing .JFrame ;
1417import javax .swing .LookAndFeel ;
18+ import javax .swing .SwingUtilities ;
1519
1620import swingjs .JSUtil ;
1721import swingjs .api .js .DOMNode ;
@@ -40,6 +44,11 @@ public class JSFrameUI extends JSWindowUI implements FramePeer {
4044 private int state ;
4145 private boolean resizeable ;
4246 private DOMNode closerWrap ;
47+ protected boolean isModal ;
48+ private DOMNode modalNode ;
49+ protected int zModal ;
50+
51+
4352
4453 public JSFrameUI () {
4554 frameZ += 1000 ;
@@ -58,11 +67,11 @@ public JSFrameUI() {
5867 @ Override
5968 protected DOMNode updateDOMNode () {
6069 if (domNode == null ) {
61- // we have to give it some sort of border, or it blends in with the page too much.
70+ // we have to give it some sort of border, or it blends in with the
71+ // page too much.
6272 // a Windows applet has a sort of fuzzy shadowy border
6373 domNode = frameNode = newDOMObject ("div" , id + "_frame" );
64- DOMNode .setStyles (frameNode , "box-shadow" ,
65- "0px 0px 10px gray" , "box-sizing" , "content-box" );
74+ DOMNode .setStyles (frameNode , "box-shadow" , "0px 0px 10px gray" , "box-sizing" , "content-box" );
6675 setWindowClass (frameNode );
6776 int w = c .getWidth ();
6877 int h = c .getHeight ();
@@ -76,37 +85,43 @@ protected DOMNode updateDOMNode() {
7685 setJ2sMouseHandler (frameNode );
7786 titleBarNode = newDOMObject ("div" , id + "_titlebar" );
7887 DOMNode .setPositionAbsolute (titleBarNode , 0 , 0 );
79- DOMNode .setStyles (titleBarNode , "background-color" , "#E0E0E0" , "height" ,
80- "20px" , "font-size" , "14px" , "font-family" , "sans-serif" ,
81- "font-weight" , "bold" // ,
88+ DOMNode .setStyles (titleBarNode , "background-color" , "#E0E0E0" , "height" , "20px" , "font-size" , "14px" ,
89+ "font-family" , "sans-serif" , "font-weight" , "bold" // ,
8290 // "border-style", "solid",
8391 // "border-width", "1px"
84- );
92+ );
8593
8694 titleNode = newDOMObject ("label" , id + "_title" );
8795 DOMNode .setPositionAbsolute (titleNode , 2 , 4 );
8896 DOMNode .setStyles (titleNode , "height" , "20px" );
8997
90-
9198 closerWrap = newDOMObject ("div" , id + "_closerwrap" );
9299 DOMNode .setPositionAbsolute (closerWrap , 0 , 0 );
93100 DOMNode .setStyles (closerWrap , "text-align" , "right" );
94101
95102 closerNode = newDOMObject ("label" , id + "_closer" , "innerHTML" , "X" );
96- DOMNode .setStyles (closerNode , "width" , "20px" , "height" , "20px" ,
97- "position" , "absolute" , "text-align" , "center" , "right" , "0px" );
98- DOMNode .addJqueryHandledEvent (this , closerNode ,
99- "click mouseenter mouseout" );
103+ DOMNode .setStyles (closerNode , "width" , "20px" , "height" , "20px" , "position" , "absolute" , "text-align" ,
104+ "center" , "right" , "0px" );
105+ DOMNode .addJqueryHandledEvent (this , closerNode , "click mouseenter mouseout" );
100106
101107 frameNode .appendChild (titleBarNode );
102108
109+ if (isModal ) {
110+ modalNode = DOMNode .createElement ("div" , id + "_modaldiv" );
111+ Dimension screen = Toolkit .getDefaultToolkit ().getScreenSize ();
112+ DOMNode .setStyles (modalNode , "background" , toCSSString (new Color (100 , 100 , 100 , 100 )));
113+ DOMNode .setPositionAbsolute (modalNode , 0 , 0 );
114+ DOMNode .setSize (modalNode , screen .width , screen .height );
115+ }
103116 // we have to wait until the frame is wrapped.
104117 @ SuppressWarnings ("unused" )
105118 DOMNode fnode = frameNode ;
119+
106120 JSFunction fGetFrameParent = null ;
107121 /**
108122 * @j2sNative var me = this; fGetFrameParent =
109- * function(){me.notifyFrameMoved();return $(fnode).parent()}
123+ * function(){me.notifyFrameMoved();return
124+ * $(fnode).parent()}
110125 */
111126 {
112127 }
@@ -116,8 +131,8 @@ protected DOMNode updateDOMNode() {
116131 closerWrap .appendChild (closerNode );
117132 Insets s = getInsets ();
118133 DOMNode .setPositionAbsolute (frameNode , 0 , 0 );
119- DOMNode .setAttrs (frameNode , "width" , "" + frame .getWidth () + s .left
120- + s . right , "height" , "" + frame .getHeight () + s .top + s .bottom );
134+ DOMNode .setAttrs (frameNode , "width" , "" + frame .getWidth () + s .left + s . right , "height" ,
135+ "" + frame .getHeight () + s .top + s .bottom );
121136 containerNode = frameNode ;
122137 }
123138 String strColor = toCSSString (c .getBackground ());
@@ -272,4 +287,18 @@ public void propertyChange(PropertyChangeEvent e) {
272287 }
273288
274289
290+ @ Override
291+ public void setVisible (boolean b ) {
292+ super .setVisible (b );
293+ if (isModal ) {
294+ if (b ) {
295+ $ (body ).after (modalNode );
296+ int z = getZIndex (null ) - 1 ;
297+ DOMNode .setStyles (modalNode , "z-index" , "" + z );
298+ }
299+ DOMNode .setVisible (modalNode , b );
300+ }
301+
302+ }
303+
275304}
0 commit comments