Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: org/meowers/cide/edcide/EdCide.java


1   /*
2    * EdCide.java
3    *
4    * Created on January 17, 2002, 3:37 PM
5    */
6   
7   package org.meowers.cide.edcide;
8   
9   import org.meowers.cide.data.*;
10  import org.meowers.cide.edcide.tile.*;
11  import org.meowers.cide.edcide.gamedata.*;
12  import org.meowers.cide.edcide.map.*;
13  import org.meowers.cide.edcide.tileset.*;
14  import javax.swing.*;
15  import javax.swing.tree.*;
16  import java.awt.event.*;
17  import java.awt.*;
18  import javax.swing.filechooser.*;
19  import java.io.*;
20  
21  /**
22   *
23   * @author  adam
24   */
25  public class EdCide extends javax.swing.JFrame {
26      
27      private EdCideTreeNode menuNode;  // the node on which the menu was popped-up
28      private int newNumber; // number appended to new objects
29      private final JFileChooser fileChooser = new JFileChooser();
30      private GameData gd;
31      private File gdFile;  // file used to save as
32      private EditorPanel editorPanel = new EditorPanel();
33      private static final String VERSION = "alpha-20212";
34      
35      /** Creates new form EdCide */
36      public EdCide() {
37          gd = new GameData();
38          initComponents();
39          mainSplitter.setRightComponent(editorPanel);
40      }
41      
42      /** This method is called from within the constructor to
43       * initialize the form.
44       * WARNING: Do NOT modify this code. The content of this method is
45       * always regenerated by the Form Editor.
46       */
47      private void initComponents() {//GEN-BEGIN:initComponents
48          mainMenuBar = new javax.swing.JMenuBar();
49          fileMenu = new javax.swing.JMenu();
50          fileNewMenuItem = new javax.swing.JMenuItem();
51          fileOpenMenuItem = new javax.swing.JMenuItem();
52          fileSaveMenuItem = new javax.swing.JMenuItem();
53          fileSaveAsMenuItem = new javax.swing.JMenuItem();
54          fileSep1 = new javax.swing.JSeparator();
55          fileExitMenuItem = new javax.swing.JMenuItem();
56          helpMenu = new javax.swing.JMenu();
57          helpAboutMenuItem = new javax.swing.JMenuItem();
58          popupGroupTreeMenu = new javax.swing.JPopupMenu();
59          newGroupTreeMenuItem = new javax.swing.JMenuItem();
60          popupTreeMenu = new javax.swing.JPopupMenu();
61          deleteTreeMenuItem = new javax.swing.JMenuItem();
62          mainSplitter = new javax.swing.JSplitPane();
63          treeScrollPane = new javax.swing.JScrollPane();
64          dataTree = new javax.swing.JTree();
65          
66          fileMenu.setText("File");
67          fileNewMenuItem.setText("New");
68          fileNewMenuItem.addActionListener(new java.awt.event.ActionListener() {
69              public void actionPerformed(java.awt.event.ActionEvent evt) {
70                  fileNewMenuItemActionPerformed(evt);
71              }
72          });
73          
74          fileMenu.add(fileNewMenuItem);
75          fileOpenMenuItem.setText("Open...");
76          fileOpenMenuItem.addActionListener(new java.awt.event.ActionListener() {
77              public void actionPerformed(java.awt.event.ActionEvent evt) {
78                  fileOpenMenuItemActionPerformed(evt);
79              }
80          });
81          
82          fileMenu.add(fileOpenMenuItem);
83          fileSaveMenuItem.setText("Save");
84          fileSaveMenuItem.addActionListener(new java.awt.event.ActionListener() {
85              public void actionPerformed(java.awt.event.ActionEvent evt) {
86                  fileSaveMenuItemActionPerformed(evt);
87              }
88          });
89          
90          fileMenu.add(fileSaveMenuItem);
91          fileSaveAsMenuItem.setText("Save As...");
92          fileSaveAsMenuItem.addActionListener(new java.awt.event.ActionListener() {
93              public void actionPerformed(java.awt.event.ActionEvent evt) {
94                  fileSaveAsMenuItemActionPerformed(evt);
95              }
96          });
97          
98          fileMenu.add(fileSaveAsMenuItem);
99          fileMenu.add(fileSep1);
100         fileExitMenuItem.setToolTipText("Exit Editor");
101         fileExitMenuItem.setText("Exit");
102         fileExitMenuItem.addActionListener(new java.awt.event.ActionListener() {
103             public void actionPerformed(java.awt.event.ActionEvent evt) {
104                 fileExitMenuItemActionPerformed(evt);
105             }
106         });
107         
108         fileMenu.add(fileExitMenuItem);
109         mainMenuBar.add(fileMenu);
110         helpMenu.setText("Help");
111         helpAboutMenuItem.setText("About...");
112         helpAboutMenuItem.addActionListener(new java.awt.event.ActionListener() {
113             public void actionPerformed(java.awt.event.ActionEvent evt) {
114                 helpAboutMenuItemActionPerformed(evt);
115             }
116         });
117         
118         helpMenu.add(helpAboutMenuItem);
119         mainMenuBar.add(helpMenu);
120         newGroupTreeMenuItem.setText("New");
121         newGroupTreeMenuItem.addActionListener(new java.awt.event.ActionListener() {
122             public void actionPerformed(java.awt.event.ActionEvent evt) {
123                 newGroupTreeMenuItemActionPerformed(evt);
124             }
125         });
126         
127         popupGroupTreeMenu.add(newGroupTreeMenuItem);
128         deleteTreeMenuItem.setText("Delete");
129         popupTreeMenu.add(deleteTreeMenuItem);
130         
131         setTitle("EdCide");
132         setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
133         addWindowListener(new java.awt.event.WindowAdapter() {
134             public void windowClosing(java.awt.event.WindowEvent evt) {
135                 exitForm(evt);
136             }
137         });
138         
139         mainSplitter.setPreferredSize(new java.awt.Dimension(600, 400));
140         mainSplitter.setOneTouchExpandable(true);
141         mainSplitter.setRightComponent(new org.meowers.cide.edcide.EditorPanel());
142         dataTree.setModel(buildTree(gd));
143         dataTree.addMouseListener(new java.awt.event.MouseAdapter() {
144             public void mouseClicked(java.awt.event.MouseEvent evt) {
145                 dataTreeMouseClicked(evt);
146             }
147         });
148         
149         dataTree.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() {
150             public void valueChanged(javax.swing.event.TreeSelectionEvent evt) {
151                 dataTreeValueChanged(evt);
152             }
153         });
154         
155         treeScrollPane.setViewportView(dataTree);
156         
157         mainSplitter.setLeftComponent(treeScrollPane);
158         
159         getContentPane().add(mainSplitter, java.awt.BorderLayout.CENTER);
160         
161         setJMenuBar(mainMenuBar);
162         pack();
163     }//GEN-END:initComponents
164 
165     private void helpAboutMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_helpAboutMenuItemActionPerformed
166         AboutDialog ad = new AboutDialog(this, true, VERSION);
167         ad.show();
168     }//GEN-LAST:event_helpAboutMenuItemActionPerformed
169     
170     private void fileSaveAsMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fileSaveAsMenuItemActionPerformed
171         if (getFilename())
172             doSave();
173     }//GEN-LAST:event_fileSaveAsMenuItemActionPerformed
174     
175     private boolean getFilename() {
176         int ret = 0;
177         ret = fileChooser.showSaveDialog(this);
178         if (ret == JFileChooser.APPROVE_OPTION) {
179             gdFile = fileChooser.getSelectedFile();
180             EdCideTreeNode n = (EdCideTreeNode) dataTree.getModel().getRoot();
181             n.setUserObject(gdFile.getName());
182             return (true);
183         }
184         
185         return (false);
186     }
187     
188     private boolean doSave() {
189         int ret = 0;
190         if (gdFile == null) {
191             if (!getFilename())
192                 return (false);
193         }
194         
195         if (!GameDataIO.save(gdFile, gd)) {
196             // TODO: Better error handling
197             System.out.println("Error saving.");
198             return (false);
199         }
200         
201         return (true);
202     }
203     
204     private void fileOpenMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fileOpenMenuItemActionPerformed
205         if (checkDirty()) {
206             GameData newGD;
207             
208             int ret = fileChooser.showOpenDialog(this);
209             if (ret == JFileChooser.APPROVE_OPTION) {
210                 File newGDFile = fileChooser.getSelectedFile();
211                 newGD = GameDataIO.load(newGDFile);
212                 if (newGD != null) {
213                     gd = newGD;
214                     gdFile = newGDFile;
215                     dataTree.setModel(buildTree(gd));
216                 } else {
217                     System.out.println("Error opening.");
218                 }
219             }
220         }
221     }//GEN-LAST:event_fileOpenMenuItemActionPerformed
222     
223     private void fileSaveMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fileSaveMenuItemActionPerformed
224         doSave();
225     }//GEN-LAST:event_fileSaveMenuItemActionPerformed
226     
227     private void newGroupTreeMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_newGroupTreeMenuItemActionPerformed
228         int newGameDataType = menuNode.getGameDataType();
229         EdCideTreeNode newNode = null;
230         
231         switch (newGameDataType) {
232             case GameObject.TILE:
233                 if (gd.getTileSize() > 0) {
234                     Tile t = new Tile();
235                     t.setName("tile" + (new Integer(newNumber++)).toString());
236                     gd.addGameObject(t);
237                     newNode = new EdCideTreeNode(t);
238                 } else {
239                     JOptionPane.showMessageDialog(this, 
240                     "Please set tile size in GameData (root of tree) first.",
241                     "No tile size", JOptionPane.INFORMATION_MESSAGE);
242                 }
243                 break;
244             case GameObject.MAP:
245                 Map m = new Map();
246                 m.setName("map" + (new Integer(newNumber++)).toString());
247                 gd.addGameObject(m);
248                 newNode = new EdCideTreeNode(m);
249                 break;
250             case GameObject.TILE_SET:
251                 TileSet tileSet = new TileSet();
252                 tileSet.setName("tileset" + (new Integer(newNumber++)).toString());
253                 gd.addGameObject(tileSet);
254                 newNode = new EdCideTreeNode(tileSet);
255                 break;
256             default:
257         }
258         
259         //dataTree.invalidate();
260         if (newNode != null)
261             ((DefaultTreeModel) dataTree.getModel()).insertNodeInto(newNode, menuNode, menuNode.getChildCount());;
262     }//GEN-LAST:event_newGroupTreeMenuItemActionPerformed
263     
264     /**
265      * Shows the popup menu when the right mouse button is clicked on the
266      * dataTree
267      */
268     private void dataTreeMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_dataTreeMouseClicked
269         if (SwingUtilities.isRightMouseButton(evt)) {
270             //if ((evt.getModifiers() & InputEvent.BUTTON3_MASK) > 0) {
271             
272             TreePath tp = dataTree.getPathForLocation(evt.getX(), evt.getY());
273             if (tp != null) {
274                 EdCideTreeNode n = (EdCideTreeNode) tp.getPathComponent(tp.getPathCount() - 1);
275                 
276                 menuNode = n;
277                 
278                 if (n.isGroup()) {
279                     popupGroupTreeMenu.show(dataTree, evt.getX(), evt.getY());
280                 } else if (n.getGameDataType() != GameObject.GAME_DATA) {
281                     popupTreeMenu.show(dataTree, evt.getX(), evt.getY());
282                 }
283             }
284         }
285     }//GEN-LAST:event_dataTreeMouseClicked
286     
287     private void dataTreeValueChanged(javax.swing.event.TreeSelectionEvent evt) {//GEN-FIRST:event_dataTreeValueChanged
288         TreePath tp = evt.getNewLeadSelectionPath();
289         if (tp != null && tp.getPathCount() == 3) {
290             EdCideTreeNode leaf = (EdCideTreeNode) tp.getPathComponent(2);
291             
292             switch (leaf.getGameDataType()) {
293                 case GameObject.TILE:
294                     editorPanel.setEditor(new TileEditor(gd, leaf));
295                     break;
296                 case GameObject.MAP:
297                     editorPanel.setEditor(new MapEditor(gd, leaf));
298                     break;
299                 case GameObject.TILE_SET:
300                     editorPanel.setEditor(new TileSetEditor(gd, leaf));
301                     break;
302                 default:
303                     break;
304             }
305         } else if (tp != null && tp.getPathCount() == 1) {
306             EdCideTreeNode type = (EdCideTreeNode) tp.getPathComponent(0);
307             if (type.getGameDataType() == GameObject.GAME_DATA) {
308                 editorPanel.setEditor(new GameDataEditor(gd, type));
309             }
310         } else { // not a valid object, display blank editor
311             editorPanel.setEditor(new BlankEditor());
312         }
313     }//GEN-LAST:event_dataTreeValueChanged
314     
315     private void fileNewMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fileNewMenuItemActionPerformed
316         // TODO: Check here for existing data that will be overwritten
317         if (checkDirty()) {
318             gd = new GameData();
319             dataTree.setModel(buildTree(gd));
320             gdFile = null;
321         }
322     }//GEN-LAST:event_fileNewMenuItemActionPerformed
323     
324     private void fileExitMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fileExitMenuItemActionPerformed
325         if (checkDirty()) {
326             System.exit(0);
327         }
328     }//GEN-LAST:event_fileExitMenuItemActionPerformed
329     
330     /** Exit the Application */
331     private void exitForm(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_exitForm
332         if (checkDirty()) {
333             System.exit(0);
334         } else {
335             System.out.println("blah");
336         }
337     }//GEN-LAST:event_exitForm
338     
339     /**
340      * @param args the command line arguments
341      */
342     public static void main(String args[]) {
343         new EdCide().show();
344     }
345     
346     private DefaultTreeModel buildTree(GameData g) {
347         DefaultMutableTreeNode root;
348         DefaultMutableTreeNode child;
349         DefaultMutableTreeNode subchild;
350         int i;
351         
352         // create the root node
353         String rootString = null;
354         if (gdFile == null)
355             rootString = "Game Data";
356         else
357             rootString = gdFile.getName();
358         root = new EdCideTreeNode(gd);
359         
360         // create the tile group
361         child = new EdCideTreeNode("Tiles", GameObject.TILE);
362         for (i = 0; i < gd.getGameObjectCount(GameObject.TILE); i++) {
363             Tile t = (Tile) gd.getGameObject(GameObject.TILE, i);
364             subchild = new EdCideTreeNode(t);
365             child.add(subchild);
366         }
367         root.add(child);
368         
369         // create tileset group
370         child = new EdCideTreeNode("Tile Sets", GameObject.TILE_SET);
371         for (i = 0; i < gd.getGameObjectCount(GameObject.TILE_SET); i++) {
372             TileSet tileSet = (TileSet) gd.getGameObject(GameObject.TILE_SET, i);
373             subchild = new EdCideTreeNode(tileSet);
374             child.add(subchild);
375         }
376         root.add(child);
377         
378         // create the map group
379         child = new EdCideTreeNode("Maps", GameObject.MAP);
380         for (i = 0; i < gd.getGameObjectCount(GameObject.MAP); i++) {
381             Map m = (Map) gd.getGameObject(GameObject.MAP, i);
382             subchild = new EdCideTreeNode(m);
383             child.add(subchild);
384         }
385         root.add(child);
386         
387         // return the tree model
388         return (new DefaultTreeModel(root));
389     }
390     
391     protected boolean checkDirty() {
392         if (gd.isDirty()) {
393             int ans = JOptionPane.showConfirmDialog(this,
394             "Current data is not saved.  Do you wish to save it now?",
395             "Save?", JOptionPane.YES_NO_CANCEL_OPTION,
396             JOptionPane.WARNING_MESSAGE);
397             if (ans == JOptionPane.YES_OPTION) {
398                 doSave();
399             }
400             if (ans == JOptionPane.CANCEL_OPTION)
401                 return (false);
402         }
403         return (true);
404     }
405     
406     
407     
408     // Variables declaration - do not modify//GEN-BEGIN:variables
409     private javax.swing.JMenuBar mainMenuBar;
410     private javax.swing.JMenu fileMenu;
411     private javax.swing.JMenuItem fileNewMenuItem;
412     private javax.swing.JMenuItem fileOpenMenuItem;
413     private javax.swing.JMenuItem fileSaveMenuItem;
414     private javax.swing.JMenuItem fileSaveAsMenuItem;
415     private javax.swing.JSeparator fileSep1;
416     private javax.swing.JMenuItem fileExitMenuItem;
417     private javax.swing.JMenu helpMenu;
418     private javax.swing.JMenuItem helpAboutMenuItem;
419     private javax.swing.JPopupMenu popupGroupTreeMenu;
420     private javax.swing.JMenuItem newGroupTreeMenuItem;
421     private javax.swing.JPopupMenu popupTreeMenu;
422     private javax.swing.JMenuItem deleteTreeMenuItem;
423     private javax.swing.JSplitPane mainSplitter;
424     private javax.swing.JScrollPane treeScrollPane;
425     private javax.swing.JTree dataTree;
426     // End of variables declaration//GEN-END:variables
427     
428 }