Skip to content

Commit 090f3a5

Browse files
committed
Добавлен JProgressBar
1 parent 7775b26 commit 090f3a5

File tree

6 files changed

+144
-14
lines changed

6 files changed

+144
-14
lines changed

examples/forms/progressbar.own

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
use "forms"
2+
3+
label = newLabel("Current value: 50")
4+
progressBar = newProgressBar()
5+
progressBar.setValue(50)
6+
progressBar.onChange(def() {
7+
label.setText("Current value: " + progressBar.getValue())
8+
})
9+
minusBtn = newButton("-1")
10+
minusBtn.onClick(def() = changeProgress(-1))
11+
plusBtn = newButton("+1")
12+
plusBtn.onClick(def() = changeProgress(1))
13+
14+
def changeProgress(delta) {
15+
value = progressBar.getValue() + delta
16+
if (value > 100) value = 100
17+
else if (value < 0) value = 0
18+
progressBar.setValue(value)
19+
}
20+
21+
window = newWindow("ProgressBar example")
22+
window.add(minusBtn, BorderLayout.WEST)
23+
window.add(progressBar, BorderLayout.CENTER)
24+
window.add(plusBtn, BorderLayout.EAST)
25+
window.add(label, BorderLayout.SOUTH)
26+
window.pack()
27+
window.setLocationByPlatform()
28+
window.setResizable(false)
29+
window.setVisible()

src/main/java/com/annimon/ownlang/lib/Converters.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,18 @@ public static FunctionValue intToVoid(IntToVoidFunction f) {
158158
return NumberValue.ZERO;
159159
});
160160
}
161+
162+
public static FunctionValue intOptToVoid(VoidToVoidFunction f1, IntToVoidFunction f2) {
163+
return new FunctionValue(args -> {
164+
Arguments.checkOrOr(0, 1, args.length);
165+
if (args.length == 0) {
166+
f1.apply();
167+
} else {
168+
f2.apply(args[0].asInt());
169+
}
170+
return NumberValue.ZERO;
171+
});
172+
}
161173

162174
public static FunctionValue intToLong(IntToLongFunction f) {
163175
return new FunctionValue(args -> {
@@ -168,7 +180,7 @@ public static FunctionValue intToLong(IntToLongFunction f) {
168180

169181
public static FunctionValue int2ToVoid(Int2ToVoidFunction f) {
170182
return new FunctionValue(args -> {
171-
Arguments.check(4, args.length);
183+
Arguments.check(2, args.length);
172184
f.apply(args[0].asInt(),
173185
args[1].asInt());
174186
return NumberValue.ZERO;

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

Lines changed: 45 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
import javax.swing.JFrame;
77
import javax.swing.JLabel;
88
import javax.swing.JPanel;
9+
import javax.swing.JProgressBar;
10+
import javax.swing.JTextArea;
911
import javax.swing.JTextField;
1012
import javax.swing.SwingConstants;
1113

@@ -16,15 +18,15 @@ public final class Components {
1618

1719
private Components() { }
1820

19-
static Value newWindow(Value... args) {
21+
static Value newWindow(Value[] args) {
2022
Arguments.checkOrOr(0, 1, args.length);
2123
String title = (args.length == 1) ? args[0].asString() : "";
2224
final JFrame frame = new JFrame(title);
2325
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
2426
return new JFrameValue(frame);
2527
}
2628

27-
static Value newPanel(Value... args) {
29+
static Value newPanel(Value[] args) {
2830
Arguments.checkOrOr(0, 1, args.length);
2931
final JPanel panel = new JPanel();
3032
if (args.length == 1) {
@@ -33,22 +35,57 @@ static Value newPanel(Value... args) {
3335
return new JPanelValue(panel);
3436
}
3537

36-
static Value newButton(Value... args) {
38+
static Value newButton(Value[] args) {
3739
Arguments.checkOrOr(0, 1, args.length);
3840
String text = (args.length == 1) ? args[0].asString() : "";
3941
return new JButtonValue(new JButton(text));
4042
}
4143

42-
static Value newLabel(Value... args) {
44+
static Value newLabel(Value[] args) {
4345
Arguments.checkRange(0, 2, args.length);
4446
String text = (args.length >= 1) ? args[0].asString() : "";
4547
int align = (args.length == 2) ? args[1].asInt() : SwingConstants.LEADING;
4648
return new JLabelValue(new JLabel(text, align));
4749
}
4850

49-
static Value newTextField(Value... args) {
50-
Arguments.checkOrOr(0, 1, args.length);
51-
String text = (args.length == 1) ? args[0].asString() : "";
52-
return new JTextFieldValue(new JTextField(text));
51+
static Value newTextField(Value[] args) {
52+
Arguments.checkRange(0, 2, args.length);
53+
String text = "";
54+
int cols = 0;
55+
switch (args.length) {
56+
case 1: {
57+
text = args[0].asString();
58+
} break;
59+
case 2: {
60+
text = args[0].asString();
61+
cols = args[1].asInt();
62+
} break;
63+
}
64+
return new JTextFieldValue(new JTextField(text, cols));
65+
}
66+
67+
static Value newProgressBar(Value[] args) {
68+
Arguments.checkRange(0, 3, args.length);
69+
boolean isVertical = false;
70+
int min = 0;
71+
int max = 100;
72+
switch (args.length) {
73+
case 1: {
74+
isVertical = args[0].asInt() != 0;
75+
} break;
76+
case 2: {
77+
min = args[0].asInt();
78+
max = args[1].asInt();
79+
} break;
80+
case 3: {
81+
isVertical = args[0].asInt() != 0;
82+
min = args[1].asInt();
83+
max = args[2].asInt();
84+
} break;
85+
}
86+
return new JProgressBarValue(new JProgressBar(
87+
isVertical ? SwingConstants.VERTICAL : SwingConstants.HORIZONTAL,
88+
min, max
89+
));
5390
}
5491
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
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.FunctionValue;
7+
import com.annimon.ownlang.lib.NumberValue;
8+
import com.annimon.ownlang.lib.Value;
9+
import com.annimon.ownlang.lib.ValueUtils;
10+
import javax.swing.JProgressBar;
11+
12+
public class JProgressBarValue extends JComponentValue {
13+
14+
final JProgressBar progressBar;
15+
16+
public JProgressBarValue(JProgressBar progressBar) {
17+
super(19, progressBar);
18+
this.progressBar = progressBar;
19+
init();
20+
}
21+
22+
private void init() {
23+
set("onChange", new FunctionValue(this::addChangeListener));
24+
set("addChangeListener", new FunctionValue(this::addChangeListener));
25+
set("getMinimum", voidToInt(progressBar::getMinimum));
26+
set("getMaximum", voidToInt(progressBar::getMaximum));
27+
set("getOrientation", voidToInt(progressBar::getOrientation));
28+
set("getValue", voidToInt(progressBar::getValue));
29+
set("isBorderPainted", voidToBoolean(progressBar::isBorderPainted));
30+
set("isIndeterminate", voidToBoolean(progressBar::isIndeterminate));
31+
set("isStringPainted", voidToBoolean(progressBar::isStringPainted));
32+
set("getString", voidToString(progressBar::getString));
33+
set("getPercentComplete", voidToDouble(progressBar::getPercentComplete));
34+
35+
set("setMinimum", intToVoid(progressBar::setMinimum));
36+
set("setMaximum", intToVoid(progressBar::setMaximum));
37+
set("setBorderPainted", booleanToVoid(progressBar::setBorderPainted));
38+
set("setIndeterminate", booleanToVoid(progressBar::setIndeterminate));
39+
set("setOrientation", intToVoid(progressBar::setOrientation));
40+
set("setStringPainted", booleanToVoid(progressBar::setStringPainted));
41+
set("setString", stringToVoid(progressBar::setString));
42+
set("setValue", intToVoid(progressBar::setValue));
43+
}
44+
45+
private Value addChangeListener(Value[] args) {
46+
Arguments.check(1, args.length);
47+
final Function action = ValueUtils.consumeFunction(args[0], 0);
48+
progressBar.addChangeListener(e -> action.execute());
49+
return NumberValue.ZERO;
50+
}
51+
}

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public final class LayoutManagers {
1515

1616
private LayoutManagers() { }
1717

18-
static Value borderLayout(Value... args) {
18+
static Value borderLayout(Value[] args) {
1919
Arguments.checkOrOr(0, 2, args.length);
2020
int hgap = (args.length == 2) ? args[0].asInt() : 0;
2121
int vgap = (args.length == 2) ? args[1].asInt() : 0;
@@ -24,15 +24,15 @@ static Value borderLayout(Value... args) {
2424
);
2525
}
2626

27-
static Value boxLayout(Value... args) {
27+
static Value boxLayout(Value[] args) {
2828
Arguments.checkOrOr(1, 2, args.length);
2929
int axis = (args.length == 2) ? args[1].asInt() : BoxLayout.PAGE_AXIS;
3030
return new LayoutManagerValue(
3131
new BoxLayout(((JPanelValue) args[0]).panel, axis)
3232
);
3333
}
3434

35-
static Value cardLayout(Value... args) {
35+
static Value cardLayout(Value[] args) {
3636
Arguments.checkOrOr(0, 2, args.length);
3737
int hgap = (args.length == 2) ? args[0].asInt() : 0;
3838
int vgap = (args.length == 2) ? args[1].asInt() : 0;
@@ -41,7 +41,7 @@ static Value cardLayout(Value... args) {
4141
);
4242
}
4343

44-
static Value gridLayout(Value... args) {
44+
static Value gridLayout(Value[] args) {
4545
Arguments.checkRange(0, 4, args.length);
4646
int rows = 1, cols = 0, hgap = 0, vgap = 0;
4747
switch (args.length) {
@@ -69,7 +69,7 @@ static Value gridLayout(Value... args) {
6969
);
7070
}
7171

72-
static Value flowLayout(Value... args) {
72+
static Value flowLayout(Value[] args) {
7373
Arguments.checkRange(0, 3, args.length);
7474
final int align, hgap, vgap;
7575
switch (args.length) {

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ public void init() {
7575
Functions.set("newButton", Components::newButton);
7676
Functions.set("newLabel", Components::newLabel);
7777
Functions.set("newPanel", Components::newPanel);
78+
Functions.set("newProgressBar", Components::newProgressBar);
7879
Functions.set("newTextField", Components::newTextField);
7980
Functions.set("newWindow", Components::newWindow);
8081

0 commit comments

Comments
 (0)