001: /*******************************************************************************
002: * Copyright (c) 2000, 2005 IBM Corporation and others.
003: * All rights reserved. This program and the accompanying materials
004: * are made available under the terms of the Eclipse Public License v1.0
005: * which accompanies this distribution, and is available at
006: * http://www.eclipse.org/legal/epl-v10.html
007: *
008: * Contributors:
009: * IBM Corporation - initial API and implementation
010: *******************************************************************************/package org.eclipse.jdt.internal.ui.refactoring.nls;
011:
012: import org.eclipse.jdt.core.IPackageFragment;
013: import org.eclipse.jdt.core.IPackageFragmentRoot;
014:
015: import org.eclipse.swt.events.ModifyEvent;
016: import org.eclipse.swt.events.ModifyListener;
017: import org.eclipse.swt.widgets.Composite;
018: import org.eclipse.swt.widgets.Control;
019: import org.eclipse.swt.widgets.Text;
020:
021: import org.eclipse.jdt.internal.ui.dialogs.TextFieldNavigationHandler;
022: import org.eclipse.jdt.internal.ui.refactoring.contentassist.ControlContentAssistHelper;
023: import org.eclipse.jdt.internal.ui.refactoring.contentassist.JavaPackageCompletionProcessor;
024: import org.eclipse.jdt.internal.ui.wizards.dialogfields.IDialogFieldListener;
025: import org.eclipse.jdt.internal.ui.wizards.dialogfields.IStringButtonAdapter;
026: import org.eclipse.jdt.internal.ui.wizards.dialogfields.LayoutUtil;
027: import org.eclipse.jdt.internal.ui.wizards.dialogfields.StringButtonStatusDialogField;
028:
029: class PackageFragmentSelection extends StringButtonStatusDialogField
030: implements SourceChangeListener {
031:
032: private final SourceFirstPackageSelectionDialogField fDialogField;
033: private JavaPackageCompletionProcessor fCurrPackageCompletionProcessor;
034: private IDialogFieldListener fUpdateListener;
035:
036: public PackageFragmentSelection(
037: SourceFirstPackageSelectionDialogField field,
038: String packageLabel, String browseLabel, String statusHint,
039: IStringButtonAdapter adapter) {
040: super (adapter);
041: fDialogField = field;
042: setLabelText(packageLabel);
043: setButtonLabel(browseLabel);
044: setStatusWidthHint(statusHint);
045: fCurrPackageCompletionProcessor = new JavaPackageCompletionProcessor();
046: }
047:
048: public void setUpdateListener(IDialogFieldListener updateListener) {
049: fUpdateListener = updateListener;
050: }
051:
052: public Control[] doFillIntoGrid(Composite parent, int nColumns,
053: int textWidth) {
054: Control[] res = super .doFillIntoGrid(parent, nColumns);
055:
056: final Text text = getTextControl(null);
057: text.addModifyListener(new ModifyListener() {
058: public void modifyText(ModifyEvent e) {
059: updateListener();
060: }
061: });
062: LayoutUtil.setWidthHint(text, textWidth);
063: LayoutUtil.setHorizontalGrabbing(text);
064: ControlContentAssistHelper.createTextContentAssistant(text,
065: fCurrPackageCompletionProcessor);
066: TextFieldNavigationHandler.install(text);
067:
068: return res;
069: }
070:
071: public void setPackageFragment(IPackageFragment fragment) {
072: if (fragment != null) {
073: setText(fragment.getElementName());
074: }
075:
076: updateListener();
077: }
078:
079: private void updateListener() {
080: if (fUpdateListener != null) {
081: fUpdateListener.dialogFieldChanged(this );
082: }
083: }
084:
085: public IPackageFragment getPackageFragment() {
086: return calculateFragment(fDialogField.getSelectedFragmentRoot());
087: }
088:
089: private IPackageFragment calculateFragment(IPackageFragmentRoot root) {
090: if (root == null) {
091: return null;
092: } else {
093: return root.getPackageFragment(getText());
094: }
095: }
096:
097: public void sourceRootChanged(IPackageFragmentRoot newRoot) {
098: fCurrPackageCompletionProcessor.setPackageFragmentRoot(newRoot);
099:
100: setPackageFragment(calculateFragment(newRoot));
101: }
102: }
|