// OO jDREW - An Object Oriented extension of the Java Deductive Reasoning Engine for the Web // Copyright (C) 2005 Marcel Ball // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA package org.ruleml.oojdrew.GUI; import java.awt.BorderLayout; import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.DefaultComboBoxModel; import javax.swing.GroupLayout; import javax.swing.GroupLayout.Alignment; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JRootPane; import javax.swing.JSpinner; import javax.swing.KeyStroke; import javax.swing.LayoutStyle.ComponentPlacement; import javax.swing.SpinnerModel; import javax.swing.SpinnerNumberModel; import javax.swing.SwingConstants; import javax.swing.SwingUtilities; import javax.swing.UIManager; import javax.swing.UIManager.LookAndFeelInfo; import javax.swing.border.EmptyBorder; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import org.apache.log4j.Level; import org.ruleml.oojdrew.parsing.RuleMLFormat; public class PreferenceDialogUI extends JDialog { private final JPanel contentPanel = new JPanel(); private JSpinner spinnerTextFontSize; private UISettingsController settingsController; private JSpinner spinnerUIFontSize; private JCheckBox chkBxLinkFontSizes; private JComboBox cbBoxLookAndFeel; private JComboBox cbBoxRuleMLVersion; private JComboBox cbBoxLoggingLevel; /** * Launch the application. */ public static void main(String[] args) { try { PreferenceDialogUI dialog = new PreferenceDialogUI(); dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); dialog.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } protected JRootPane createRootPane() { ActionListener actionListener = new ActionListener() { public void actionPerformed(ActionEvent actionEvent) { setVisible(false); } }; KeyStroke stroke = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0); JRootPane rootPane = new JRootPane(); rootPane.registerKeyboardAction(actionListener, stroke, JComponent.WHEN_IN_FOCUSED_WINDOW); return rootPane; } /** * Create the dialog. */ public PreferenceDialogUI() { setTitle("Preferences"); addWindowListener(new WindowAdapter() { @Override public void windowOpened(WindowEvent arg0) { settingsController.syncUIWithSettings(); } }); setBounds(100, 100, 300, 235); getContentPane().setLayout(new BorderLayout()); contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5)); getContentPane().add(contentPanel, BorderLayout.CENTER); JButton btnCancel = new JButton("Cancel"); btnCancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { setVisible(false); } }); JButton btnOk = new JButton("Ok"); btnOk.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { settingsController.applySettingsFromUI(); setVisible(false); } }); JLabel lblTextFont = new JLabel("Text panel font size"); spinnerTextFontSize = new JSpinner(); spinnerTextFontSize.setModel(new SpinnerNumberModel(12, 8, 72, 1)); JLabel lblMainUiFont = new JLabel("Main UI font size"); spinnerUIFontSize = new JSpinner(); spinnerUIFontSize.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent e) { if (chkBxLinkFontSizes.isSelected()) { spinnerTextFontSize.setValue(spinnerUIFontSize.getValue()); } } }); spinnerUIFontSize.setModel(new SpinnerNumberModel(12, 8, 72, 1)); chkBxLinkFontSizes = new JCheckBox("Link font sizes"); chkBxLinkFontSizes.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent e) { if (chkBxLinkFontSizes.isSelected()) { spinnerTextFontSize.setValue(spinnerUIFontSize.getValue()); spinnerTextFontSize.setEnabled(false); } else { spinnerTextFontSize.setEnabled(true); } } }); chkBxLinkFontSizes.setHorizontalAlignment(SwingConstants.RIGHT); chkBxLinkFontSizes.setHorizontalTextPosition(SwingConstants.LEFT); JLabel lblLookAndFeel = new JLabel("Look and feel"); cbBoxLookAndFeel = new JComboBox(); JLabel lblRuleMLVersion = new JLabel("RuleML version"); cbBoxRuleMLVersion = new JComboBox(); JLabel lblLoggingLevel = new JLabel("Logging level"); cbBoxLoggingLevel = new JComboBox(); GroupLayout gl_contentPanel = new GroupLayout(contentPanel); gl_contentPanel.setHorizontalGroup( gl_contentPanel.createParallelGroup(Alignment.LEADING) .addGroup(Alignment.TRAILING, gl_contentPanel.createSequentialGroup() .addContainerGap() .addGroup(gl_contentPanel.createParallelGroup(Alignment.TRAILING) .addComponent(chkBxLinkFontSizes, Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, 247, Short.MAX_VALUE) .addGroup(gl_contentPanel.createSequentialGroup() .addGroup(gl_contentPanel.createParallelGroup(Alignment.LEADING) .addComponent(lblTextFont) .addComponent(lblMainUiFont) .addComponent(lblLookAndFeel) .addComponent(lblRuleMLVersion) .addComponent(lblLoggingLevel)) .addGap(12) .addGroup(gl_contentPanel.createParallelGroup(Alignment.TRAILING) .addComponent(spinnerUIFontSize, GroupLayout.DEFAULT_SIZE, 140, Short.MAX_VALUE) .addComponent(spinnerTextFontSize, GroupLayout.DEFAULT_SIZE, 140, Short.MAX_VALUE) .addComponent(cbBoxLookAndFeel, 0, 140, Short.MAX_VALUE) .addComponent(cbBoxRuleMLVersion, 0, 140, Short.MAX_VALUE) .addComponent(cbBoxLoggingLevel, 0, 140, Short.MAX_VALUE) .addGroup(gl_contentPanel.createSequentialGroup() .addComponent(btnOk) .addPreferredGap(ComponentPlacement.UNRELATED) .addComponent(btnCancel))))) .addGap(77)) ); gl_contentPanel.setVerticalGroup( gl_contentPanel.createParallelGroup(Alignment.LEADING) .addGroup(gl_contentPanel.createSequentialGroup() .addContainerGap() .addGroup(gl_contentPanel.createParallelGroup(Alignment.BASELINE) .addComponent(lblMainUiFont) .addComponent(spinnerUIFontSize, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)) .addPreferredGap(ComponentPlacement.RELATED) .addGroup(gl_contentPanel.createParallelGroup(Alignment.BASELINE) .addComponent(lblTextFont) .addComponent(spinnerTextFontSize, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)) .addPreferredGap(ComponentPlacement.RELATED) .addComponent(chkBxLinkFontSizes) .addPreferredGap(ComponentPlacement.RELATED) .addGroup(gl_contentPanel.createParallelGroup(Alignment.BASELINE) .addComponent(cbBoxLookAndFeel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) .addComponent(lblLookAndFeel)) .addPreferredGap(ComponentPlacement.RELATED) .addGroup(gl_contentPanel.createParallelGroup(Alignment.BASELINE) .addComponent(cbBoxRuleMLVersion, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) .addComponent(lblRuleMLVersion)) .addPreferredGap(ComponentPlacement.RELATED) .addGroup(gl_contentPanel.createParallelGroup(Alignment.BASELINE) .addComponent(cbBoxLoggingLevel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) .addComponent(lblLoggingLevel)) .addPreferredGap(ComponentPlacement.RELATED, 23, Short.MAX_VALUE) .addGroup(gl_contentPanel.createParallelGroup(Alignment.BASELINE) .addComponent(btnOk) .addComponent(btnCancel)) .addContainerGap()) ); gl_contentPanel.linkSize(SwingConstants.HORIZONTAL, new Component[] {btnCancel, btnOk}); contentPanel.setLayout(gl_contentPanel); populateComboBoxes(); } private void populateComboBoxes() { for (LookAndFeelInfo lafInfo : UIManager.getInstalledLookAndFeels()) { cbBoxLookAndFeel.addItem(lafInfo.getName()); } cbBoxRuleMLVersion.setModel(new DefaultComboBoxModel(RuleMLFormat .getVersionNames())); for (Level loggingLevel : getAvailableLoggingLevels()) { cbBoxLoggingLevel.addItem(loggingLevel.toString()); } } private Level[] getAvailableLoggingLevels() { Level[] loggingLevels = new Level[] { Level.OFF, Level.ERROR, Level.WARN, Level.DEBUG, Level.INFO }; return loggingLevels; } private SpinnerModel getSpinnerTextAreaFontSizeModel() { return spinnerTextFontSize.getModel(); } public int getSpinnerTextAreaFontSizeValue() { return (Integer) getSpinnerTextAreaFontSizeModel().getValue(); } public void setSpinnerTextAreaFontSizeValue(int newSize) { getSpinnerTextAreaFontSizeModel().setValue(newSize); } public void setSettingsController(UISettingsController newController) { settingsController = newController; } private SpinnerModel getSpinnerUIFontSizeModel() { return spinnerUIFontSize.getModel(); } public int getSpinnerUIFontSizeValue() { return (Integer) getSpinnerUIFontSizeModel().getValue(); } public void setSpinnerUIFontSizeValue(int newSize) { getSpinnerUIFontSizeModel().setValue(newSize); } public boolean getLinkFontSizes() { return chkBxLinkFontSizes.isSelected(); } public void setLinkFontSizes(boolean linkFontSizes) { chkBxLinkFontSizes.setSelected(linkFontSizes); } public String getSelectedLookAndFeel() { String lafName = cbBoxLookAndFeel.getSelectedItem().toString(); for (LookAndFeelInfo lafInfo : UIManager.getInstalledLookAndFeels()) { if (lafInfo.getName().equals(lafName)) { return lafInfo.getClassName(); } } return UIManager.getSystemLookAndFeelClassName(); } public void setLookAndFeel(String lafClassName) { for (LookAndFeelInfo lafInfo : UIManager.getInstalledLookAndFeels()) { if (lafInfo.getClassName().equals(lafClassName)) { cbBoxLookAndFeel.setSelectedItem(lafInfo.getName()); break; } } } public RuleMLFormat getRuleMLFormat() { String selectedRuleMLFormat = cbBoxRuleMLVersion.getSelectedItem() .toString(); return RuleMLFormat.fromString(selectedRuleMLFormat); } public void setRuleMLFormat(RuleMLFormat rmlFormat) { String ruleMLVersionName = rmlFormat.getVersionName(); cbBoxRuleMLVersion.setSelectedItem(ruleMLVersionName); } public Level getLoggingLevel() { String loggingLevel = cbBoxLoggingLevel.getSelectedItem().toString(); return Level.toLevel(loggingLevel); } public void setLoggingLevel(Level loggingLevel) { cbBoxLoggingLevel.setSelectedItem(loggingLevel.toString()); } public void updateUI() { SwingUtilities.updateComponentTreeUI(this); this.pack(); } }