Methods Summary |
---|
private void | createNewPackage()Displays and handles a "Create Package Wizard".
This is invoked by doLabelClick() when clicking on the hyperlink label with an
empty package text field.
OpenNewPackageWizardAction action = new OpenNewPackageWizardAction();
IProject project = getProject();
action.setSelection(new StructuredSelection(project));
action.run();
IJavaElement element = action.getCreatedElement();
if (element != null &&
element.exists() &&
element.getElementType() == IJavaElement.PACKAGE_FRAGMENT) {
setPackageTextField((IPackageFragment) element);
}
|
public void | createUiControl(org.eclipse.swt.widgets.Composite parent, org.eclipse.ui.forms.IManagedForm managedForm)
setManagedForm(managedForm);
FormToolkit toolkit = managedForm.getToolkit();
TextAttributeDescriptor desc = (TextAttributeDescriptor) getDescriptor();
StringBuilder label = new StringBuilder();
label.append("<form><p><a href='unused'>"); //$NON-NLS-1$
label.append(desc.getUiName());
label.append("</a></p></form>"); //$NON-NLS-1$
FormText formText = SectionHelper.createFormText(parent, toolkit, true /* isHtml */,
label.toString(), true /* setupLayoutData */);
formText.addHyperlinkListener(new HyperlinkAdapter() {
@Override
public void linkActivated(HyperlinkEvent e) {
super.linkActivated(e);
doLabelClick();
}
});
formText.setLayoutData(new TableWrapData(TableWrapData.LEFT, TableWrapData.MIDDLE));
SectionHelper.addControlTooltip(formText, desc.getTooltip());
Composite composite = toolkit.createComposite(parent);
composite.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.MIDDLE));
GridLayout gl = new GridLayout(2, false);
gl.marginHeight = gl.marginWidth = 0;
composite.setLayout(gl);
// Fixes missing text borders under GTK... also requires adding a 1-pixel margin
// for the text field below
toolkit.paintBordersFor(composite);
final Text text = toolkit.createText(composite, getCurrentValue());
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalIndent = 1; // Needed by the fixed composite borders under GTK
text.setLayoutData(gd);
setTextWidget(text);
Button browseButton = toolkit.createButton(composite, "Browse...", SWT.PUSH);
browseButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
super.widgetSelected(e);
doBrowseClick();
}
});
|
private void | doBrowseClick()Handles response to the Browse button by creating a Package dialog.
Text text = getTextWidget();
// we need to get the project of the manifest.
IProject project = getProject();
if (project != null) {
try {
SelectionDialog dlg = JavaUI.createPackageDialog(text.getShell(),
JavaCore.create(project), 0);
dlg.setTitle("Select Android Package");
dlg.setMessage("Select the package for the Android project.");
SelectionDialog.setDefaultImage(AdtPlugin.getAndroidLogo());
if (dlg.open() == Window.OK) {
Object[] results = dlg.getResult();
if (results.length == 1) {
setPackageTextField((IPackageFragment)results[0]);
}
}
} catch (JavaModelException e1) {
}
}
|
private void | doLabelClick()Handles response to the Label hyper link being activated.
// get the current package name
String package_name = getTextWidget().getText().trim();
if (package_name.length() == 0) {
createNewPackage();
} else {
// Try to select the package in the Package Explorer for the current
// project and the current editor's site.
IProject project = getProject();
if (project == null) {
AdtPlugin.log(IStatus.ERROR, "Failed to get project for UiPackageAttribute"); //$NON-NLS-1$
return;
}
IWorkbenchPartSite site = getUiParent().getEditor().getSite();
if (site == null) {
AdtPlugin.log(IStatus.ERROR, "Failed to get editor site for UiPackageAttribute"); //$NON-NLS-1$
return;
}
for (IPackageFragmentRoot root : getPackageFragmentRoots(project)) {
IPackageFragment fragment = root.getPackageFragment(package_name);
if (fragment != null && fragment.exists()) {
ShowInPackageViewAction action = new ShowInPackageViewAction(site);
action.run(fragment);
// This action's run() doesn't provide the status (although internally it could)
// so we just assume it worked.
return;
}
}
}
|
private org.eclipse.jdt.core.IPackageFragmentRoot[] | getPackageFragmentRoots(org.eclipse.core.resources.IProject project)Utility method that computes and returns the list of {@link IPackageFragmentRoot}
corresponding to the source folder of the specified project.
ArrayList<IPackageFragmentRoot> result = new ArrayList<IPackageFragmentRoot>();
try {
IJavaProject javaProject = JavaCore.create(project);
IPackageFragmentRoot[] roots = javaProject.getPackageFragmentRoots();
for (int i = 0; i < roots.length; i++) {
IClasspathEntry entry = roots[i].getRawClasspathEntry();
if (entry.getEntryKind() == IClasspathEntry.CPE_SOURCE) {
result.add(roots[i]);
}
}
} catch (JavaModelException e) {
}
return result.toArray(new IPackageFragmentRoot[result.size()]);
|
public java.lang.String[] | getPossibleValues(java.lang.String prefix)
// TODO: compute a list of existing packages for content assist completion
return null;
|
private org.eclipse.core.resources.IProject | getProject()Utility method that returns the project for the current file being edited.
UiElementNode uiNode = getUiParent();
AndroidEditor editor = uiNode.getEditor();
IEditorInput input = editor.getEditorInput();
if (input instanceof IFileEditorInput) {
// from the file editor we can get the IFile object, and from it, the IProject.
IFile file = ((IFileEditorInput)input).getFile();
return file.getProject();
}
return null;
|
protected void | onAddValidators(org.eclipse.swt.widgets.Text text)
ModifyListener listener = new ModifyListener() {
public void modifyText(ModifyEvent e) {
String package_name = text.getText();
if (package_name.indexOf('.") < 1) {
getManagedForm().getMessageManager().addMessage(text,
"Package name should contain at least two identifiers.",
null /* data */, IMessageProvider.ERROR, text);
} else {
getManagedForm().getMessageManager().removeMessage(text, text);
}
}
};
text.addModifyListener(listener);
// Make sure the validator removes its message(s) when the widget is disposed
text.addDisposeListener(new DisposeListener() {
public void widgetDisposed(DisposeEvent e) {
getManagedForm().getMessageManager().removeMessage(text, text);
}
});
// Finally call the validator once to make sure the initial value is processed
listener.modifyText(null);
|
private void | setPackageTextField(org.eclipse.jdt.core.IPackageFragment type)Utility method that sets the package's text field to the package fragment's name.
Text text = getTextWidget();
String name = type.getElementName();
text.setText(name);
|