source: josm/trunk/src/org/openstreetmap/josm/gui/io/FilenameCellEditor.java@ 2606

Last change on this file since 2606 was 2512, checked in by stoecker, 14 years ago

i18n updated, fixed files to reduce problems when applying patches, fix #4017

File size: 4.3 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.io;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.awt.Component;
7import java.awt.GridBagConstraints;
8import java.awt.GridBagLayout;
9import java.awt.event.ActionEvent;
10import java.awt.event.FocusAdapter;
11import java.awt.event.FocusEvent;
12import java.io.File;
13import java.util.EventObject;
14import java.util.concurrent.CopyOnWriteArrayList;
15
16import javax.swing.AbstractAction;
17import javax.swing.JButton;
18import javax.swing.JPanel;
19import javax.swing.JTable;
20import javax.swing.JTextField;
21import javax.swing.event.CellEditorListener;
22import javax.swing.event.ChangeEvent;
23import javax.swing.table.TableCellEditor;
24
25import org.openstreetmap.josm.actions.SaveActionBase;
26
27/**
28 * This is a {@see TableCellEditor} for filenames. It provides a text input field and
29 * a button for launchinig a {@see JFileChooser}.
30 *
31 *
32 */
33class FilenameCellEditor extends JPanel implements TableCellEditor {
34 private JTextField tfFileName;
35 private CopyOnWriteArrayList<CellEditorListener> listeners;
36 private File value;
37
38 /**
39 * build the GUI
40 */
41 protected void build() {
42 setLayout(new GridBagLayout());
43 GridBagConstraints gc = new GridBagConstraints();
44 gc.gridx = 0;
45 gc.gridy = 0;
46 gc.fill = GridBagConstraints.BOTH;
47 gc.weightx = 1.0;
48 gc.weighty = 1.0;
49 add(tfFileName = new JTextField(), gc);
50
51 gc.gridx = 1;
52 gc.gridy = 0;
53 gc.fill = GridBagConstraints.BOTH;
54 gc.weightx = 0.0;
55 gc.weighty = 1.0;
56 add(new JButton(new LaunchFileChooserAction()));
57
58 tfFileName.addFocusListener(
59 new FocusAdapter() {
60 @Override
61 public void focusGained(FocusEvent e) {
62 tfFileName.selectAll();
63 }
64 }
65 );
66 }
67
68 public FilenameCellEditor() {
69 listeners = new CopyOnWriteArrayList<CellEditorListener>();
70 build();
71 }
72
73 public void addCellEditorListener(CellEditorListener l) {
74 if (!listeners.contains(l)) {
75 listeners.add(l);
76 }
77 }
78
79 protected void fireEditingCanceled() {
80 for (CellEditorListener l: listeners) {
81 l.editingCanceled(new ChangeEvent(this));
82 }
83 }
84
85 protected void fireEditingStopped() {
86 for (CellEditorListener l: listeners) {
87 l.editingStopped(new ChangeEvent(this));
88 }
89 }
90
91 public void cancelCellEditing() {
92 fireEditingCanceled();
93 }
94
95 public Object getCellEditorValue() {
96 return value;
97 }
98
99 public boolean isCellEditable(EventObject anEvent) {
100 return true;
101 }
102
103 public void removeCellEditorListener(CellEditorListener l) {
104 if (listeners.contains(l)) {
105 listeners.remove(l);
106 }
107 }
108
109 public boolean shouldSelectCell(EventObject anEvent) {
110 return true;
111 }
112
113 public boolean stopCellEditing() {
114 if (tfFileName.getText() == null || tfFileName.getText().trim().equals("")) {
115 value = null;
116 } else {
117 value = new File(tfFileName.getText());
118 }
119 fireEditingStopped();
120 return true;
121 }
122
123 public void setInitialValue(File initialValue) {
124 this.value = initialValue;
125 if (initialValue == null) {
126 this.tfFileName.setText("");
127 } else {
128 this.tfFileName.setText(initialValue.toString());
129 }
130 }
131
132 public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
133 SaveLayerInfo info = (SaveLayerInfo)value;
134 setInitialValue(info.getFile());
135 tfFileName.selectAll();
136 return this;
137 }
138
139 class LaunchFileChooserAction extends AbstractAction {
140 public LaunchFileChooserAction() {
141 putValue(NAME, "...");
142 putValue(SHORT_DESCRIPTION, tr("Launch a file chooser to select a file"));
143 }
144
145 public void actionPerformed(ActionEvent e) {
146 File f = SaveActionBase.createAndOpenSaveFileChooser(tr("Select filename"), "osm");
147 if (f != null) {
148 FilenameCellEditor.this.tfFileName.setText(f.toString());
149 FilenameCellEditor.this.tfFileName.selectAll();
150 }
151 }
152 }
153}
Note: See TracBrowser for help on using the repository browser.