Mercurial > projects > dwt-addons
view dwtx/jface/viewers/ComboViewer.d @ 10:b6c35faf97c8
Viewers
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Mon, 31 Mar 2008 00:47:19 +0200 |
parents | |
children | ea8ff534f622 |
line wrap: on
line source
/******************************************************************************* * Copyright (c) 2004-2006 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 * Port to the D programming language: * Frank Benoit <benoit@tionex.de> *******************************************************************************/ module dwtx.jface.viewers.ComboViewer; import dwtx.jface.viewers.AbstractListViewer; import dwt.DWT; import dwt.custom.CCombo; import dwt.widgets.Combo; import dwt.widgets.Composite; import dwt.widgets.Control; import dwtx.core.runtime.Assert; import dwt.dwthelper.utils; /** * A concrete viewer based either on an DWT <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 DWT combo control * and configured with a domain-specific content provider, label provider, element * filter (optional), and element sorter (optional). * </p> * * @see dwtx.jface.viewers.ListViewer * @since 3.0 */ public final class ComboViewer : 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 this(Composite parent) { this(parent, DWT.READ_ONLY | DWT.BORDER); } /** * Creates a combo viewer on a newly-created combo control under the given parent. * The combo control is created using the given DWT 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 DWT style bits */ public this(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 this(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 this(CCombo list) { this.ccombo = list; hookControl(list); } protected void listAdd(String string, int index) { if (combo is null) { ccombo.add(string, index); } else { combo.add(string, index); } } protected void listSetItem(int index, String string) { if (combo is null) { ccombo.setItem(index, string); } else { combo.setItem(index, string); } } protected int[] listGetSelectionIndices() { if (combo is null) { return [ ccombo.getSelectionIndex() ]; } else { return [ combo.getSelectionIndex() ]; } } protected int listGetItemCount() { if (combo is null) { return ccombo.getItemCount(); } else { return combo.getItemCount(); } } protected void listSetItems(String[] labels) { if (combo is null) { ccombo.setItems(labels); } else { combo.setItems(labels); } } protected void listRemoveAll() { if (combo is null) { ccombo.removeAll(); } else { combo.removeAll(); } } protected void listRemove(int index) { if (combo is null) { ccombo.remove(index); } else { combo.remove(index); } } /* (non-Javadoc) * Method declared on Viewer. */ public Control getControl() { if (combo is 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 dwtx.jface.viewers.AbstractListViewer#listSetSelection(int[]) */ protected void listSetSelection(int[] ixs) { if (combo is 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 dwtx.jface.viewers.AbstractListViewer#listDeselectAll() */ protected void listDeselectAll() { if (combo is null) { ccombo.deselectAll(); ccombo.clearSelection(); } else { combo.deselectAll(); combo.clearSelection(); } } /* (non-Javadoc) * @see dwtx.jface.viewers.AbstractListViewer#listShowSelection() */ protected void listShowSelection() { } }