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-2023 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.PropertyChangeListener;
26 import java.io.File;
27 import java.util.prefs.Preferences;
28 import javax.swing.Action;
29 import javax.swing.Icon;
30 import javax.swing.ImageIcon;
31 import javax.swing.JButton;
32 import javax.swing.JComponent;
33 import javax.swing.JFileChooser;
34 import javax.swing.JLabel;
35 import javax.swing.JScrollPane;
36 import javax.swing.SwingConstants;
37 import javax.swing.filechooser.FileView;
38 import net.sf.gridarta.MainControl;
40 import net.sf.japi.swing.action.ActionBuilder;
41 import net.sf.japi.swing.action.ActionBuilderFactory;
42 import net.sf.japi.swing.action.ActionMethod;
43 import net.sf.japi.swing.action.ToggleAction;
44 import org.jetbrains.annotations.NotNull;
45 import org.jetbrains.annotations.Nullable;
46 
52 public class MapPreviewAccessory extends JComponent {
53 
57  private static final long serialVersionUID = 1L;
58 
62  @NotNull
63  private static final ActionBuilder ACTION_BUILDER = ActionBuilderFactory.getInstance().getActionBuilder("net.sf.gridarta");
64 
68  @NotNull
69  private static final Preferences PREFERENCES = Preferences.userNodeForPackage(MainControl.class);
70 
74  @NotNull
75  private static final String PREFERENCES_AUTO_GENERATE_PREVIEW = "autoGeneratePreviews";
76 
80  @NotNull
82 
86  @NotNull
87  private final JLabel preview = new JLabel();
88 
92  @NotNull
93  private final ToggleAction autoGeneratePreview = (ToggleAction) ACTION_BUILDER.createToggle(false, "autoGeneratePreviews", this);
94 
98  @NotNull
99  private final Action genPreview = ACTION_BUILDER.createAction(false, "genPreview", this);
100 
104  @NotNull
105  private final JFileChooser fileChooser;
106 
110  @NotNull
111  private File @Nullable [] selectedFiles;
112 
116  private boolean autoGeneratePreviews;
117 
123  public MapPreviewAccessory(@NotNull final MapImageCache<?, ?, ?> mapImageCache, @NotNull final JFileChooser fileChooser) {
124  this.mapImageCache = mapImageCache;
125  this.fileChooser = fileChooser;
126  buildUI();
127  setPreview("genPreviewNone.text");
128 
129  final PropertyChangeListener propertyChangeListener = evt -> {
130  final String prop = evt.getPropertyName();
131  if (JFileChooser.DIRECTORY_CHANGED_PROPERTY.equals(prop)) {
132  setPreview("genPreviewNone.text");
133  } else if (JFileChooser.SELECTED_FILE_CHANGED_PROPERTY.equals(prop)) {
134  final File selectedFile = (File) evt.getNewValue();
135  if (selectedFile == null) {
136  setPreview("genPreviewNone.text");
137  } else {
138  final Image previewImage = getMapPreview(selectedFile);
139  if (previewImage == null) {
140  setPreview("genPreviewNone.text");
141  } else {
142  setPreview(previewImage);
143  }
144  }
145  } else if (JFileChooser.SELECTED_FILES_CHANGED_PROPERTY.equals(prop)) {
146  selectedFiles = (File[]) evt.getNewValue();
147  }
148  };
149  fileChooser.addPropertyChangeListener(propertyChangeListener);
150  fileChooser.setFileView(new MapFileView());
151  }
152 
156  private void buildUI() {
158  setPreferredSize(new Dimension(240, 115));
159  setLayout(new BorderLayout());
160  add(autoGeneratePreview.createCheckBox(), BorderLayout.NORTH);
161  add(new JButton(genPreview), BorderLayout.SOUTH);
162  preview.setHorizontalAlignment(SwingConstants.CENTER);
163  add(new JScrollPane(preview), BorderLayout.CENTER);
164  }
165 
170  private void setPreview(@Nullable final Image image) {
171  preview.setIcon(image == null ? null : new ImageIcon(image));
172  preview.setText(null);
173  }
174 
179  private void setPreview(@NotNull final String text) {
180  preview.setIcon(null);
181  preview.setText(ACTION_BUILDER.getString(text));
182  }
183 
189  @ActionMethod
190  public void setAutoGeneratePreviews(final boolean autoGeneratePreviews) {
191  this.autoGeneratePreviews = autoGeneratePreviews;
194  if (autoGeneratePreviews) {
195  fileChooser.validate();
196  fileChooser.repaint();
197  }
198  }
199 
205  @ActionMethod
206  public boolean isAutoGeneratePreviews() {
207  return autoGeneratePreviews;
208  }
209 
213  @ActionMethod
214  public void genPreview() {
215  final File[] files = selectedFiles;
216  if (files == null || files.length == 0) {
217  return;
218  }
219 
220  for (final File file : files) {
221  mapImageCache.flush(file);
222 
223  final Image image = mapImageCache.getOrCreatePreview(file);
224  setPreview(image);
225  }
226  fileChooser.validate();
227  fileChooser.repaint();
228  }
229 
236  @Nullable
237  private Image getMapIcon(@NotNull final File mapFile) {
238  return autoGeneratePreview.isSelected() ? mapImageCache.getOrCreateIcon(mapFile) : mapImageCache.getIcon(mapFile);
239  }
240 
247  @Nullable
248  private Image getMapPreview(@NotNull final File mapFile) {
249  return autoGeneratePreview.isSelected() ? mapImageCache.getOrCreatePreview(mapFile) : mapImageCache.getPreview(mapFile);
250  }
251 
255  private class MapFileView extends FileView {
256 
257  @Override
258  public Icon getIcon(@NotNull final File f) {
259  final Image image = fileChooser.getCurrentDirectory().equals(f.getParentFile()) ? getMapIcon(f) : null;
260  return image == null ? super.getIcon(f) : new ImageIcon(image);
261  }
262 
263  }
264 
265 }
net.sf.gridarta.gui.mapimagecache
Definition: ImageType.java:20
net.sf.gridarta.gui.map.MapPreviewAccessory.mapImageCache
final MapImageCache<?, ?, ?> mapImageCache
Definition: MapPreviewAccessory.java:81
net.sf.gridarta
net.sf.gridarta.gui.map.MapPreviewAccessory.autoGeneratePreview
final ToggleAction autoGeneratePreview
Definition: MapPreviewAccessory.java:93
net.sf.gridarta.gui.map.MapPreviewAccessory.fileChooser
final JFileChooser fileChooser
Definition: MapPreviewAccessory.java:105
net.sf.gridarta.MainControl
Definition: MainControl.java:27
net.sf.gridarta.gui.map.MapPreviewAccessory.genPreview
void genPreview()
Definition: MapPreviewAccessory.java:214
net.sf.gridarta.gui.map.MapPreviewAccessory.autoGeneratePreviews
boolean autoGeneratePreviews
Definition: MapPreviewAccessory.java:116
files
Standard Edition Runtime Environment README Import and export control rules on cryptographic software vary from country to country The Java Cryptography Java provides two different sets of cryptographic policy files
Definition: README.txt:26
net.sf
net.sf.gridarta.gui.mapimagecache.MapImageCache.flush
void flush(@NotNull final File mapFile)
Definition: MapImageCache.java:167
net.sf.gridarta.gui.map.MapPreviewAccessory.setAutoGeneratePreviews
void setAutoGeneratePreviews(final boolean autoGeneratePreviews)
Definition: MapPreviewAccessory.java:190
net.sf.gridarta.gui
net.sf.gridarta.gui.map.MapPreviewAccessory.preview
final JLabel preview
Definition: MapPreviewAccessory.java:87
net.sf.gridarta.gui.mapimagecache.MapImageCache.getIcon
Image getIcon(@NotNull final File mapFile)
Definition: MapImageCache.java:180
net
net.sf.gridarta.gui.map.MapPreviewAccessory.getMapIcon
Image getMapIcon(@NotNull final File mapFile)
Definition: MapPreviewAccessory.java:237
net.sf.gridarta.gui.map.MapPreviewAccessory.setPreview
void setPreview(@Nullable final Image image)
Definition: MapPreviewAccessory.java:170
net.sf.gridarta.gui.map.MapPreviewAccessory.buildUI
void buildUI()
Definition: MapPreviewAccessory.java:156
net.sf.gridarta.gui.map.MapPreviewAccessory.isAutoGeneratePreviews
boolean isAutoGeneratePreviews()
Definition: MapPreviewAccessory.java:206
net.sf.gridarta.gui.map.MapPreviewAccessory.ACTION_BUILDER
static final ActionBuilder ACTION_BUILDER
Definition: MapPreviewAccessory.java:63
net.sf.gridarta.gui.map.MapPreviewAccessory.getMapPreview
Image getMapPreview(@NotNull final File mapFile)
Definition: MapPreviewAccessory.java:248
net.sf.gridarta.gui.map.MapPreviewAccessory.setPreview
void setPreview(@NotNull final String text)
Definition: MapPreviewAccessory.java:179
net.sf.gridarta.gui.map.MapPreviewAccessory.genPreview
final Action genPreview
Definition: MapPreviewAccessory.java:99
net.sf.gridarta.gui.mapimagecache.MapImageCache.getOrCreateIcon
Image getOrCreateIcon(@NotNull final File mapFile)
Definition: MapImageCache.java:192
net.sf.gridarta.gui.map.MapPreviewAccessory
Definition: MapPreviewAccessory.java:52
net.sf.gridarta.gui.map.MapPreviewAccessory.selectedFiles
File[] selectedFiles
Definition: MapPreviewAccessory.java:111
net.sf.gridarta.gui.mapimagecache.MapImageCache.getOrCreatePreview
Image getOrCreatePreview(@NotNull final File mapFile)
Definition: MapImageCache.java:226
net.sf.gridarta.gui.map.MapPreviewAccessory.MapPreviewAccessory
MapPreviewAccessory(@NotNull final MapImageCache<?, ?, ?> mapImageCache, @NotNull final JFileChooser fileChooser)
Definition: MapPreviewAccessory.java:123
net.sf.gridarta.gui.map.MapPreviewAccessory.MapFileView
Definition: MapPreviewAccessory.java:255
net.sf.gridarta.gui.map.MapPreviewAccessory.PREFERENCES_AUTO_GENERATE_PREVIEW
static final String PREFERENCES_AUTO_GENERATE_PREVIEW
Definition: MapPreviewAccessory.java:75
net.sf.gridarta.gui.map.MapPreviewAccessory.serialVersionUID
static final long serialVersionUID
Definition: MapPreviewAccessory.java:57
net.sf.gridarta.gui.mapimagecache.MapImageCache
Definition: MapImageCache.java:53
net.sf.gridarta.gui.mapimagecache.MapImageCache.getPreview
Image getPreview(@NotNull final File mapFile)
Definition: MapImageCache.java:214
net.sf.gridarta.gui.map.MapPreviewAccessory.MapFileView.getIcon
Icon getIcon(@NotNull final File f)
Definition: MapPreviewAccessory.java:258
net.sf.gridarta.gui.map.MapPreviewAccessory.PREFERENCES
static final Preferences PREFERENCES
Definition: MapPreviewAccessory.java:69