1 package de.java2html.gui; 2 3 import java.awt.GridBagConstraints ; 4 import java.awt.GridBagLayout ; 5 import java.awt.Insets ; 6 import java.awt.event.ItemEvent ; 7 import java.awt.event.ItemListener ; 8 import java.util.ArrayList ; 9 import java.util.Iterator ; 10 import java.util.List ; 11 12 import javax.swing.JCheckBox ; 13 import javax.swing.JComboBox ; 14 import javax.swing.JComponent ; 15 import javax.swing.JLabel ; 16 import javax.swing.JPanel ; 17 import javax.swing.JSpinner ; 18 import javax.swing.SpinnerNumberModel ; 19 import javax.swing.event.ChangeEvent ; 20 import javax.swing.event.ChangeListener ; 21 22 import de.java2html.JavaSourceConversionSettings; 23 import de.java2html.converter.IJavaSourceConverter; 24 import de.java2html.converter.JavaSourceConverterProvider; 25 import de.java2html.options.HorizontalAlignment; 26 import de.java2html.options.JavaSourceConversionOptions; 27 import de.java2html.options.JavaSourceStyleTable; 28 29 public class Java2HtmlOptionsPanel { 30 private final static JavaSourceStyleTable[] styles = JavaSourceStyleTable.getPredefinedTables(); 31 private final static HorizontalAlignment[] alignments = new HorizontalAlignment[]{ 32 HorizontalAlignment.LEFT, 33 HorizontalAlignment.CENTER, 34 HorizontalAlignment.RIGHT }; 35 36 private final SpinnerNumberModel tabModel = new SpinnerNumberModel (2, 0, 16, 1); 37 38 private final JSpinner chTab; 39 private final JComboBox chTarget; 40 private final JComboBox chStyle; 41 private final JComboBox chAlignment; 42 private final JCheckBox cbShowLineNumbers; 43 private final JCheckBox cbShowTableBorder; 44 private final List listeners = new ArrayList (); 45 46 private final JComponent content; 47 48 public Java2HtmlOptionsPanel() { 49 chTab = new JSpinner (tabModel); 50 ItemListener itemListener = new ItemListener () { 51 public void itemStateChanged(ItemEvent e) { 52 fireStateChanged(); 53 } 54 }; 55 tabModel.addChangeListener(new ChangeListener () { 56 public void stateChanged(ChangeEvent e) { 57 fireStateChanged(); 58 } 59 }); 60 61 chTarget = new JComboBox (JavaSourceConverterProvider.getAllConverters()); 62 chTarget.setRenderer(new AbstractSimpleListCellRenderer() { 63 protected String getLabel(Object value) { 64 IJavaSourceConverter converter = (IJavaSourceConverter) value; 65 return converter.getMetaData().getPrintName(); 66 } 67 }); 68 chTarget.addItemListener(itemListener); 69 70 chStyle = new JComboBox (styles); 71 chStyle.setRenderer(new AbstractSimpleListCellRenderer() { 72 protected String getLabel(Object value) { 73 JavaSourceStyleTable table = (JavaSourceStyleTable) value; 74 return table.getName(); 75 } 76 }); 77 chStyle.addItemListener(itemListener); 78 79 chAlignment = new JComboBox (alignments); 80 chAlignment.setRenderer(new AbstractSimpleListCellRenderer() { 81 protected String getLabel(Object value) { 82 HorizontalAlignment alignment = (HorizontalAlignment) value; 83 return alignment.getName(); 84 } 85 }); 86 chAlignment.addItemListener(itemListener); 87 88 cbShowLineNumbers = new JCheckBox ("Line numbers", true); 89 cbShowLineNumbers.addItemListener(itemListener); 90 91 cbShowTableBorder = new JCheckBox ("Table border", true); 92 cbShowTableBorder.addItemListener(itemListener); 93 94 JPanel panel = new JPanel (new GridBagLayout ()); 95 final GridBagConstraints leftColumnConstraints = new GridBagConstraints (); 96 leftColumnConstraints.insets = new Insets (2, 2, 2, 2); 97 leftColumnConstraints.gridx = 0; 98 leftColumnConstraints.anchor = GridBagConstraints.EAST; 99 100 final GridBagConstraints rightColumnConstraints = new GridBagConstraints (); 101 rightColumnConstraints.insets = new Insets (2, 2, 2, 2); 102 rightColumnConstraints.gridx = 1; 103 rightColumnConstraints.fill = GridBagConstraints.NONE; 104 rightColumnConstraints.anchor = GridBagConstraints.WEST; 105 106 final GridBagConstraints twoColumnConstraints = new GridBagConstraints (); 107 twoColumnConstraints.insets = new Insets (2, 2, 2, 2); 108 twoColumnConstraints.gridx = 0; 109 twoColumnConstraints.gridwidth = 2; 110 twoColumnConstraints.anchor = GridBagConstraints.WEST; 111 112 panel.add(new JLabel ("Target:"), leftColumnConstraints); 113 panel.add(chTarget, rightColumnConstraints); 114 panel.add(new JLabel ("Style:"), leftColumnConstraints); 115 panel.add(chStyle, rightColumnConstraints); 116 panel.add(new JLabel ("Tab-space:"), leftColumnConstraints); 117 panel.add(chTab, rightColumnConstraints); 118 panel.add(new JLabel ("Alignment:"), leftColumnConstraints); 119 panel.add(chAlignment, rightColumnConstraints); 120 panel.add(cbShowLineNumbers, twoColumnConstraints); 121 panel.add(cbShowTableBorder, twoColumnConstraints); 122 123 this.content = panel; 124 125 initDefaultOptions(); 126 } 127 128 public JComponent getContent() { 129 return content; 130 } 131 132 private void initDefaultOptions() { 133 JavaSourceConversionOptions options = JavaSourceConversionOptions.getDefault(); 134 tabModel.setValue(new Integer (options.getTabSize())); 135 136 chStyle.setSelectedItem(options.getStyleTable()); 137 cbShowLineNumbers.setSelected(options.isShowLineNumbers()); 138 cbShowTableBorder.setSelected(options.isShowTableBorder()); 139 chAlignment.setSelectedItem(options.getHorizontalAlignment()); 140 } 141 142 public JavaSourceConversionSettings getConversionSettings() { 143 final IJavaSourceConverter selectedConverter = JavaSourceConverterProvider.getAllConverters()[chTarget 144 .getSelectedIndex()]; 145 String converterName = selectedConverter.getMetaData().getName(); 146 return new JavaSourceConversionSettings(getConversionOptions(), converterName); 147 } 148 149 private JavaSourceConversionOptions getConversionOptions() { 150 JavaSourceConversionOptions options = JavaSourceConversionOptions.getDefault(); 151 int tabs = tabModel.getNumber().intValue(); 152 options.setTabSize(tabs); 153 options.setStyleTable(styles[chStyle.getSelectedIndex()]); 154 options.setShowLineNumbers(cbShowLineNumbers.isSelected()); 155 options.setShowTableBorder(cbShowTableBorder.isSelected()); 156 options.setHorizontalAlignment(alignments[chAlignment.getSelectedIndex()]); 157 return options; 158 } 159 160 public synchronized void addChangeListener(ChangeListener listener) { 161 listeners.add(listener); 162 } 163 164 public synchronized void removeChangeListener(ChangeListener listener) { 165 listeners.remove(listener); 166 } 167 168 private synchronized void fireStateChanged() { 169 ChangeEvent event = new ChangeEvent (this); 170 for (Iterator iter = new ArrayList (listeners).iterator(); iter.hasNext();) { 171 ChangeListener listener = (ChangeListener ) iter.next(); 172 listener.stateChanged(event); 173 } 174 } 175 } | Popular Tags |