package de.hhu.ba.yoshikoWrapper.gui; import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.BorderFactory; import javax.swing.BoxLayout; import javax.swing.JCheckBox; import javax.swing.JLabel; import javax.swing.border.Border; import javax.swing.border.EtchedBorder; import de.hhu.ba.yoshikoWrapper.core.LocalizationManager; @SuppressWarnings("serial") public class ReductionRulesChooser extends ComfortPanel{ private final JCheckBox useCRule; private final JCheckBox useCCRule; private final JCheckBox useACRule; private final JCheckBox useHERule; private final JCheckBox usePDRRule; private final JCheckBox useSNRule; private final DoubleInputField multFactor; private final ComfortPanel SNPanel; public ReductionRulesChooser() { this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); //Initialize subcomponents useCRule = new JCheckBox("Use Clique Rule"); useCCRule = new JCheckBox("Use Critical-Clique Rule"); useACRule = new JCheckBox("Use Almost-Clique Rule"); useHERule = new JCheckBox("Use Heavy-Edge 3 in 1 Rule"); usePDRRule = new JCheckBox("Use Parameter Dependent Reduction Rule"); useSNRule = new JCheckBox("Use Similar Neighborhood Rule"); multFactor = new DoubleInputField(1, Double.POSITIVE_INFINITY); multFactor.setText("1.0"); SNPanel = new ComfortPanel(); SNPanel.addAll(new JLabel(LocalizationManager.get("multFactor")),multFactor); useSNRule.setSelected(true); useSNRule.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (useSNRule.isSelected()) { multFactor.setEnabled(true); } else { multFactor.setEnabled(false); } } }); this.addAll( useCRule, useCCRule, useACRule, useHERule, usePDRRule, useSNRule, SNPanel ); //By default all reduction rules should be applied for (Component c :this.getComponents()) { if (c instanceof JCheckBox) { ((JCheckBox)c).setSelected(true); } } //Create titled border Border border = BorderFactory.createEtchedBorder(EtchedBorder.LOWERED); this.setBorder(BorderFactory.createTitledBorder(border, LocalizationManager.get("redRuleChooserTitle"))); } /** Creates a 6 Bit bitmask representing the currently selected choice of reduction rules. * @return */ public String getBitMask() { String ret = ""; ret += (useCRule.isSelected() ? "1" : "0"); ret += (useCCRule.isSelected() ? "1" : "0"); ret += (useACRule.isSelected() ? "1" : "0"); ret += (useHERule.isSelected() ? "1" : "0"); ret += (usePDRRule.isSelected() ? "1" : "0"); ret += (useSNRule.isSelected() ? "1" : "0"); return ret; } public double getMultFactor() { if (useSNRule.isSelected()) { return multFactor.getValueAsDouble(); } return 1.0d; } }