package org.hibernate.eclipse.console; import org.eclipse.jface.action.ControlContribution; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; public abstract class ComboContribution extends ControlContribution { protected Combo comboControl; protected ComboContribution(String id) { super( id ); } String getText() { if(comboControl.isDisposed()) { return ""; //$NON-NLS-1$ } else { return comboControl.getText(); } } protected Control createControl(Composite parent) { Composite panel = new Composite( parent, SWT.NONE ); GridLayout gridLayout = new GridLayout(2,false); gridLayout.horizontalSpacing = 1; gridLayout.verticalSpacing = 1; gridLayout.marginHeight=0; gridLayout.marginWidth=0; gridLayout.marginTop=0; gridLayout.marginBottom=0; //gridLayout. panel.setLayout( gridLayout ); if(getLabelText()!=null) { Label label = new Label(panel, SWT.None); label.setText(getLabelText()); GridData gd = new GridData(); gd.horizontalSpan = 1; gd.verticalAlignment = GridData.BEGINNING; gd.horizontalAlignment = GridData.END; } comboControl = new Combo( panel, SWT.DROP_DOWN | (isReadOnly()?SWT.READ_ONLY:SWT.NONE) ); populateComboBox(); comboControl.pack(); GridData gd = new GridData(); gd.grabExcessHorizontalSpace = true; gd.widthHint = getComboWidth(); comboControl.setLayoutData( gd ); if(getSelectionAdapter()!=null) { comboControl.addSelectionListener( getSelectionAdapter() ); } panel.pack(); return panel; } protected int getComboWidth() { return 100; } protected int computeWidth(Control control) { return super.computeWidth(control); } protected boolean isReadOnly() { return true; } String getLabelText() { return null; } abstract protected SelectionListener getSelectionAdapter(); abstract void populateComboBox(); public void dispose() { if ( getSelectionAdapter() != null ) { if ( !comboControl.isDisposed() ) { comboControl.removeSelectionListener( getSelectionAdapter() ); } } } }