// 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.rulesselector.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.JLabel; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JScrollPane; import org.dtangler.swingui.actionfactory.ActionFactory; import org.dtangler.swingui.actionfactory.ActionKey; import org.dtangler.swingui.actionfactory.KeyActionAdapter; import org.dtangler.swingui.resource.icons.IconKey; import org.dtangler.swingui.rulesselector.impl.RulesView.Actions; import org.dtangler.swingui.rulesselector.impl.RulesView.RuleView; import org.dtangler.swingui.windowmanager.SwingBaseView; import com.jgoodies.forms.builder.DefaultFormBuilder; import com.jgoodies.forms.layout.FormLayout; public class SwingRuleView extends SwingBaseView implements RuleView { private final JButton addRuleBtn; private final JButton removeRuleBtn; private final JButton addRuleItemBtn; private final JButton removeRuleItemsBtn; private final JList rules = new JList(); private final JList ruleItems = new JList(); private final String tabTitle; private final String rulesLabel; private final String ruleItemsLabel; public SwingRuleView(ActionFactory actionFactory, String tabTitle, String rulesLabel, String ruleItemsLabel, ActionKey addRule, ActionKey removeRule, ActionKey addRuleItem, ActionKey removeRuleItems, ActionKey ruleSelectionChanged) { super(actionFactory); this.tabTitle = tabTitle; this.rulesLabel = rulesLabel; this.ruleItemsLabel = ruleItemsLabel; addRuleBtn = createButton("Add...", addRule, IconKey.plus12); removeRuleBtn = createButton("Remove", removeRule, IconKey.minus12); addRuleItemBtn = createButton("Add...", addRuleItem, IconKey.plus12); removeRuleItemsBtn = createButton("Remove", removeRuleItems, IconKey.minus12); rules.setName("rules"); rules.getSelectionModel().addListSelectionListener( createSelectionActionAdapter(Actions.updateActionStates)); rules.getSelectionModel().addListSelectionListener( createSelectionActionAdapter(ruleSelectionChanged)); ruleItems.setName("ruleitems"); ruleItems.getSelectionModel().addListSelectionListener( createSelectionActionAdapter(Actions.updateActionStates)); rules.addKeyListener(new KeyActionAdapter(KeyEvent.VK_INSERT, actionFactory.getAction(addRule))); rules.addKeyListener(new KeyActionAdapter(KeyEvent.VK_DELETE, actionFactory.getAction(removeRule))); ruleItems.addKeyListener(new KeyActionAdapter(KeyEvent.VK_INSERT, actionFactory.getAction(addRuleItem))); ruleItems.addKeyListener(new KeyActionAdapter(KeyEvent.VK_DELETE, actionFactory.getAction(removeRuleItems))); } public List<String> getSelectedRules() { return new ArrayList(Arrays.asList(rules.getSelectedValues())); } public void setRules(List<String> rules) { this.rules.setListData(rules.toArray()); } public void setRuleItems(List<String> ruleItems) { this.ruleItems.setListData(ruleItems.toArray()); } public List<String> getSelectedRuleItems() { return new ArrayList(Arrays.asList(ruleItems.getSelectedValues())); } @Override protected JComponent buildViewComponent() { DefaultFormBuilder builder = new DefaultFormBuilder(new FormLayout( "fill:10dlu:grow,4dlu,p", "p,4dlu,fill:50dlu:grow,20dlu,p,4dlu,fill:50dlu:grow")); builder.setDefaultDialogBorder(); builder.append(new JLabel(rulesLabel), 3); builder.nextRow(); builder.append(new JScrollPane(rules), createButtonStack(addRuleBtn, removeRuleBtn)); builder.nextRow(); builder.append(new JLabel(ruleItemsLabel), 3); builder.nextRow(); builder.append(new JScrollPane(ruleItems), createButtonStack( addRuleItemBtn, removeRuleItemsBtn)); JPanel panel = builder.getPanel(); panel.setName(tabTitle); return panel; } public Dimension getPreferredSize() { return null; } public String getTitle() { return tabTitle; } }