/******************************************************************************* * Copyright (c) 2008, 2010 QNX Software Systems 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: * QNX Software Systems - Initial API and implementation *******************************************************************************/ package org.eclipse.cdt.debug.ui.preferences; import org.eclipse.cdt.debug.ui.breakpoints.ICBreakpointsUIContribution; import org.eclipse.cdt.debug.ui.breakpoints.ICBreakpointsUIContributionUser; import org.eclipse.jface.preference.FieldEditor; import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; /** * @since 7.0 */ public class ReadOnlyFieldEditor extends FieldEditor implements ICBreakpointsUIContributionUser { protected Label textField; protected ICBreakpointsUIContribution contribution; public ReadOnlyFieldEditor(String name, String labelText, Composite parent) { init(name, labelText); createControl(parent); } /* (non-Javadoc) * Method declared on FieldEditor. */ protected void adjustForNumColumns(int numColumns) { GridData gd = (GridData) textField.getLayoutData(); gd.horizontalSpan = numColumns - 1; // We only grab excess space if we have to // If another field editor has more columns then // we assume it is setting the width. gd.grabExcessHorizontalSpace = gd.horizontalSpan == 1; } /** * Fills this field editor's basic controls into the given parent. * <p> * The string field implementation of this <code>FieldEditor</code> * framework method contributes the text field. Subclasses may override * but must call <code>super.doFillIntoGrid</code>. * </p> */ protected void doFillIntoGrid(Composite parent, int numColumns) { getLabelControl(parent); textField = getTextControl(parent); GridData gd = new GridData(); gd.horizontalSpan = numColumns - 1; gd.horizontalAlignment = GridData.FILL; gd.grabExcessHorizontalSpace = true; textField.setLayoutData(gd); } /* (non-Javadoc) * Method declared on FieldEditor. */ protected void doLoad() { if (textField != null) { String value = getPreferenceStore().getString(getPreferenceName()); if (contribution!=null) { String tryValue = contribution.getLabelForValue(value); if (tryValue!=null) value = tryValue; } textField.setText(value); } } /* (non-Javadoc) * Method declared on FieldEditor. */ protected void doLoadDefault() { if (textField != null) { String value = getPreferenceStore().getDefaultString(getPreferenceName()); textField.setText(value); } } /* (non-Javadoc) * Method declared on FieldEditor. */ public int getNumberOfControls() { return 2; } /** * Returns the field editor's value. * * @return the current value */ public String getStringValue() { if (textField != null) { return textField.getText(); } return getPreferenceStore().getString(getPreferenceName()); } /** * Returns this field editor's text control. * * @return the text control, or <code>null</code> if no * text field is created yet */ protected Label getTextControl() { return textField; } /** * Returns this field editor's text control. * <p> * The control is created if it does not yet exist * </p> * * @param parent the parent * @return the text control */ public Label getTextControl(Composite parent) { if (textField == null) { textField = new Label(parent, SWT.WRAP); textField.setFont(parent.getFont()); textField.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent event) { textField = null; } }); } else { checkParent(textField, parent); } return textField; } /* (non-Javadoc) * Method declared on FieldEditor. */ public boolean isValid() { return true; } /* (non-Javadoc) * Method declared on FieldEditor. */ public void setFocus() { if (textField != null) { textField.setFocus(); } } /* * @see FieldEditor.setEnabled(boolean,Composite). */ public void setEnabled(boolean enabled, Composite parent) { super.setEnabled(enabled, parent); getTextControl(parent).setEnabled(enabled); } @Override protected void doStore() { // nothing } public ICBreakpointsUIContribution getContribution() { return contribution; } public void setContribution(ICBreakpointsUIContribution contribution) { this.contribution = contribution; } }