Skip to content

Commit 69e1a56

Browse files
committed
Добавлен WindowListener
1 parent 4185fd5 commit 69e1a56

File tree

4 files changed

+117
-5
lines changed

4 files changed

+117
-5
lines changed

src/main/java/com/annimon/ownlang/modules/forms/ContainerValue.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ private void init() {
2929
set("getComponentCount", voidToInt(container::getComponentCount));
3030
set("isFocusCycleRoot", voidToBoolean(container::isFocusCycleRoot));
3131
set("isValidateRoot", voidToBoolean(container::isValidateRoot));
32+
set("setFocusCycleRoot", booleanToVoid(container::setFocusCycleRoot));
3233
set("setLayout", new FunctionValue(this::setLayout));
3334
}
3435

src/main/java/com/annimon/ownlang/modules/forms/JFrameValue.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import static com.annimon.ownlang.lib.Converters.*;
44
import javax.swing.JFrame;
55

6-
public class JFrameValue extends ContainerValue {
6+
public class JFrameValue extends WindowValue {
77

88
final JFrame frame;
99

@@ -14,13 +14,10 @@ public JFrameValue(JFrame frame) {
1414
}
1515

1616
private void init() {
17-
set("dispose", voidToVoid(frame::dispose));
1817
set("getTitle", voidToString(frame::getTitle));
18+
set("getResizable", voidToBoolean(frame::isResizable));
1919
set("getDefaultCloseOperation", voidToInt(frame::getDefaultCloseOperation));
20-
set("pack", voidToVoid(frame::pack));
21-
set("setAlwaysOnTop", booleanOptToVoid(frame::setAlwaysOnTop));
2220
set("setDefaultCloseOperation", intToVoid(frame::setDefaultCloseOperation));
23-
set("setLocationByPlatform", booleanOptToVoid(frame::setLocationByPlatform));
2421
set("setResizable", booleanOptToVoid(frame::setResizable));
2522
set("setTitle", stringToVoid(frame::setTitle));
2623
}
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
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+
}

src/main/java/com/annimon/ownlang/modules/forms/forms.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.annimon.ownlang.lib.*;
44
import com.annimon.ownlang.modules.Module;
55
import java.awt.BorderLayout;
6+
import java.awt.event.WindowEvent;
67
import javax.swing.BoxLayout;
78
import javax.swing.JFrame;
89
import javax.swing.ScrollPaneConstants;
@@ -92,6 +93,21 @@ public static void initConstants() {
9293
box.set("X_AXIS", NumberValue.of(BoxLayout.X_AXIS));
9394
box.set("Y_AXIS", NumberValue.of(BoxLayout.Y_AXIS));
9495
Variables.define("BoxLayout", box);
96+
97+
final MapValue windowEvent = new MapValue(4);
98+
windowEvent.set("WINDOW_FIRST", NumberValue.of(WindowEvent.WINDOW_FIRST));
99+
windowEvent.set("WINDOW_OPENED", NumberValue.of(WindowEvent.WINDOW_OPENED));
100+
windowEvent.set("WINDOW_CLOSING", NumberValue.of(WindowEvent.WINDOW_CLOSING));
101+
windowEvent.set("WINDOW_CLOSED", NumberValue.of(WindowEvent.WINDOW_CLOSED));
102+
windowEvent.set("WINDOW_ICONIFIED", NumberValue.of(WindowEvent.WINDOW_ICONIFIED));
103+
windowEvent.set("WINDOW_DEICONIFIED", NumberValue.of(WindowEvent.WINDOW_DEICONIFIED));
104+
windowEvent.set("WINDOW_ACTIVATED", NumberValue.of(WindowEvent.WINDOW_ACTIVATED));
105+
windowEvent.set("WINDOW_DEACTIVATED", NumberValue.of(WindowEvent.WINDOW_DEACTIVATED));
106+
windowEvent.set("WINDOW_GAINED_FOCUS", NumberValue.of(WindowEvent.WINDOW_GAINED_FOCUS));
107+
windowEvent.set("WINDOW_LOST_FOCUS", NumberValue.of(WindowEvent.WINDOW_LOST_FOCUS));
108+
windowEvent.set("WINDOW_STATE_CHANGED", NumberValue.of(WindowEvent.WINDOW_STATE_CHANGED));
109+
windowEvent.set("WINDOW_LAST", NumberValue.of(WindowEvent.WINDOW_LAST));
110+
Variables.define("WindowEvent", windowEvent);
95111
}
96112

97113
@Override

0 commit comments

Comments
 (0)