// 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.rulememberselector.impl;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.util.List;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import org.dtangler.swingui.actionfactory.ActionFactory;
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 SwingRuleMemberView extends SwingBaseView implements
RuleMemberView {
private final JComboBox groups = new JComboBox();
private final JTextField literal = new JTextField();
private final JRadioButton groupRadio;
private final JRadioButton literalRadio;
private final JButton okButton;
private final JButton cancelButton;
protected SwingRuleMemberView(ActionFactory actionFactory) {
super(actionFactory);
ButtonGroup btnGroup = new ButtonGroup();
groupRadio = createRadioButton("Group", btnGroup);
literalRadio = createRadioButton("Item by name", btnGroup);
literal.setName("literal");
okButton = createButton("Ok", Actions.ok);
cancelButton = createButton("Cancel", Actions.cancel);
literalRadio.setSelected(true);
literal.getDocument().addDocumentListener(
createDocumentChangeAdapter(Actions.updateActionStates));
groups.addActionListener(getAction(Actions.updateActionStates));
updatRuleMemberMode();
}
private JRadioButton createRadioButton(String name, ButtonGroup buttonGroup) {
JRadioButton btn = new JRadioButton(name);
buttonGroup.add(btn);
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
updatRuleMemberMode();
}
});
return btn;
}
private void updatRuleMemberMode() {
literal.setEnabled(literalRadio.isSelected());
groups.setEnabled(groupRadio.isSelected());
getAction(Actions.updateActionStates).actionPerformed(null);
}
@Override
protected JComponent buildViewComponent() {
DefaultFormBuilder builder = new DefaultFormBuilder(new FormLayout(
"p,4dlu,fill:150dlu:grow", "p,4dlu,p,4dlu, p"));
builder.setDefaultDialogBorder();
builder.append(literalRadio, literal);
builder.nextRow();
builder.append(groupRadio, groups);
builder.nextRow();
builder.append("", ButtonBarFactory.buildRightAlignedBar(okButton,
cancelButton));
JPanel panel = builder.getPanel();
addCommonKeyEvent(panel, KeyEvent.VK_ENTER, Actions.ok);
addCommonKeyEvent(panel, KeyEvent.VK_ESCAPE, Actions.cancel);
return panel;
}
public Dimension getPreferredSize() {
return null;
}
public String getTitle() {
return "Rule member selection";
}
public String getLiteral() {
return literal.getText();
}
public String getSelectedGroup() {
return (String) groups.getSelectedItem();
}
public MemberType getSelectedMemberType() {
if (groupRadio.isSelected())
return MemberType.group;
return MemberType.literal;
}
public void setGroupNames(List<String> groupNames) {
groups.removeAllItems();
for (String name : groupNames)
groups.addItem(name);
groupRadio.setEnabled(!groupNames.isEmpty());
}
@Override
public Component getFirstComponentToFocus() {
return literal;
}
}