Skip to content
This repository was archived by the owner on Feb 9, 2022. It is now read-only.

Commit 1d717a5

Browse files
ExplvExplv
authored andcommitted
- Don't override break manager if already overriden
- Restructure loop task GUI - Add more time units to duration panel (seconds, minutes, hours, days) - Allow duration panel inputs to be decimals e.g. 1.5 hours
1 parent d55a513 commit 1d717a5

16 files changed

+166
-66
lines changed

AIO/src/org/aio/gui/activity_panels/ThievingActivityPanel.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import org.aio.activities.skills.thieving.ThievingActivity;
66
import org.aio.activities.skills.thieving.ThievingObject;
77
import org.aio.activities.skills.thieving.ThievingType;
8-
import org.aio.gui.fields.NumberField;
8+
import org.aio.gui.fields.IntegerField;
99
import org.aio.gui.styled_components.StyledJComboBox;
1010
import org.aio.gui.styled_components.StyledJLabel;
1111
import org.aio.gui.styled_components.StyledJPanel;
@@ -76,7 +76,7 @@ public ThievingActivityPanel() {
7676
hpPercentLabel.setText("HP % To Eat:");
7777
panel4.add(hpPercentLabel);
7878

79-
hpPercentField = new NumberField();
79+
hpPercentField = new IntegerField();
8080
hpPercentField.setColumns(2);
8181
hpPercentField.setEditable(true);
8282
hpPercentField.setEnabled(true);
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package org.aio.gui.document_filters;
2+
3+
import javax.swing.text.AttributeSet;
4+
import javax.swing.text.BadLocationException;
5+
import javax.swing.text.DocumentFilter;
6+
import java.util.regex.Matcher;
7+
import java.util.regex.Pattern;
8+
9+
public class DoubleDocumentFilter extends DocumentFilter {
10+
private static final Pattern DOUBLE_REGEX = Pattern.compile("\\d*(\\.\\d*)?");
11+
12+
@Override
13+
public void replace(DocumentFilter.FilterBypass fb,
14+
int offset,
15+
int length,
16+
String text,
17+
AttributeSet attrs) throws BadLocationException {
18+
19+
Matcher matcher = DOUBLE_REGEX.matcher(text);
20+
21+
if (!matcher.matches()) {
22+
return;
23+
}
24+
25+
super.replace(fb, offset, length, text, attrs);
26+
}
27+
}
Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,28 @@
1-
package org.aio.gui.utils;
1+
package org.aio.gui.document_filters;
22

33
import javax.swing.text.AttributeSet;
44
import javax.swing.text.BadLocationException;
55
import javax.swing.text.DocumentFilter;
66
import java.util.regex.Matcher;
77
import java.util.regex.Pattern;
88

9-
public class NumberDocumentFilter extends DocumentFilter {
9+
public class IntegerDocumentFilter extends DocumentFilter {
1010

1111
private static final Pattern NUMBER_REGEX = Pattern.compile("\\d+");
1212

1313
@Override
14-
public void replace(DocumentFilter.FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException {
14+
public void replace(DocumentFilter.FilterBypass fb,
15+
int offset,
16+
int length,
17+
String text,
18+
AttributeSet attrs) throws BadLocationException {
19+
1520
Matcher matcher = NUMBER_REGEX.matcher(text);
21+
1622
if (!matcher.matches()) {
1723
return;
1824
}
25+
1926
super.replace(fb, offset, length, text, attrs);
2027
}
2128
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package org.aio.gui.fields;
2+
3+
import org.aio.gui.document_filters.DoubleDocumentFilter;
4+
import org.aio.gui.styled_components.StyledJTextField;
5+
import org.aio.gui.utils.ColourScheme;
6+
7+
import javax.swing.*;
8+
import javax.swing.text.AbstractDocument;
9+
import java.awt.*;
10+
import java.awt.event.KeyAdapter;
11+
import java.awt.event.KeyEvent;
12+
13+
public class DoubleField extends StyledJTextField {
14+
public DoubleField() {
15+
((AbstractDocument) getDocument()).setDocumentFilter(new DoubleDocumentFilter());
16+
17+
addKeyListener(new KeyAdapter() {
18+
@Override
19+
public void keyReleased(final KeyEvent e) {
20+
validateField();
21+
}
22+
});
23+
24+
setInputVerifier(new InputVerifier() {
25+
@Override
26+
public boolean verify(final JComponent input) {
27+
return validateField();
28+
}
29+
});
30+
}
31+
32+
private boolean validateField() {
33+
if (getText().trim().isEmpty()) {
34+
setForeground(Color.RED);
35+
return false;
36+
}
37+
38+
try {
39+
Double.parseDouble(getText().trim());
40+
} catch (NumberFormatException e) {
41+
setForeground(Color.RED);
42+
return false;
43+
}
44+
45+
setForeground(ColourScheme.WHITE);
46+
return true;
47+
}
48+
}

AIO/src/org/aio/gui/fields/NumberField.java renamed to AIO/src/org/aio/gui/fields/IntegerField.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,20 @@
22

33
import org.aio.gui.styled_components.StyledJTextField;
44
import org.aio.gui.utils.ColourScheme;
5-
import org.aio.gui.utils.NumberDocumentFilter;
5+
import org.aio.gui.document_filters.IntegerDocumentFilter;
66

77
import javax.swing.*;
88
import javax.swing.text.AbstractDocument;
99
import java.awt.*;
1010
import java.awt.event.KeyAdapter;
1111
import java.awt.event.KeyEvent;
1212

13-
public class NumberField extends StyledJTextField {
13+
public class IntegerField extends StyledJTextField {
1414
private int minValue = -1;
1515
private int maxValue = -1;
1616

17-
public NumberField() {
18-
((AbstractDocument) getDocument()).setDocumentFilter(new NumberDocumentFilter());
17+
public IntegerField() {
18+
((AbstractDocument) getDocument()).setDocumentFilter(new IntegerDocumentFilter());
1919

2020
addKeyListener(new KeyAdapter() {
2121
@Override

AIO/src/org/aio/gui/task_panels/BreakTaskPanel.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,7 @@ public Task toTask() {
4040
return new BreakTask(durationPanel.getSelectedDateTime(), logoutCheckBox.isSelected());
4141
}
4242

43-
int durationMinutes = durationPanel.getDuration();
44-
long durationMS = TimeUnit.MINUTES.toMillis(durationMinutes);
45-
return new BreakTask(durationMS, logoutCheckBox.isSelected());
43+
return new BreakTask(durationPanel.getDurationMS(), logoutCheckBox.isSelected());
4644
}
4745

4846
@Override

AIO/src/org/aio/gui/task_panels/GETaskPanel.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import org.aio.activities.grand_exchange.price_guide.OSRSPriceGuide;
99
import org.aio.activities.grand_exchange.price_guide.RSBuddyPriceGuide;
1010
import org.aio.gui.fields.ItemField;
11-
import org.aio.gui.fields.NumberField;
1211
import org.aio.gui.fields.RSUnitField;
1312
import org.aio.gui.styled_components.StyledJCheckBox;
1413
import org.aio.gui.styled_components.StyledJComboBox;

AIO/src/org/aio/gui/task_panels/LevelTaskPanel.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package org.aio.gui.task_panels;
22

33
import org.aio.activities.activity.ActivityType;
4-
import org.aio.gui.fields.NumberField;
4+
import org.aio.gui.fields.IntegerField;
55
import org.aio.gui.styled_components.StyledJComboBox;
66
import org.aio.gui.styled_components.StyledJLabel;
77
import org.aio.gui.styled_components.StyledJPanel;
@@ -12,8 +12,6 @@
1212
import org.osbot.rs07.api.ui.Skill;
1313

1414
import javax.swing.*;
15-
import javax.swing.border.EtchedBorder;
16-
import javax.swing.border.TitledBorder;
1715
import java.awt.*;
1816

1917
public class LevelTaskPanel extends TaskPanel {
@@ -40,7 +38,7 @@ public class LevelTaskPanel extends TaskPanel {
4038

4139
controls.add(new StyledJLabel("Level:"));
4240

43-
levelField = new NumberField();
41+
levelField = new IntegerField();
4442
levelField.setColumns(2);
4543
controls.add(levelField);
4644

AIO/src/org/aio/gui/task_panels/LoopTaskPanel.java

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package org.aio.gui.task_panels;
22

3-
import org.aio.gui.fields.NumberField;
3+
import org.aio.gui.fields.IntegerField;
44
import org.aio.gui.styled_components.StyledJComboBox;
55
import org.aio.gui.styled_components.StyledJLabel;
66
import org.aio.gui.styled_components.StyledJPanel;
@@ -11,10 +11,7 @@
1111
import org.json.simple.JSONObject;
1212

1313
import javax.swing.*;
14-
import javax.swing.border.EtchedBorder;
15-
import javax.swing.border.TitledBorder;
1614
import java.awt.*;
17-
import java.util.concurrent.TimeUnit;
1815

1916
public class LoopTaskPanel extends TaskPanel {
2017

@@ -26,33 +23,37 @@ public class LoopTaskPanel extends TaskPanel {
2623
LoopTaskPanel(){
2724
super(TaskType.LOOP);
2825

29-
JPanel contentPanel = new StyledJPanel(new BorderLayout());
26+
JPanel contentPanel = new StyledJPanel();
27+
contentPanel.setLayout(new BoxLayout(contentPanel, BoxLayout.PAGE_AXIS));
3028

31-
JPanel controls = new StyledJPanel(new FlowLayout(FlowLayout.LEFT, 5, 5));
29+
JPanel tasksPanel = new StyledJPanel(new FlowLayout(FlowLayout.LEFT, 5, 5));
3230

3331
// Add counter of previous tasks
34-
controls.add(new StyledJLabel("Num Previous Tasks:"));
35-
taskCountField = new NumberField();
32+
tasksPanel.add(new StyledJLabel("Num Previous Tasks:"));
33+
taskCountField = new IntegerField();
3634
taskCountField.setColumns(4);
37-
controls.add(taskCountField);
35+
tasksPanel.add(taskCountField);
3836

39-
controls.add(new StyledJLabel("Duration:"));
37+
contentPanel.add(tasksPanel);
38+
39+
JPanel loopTaskDurationPanel = new StyledJPanel(new FlowLayout(FlowLayout.LEFT, 5, 5));
40+
contentPanel.add(loopTaskDurationPanel);
41+
42+
loopTaskDurationPanel.add(new StyledJLabel("Duration:"));
4043

4144
loopDurationTypeSelector = new StyledJComboBox<>(LoopDurationType.values());
42-
controls.add(loopDurationTypeSelector);
45+
loopTaskDurationPanel.add(loopDurationTypeSelector);
4346

4447
JPanel iterationsPanel = new StyledJPanel(new FlowLayout(FlowLayout.LEFT, 5, 5));
4548
iterationsPanel.add(new StyledJLabel("Num Iterations:"));
46-
iterationCountField = new NumberField();
49+
iterationCountField = new IntegerField();
4750
iterationCountField.setColumns(4);
4851
iterationsPanel.add(iterationCountField);
49-
controls.add(iterationsPanel);
52+
loopTaskDurationPanel.add(iterationsPanel);
5053

5154
durationPanel = new DurationPanel();
5255
durationPanel.setVisible(false);
53-
controls.add(durationPanel);
54-
55-
contentPanel.add(controls, BorderLayout.SOUTH);
56+
loopTaskDurationPanel.add(durationPanel);
5657

5758
loopDurationTypeSelector.addActionListener(e -> {
5859
LoopDurationType loopDurationType = (LoopDurationType) loopDurationTypeSelector.getSelectedItem();
@@ -82,7 +83,7 @@ public Task toTask() {
8283
} else if (loopDurationType == LoopDurationType.INFINITE) {
8384
return LoopTask.forIterations(taskCount, LoopTask.INFINITE_ITERATIONS);
8485
} else if (durationPanel.getSelectedTimeType() == DurationPanel.TimeType.MINUTES) {
85-
return LoopTask.forDuration(taskCount, TimeUnit.MINUTES.toMillis(durationPanel.getDuration()));
86+
return LoopTask.forDuration(taskCount, durationPanel.getDurationMS());
8687
} else {
8788
return LoopTask.untilDateTime(taskCount, durationPanel.getSelectedDateTime());
8889
}

AIO/src/org/aio/gui/task_panels/ResourceTaskPanel.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package org.aio.gui.task_panels;
22

33
import org.aio.gui.fields.ItemField;
4-
import org.aio.gui.fields.NumberField;
54
import org.aio.gui.fields.RSUnitField;
65
import org.aio.gui.styled_components.StyledJLabel;
76
import org.aio.gui.styled_components.StyledJPanel;
@@ -11,8 +10,6 @@
1110
import org.json.simple.JSONObject;
1211

1312
import javax.swing.*;
14-
import javax.swing.border.EtchedBorder;
15-
import javax.swing.border.TitledBorder;
1613
import java.awt.*;
1714

1815
public class ResourceTaskPanel extends TaskPanel {

0 commit comments

Comments
 (0)