melnorme.util.swt.jface.CheckboxTableViewerExt.java Source code

Java tutorial

Introduction

Here is the source code for melnorme.util.swt.jface.CheckboxTableViewerExt.java

Source

/*******************************************************************************
 * Copyright (c) 2014, 2014 Bruno Medeiros and other Contributors.
 * 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:
 *     Bruno Medeiros - initial API and implementation
 *******************************************************************************/
package melnorme.util.swt.jface;

import java.util.Iterator;
import java.util.List;

import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.viewers.IBaseLabelProvider;
import org.eclipse.jface.viewers.IContentProvider;
import org.eclipse.jface.viewers.IElementComparer;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Table;

/**
 * Extension to CheckboxTableViewer providing type-safe access to content elements.
 */
public class CheckboxTableViewerExt<ELEMENTS> extends CheckboxTableViewer {

    public CheckboxTableViewerExt(Table table) {
        super(table);
    }

    @Deprecated
    @Override
    public void setContentProvider(IContentProvider provider) {
        super.setContentProvider(provider);
    }

    @Deprecated
    @Override
    public void setLabelProvider(IBaseLabelProvider labelProvider) {
        super.setLabelProvider(labelProvider);
    }

    public void setContentProvider0(IStructuredContentProvider0<ELEMENTS> provider) {
        super.setContentProvider(provider);
    }

    public void setLabelProvider0(ITableLabelProvider0<ELEMENTS> labelProvider) {
        super.setLabelProvider(labelProvider);
    }

    @SuppressWarnings("unchecked")
    @Override
    public ITypedStructuredSelection<ELEMENTS> getSelection() {
        Control control = getControl();
        if (control == null || control.isDisposed()) {
            return (ITypedStructuredSelection<ELEMENTS>) TypedStructuredSelection.EMPTY;
        }
        List<?> list = getSelectionFromWidget();
        return new TypedStructuredSelection<ELEMENTS>(list, getComparer());
    }

    public Iterator<ELEMENTS> getSelectionIterator() {
        return getSelection().iterator();
    }

    public static interface ITypedStructuredSelection<ELEMENTS> extends IStructuredSelection, Iterable<ELEMENTS> {

        @Override
        public ELEMENTS getFirstElement();

        @Override
        public Iterator<ELEMENTS> iterator();

        @Override
        public List<ELEMENTS> toList();

        // Note: we don't change the type of array because we don't know the runtime component type
        @Override
        public Object[] toArray();

    }

    public static class TypedStructuredSelection<ELEMENTS> extends StructuredSelection
            implements ITypedStructuredSelection<ELEMENTS> {

        public static final TypedStructuredSelection<Object> EMPTY = new TypedStructuredSelection<Object>();

        public TypedStructuredSelection() {
            super();
        }

        public TypedStructuredSelection(List<?> elements, IElementComparer comparer) {
            super(elements, comparer);
        }

        public TypedStructuredSelection(List<?> elements) {
            super(elements);
        }

        public TypedStructuredSelection(Object element) {
            super(element);
        }

        public TypedStructuredSelection(Object[] elements) {
            super(elements);
        }

        @SuppressWarnings("unchecked")
        @Override
        public ELEMENTS getFirstElement() {
            return (ELEMENTS) super.getFirstElement();
        }

        @Override
        public Iterator<ELEMENTS> iterator() {
            return super.iterator();
        }

        @Override
        public List<ELEMENTS> toList() {
            return super.toList();
        }

        // Note: we don't change the type of array because we don't know the runtime component type
        @Override
        public Object[] toArray() {
            return super.toArray();
        }

    }

}