Skip to content

Commit db298de

Browse files
committed
Merge pull request #88 from jamesrcounts/master
Turtle Sounds
2 parents 49b5f88 + ad716d0 commit db298de

29 files changed

Lines changed: 549 additions & 502 deletions

File tree

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

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import org.teachingextensions.logo.utils.ColorUtils.PenColors;
55
import org.teachingextensions.logo.utils.InterfaceUtils.MultiTurtlePainter;
66
import org.teachingextensions.logo.utils.InterfaceUtils.MultiTurtleTrailPainter;
7+
import org.teachingextensions.logo.utils.InterfaceUtils.TurtleFrame;
78
import org.teachingextensions.logo.utils.LineAndShapeUtils.Paintable;
89

910
import java.util.ArrayList;
@@ -12,12 +13,12 @@
1213
/**
1314
* Use this window when you want to put more than one turtle on the same window
1415
*/
15-
public class MultiTurtleWindow extends TurtlePanel {
16+
public class MultiTurtleWindow extends TurtleWindow {
1617
private List<Turtle> turtles = new ArrayList<Turtle>();
1718

1819
public MultiTurtleWindow() {
1920
super("Turtles, Turtles, Turtles!");
20-
this.getWindow().setBackground(PenColors.Blues.DarkSlateBlue);
21+
this.setBackground(PenColors.Blues.DarkSlateBlue);
2122
}
2223

2324
/**
@@ -32,14 +33,19 @@ public void addTurtle(Turtle turtle) {
3233
if (turtle == null) {
3334
return;
3435
}
35-
turtle.setFrame(this.getWindow().getFrame());
36+
turtle.setFrame(this.getFrame());
3637
turtle.setPanel(this);
3738

3839
this.turtles.add(turtle);
3940
clearPainters();
4041
configurePainters();
4142
}
4243

44+
@Override
45+
public TurtleWindow init(Turtle turtle, TurtleFrame frame) {
46+
return this;
47+
}
48+
4349
@Override
4450
protected Paintable createTurtleTrailPainter() {
4551
this.setTrailPainter(new MultiTurtleTrailPainter(this.turtles));

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

Lines changed: 142 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -2,134 +2,202 @@
22

33
import org.teachingextensions.approvals.lite.util.FrameCloser;
44
import org.teachingextensions.approvals.lite.util.WindowUtils;
5+
import org.teachingextensions.approvals.lite.writers.ComponentApprovalWriter;
56
import org.teachingextensions.logo.utils.ColorUtils.PenColors;
67
import org.teachingextensions.logo.utils.EventUtils.LeftClickMouseAdapter;
78
import org.teachingextensions.logo.utils.EventUtils.MouseLeftClickListener;
89
import org.teachingextensions.logo.utils.EventUtils.MouseRightClickListener;
910
import org.teachingextensions.logo.utils.EventUtils.RightClickMouseAdapter;
11+
import org.teachingextensions.logo.utils.InterfaceUtils.CanvasPanel;
12+
import org.teachingextensions.logo.utils.InterfaceUtils.TurtleFrame;
1013
import org.teachingextensions.logo.utils.LineAndShapeUtils.ImageBackground;
1114
import org.teachingextensions.logo.utils.LineAndShapeUtils.Paintable;
1215
import org.teachingextensions.virtualproctor.VirtualProctorWeb;
1316

1417
import javax.swing.*;
1518
import java.awt.*;
16-
import java.util.ArrayList;
19+
import java.awt.event.MouseListener;
20+
import java.awt.image.BufferedImage;
1721

1822
/**
1923
* <img src="http://ftpmirror.your.org/pub/wikimedia/images/wikibooks/de/2/2c/JPanel_Add_JButton_PAGE_END.JPG" style="text-align: left" alt="A window image" height="50" width="75" > Program Window
2024
* allows you to change the color of the background and more...
2125
*/
22-
@SuppressWarnings({"serial"})
23-
public class ProgramWindow extends JPanel
24-
{
25-
private JFrame frame;
26-
public ArrayList<Paintable> additional = new ArrayList<>();
27-
public ProgramWindow(String title)
28-
{
26+
public class ProgramWindow {
27+
private final LazyCanvas canvas = new LazyCanvas();
28+
private JFrame frame;
29+
30+
public ProgramWindow(String title) {
2931
this();
30-
frame = new JFrame(title);
31-
getFrame().getContentPane().add(this);
32+
this.frame = new JFrame(title);
33+
this.canvas.addTo(this.frame);
3234
ProgramWindow.createStandardFrame(getFrame());
3335
}
36+
37+
public ProgramWindow() {
38+
this.canvas.setPreferredSize(new Dimension(627, 442));
39+
setColor(PenColors.Whites.White);
40+
}
41+
42+
public static void createStandardFrame(JFrame frame) {
43+
WindowUtils.testFrame(frame, new VirtualProctorWeb(), new FrameCloser());
44+
}
45+
46+
3447
/**
3548
* Adds a button instance to a window
3649
* <p><b>Example:</b> {@code programWindow.addButton(myButton)}</p>
3750
*
3851
* @param button
3952
* A button instance
4053
*/
41-
public void addButton(JButton button)
42-
{
43-
this.add(button);
44-
}
45-
public ProgramWindow()
46-
{
47-
setPreferredSize(new Dimension(627, 442));
48-
setColor(PenColors.Whites.White);
49-
}
50-
public static void createStandardFrame(JFrame frame)
51-
{
52-
WindowUtils.testFrame(frame, new VirtualProctorWeb(), new FrameCloser());
53-
}
54-
@Override
55-
public void paint(Graphics g)
56-
{
57-
super.paint(g);
58-
Graphics2D g2d = configureGraphics2D(g);
59-
for (Paintable p : additional)
60-
{
61-
p.paint(g2d, this);
62-
}
63-
g2d.dispose();
64-
}
65-
public void setColor(Color backgroundColor)
66-
{
67-
setBackground(backgroundColor);
54+
public void addButton(JButton button) {
55+
this.canvas.add(button);
6856
}
69-
public void addPaintable(Paintable additional)
70-
{
71-
this.additional.add(additional);
72-
repaint();
57+
58+
59+
public void setColor(Color backgroundColor) {
60+
this.canvas.setBackground(backgroundColor);
7361
}
74-
public void removePaintable()
75-
{
76-
additional.clear();
77-
repaint();
62+
63+
public ProgramWindow clearWindow() {
64+
this.canvas.clear();
65+
return this;
7866
}
67+
7968
/**
8069
* Adds a right mouse click listener instance to a window
8170
* <p><b>Example:</b> {@code programWindow.addMouseRightClickListener(myRightClickListener)}</p>
8271
*
8372
* @param listener
8473
* A listener instance
8574
*/
86-
public void addMouseRightClickListener(MouseRightClickListener listener)
87-
{
88-
addMouseListener(new RightClickMouseAdapter(listener));
75+
public void addMouseRightClickListener(MouseRightClickListener listener) {
76+
this.canvas.addMouseListener(new RightClickMouseAdapter(listener));
8977
}
78+
9079
/**
9180
* Adds a left mouse click listener instance to a window
9281
* <p><b>Example:</b> {@code programWindow.addMouseLeftClickListener(myLeftClickListener)}</p>
9382
*
9483
* @param listener
9584
* A listener instance
9685
*/
97-
public void addMouseLeftClickListener(MouseLeftClickListener listener)
98-
{
99-
addMouseListener(new LeftClickMouseAdapter(listener));
86+
public void addMouseLeftClickListener(MouseLeftClickListener listener) {
87+
this.canvas.addMouseListener(new LeftClickMouseAdapter(listener));
10088
}
89+
10190
/**
10291
* Adds a background image to a window
10392
* <p><b>Example:</b> {@code programWindow.setBackgroundImage("http://www.coolpicture.com/sunshine.jpg")}</p>
10493
*
10594
* @param url
10695
* A URL path to an image
10796
*/
108-
public void setBackgroundImage(String url)
109-
{
110-
addPaintable(new ImageBackground(url));
111-
}
112-
public static Graphics2D configureGraphics2D(Graphics g)
113-
{
114-
Graphics2D g2d = (Graphics2D) g.create();
115-
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
116-
g2d.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY);
117-
g2d.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE);
118-
g2d.setRenderingHint(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_ENABLE);
119-
return g2d;
120-
}
121-
public void removePaintable(Paintable item)
122-
{
123-
this.additional.remove(item);
124-
repaint();
125-
}
126-
public JFrame getFrame()
127-
{
97+
public void setBackgroundImage(String url) {
98+
add(new ImageBackground(url));
99+
}
100+
101+
public JFrame getFrame() {
128102
return frame;
129103
}
130-
public void setWindowVisible(boolean b)
131-
{
104+
105+
public void setWindowVisible(boolean b) {
132106
this.frame.setVisible(b);
133-
this.setVisible(b);
107+
this.canvas.getValue().setVisible(b);
108+
}
109+
110+
@Deprecated
111+
public ProgramWindow add(Paintable painter) {
112+
this.canvas.getValue().add(painter);
113+
return this;
114+
}
115+
116+
@Deprecated
117+
public ProgramWindow remove(Paintable painter) {
118+
this.canvas.getValue().remove(painter);
119+
return this;
120+
}
121+
122+
123+
public final BufferedImage getWindowImage() {
124+
return ComponentApprovalWriter.drawComponent(this.canvas.getValue());
125+
}
126+
127+
public ProgramWindow addTo(TurtleFrame frame) {
128+
frame.addContent(this.canvas.getValue());
129+
return this;
130+
}
131+
132+
public ProgramWindow repaint() {
133+
this.canvas.getValue().repaint();
134+
return this;
135+
}
136+
137+
public ProgramWindow setVisible(boolean visible) {
138+
this.canvas.getValue().setVisible(visible);
139+
return this;
140+
}
141+
142+
public ProgramWindow setCursor(int cursor) {
143+
this.setCursor(Cursor.getPredefinedCursor(cursor));
144+
return this;
145+
}
146+
147+
public ProgramWindow setCursor(Cursor predefinedCursor) {
148+
this.canvas.getValue().setCursor(predefinedCursor);
149+
return this;
150+
}
151+
152+
public ProgramWindow setBackground(Color color) {
153+
this.canvas.setBackground(color);
154+
return this;
155+
}
156+
157+
public CanvasPanel getCanvas() {
158+
return this.canvas.getValue();
159+
}
160+
161+
private class LazyCanvas {
162+
private CanvasPanel panel;
163+
164+
public LazyCanvas addTo(JFrame frame) {
165+
frame.getContentPane().add(this.getValue());
166+
return this;
167+
}
168+
169+
public CanvasPanel getValue() {
170+
if (this.panel == null){
171+
this.panel = new CanvasPanel();
172+
}
173+
174+
return panel;
175+
}
176+
177+
public LazyCanvas setPreferredSize(Dimension dimension) {
178+
this.getValue().setPreferredSize(dimension);
179+
return this;
180+
}
181+
182+
public LazyCanvas add(JButton button) {
183+
this.getValue().add(button);
184+
return this;
185+
}
186+
187+
public LazyCanvas setBackground(Color color) {
188+
this.getValue().setBackground(color);
189+
return this;
190+
}
191+
192+
public LazyCanvas clear() {
193+
this.getValue().clear();
194+
return this;
195+
}
196+
197+
public LazyCanvas addMouseListener(MouseListener adapter) {
198+
this.getValue().addMouseListener(adapter);
199+
return this;
200+
}
134201
}
135202
}
203+

0 commit comments

Comments
 (0)