package name.abuchen.portfolio.ui.dialogs;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.TableColumnLayout;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import name.abuchen.portfolio.snapshot.ReportingPeriod;
import name.abuchen.portfolio.ui.Images;
import name.abuchen.portfolio.ui.Messages;
import name.abuchen.portfolio.ui.util.ContextMenu;
public class EditReportingPeriodsDialog extends Dialog
{
private TableViewer tableViewer;
private List<ReportingPeriod> periods;
public EditReportingPeriodsDialog(Shell parentShell)
{
super(parentShell);
}
public void setReportingPeriods(List<ReportingPeriod> periods)
{
this.periods = new ArrayList<>(periods);
}
public List<ReportingPeriod> getReportingPeriods()
{
return this.periods;
}
protected void configureShell(Shell shell)
{
super.configureShell(shell);
shell.setText(Messages.LabelReportInterval);
}
@Override
protected Control createDialogArea(Composite parent)
{
Composite container = (Composite) super.createDialogArea(parent);
Composite tableArea = new Composite(container, SWT.NONE);
GridDataFactory.fillDefaults().grab(true, true).minSize(SWT.DEFAULT, 200).applyTo(tableArea);
TableColumnLayout layout = new TableColumnLayout();
tableArea.setLayout(layout);
tableViewer = new TableViewer(tableArea, SWT.BORDER | SWT.MULTI | SWT.MULTI);
final Table table = tableViewer.getTable();
table.setHeaderVisible(false);
table.setLinesVisible(false);
TableViewerColumn column = new TableViewerColumn(tableViewer, SWT.None);
layout.setColumnData(column.getColumn(), new ColumnWeightData(100));
tableViewer.setLabelProvider(new LabelProvider()
{
@Override
public Image getImage(Object element)
{
return Images.TEXT.image();
}
});
tableViewer.setContentProvider(ArrayContentProvider.getInstance());
tableViewer.setInput(periods);
new ContextMenu(tableViewer.getTable(), m -> fillContextMenu(m)).hook();
return container;
}
private void fillContextMenu(IMenuManager manager)
{
manager.add(new Action(Messages.MenuReportingPeriodDelete)
{
@Override
public void run()
{
IStructuredSelection selection = (IStructuredSelection) tableViewer.getSelection();
for (Object o : selection.toArray())
periods.remove(o);
tableViewer.refresh();
}
});
}
}