// 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.groupselector.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.JComponent; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextField; 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 SwingGroupView extends SwingBaseView implements GroupView { private final JButton okBtn; private final JButton cancelBtn; private final JButton addItemBtn; private final JButton removeItemBtn; private final JList items = new JList(); private final JButton addExludedItemBtn; private final JButton removeExcludedItemBtn; private final JList excludedItems = new JList(); private final JTextField name = new JTextField(); protected SwingGroupView(ActionFactory actionFactory) { super(actionFactory); cancelBtn = createButton("Cancel", Actions.cancel); okBtn = createButton("Ok", Actions.ok); name.setName("nameField"); name.getDocument().addDocumentListener( createDocumentChangeAdapter(Actions.updateActionStates)); addItemBtn = createButton("Add...", Actions.addItem, IconKey.plus12); removeItemBtn = createButton("Remove", Actions.removeItems, IconKey.minus12); items.setName("itemsField"); items.getSelectionModel().addListSelectionListener( createSelectionActionAdapter(Actions.updateActionStates)); addExludedItemBtn = createButton("Add...", Actions.addExcludedItem, IconKey.plus12); removeExcludedItemBtn = createButton("Remove", Actions.removeExcludedItems, IconKey.minus12); excludedItems.setName("excludedItemsField"); excludedItems.getSelectionModel().addListSelectionListener( createSelectionActionAdapter(Actions.updateActionStates)); items.addKeyListener(new KeyActionAdapter(KeyEvent.VK_INSERT, actionFactory.getAction(Actions.addItem))); items.addKeyListener(new KeyActionAdapter(KeyEvent.VK_DELETE, actionFactory.getAction(Actions.removeItems))); excludedItems.addKeyListener(new KeyActionAdapter(KeyEvent.VK_INSERT, actionFactory.getAction(Actions.addExcludedItem))); excludedItems.addKeyListener(new KeyActionAdapter(KeyEvent.VK_DELETE, actionFactory.getAction(Actions.removeExcludedItems))); } @Override protected JComponent buildViewComponent() { DefaultFormBuilder builder = new DefaultFormBuilder( new FormLayout("fill:100dlu:grow", "p,2dlu,p,8dlu,p,2dlu,fill:60dlu:grow,8dlu,p,2dlu,fill:60dlu:grow,4dlu,p")); builder.setDefaultDialogBorder(); builder.appendSeparator("Name * "); builder.nextRow(); builder.append(name); builder.nextRow(); builder.appendSeparator("Included items * (wildcards allowed)"); builder.nextRow(); builder.append(createItemsPanel(items, addItemBtn, removeItemBtn)); builder.nextRow(); builder .appendSeparator("Excluded items (Overwrites included items, wildcards allowed)"); builder.nextRow(); builder.append(createItemsPanel(excludedItems, addExludedItemBtn, removeExcludedItemBtn)); builder.nextRow(); builder.append(ButtonBarFactory.buildRightAlignedBar(okBtn, cancelBtn)); JPanel panel = builder.getPanel(); addCommonKeyEvent(panel, KeyEvent.VK_ENTER, Actions.ok); addCommonKeyEvent(panel, KeyEvent.VK_ESCAPE, Actions.cancel); return panel; } private JPanel createItemsPanel(JList list, JButton... buttons) { DefaultFormBuilder builder = new DefaultFormBuilder(new FormLayout( "fill:10dlu:grow,4dlu,p", "fill:60dlu:grow")); builder.append(new JScrollPane(list), createButtonStack(buttons)); return builder.getPanel(); } public Dimension getPreferredSize() { return new Dimension(420, 380); } public String getTitle() { return "New Group"; } public String getName() { return name.getText(); } public void setName(String name) { this.name.setText(name); } public void setItems(List<String> items) { this.items.setListData(items.toArray()); } public void setExcludedItems(List<String> excludedItems) { this.excludedItems.setListData(excludedItems.toArray()); } public List<String> getSelectedItems() { return new ArrayList(Arrays.asList(items.getSelectedValues())); } public List<String> getSelectedExcludedItems() { return new ArrayList(Arrays.asList(excludedItems.getSelectedValues())); } }