package org.nightlabs.jfire.trade.ui.tariff;
import java.util.Comparator;
import java.util.List;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.nightlabs.base.ui.composite.XComposite;
import org.nightlabs.base.ui.notification.IDirtyStateManager;
import org.nightlabs.jfire.accounting.Tariff;
import org.nightlabs.jfire.accounting.TariffOrderConfigModule;
import org.nightlabs.jfire.trade.ui.resource.Messages;
public class TariffOrderCfModComposite extends XComposite {
private TariffList tariffList;
private Button upButton;
private Button downButton;
public TariffOrderCfModComposite(Composite parent, int style, final IDirtyStateManager dirtyStateManager) {
super(parent, style, LayoutMode.ORDINARY_WRAPPER, LayoutDataMode.GRID_DATA, 2);
getGridLayout().makeColumnsEqualWidth = false;
tariffList = new TariffList(this, SWT.NONE, false, null);
XComposite buttonComp = new XComposite(this, SWT.NONE, LayoutMode.TIGHT_WRAPPER);
buttonComp.setLayoutData(new GridData(GridData.FILL_VERTICAL));
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
gd.verticalAlignment = GridData.BEGINNING;
upButton = new Button(buttonComp, SWT.PUSH);
upButton.setLayoutData(gd);
upButton.setText(Messages.getString("org.nightlabs.jfire.trade.ui.tariff.TariffOrderCfModComposite.button.text.up")); //$NON-NLS-1$
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.verticalAlignment = GridData.BEGINNING;
downButton = new Button(buttonComp, SWT.PUSH);
downButton.setLayoutData(gd);
downButton.setText(Messages.getString("org.nightlabs.jfire.trade.ui.tariff.TariffOrderCfModComposite.button.text.down")); //$NON-NLS-1$
SelectionListener buttonListener = new SelectionListener() {
public void widgetDefaultSelected(SelectionEvent e) {
}
public void widgetSelected(SelectionEvent e) {
if (e.widget == upButton)
{
tariffList.moveSelectedTariffOneUp();
dirtyStateManager.markDirty();
} else {
tariffList.moveSelectedTariffOneDown();
dirtyStateManager.markDirty();
}
checkButtonStates();
}
};
upButton.addSelectionListener(buttonListener);
downButton.addSelectionListener(buttonListener);
tariffList.addSelectionChangedListener(new ISelectionChangedListener(){
@Override
public void selectionChanged(SelectionChangedEvent arg0) {
checkButtonStates();
}
});
layout();
}
public List<Tariff> getOrderedTariffs() {
return tariffList.getOrderedTariffs();
}
public void loadTariffs(final TariffOrderConfigModule cfMod) {
tariffList.loadTariffs(new Comparator<Tariff>() {
public int compare(Tariff o1, Tariff o2) {
return cfMod.getTariffComparator().compare(o1, o2);
}
});
}
private void checkButtonStates()
{
if (tariffList.getSelectionIndex() == 0) {
upButton.setEnabled(false);
downButton.setEnabled(true);
}
else if (tariffList.getSelectionIndex() == tariffList.getItemCount()-1) {
upButton.setEnabled(true);
downButton.setEnabled(false);
}
else if (tariffList.getSelectionIndex() == -1) {
upButton.setEnabled(false);
downButton.setEnabled(false);
}
else {
upButton.setEnabled(true);
downButton.setEnabled(true);
}
}
/**
* Flag indicating whether this UI is editable or not.
*/
private boolean editable;
/**
* Sets the editable state of the composite.
* @param editable whether or not the tarif list is editable.
*/
public void setEditable(boolean editable)
{
this.editable = editable;
upButton.setEnabled(editable);
downButton.setEnabled(editable);
tariffList.setEditable(editable);
}
/**
* Returns whether the tarif list is editable or not.
* @return whether the tarif list is editable or not.
*/
public boolean isEditable()
{
return editable;
}
}