package org.bndtools.utils.swt;

import java.util.ArrayList;
import java.util.List;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.ToolItem;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;

public class AddRemoveButtonBarPart {

    public static interface AddRemoveListener {
        void addSelected();

        void removeSelected();
    }

    private final List<AddRemoveListener> listeners = new ArrayList<>();

    private ToolBar toolbar;

    private ToolItem btnAdd;
    private ToolItem btnRemove;

    public ToolBar createControl(Composite parent, int style) {
        toolbar = new ToolBar(parent, style);

        btnAdd = new ToolItem(toolbar, SWT.PUSH);
        btnAdd.setImage(PlatformUI.getWorkbench()
            .getSharedImages()
            .getImage(ISharedImages.IMG_OBJ_ADD));
        btnAdd.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                for (AddRemoveListener l : listeners) {
                    l.addSelected();
                }
            }
        });

        btnRemove = new ToolItem(toolbar, SWT.PUSH);
        btnRemove.setImage(PlatformUI.getWorkbench()
            .getSharedImages()
            .getImage(ISharedImages.IMG_TOOL_DELETE));
        btnRemove.setDisabledImage(PlatformUI.getWorkbench()
            .getSharedImages()
            .getImage(ISharedImages.IMG_TOOL_DELETE_DISABLED));
        btnRemove.setToolTipText("Remove");
        btnRemove.setEnabled(false);
        btnRemove.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                for (AddRemoveListener l : listeners) {
                    l.removeSelected();
                }
            }
        });

        return toolbar;
    }

    public void setAddEnabled(boolean enable) {
        btnAdd.setEnabled(enable);
    }

    public void setRemoveEnabled(boolean enable) {
        btnRemove.setEnabled(enable);
    }

    public void addListener(AddRemoveListener l) {
        listeners.add(l);
    }

    public void removeListener(AddRemoveListener l) {
        listeners.remove(l);
    }

}
