Package name.abuchen.portfolio.ui.handlers

Source Code of name.abuchen.portfolio.ui.handlers.CustomSaveHandler$PartLabelProvider

package name.abuchen.portfolio.ui.handlers;

import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;

import name.abuchen.portfolio.ui.Messages;
import name.abuchen.portfolio.ui.PortfolioPlugin;
import name.abuchen.portfolio.ui.dialogs.CheckedListSelectionDialog;

import org.eclipse.e4.ui.internal.workbench.PartServiceSaveHandler;
import org.eclipse.e4.ui.model.application.ui.basic.MPart;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class CustomSaveHandler extends PartServiceSaveHandler
{
    private static final class PartLabelProvider extends LabelProvider
    {
        @Override
        public String getText(Object element)
        {
            MPart part = (MPart) element;
            String tooltip = part.getTooltip();
            return tooltip != null ? part.getLabel() + " (" + part.getTooltip() + ")" : part.getLabel(); //$NON-NLS-1$ //$NON-NLS-2$
        }

        @Override
        public Image getImage(Object element)
        {
            return PortfolioPlugin.image(PortfolioPlugin.IMG_LOGO_16);
        }
    }

    private static final class PromptForSaveDialog extends MessageDialog
    {
        private PromptForSaveDialog(Shell parentShell, String dialogMessage)
        {
            super(parentShell, Messages.SaveHandlerTitle, null, dialogMessage, MessageDialog.INFORMATION, //
                            new String[] { Messages.LabelYes, Messages.LabelNo, Messages.LabelCancel }, 0);

            setShellStyle(getShellStyle() | SWT.SHEET);
        }
    }

    @Override
    public Save promptToSave(MPart dirtyPart)
    {
        String prompt = MessageFormat.format(Messages.SaveHandlerPrompt, dirtyPart.getLabel());

        MessageDialog dialog = new PromptForSaveDialog(Display.getDefault().getActiveShell(), prompt);

        switch (dialog.open())
        {
            case 0:
                return Save.YES;
            case 1:
                return Save.NO;
            case 2:
            default:
                return Save.CANCEL;
        }
    }

    @Override
    public Save[] promptToSave(Collection<MPart> dirtyParts)
    {
        if (dirtyParts.size() == 1)
            return new Save[] { promptToSave(dirtyParts.iterator().next()) };
        else
            return promptToSaveMultiple(dirtyParts);
    }

    private Save[] promptToSaveMultiple(Collection<MPart> dirtyParts)
    {
        CheckedListSelectionDialog dialog = new CheckedListSelectionDialog(Display.getDefault().getActiveShell(),
                        new PartLabelProvider());
        dialog.setTitle(Messages.SaveHandlerTitle);
        dialog.setMessage(Messages.SaveHandlerMsgSelectFileToSave);
        dialog.setElements(dirtyParts);

        int returnCode = dialog.open();

        Save[] answer = new Save[dirtyParts.size()];

        if (returnCode == Dialog.OK)
        {
            Arrays.fill(answer, Save.NO);
            if (dialog.getResult() != null)
            {
                List<MPart> parts = new ArrayList<MPart>(dirtyParts);
                for (Object toBeSaved : dialog.getResult())
                    answer[parts.indexOf(toBeSaved)] = Save.YES;
            }
        }
        else if (returnCode == Dialog.CANCEL)
        {
            Arrays.fill(answer, Save.CANCEL);
        }

        return answer;
    }

}
TOP

Related Classes of name.abuchen.portfolio.ui.handlers.CustomSaveHandler$PartLabelProvider

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.