package org.korsakow.ide.ui.factory; import java.awt.Component; import java.awt.LayoutManager; import java.io.IOException; import java.util.HashMap; import javax.swing.BoundedRangeModel; import javax.swing.ComboBoxModel; import javax.swing.DefaultComboBoxModel; import javax.swing.DefaultListCellRenderer; import javax.swing.DefaultListModel; import javax.swing.Icon; import javax.swing.JButton; import javax.swing.JToggleButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JRadioButton; import javax.swing.JSlider; import javax.swing.JSplitPane; import javax.swing.JTabbedPane; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.ListCellRenderer; import javax.swing.ListModel; import javax.swing.SwingConstants; import javax.xml.parsers.ParserConfigurationException; import org.apache.log4j.Logger; import org.korsakow.ide.util.UIResourceManager; import org.w3c.dom.Document; import org.xml.sax.SAXException; public class DefaultUIFactory implements IUIFactory { private final HashMap<String, LayoutManager> layoutMap = new HashMap<String, LayoutManager>(); public LayoutManager createLayout(String name) { if (!layoutMap.containsKey(name)) { try { Document document = UIResourceManager.getLayout(name); DomLayout layout = new DomLayout(document); layoutMap.put(name, layout); } catch (IOException e) { Logger.getLogger(DefaultUIFactory.class).error("", e); throw new RuntimeException(e); } catch (SAXException e) { Logger.getLogger(DefaultUIFactory.class).error("", e); throw new RuntimeException(e); } catch (ParserConfigurationException e) { Logger.getLogger(DefaultUIFactory.class).error("", e); throw new RuntimeException(e); } } return layoutMap.get(name); } /** * Everything goes through here. * @param comp */ private void commonHandler(String name, Component comp) { comp.setName(name); } public JLabel createLabel(String name) { return createLabel(name, ""); } public JLabel createLabel(String name, String text) { return createLabel(name, text, null); } public JLabel createLabel(String name, Icon icon) { return createLabel(name, "", icon); } public JLabel createLabel(String name, String text, Icon icon) { JLabel label = new JLabel(text, icon, SwingConstants.LEFT); commonHandler(name, label); return label; } public JTextArea createTextArea(String name) { JTextArea area = new JTextArea(); commonHandler(name, area); return area; } public JTextField createTextField(String name) { JTextField field = new JTextField(); commonHandler(name, field); return field; } public JTextField createTextField(String name, String text) { JTextField field = new JTextField(text); commonHandler(name, field); return field; } public JCheckBox createCheckBox(String name) { return createCheckBox(name, ""); } public JCheckBox createCheckBox(String name, String label) { JCheckBox check = new JCheckBox(label); commonHandler(name, check); return check; } public JButton createButton(String name) { JButton button = new JButton(); commonHandler(name, button); return button; } public JButton createButton(String name, String label) { JButton button = new JButton(label); commonHandler(name, button); return button; } public JButton createButton(String name, Icon icon) { return createButton(name, "", icon); } public JButton createButton(String name, String label, Icon icon) { JButton button = new JButton(label, icon); commonHandler(name, button); return button; } public JToggleButton createToggleButton(String name, String label, Icon icon, boolean selected) { JToggleButton button = new JToggleButton(label, icon, selected); commonHandler(name, button); return button; } public JRadioButton createRadioButton(String name) { JRadioButton button = new JRadioButton(); commonHandler(name, button); return button; } public JRadioButton createRadioButton(String name, String label) { JRadioButton button = new JRadioButton(label); commonHandler(name, button); return button; } public JRadioButton createRadioButton(String name, Icon icon) { return createRadioButton(name, "", icon); } public JRadioButton createRadioButton(String name, String label, Icon icon) { JRadioButton button = new JRadioButton(label, icon); commonHandler(name, button); return button; } public JComboBox createComboBox(String name) { return createComboBox(name, new DefaultComboBoxModel()); } public JComboBox createComboBox(String name, ComboBoxModel model) { return createComboBox(name, model, new DefaultListCellRenderer()); } public JComboBox createComboBox(String name, ComboBoxModel model, ListCellRenderer renderer) { JComboBox combo = new JComboBox(); combo.setModel(model); combo.setRenderer(renderer); commonHandler(name, combo); return combo; } public JList createList(String name) { return createList(name, new DefaultListModel()); } public JList createList(String name, ListModel model) { JList list = new JList(); list.setModel(model); commonHandler(name, list); return list; } public JTabbedPane createTabbedPane(String name) { JTabbedPane pane = new JTabbedPane(); commonHandler(name, pane); return pane; } public JSlider createHorizontalSlider(String name) { return createHorizontalSlider(name, 0, 100, 50); // same defaults as JSlider } public JSlider createHorizontalSlider(String name, int min, int max, int initial) { JSlider slider = new JSlider(JSlider.HORIZONTAL, min, max, initial); commonHandler(name, slider); return slider; } public JSplitPane createSplitPane(String name) { JSplitPane pane = new JSplitPane(); commonHandler(name, pane); return pane; } public JSlider createSlider(String name, BoundedRangeModel model) { JSlider slider = new JSlider(model); commonHandler(name, slider); return slider; } public <T extends Component> T customComponent(String name, T comp) { commonHandler(name, comp); return comp; } }