source: josm/trunk/src/org/openstreetmap/josm/actions/RenameLayerAction.java@ 2198

Last change on this file since 2198 was 2017, checked in by Gubaer, 15 years ago

removed OptionPaneUtil
cleanup of deprecated Layer API
cleanup of deprecated APIs in OsmPrimitive and Way
cleanup of imports

  • Property svn:eol-style set to native
File size: 3.7 KB
Line 
1// License: GPL. Copyright 2007 by Immanuel Scholz and others
2package org.openstreetmap.josm.actions;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.awt.event.ActionEvent;
7import java.io.File;
8
9import javax.swing.AbstractAction;
10import javax.swing.Box;
11import javax.swing.JCheckBox;
12import javax.swing.JDialog;
13import javax.swing.JOptionPane;
14import javax.swing.JTextField;
15
16import org.openstreetmap.josm.Main;
17import org.openstreetmap.josm.gui.layer.Layer;
18import org.openstreetmap.josm.tools.ImageProvider;
19
20/**
21 * Action to rename an specific layer. Provides the option to rename the
22 * file, this layer was loaded from as well (if it was loaded from a file).
23 *
24 * @author Imi
25 */
26public class RenameLayerAction extends AbstractAction {
27
28 private File file;
29 private Layer layer;
30
31 /**
32 * @param file The file of the original location of this layer.
33 * If null, no possibility to "rename the file as well" is provided.
34 */
35 public RenameLayerAction(File file, Layer layer) {
36 super(tr("Rename layer"), ImageProvider.get("dialogs", "edit"));
37 this.file = file;
38 this.layer = layer;
39 this.putValue("help", "Action/LayerRename");
40 }
41
42 public void actionPerformed(ActionEvent e) {
43 Box panel = Box.createVerticalBox();
44 final JTextField name = new JTextField(layer.getName());
45 panel.add(name);
46 JCheckBox filerename = new JCheckBox(tr("Also rename the file"));
47 if (Main.applet) {
48 filerename.setEnabled(false);
49 filerename.setSelected(false);
50 } else {
51 panel.add(filerename);
52 filerename.setEnabled(file != null);
53 }
54 if (filerename.isEnabled()) {
55 filerename.setSelected(Main.pref.getBoolean("layer.rename-file", true));
56 }
57
58 final JOptionPane optionPane = new JOptionPane(panel, JOptionPane.QUESTION_MESSAGE, JOptionPane.OK_CANCEL_OPTION){
59 @Override public void selectInitialValue() {
60 name.requestFocusInWindow();
61 name.selectAll();
62 }
63 };
64 final JDialog dlg = optionPane.createDialog(Main.parent, tr("Rename layer"));
65 dlg.setModal(true);
66 dlg.setVisible(true);
67
68 Object answer = optionPane.getValue();
69 if (answer == null || answer == JOptionPane.UNINITIALIZED_VALUE ||
70 (answer instanceof Integer && (Integer)answer != JOptionPane.OK_OPTION))
71 return;
72
73 String nameText = name.getText();
74 if (filerename.isEnabled()) {
75 Main.pref.put("layer.rename-file", filerename.isSelected());
76 if (filerename.isSelected()) {
77 String newname = nameText;
78 if (newname.indexOf("/") == -1 && newname.indexOf("\\") == -1) {
79 newname = file.getParent() + File.separator + newname;
80 }
81 String oldname = file.getName();
82 if (name.getText().indexOf('.') == -1 && oldname.indexOf('.') >= 0) {
83 newname += oldname.substring(oldname.lastIndexOf('.'));
84 }
85 File newFile = new File(newname);
86 if (file.renameTo(newFile)) {
87 layer.setAssociatedFile(newFile);
88 nameText = newFile.getName();
89 } else {
90 JOptionPane.showMessageDialog(
91 Main.parent,
92 tr("Could not rename file ''{0}''", file.getPath()),
93 tr("Error"),
94 JOptionPane.ERROR_MESSAGE
95 );
96 return;
97 }
98 }
99 }
100 layer.setName(nameText);
101 Main.parent.repaint();
102 }
103}
Note: See TracBrowser for help on using the repository browser.