Gridarta Editor
MapPreviewAccessory.java
Go to the documentation of this file.
1 /*
2  * Gridarta MMORPG map editor for Crossfire, Daimonin and similar games.
3  * Copyright (C) 2000-2015 The Gridarta Developers.
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; if not, write to the Free Software Foundation, Inc.,
17  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18  */
19 
20 package net.sf.gridarta.gui.map;
21 
22 import java.awt.BorderLayout;
23 import java.awt.Dimension;
24 import java.awt.Image;
25 import java.beans.PropertyChangeEvent;
26 import java.beans.PropertyChangeListener;
27 import java.io.File;
28 import java.util.prefs.Preferences;
29 import javax.swing.Action;
30 import javax.swing.Icon;
31 import javax.swing.ImageIcon;
32 import javax.swing.JButton;
33 import javax.swing.JComponent;
34 import javax.swing.JFileChooser;
35 import javax.swing.JLabel;
36 import javax.swing.JScrollPane;
37 import javax.swing.SwingConstants;
38 import javax.swing.filechooser.FileView;
39 import net.sf.gridarta.MainControl;
41 import net.sf.japi.swing.action.ActionBuilder;
42 import net.sf.japi.swing.action.ActionBuilderFactory;
43 import net.sf.japi.swing.action.ActionMethod;
44 import net.sf.japi.swing.action.ToggleAction;
45 import org.jetbrains.annotations.NotNull;
46 import org.jetbrains.annotations.Nullable;
47 
53 public class MapPreviewAccessory extends JComponent {
54 
58  private static final long serialVersionUID = 1L;
59 
63  @NotNull
64  private static final ActionBuilder ACTION_BUILDER = ActionBuilderFactory.getInstance().getActionBuilder("net.sf.gridarta");
65 
69  @NotNull
70  private static final Preferences PREFERENCES = Preferences.userNodeForPackage(MainControl.class);
71 
75  @NotNull
76  private static final String PREFERENCES_AUTO_GENERATE_PREVIEW = "autoGeneratePreviews";
77 
81  @NotNull
83 
87  @NotNull
88  private final JLabel preview = new JLabel();
89 
93  @NotNull
94  private final ToggleAction autoGeneratePreview = (ToggleAction) ACTION_BUILDER.createToggle(false, "autoGeneratePreviews", this);
95 
99  @NotNull
100  private final Action genPreview = ACTION_BUILDER.createAction(false, "genPreview", this);
101 
105  @NotNull
106  private final JFileChooser fileChooser;
107 
111  @NotNull
112  private File @Nullable [] selectedFiles;
113 
117  private boolean autoGeneratePreviews;
118 
124  public MapPreviewAccessory(@NotNull final MapImageCache<?, ?, ?> mapImageCache, @NotNull final JFileChooser fileChooser) {
125  this.mapImageCache = mapImageCache;
126  this.fileChooser = fileChooser;
127  buildUI();
128  setPreview("genPreviewNone.text");
129 
130  final PropertyChangeListener propertyChangeListener = new PropertyChangeListener() {
131 
132  @Override
133  public void propertyChange(@NotNull final PropertyChangeEvent evt) {
134  final String prop = evt.getPropertyName();
135  if (JFileChooser.DIRECTORY_CHANGED_PROPERTY.equals(prop)) {
136  setPreview("genPreviewNone.text");
137  } else if (JFileChooser.SELECTED_FILE_CHANGED_PROPERTY.equals(prop)) {
138  final File selectedFile = (File) evt.getNewValue();
139  if (selectedFile == null) {
140  setPreview("genPreviewNone.text");
141  } else {
142  final Image previewImage = getMapPreview(selectedFile);
143  if (previewImage == null) {
144  setPreview("genPreviewNone.text");
145  } else {
146  setPreview(previewImage);
147  }
148  }
149  } else if (JFileChooser.SELECTED_FILES_CHANGED_PROPERTY.equals(prop)) {
150  selectedFiles = (File[]) evt.getNewValue();
151  }
152  }
153 
154  };
155  fileChooser.addPropertyChangeListener(propertyChangeListener);
156  fileChooser.setFileView(new MapFileView());
157  }
158 
162  private void buildUI() {
164  setPreferredSize(new Dimension(240, 115));
165  setLayout(new BorderLayout());
166  add(autoGeneratePreview.createCheckBox(), BorderLayout.NORTH);
167  add(new JButton(genPreview), BorderLayout.SOUTH);
168  preview.setHorizontalAlignment(SwingConstants.CENTER);
169  add(new JScrollPane(preview), BorderLayout.CENTER);
170  }
171 
176  private void setPreview(@Nullable final Image image) {
177  preview.setIcon(image == null ? null : new ImageIcon(image));
178  preview.setText(null);
179  }
180 
185  private void setPreview(@NotNull final String text) {
186  preview.setIcon(null);
187  preview.setText(ACTION_BUILDER.getString(text));
188  }
189 
195  @ActionMethod
196  public void setAutoGeneratePreviews(final boolean autoGeneratePreviews) {
197  this.autoGeneratePreviews = autoGeneratePreviews;
200  if (autoGeneratePreviews) {
201  fileChooser.validate();
202  fileChooser.repaint();
203  }
204  }
205 
211  @ActionMethod
212  public boolean isAutoGeneratePreviews() {
213  return autoGeneratePreviews;
214  }
215 
219  @ActionMethod
220  public void genPreview() {
221  final File[] files = selectedFiles;
222  if (files == null || files.length == 0) {
223  return;
224  }
225 
226  for (final File file : files) {
227  mapImageCache.flush(file);
228 
229  final Image image = mapImageCache.getOrCreatePreview(file);
230  setPreview(image);
231  }
232  fileChooser.validate();
233  fileChooser.repaint();
234  }
235 
242  @Nullable
243  private Image getMapIcon(@NotNull final File mapFile) {
244  return autoGeneratePreview.isSelected() ? mapImageCache.getOrCreateIcon(mapFile) : mapImageCache.getIcon(mapFile);
245  }
246 
253  @Nullable
254  private Image getMapPreview(@NotNull final File mapFile) {
255  return autoGeneratePreview.isSelected() ? mapImageCache.getOrCreatePreview(mapFile) : mapImageCache.getPreview(mapFile);
256  }
257 
261  private class MapFileView extends FileView {
262 
263  @Override
264  public Icon getIcon(@NotNull final File f) {
265  final Image image = fileChooser.getCurrentDirectory().equals(f.getParentFile()) ? getMapIcon(f) : null;
266  return image == null ? super.getIcon(f) : new ImageIcon(image);
267  }
268 
269  }
270 
271 }
net.sf.gridarta.gui.mapimagecache
Definition: ImageType.java:20
net.sf.gridarta.gui.map.MapPreviewAccessory.PREFERENCES
static final Preferences PREFERENCES
Definition: MapPreviewAccessory.java:70
net.sf.gridarta
net.sf.gridarta.gui.map.MapPreviewAccessory
Definition: MapPreviewAccessory.java:53
net.sf.gridarta.gui.map.MapPreviewAccessory.getMapIcon
Image getMapIcon(@NotNull final File mapFile)
Definition: MapPreviewAccessory.java:243
net.sf
net.sf.gridarta.gui.map.MapPreviewAccessory.mapImageCache
final MapImageCache<?, ?, ?> mapImageCache
Definition: MapPreviewAccessory.java:82
net.sf.gridarta.gui.map.MapPreviewAccessory.setAutoGeneratePreviews
void setAutoGeneratePreviews(final boolean autoGeneratePreviews)
Definition: MapPreviewAccessory.java:196
net.sf.gridarta.gui
net.sf.gridarta.gui.mapimagecache.MapImageCache.getIcon
Image getIcon(@NotNull final File mapFile)
Definition: MapImageCache.java:186
net.sf.gridarta.gui.map.MapPreviewAccessory.autoGeneratePreview
final ToggleAction autoGeneratePreview
Definition: MapPreviewAccessory.java:94
net.sf.gridarta.gui.mapimagecache.MapImageCache
Definition: MapImageCache.java:54
net.sf.gridarta.gui.map.MapPreviewAccessory.isAutoGeneratePreviews
boolean isAutoGeneratePreviews()
Definition: MapPreviewAccessory.java:212
net
net.sf.gridarta.gui.mapimagecache.MapImageCache.getOrCreateIcon
Image getOrCreateIcon(@NotNull final File mapFile)
Definition: MapImageCache.java:198
net.sf.gridarta.gui.map.MapPreviewAccessory.setPreview
void setPreview(@Nullable final Image image)
Definition: MapPreviewAccessory.java:176
net.sf.gridarta.gui.map.MapPreviewAccessory.preview
final JLabel preview
Definition: MapPreviewAccessory.java:88
net.sf.gridarta.gui.mapimagecache.MapImageCache.flush
void flush(@NotNull final File mapFile)
Definition: MapImageCache.java:173
net.sf.gridarta.gui.map.MapPreviewAccessory.autoGeneratePreviews
boolean autoGeneratePreviews
Definition: MapPreviewAccessory.java:117
net.sf.gridarta.gui.map.MapPreviewAccessory.setPreview
void setPreview(@NotNull final String text)
Definition: MapPreviewAccessory.java:185
net.sf.gridarta.gui.mapimagecache.MapImageCache.getOrCreatePreview
Image getOrCreatePreview(@NotNull final File mapFile)
Definition: MapImageCache.java:232
net.sf.gridarta.gui.map.MapPreviewAccessory.fileChooser
final JFileChooser fileChooser
Definition: MapPreviewAccessory.java:106
net.sf.gridarta.gui.map.MapPreviewAccessory.genPreview
void genPreview()
Definition: MapPreviewAccessory.java:220
net.sf.gridarta.gui.map.MapPreviewAccessory.MapFileView
Definition: MapPreviewAccessory.java:261
net.sf.gridarta.gui.map.MapPreviewAccessory.genPreview
final Action genPreview
Definition: MapPreviewAccessory.java:100
net.sf.gridarta.gui.map.MapPreviewAccessory.serialVersionUID
static final long serialVersionUID
Definition: MapPreviewAccessory.java:58
net.sf.gridarta.gui.map.MapPreviewAccessory.ACTION_BUILDER
static final ActionBuilder ACTION_BUILDER
Definition: MapPreviewAccessory.java:64
net.sf.gridarta.gui.mapimagecache.MapImageCache.getPreview
Image getPreview(@NotNull final File mapFile)
Definition: MapImageCache.java:220
net.sf.gridarta.gui.map.MapPreviewAccessory.MapPreviewAccessory
MapPreviewAccessory(@NotNull final MapImageCache<?, ?, ?> mapImageCache, @NotNull final JFileChooser fileChooser)
Definition: MapPreviewAccessory.java:124
net.sf.gridarta.gui.map.MapPreviewAccessory.getMapPreview
Image getMapPreview(@NotNull final File mapFile)
Definition: MapPreviewAccessory.java:254
net.sf.gridarta.gui.map.MapPreviewAccessory.buildUI
void buildUI()
Definition: MapPreviewAccessory.java:162
net.sf.gridarta.gui.map.MapPreviewAccessory.PREFERENCES_AUTO_GENERATE_PREVIEW
static final String PREFERENCES_AUTO_GENERATE_PREVIEW
Definition: MapPreviewAccessory.java:76
net.sf.gridarta.gui.map.MapPreviewAccessory.selectedFiles
File[] selectedFiles
Definition: MapPreviewAccessory.java:112
net.sf.gridarta.gui.map.MapPreviewAccessory.MapFileView.getIcon
Icon getIcon(@NotNull final File f)
Definition: MapPreviewAccessory.java:264
net.sf.gridarta.MainControl
Definition: MainControl.java:27