blob: b0f4be03596d07d949677dfc51b911eeca202092 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2005 IBM Corporation 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.internal.ui.refactoring.nls;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Text;
import org.eclipse.jdt.internal.ui.dialogs.TextFieldNavigationHandler;
import org.eclipse.jdt.internal.ui.refactoring.contentassist.ControlContentAssistHelper;
import org.eclipse.jdt.internal.ui.refactoring.contentassist.JavaPackageCompletionProcessor;
import org.eclipse.jdt.internal.ui.wizards.dialogfields.IDialogFieldListener;
import org.eclipse.jdt.internal.ui.wizards.dialogfields.IStringButtonAdapter;
import org.eclipse.jdt.internal.ui.wizards.dialogfields.LayoutUtil;
import org.eclipse.jdt.internal.ui.wizards.dialogfields.StringButtonStatusDialogField;
class PackageFragmentSelection extends StringButtonStatusDialogField implements SourceChangeListener {
private final SourceFirstPackageSelectionDialogField fDialogField;
private JavaPackageCompletionProcessor fCurrPackageCompletionProcessor;
private IDialogFieldListener fUpdateListener;
public PackageFragmentSelection(SourceFirstPackageSelectionDialogField field, String packageLabel, String browseLabel,
String statusHint, IStringButtonAdapter adapter) {
super(adapter);
fDialogField= field;
setLabelText(packageLabel);
setButtonLabel(browseLabel);
setStatusWidthHint(statusHint);
fCurrPackageCompletionProcessor= new JavaPackageCompletionProcessor();
}
public void setUpdateListener(IDialogFieldListener updateListener) {
fUpdateListener= updateListener;
}
public Control[] doFillIntoGrid(Composite parent, int nColumns, int textWidth) {
Control[] res= super.doFillIntoGrid(parent, nColumns);
final Text text= getTextControl(null);
text.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
updateListener();
}
});
LayoutUtil.setWidthHint(text, textWidth);
LayoutUtil.setHorizontalGrabbing(text);
ControlContentAssistHelper.createTextContentAssistant(text, fCurrPackageCompletionProcessor);
TextFieldNavigationHandler.install(text);
return res;
}
public void setPackageFragment(IPackageFragment fragment) {
if (fragment != null) {
setText(fragment.getElementName());
}
updateListener();
}
private void updateListener() {
if (fUpdateListener != null) {
fUpdateListener.dialogFieldChanged(this);
}
}
public IPackageFragment getPackageFragment() {
return calculateFragment(fDialogField.getSelectedFragmentRoot());
}
private IPackageFragment calculateFragment(IPackageFragmentRoot root) {
if (root == null) {
return null;
} else {
return root.getPackageFragment(getText());
}
}
public void sourceRootChanged(IPackageFragmentRoot newRoot) {
fCurrPackageCompletionProcessor.setPackageFragmentRoot(newRoot);
setPackageFragment(calculateFragment(newRoot));
}
}