X-Git-Url: http://git.nikiroo.be/?p=fanfix.git;a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Futils%2Fui%2FConfigItemBrowse.java;fp=src%2Fbe%2Fnikiroo%2Futils%2Fui%2FConfigItemBrowse.java;h=6c8af99f1fa66289eafa16c52ee50d32b89925bb;hp=0000000000000000000000000000000000000000;hb=d46b7b96f94e88a776bcd2dfd756549ffb300cc9;hpb=c9994f27667bc421bcd448d39e55774fddf5c431 diff --git a/src/be/nikiroo/utils/ui/ConfigItemBrowse.java b/src/be/nikiroo/utils/ui/ConfigItemBrowse.java new file mode 100644 index 0000000..6c8af99 --- /dev/null +++ b/src/be/nikiroo/utils/ui/ConfigItemBrowse.java @@ -0,0 +1,116 @@ +package be.nikiroo.utils.ui; + +import java.awt.BorderLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; +import java.io.File; +import java.util.HashMap; +import java.util.Map; + +import javax.swing.JButton; +import javax.swing.JComponent; +import javax.swing.JFileChooser; +import javax.swing.JPanel; +import javax.swing.JTextField; + +import be.nikiroo.utils.resources.MetaInfo; + +class ConfigItemBrowse> extends ConfigItem { + private static final long serialVersionUID = 1L; + + private boolean dir; + private Map fields = new HashMap(); + + /** + * Create a new {@link ConfigItemBrowse} for the given {@link MetaInfo}. + * + * @param info + * the {@link MetaInfo} + * @param dir + * TRUE for directory browsing, FALSE for file browsing + */ + public ConfigItemBrowse(MetaInfo info, boolean dir) { + super(info, false); + this.dir = dir; + } + + @Override + protected Object getFromField(int item) { + JTextField field = fields.get(getField(item)); + if (field != null) { + return new File(field.getText()); + } + + return null; + } + + @Override + protected Object getFromInfo(int item) { + String path = info.getString(item, false); + if (path != null && !path.isEmpty()) { + return new File(path); + } + + return null; + } + + @Override + protected void setToField(Object value, int item) { + JTextField field = fields.get(getField(item)); + if (field != null) { + field.setText(value == null ? "" : ((File) value).getPath()); + } + } + + @Override + protected void setToInfo(Object value, int item) { + info.setString(((File) value).getPath(), item); + } + + @Override + protected JComponent createEmptyField(final int item) { + final JPanel pane = new JPanel(new BorderLayout()); + final JTextField field = new JTextField(); + field.addKeyListener(new KeyAdapter() { + @Override + public void keyTyped(KeyEvent e) { + File file = null; + if (!field.getText().isEmpty()) { + file = new File(field.getText()); + } + + if (hasValueChanged(file, item)) { + setDirtyItem(item); + } + } + }); + + final JButton browseButton = new JButton("..."); + browseButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + JFileChooser chooser = new JFileChooser(); + chooser.setCurrentDirectory((File) getFromInfo(item)); + chooser.setFileSelectionMode(dir ? JFileChooser.DIRECTORIES_ONLY + : JFileChooser.FILES_ONLY); + if (chooser.showOpenDialog(ConfigItemBrowse.this) == JFileChooser.APPROVE_OPTION) { + File file = chooser.getSelectedFile(); + if (file != null) { + setToField(file, item); + if (hasValueChanged(file, item)) { + setDirtyItem(item); + } + } + } + } + }); + + pane.add(browseButton, BorderLayout.WEST); + pane.add(field, BorderLayout.CENTER); + + fields.put(pane, field); + return pane; + } +}