package com.baselet.gui.menu; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Container; import java.awt.Dimension; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.GridLayout; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Enumeration; import javax.swing.AbstractButton; import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.ButtonGroup; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JDialog; import javax.swing.JPanel; import javax.swing.JRadioButton; import com.baselet.control.config.ConfigClassGen; import com.baselet.control.enums.generator.FieldOptions; import com.baselet.control.enums.generator.MethodOptions; import com.baselet.control.enums.generator.SignatureOptions; import com.baselet.control.enums.generator.SortOptions; @SuppressWarnings("serial") public class GenerateOptionPanel extends JDialog { private static GenerateOptionPanel optionpanel; private JCheckBox packageInfo; private ButtonGroup fields; private ButtonGroup methods; private ButtonGroup signatures; private ButtonGroup sortings; private static final String okButton = "Ok"; private static final String cancelButton = "Cancel"; private GenerateOptionPanel() { Container content = getContentPane(); content.add(createOptionPanel(), BorderLayout.CENTER); content.add(createButtonPanel(), BorderLayout.SOUTH); setTitle("Import Details"); pack(); Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); this.setLocation(screenSize.width / 2 - getWidth() / 2, screenSize.height / 2 - getWidth() / 2); } private JPanel createOptionPanel() { JPanel optionPanel = new JPanel(); optionPanel.setLayout(new GridBagLayout()); GridBagConstraints c = new GridBagConstraints(); packageInfo = new JCheckBox("Show package"); packageInfo.setSelected(true); optionPanel.add(packageInfo, layout(c, 0, 0)); fields = createButtonGroup(FieldOptions.values()); optionPanel.add(createSubPanel("Show fields", fields), layout(c, 0, 1)); methods = createButtonGroup(MethodOptions.values()); optionPanel.add(createSubPanel("Show methods", methods), layout(c, 1, 1)); signatures = createButtonGroup(SignatureOptions.values()); optionPanel.add(createSubPanel("Show signatures", signatures), layout(c, 0, 2)); sortings = createButtonGroup(SortOptions.values()); optionPanel.add(createSubPanel("Sorting", sortings), layout(c, 1, 2)); optionPanel.validate(); return optionPanel; } private <E extends Enum<E>> ButtonGroup createButtonGroup(E[] values) { ButtonGroup group = new ButtonGroup(); for (E value : values) { JRadioButton button = new JRadioButton(value.toString()); button.setActionCommand(value.toString()); group.add(button); } return group; } private GridBagConstraints layout(GridBagConstraints c, int gridx, int gridy) { c.fill = GridBagConstraints.HORIZONTAL; c.gridx = gridx; c.gridy = gridy; return c; } private JPanel createSubPanel(String title, ButtonGroup group) { Enumeration<AbstractButton> e = group.getElements(); JPanel panel = new JPanel(); panel.setLayout(new GridLayout(0, 1)); panel.setBorder(BorderFactory.createTitledBorder(title)); while (e.hasMoreElements()) { panel.add(e.nextElement()); } return panel; } private JPanel createButtonPanel() { CancelOkListener listener = new CancelOkListener(); JButton button_ok = new JButton(okButton); button_ok.setActionCommand(okButton); button_ok.addActionListener(listener); JButton button_cancel = new JButton(cancelButton); button_cancel.setActionCommand(cancelButton); button_cancel.addActionListener(listener); JPanel buttonPanel = new JPanel(); buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.X_AXIS)); buttonPanel.add(Box.createHorizontalGlue()); buttonPanel.add(button_cancel); buttonPanel.add(Box.createRigidArea(new Dimension(20, 0))); buttonPanel.add(button_ok); buttonPanel.add(Box.createHorizontalGlue()); buttonPanel.setAlignmentX(Component.LEFT_ALIGNMENT); return buttonPanel; } public static GenerateOptionPanel getInstance() { if (optionpanel == null) { optionpanel = new GenerateOptionPanel(); } return optionpanel; } private class CancelOkListener implements ActionListener { @Override public void actionPerformed(ActionEvent e) { optionpanel.setVisible(false); if (e.getActionCommand().equals(okButton)) { ConfigClassGen genCfg = ConfigClassGen.getInstance(); genCfg.setGenerateClassPackage(packageInfo.isSelected()); genCfg.setGenerateClassFields(FieldOptions.getEnum(fields.getSelection().getActionCommand().toString())); genCfg.setGenerateClassMethods(MethodOptions.getEnum(methods.getSelection().getActionCommand().toString())); genCfg.setGenerateClassSignatures(SignatureOptions.getEnum(signatures.getSelection().getActionCommand().toString())); genCfg.setGenerateClassSortings(SortOptions.getEnum(sortings.getSelection().getActionCommand().toString())); } } } public void showPanel() { ConfigClassGen genCfg = ConfigClassGen.getInstance(); packageInfo.setSelected(genCfg.isGenerateClassPackage()); setSelectedRadioButton(fields, genCfg.getGenerateClassFields()); setSelectedRadioButton(methods, genCfg.getGenerateClassMethods()); setSelectedRadioButton(signatures, genCfg.getGenerateClassSignatures()); setSelectedRadioButton(sortings, genCfg.getGenerateClassSortings()); setVisible(true); toFront(); } private <E extends Enum<E>> void setSelectedRadioButton(ButtonGroup group, E value) { Enumeration<AbstractButton> buttons = group.getElements(); while (buttons.hasMoreElements()) { AbstractButton button = buttons.nextElement(); if (button.getActionCommand().equals(value.toString())) { button.setSelected(true); } } } }