// CategoryTotalsFilterChooser
package org.javamoney.examples.ez.money.gui.chooser;
import static org.javamoney.examples.ez.common.utility.ButtonHelper.buildButton;
import static org.javamoney.examples.ez.money.IconKeys.FILTER;
import java.awt.GridBagConstraints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.AbstractButton;
import org.javamoney.examples.ez.money.gui.dialog.CategoryTotalsFilterDialog;
import org.javamoney.examples.ez.money.model.dynamic.total.TotalFilter;
import org.javamoney.examples.ez.common.gui.CheckBox;
import org.javamoney.examples.ez.common.gui.Link;
import org.javamoney.examples.ez.common.gui.Panel;
import org.javamoney.examples.ez.common.utility.ActionSignaler;
import org.javamoney.examples.ez.common.utility.I18NHelper;
/**
* This class facilitates providing a way to configure the filter used for the
* category totals.
*/
public
final
class
CategoryTotalsFilterChooser
extends Panel
{
/**
* Constructs a new chooser.
*/
public
CategoryTotalsFilterChooser()
{
setActionSignaler(new ActionSignaler());
setFilter(new TotalFilter());
createButtons();
// Build panel.
setAnchor(GridBagConstraints.EAST);
add(getButtons()[ENABLE], 0, 0, 1, 1, 100, 100);
addEmptyCellAt(1, 0);
add(getButtons()[OPTIONS], 2, 0, 1, 1, 0, 0);
}
/**
* This method adds the action listener to the chooser.
*
* @param listener The action listener to add.
*/
public
void
addActionListener(ActionListener listener)
{
getActionSignaler().addListener(listener);
}
/**
* This method returns the filter.
*
* @return The filter.
*/
public
TotalFilter
getFilter()
{
return itsFilter;
}
//////////////////////////////////////////////////////////////////////////////
// Start of private methods.
//////////////////////////////////////////////////////////////////////////////
private
void
createButtons()
{
ActionHandler handler = new ActionHandler();
itsButtons = new AbstractButton[2];
getButtons()[ENABLE] = new CheckBox();
getButtons()[OPTIONS] = new Link();
// Build buttons.
buildButton(getButtons()[ENABLE], getProperty("enable"), handler);
buildButton(getButtons()[OPTIONS], FILTER.getIcon(), handler, "", getProperty("filter_tip"));
getButtons()[ENABLE].setSelected(false);
getButtons()[OPTIONS].setEnabled(false);
}
private
ActionSignaler
getActionSignaler()
{
return itsActionSignaler;
}
private
AbstractButton[]
getButtons()
{
return itsButtons;
}
private
static
String
getProperty(String key)
{
return I18NHelper.getProperty("CategoryTotalsFilterChooser." + key);
}
private
void
sendSignal()
{
getActionSignaler().sendSignal(this, getClass().getSimpleName());
}
private
void
setActionSignaler(ActionSignaler signaler)
{
itsActionSignaler = signaler;
}
private
void
setFilter(TotalFilter filter)
{
itsFilter = filter;
}
//////////////////////////////////////////////////////////////////////////////
// Start of inner classes.
//////////////////////////////////////////////////////////////////////////////
private
class
ActionHandler
implements ActionListener
{
public
void
actionPerformed(ActionEvent event)
{
Object source = event.getSource();
if(source == getButtons()[ENABLE])
{
getFilter().setEnabled(!getFilter().isEnabled());
getButtons()[OPTIONS].setEnabled(getFilter().isEnabled());
sendSignal();
}
else if(new CategoryTotalsFilterDialog(getFilter()).showDialog() == true)
{
sendSignal();
}
}
}
//////////////////////////////////////////////////////////////////////////////
// Start of class members.
//////////////////////////////////////////////////////////////////////////////
private ActionSignaler itsActionSignaler;
private AbstractButton[] itsButtons;
private TotalFilter itsFilter;
private static final int ENABLE = 0;
private static final int OPTIONS = 1;
}