/******************************************************************************* * Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is 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: * Exadel, Inc. and Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.common.model.ui.attribute.editor; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.util.Assert; import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Shell; import org.jboss.tools.common.model.ui.widgets.IWidgetSettings; public abstract class StringButtonFieldEditor extends StringFieldEditor { private Button button; private String buttonName; public StringButtonFieldEditor() {} public StringButtonFieldEditor(IWidgetSettings settings) { super(settings); } protected void adjustForNumColumns(int numColumns) { ((GridData)getTextControl().getLayoutData()).horizontalSpan = numColumns - 2; } protected abstract String changePressed(); protected void doFillIntoGrid(Composite parent, int numColumns) { super.doFillIntoGrid(parent, numColumns - 1); button = getChangeControl(parent); GridData gd = new GridData(); gd.horizontalAlignment = GridData.FILL; gd.heightHint = convertVerticalDLUsToPixels(button, 14/*IDialogConstants.BUTTON_HEIGHT*/); int widthHint = convertHorizontalDLUsToPixels(button, IDialogConstants.BUTTON_WIDTH); gd.widthHint = Math.max(widthHint, button.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x); button.setLayoutData(gd); } protected Button getChangeControl(Composite parent) { if (button != null) { checkParent(button, parent); return button; } int style = getSettings().getStyle("Button.Style"); //$NON-NLS-1$ if (style == SWT.DEFAULT) style = SWT.NONE; if (style == 0) style = SWT.PUSH; /// Color bg = getSettings().getColor("Button.Background"); Color fg = getSettings().getColor("Button.Foreground"); //$NON-NLS-1$ Font font = getSettings().getFont("Button.Font"); //$NON-NLS-1$ button = new Button(parent, style); button.setFont(font); /// button.setBackground(bg); button.setForeground(fg); if (buttonName == null) buttonName = JFaceResources.getString("openChange");//$NON-NLS-1$ button.setText(buttonName); button.setFont(parent.getFont()); addListeners(); return button; } void addListeners() { button.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent evt) { String oldValue = getStringValue(); String newValue = changePressed(); if (newValue != null) { setStringValue(oldValue); setStringValue(newValue); } } }); button.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent event) { button = null; } }); } public int getNumberOfControls() { return 3; } protected Shell getShell() { if (button == null) return null; return button.getShell(); } public void setChangeButtonText(String text) { Assert.isNotNull(text); buttonName = text; if (button != null) button.setText(text); } public void setEnabled(boolean enabled){ super.setEnabled(enabled); // label if (getTextControl()!=null) { boolean b = isAlwaysReadOnly(); getTextControl().setEnabled(enabled || b); } if (this.button!=null) { this.button.setEnabled(enabled); } } protected Button getChangeControl() { return button; } }