package com.robotoworks.mechanoid.ui.wizard.fields; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.eclipse.jface.window.Window; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.dialogs.ContainerSelectionDialog; import com.robotoworks.mechanoid.ui.Messages; public class ContainerBrowserField extends BrowseableValueTextField { private IPath mSelectedPath = Path.EMPTY; private IWorkspaceRoot mWorkspaceRoot; private IProject mSelectedProject; public IProject getSelectedProject() { return mSelectedProject; } public ContainerBrowserField(Composite parent, String labelText, IContainer initialRoot) { super(parent, labelText); mWorkspaceRoot = ResourcesPlugin.getWorkspace().getRoot(); if(initialRoot != null) { mSelectedPath = initialRoot.getFullPath(); getTextField().setText(mSelectedPath.toPortableString()); } } public IPath getSelectedPath() { return mSelectedPath; } @Override protected void onBrowseButtonPressed() { ContainerSelectionDialog dialog = new ContainerSelectionDialog( PlatformUI.getWorkbench().getModalDialogShellProvider().getShell(), (IContainer) mWorkspaceRoot.findMember(mSelectedPath), true, Messages.ContainerBrowserField_ContainerSelectionDialog_Message); dialog.setTitle(Messages.ContainerBrowserField_Title); dialog.setBlockOnOpen(true); if(dialog.open() == Window.OK) { mSelectedPath = (IPath) dialog.getResult()[0]; getTextField().setText(mSelectedPath.toPortableString()); } } @Override protected void onTextChanged(ModifyEvent e) { super.onTextChanged(e); mSelectedPath = Path.fromPortableString(getTextField().getText()); if(mSelectedPath.segmentCount() > 0) { IPath firstPart = mSelectedPath.uptoSegment(1); IContainer container = (IContainer) mWorkspaceRoot.findMember(firstPart); if(container != null && container instanceof IProject) { mSelectedProject = (IProject) container; } else { mSelectedProject = null; } } } }