package name.abuchen.portfolio.ui.util;
import java.util.List;
import org.eclipse.jface.layout.TableColumnLayout;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ColumnPixelData;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.Widget;
import name.abuchen.portfolio.model.LatestSecurityPrice;
import name.abuchen.portfolio.money.Values;
import name.abuchen.portfolio.ui.Messages;
public class QuotesTableViewer
{
private TableViewer tableViewer;
public QuotesTableViewer(Composite container)
{
TableColumnLayout layout = new TableColumnLayout();
container.setLayout(layout);
tableViewer = new TableViewer(container, SWT.BORDER);
Table table = tableViewer.getTable();
table.setHeaderVisible(true);
table.setLinesVisible(true);
TableColumn column = new TableColumn(tableViewer.getTable(), SWT.None);
column.setText(Messages.ColumnDate);
layout.setColumnData(column, new ColumnPixelData(80, true));
column = new TableColumn(tableViewer.getTable(), SWT.None);
column.setText(Messages.ColumnDaysHigh);
column.setAlignment(SWT.RIGHT);
layout.setColumnData(column, new ColumnPixelData(80, true));
column = new TableColumn(tableViewer.getTable(), SWT.None);
column.setText(Messages.ColumnDaysLow);
column.setAlignment(SWT.RIGHT);
layout.setColumnData(column, new ColumnPixelData(80, true));
column = new TableColumn(tableViewer.getTable(), SWT.None);
column.setText(Messages.ColumnQuote);
column.setAlignment(SWT.RIGHT);
layout.setColumnData(column, new ColumnPixelData(80, true));
column = new TableColumn(tableViewer.getTable(), SWT.None);
column.setText(Messages.ColumnVolume);
column.setAlignment(SWT.RIGHT);
layout.setColumnData(column, new ColumnPixelData(80, true));
tableViewer.setLabelProvider(new PriceLabelProvider());
tableViewer.setContentProvider(ArrayContentProvider.getInstance());
}
public void setInput(List<LatestSecurityPrice> quotes)
{
tableViewer.setInput(quotes);
}
public void setMessage(String message)
{
tableViewer.setInput(new String[] { message });
}
public void refresh()
{
tableViewer.refresh();
}
public void refresh(boolean updateLabels)
{
tableViewer.refresh(updateLabels);
}
public Table getTable()
{
return tableViewer.getTable();
}
public Widget getControl()
{
return tableViewer.getControl();
}
static class PriceLabelProvider extends LabelProvider implements ITableLabelProvider
{
public Image getColumnImage(Object element, int columnIndex)
{
return null;
}
public String getColumnText(Object element, int columnIndex)
{
if (element instanceof String)
{
return columnIndex == 0 ? element.toString() : null;
}
else
{
LatestSecurityPrice p = (LatestSecurityPrice) element;
switch (columnIndex)
{
case 0:
return Values.Date.format(p.getTime());
case 1:
return p.getHigh() == LatestSecurityPrice.NOT_AVAILABLE ? null : Values.Quote.format(p.getHigh());
case 2:
return p.getLow() == LatestSecurityPrice.NOT_AVAILABLE ? null : Values.Quote.format(p.getLow());
case 3:
return Values.Quote.format(p.getValue());
case 4:
return String.format("%,d", p.getVolume()); //$NON-NLS-1$
default:
throw new IllegalArgumentException(String.valueOf(columnIndex));
}
}
}
}
}