1 package se
.umu
.cs
.dit06ajnajs
.util
;
3 import java
.awt
.BorderLayout
;
4 import java
.awt
.Graphics
;
6 import java
.awt
.event
.MouseAdapter
;
7 import java
.awt
.event
.MouseEvent
;
8 import java
.util
.logging
.Level
;
9 import java
.util
.logging
.Logger
;
10 import javax
.swing
.JComponent
;
11 import javax
.swing
.JFrame
;
12 import javax
.swing
.JPanel
;
13 import se
.umu
.cs
.dit06ajnajs
.AntiTD
;
14 import se
.umu
.cs
.dit06ajnajs
.map
.Map
;
15 import se
.umu
.cs
.dit06ajnajs
.map
.MapSquare
;
16 import se
.umu
.cs
.dit06ajnajs
.map
.MapSquarePrototypeFactory
;
17 import se
.umu
.cs
.dit06ajnajs
.util
.LevelsXMLOutputter
;
18 import javax
.swing
.JList
;
19 import javax
.swing
.ListSelectionModel
;
20 import javax
.swing
.DefaultListModel
;
21 import javax
.swing
.event
.ListSelectionListener
;
22 import javax
.swing
.event
.ListSelectionEvent
;
23 import java
.awt
.event
.ActionListener
;
24 import java
.awt
.event
.ActionEvent
;
25 import javax
.swing
.JButton
;
26 import java
.io
.Writer
;
27 import java
.io
.FileWriter
;
29 import java
.io
.IOException
;
31 import java
.io
.BufferedWriter
;
33 public class LevelEditor
extends JFrame
{
34 private static Logger logger
= Logger
.getLogger("AntiTD.levelEditor");
36 private MapSquarePrototypeFactory factory
=
37 MapSquarePrototypeFactory
.getInstance();
39 private JComponent mapComponent
;
40 private JList mapSquareList
;
41 private String selectedMapSquareType
;
43 public LevelEditor() {
47 MapSquare
[][] mapMatrix
= new MapSquare
[cols
][rows
];
48 for (int c
= 0; c
< cols
; c
++) {
49 for (int r
= 0; r
< rows
; r
++) {
50 mapMatrix
[c
][r
] = factory
.createMapSquare("TowerSquare",
51 c
* AntiTD
.SQUARE_SIZE
,
52 r
* AntiTD
.SQUARE_SIZE
);
56 this.map
= new Map("new map", mapMatrix
);
60 public void createAndShowGUI() {
61 JPanel mainPanel
= new JPanel(new BorderLayout());
62 this.mapComponent
= new MapComponent();
63 mapComponent
.addMouseListener(new MapListener());
64 mainPanel
.add(mapComponent
, BorderLayout
.CENTER
);
67 JPanel controlsPanel
= new JPanel(new BorderLayout());
70 DefaultListModel mapSquaresListModel
= new DefaultListModel();
71 for (String type
: factory
.getMapSquareTypes()) {
72 mapSquaresListModel
.addElement(type
);
75 this.mapSquareList
= new JList(mapSquaresListModel
);
76 mapSquareList
.setSelectionMode(ListSelectionModel
.SINGLE_SELECTION
);
77 mapSquareList
.addListSelectionListener(new MapSquareListListener());
79 controlsPanel
.add(mapSquareList
, BorderLayout
.NORTH
);
82 JButton saveButton
= new JButton("Save Map");
83 saveButton
.setActionCommand("saveMap");
84 saveButton
.addActionListener(new ActionListener() {
85 public void actionPerformed(ActionEvent ae
) {
86 System
.out
.println("Dude");
88 URL dirURL
= this.getClass().getResource("/resources/");
89 // TODO: fix outFile path and name
90 File outFile
= new File(dirURL
.getPath(), "anton-test.xml");
92 Writer writer
= new BufferedWriter(new FileWriter(outFile
));
94 LevelsXMLOutputter
.outputMap(map
, writer
);
95 System
.out
.println("Wrote file");
96 } catch (IOException e
) {
97 // TODO - fix error message
102 controlsPanel
.add(saveButton
, BorderLayout
.SOUTH
);
106 mainPanel
.add(controlsPanel
, BorderLayout
.EAST
);
110 this.setTitle("MapEditor");
111 this.setVisible(true);
114 private class MapComponent
extends JComponent
{
116 public MapComponent() {
118 this.setPreferredSize(map
.getDimension());
122 public void paintComponent(Graphics g
) {
123 logger
.info("MapComponent paintComponent()");
124 Image img
= map
.getMapImage();
125 g
.drawImage(img
, 0, 0, null);
129 private class MapListener
extends MouseAdapter
{
131 public void mouseClicked(MouseEvent me
) {
134 MapSquare square
= map
.getMapSquareAtPoint(x
, y
);
135 logger
.info("Mouse clicked @ (" + x
+ ", " + y
+ ")");
136 logger
.info("MapSquare @ " + square
);
137 logger
.info("Selected MapSquareType: " + selectedMapSquareType
);
138 MapSquare newSquare
= factory
.createMapSquare(selectedMapSquareType
,
141 map
.setMapSquareAtPoint(square
.getX(), square
.getY(), newSquare
);
142 mapComponent
.repaint();
147 * An inner class that handles selection changes in jeedViews item list.
149 private class MapSquareListListener
implements ListSelectionListener
{
150 public void valueChanged(ListSelectionEvent e
) {
151 if (e
.getValueIsAdjusting() == false) {
152 selectedMapSquareType
= mapSquareList
.getSelectedValue().toString();
158 public static void main(String
[] args
) {
160 Logger
.getLogger("AntiTD.levelEditor").setLevel(Level
.INFO
);