/** * SampleWidget2.java * Copyright (C) 2010 New Zealand Digital Library, http://expeditee.org * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ package org.expeditee.items.widgets; import java.awt.FlowLayout; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.util.Random; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSplitPane; import javax.swing.JTextArea; import javax.swing.JToggleButton; import org.expeditee.core.Colour; import org.expeditee.gio.swing.SwingConversions; import org.expeditee.gio.swing.SwingFontManager; import org.expeditee.items.Text; public class SampleWidget2 extends SwingWidget { private static final Font STANDARD_FONT = SwingFontManager.getInstance().getInternalFont(SwingFontManager.getInstance().getDefaultFont()); private static final Font BIG_FONT = STANDARD_FONT.deriveFont(STANDARD_FONT.getSize() * 2f); private final JComboBox cmboPrepend; private final JTextArea utxt = new JTextArea();; public SampleWidget2(Text source, String[] args) { super(source, new JSplitPane(JSplitPane.VERTICAL_SPLIT), 60, -1, 40, -1); final JSplitPane sp = (JSplitPane)super._swingComponent; //Build controls area. final JPanel controls = new JPanel(new FlowLayout()); controls.setBackground(SwingConversions.toSwingColor(Colour.FromRGB255(255,228,195))); final JLabel lblTitle = new JLabel("This is an example Widget!"); lblTitle.setFont(BIG_FONT); final JToggleButton tbtnStyle = new JToggleButton("Toggle Style"); tbtnStyle.setFont(BIG_FONT); tbtnStyle.addItemListener(new ToggleStyle(utxt)); final JCheckBox ckbBigFont = new JCheckBox("Big Font"); ckbBigFont.setBackground(null); ckbBigFont.setSelected(true); ckbBigFont.setFont(BIG_FONT); ckbBigFont.addItemListener(new ToggleBigFont(utxt)); final Random r = new Random(); final String[] options = new String[] { "Item: " + r.nextInt(100), "Item: " + r.nextInt(100), "Item: " + r.nextInt(100), "Item: " + r.nextInt(100), "Item: " + r.nextInt(100), "Item: " + r.nextInt(100), "Item: " + r.nextInt(100), "Item: " + r.nextInt(100), "Item: " + r.nextInt(100), "Item: " + r.nextInt(100) }; cmboPrepend = new JComboBox(options); cmboPrepend.setFont(BIG_FONT); cmboPrepend.addActionListener(new PrependManager(cmboPrepend, utxt)); cmboPrepend.setLightWeightPopupEnabled(false); controls.add(lblTitle); controls.add(cmboPrepend); controls.add(tbtnStyle); controls.add(ckbBigFont); sp.setTopComponent(controls); //Build user text area. utxt.setFont(BIG_FONT); sp.setBottomComponent(utxt); //Initialise state init(args, cmboPrepend, utxt); } private void init(String[] args, final JComboBox cmboPrepend, final JTextArea utxt) { if (args != null && args.length >= 1) { int selectedItem = 0; // extract selected index if (args.length >= 1 && args[0] != null) { try { selectedItem = Integer.parseInt(args[0]); } catch (NumberFormatException e) { e.printStackTrace(); } } if (selectedItem < 0) { selectedItem = 0; } else if (selectedItem >= cmboPrepend.getItemCount()) { selectedItem = cmboPrepend.getItemCount() - 1; } cmboPrepend.setSelectedIndex(selectedItem); if (args.length >= 2 && args[1] != null) { utxt.setText(args[1]); } if (args.length >= 3 && args[2] != null) { try { int div = Integer.parseInt(args[2]); ((JSplitPane)super._swingComponent).setDividerLocation(div); } catch (NumberFormatException e) {} } } } private class PrependManager implements ActionListener { private JComboBox toConsult; private JTextArea toAlter; public PrependManager(final JComboBox toConsult, final JTextArea toAlter) { this.toConsult = toConsult; this.toAlter = toAlter; } @Override public void actionPerformed(ActionEvent e) { this.toAlter.setText(this.toConsult.getSelectedItem() + " " + this.toAlter.getText()); } } private class ToggleStyle implements ItemListener { private JTextArea toToggle; public ToggleStyle(final JTextArea toToggle) { this.toToggle = toToggle; } @Override public void itemStateChanged(final ItemEvent e) { if(e.getStateChange() == ItemEvent.SELECTED) { toToggle.setFont(toToggle.getFont().deriveFont(Font.BOLD)); } else if (e.getStateChange() == ItemEvent.DESELECTED) { toToggle.setFont(toToggle.getFont().deriveFont(Font.PLAIN)); } } } private class ToggleBigFont implements ItemListener { private JTextArea toToggle; public ToggleBigFont(final JTextArea toToggle) { this.toToggle = toToggle; } @Override public void itemStateChanged(final ItemEvent e) { if(e.getStateChange() == ItemEvent.SELECTED) { toToggle.setFont(BIG_FONT.deriveFont(toToggle.getFont().getStyle())); } else if(e.getStateChange() == ItemEvent.DESELECTED) { toToggle.setFont(STANDARD_FONT.deriveFont(toToggle.getFont().getStyle())); } } } @Override protected String[] getArgs() { return new String[] { Integer.toString(cmboPrepend.getSelectedIndex()), utxt.getText(), Integer.toString(((JSplitPane)super._swingComponent).getDividerLocation()) }; } }