Skip to content

Commit 41756e9

Browse files
committed
Created TKP Panel
1 parent 2ac2f37 commit 41756e9

12 files changed

Lines changed: 164 additions & 83 deletions

File tree

src/main/java/org/teachingextensions/WindowUtils/MultiTurtleWindow.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.teachingextensions.logo.Turtle;
1414
import org.teachingextensions.logo.Turtle.Animals;
1515
import org.teachingextensions.logo.utils.ColorUtils.PenColors;
16+
import org.teachingextensions.logo.utils.InterfaceUtils.TkpPanel;
1617
import org.teachingextensions.logo.utils.LineAndShapeUtils.LineSegment;
1718

1819
/**
@@ -30,7 +31,7 @@ public MultiTurtleWindow()
3031
this.image = loadAnimal();
3132
}
3233
/**
33-
* Adds a turtle instance to a window
34+
* Adds a turtle instance to a window
3435
* NOTE: this method must be called BEFORE calling any other methods on turtle instances
3536
* <p><b>Example:</b> {@code multiTurtleWindow.addTurtle(myTurtle)}</p>
3637
*
@@ -49,7 +50,7 @@ public void paint(Graphics g)
4950
{
5051
// We must call JPanel paint to get the correct behavior on windows...
5152
super.paint(g);
52-
Graphics2D g2d = ProgramWindow.configureGraphics2D(g);
53+
Graphics2D g2d = TkpPanel.configureGraphics2D(g);
5354
super.setBackground(PenColors.Blues.DarkSlateBlue);
5455
paintLines(g2d);
5556
paintTurtle(g2d);
Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
package org.teachingextensions.logo.utils.InterfaceUtils;
2+
3+
import org.teachingextensions.logo.utils.LineAndShapeUtils.Paintable;
4+
5+
import javax.swing.*;
6+
import java.awt.*;
7+
import java.awt.event.MouseListener;
8+
import java.util.ArrayList;
9+
10+
public class TkpPanel {
11+
12+
private LazyPanel panel = new LazyPanel();
13+
14+
public static Graphics2D configureGraphics2D(Graphics g) {
15+
Graphics2D g2d = (Graphics2D) g.create();
16+
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
17+
g2d.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY);
18+
g2d.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE);
19+
g2d.setRenderingHint(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_ENABLE);
20+
return g2d;
21+
}
22+
23+
public JPanel getPanel() {
24+
return panel.getValue();
25+
}
26+
27+
public TkpPanel add(Component component) {
28+
this.panel.getValue().add(component);
29+
return this;
30+
}
31+
32+
public TkpPanel setPreferredSize(Dimension preferredSize) {
33+
this.panel.getValue().setPreferredSize(preferredSize);
34+
return this;
35+
}
36+
37+
public TkpPanel setBackground(Color color) {
38+
this.panel.getValue().setBackground(color);
39+
return this;
40+
}
41+
42+
public TkpPanel addMouseListener(MouseListener listener) {
43+
this.panel.getValue().addMouseListener(listener);
44+
return this;
45+
}
46+
47+
public TkpPanel setVisible(boolean visible) {
48+
this.panel.getValue().setVisible(visible);
49+
return this;
50+
}
51+
52+
public TkpPanel remove(Paintable item) {
53+
this.panel.getValue().remove(item);
54+
return this;
55+
}
56+
57+
public TkpPanel clear() {
58+
this.panel.getValue().clear();
59+
return this;
60+
}
61+
62+
public TkpPanel add(Paintable item) {
63+
this.panel.getValue().add(item);
64+
65+
return this;
66+
}
67+
68+
public TkpPanel repaint() {
69+
this.panel.getValue().repaint();
70+
return this;
71+
}
72+
73+
private class LazyPanel {
74+
75+
private PaintablePanel value;
76+
77+
public PaintablePanel getValue() {
78+
if (this.value == null) {
79+
this.value = new PaintablePanel();
80+
}
81+
82+
return this.value;
83+
}
84+
85+
86+
}
87+
88+
private class PaintablePanel extends JPanel {
89+
public ArrayList<Paintable> interfaceElements = new ArrayList<>();
90+
91+
public PaintablePanel remove(Paintable item) {
92+
if (interfaceElements.contains(item)) {
93+
interfaceElements.remove(item);
94+
}
95+
96+
return this;
97+
}
98+
99+
@Override
100+
public void paint(Graphics g) {
101+
super.paint(g);
102+
Graphics2D g2d = TkpPanel.configureGraphics2D(g);
103+
for (Paintable p : interfaceElements) {
104+
p.paint(g2d, this);
105+
}
106+
g2d.dispose();
107+
}
108+
109+
public PaintablePanel clear() {
110+
this.interfaceElements.clear();
111+
return this;
112+
}
113+
114+
protected PaintablePanel add(Paintable item) {
115+
if (!interfaceElements.contains(item)) {
116+
interfaceElements.add(item);
117+
}
118+
return this;
119+
}
120+
}
121+
}

src/main/java/org/teachingextensions/logo/utils/InterfaceUtils/TurtleFrame.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package org.teachingextensions.logo.utils.InterfaceUtils;
22

3-
import org.teachingextensions.WindowUtils.ProgramWindow;
3+
import org.teachingextensions.approvals.lite.util.FrameCloser;
4+
import org.teachingextensions.approvals.lite.util.WindowUtils;
5+
import org.teachingextensions.virtualproctor.VirtualProctorWeb;
46

57
import javax.swing.*;
68

@@ -29,6 +31,10 @@ public TurtleFrame() {
2931
this(TITLE);
3032
}
3133

34+
public static void createStandardFrame(JFrame frame) {
35+
WindowUtils.testFrame(frame, new VirtualProctorWeb(), new FrameCloser());
36+
}
37+
3238
public TurtleFrame addContent(JComponent panel) {
3339
this.frame.getValue().getContentPane().add(panel);
3440
return this;
@@ -40,7 +46,7 @@ public TurtleFrame setVisible(boolean visible) {
4046
}
4147

4248
public TurtleFrame setStandardLayout() {
43-
ProgramWindow.createStandardFrame(this.frame.getValue());
49+
createStandardFrame(this.frame.getValue());
4450
return this;
4551
}
4652

src/main/java/org/teachingextensions/logo/utils/PuzzleUtils/PuzzleBoard.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99

1010
import javax.swing.JPanel;
1111

12-
import org.teachingextensions.WindowUtils.ProgramWindow;
1312
import org.teachingextensions.approvals.lite.util.StringUtils;
1413
import org.teachingextensions.logo.utils.ColorUtils.PenColors;
14+
import org.teachingextensions.logo.utils.InterfaceUtils.TkpPanel;
1515

1616
/**
1717
* Draws and animates a 9-puzzle
@@ -80,7 +80,7 @@ private static void drawTiles(Graphics2D g, Tile[] tiles)
8080
protected void paintComponent(Graphics g)
8181
{
8282
super.paintComponent(g);
83-
Graphics2D g2d = ProgramWindow.configureGraphics2D(g);
83+
Graphics2D g2d = TkpPanel.configureGraphics2D(g);
8484
drawBorder(g2d);
8585
drawField(g2d);
8686
drawTiles(g2d, tiles);

src/test/java/org/teachingextensions/logo/MultiTurtlePanelTest.java

Lines changed: 10 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -11,52 +11,9 @@
1111
import static org.junit.Assert.assertEquals;
1212

1313
@UseReporter({DiffReporter.class, DelayedClipboardReporter.class})
14-
public class MultiTurtlePanelTest
15-
{
14+
public class MultiTurtlePanelTest {
1615
@Test
17-
public void testPaintNoTurtles()
18-
{
19-
JUnitUtils.assumeNotHeadless();
20-
MultiTurtleWindow panel = new MultiTurtleWindow();
21-
Approvals.verify(panel);
22-
}
23-
24-
25-
@Test
26-
public void testPaintWithGhostTurtle()
27-
{
28-
JUnitUtils.assumeNotHeadless();
29-
MultiTurtleWindow panel = new MultiTurtleWindow();
30-
panel.addTurtle(null);
31-
panel.addTurtle(new Turtle());
32-
Approvals.verify(panel);
33-
}
34-
@Test
35-
public void testPaintWithHiddenTurtle()
36-
{
37-
JUnitUtils.assumeNotHeadless();
38-
MultiTurtleWindow panel = new MultiTurtleWindow();
39-
Turtle hiddenTurtle = new Turtle();
40-
hiddenTurtle.hide();
41-
panel.addTurtle(hiddenTurtle);
42-
panel.addTurtle(new Turtle());
43-
Approvals.verify(panel);
44-
}
45-
@Test
46-
public void testPaintWithTwoTurtle()
47-
{
48-
JUnitUtils.assumeNotHeadless();
49-
MultiTurtleWindow panel = new MultiTurtleWindow();
50-
Turtle crouchingTurtle = new Turtle();
51-
crouchingTurtle.setX(35);
52-
crouchingTurtle.setY(35);
53-
panel.addTurtle(crouchingTurtle);
54-
panel.addTurtle(new Turtle());
55-
Approvals.verify(panel);
56-
}
57-
@Test
58-
public void testTwoTurtlesDrawBeforeAdding()
59-
{
16+
public void testTwoTurtlesDrawBeforeAdding() {
6017
JUnitUtils.assumeNotHeadless();
6118
MultiTurtleWindow panel = new MultiTurtleWindow();
6219
Turtle turtle = new Turtle();
@@ -72,9 +29,9 @@ public void testTwoTurtlesDrawBeforeAdding()
7229
panel.addTurtle(turtle);
7330
Approvals.verify(panel);
7431
}
32+
7533
@Test
76-
public void testPaint()
77-
{
34+
public void testPaint() {
7835
JUnitUtils.assumeNotHeadless();
7936
MultiTurtleWindow panel = new MultiTurtleWindow();
8037
panel.addTurtle(null);
@@ -84,25 +41,25 @@ public void testPaint()
8441
turtle.move(100);
8542
Approvals.verify(panel);
8643
}
44+
8745
@Test
88-
public void testAddGhostTurtle() throws Exception
89-
{
46+
public void testAddGhostTurtle() throws Exception {
9047
JUnitUtils.assumeNotHeadless();
9148
MultiTurtleWindow panel = new MultiTurtleWindow();
9249
panel.addTurtle(null);
9350
assertEquals(0, panel.getTurtleCount());
9451
}
52+
9553
@Test
96-
public void testAddTurtle() throws Exception
97-
{
54+
public void testAddTurtle() throws Exception {
9855
JUnitUtils.assumeNotHeadless();
9956
MultiTurtleWindow panel = new MultiTurtleWindow();
10057
panel.addTurtle(new Turtle());
10158
assertEquals(1, panel.getTurtleCount());
10259
}
60+
10361
@Test
104-
public void testSetAnimal() throws Exception
105-
{
62+
public void testSetAnimal() throws Exception {
10663
JUnitUtils.assumeNotHeadless();
10764
MultiTurtleWindow panel = new MultiTurtleWindow();
10865
panel.addTurtle(new Turtle());
5 Bytes
Loading
2 Bytes
Loading
Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package org.teachingextensions.logo.tests;
22

33
import org.junit.Test;
4-
import org.teachingextensions.WindowUtils.TurtlePanel;
54
import org.teachingextensions.approvals.lite.Approvals;
65
import org.teachingextensions.approvals.lite.reporters.ClipboardReporter;
76
import org.teachingextensions.approvals.lite.reporters.DiffReporter;
@@ -12,20 +11,17 @@
1211
@UseReporter({ClipboardReporter.class, DiffReporter.class})
1312
public class TurtlePanelTest
1413
{
14+
15+
public static final String BACKGROUND_IMAGE = "http://teachingkidsprogramming.org/wp-content/uploads/jimcounts.jpg";
16+
1517
@Test
1618
public void testImageForBackground() throws Exception
1719
{
1820
JUnitUtils.assumeNotHeadless();
19-
Turtle turtle = TurtleUtils.getTurtle();
20-
turtle.move(50);
21-
turtle.getBackgroundWindow().setBackgroundImage(
22-
"http://teachingkidsprogramming.org/blog/wp-content/uploads/teachingKidsProgramming_logo_sm.png");
23-
Approvals.verify(turtle.getImage());
24-
}
25-
// @Test
26-
public void testNamedPanel()
27-
{
28-
TurtlePanel panel = new TurtlePanel("Turtle Bay");
29-
Approvals.verify(panel);
21+
Turtle turtle1 = new Turtle();
22+
turtle1.setSpeed(Turtle.TEST_SPEED);
23+
turtle1.move(50);
24+
turtle1.getBackgroundWindow().setBackgroundImage(BACKGROUND_IMAGE);
25+
Approvals.verify(turtle1.getImage());
3026
}
3127
}

0 commit comments

Comments
 (0)