Package name.abuchen.portfolio.ui.util

Source Code of name.abuchen.portfolio.ui.util.ReportingPeriodDropDown$ReportingPeriodListener

package name.abuchen.portfolio.ui.util;

import java.util.LinkedList;

import name.abuchen.portfolio.snapshot.ReportingPeriod;
import name.abuchen.portfolio.ui.Messages;
import name.abuchen.portfolio.ui.PortfolioPart;
import name.abuchen.portfolio.ui.dialogs.ReportingPeriodDialog;

import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.widgets.ToolBar;

public final class ReportingPeriodDropDown extends AbstractDropDown
{
    public interface ReportingPeriodListener
    {
        void reportingPeriodUpdated();
    }

    private ReportingPeriodListener listener;
    // TODO: move reporting periods to kepler e4 application model?
    private LinkedList<ReportingPeriod> periods = new LinkedList<ReportingPeriod>();

    public ReportingPeriodDropDown(ToolBar toolBar, final PortfolioPart part, ReportingPeriodListener listener)
    {
        super(toolBar, "x"); //$NON-NLS-1$
        this.periods = part.loadReportingPeriods();
        this.listener = listener;

        getToolItem().setText(periods.getFirst().toString());

        toolBar.addDisposeListener(new DisposeListener()
        {
            @Override
            public void widgetDisposed(DisposeEvent e)
            {
                part.storeReportingPeriods(periods);
            }
        });
    }

    @Override
    public void menuAboutToShow(IMenuManager manager)
    {
        boolean isFirst = true;
        for (final ReportingPeriod period : periods)
        {
            Action action = new Action(period.toString())
            {
                @Override
                public void run()
                {
                    periods.remove(period);
                    periods.addFirst(period);
                    setLabel(period.toString());

                    if (listener != null)
                        listener.reportingPeriodUpdated();
                }
            };
            if (isFirst)
                action.setChecked(true);
            isFirst = false;

            manager.add(action);
        }

        manager.add(new Separator());
        manager.add(new Action(Messages.LabelReportingAddPeriod)
        {
            @Override
            public void run()
            {
                ReportingPeriodDialog dialog = new ReportingPeriodDialog(getToolBar().getShell(), periods.getFirst());

                if (dialog.open() == Dialog.OK)
                {
                    ReportingPeriod period = dialog.getReportingPeriod();
                    periods.addFirst(period);
                    setLabel(period.toString());

                    if (listener != null)
                        listener.reportingPeriodUpdated();

                    if (periods.size() > 5)
                        periods.removeLast();
                }
            }
        });
    }

    public LinkedList<ReportingPeriod> getPeriods()
    {
        return periods;
    }
}
TOP

Related Classes of name.abuchen.portfolio.ui.util.ReportingPeriodDropDown$ReportingPeriodListener

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.