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 / FolderPickerControllerImpl.java @ 2165

History | View | Annotate | Download (4.75 KB)

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

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

    
24

    
25
/**
26
 *
27
 * @author jjdelcerro
28
 */
29
public class FolderPickerControllerImpl 
30
        extends AbstractPickerController<File> 
31
        implements FolderPickerController 
32
    {
33
    
34
    private final JButton btnFolder;
35
    private final JTextComponent txtFolder;
36
    private final File initialPath;
37
    private final String fileChooserID;
38
    private final String dialogTitle;
39
    private File value;
40
    private FileFilter filter;
41

    
42
    public static void selfRegister() {
43
        URL imageResource = DatePickerControllerImpl.class.getClassLoader().getResource("org/gvsig/tools/swing/picker/picker-folder.png");
44
        if (imageResource != null) {
45
            IconThemeManager iconThemeManager = ToolsSwingLocator.getIconThemeManager();
46
            IconTheme theme = iconThemeManager.getCurrent();
47
            ImageIcon icon = new ImageIcon(imageResource);
48
            theme.registerDefault("tools", "picker", "picker-folder", icon, imageResource);
49
        }
50
    }
51
    
52
    public FolderPickerControllerImpl(JTextComponent txtFolder, JButton btnFolder, String dialogTitle) {
53
        this(txtFolder, btnFolder, dialogTitle, null, null, true);
54
    }
55
    
56
    public FolderPickerControllerImpl(JTextComponent txtFolder, JButton btnFolder) {
57
        this(txtFolder, btnFolder, null, null, null, true);
58
    }
59
    
60
    public FolderPickerControllerImpl(JTextComponent txtFolder, JButton btnFolder, String dialogTitle, String fileChooserID, File initialPath, boolean seticon) {
61
        this.value = null;
62
        this.txtFolder = txtFolder;
63
        this.btnFolder = btnFolder;
64
        this.fileChooserID = fileChooserID;
65
        this.initialPath = initialPath;
66
        this.txtFolder.setEditable(false);
67
        if( dialogTitle==null ) {
68
            I18nManager i18n = ToolsLocator.getI18nManager();
69
            this.dialogTitle = i18n.getTranslation("_Select_file");
70
        } else {
71
            this.dialogTitle = dialogTitle;
72
        }
73
        if( seticon ) {
74
            this.btnFolder.setIcon(this.getIcon("picker-folder"));
75
            this.btnFolder.setText("");
76
        }
77
        this.btnFolder.addActionListener(new ActionListener() {
78
            @Override
79
            public void actionPerformed(ActionEvent e) {
80
                doSelectFile();
81
            }
82
        });
83
        this.txtFolder.setEditable(false);
84
    }
85

    
86
    @Override
87
    public boolean isEmpty() {
88
        return this.value==null;
89
    }
90

    
91
    @Override
92
    public File get() {
93
        return this.value;
94
    }
95

    
96
    @Override
97
    public void set(File value) {
98
        this.value = value;
99
        this.txtFolder.setText(value.toString());
100
    }
101

    
102
    @Override
103
    public void setEnabled(boolean enabled) {
104
        this.btnFolder.setEnabled(enabled);
105
        this.txtFolder.setEnabled(enabled);
106
    }
107

    
108
    @Override
109
    public boolean isEnabled() {
110
        return this.btnFolder.isEnabled();
111
    }
112

    
113
    private void doSelectFile() {
114
        if( !this.isEditable() ) {
115
            return;
116
        }
117
        ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager();
118
        FoldersManager folderManager = ToolsLocator.getFoldersManager();
119
        File[] f = dialogs.showChooserDialog(
120
                this.dialogTitle, 
121
                JFileChooser.OPEN_DIALOG, 
122
                JFileChooser.DIRECTORIES_ONLY, 
123
                true, 
124
                folderManager.getLastPath(
125
                        this.fileChooserID, 
126
                        this.initialPath
127
                ),
128
                this.filter, 
129
                true
130
        );
131
        
132
        if( ArrayUtils.isEmpty(f) ) {
133
            return;
134
        }
135
        this.set(f[0]);
136
        this.fireChangeEvent();
137
    }
138

    
139
    @Override
140
    public void coerceAndSet(Object value) {
141
        this.set((File) this.coerce(DataTypes.FOLDER, value, null));
142
    }
143

    
144
    @Override
145
    public void setFileFilter(FileFilter filter) {
146
        this.filter = filter;
147
    }
148
        
149
}