//This product is provided under the terms of EPL (Eclipse Public License)
//version 1.0.
//
//The full license text can be read from: http://www.eclipse.org/org/documents/epl-v10.php
package org.dtangler.swingui.fileinput.impl;
import java.awt.Dimension;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JList;
import javax.swing.JScrollPane;
import org.dtangler.swingui.actionfactory.ActionFactory;
import org.dtangler.swingui.actionfactory.KeyActionAdapter;
import org.dtangler.swingui.resource.icons.IconKey;
import org.dtangler.swingui.windowmanager.SwingBaseView;
import com.jgoodies.forms.builder.DefaultFormBuilder;
import com.jgoodies.forms.factories.ButtonBarFactory;
import com.jgoodies.forms.layout.FormLayout;
public class SwingFileInputSelectorView extends SwingBaseView implements
FileInputSelectorView {
private final JComboBox engineCombo = new JComboBox();
private final JList paths = new JList();
private final JList masks = new JList();
private final JButton addPathBtn;
private final JButton removePathBtn;
private final JButton addMaskBtn;
private final JButton removeMaskBtn;
private final JButton okBtn;
private final JButton cancelBtn;
public SwingFileInputSelectorView(ActionFactory actionFactory) {
super(actionFactory);
addPathBtn = createButton("Add...", Actions.addPath, IconKey.plus12);
removePathBtn = createButton("Remove", Actions.removePath,
IconKey.minus12);
addMaskBtn = createButton("Add...", Actions.addMask, IconKey.plus12);
removeMaskBtn = createButton("Remove", Actions.removeMask,
IconKey.minus12);
okBtn = createButton("OK", Actions.ok);
cancelBtn = createButton("Cancel", Actions.cancel);
engineCombo.setName("engineCombo");
engineCombo.addActionListener(actionFactory.getAction(Actions.selectEngine));
paths.getSelectionModel().addListSelectionListener(
createSelectionActionAdapter(Actions.updateActionStates));
paths.addKeyListener(new KeyActionAdapter(KeyEvent.VK_INSERT,
actionFactory.getAction(Actions.addPath)));
paths.addKeyListener(new KeyActionAdapter(KeyEvent.VK_DELETE,
actionFactory.getAction(Actions.removePath)));
masks.getSelectionModel().addListSelectionListener(
createSelectionActionAdapter(Actions.updateActionStates));
masks.addKeyListener(new KeyActionAdapter(KeyEvent.VK_INSERT,
actionFactory.getAction(Actions.addMask)));
masks.addKeyListener(new KeyActionAdapter(KeyEvent.VK_DELETE,
actionFactory.getAction(Actions.removeMask)));
paths.setName("PATHS");
masks.setName("MASKS");
addCommonKeyEvent(getViewComponent(), KeyEvent.VK_ENTER, Actions.ok);
addCommonKeyEvent(getViewComponent(), KeyEvent.VK_ESCAPE,
Actions.cancel);
}
protected JComponent buildViewComponent() {
DefaultFormBuilder builder = new DefaultFormBuilder(
new FormLayout("fill:10dlu:grow",
"p,1dlu,p,8dlu,p,fill:20dlu:grow,2dlu,p,8dlu,p,fill:20dlu:grow,2dlu,p,8dlu,p"));
builder.setDefaultDialogBorder();
builder.appendSeparator("Dependency engine");
builder.nextRow();
builder.append(engineCombo);
builder.nextRow();
builder.appendSeparator("Directories or files to search from");
builder.append(new JScrollPane(paths));
builder.nextRow();
builder.append(ButtonBarFactory.buildLeftAlignedBar(addPathBtn,
removePathBtn));
builder.nextRow();
builder.appendSeparator("Filename masks to ignore");
builder.append(new JScrollPane(masks));
builder.nextRow();
builder.append(ButtonBarFactory.buildLeftAlignedBar(addMaskBtn,
removeMaskBtn));
builder.nextRow();
builder.append(ButtonBarFactory.buildRightAlignedBar(okBtn, cancelBtn));
return builder.getPanel();
}
public void setMasks(List<String> masks) {
this.masks.setListData(masks.toArray());
}
public void setEngines(List<String> engines) {
this.engineCombo.removeAllItems();
if (engines == null)
return;
for (String engine : engines)
this.engineCombo.addItem(engine);
}
public void setEngineSelection(String engine) {
engineCombo.setSelectedItem(engine);
}
public String getEngineSelection() {
return (String)engineCombo.getSelectedItem();
}
public void setPaths(List<String> paths) {
this.paths.setListData(paths.toArray());
}
public List<String> getMaskSelection() {
return new ArrayList(Arrays.asList(masks.getSelectedValues()));
}
public List<String> getPathSelection() {
return new ArrayList(Arrays.asList(paths.getSelectedValues()));
}
public Dimension getPreferredSize() {
return new Dimension(350, 400);
}
public String getTitle() {
return "Select input data";
}
}