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 @ 2509

History | View | Annotate | Download (6.4 KB)

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

    
3
import java.awt.Cursor;
4
import java.awt.event.ActionEvent;
5
import java.awt.event.KeyAdapter;
6
import java.awt.event.KeyEvent;
7
import java.io.File;
8
import java.net.URL;
9
import javax.swing.ImageIcon;
10
import javax.swing.JButton;
11
import javax.swing.JFileChooser;
12
import javax.swing.filechooser.FileFilter;
13
import javax.swing.text.JTextComponent;
14
import org.apache.commons.lang3.ArrayUtils;
15
import org.apache.commons.lang3.StringUtils;
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.ToolsSwingManager;
23
import org.gvsig.tools.swing.api.pickercontroller.FilePickerController;
24
import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager;
25
import org.gvsig.tools.swing.icontheme.IconTheme;
26
import org.gvsig.tools.swing.icontheme.IconThemeManager;
27

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

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

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

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

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

    
69
    public FilePickerControllerImpl(JTextComponent txtFile, JButton btnFile, String dialogTitle, String fileChooserID, File initialPath, boolean seticon) {
70
        I18nManager i18n = ToolsLocator.getI18nManager();
71
        this.value = null;
72
        this.txtFile = txtFile;
73
        this.btnFile = btnFile;
74
        this.fileChooserID = fileChooserID;
75
        this.initialPath = initialPath;
76
        if (dialogTitle == null) {
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.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
86
        this.btnFile.addActionListener((ActionEvent e) -> {
87
          doSelectFile();
88
        });
89
        if( StringUtils.isBlank(this.btnFile.getToolTipText()) ) {
90
            this.btnFile.setToolTipText(i18n.getTranslation("_File_picker"));
91
        }
92
        ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
93
        toolsSwingManager.setDefaultPopupMenu(txtFile);
94
        toolsSwingManager.addClearButton(txtFile, (ActionEvent e) -> {
95
          doClear();
96
        });
97
        //this.txtFile.setEditable(false);
98
        this.txtFile.addKeyListener(new KeyAdapter() {
99
            @Override
100
            public void keyPressed(KeyEvent e) {
101
                if (e.getKeyCode() == KeyEvent.VK_ENTER) {
102
                    coerceAndSet(txtFile.getText());
103
                    fireChangeEvent();
104
                }
105
                super.keyPressed(e);
106
            }
107
        });
108
    }
109

    
110
    private void doClear() {
111
        this.set(null);
112
    }
113

    
114
    @Override
115
    public boolean isEmpty() {
116
        this.get();
117
        return this.value == null;
118
    }
119

    
120
    @Override
121
    public File get() {
122
        coerceAndSet(txtFile.getText());
123
        return this.value;
124
    }
125

    
126
    @Override
127
    public void set(File value) {
128
        this.value = value;
129
        if (value == null) {
130
            this.txtFile.setText("");
131
        } else {
132
            this.txtFile.setText(value.toString());
133
        }
134
    }
135

    
136
    @Override
137
    public void setEditable(boolean editable) {
138
        super.setEditable(editable);
139
        this.txtFile.setEditable(editable);
140
    }
141

    
142
    @Override
143
    public void setEnabled(boolean enabled) {
144
        this.btnFile.setEnabled(enabled);
145
        this.txtFile.setEnabled(enabled);
146
    }
147

    
148
    @Override
149
    public boolean isEnabled() {
150
        return this.btnFile.isEnabled();
151
    }
152

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

    
176
        if (ArrayUtils.isEmpty(f)) {
177
            return;
178
        }
179
        this.set(f[0]);
180
        this.fireChangeEvent();
181
    }
182

    
183
    @Override
184
    public void coerceAndSet(Object value) {
185
        this.set((File) this.coerce(DataTypes.FILE, value, null));
186
    }
187

    
188
    @Override
189
    public void setFileFilter(FileFilter filter) {
190
        this.filter = filter;
191
    }
192

    
193
}