1 /******************************************************************************* 2 * Copyright (c) 2000, 2008 IBM Corporation and others. 3 * 4 * This program and the accompanying materials 5 * are made available under the terms of the Eclipse Public License 2.0 6 * which accompanies this distribution, and is available at 7 * https://www.eclipse.org/legal/epl-2.0/ 8 * 9 * SPDX-License-Identifier: EPL-2.0 10 * 11 * Contributors: 12 * IBM Corporation - initial API and implementation 13 *******************************************************************************/ 14 package org.eclipse.jdt.internal.ui.refactoring.nls; 15 16 import org.eclipse.swt.events.ModifyEvent; 17 import org.eclipse.swt.events.ModifyListener; 18 import org.eclipse.swt.widgets.Composite; 19 import org.eclipse.swt.widgets.Control; 20 import org.eclipse.swt.widgets.Text; 21 22 import org.eclipse.jdt.core.IPackageFragment; 23 import org.eclipse.jdt.core.IPackageFragmentRoot; 24 25 import org.eclipse.jdt.internal.ui.dialogs.TextFieldNavigationHandler; 26 import org.eclipse.jdt.internal.ui.refactoring.contentassist.ControlContentAssistHelper; 27 import org.eclipse.jdt.internal.ui.refactoring.contentassist.JavaPackageCompletionProcessor; 28 import org.eclipse.jdt.internal.ui.wizards.dialogfields.IDialogFieldListener; 29 import org.eclipse.jdt.internal.ui.wizards.dialogfields.IStringButtonAdapter; 30 import org.eclipse.jdt.internal.ui.wizards.dialogfields.LayoutUtil; 31 import org.eclipse.jdt.internal.ui.wizards.dialogfields.StringButtonStatusDialogField; 32 33 class PackageFragmentSelection extends StringButtonStatusDialogField implements SourceChangeListener { 34 35 private final SourceFirstPackageSelectionDialogField fDialogField; 36 private JavaPackageCompletionProcessor fCurrPackageCompletionProcessor; 37 private IDialogFieldListener fUpdateListener; 38 PackageFragmentSelection(SourceFirstPackageSelectionDialogField field, String packageLabel, String browseLabel, String statusHint, IStringButtonAdapter adapter)39 public PackageFragmentSelection(SourceFirstPackageSelectionDialogField field, String packageLabel, String browseLabel, 40 String statusHint, IStringButtonAdapter adapter) { 41 super(adapter); 42 fDialogField= field; 43 setLabelText(packageLabel); 44 setButtonLabel(browseLabel); 45 setStatusWidthHint(statusHint); 46 fCurrPackageCompletionProcessor= new JavaPackageCompletionProcessor(); 47 } 48 setUpdateListener(IDialogFieldListener updateListener)49 public void setUpdateListener(IDialogFieldListener updateListener) { 50 fUpdateListener= updateListener; 51 } 52 doFillIntoGrid(Composite parent, int nColumns, int textWidth)53 public Control[] doFillIntoGrid(Composite parent, int nColumns, int textWidth) { 54 Control[] res= super.doFillIntoGrid(parent, nColumns); 55 56 final Text text= getTextControl(null); 57 text.addModifyListener(new ModifyListener() { 58 @Override 59 public void modifyText(ModifyEvent e) { 60 updateListener(); 61 } 62 }); 63 LayoutUtil.setWidthHint(text, textWidth); 64 LayoutUtil.setHorizontalGrabbing(text); 65 ControlContentAssistHelper.createTextContentAssistant(text, fCurrPackageCompletionProcessor); 66 TextFieldNavigationHandler.install(text); 67 68 return res; 69 } 70 setPackageFragment(IPackageFragment fragment)71 public void setPackageFragment(IPackageFragment fragment) { 72 if (fragment != null) { 73 setText(fragment.getElementName()); 74 } 75 76 updateListener(); 77 } 78 updateListener()79 private void updateListener() { 80 if (fUpdateListener != null) { 81 fUpdateListener.dialogFieldChanged(this); 82 } 83 } 84 getPackageFragment()85 public IPackageFragment getPackageFragment() { 86 return calculateFragment(fDialogField.getSelectedFragmentRoot()); 87 } 88 calculateFragment(IPackageFragmentRoot root)89 private IPackageFragment calculateFragment(IPackageFragmentRoot root) { 90 if (root == null) { 91 return null; 92 } else { 93 return root.getPackageFragment(getText()); 94 } 95 } 96 97 @Override sourceRootChanged(IPackageFragmentRoot newRoot)98 public void sourceRootChanged(IPackageFragmentRoot newRoot) { 99 fCurrPackageCompletionProcessor.setPackageFragmentRoot(newRoot); 100 101 setPackageFragment(calculateFragment(newRoot)); 102 } 103 } 104