/*******************************************************************************
* Copyright (c) 2002, 2011 IBM Corporation and others.
* 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:
* IBM Rational Software - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.ui.newui;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.viewers.CheckStateChangedEvent;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.viewers.ICheckStateListener;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
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.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.cdt.internal.ui.newui.Messages;
/**
* @noextend This class is not intended to be subclassed by clients.
*/
public class ConfigMultiSelectionDialog extends Dialog {
static private ICConfigurationDescription[] cfgds;
private Table table;
private CheckboxTableViewer tv;
private Button b_ok;
private Label message;
private static ICConfigurationDescription[] result = null;
/**
* @since 5.2
*/
public static ICConfigurationDescription[] select(ICConfigurationDescription[] _cfgds, Shell parentShell) {
cfgds = _cfgds;
ConfigMultiSelectionDialog d = new ConfigMultiSelectionDialog(parentShell);
if (d.open() == OK)
return result;
return null;
}
public ConfigMultiSelectionDialog(Shell parentShell) { super(parentShell); }
@Override
protected void configureShell(Shell shell) {
super.configureShell(shell);
shell.setText(Messages.ConfigMultiSelectionDialog_0);
}
/**
* Method is overridden to disable "OK" button at start
*/
@Override
protected Control createContents(Composite parent) {
Control out = super.createContents(parent);
b_ok = getButton(IDialogConstants.OK_ID);
b_ok.setEnabled(false);
return out;
}
/* (non-Javadoc)
* @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
*/
@Override
protected Control createDialogArea(Composite parent) {
Composite composite = new Composite(parent, SWT.NULL);
composite.setFont(parent.getFont());
composite.setLayout(new GridLayout(1, true));
composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
// Create the current config table
table = new Table(composite, SWT.CHECK | SWT.BORDER | SWT.SINGLE | SWT.V_SCROLL | SWT.H_SCROLL | SWT.FULL_SELECTION);
table.setLayoutData(new GridData(GridData.FILL));
table.setHeaderVisible(true);
table.setLinesVisible(true);
message = new Label(composite, SWT.NONE);
message.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
message.setText(Messages.ConfigMultiSelectionDialog_1);
message.setForeground(composite.getDisplay().getSystemColor(SWT.COLOR_RED));
TableColumn col = new TableColumn(table, SWT.NONE);
col.setText(Messages.ManageConfigDialog_1);
col.setWidth(100);
col = new TableColumn(table, SWT.NONE);
col.setText(Messages.ManageConfigDialog_2);
col.setWidth(120);
tv = new CheckboxTableViewer(table);
tv.setContentProvider(new IStructuredContentProvider() {
@Override
public Object[] getElements(Object inputElement) { return cfgds; }
@Override
public void dispose() {}
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {}
});
tv.addCheckStateListener(new ICheckStateListener() {
@Override
public void checkStateChanged(CheckStateChangedEvent e) {
boolean enabled = (tv.getCheckedElements().length > 1);
if (b_ok != null) b_ok.setEnabled(enabled);
message.setVisible(!enabled);
if (enabled) {
Object[] ob = tv.getCheckedElements();
result = new ICConfigurationDescription[ob.length];
System.arraycopy(ob, 0, result, 0, ob.length);
} else
result = null;
}});
tv.setLabelProvider(new ITableLabelProvider() {
@Override
public Image getColumnImage(Object element, int columnIndex) { return null; }
@Override
public void addListener(ILabelProviderListener listener) {}
@Override
public void dispose() {}
@Override
public boolean isLabelProperty(Object element, String property) { return false;}
@Override
public void removeListener(ILabelProviderListener listener) {}
@Override
public String getColumnText(Object element, int index) {
ICConfigurationDescription cfg = (ICConfigurationDescription)element;
if (index == 0) return cfg.getName();
if (index == 1) return cfg.getDescription();
return AbstractPage.EMPTY_STR;
}});
tv.setInput(cfgds);
table.setFocus();
return composite;
}
/**
* @deprecated (in org.eclipse.cdt.ui 5.2.0)
*
* This call is deprecated in plugin org.eclipse.cdt.ui 5.2.0 and intended to be removed
* on occasion when the plugin increases major version (Bug 285033).
* Use {@link #select(ICConfigurationDescription[], Shell)} to properly set focus.
*/
@Deprecated
public static ICConfigurationDescription[] select(ICConfigurationDescription[] _cfgds) {
cfgds = _cfgds;
ConfigMultiSelectionDialog d = new ConfigMultiSelectionDialog(CUIPlugin.getActiveWorkbenchShell());
if (d.open() == OK)
return result;
return null;
}
}