1+ package com .annimon .ownlang .modules .forms ;
2+
3+ import com .annimon .ownlang .lib .Arguments ;
4+ import static com .annimon .ownlang .lib .Converters .*;
5+ import com .annimon .ownlang .lib .Function ;
6+ import com .annimon .ownlang .lib .MapValue ;
7+ import com .annimon .ownlang .lib .NumberValue ;
8+ import com .annimon .ownlang .lib .StringValue ;
9+ import com .annimon .ownlang .lib .Value ;
10+ import com .annimon .ownlang .lib .ValueUtils ;
11+ import java .awt .Window ;
12+ import java .awt .event .WindowEvent ;
13+ import java .awt .event .WindowListener ;
14+
15+ public class WindowValue extends ContainerValue {
16+
17+ private final Window window ;
18+
19+ public WindowValue (int functionsCount , Window window ) {
20+ super (functionsCount + 18 , window );
21+ this .window = window ;
22+ init ();
23+ }
24+
25+ private void init () {
26+ set ("addWindowListener" , this ::addWindowListener );
27+ set ("dispose" , voidToVoid (window ::dispose ));
28+ set ("isActive" , voidToBoolean (window ::isActive ));
29+ set ("isAlwaysOnTop" , voidToBoolean (window ::isAlwaysOnTop ));
30+ set ("isAlwaysOnTopSupported" , voidToBoolean (window ::isAlwaysOnTopSupported ));
31+ set ("isAutoRequestFocus" , voidToBoolean (window ::isAutoRequestFocus ));
32+ set ("isFocusableWindow" , voidToBoolean (window ::isFocusableWindow ));
33+ set ("isFocused" , voidToBoolean (window ::isFocused ));
34+ set ("isLocationByPlatform" , voidToBoolean (window ::isLocationByPlatform ));
35+ set ("isShowing" , voidToBoolean (window ::isShowing ));
36+ set ("getOpacity" , voidToFloat (window ::getOpacity ));
37+ set ("pack" , voidToVoid (window ::pack ));
38+ set ("setAlwaysOnTop" , booleanOptToVoid (window ::setAlwaysOnTop ));
39+ set ("setAutoRequestFocus" , booleanToVoid (window ::setAutoRequestFocus ));
40+ set ("setFocusableWindowState" , booleanToVoid (window ::setFocusableWindowState ));
41+ set ("setLocationByPlatform" , booleanOptToVoid (window ::setLocationByPlatform ));
42+ set ("setOpacity" , floatToVoid (window ::setOpacity ));
43+ set ("toBack" , voidToVoid (window ::toBack ));
44+ set ("toFront" , voidToVoid (window ::toFront ));
45+ }
46+
47+
48+ private Value addWindowListener (Value [] args ) {
49+ Arguments .check (1 , args .length );
50+ final Function action = ValueUtils .consumeFunction (args [0 ], 0 );
51+ window .addWindowListener (new WindowListener () {
52+ @ Override
53+ public void windowOpened (WindowEvent e ) {
54+ handleWindowEvent ("opened" , e );
55+ }
56+
57+ @ Override
58+ public void windowClosing (WindowEvent e ) {
59+ handleWindowEvent ("closing" , e );
60+ }
61+
62+ @ Override
63+ public void windowClosed (WindowEvent e ) {
64+ handleWindowEvent ("closed" , e );
65+ }
66+
67+ @ Override
68+ public void windowIconified (WindowEvent e ) {
69+ handleWindowEvent ("iconified" , e );
70+ }
71+
72+ @ Override
73+ public void windowDeiconified (WindowEvent e ) {
74+ handleWindowEvent ("deiconified" , e );
75+ }
76+
77+ @ Override
78+ public void windowActivated (WindowEvent e ) {
79+ handleWindowEvent ("activated" , e );
80+ }
81+
82+ @ Override
83+ public void windowDeactivated (WindowEvent e ) {
84+ handleWindowEvent ("deactivated" , e );
85+ }
86+
87+ private void handleWindowEvent (String type , final WindowEvent e ) {
88+ final MapValue map = new MapValue (4 );
89+ map .set ("id" , NumberValue .of (e .getID ()));
90+ map .set ("newState" , NumberValue .of (e .getNewState ()));
91+ map .set ("oldState" , NumberValue .of (e .getOldState ()));
92+ map .set ("paramString" , new StringValue (e .paramString ()));
93+ action .execute (new StringValue (type ), map );
94+ }
95+ });
96+ return NumberValue .ZERO ;
97+ }
98+ }
0 commit comments