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

Quick Search    Search Deep

Source code: com/javathis/mapeditor/NewMapDialog.java


1   /**
2    * JTMapEditor - The Pure Java Map Editor
3    * Copyright(c) 2002 by Rodney S. Foley
4    * <pre>
5    * This library is free software; you can redistribute it and/or modify it under
6    * the terms of the GNU Lesser General Public License as published by the Free
7    * Software Foundation; either version 2.1 of the License, or (at your option)
8    * any later version.
9    *
10   * This library is distributed in the hope that it will be useful, but WITHOUT
11   * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
12   * FOR A PARTICULAR PURPOSE.  See the GNU Library General Public License for
13   * more details.
14   *
15   * You should have received a copy of the GNU Library General Public License
16   * along with this library; if not, write to:
17   *
18   * Free Software Foundation, Inc.
19   * 59 Temple Place, Suite 330
20   * Boston, MA  02111-1307, USA
21   *
22   * or download it from:  http://www.fsf.org/licenses/licenses.html#LGPL
23   * </pre>
24   */
25  package com.javathis.mapeditor;
26  
27  import com.javathis.utilities.*;
28  import com.javathis.utilities.ui.*;
29  import java.awt.*;
30  import java.awt.event.*;
31  import java.io.*;
32  import java.util.*;
33  import javax.swing.*;
34  
35  /**
36   * Dialog displayed when the user request to create a new map.
37   */
38  public class NewMapDialog extends JDialog
39  {
40      protected static final ResourceBundle MAIN_RESOURCE_BUNDLE = ResourceBundle.getBundle("com/javathis/mapeditor/properties/NewMapDialog");
41  
42      private static final Dimension DEFAULT_SIZE = new Dimension(272, 150);
43      private static final Dimension FULL_SIZE    = new Dimension(272, 258);
44  
45      private JPanel      mainPanel                   = new JPanel();
46      private JPanel      tileSetDetailsPanel         = new JPanel();
47      private JPanel      buttonPanel                 = new JPanel();
48      private JButton     okButton                    = new JButton(JTUtilities.COMMON_RESOURCE_BUNDLE.getString("ok.Text"));
49      private JButton     cancelButton                = new JButton(JTUtilities.COMMON_RESOURCE_BUNDLE.getString("cancel.Text"));
50      private JButton     browseTileSetButton         = new JButton(MAIN_RESOURCE_BUNDLE.getString("browseTileSet.Text") + JTUtilities.ELLIPSIS);
51      private JTLabel     widthLabel                  = new JTLabel(MAIN_RESOURCE_BUNDLE.getString("mapWidth.Text") + ":");
52      private JTLabel     heightLabel                 = new JTLabel(MAIN_RESOURCE_BUNDLE.getString("mapHeight.Text") + ":");
53      private JTLabel     defaultTileIndexLabel       = new JTLabel(MAIN_RESOURCE_BUNDLE.getString("defaultTileIndex.Text") + ":");
54      private JTLabel     tileSizeLabel               = new JTLabel(MAIN_RESOURCE_BUNDLE.getString("tileSize.Text") + ":");
55      private JTLabel     tileSetFileLabel            = new JTLabel("");
56      private JTTextField widthTextField              = new JTTextField();
57      private JTTextField heightTextField             = new JTTextField();
58      private JTTextField defaultTileIndexTextField   = new JTTextField();
59      private JTTextField tileSizeTextField           = new JTTextField();
60      private JCheckBox   useDefaultTileSetCheckBox   = new JCheckBox();
61  
62      private int width               = -1;
63      private int height              = -1;
64      private int tileSize            = -1;
65      private int defaultTileIndex    = -1;
66  
67      private boolean useDefaultTileSet   = true;
68      private File    tileSetFile         = null;
69  
70      public NewMapDialog(JFrame owner, boolean isModal, int width, int height)
71      {
72          super(owner, isModal);
73  
74          this.width = width;
75          this.height = height;
76  
77          useDefaultTileSetCheckBox.setSelected(true);
78  
79          guiInit();
80          registerEvents();
81      }
82  
83      private void guiInit()
84      {
85          this.setSize(getNewSize(useDefaultTileSetCheckBox.isSelected()));
86  
87          this.setTitle(EditFrame.MAIN_RESOURCE_BUNDLE.getString("newMap.Text"));
88          this.getContentPane().setLayout(new BorderLayout(0, 0));
89          this.setResizable(false);
90  
91          widthLabel.setRequired(true);
92          heightLabel.setRequired(true);
93          tileSizeLabel.setRequired(true);
94          defaultTileIndexLabel.setRequired(true);
95  
96          this.getContentPane().add(mainPanel, BorderLayout.CENTER);
97          this.getContentPane().add(buttonPanel,  BorderLayout.SOUTH);
98  
99          buttonPanel.setLayout(new JTCommandButtonLayout());
100         mainPanel.setLayout(new GridBagLayout());
101         tileSetDetailsPanel.setLayout(new GridBagLayout());
102 
103 
104         buttonPanel.add(okButton);
105         buttonPanel.add(cancelButton);
106 
107         mainPanel.add(widthLabel,      new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
108             ,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(3, 6, 3, 6), 0, 0));
109         mainPanel.add(heightLabel,       new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0
110             ,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(3, 6, 3, 6), 0, 0));
111         mainPanel.add(widthTextField,         new GridBagConstraints(1, 0, 1, 1, 1.0, 0.0
112             ,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(3, 6, 3, 6), 0, 0));
113         mainPanel.add(heightTextField,             new GridBagConstraints(1, 1, 1, 1, 1.0, 0.0
114             ,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(3, 6, 3, 6), 0, 0));
115         mainPanel.add(useDefaultTileSetCheckBox,               new GridBagConstraints(1, 2, 1, 1, 0.0, 1.0
116             ,GridBagConstraints.NORTHWEST, GridBagConstraints.NONE, new Insets(3, 6, 3, 6), 0, 0));
117         mainPanel.add(tileSetDetailsPanel,    new GridBagConstraints(0, 3, 2, 1, 1.0, 1.0
118             ,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0));
119 
120         tileSetDetailsPanel.add(defaultTileIndexLabel,                          new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0
121             ,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(3, 6, 3, 6), 0, 0));
122         tileSetDetailsPanel.add(defaultTileIndexTextField,                               new GridBagConstraints(1, 1, 1, 1, 1.0, 0.0
123             ,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(3, 6, 3, 6), 0, 0));
124         tileSetDetailsPanel.add(tileSizeLabel,                      new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
125             ,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(3, 6, 3, 6), 0, 0));
126         tileSetDetailsPanel.add(tileSizeTextField,                  new GridBagConstraints(1, 0, 1, 1, 1.0, 0.0
127             ,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(3, 6, 3, 6), 0, 0));
128         tileSetDetailsPanel.add(browseTileSetButton,     new GridBagConstraints(0, 2, 2, 1, 0.0, 0.0
129             ,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(6, 6, 3, 6), 0, 0));
130         tileSetDetailsPanel.add(tileSetFileLabel,    new GridBagConstraints(0, 3, 2, 1, 1.0, 1.0
131             ,GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL, new Insets(3, 6, 3, 6), 0, 0));
132 
133         widthLabel.setDisplayedMnemonic(MAIN_RESOURCE_BUNDLE.getString("mapWidth.Mnemonic").charAt(0));
134         heightLabel.setDisplayedMnemonic(MAIN_RESOURCE_BUNDLE.getString("mapHeight.Mnemonic").charAt(0));
135         useDefaultTileSetCheckBox.setMnemonic(MAIN_RESOURCE_BUNDLE.getString("useDefaultTileSet.Mnemonic").charAt(0));
136         tileSizeLabel.setDisplayedMnemonic(MAIN_RESOURCE_BUNDLE.getString("tileSize.Mnemonic").charAt(0));
137         defaultTileIndexLabel.setDisplayedMnemonic(MAIN_RESOURCE_BUNDLE.getString("defaultTileIndex.Mnemonic").charAt(0));
138         browseTileSetButton.setMnemonic(MAIN_RESOURCE_BUNDLE.getString("browseTileSet.Mnemonic").charAt(0));
139 
140         widthLabel.setLabelFor(widthTextField);
141         heightLabel.setLabelFor(heightTextField);
142         tileSizeLabel.setLabelFor(tileSizeTextField);
143         defaultTileIndexLabel.setLabelFor(defaultTileIndexTextField);
144 
145         widthTextField.setText(Long.toString(width));
146         widthTextField.setToolTipText(MAIN_RESOURCE_BUNDLE.getString("mapWidth.ToolTip"));
147         widthLabel.setToolTipText(MAIN_RESOURCE_BUNDLE.getString("mapWidth.ToolTip"));
148         heightTextField.setText(Long.toString(height));
149         heightTextField.setToolTipText(MAIN_RESOURCE_BUNDLE.getString("mapHeight.ToolTip"));
150         heightLabel.setToolTipText(MAIN_RESOURCE_BUNDLE.getString("mapHeight.ToolTip"));
151 
152         useDefaultTileSetCheckBox.setText(MAIN_RESOURCE_BUNDLE.getString("useDefaultTileSet.Text"));
153         tileSizeTextField.setText("0");
154         tileSizeTextField.setToolTipText(MAIN_RESOURCE_BUNDLE.getString("tileSize.ToolTip"));
155         tileSizeLabel.setToolTipText(MAIN_RESOURCE_BUNDLE.getString("tileSize.ToolTip"));
156         defaultTileIndexTextField.setText("0");
157         defaultTileIndexTextField.setToolTipText(MAIN_RESOURCE_BUNDLE.getString("defaultTileIndex.ToolTip"));
158         defaultTileIndexLabel.setToolTipText(MAIN_RESOURCE_BUNDLE.getString("defaultTileIndex.ToolTip"));
159         tileSetFileLabel.setText(" ");
160 
161         widthTextField.requestFocus();
162         widthTextField.selectAll();
163 
164         this.getRootPane().setDefaultButton(okButton);
165 
166         JTUtilities.centerRelativeFrom(this.getOwner(), this);
167 
168         tileSetDetailsPanel.setVisible(false);
169     }
170 
171     private void registerEvents()
172     {
173 
174         okButton.addActionListener(new ActionListener()
175         {
176             public void actionPerformed(ActionEvent event)
177             {
178                 handleOKButton();
179             }
180         });
181 
182         cancelButton.addActionListener(new ActionListener()
183         {
184             public void actionPerformed(ActionEvent event)
185             {
186                 handleCancelButton();
187             }
188         });
189 
190         browseTileSetButton.addActionListener(new ActionListener()
191         {
192             public void actionPerformed(ActionEvent event)
193             {
194                 handleBrowseForTileSet();
195             }
196         });
197 
198         useDefaultTileSetCheckBox.addActionListener(new ActionListener()
199         {
200             public void actionPerformed(ActionEvent event)
201             {
202                 handleUseDefaultTileSet(useDefaultTileSetCheckBox.isSelected());
203             }
204         });
205     }
206 
207     public int getMapWidth()
208     {
209         return width;
210     }
211 
212     public int getMapHeight()
213     {
214         return height;
215     }
216 
217     public boolean useDefaultTileSet()
218     {
219         return useDefaultTileSet;
220     }
221 
222     public int getTileSize()
223     {
224         return tileSize;
225     }
226 
227     public int getDefaultTileIndex()
228     {
229         return defaultTileIndex;
230     }
231 
232     public File getTileSetFile()
233     {
234         return tileSetFile;
235     }
236 
237     private void handleOKButton()
238     {
239         boolean hide = true;
240         boolean invalidNumber = false;
241         boolean invalidSize = false;
242         boolean invalidRange = false;
243         useDefaultTileSet = useDefaultTileSetCheckBox.isSelected();
244 
245         try
246         {
247             width = Integer.valueOf(widthTextField.getText()).intValue();
248             height = Integer.valueOf(heightTextField.getText()).intValue();
249 
250             if (!useDefaultTileSet)
251             {
252                 tileSize = Integer.valueOf(tileSizeTextField.getText()).intValue();
253                 defaultTileIndex = Integer.valueOf(defaultTileIndexTextField.getText()).intValue();
254             }
255         }
256         catch (NumberFormatException e)
257         {
258             invalidNumber = true;
259         }
260 
261         if (width < 1 || height < 1)
262             invalidRange = true;
263         else if(!useDefaultTileSet && (tileSize <= 0 || defaultTileIndex < 0))
264             invalidRange = true;
265 
266         if ((long)width * (long)height > (long)Integer.MAX_VALUE)
267             invalidSize = true;
268 
269         if (!useDefaultTileSet && tileSetFile == null)
270         {
271             JTUtilities.showErrorMessage(this, MAIN_RESOURCE_BUNDLE.getString("tileSetInvalidError.Message"), MAIN_RESOURCE_BUNDLE.getString("tileSetInvalidError.Title"));
272             hide = false;
273         }
274 
275         if (invalidNumber)
276         {
277             JTUtilities.showErrorMessage(this, EditFrame.MAIN_RESOURCE_BUNDLE.getString("invalidNumberError.Message"), EditFrame.MAIN_RESOURCE_BUNDLE.getString("invalidNumberError.Title"));
278             hide = false;
279         }
280 
281         if (invalidRange)
282         {
283             String[] message = new String[]
284             {
285                 EditFrame.MAIN_RESOURCE_BUNDLE.getString("invalidNumberError.Message"),
286                 " ",
287                 MAIN_RESOURCE_BUNDLE.getString("validNumberRange.Text"),
288                 "               1 " + JTUtilities.COMMON_RESOURCE_BUNDLE.getString("to.Text") + " " + Integer.toString(Integer.MAX_VALUE)
289             };
290 
291             JTUtilities.showErrorMessage(this, message, EditFrame.MAIN_RESOURCE_BUNDLE.getString("invalidNumberError.Title"));
292             hide = false;
293 
294         }
295 
296         if (invalidSize)
297         {
298             String[] message = new String[]
299             {
300                 MAIN_RESOURCE_BUNDLE.getString("mapSizeError.Message.1"),
301                 "                    " + Integer.toString(Integer.MAX_VALUE),
302                 " ",
303                 MAIN_RESOURCE_BUNDLE.getString("mapSizeError.Message.2")
304             };
305             JOptionPane.showMessageDialog(this, message, MAIN_RESOURCE_BUNDLE.getString("mapSizeError.Title"), JOptionPane.ERROR_MESSAGE);
306             hide = false;
307         }
308 
309         if (hide)
310             hide();
311     }
312 
313     private void handleCancelButton()
314     {
315         width = -1;
316         height = -1;
317 
318         hide();
319     }
320 
321     private void handleUseDefaultTileSet(boolean useDefaultTileSet)
322     {
323         Dimension newSize = getNewSize(useDefaultTileSet);
324 
325         if (useDefaultTileSet)
326         {
327             this.setSize(newSize);
328 
329             mainPanel.remove(useDefaultTileSetCheckBox);
330             mainPanel.add(useDefaultTileSetCheckBox, new GridBagConstraints(1, 2, 1, 1, 0.0, 1.0, GridBagConstraints.NORTHWEST, GridBagConstraints.NONE, new Insets(3, 6, 3, 6), 0, 0));
331         }
332         else
333         {
334             this.setSize(newSize);
335             mainPanel.remove(useDefaultTileSetCheckBox);
336             mainPanel.add(useDefaultTileSetCheckBox, new GridBagConstraints(1, 2, 1, 1, 0.0, 0.0, GridBagConstraints.NORTHWEST, GridBagConstraints.NONE, new Insets(3, 6, 3, 6), 0, 0));
337         }
338 
339         tileSetDetailsPanel.setVisible(!useDefaultTileSet);
340 
341         invalidate();
342         validate();
343 
344     }
345 
346     private void handleBrowseForTileSet()
347     {
348         final JFileChooser fileChooser = new JFileChooser();
349         fileChooser.setDialogTitle(MAIN_RESOURCE_BUNDLE.getString("browseTileSet.Text"));
350         fileChooser.setFileFilter(new JTFileFilter("jpg", MAIN_RESOURCE_BUNDLE.getString("tileSetFileFilter.title")));
351         fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
352         fileChooser.setFileHidingEnabled(true);
353         fileChooser.setMultiSelectionEnabled(false);
354         fileChooser.setAcceptAllFileFilterUsed(false);
355 
356         if(fileChooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION)
357         {
358             new Thread( new Runnable()
359             {
360                 public void run()
361                 {
362                     try
363                     {
364                         File tileSetFile = fileChooser.getSelectedFile();
365 
366                         if (tileSetFile.exists())
367                         {
368                             NewMapDialog.this.tileSetFile = tileSetFile;
369                             NewMapDialog.this.tileSetFileLabel.setText(tileSetFile.getName());
370                         }
371                     }
372                     catch (Exception e)
373                     {
374                         e.printStackTrace();
375                         JTUtilities.showErrorMessage(NewMapDialog.this, e.getMessage(), e.getClass().toString());
376                     }
377                 }
378             }).start();
379         }
380     }
381 
382     private Dimension getNewSize(boolean useDefaultTileSet)
383     {
384         Dimension newSize = null;
385 
386         if (UIManager.getLookAndFeel().getClass().getName().equals(JTUtilities.LNF_MOTIF))
387             newSize = useDefaultTileSet ? new Dimension(DEFAULT_SIZE.width, DEFAULT_SIZE.height + JTUtilities.MOTIF_HEIGHT_OFFSET) :
388                                           new Dimension(FULL_SIZE.width, FULL_SIZE.height + JTUtilities.MOTIF_HEIGHT_OFFSET);
389         else
390             newSize = useDefaultTileSet ? DEFAULT_SIZE : FULL_SIZE;
391 
392         return newSize;
393     }
394 }