001 package de.java2html.gui;
002
003 import java.awt.GridBagConstraints;
004 import java.awt.GridBagLayout;
005 import java.awt.Insets;
006 import java.awt.event.ItemEvent;
007 import java.awt.event.ItemListener;
008 import java.util.ArrayList;
009 import java.util.Iterator;
010 import java.util.List;
011
012 import javax.swing.JCheckBox;
013 import javax.swing.JComboBox;
014 import javax.swing.JComponent;
015 import javax.swing.JLabel;
016 import javax.swing.JPanel;
017 import javax.swing.JSpinner;
018 import javax.swing.SpinnerNumberModel;
019 import javax.swing.event.ChangeEvent;
020 import javax.swing.event.ChangeListener;
021
022 import de.java2html.JavaSourceConversionSettings;
023 import de.java2html.converter.IJavaSourceConverter;
024 import de.java2html.converter.JavaSourceConverterProvider;
025 import de.java2html.options.HorizontalAlignment;
026 import de.java2html.options.JavaSourceConversionOptions;
027 import de.java2html.options.JavaSourceStyleTable;
028
029 public class Java2HtmlOptionsPanel {
030 private final static JavaSourceStyleTable[] styles = JavaSourceStyleTable.getPredefinedTables();
031 private final static HorizontalAlignment[] alignments = new HorizontalAlignment[]{
032 HorizontalAlignment.LEFT,
033 HorizontalAlignment.CENTER,
034 HorizontalAlignment.RIGHT };
035
036 private final SpinnerNumberModel tabModel = new SpinnerNumberModel(2, 0, 16, 1);
037
038 private final JSpinner chTab;
039 private final JComboBox chTarget;
040 private final JComboBox chStyle;
041 private final JComboBox chAlignment;
042 private final JCheckBox cbShowLineNumbers;
043 private final JCheckBox cbShowTableBorder;
044 private final List/*<ChangeListener>*/listeners = new ArrayList();
045
046 private final JComponent content;
047
048 public Java2HtmlOptionsPanel() {
049 chTab = new JSpinner(tabModel);
050 final ItemListener itemListener = new ItemListener() {
051 public void itemStateChanged(ItemEvent e) {
052 fireStateChanged();
053 }
054 };
055 tabModel.addChangeListener(new ChangeListener() {
056 public void stateChanged(ChangeEvent e) {
057 fireStateChanged();
058 }
059 });
060
061 chTarget = new JComboBox(JavaSourceConverterProvider.getAllConverters());
062 chTarget.setRenderer(new AbstractSimpleListCellRenderer() {
063 @Override
064 protected String getLabel(Object value) {
065 final IJavaSourceConverter converter = (IJavaSourceConverter) value;
066 return converter.getMetaData().getPrintName();
067 }
068 });
069 chTarget.addItemListener(itemListener);
070
071 chStyle = new JComboBox(styles);
072 chStyle.setRenderer(new AbstractSimpleListCellRenderer() {
073 @Override
074 protected String getLabel(Object value) {
075 final JavaSourceStyleTable table = (JavaSourceStyleTable) value;
076 return table.getName();
077 }
078 });
079 chStyle.addItemListener(itemListener);
080
081 chAlignment = new JComboBox(alignments);
082 chAlignment.setRenderer(new AbstractSimpleListCellRenderer() {
083 @Override
084 protected String getLabel(Object value) {
085 final HorizontalAlignment alignment = (HorizontalAlignment) value;
086 return alignment.getName();
087 }
088 });
089 chAlignment.addItemListener(itemListener);
090
091 cbShowLineNumbers = new JCheckBox("Line numbers", true);
092 cbShowLineNumbers.addItemListener(itemListener);
093
094 cbShowTableBorder = new JCheckBox("Table border", true);
095 cbShowTableBorder.addItemListener(itemListener);
096
097 final JPanel panel = new JPanel(new GridBagLayout());
098 final GridBagConstraints leftColumnConstraints = new GridBagConstraints();
099 leftColumnConstraints.insets = new Insets(2, 2, 2, 2);
100 leftColumnConstraints.gridx = 0;
101 leftColumnConstraints.anchor = GridBagConstraints.EAST;
102
103 final GridBagConstraints rightColumnConstraints = new GridBagConstraints();
104 rightColumnConstraints.insets = new Insets(2, 2, 2, 2);
105 rightColumnConstraints.gridx = 1;
106 rightColumnConstraints.fill = GridBagConstraints.NONE;
107 rightColumnConstraints.anchor = GridBagConstraints.WEST;
108
109 final GridBagConstraints twoColumnConstraints = new GridBagConstraints();
110 twoColumnConstraints.insets = new Insets(2, 2, 2, 2);
111 twoColumnConstraints.gridx = 0;
112 twoColumnConstraints.gridwidth = 2;
113 twoColumnConstraints.anchor = GridBagConstraints.WEST;
114
115 panel.add(new JLabel("Target:"), leftColumnConstraints);
116 panel.add(chTarget, rightColumnConstraints);
117 panel.add(new JLabel("Style:"), leftColumnConstraints);
118 panel.add(chStyle, rightColumnConstraints);
119 panel.add(new JLabel("Tab-space:"), leftColumnConstraints);
120 panel.add(chTab, rightColumnConstraints);
121 panel.add(new JLabel("Alignment:"), leftColumnConstraints);
122 panel.add(chAlignment, rightColumnConstraints);
123 panel.add(cbShowLineNumbers, twoColumnConstraints);
124 panel.add(cbShowTableBorder, twoColumnConstraints);
125
126 this.content = panel;
127
128 initDefaultOptions();
129 }
130
131 public JComponent getContent() {
132 return content;
133 }
134
135 private void initDefaultOptions() {
136 final JavaSourceConversionOptions options = JavaSourceConversionOptions.getDefault();
137 tabModel.setValue(new Integer(options.getTabSize()));
138
139 chStyle.setSelectedItem(options.getStyleTable());
140 cbShowLineNumbers.setSelected(options.isShowLineNumbers());
141 cbShowTableBorder.setSelected(options.isShowTableBorder());
142 chAlignment.setSelectedItem(options.getHorizontalAlignment());
143 }
144
145 public JavaSourceConversionSettings getConversionSettings() {
146 final IJavaSourceConverter selectedConverter = JavaSourceConverterProvider.getAllConverters()[chTarget
147 .getSelectedIndex()];
148 final String converterName = selectedConverter.getMetaData().getName();
149 return new JavaSourceConversionSettings(getConversionOptions(), converterName);
150 }
151
152 private JavaSourceConversionOptions getConversionOptions() {
153 final JavaSourceConversionOptions options = JavaSourceConversionOptions.getDefault();
154 final int tabs = tabModel.getNumber().intValue();
155 options.setTabSize(tabs);
156 options.setStyleTable(styles[chStyle.getSelectedIndex()]);
157 options.setShowLineNumbers(cbShowLineNumbers.isSelected());
158 options.setShowTableBorder(cbShowTableBorder.isSelected());
159 options.setHorizontalAlignment(alignments[chAlignment.getSelectedIndex()]);
160 return options;
161 }
162
163 public synchronized void addChangeListener(ChangeListener listener) {
164 listeners.add(listener);
165 }
166
167 public synchronized void removeChangeListener(ChangeListener listener) {
168 listeners.remove(listener);
169 }
170
171 private synchronized void fireStateChanged() {
172 final ChangeEvent event = new ChangeEvent(this);
173 for (final Iterator iter = new ArrayList(listeners).iterator(); iter.hasNext();) {
174 final ChangeListener listener = (ChangeListener) iter.next();
175 listener.stateChanged(event);
176 }
177 }
178 }
|