Statistics
| Revision:

gvsig-tools / org.gvsig.tools / library / trunk / org.gvsig.tools / org.gvsig.tools.swing / org.gvsig.tools.swing.impl / src / main / java / org / gvsig / tools / swing / impl / pickercontroller / FilePickerControllerImpl.java @ 1989

History | View | Annotate | Download (6.53 KB)

1
package org.gvsig.tools.swing.impl.pickercontroller;
2

    
3
import java.awt.BorderLayout;
4
import java.awt.event.ActionEvent;
5
import java.awt.event.ActionListener;
6
import java.awt.event.KeyAdapter;
7
import java.awt.event.KeyEvent;
8
import java.io.File;
9
import java.net.URL;
10
import javax.swing.ImageIcon;
11
import javax.swing.JButton;
12
import javax.swing.JFileChooser;
13
import javax.swing.JTextField;
14
import javax.swing.filechooser.FileFilter;
15
import org.apache.commons.lang3.ArrayUtils;
16
import org.gvsig.tools.ToolsLocator;
17
import org.gvsig.tools.dataTypes.DataTypes;
18
import org.gvsig.tools.folders.FoldersManager;
19
import org.gvsig.tools.i18n.I18nManager;
20
import org.gvsig.tools.swing.api.pickercontroller.AbstractPickerController;
21
import org.gvsig.tools.swing.api.ToolsSwingLocator;
22
import org.gvsig.tools.swing.api.pickercontroller.FilePickerController;
23
import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager;
24
import org.gvsig.tools.swing.icontheme.IconTheme;
25
import org.gvsig.tools.swing.icontheme.IconThemeManager;
26

    
27
/**
28
 *
29
 * @author jjdelcerro
30
 */
31
public class FilePickerControllerImpl
32
        extends AbstractPickerController<File>
33
        implements FilePickerController {
34

    
35
    private final JButton btnFile;
36
    private final JTextField txtFile;
37
    private final File initialPath;
38
    private final String fileChooserID;
39
    private final String dialogTitle;
40
    private File value;
41
    private FileFilter filter;
42

    
43
    public static void selfRegister() {
44
        URL imageResource = DatePickerControllerImpl.class.getClassLoader().getResource("org/gvsig/tools/swing/picker/picker-file.png");
45
        if (imageResource != null) {
46
            IconThemeManager iconThemeManager = ToolsSwingLocator.getIconThemeManager();
47
            IconTheme theme = iconThemeManager.getCurrent();
48
            ImageIcon icon = new ImageIcon(imageResource);
49
            theme.registerDefault("tools", "picker", "picker-file", icon, imageResource);
50
        }
51
        imageResource = DatePickerControllerImpl.class.getClassLoader().getResource("org/gvsig/tools/swing/picker/picker-cleartext.png");
52
        if (imageResource != null) {
53
            IconThemeManager iconThemeManager = ToolsSwingLocator.getIconThemeManager();
54
            IconTheme theme = iconThemeManager.getCurrent();
55
            ImageIcon icon = new ImageIcon(imageResource);
56
            theme.registerDefault("tools", "picker", "picker-cleartext", icon, imageResource);
57
        }
58
    }
59
    private final JButton btnClear;
60

    
61
    public FilePickerControllerImpl(JTextField txtFile, JButton btnFile, String dialogTitle) {
62
        this(txtFile, btnFile, dialogTitle, null, null, true);
63
    }
64

    
65
    public FilePickerControllerImpl(JTextField txtFile, JButton btnFile) {
66
        this(txtFile, btnFile, null, null, null, true);
67
    }
68

    
69
    public FilePickerControllerImpl(JTextField txtFile, JButton btnFile, String dialogTitle, String fileChooserID, File initialPath, boolean seticon) {
70
        this.value = null;
71
        this.txtFile = txtFile;
72
        this.btnFile = btnFile;
73
        this.fileChooserID = fileChooserID;
74
        this.initialPath = initialPath;
75
        if (dialogTitle == null) {
76
            I18nManager i18n = ToolsLocator.getI18nManager();
77
            this.dialogTitle = i18n.getTranslation("_Select_file");
78
        } else {
79
            this.dialogTitle = dialogTitle;
80
        }
81
        if (seticon) {
82
            this.btnFile.setIcon(this.getIcon("picker-file"));
83
            this.btnFile.setText("");
84
        }
85
        this.btnFile.addActionListener(new ActionListener() {
86
            @Override
87
            public void actionPerformed(ActionEvent e) {
88
                doSelectFile();
89
            }
90
        });
91
        this.btnClear = new JButton(getIcon("picker-cleartext"));
92
        btnClear.setBorderPainted(false);
93
        btnClear.setFocusPainted(false);
94
        btnClear.setContentAreaFilled(false);
95
        btnClear.setOpaque(false);
96
        btnClear.addActionListener(new ActionListener() {
97
            @Override
98
            public void actionPerformed(ActionEvent e) {
99
                doClear();
100
            }
101
        });
102
        //this.txtFile.setEditable(false);
103
        this.txtFile.setLayout(new BorderLayout());
104
        this.txtFile.add(btnClear, BorderLayout.EAST);
105
        this.txtFile.addKeyListener(new KeyAdapter() {
106
            @Override
107
            public void keyPressed(KeyEvent e) {
108
                if (e.getKeyCode() == KeyEvent.VK_ENTER) {
109
                    coerceAndSet(txtFile.getText());
110
                    fireChangeEvent();
111
                }
112
                super.keyPressed(e);
113
            }
114
        });
115
    }
116

    
117
    private void doClear() {
118
        this.set(null);
119
    }
120

    
121
    @Override
122
    public boolean isEmpty() {
123
        return this.value == null;
124
    }
125

    
126
    @Override
127
    public File get() {
128
        coerceAndSet(txtFile.getText());
129
        return this.value;
130
    }
131

    
132
    @Override
133
    public void set(File value) {
134
        this.value = value;
135
        if (value == null) {
136
            this.txtFile.setText("");
137
        } else {
138
            this.txtFile.setText(value.toString());
139
        }
140
    }
141

    
142
    @Override
143
    public void setEditable(boolean editable) {
144
        super.setEditable(editable);
145
        this.txtFile.setEditable(editable);
146
    }
147

    
148
    @Override
149
    public void setEnabled(boolean enabled) {
150
        this.btnFile.setEnabled(enabled);
151
        this.txtFile.setEnabled(enabled);
152
        this.btnClear.setEnabled(enabled);
153
    }
154

    
155
    @Override
156
    public boolean isEnabled() {
157
        return this.btnFile.isEnabled();
158
    }
159

    
160
    private void doSelectFile() {
161
        if (!this.isEditable()) {
162
            return;
163
        }
164
        ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager();
165
        FoldersManager folderManager = ToolsLocator.getFoldersManager();
166
        File pathToUse = initialPath;
167
        if (this.value != null) {
168
            pathToUse =  this.value;
169
        }
170
        File[] f = dialogs.showChooserDialog(
171
                this.dialogTitle,
172
                JFileChooser.OPEN_DIALOG,
173
                JFileChooser.FILES_ONLY,
174
                true,
175
                folderManager.getLastPath(
176
                        this.fileChooserID,
177
                        pathToUse
178
                ),
179
                this.filter,
180
                true
181
        );
182

    
183
        if (ArrayUtils.isEmpty(f)) {
184
            return;
185
        }
186
        this.set(f[0]);
187
        this.fireChangeEvent();
188
    }
189

    
190
    @Override
191
    public void coerceAndSet(Object value) {
192
        this.set((File) this.coerce(DataTypes.FILE, value, null));
193
    }
194

    
195
    @Override
196
    public void setFileFilter(FileFilter filter) {
197
        this.filter = filter;
198
    }
199

    
200
}