com.windowtester.swt.codegen.wizards.SetupHandlerTable.java Source code

Java tutorial

Introduction

Here is the source code for com.windowtester.swt.codegen.wizards.SetupHandlerTable.java

Source

/*******************************************************************************
 *  Copyright (c) 2012 Google, Inc.
 *  All rights reserved. This program and the accompanying materials
 *  are made available under the terms of the Eclipse Public License v1.0
 *  which accompanies this distribution, and is available at
 *  http://www.eclipse.org/legal/epl-v10.html
 *  
 *  Contributors:
 *  Google, Inc. - initial API and implementation
 *******************************************************************************/
package com.windowtester.swt.codegen.wizards;

import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableItem;

import com.windowtester.codegen.ExecutionProfile;
import com.windowtester.codegen.generator.SetupHandlerProvider;
import com.windowtester.codegen.generator.SetupHandlers;
import com.windowtester.codegen.generator.setup.ISetupHandler;
import com.windowtester.codegen.generator.setup.SetupHandlerSet;
import com.windowtester.runtime.swt.internal.display.DisplayExec;
import com.windowtester.runtime.swt.internal.display.RunnableWithResult;

/**
 * A Table for presenting setup handlers.
 */
public class SetupHandlerTable {

    private class HandlerLabelProvider extends LabelProvider implements ITableLabelProvider {

        /* (non-Javadoc)
         * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int)
         */
        public Image getColumnImage(Object element, int columnIndex) {
            return null;
        }

        /* (non-Javadoc)
         * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int)
         */
        public String getColumnText(Object obj, int index) {
            if (obj instanceof ISetupHandler)
                return getHandlerLabel((ISetupHandler) obj);
            return getText(obj);
        }

        private String getHandlerLabel(ISetupHandler handler) {
            return handler.getDescription();
        }
    }

    private CheckboxTableViewer viewer;
    private SetupHandlerTableStore store = SetupHandlerTableStore.forDefaultPreferences();
    private SetupHandlerProvider handlers = SetupHandlers.NONE;
    private final Composite parent;

    private SetupHandlerTable(Composite parent) {
        this.parent = parent;
    }

    public SetupHandlerTable build() {
        createViewer();
        setState();
        return this;
    }

    private void setState() {
        if (!store.isActivated())
            setDefaults();
        else
            restoreState();
    }

    private void restoreState() {
        SetupHandlerSet selected = store.findMatches(getAllHandlers());
        viewer.setCheckedElements(selected.toArray());
    }

    private void createViewer() {
        viewer = CheckboxTableViewer.newCheckList(parent, SWT.MULTI | SWT.BORDER | SWT.CHECK);
        Table table = viewer.getTable();
        //TODO: visible or not visible?
        //table.setLinesVisible(true);
        table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1));
        viewer.setContentProvider(new ArrayContentProvider());
        viewer.setLabelProvider(new HandlerLabelProvider());
        viewer.setInput(getHandlerInput());
    }

    //the handlers for setting up the viewer
    private Object[] getHandlerInput() {
        return handlers.getHandlers();
    }

    public static SetupHandlerTable forParent(Composite parent) {
        return new SetupHandlerTable(parent);
    }

    public SetupHandlerTable inContext(ExecutionProfile profile) {
        handlers = SetupHandlers.forContext(profile);
        return this;
    }

    public SetupHandlerTable withStore(SetupHandlerTableStore store) {
        this.store = store;
        return this;
    }

    private ISetupHandler[] getSelection() {
        return (ISetupHandler[]) DisplayExec.sync(new RunnableWithResult() {
            public Object runWithResult() {
                Object[] elements = viewer.getCheckedElements();
                ISetupHandler[] handlers = new ISetupHandler[elements.length];
                for (int i = 0; i < handlers.length; i++) {
                    handlers[i] = (ISetupHandler) elements[i];
                }
                return handlers;
            }
        });
    }

    public SetupHandlerSet getSelectedHandlers() {
        return SetupHandlerSet.forHandlers(getSelection());
    }

    public void setDefaults() {
        viewer.setCheckedElements(handlers.getDefaults());
    }

    public void persistSelections() {
        store.setSelectedHandlers(getSelection());
    }

    public ISetupHandler[] getAllHandlers() {
        return (ISetupHandler[]) DisplayExec.sync(new RunnableWithResult() {
            /* (non-Javadoc)
             * @see com.windowtester.runtime.swt.internal.display.RunnableWithResult#runWithResult()
             */
            public Object runWithResult() {
                TableItem[] items = getTable().getItems();
                ISetupHandler[] handlers = new ISetupHandler[items.length];
                for (int i = 0; i < items.length; i++) {
                    handlers[i] = (ISetupHandler) items[i].getData();
                }
                return handlers;
            }
        });
    }

    private Table getTable() {
        return viewer.getTable();
    }

}