Example usage for org.eclipse.jface.viewers CheckboxTableViewer CheckboxTableViewer

List of usage examples for org.eclipse.jface.viewers CheckboxTableViewer CheckboxTableViewer

Introduction

In this page you can find the example usage for org.eclipse.jface.viewers CheckboxTableViewer CheckboxTableViewer.

Prototype

public CheckboxTableViewer(Table table) 

Source Link

Document

Creates a table viewer on the given table control.

Usage

From source file:net.sf.eclipsefp.haskell.ui.internal.editors.cabal.forms.stanzas.TestSuiteDialog.java

License:Open Source License

@Override
protected Control createDialogArea(final Composite parent) {
    Composite composite = (Composite) super.createDialogArea(parent);

    Label lName = new Label(composite, SWT.WRAP);
    lName.setText(UITexts.cabalEditor_newTestSuiteString);

    final Text tName = new Text(composite, SWT.SINGLE | SWT.BORDER);
    tName.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));

    tName.addModifyListener(new ModifyListener() {
        @Override/*ww  w.j  a v  a 2 s  .  c o m*/
        public void modifyText(final ModifyEvent e) {
            def.name = tName.getText().trim();
            validateInput();
        }
    });

    Label lSrc = new Label(composite, SWT.WRAP);
    lSrc.setText(UITexts.cabalEditor_newTestSuite_src);

    Composite cSrc = new Composite(composite, SWT.NONE);
    GridLayout glSrc = new GridLayout(2, false);
    glSrc.marginLeft = 0;
    glSrc.marginRight = 0;
    cSrc.setLayout(glSrc);
    cSrc.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));
    final Text tSrc = new Text(cSrc, SWT.SINGLE | SWT.BORDER | SWT.READ_ONLY);
    tSrc.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));
    Button bSrc = new Button(cSrc, SWT.PUSH);
    bSrc.setText(UITexts.dots);
    bSrc.addSelectionListener(new SelectionAdapter() {
        /* (non-Javadoc)
         * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
         */
        @Override
        public void widgetSelected(final SelectionEvent e) {
            /*ContainerSelectionDialog csd=new ContainerSelectionDialog( getShell(), project, true, UITexts.source_folder_msg );
            csd.setTitle( UITexts.source_folder_title );
            if(Window.OK==csd.open()){
              src=(IPath)csd.getResult()[0];
              tSrc.setText(src.toPortableString());
            }*/
            FolderSelectionDialog fsd = new FolderSelectionDialog(getShell(), project, true);
            if (Window.OK == fsd.open()) {
                def.src = (IContainer) fsd.getFirstResult();
                tSrc.setText(def.src.getProjectRelativePath().toPortableString());
                validateInput();
            }
        }
    });

    final Button bOverwrite = new Button(composite, SWT.CHECK);
    bOverwrite.setText(UITexts.option_overwrite);
    bOverwrite.setSelection(true);
    bOverwrite.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(final SelectionEvent e) {
            overwrite = bOverwrite.getSelection();
        }
    });

    Label lMods = new Label(composite, SWT.WRAP);
    lMods.setText(UITexts.cabalEditor_newTestSuite_modules);

    Set<ModuleDef> modules = new HashSet<>();

    for (PackageDescriptionStanza stz : pkgDesc.getStanzas()) {
        if (CabalSyntax.SECTION_LIBRARY.equals(stz.getType())
                || CabalSyntax.SECTION_EXECUTABLE.equals(stz.getType())) {
            Collection<String> sourceDirs = new HashSet<>();
            if (stz.getProperties().containsKey(CabalSyntax.FIELD_HS_SOURCE_DIRS.getCabalName())) {
                //sourceDirs = root.getStanza().getProperties()
                //    .get( CabalSyntax.FIELD_HS_SOURCE_DIRS.getCabalName() );
                sourceDirs.addAll(stz.getSourceDirs());
            } else {
                sourceDirs.add("");
            }
            for (String s : sourceDirs) {
                List<String> thisModules = new ArrayList<>();
                ModulesVisitor visitor = new ModulesVisitor(thisModules, Collections.singletonList(s));
                try {
                    project.accept(visitor);
                } catch (CoreException e) {
                    HaskellUIPlugin.log(e);
                }
                for (String mod : thisModules) {
                    // check we're in library AND the module is exposed
                    boolean isLib = CabalSyntax.SECTION_LIBRARY.equals(stz.getType())
                            && ModuleInclusionType.EXPOSED.equals(stz.getModuleInclusionType(mod));

                    modules.add(new ModuleDef(mod, s, isLib));
                }
            }
        }
    }

    Table tMods = new Table(composite, SWT.V_SCROLL | SWT.BORDER | SWT.CHECK);
    CheckboxTableViewer tvMods = new CheckboxTableViewer(tMods);
    tMods.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL
            | GridData.GRAB_VERTICAL | GridData.VERTICAL_ALIGN_FILL));
    tvMods.setContentProvider(new ArrayContentProvider());
    tvMods.setComparator(new WorkbenchViewerComparator());
    tvMods.addCheckStateListener(new ICheckStateListener() {

        @Override
        public void checkStateChanged(final CheckStateChangedEvent arg0) {
            ModuleDef d = (ModuleDef) arg0.getElement();
            if (arg0.getChecked()) {
                def.modules.add(d);
            } else {
                def.modules.remove(d);
            }
        }
    });
    /*tvMods.getTable().setHeaderVisible( true );
    TableColumn exposedCol = new TableColumn( tvMods.getTable(), SWT.NULL );
    exposedCol.setText( UITexts.cabalEditor_newTestSuite_modules_col_test );
    exposedCol.pack();
    TableColumn otherCol = new TableColumn( tvMods.getTable(), SWT.NULL );
    otherCol.setText( UITexts.cabalEditor_newTestSuite_modules_col_mod );
    otherCol.pack();
     */

    tvMods.setInput(modules);

    validateInput();
    applyDialogFont(composite);
    return composite;
}

From source file:net.sf.eclipsefp.haskell.ui.internal.preferences.hsimpls.ImplementationsBlock.java

License:Open Source License

private void createViewer() {
    viewer = new CheckboxTableViewer(table);
    viewer.setLabelProvider(new HsImplementationsLP());
    viewer.setContentProvider(new HsImplementationsCP(installations));
    // by default, sort by name
    sortByName();/*from   w  ww  . j  a v a  2  s . c o m*/

    viewer.addSelectionChangedListener(new ISelectionChangedListener() {
        @Override
        public void selectionChanged(final SelectionChangedEvent evt) {
            enableButtons();
        }
    });

    viewer.addCheckStateListener(new ICheckStateListener() {
        @Override
        public void checkStateChanged(final CheckStateChangedEvent event) {
            if (event.getChecked()) {
                IHsImplementation element = (IHsImplementation) event.getElement();
                setCheckedHsImplementation(element.getName());
            } else {
                setCheckedHsImplementation(null);
            }
        }
    });

    viewer.addDoubleClickListener(new IDoubleClickListener() {
        @Override
        public void doubleClick(final DoubleClickEvent e) {
            if (!viewer.getSelection().isEmpty()) {
                editHsImplementation();
            }
        }
    });
}

From source file:net.sf.eclipsensis.dialogs.NSISOutlineFilterDialog.java

License:Open Source License

@Override
protected Control createControl(Composite parent) {
    Composite composite = new Composite(parent, SWT.NONE);
    GridLayout layout = new GridLayout(1, false);
    layout.marginWidth = layout.marginHeight = 0;
    composite.setLayout(layout);//from ww w  . j a  va  2 s .  co  m

    Label l = new Label(composite, SWT.NONE);
    l.setText(EclipseNSISPlugin.getResourceString("filter.dialog.caption")); //$NON-NLS-1$
    l.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));

    Composite buttons = new Composite(parent, SWT.NONE);
    layout = new GridLayout(2, true);
    layout.marginWidth = layout.marginHeight = 0;
    buttons.setLayout(layout);
    buttons.setLayoutData(new GridData(SWT.LEFT, SWT.FILL, false, false));

    final Table table = new Table(composite,
            SWT.CHECK | SWT.BORDER | SWT.SINGLE | SWT.FULL_SELECTION | SWT.V_SCROLL);
    table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
    table.addListener(SWT.EraseItem, new Listener() {
        public void handleEvent(Event event) {
            event.detail &= ~SWT.SELECTED;
        }
    });

    mViewer = new CheckboxTableViewer(table);
    mViewer.setContentProvider(new CollectionContentProvider());
    mViewer.setLabelProvider(new CollectionLabelProvider() {
        @Override
        public Image getColumnImage(Object element, int columnIndex) {
            if (element instanceof String && columnIndex == 0) {
                Type type = mResources.getType((String) element);
                if (type != null) {
                    return type.getImage();
                }
            }
            return super.getColumnImage(element, columnIndex);
        }

        @Override
        public String getColumnText(Object element, int columnIndex) {
            if (element instanceof String && columnIndex == 0) {
                Type type = mResources.getType((String) element);
                if (type != null) {
                    return type.getName();
                }
            }
            return super.getColumnText(element, columnIndex);
        }
    });
    mViewer.setComparator(new ViewerComparator());
    final List<Type> types = new ArrayList<Type>(mResources.getTypes());
    for (Iterator<Type> iter = types.iterator(); iter.hasNext();) {
        Type type = iter.next();
        if (type.isClosing()) {
            iter.remove();
            continue;
        }
        if (!type.isPseudo()) {
            String keyword = NSISKeywords.getInstance().getKeyword(type.getType());
            if (!NSISKeywords.getInstance().isValidKeyword(keyword)) {
                iter.remove();
            }
        }
    }
    mViewer.setInput(types);
    mViewer.setCheckedElements(mFilteredTypes.toArray());
    mViewer.addCheckStateListener(new ICheckStateListener() {
        public void checkStateChanged(CheckStateChangedEvent event) {
            Type type = (Type) event.getElement();
            if (event.getChecked()) {
                mFilteredTypes.add(type);
            } else {
                mFilteredTypes.remove(type);
            }
        }
    });

    Button b = new Button(buttons, SWT.PUSH);
    b.setText(EclipseNSISPlugin.getResourceString("filter.dialog.select.all.label")); //$NON-NLS-1$
    b.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));
    b.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            mFilteredTypes.clear();
            mFilteredTypes.addAll(mResources.getTypes());
            mViewer.setAllChecked(true);
        }
    });

    b = new Button(buttons, SWT.PUSH);
    b.setText(EclipseNSISPlugin.getResourceString("filter.dialog.deselect.all.label")); //$NON-NLS-1$
    b.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));
    b.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            mFilteredTypes.clear();
            mViewer.setAllChecked(false);
        }
    });

    return composite;
}

From source file:net.sf.eclipsensis.dialogs.NSISTaskTagsPreferencePage.java

License:Open Source License

@Override
protected Control createContents(Composite parent) {
    Composite composite = new Composite(parent, SWT.NONE);
    composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
    GridLayout layout = new GridLayout(2, false);
    layout.marginHeight = 0;//from  ww w .j a v  a  2  s  . co  m
    layout.marginWidth = 0;
    composite.setLayout(layout);
    Table table = new Table(composite, SWT.CHECK | SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION | SWT.V_SCROLL);
    GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
    data.widthHint = convertWidthInCharsToPixels(65);
    data.heightHint = convertHeightInCharsToPixels(10);
    table.setLayoutData(data);

    table.setHeaderVisible(true);
    table.setLinesVisible(true);

    TableColumn[] columns = new TableColumn[2];
    columns[0] = new TableColumn(table, SWT.NONE);
    columns[0].setText(EclipseNSISPlugin.getResourceString("task.tag.label")); //$NON-NLS-1$

    columns[1] = new TableColumn(table, SWT.NONE);
    columns[1].setText(EclipseNSISPlugin.getResourceString("task.tag.priority.label")); //$NON-NLS-1$
    mTableViewer = new CheckboxTableViewer(table);
    mTableViewer.setLabelProvider(new TaskTagLabelProvider());
    mTableViewer.setContentProvider(new CollectionContentProvider());

    Collator collator = Collator.getInstance();
    collator.setStrength(Collator.PRIMARY);
    mTableViewer.setSorter(new ViewerSorter(collator));

    mTableViewer.addDoubleClickListener(new IDoubleClickListener() {
        public void doubleClick(DoubleClickEvent e) {
            edit();
        }
    });

    mTableViewer.addCheckStateListener(new ICheckStateListener() {
        @SuppressWarnings("unchecked")
        public void checkStateChanged(CheckStateChangedEvent event) {
            NSISTaskTag taskTag = (NSISTaskTag) event.getElement();
            boolean checked = event.getChecked();
            if (checked) {
                Collection<NSISTaskTag> taskTags = (Collection<NSISTaskTag>) mTableViewer.getInput();
                for (Iterator<NSISTaskTag> iter = taskTags.iterator(); iter.hasNext();) {
                    NSISTaskTag t = iter.next();
                    if (!t.equals(taskTag) && t.isDefault()) {
                        t.setDefault(false);
                        mTableViewer.setChecked(t, false);
                        mTableViewer.refresh(t, true);
                        break;
                    }
                }
            }
            taskTag.setDefault(checked);
            mTableViewer.setChecked(taskTag, checked);
            mTableViewer.refresh(taskTag, true);
            updateButtons();
        }
    });

    mTableViewer.addSelectionChangedListener(new ISelectionChangedListener() {
        public void selectionChanged(SelectionChangedEvent e) {
            updateButtons();
        }
    });

    Composite buttons = new Composite(composite, SWT.NONE);
    buttons.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false));
    layout = new GridLayout();
    layout.marginHeight = 0;
    layout.marginWidth = 0;
    buttons.setLayout(layout);

    Button addButton = new Button(buttons, SWT.PUSH);
    addButton.setImage(CommonImages.ADD_ICON);
    addButton.setToolTipText(EclipseNSISPlugin.getResourceString("new.tooltip")); //$NON-NLS-1$
    addButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
    addButton.addListener(SWT.Selection, new Listener() {
        public void handleEvent(Event e) {
            add();
        }
    });

    mEditButton = new Button(buttons, SWT.PUSH);
    mEditButton.setImage(CommonImages.EDIT_ICON);
    mEditButton.setToolTipText(EclipseNSISPlugin.getResourceString("edit.tooltip")); //$NON-NLS-1$
    mEditButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
    mEditButton.addListener(SWT.Selection, new Listener() {
        public void handleEvent(Event e) {
            edit();
        }
    });

    mRemoveButton = new Button(buttons, SWT.PUSH);
    mRemoveButton.setImage(CommonImages.DELETE_ICON);
    mRemoveButton.setToolTipText(EclipseNSISPlugin.getResourceString("remove.tooltip")); //$NON-NLS-1$
    mRemoveButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
    mRemoveButton.addListener(SWT.Selection, new Listener() {
        public void handleEvent(Event e) {
            remove();
        }
    });

    mCaseSensitiveButton = new Button(composite, SWT.CHECK);
    mCaseSensitiveButton.setText(EclipseNSISPlugin.getResourceString("task.tags.case.sensitive.label")); //$NON-NLS-1$
    mCaseSensitiveButton.setSelection(NSISPreferences.getInstance().isCaseSensitiveTaskTags());
    data = new GridData(SWT.FILL, SWT.CENTER, true, false);
    data.horizontalSpan = 2;

    Dialog.applyDialogFont(composite);
    FontData[] fd = table.getFont().getFontData();
    for (int i = 0; i < fd.length; i++) {
        fd[i].setStyle(fd[i].getStyle() | SWT.BOLD);
    }
    mBoldFont = new Font(getShell().getDisplay(), fd);

    mOriginalTags = NSISPreferences.getInstance().getTaskTags();
    Collection<NSISTaskTag> taskTags = NSISPreferences.getInstance().getTaskTags();
    mTableViewer.setInput(NSISPreferences.getInstance().getTaskTags());
    mTableViewer.setAllChecked(false);
    for (Iterator<NSISTaskTag> iter = taskTags.iterator(); iter.hasNext();) {
        NSISTaskTag t = iter.next();
        if (t.isDefault()) {
            mTableViewer.setChecked(t, true);
            break;
        }
    }

    updateButtons();
    table.addControlListener(new TableResizer());

    return composite;
}

From source file:net.sf.eclipsensis.installoptions.dialogs.InstallOptionsPreferencePage.java

License:Open Source License

/**
 * @param composite//from   w  w w  .j  a va  2  s  .  c o m
 */
private Control createDialogSizesGroup(final Composite composite) {
    final Group group = new Group(composite, SWT.SHADOW_ETCHED_IN);
    GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
    gridData.widthHint = convertWidthInCharsToPixels(60);
    group.setLayoutData(gridData);
    GridLayout layout = new GridLayout(2, false);
    group.setLayout(layout);
    group.setText(InstallOptionsPlugin.getResourceString("dialog.sizes.group.name")); //$NON-NLS-1$

    Table table = new Table(group, SWT.CHECK | SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION);
    gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
    table.setLayoutData(gridData);
    FontData[] fd = table.getFont().getFontData();
    for (int i = 0; i < fd.length; i++) {
        fd[i].setStyle(fd[i].getStyle() | SWT.BOLD);
    }
    final Font boldFont = new Font(table.getShell().getDisplay(), fd);
    table.addDisposeListener(new DisposeListener() {
        public void widgetDisposed(DisposeEvent e) {
            boldFont.dispose();
        }
    });

    table.setHeaderVisible(true);
    table.setLinesVisible(true);

    final TableColumn[] columns = new TableColumn[3];
    columns[0] = new TableColumn(table, SWT.NONE);
    columns[0].setText(InstallOptionsPlugin.getResourceString("dialog.size.name.label")); //$NON-NLS-1$

    columns[1] = new TableColumn(table, SWT.NONE);
    columns[1].setText(InstallOptionsPlugin.getResourceString("dialog.size.width.label")); //$NON-NLS-1$

    columns[2] = new TableColumn(table, SWT.NONE);
    columns[2].setText(InstallOptionsPlugin.getResourceString("dialog.size.height.label")); //$NON-NLS-1$

    mDialogSizeViewer = new CheckboxTableViewer(table);
    DialogSizeLabelProvider provider = new DialogSizeLabelProvider();
    provider.setDefaultFont(boldFont);
    mDialogSizeViewer.setLabelProvider(provider);
    mDialogSizeViewer.setContentProvider(new CollectionContentProvider());
    mDialogSizeViewer.addDoubleClickListener(new IDoubleClickListener() {
        public void doubleClick(DoubleClickEvent e) {
            editDialogSize();
        }
    });

    final Composite buttons = new Composite(group, SWT.NONE);
    buttons.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false));
    layout = new GridLayout();
    layout.marginHeight = 0;
    layout.marginWidth = 0;
    buttons.setLayout(layout);

    createButton(buttons, CommonImages.ADD_ICON, "new.tooltip", //$NON-NLS-1$
            new Listener() {
                public void handleEvent(Event e) {
                    new DialogSizeDialog(getShell(), null).open();
                }
            });

    mEditDialogSize = createButton(buttons, CommonImages.EDIT_ICON, "edit.tooltip", //$NON-NLS-1$
            new Listener() {
                public void handleEvent(Event e) {
                    editDialogSize();
                }
            });

    mRemoveDialogSize = createButton(buttons, CommonImages.DELETE_ICON, "remove.tooltip", //$NON-NLS-1$
            new Listener() {
                @SuppressWarnings("unchecked")
                public void handleEvent(Event e) {
                    IStructuredSelection selection = (IStructuredSelection) mDialogSizeViewer.getSelection();
                    if (!selection.isEmpty()) {
                        Collection<DialogSize> coll = (Collection<DialogSize>) mDialogSizeViewer.getInput();
                        for (Iterator<?> iter = selection.toList().iterator(); iter.hasNext();) {
                            DialogSize ds = (DialogSize) iter.next();
                            coll.remove(ds);
                            if (mDefaultDialogSize.equals(ds)) {
                                mDefaultDialogSize = null;
                            }
                        }
                        if (mDefaultDialogSize == null && coll.size() > 0) {
                            mDefaultDialogSize = coll.iterator().next();
                            mDefaultDialogSize.setDefault(true);
                        }
                        mDialogSizeViewer.refresh();
                        mDialogSizeViewer.setAllChecked(false);
                        mDialogSizeViewer.setChecked(mDefaultDialogSize, true);
                    }
                }
            });

    mDialogSizeViewer.addCheckStateListener(new ICheckStateListener() {
        @SuppressWarnings("unchecked")
        public void checkStateChanged(CheckStateChangedEvent event) {
            DialogSize dialogSize = (DialogSize) event.getElement();
            boolean checked = event.getChecked();
            Collection<DialogSize> dialogSizes = (Collection<DialogSize>) mDialogSizeViewer.getInput();
            if (dialogSizes.size() == 1) {
                checked = true;
            } else {
                for (Iterator<DialogSize> iter = dialogSizes.iterator(); iter.hasNext();) {
                    DialogSize ds = iter.next();
                    if (!ds.equals(dialogSize) && ds.isDefault() == checked) {
                        ds.setDefault(!checked);
                        mDialogSizeViewer.setChecked(ds, !checked);
                        mDialogSizeViewer.refresh(ds, true);
                        break;
                    }
                }
            }
            dialogSize.setDefault(checked);
            mDialogSizeViewer.setChecked(dialogSize, checked);
            mDialogSizeViewer.refresh(dialogSize, true);
            updateButtons();
        }
    });

    mDialogSizeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
        public void selectionChanged(SelectionChangedEvent e) {
            updateButtons();
        }
    });

    Label l = new Label(group, SWT.WRAP);
    gridData = new GridData(SWT.FILL, SWT.CENTER, true, false);
    gridData.horizontalSpan = 2;
    l.setLayoutData(gridData);
    l.setText(InstallOptionsPlugin.getResourceString("dialog.size.group.footer")); //$NON-NLS-1$

    updateDialogSizeViewerInput();
    table.addControlListener(new TableResizer(new double[] { 2, 1, 1 }));

    return group;
}

From source file:net.sf.eclipsensis.installoptions.properties.tabbed.section.GeneralPropertySection.java

License:Open Source License

private Control createFlagsSection(final InstallOptionsWidget widget, Composite parent,
        final InstallOptionsCommandHelper commandHelper) {
    final String displayName = widget.getPropertyDescriptor(InstallOptionsModel.PROPERTY_FLAGS)
            .getDisplayName();/*from ww  w. jav a 2 s.com*/

    TabbedPropertySheetWidgetFactory factory = getWidgetFactory();
    Composite group = factory.createGroup(parent, displayName);
    GridLayout layout = new GridLayout(2, true);
    group.setLayout(layout);

    final boolean[] nonUserChange = { false };

    final Table table = factory.createTable(group, SWT.FLAT | SWT.CHECK | SWT.SINGLE | SWT.HIDE_SELECTION);
    GC gc = new GC(table);
    gc.setFont(JFaceResources.getDialogFont());
    FontMetrics fontMetrics = gc.getFontMetrics();
    gc.dispose();
    GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
    data.horizontalSpan = 2;
    data.widthHint = fontMetrics.getAverageCharWidth() * 30;
    data.heightHint = fontMetrics.getHeight() * 10;
    table.setLayoutData(data);

    final CheckboxTableViewer viewer = new CheckboxTableViewer(table);
    viewer.setContentProvider(new CollectionContentProvider());
    viewer.setLabelProvider(new LabelProvider());
    viewer.setComparer(new IElementComparer() {
        public boolean equals(Object a, Object b) {
            return Common.objectsAreEqual(a, b);
        }

        public int hashCode(Object element) {
            if (element != null) {
                return element.hashCode();
            }
            return 0;
        }
    });
    table.addListener(SWT.EraseItem, new Listener() {
        public void handleEvent(Event event) {
            event.detail &= ~(SWT.SELECTED | SWT.FOCUSED);
        }
    });
    final List<String> flags = new ArrayList<String>(widget.getFlags());
    final Collection<String> availableFlags = widget.getTypeDef().getFlags();
    final IPropertyDescriptor descriptor = widget.getPropertyDescriptor(InstallOptionsModel.PROPERTY_FLAGS);
    final ICellEditorValidator validator = PropertyDescriptorHelper
            .getCellEditorValidator((PropertyDescriptor) descriptor);
    final Runnable runnable = new Runnable() {
        public void run() {
            nonUserChange[0] = true;
            try {
                if (validator != null) {
                    String error = validator.isValid(flags);
                    if (error != null) {
                        Common.openError(table.getShell(), error, InstallOptionsPlugin.getShellImage());
                        viewer.setCheckedElements(widget.getFlags().toArray());
                        return;
                    }
                }
                commandHelper.propertyChanged(InstallOptionsModel.PROPERTY_FLAGS, descriptor.getDisplayName(),
                        widget, flags);
            } finally {
                nonUserChange[0] = false;
            }
        }
    };
    viewer.addCheckStateListener(new ICheckStateListener() {
        public void checkStateChanged(CheckStateChangedEvent event) {
            String flag = (String) event.getElement();
            boolean checked = event.getChecked();
            if (checked) {
                flags.add(flag);
            } else {
                flags.remove(flag);
            }
            runnable.run();
        }
    });
    viewer.addSelectionChangedListener(new ISelectionChangedListener() {
        public void selectionChanged(SelectionChangedEvent event) {
            if (!event.getSelection().isEmpty()) {
                String flag = (String) ((IStructuredSelection) event.getSelection()).getFirstElement();
                viewer.setSelection(StructuredSelection.EMPTY);
                boolean checked = viewer.getChecked(flag);
                viewer.setChecked(flag, !checked);
                if (!checked) {
                    flags.add(flag);
                } else {
                    flags.remove(flag);
                }
                runnable.run();
            }
        }
    });

    Button b = factory.createButton(group, InstallOptionsPlugin.getResourceString("select.all.label"), //$NON-NLS-1$
            SWT.PUSH | SWT.FLAT);
    b.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            flags.clear();
            flags.addAll(availableFlags);
            viewer.setCheckedElements(availableFlags.toArray());
            runnable.run();
        }
    });
    b.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
    b = factory.createButton(group, InstallOptionsPlugin.getResourceString("deselect.all.label"), //$NON-NLS-1$
            SWT.PUSH | SWT.FLAT);
    b.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            flags.clear();
            viewer.setCheckedElements(Common.EMPTY_STRING_ARRAY);
            runnable.run();
        }
    });
    b.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));

    viewer.setInput(availableFlags == null ? Collections.EMPTY_LIST : availableFlags);
    viewer.setCheckedElements(flags.toArray());
    final PropertyChangeListener listener = new PropertyChangeListener() {
        public void propertyChange(PropertyChangeEvent evt) {
            if (evt.getPropertyName().equals(InstallOptionsModel.PROPERTY_FLAGS)) {
                if (!nonUserChange[0]) {
                    List<String> newFlags = widget.getFlags();
                    if (Common.isValid(viewer.getControl())) {
                        viewer.setCheckedElements(
                                newFlags == null ? Common.EMPTY_STRING_ARRAY : newFlags.toArray());
                        flags.clear();
                        flags.addAll(newFlags);
                    }
                }
            }
        }
    };
    widget.addPropertyChangeListener(listener);
    group.addDisposeListener(new DisposeListener() {
        public void widgetDisposed(DisposeEvent e) {
            widget.removePropertyChangeListener(listener);
        }
    });
    return group;
}

From source file:net.sf.eclipsensis.installoptions.properties.tabbed.section.ListItemsPropertySectionCreator.java

License:Open Source License

protected CheckboxTableViewer createListItemsAndStateSection(Composite parent,
        TabbedPropertySheetWidgetFactory widgetFactory, final InstallOptionsCommandHelper commandHelper) {
    final IPropertyDescriptor listItemsDescriptor = getWidget()
            .getPropertyDescriptor(InstallOptionsModel.PROPERTY_LISTITEMS);
    final IPropertyDescriptor stateDescriptor = getWidget()
            .getPropertyDescriptor(InstallOptionsModel.PROPERTY_STATE);
    if (listItemsDescriptor != null && stateDescriptor != null) {
        final boolean[] nonUserChange = { false };

        Composite parent2 = widgetFactory.createGroup(parent, listItemsDescriptor.getDisplayName());
        GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
        data.horizontalSpan = 2;//w w w . ja v a 2  s .  co  m
        parent2.setLayoutData(data);
        GridLayout gridLayout = new GridLayout(2, false);
        gridLayout.verticalSpacing = 0;
        gridLayout.marginHeight = 0;
        gridLayout.marginTop = 2;
        parent2.setLayout(gridLayout);

        final Table table = widgetFactory.createTable(parent2, SWT.FLAT | SWT.CHECK | SWT.MULTI);
        GC gc = new GC(table);
        gc.setFont(JFaceResources.getDialogFont());
        FontMetrics fontMetrics = gc.getFontMetrics();
        gc.dispose();
        data = new GridData(SWT.FILL, SWT.FILL, true, true);
        data.widthHint = fontMetrics.getAverageCharWidth() * 30;
        data.heightHint = fontMetrics.getHeight() * 5;
        table.setLayoutData(data);

        final CheckboxTableViewer viewer = new CheckboxTableViewer(table);
        viewer.setContentProvider(new CollectionContentProvider());
        viewer.setLabelProvider(new LabelProvider());
        viewer.setComparer(new IElementComparer() {
            public boolean equals(Object a, Object b) {
                if (a instanceof String && b instanceof String) {
                    return Common.stringsAreEqual((String) a, (String) b, true);
                }
                return Common.objectsAreEqual(a, b);
            }

            public int hashCode(Object element) {
                Object element2 = element;
                if (element2 != null) {
                    if (element2 instanceof String) {
                        element2 = ((String) element2).toLowerCase();
                    }
                    return element2.hashCode();
                }
                return 0;
            }

        });
        final InstallOptionsListItems widget = (InstallOptionsListItems) getWidget();
        final List<String> listItems = new ArrayList<String>(widget.getListItems());
        String[] state = Common.tokenize(widget.getState(), IInstallOptionsConstants.LIST_SEPARATOR);
        final ICellEditorValidator stateValidator = PropertyDescriptorHelper
                .getCellEditorValidator((PropertyDescriptor) stateDescriptor);
        viewer.addCheckStateListener(new ICheckStateListener() {
            public void checkStateChanged(CheckStateChangedEvent event) {
                if (!nonUserChange[0]) {
                    boolean checked = event.getChecked();
                    String oldState = getWidget().getStringPropertyValue(InstallOptionsModel.PROPERTY_STATE);
                    String newState;
                    if (checked && !((InstallOptionsListItems) getWidget()).isMultiSelect()) {
                        String element = (String) event.getElement();
                        viewer.setCheckedElements(new String[] { element });
                        newState = element;
                    } else {
                        newState = Common.flatten(viewer.getCheckedElements(),
                                IInstallOptionsConstants.LIST_SEPARATOR);
                    }
                    if (!Common.stringsAreEqual(oldState, newState, true)) {
                        String error = stateValidator.isValid(newState);
                        if (Common.isEmpty(error)) {
                            commandHelper.propertyChanged(InstallOptionsModel.PROPERTY_STATE,
                                    stateDescriptor.getDisplayName(), getWidget(), newState);
                        } else {
                            Common.openError(viewer.getTable().getShell(), error,
                                    InstallOptionsPlugin.getShellImage());
                            viewer.setCheckedElements(
                                    Common.tokenize(oldState, IInstallOptionsConstants.LIST_SEPARATOR));
                        }
                    }
                }
            }
        });

        viewer.setInput(listItems);
        viewer.setCheckedElements(state);
        final PropertyChangeListener listener = new PropertyChangeListener() {
            @SuppressWarnings("unchecked")
            public void propertyChange(PropertyChangeEvent evt) {
                nonUserChange[0] = true;
                try {
                    if (evt.getPropertyName().equals(InstallOptionsModel.PROPERTY_LISTITEMS)) {
                        List<String> list = (List<String>) evt.getNewValue();
                        if (Common.isValid(viewer.getControl())) {
                            List<String> oldInput = (List<String>) viewer.getInput();
                            if (!Common.objectsAreEqual(list, oldInput)) {
                                viewer.setInput(new ArrayList<String>(list));
                                String state = ((InstallOptionsListItems) getWidget()).getState();
                                viewer.setCheckedElements(
                                        Common.tokenize(state, IInstallOptionsConstants.LIST_SEPARATOR));
                            }
                        }
                    } else if (evt.getPropertyName().equals(InstallOptionsModel.PROPERTY_STATE)) {
                        String state = (String) evt.getNewValue();
                        if (Common.isValid(viewer.getControl())) {
                            viewer.setCheckedElements(
                                    Common.tokenize(state, IInstallOptionsConstants.LIST_SEPARATOR));
                        }
                    }
                } finally {
                    nonUserChange[0] = false;
                }
            }
        };
        widget.addPropertyChangeListener(listener);
        table.addDisposeListener(new DisposeListener() {
            public void widgetDisposed(DisposeEvent e) {
                widget.removePropertyChangeListener(listener);
            }
        });

        Composite buttons = widgetFactory.createComposite(parent2);
        buttons.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, true));
        GridLayout layout = new GridLayout(2, true);
        layout.marginHeight = layout.marginWidth = 0;
        buttons.setLayout(layout);
        createListAndStateButtons(buttons, viewer, widgetFactory, commandHelper);

        CLabel l = widgetFactory.createCLabel(parent2,
                InstallOptionsPlugin.getResourceString("listitems.state.checked.items.message"), SWT.FLAT); //$NON-NLS-1$
        FontData[] fd = l.getFont().getFontData();
        for (int i = 0; i < fd.length; i++) {
            fd[i].setStyle(fd[i].getStyle() | SWT.BOLD);
            fd[i].setHeight((int) (fd[i].getHeight() * 0.9));
        }
        final Font f = new Font(l.getDisplay(), fd);
        l.setFont(f);
        l.addDisposeListener(new DisposeListener() {
            public void widgetDisposed(DisposeEvent e) {
                f.dispose();
            }
        });
        data = new GridData(SWT.FILL, SWT.FILL, true, false);
        data.horizontalSpan = 2;
        l.setLayoutData(data);

        return viewer;
    }
    return null;
}

From source file:net.sf.eclipsensis.template.AbstractTemplateSettings.java

License:Open Source License

protected void createContents() {
    GC gc = new GC(this);
    Font old = gc.getFont();// w  ww .  ja  v a  2 s.com
    gc.setFont(JFaceResources.getDialogFont());
    FontMetrics fontMetrics = gc.getFontMetrics();
    gc.setFont(old);
    gc.dispose();

    GridLayout layout = new GridLayout();
    layout.numColumns = 2;
    layout.marginHeight = 0;
    layout.marginWidth = 0;
    this.setLayout(layout);

    Composite innerParent = new Composite(this, SWT.NONE);
    GridLayout innerLayout = new GridLayout();
    innerLayout.numColumns = 2;
    innerLayout.marginHeight = 0;
    innerLayout.marginWidth = 0;
    innerParent.setLayout(innerLayout);
    GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
    gd.horizontalSpan = 2;
    innerParent.setLayoutData(gd);

    final Table table = new Table(innerParent,
            SWT.CHECK | SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION | SWT.V_SCROLL);

    GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
    data.widthHint = fontMetrics.getAverageCharWidth() * 3;
    data.heightHint = fontMetrics.getHeight() * 10;
    table.setLayoutData(data);

    table.setHeaderVisible(true);
    table.setLinesVisible(true);

    TableColumn[] columns = { new TableColumn(table, SWT.NONE) };
    columns[0].setText(EclipseNSISPlugin.getResourceString("template.settings.name.label")); //$NON-NLS-1$

    mTableViewer = new CheckboxTableViewer(table);
    mTableViewer.setLabelProvider(new CollectionLabelProvider());
    mTableViewer.setContentProvider(new EmptyContentProvider() {
        /* (non-Javadoc)
         * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
         */
        @Override
        public Object[] getElements(Object inputElement) {
            if (inputElement != null && inputElement.equals(mTemplateManager)) {
                return mTemplateManager.getTemplates().toArray();
            }
            return super.getElements(inputElement);
        }
    });

    Collator collator = Collator.getInstance();
    collator.setStrength(Collator.PRIMARY);
    mTableViewer.setSorter(new ViewerSorter(collator));

    ViewerFilter filter = new ViewerFilter() {
        @Override
        @SuppressWarnings("unchecked")
        public boolean select(Viewer viewer, Object parentElement, Object element) {
            if (element != null && mTemplateManager.getTemplateClass().isAssignableFrom(element.getClass())) {
                T template = (T) element;
                return template.isAvailable() && !template.isDeleted();
            }
            return true;
        }
    };
    mTableViewer.addFilter(filter);

    final INSISHomeListener nsisHomeListener = new INSISHomeListener() {
        public void nsisHomeChanged(IProgressMonitor monitor, NSISHome oldHome, NSISHome newHome) {
            Display.getDefault().asyncExec(new Runnable() {
                public void run() {
                    mTableViewer.refresh();
                    mTableViewer.setCheckedElements(getEnabledTemplates());
                }
            });
        }
    };
    NSISPreferences.getInstance().addListener(nsisHomeListener);
    table.addDisposeListener(new DisposeListener() {
        public void widgetDisposed(DisposeEvent e) {
            NSISPreferences.getInstance().removeListener(nsisHomeListener);
        }
    });

    mTableViewer.addDoubleClickListener(new IDoubleClickListener() {
        public void doubleClick(DoubleClickEvent e) {
            edit();
        }
    });

    mTableViewer.addSelectionChangedListener(new ISelectionChangedListener() {
        public void selectionChanged(SelectionChangedEvent e) {
            doSelectionChanged();
        }
    });

    mTableViewer.addCheckStateListener(new ICheckStateListener() {
        @SuppressWarnings("unchecked")
        public void checkStateChanged(CheckStateChangedEvent event) {
            T oldTemplate = (T) event.getElement();
            T newTemplate = (T) oldTemplate.clone();
            newTemplate.setEnabled(!oldTemplate.isEnabled());
            getTemplateManager().updateTemplate(oldTemplate, newTemplate);
            mTableViewer.refresh(true);
            mTableViewer.setSelection(new StructuredSelection(newTemplate));
            mTableViewer.setChecked(newTemplate, newTemplate.isEnabled());
            doSelectionChanged();
        }
    });

    Composite buttons = new Composite(innerParent, SWT.NONE);
    buttons.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false));
    layout = new GridLayout();
    layout.marginHeight = 0;
    layout.marginWidth = 0;
    buttons.setLayout(layout);

    createButtons(buttons);

    Label label = new Label(this, SWT.NONE);
    label.setText(EclipseNSISPlugin.getResourceString("template.settings.description.label")); //$NON-NLS-1$
    data = new GridData();
    data.horizontalSpan = 2;
    label.setLayoutData(data);

    mDescriptionText = new StyledText(this, SWT.BORDER | SWT.MULTI | SWT.READ_ONLY | SWT.WRAP);
    mDescriptionText.setBackground(getShell().getDisplay().getSystemColor(SWT.COLOR_LIST_BACKGROUND));
    mDescriptionText.setCursor(null);
    mDescriptionText.setCaret(null);
    data = new GridData(SWT.FILL, SWT.FILL, true, true);
    data.horizontalSpan = 2;
    data.heightHint = fontMetrics.getHeight() * 5;
    mDescriptionText.setLayoutData(data);

    mTableViewer.setInput(mTemplateManager);
    mTableViewer.setCheckedElements(getEnabledTemplates());

    updateButtons();
    table.addControlListener(new TableResizer());

    Dialog.applyDialogFont(this);
}

From source file:net.sourceforge.docfetcher.view.ParserGroup.java

License:Open Source License

public ParserGroup(Composite parent) {
    super(parent);
    group.setText(Msg.filetype_group_label.value());
    group.setLayout(FillLayoutFactory.getInst().margin(Const.GROUP_MARGIN).create());
    Table table = new Table(group, SWT.CHECK | SWT.MULTI | SWT.BORDER);
    viewer = new CheckboxTableViewer(table);

    table.addKeyListener(new ParserGroupNavigator());

    // Remove selection when viewer loses focus
    viewer.getTable().addFocusListener(new FocusAdapter() {
        public void focusLost(FocusEvent e) {
            ((Table) e.widget).deselectAll();
        }// w  w  w .  j a v a  2s  . c o  m
    });

    viewer.setContentProvider(new TableContentProviderAdapter() {
        public Object[] getElements(Object inputElement) {
            return (Object[]) inputElement;
        }
    });

    viewer.setLabelProvider(new TableLabelProviderAdapter() {
        public String getColumnText(Object element, int columnIndex) {
            return ((Parser) element).getFileType();
        }
    });

    viewer.setSorter(new ViewerSorter() {
        public int compare(Viewer viewer, Object e1, Object e2) {
            return ((Parser) e1).compareTo((Parser) e2);
        }
    });

    // Update parser check states on changes
    viewer.addCheckStateListener(new ICheckStateListener() {
        public void checkStateChanged(CheckStateChangedEvent event) {
            Parser parser = (Parser) event.getElement();
            boolean oldState = parser.isChecked();
            boolean newState = event.getChecked();
            if (oldState != newState) // Avoid MVC circularity
                parser.setChecked(newState);
        }
    });

    // Create context menu
    contextMenu = new MenuManager();
    viewer.getTable().setMenu(contextMenu.createContextMenu(viewer.getTable()));
    contextMenu.add(new CheckAllAction(true));
    contextMenu.add(new CheckAllAction(false));
    contextMenu.add(new Separator());
    contextMenu.add(new CheckInvertAction());
}

From source file:net.sourceforge.tagsea.resources.sharing.ui.ResourceWaypointImportWizardPage2.java

License:Open Source License

public void createControl(Composite parent) {
    Composite page = new Composite(parent, SWT.NONE);
    page.setLayout(new GridLayout());
    this.treeViewer = new CheckboxTreeViewer(page, SWT.BORDER | SWT.SINGLE);
    treeViewer.getTree().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
    treeViewer.setContentProvider(new ResourceWaypointTreeContentProvider());
    treeViewer.setLabelProvider(new DecoratingLabelProvider(new ResourceWaypointTreeLabelProvider(),
            new MultiLabelDecorator(new ILabelDecorator[] { new ResourceWaypointLabelDecorator(),
                    new MissingResourceLabelDecorator(), new ConflictWaypointLabelDecorator(false, true) })));
    treeViewer.setInput(new ResourceWaypointTree(descriptors));
    treeViewer.expandAll();//  w  ww .  jav a 2 s  . c o m
    treeViewer.addCheckStateListener(new ICheckStateListener() {
        public void checkStateChanged(CheckStateChangedEvent event) {
            updateTreeCheckState((CheckboxTreeViewer) event.getCheckable(), event.getChecked(),
                    event.getElement());
            selectedWaypoints.clear();
            for (Object o : treeViewer.getCheckedElements()) {
                if (o instanceof IResourceWaypointDescriptor) {
                    selectedWaypoints.add((IResourceWaypointDescriptor) o);
                }
            }
            tableViewer.refresh();
            updateWarnings();
        }

        private void updateTreeCheckState(CheckboxTreeViewer viewer, boolean checked, Object element) {
            //            sometimes content providers don't follow the API for ITreeContentProvider, and
            //neglect to supply parents because they are too hard to calculate. So, use
            //the elements in the tree instead.
            Tree tree = viewer.getTree();
            TreeItem[] children = tree.getItems();
            //breadth-first search for the element.
            LinkedList<TreeItem> items = new LinkedList<TreeItem>();
            TreeItem item = null;
            for (TreeItem child : children) {
                items.add(child);
            }
            while (items.size() > 0) {
                TreeItem current = items.removeFirst();
                if (current.getData() == element) {
                    item = current;
                    break;
                }
                TreeItem[] childItems = current.getItems();
                for (TreeItem child : childItems) {
                    items.add(child);
                }
            }
            if (item == null)
                return;
            //get all of the leafs for the item.
            items.clear();
            LinkedList<Object> leafElements = new LinkedList<Object>();
            items.add(item);
            while (items.size() > 0) {
                TreeItem current = items.removeFirst();
                TreeItem[] childItems = current.getItems();
                if (childItems.length == 0) {
                    leafElements.add(current.getData());
                } else {
                    for (TreeItem child : childItems) {
                        items.add(child);
                    }
                }
            }
            updateTreeGrayedState(viewer, leafElements, checked);
        }
    });
    treeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
        public void selectionChanged(SelectionChangedEvent event) {
            IStructuredSelection s = (IStructuredSelection) event.getSelection();
            IResourceWaypointDescriptor d = null;
            if (s.size() > 0) {
                Object o = s.getFirstElement();
                if (o instanceof IAdaptable) {
                    d = (IResourceWaypointDescriptor) ((IAdaptable) o)
                            .getAdapter(IResourceWaypointDescriptor.class);
                }
            }
            if (d != null) {
                tableStack.topControl = tableViewer.getControl();
                tableViewer.setInput(d);
                ((Composite) getControl()).layout();
                List<Object> checks = new ArrayList<Object>(checkedMap.get(d));
                if (tagCheckedSet.contains(d)) {
                    checks.add(d.getTags());
                }
                tableViewer.setCheckedElements(checks.toArray());
                //set the enabled state based on whether or not the waypoint
                //exists in the workspace.
                IWaypoint wp = getWaypointForId(new ResourceWaypointIdentifier(d));
                tableViewer.getControl().setEnabled(wp != null);
            } else {
                tableViewer.setInput(null);
                tableStack.topControl = unselectLabel;
                ((Composite) getControl()).layout();
            }
        }
    });

    tableComposite = new Composite(page, SWT.NONE);
    GridData data = new GridData();
    data.grabExcessHorizontalSpace = true;
    data.grabExcessVerticalSpace = false;
    data.horizontalAlignment = SWT.FILL;
    data.verticalAlignment = SWT.FILL;
    tableComposite.setLayoutData(data);
    tableStack = new StackLayout();
    tableComposite.setLayout(tableStack);

    unselectLabel = new Label(tableComposite, SWT.NONE);
    unselectLabel.setText("Please select a waypoint");
    Table table = new Table(tableComposite, SWT.BORDER | SWT.FULL_SELECTION | SWT.SINGLE | SWT.CHECK);
    TableLayout tableLayout = new TableLayout();
    tableLayout.addColumnData(new ColumnWeightData(10));
    tableLayout.addColumnData(new ColumnWeightData(45));
    tableLayout.addColumnData(new ColumnWeightData(45));
    TableColumn c = new TableColumn(table, SWT.NONE);
    c.setText(COLUMNS[0]);
    c = new TableColumn(table, SWT.NONE);
    c.setText(COLUMNS[1]);
    c = new TableColumn(table, SWT.NONE);
    c.setText(COLUMNS[2]);
    table.setLinesVisible(true);
    table.setHeaderVisible(true);
    table.setLayout(tableLayout);
    tableViewer = new CheckboxTableViewer(table);
    tableViewer.setColumnProperties(COLUMNS);
    tableViewer.setContentProvider(new WaypointCompareContentProvider());
    tableViewer.setLabelProvider(new WaypointCompareLabelProvider());
    tableViewer.addCheckStateListener(new ICheckStateListener() {
        public void checkStateChanged(CheckStateChangedEvent event) {
            //add the checked line to the list of checks.
            boolean checked = event.getChecked();
            Object element = event.getElement();
            IResourceWaypointDescriptor selected = getSelectedDescriptor();
            Set<String> attrs = checkedMap.get(selected);
            if (selected != null) {
                //               @tag tagsea.import.content : content provider returns strings for attributes.
                if (element instanceof String) {
                    if (attrs == null) {
                        attrs = new TreeSet<String>();
                        checkedMap.put(selected, attrs);
                    }
                    if (checked) {
                        attrs.add(element.toString());
                    } else {
                        attrs.remove(element.toString());
                    }
                } else {
                    //otherwise, the checked content are the tags.
                    if (checked) {
                        tagCheckedSet.add(selected);
                    } else {
                        tagCheckedSet.remove(selected);
                    }
                }
            }
            //update the checked state in the tree.
            boolean elementChecked = tagCheckedSet.contains(selected) || checkedMap.size() > 0;
            treeViewer.setChecked(selected, elementChecked);
            LinkedList<Object> list = new LinkedList<Object>();
            list.add(selected);
            updateTreeGrayedState(treeViewer, list, elementChecked);
            updateWarnings();
        }
    });
    tableStack.topControl = unselectLabel;
    tableComposite.layout();

    setControl(page);
}