blob: 27421a3218acb5f4953ef0672a0c0cb01514e48b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2008 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 Corporation - initial API and implementation
* Sebastian Davids - bug 69254
*******************************************************************************/
package org.eclipse.jface.viewers;
import org.eclipse.core.runtime.Assert;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CCombo;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
/**
* A concrete viewer based either on an SWT <code>Combo</code> control or <code>CCombo</code>
* control. This class is intended as an alternative to the JFace <code>ListViewer</code>, which displays
* its content in a combo box rather than a list. Wherever possible, this class attempts to behave
* like ListViewer. <p>
*
* This class is designed to be instantiated with a pre-existing SWT combo control
* and configured with a domain-specific content provider, label provider, element
* filter (optional), and element sorter (optional).
* </p>
*
* @see org.eclipse.jface.viewers.ListViewer
* @since 3.0 (made non-final in 3.4)
*/
public class ComboViewer extends AbstractListViewer {
/**
* This viewer's list control if this viewer is instantiated with a combo control; otherwise
* <code>null</code>.
*
* @see #ComboViewer(Combo)
*/
private Combo combo;
/**
* This viewer's list control if this viewer is instantiated with a CCombo control; otherwise
* <code>null</code>.
*
* @see #ComboViewer(CCombo)
* @since 3.3
*/
private CCombo ccombo;
/**
* Creates a combo viewer on a newly-created combo control under the given parent.
* The viewer has no input, no content provider, a default label provider,
* no sorter, and no filters.
*
* @param parent the parent control
*/
public ComboViewer(Composite parent) {
this(parent, SWT.READ_ONLY | SWT.BORDER);
}
/**
* Creates a combo viewer on a newly-created combo control under the given parent.
* The combo control is created using the given SWT style bits.
* The viewer has no input, no content provider, a default label provider,
* no sorter, and no filters.
*
* @param parent the parent control
* @param style the SWT style bits
*/
public ComboViewer(Composite parent, int style) {
this(new Combo(parent, style));
}
/**
* Creates a combo viewer on the given combo control.
* The viewer has no input, no content provider, a default label provider,
* no sorter, and no filters.
*
* @param list the combo control
*/
public ComboViewer(Combo list) {
this.combo = list;
hookControl(list);
}
/**
* Creates a combo viewer on the given CCombo control.
* The viewer has no input, no content provider, a default label provider,
* no sorter, and no filters.
*
* @param list the CCombo control
* @since 3.3
*/
public ComboViewer(CCombo list) {
this.ccombo = list;
hookControl(list);
}
protected void listAdd(String string, int index) {
if (combo == null) {
ccombo.add(string, index);
} else {
combo.add(string, index);
}
}
protected void listSetItem(int index, String string) {
if (combo == null) {
ccombo.setItem(index, string);
} else {
combo.setItem(index, string);
}
}
protected int[] listGetSelectionIndices() {
if (combo == null) {
return new int[] { ccombo.getSelectionIndex() };
} else {
return new int[] { combo.getSelectionIndex() };
}
}
protected int listGetItemCount() {
if (combo == null) {
return ccombo.getItemCount();
} else {
return combo.getItemCount();
}
}
protected void listSetItems(String[] labels) {
if (combo == null) {
ccombo.setItems(labels);
} else {
combo.setItems(labels);
}
}
protected void listRemoveAll() {
if (combo == null) {
ccombo.removeAll();
} else {
combo.removeAll();
}
}
protected void listRemove(int index) {
if (combo == null) {
ccombo.remove(index);
} else {
combo.remove(index);
}
}
/* (non-Javadoc)
* Method declared on Viewer.
*/
public Control getControl() {
if (combo == null) {
return ccombo;
} else {
return combo;
}
}
/**
* Returns this list viewer's list control. If the viewer was not created on
* a CCombo control, some kind of unchecked exception is thrown.
*
* @return the list control
* @since 3.3
*/
public CCombo getCCombo() {
Assert.isNotNull(ccombo);
return ccombo;
}
/**
* Returns this list viewer's list control. If the viewer was not created on
* a Combo control, some kind of unchecked exception is thrown.
*
* @return the list control
*/
public Combo getCombo() {
Assert.isNotNull(combo);
return combo;
}
/*
* Do nothing -- combos only display the selected element, so there is no way
* we can ensure that the given element is visible without changing the selection.
* Method defined on StructuredViewer.
*/
public void reveal(Object element) {
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.AbstractListViewer#listSetSelection(int[])
*/
protected void listSetSelection(int[] ixs) {
if (combo == null) {
for (int idx = 0; idx < ixs.length; idx++) {
ccombo.select(ixs[idx]);
}
} else {
for (int idx = 0; idx < ixs.length; idx++) {
combo.select(ixs[idx]);
}
}
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.AbstractListViewer#listDeselectAll()
*/
protected void listDeselectAll() {
if (combo == null) {
ccombo.deselectAll();
ccombo.clearSelection();
} else {
combo.deselectAll();
combo.clearSelection();
}
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.AbstractListViewer#listShowSelection()
*/
protected void listShowSelection() {
}
}