# HG changeset patch # User Frank Benoit # Date 1207176522 -7200 # Node ID eb6b3e6de86988fc5ce8685877d6b01775fe67d4 # Parent 1451821c3e00fbdb559897393bdc90d98c45de1a ControlContribution diff -r 1451821c3e00 -r eb6b3e6de869 dwtx/jface/action/ControlContribution.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtx/jface/action/ControlContribution.d Thu Apr 03 00:48:42 2008 +0200 @@ -0,0 +1,108 @@ +/******************************************************************************* + * Copyright (c) 2000, 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 + * Port to the D programming language: + * Frank Benoit + *******************************************************************************/ +module dwtx.jface.action.ControlContribution; + +import dwtx.jface.action.ContributionItem; + +import dwt.DWT; +import dwt.widgets.Composite; +import dwt.widgets.Control; +import dwt.widgets.Menu; +import dwt.widgets.ToolBar; +import dwt.widgets.ToolItem; +import dwtx.core.runtime.Assert; + +import dwt.dwthelper.utils; + +/** + * An abstract contribution item implementation for adding an arbitrary + * DWT control to a tool bar. + * Note, however, that these items cannot be contributed to menu bars. + *

+ * The createControl framework method must be implemented + * by concrete subclasses. + *

+ */ +public abstract class ControlContribution : ContributionItem { + /** + * Creates a control contribution item with the given id. + * + * @param id the contribution item id + */ + protected this(String id) { + super(id); + } + + /** + * Computes the width of the given control which is being added + * to a tool bar. This is needed to determine the width of the tool bar item + * containing the given control. + *

+ * The default implementation of this framework method returns + * control.computeSize(DWT.DEFAULT, DWT.DEFAULT, true).x. + * Subclasses may override if required. + *

+ * + * @param control the control being added + * @return the width of the control + */ + protected int computeWidth(Control control) { + return control.computeSize(DWT.DEFAULT, DWT.DEFAULT, true).x; + } + + /** + * Creates and returns the control for this contribution item + * under the given parent composite. + *

+ * This framework method must be implemented by concrete + * subclasses. + *

+ * + * @param parent the parent composite + * @return the new control + */ + protected abstract Control createControl(Composite parent); + + /** + * The control item implementation of this IContributionItem + * method calls the createControl framework method. + * Subclasses must implement createControl rather than + * overriding this method. + */ + public final void fill(Composite parent) { + createControl(parent); + } + + /** + * The control item implementation of this IContributionItem + * method throws an exception since controls cannot be added to menus. + */ + public final void fill(Menu parent, int index) { + Assert.isTrue(false, "Can't add a control to a menu");//$NON-NLS-1$ + } + + /** + * The control item implementation of this IContributionItem + * method calls the createControl framework method to + * create a control under the given parent, and then creates + * a new tool item to hold it. + * Subclasses must implement createControl rather than + * overriding this method. + */ + public final void fill(ToolBar parent, int index) { + Control control = createControl(parent); + ToolItem ti = new ToolItem(parent, DWT.SEPARATOR, index); + ti.setControl(control); + ti.setWidth(computeWidth(control)); + } +}