package name.abuchen.portfolio.ui.wizards.client;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.layout.TableColumnLayout;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.Text;
import name.abuchen.portfolio.model.Account;
import name.abuchen.portfolio.model.Client;
import name.abuchen.portfolio.model.Portfolio;
import name.abuchen.portfolio.ui.Images;
import name.abuchen.portfolio.ui.Messages;
import name.abuchen.portfolio.ui.wizards.AbstractWizardPage;
public class NewPortfolioAccountPage extends AbstractWizardPage
{
private Client client;
public NewPortfolioAccountPage(Client client)
{
super(NewPortfolioAccountPage.class.getSimpleName());
this.client = client;
setTitle(Messages.NewFileWizardPortfolioTitle);
setDescription(Messages.NewFileWizardPortfolioDescription);
}
class Pair
{
public String portfolio, account;
public Pair(String p, String a)
{
portfolio = p;
account = a;
}
}
@Override
public void createControl(Composite parent)
{
Composite container = new Composite(parent, SWT.NULL);
setControl(container);
GridLayoutFactory.fillDefaults().numColumns(5).applyTo(container);
Label lblPort = new Label(container, SWT.NULL);
lblPort.setText(Messages.ColumnPortfolio);
GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(lblPort);
final Text portfolioName = new Text(container, SWT.BORDER | SWT.SINGLE);
GridDataFactory.fillDefaults().grab(true, false).align(SWT.FILL, SWT.CENTER).applyTo(portfolioName);
Label lblAcc = new Label(container, SWT.NULL);
lblAcc.setText(Messages.ColumnReferenceAccount);
GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(lblAcc);
final Text accountName = new Text(container, SWT.BORDER | SWT.SINGLE);
GridDataFactory.fillDefaults().grab(true, false).align(SWT.FILL, SWT.CENTER).applyTo(accountName);
final List<Pair> data = new ArrayList<Pair>();
Button button = new Button(container, SWT.PUSH);
button.setText(Messages.NewFileWizardButtonAdd);
GridDataFactory.fillDefaults().applyTo(button);
Composite tableContainer = new Composite(container, SWT.NONE);
GridDataFactory.fillDefaults().span(5, 1).grab(true, true).applyTo(tableContainer);
TableColumnLayout layout = new TableColumnLayout();
tableContainer.setLayout(layout);
final TableViewer tViewer = new TableViewer(tableContainer);
button.addSelectionListener(new SelectionAdapter()
{
@Override
public void widgetSelected(SelectionEvent e)
{
String portName = portfolioName.getText();
String acnName = accountName.getText();
if (portName.length() > 0 && acnName.length() > 0)
{
Account account = new Account();
account.setName(acnName);
account.setCurrencyCode(client.getBaseCurrency());
Portfolio portfolio = new Portfolio();
portfolio.setName(portName);
portfolio.setReferenceAccount(account);
client.addAccount(account);
client.addPortfolio(portfolio);
data.add(new Pair(portName, acnName));
tViewer.refresh();
// delete previous input
accountName.setText(""); //$NON-NLS-1$
portfolioName.setText(""); //$NON-NLS-1$
// focus first input field
portfolioName.setFocus();
setPageComplete(true);
}
}
});
Table table = tViewer.getTable();
table.setEnabled(false);
table.setHeaderVisible(true);
table.setLinesVisible(false);
tViewer.setContentProvider(ArrayContentProvider.getInstance());
tViewer.setInput(data);
TableViewerColumn pCol = new TableViewerColumn(tViewer, SWT.NONE);
layout.setColumnData(pCol.getColumn(), new ColumnWeightData(50));
pCol.getColumn().setText(Messages.ColumnPortfolio);
pCol.setLabelProvider(new ColumnLabelProvider()
{
@Override
public String getText(Object element)
{
return ((Pair) element).portfolio;
}
@Override
public Image getImage(Object element)
{
return Images.PORTFOLIO.image();
}
});
TableViewerColumn aCol = new TableViewerColumn(tViewer, SWT.NONE);
layout.setColumnData(aCol.getColumn(), new ColumnWeightData(50));
aCol.getColumn().setText(Messages.ColumnReferenceAccount);
aCol.setLabelProvider(new ColumnLabelProvider()
{
@Override
public String getText(Object element)
{
return ((Pair) element).account;
}
@Override
public Image getImage(Object element)
{
return Images.ACCOUNT.image();
}
});
container.pack();
setPageComplete(false);
}
}