package com.robotoworks.mechanoid.ui.wizard.fields; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.internal.ui.JavaPluginImages; import org.eclipse.jface.bindings.keys.KeyStroke; import org.eclipse.jface.bindings.keys.ParseException; import org.eclipse.jface.fieldassist.ContentProposalAdapter; import org.eclipse.jface.fieldassist.TextContentAdapter; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.window.Window; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.dialogs.ListDialog; import org.eclipse.ui.model.WorkbenchContentProvider; import org.eclipse.ui.model.WorkbenchLabelProvider; public class PackageBrowserField extends BrowseableValueTextField { private ContentProposalAdapter mPackageProposalAdapter; private PackageProposalProvider mProposalProvider; private Image mPackageImage; public void setJavaProject(IJavaProject project) { mProposalProvider.setProposalsFromProject(project); } public PackageBrowserField(Composite parent, String labelText) { super(parent, labelText); attachProposalProvider(); parent.addDisposeListener(mDisposeListener); mPackageImage = JavaPluginImages.DESC_OBJS_PACKAGE.createImage(); getBrowseButton().setVisible(false); } private void attachProposalProvider() { try { mProposalProvider = new PackageProposalProvider(); mPackageProposalAdapter = new ContentProposalAdapter( getTextField(), new TextContentAdapter(), mProposalProvider, KeyStroke.getInstance("Ctrl+Space"), new char[] {'.'}); mPackageProposalAdapter.setLabelProvider(new LabelProvider() { @Override public Image getImage(Object element) { return mPackageImage; } @Override public String getText(Object element) { PackageProposal p = (PackageProposal) element; return p.getContent(); } }); mPackageProposalAdapter.setProposalAcceptanceStyle(ContentProposalAdapter.PROPOSAL_REPLACE); } catch (ParseException e) { e.printStackTrace(); } } @Override protected void onBrowseButtonPressed() { Shell shell = PlatformUI.getWorkbench().getModalDialogShellProvider().getShell(); ListDialog dialog = new ListDialog(shell); dialog.setContentProvider(new WorkbenchContentProvider()); dialog.setInput("hi"); dialog.setLabelProvider(new WorkbenchLabelProvider()); dialog.setBlockOnOpen(true); if(dialog.open() == Window.OK) { // TODO } } private DisposeListener mDisposeListener = new DisposeListener() { @Override public void widgetDisposed(DisposeEvent e) { if(mPackageImage != null) { mPackageImage.dispose(); } } }; }