com.aptana.editor.php.internal.ui.preferences.PHPLibrariesPreferencePage.java Source code

Java tutorial

Introduction

Here is the source code for com.aptana.editor.php.internal.ui.preferences.PHPLibrariesPreferencePage.java

Source

/**
 * Aptana Studio
 * Copyright (c) 2005-2011 by Appcelerator, Inc. All Rights Reserved.
 * Licensed under the terms of the GNU Public License (GPL) v3 (with exceptions).
 * Please see the license.html included with this distribution for details.
 * Any modifications to this file must keep this entire header intact.
 */
package com.aptana.editor.php.internal.ui.preferences;

import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.ViewerComparator;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;

import com.aptana.editor.php.internal.builder.IPHPLibrary;
import com.aptana.editor.php.internal.builder.LibraryManager;
import com.aptana.editor.php.internal.builder.PHPLibrary;
import com.aptana.editor.php.internal.builder.UserLibrary;

/**
 * @author Pavel Petrochenko
 */
public class PHPLibrariesPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {

    private final class SelectAction implements SelectionListener {

        boolean select;

        private SelectAction(boolean doSelect) {
            this.select = doSelect;
        }

        public void widgetDefaultSelected(SelectionEvent e) {

        }

        public void widgetSelected(SelectionEvent e) {
            newCheckList.setAllChecked(select);
        }
    }

    private CheckboxTableViewer newCheckList;

    @Override
    protected Control createContents(Composite parent) {
        Composite body = new Composite(parent, SWT.NONE);

        body.setLayout(new GridLayout(1, false));
        Label label = new Label(body, SWT.NONE | SWT.WRAP);
        label.setText(Messages.PHPLibrariesPreferencePage_librariesTitle);
        final Map<URL, Image> images = new HashMap<URL, Image>();
        Composite tableAndButton = new Composite(body, SWT.NONE);
        tableAndButton.setLayout(new GridLayout(2, false));
        newCheckList = CheckboxTableViewer.newCheckList(tableAndButton, SWT.BORDER);
        newCheckList.setContentProvider(new ArrayContentProvider());
        newCheckList.setInput(LibraryManager.getInstance().getAllLibraries());
        Composite buttons = new Composite(tableAndButton, SWT.NONE);
        buttons.setLayout(new GridLayout(1, false));
        newCheckList.setComparator(new ViewerComparator());
        newCheckList.setLabelProvider(new LibraryLabelProvider(images));
        GridData layoutData = new GridData(GridData.FILL_BOTH);
        layoutData.minimumHeight = 400;
        newCheckList.getControl().setLayoutData(layoutData);
        body.addDisposeListener(new DisposeListener() {

            public void widgetDisposed(DisposeEvent e) {
                for (Image m : images.values()) {
                    m.dispose();
                }
            }

        });
        layoutData = new GridData();
        layoutData.heightHint = 400;
        body.setLayoutData(layoutData);
        for (IPHPLibrary l : LibraryManager.getInstance().getAllLibraries()) {
            newCheckList.setChecked(l, l.isTurnedOn());
        }

        buttons.setLayoutData(new GridData(GridData.FILL_VERTICAL));
        Button add = new Button(buttons, SWT.PUSH);
        add.setText(Messages.PHPLibrariesPreferencePage_newUserLibrary);
        add.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        add.addSelectionListener(new SelectionListener() {

            public void widgetDefaultSelected(SelectionEvent e) {

            }

            public void widgetSelected(SelectionEvent e) {
                PHPLibraryDialog libraryDialog = new PHPLibraryDialog(Display.getCurrent().getActiveShell(), null,
                        getContent());
                if (libraryDialog.open() == Dialog.OK) {
                    UserLibrary result = libraryDialog.getResult();
                    newCheckList.add(result);
                    newCheckList.setChecked(result, true);
                }
            }

        });
        final Button edit = new Button(buttons, SWT.PUSH);
        edit.addSelectionListener(new SelectionListener() {

            public void widgetDefaultSelected(SelectionEvent e) {
                // empty
            }

            public void widgetSelected(SelectionEvent e) {
                IStructuredSelection ss = (IStructuredSelection) newCheckList.getSelection();
                UserLibrary firstElement = (UserLibrary) ss.getFirstElement();
                PHPLibraryDialog libraryDialog = new PHPLibraryDialog(Display.getCurrent().getActiveShell(),
                        firstElement, getContent());
                if (libraryDialog.open() == Dialog.OK) {
                    newCheckList.remove(firstElement);
                    newCheckList.add(libraryDialog.getResult());
                }
            }

        });
        edit.setText(Messages.PHPLibrariesPreferencePage_editLibrary);
        edit.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        final Button remove = new Button(buttons, SWT.PUSH);
        remove.addSelectionListener(new SelectionListener() {

            public void widgetDefaultSelected(SelectionEvent e) {

            }

            public void widgetSelected(SelectionEvent e) {
                IStructuredSelection ss = (IStructuredSelection) newCheckList.getSelection();
                for (Object o : ss.toArray()) {
                    newCheckList.remove(o);
                }
            }

        });
        remove.setText(Messages.PHPLibrariesPreferencePage_removeLibrary);
        tableAndButton.setLayoutData(new GridData(GridData.FILL_BOTH));
        remove.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        newCheckList.addSelectionChangedListener(new ISelectionChangedListener() {

            public void selectionChanged(SelectionChangedEvent event) {
                IStructuredSelection ss = (IStructuredSelection) event.getSelection();
                if (ss.isEmpty() || ss.getFirstElement() instanceof PHPLibrary) {
                    edit.setEnabled(false);
                    remove.setEnabled(false);
                    return;
                }
                edit.setEnabled(true);
                remove.setEnabled(true);
            }

        });
        Button selectAll = new Button(buttons, SWT.PUSH);
        selectAll.setText(Messages.LibrariesPage_selectAll);
        selectAll.addSelectionListener(new SelectAction(true));
        Button deselectAll = new Button(buttons, SWT.PUSH);
        deselectAll.setText(Messages.LibrariesPage_deselectAll);
        selectAll.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        deselectAll.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        deselectAll.addSelectionListener(new SelectAction(false));
        edit.setEnabled(false);
        remove.setEnabled(false);
        return body;
    }

    IPHPLibrary[] getContent() {
        int count = newCheckList.getTable().getItemCount();
        List<IPHPLibrary> ul = new ArrayList<IPHPLibrary>();
        for (int a = 0; a < count; a++) {
            Object elementAt = newCheckList.getElementAt(a);
            ul.add((IPHPLibrary) elementAt);
        }
        return ul.toArray(new IPHPLibrary[ul.size()]);
    }

    @Override
    protected void performDefaults() {
        newCheckList.setAllChecked(true);
    }

    @Override
    public boolean performOk() {
        Set<IPHPLibrary> turnedOff = new HashSet<IPHPLibrary>();
        for (IPHPLibrary l : LibraryManager.getInstance().getAllLibraries()) {
            boolean checked = newCheckList.getChecked(l);
            if (!checked) {
                turnedOff.add(l);
            }
        }
        int count = newCheckList.getTable().getItemCount();
        ArrayList<UserLibrary> ul = new ArrayList<UserLibrary>();
        for (int a = 0; a < count; a++) {
            Object elementAt = newCheckList.getElementAt(a);
            if (elementAt instanceof UserLibrary) {
                ul.add((UserLibrary) elementAt);
            }
        }
        LibraryManager.getInstance().setUserLibraries(ul.toArray(new UserLibrary[ul.size()]));
        LibraryManager.getInstance().setTurnedOff(turnedOff);
        return true;
    }

    public void init(IWorkbench workbench) {

    }
}