/**
* 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())
};
}
}