| /******************************************************************************* |
| * Copyright (c) 2000, 2017 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.dltk.ui.browsing; |
| |
| import java.util.Iterator; |
| |
| import org.eclipse.core.resources.ResourcesPlugin; |
| import org.eclipse.dltk.core.DLTKCore; |
| import org.eclipse.dltk.core.DLTKLanguageManager; |
| import org.eclipse.dltk.core.IDLTKLanguageToolkit; |
| import org.eclipse.dltk.core.IModelElement; |
| import org.eclipse.dltk.core.IProjectFragment; |
| import org.eclipse.dltk.core.IScriptModel; |
| import org.eclipse.dltk.core.IScriptProject; |
| import org.eclipse.dltk.internal.ui.actions.ProjectActionGroup; |
| import org.eclipse.dltk.ui.DLTKUIPlugin; |
| import org.eclipse.dltk.ui.PreferenceConstants; |
| import org.eclipse.dltk.ui.viewsupport.FilterUpdater; |
| import org.eclipse.dltk.ui.viewsupport.ProblemTreeViewer; |
| import org.eclipse.jface.viewers.IContentProvider; |
| import org.eclipse.jface.viewers.ISelection; |
| import org.eclipse.jface.viewers.IStructuredSelection; |
| import org.eclipse.jface.viewers.StructuredSelection; |
| import org.eclipse.jface.viewers.StructuredViewer; |
| import org.eclipse.jface.viewers.TreeViewer; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.ui.IWorkbenchPart; |
| |
| public class ProjectsView extends ScriptBrowsingPart { |
| |
| private FilterUpdater fFilterUpdater; |
| |
| @Override |
| protected StructuredViewer createViewer(Composite parent) { |
| ProblemTreeViewer result = new ProblemTreeViewer(parent, SWT.MULTI); |
| // ColoredViewersManager.install(result); |
| fFilterUpdater = new FilterUpdater(result); |
| ResourcesPlugin.getWorkspace() |
| .addResourceChangeListener(fFilterUpdater); |
| return result; |
| } |
| |
| @Override |
| public void dispose() { |
| if (fFilterUpdater != null) |
| ResourcesPlugin.getWorkspace() |
| .removeResourceChangeListener(fFilterUpdater); |
| super.dispose(); |
| } |
| |
| @Override |
| public <T> T getAdapter(Class<T> key) { |
| // if (key == IShowInTargetList.class) { |
| // return new IShowInTargetList() { |
| // public String[] getShowInTargetIds() { |
| // return new String[] { JavaUI.ID_PACKAGES, IPageLayout.ID_RES_NAV }; |
| // } |
| // |
| // }; |
| // } |
| return super.getAdapter(key); |
| } |
| |
| @Override |
| protected IContentProvider createContentProvider() { |
| return new ProjectAndSourceFolderContentProvider(this, getToolkit()); |
| } |
| |
| /** |
| * Returns the context ID for the Help system. |
| * |
| * @return the string used as ID for the Help context |
| */ |
| @Override |
| protected String getHelpContextId() { |
| // return IJavaHelpContextIds.PROJECTS_VIEW; |
| return ""; //$NON-NLS-1$ |
| } |
| |
| @Override |
| protected String getLinkToEditorKey() { |
| return PreferenceConstants.LINK_BROWSING_PROJECTS_TO_EDITOR; |
| } |
| |
| /** |
| * Adds additional listeners to this view. |
| */ |
| @Override |
| protected void hookViewerListeners() { |
| super.hookViewerListeners(); |
| getViewer().addDoubleClickListener(event -> { |
| TreeViewer viewer = (TreeViewer) getViewer(); |
| Object element = ((IStructuredSelection) event.getSelection()) |
| .getFirstElement(); |
| if (viewer.isExpandable(element)) |
| viewer.setExpandedState(element, |
| !viewer.getExpandedState(element)); |
| }); |
| } |
| |
| @Override |
| protected void setInitialInput() { |
| IModelElement root = DLTKCore |
| .create(DLTKUIPlugin.getWorkspace().getRoot()); |
| getViewer().setInput(root); |
| updateTitle(); |
| } |
| |
| /** |
| * Answers if the given <code>element</code> is a valid input for this part. |
| * |
| * @param element |
| * the object to test |
| * @return <true> if the given element is a valid input |
| */ |
| @Override |
| protected boolean isValidInput(Object element) { |
| return element instanceof IScriptModel; |
| } |
| |
| /** |
| * Answers if the given <code>element</code> is a valid element for this |
| * part. |
| * |
| * @param element |
| * the object to test |
| * @return <true> if the given element is a valid element |
| */ |
| @Override |
| protected boolean isValidElement(Object element) { |
| if (!(element instanceof IScriptProject |
| || element instanceof IProjectFragment)) { |
| return false; |
| } |
| IDLTKLanguageToolkit languageToolkit; |
| languageToolkit = DLTKLanguageManager |
| .getLanguageToolkit((IModelElement) element); |
| if (languageToolkit != null) { |
| return languageToolkit.getNatureId() |
| .equals(getToolkit().getNatureId()); |
| } |
| return false; |
| } |
| |
| /** |
| * Finds the element which has to be selected in this part. |
| * |
| * @param je |
| * the Java element which has the focus |
| * @return the element to select |
| */ |
| @Override |
| protected IModelElement findElementToSelect(IModelElement je) { |
| if (je == null) |
| return null; |
| |
| switch (je.getElementType()) { |
| case IModelElement.SCRIPT_MODEL: |
| return null; |
| case IModelElement.SCRIPT_PROJECT: |
| return je; |
| case IModelElement.PROJECT_FRAGMENT: |
| if (je.getElementName() |
| .equals(IProjectFragment.DEFAULT_PACKAGE_ROOT)) |
| return je.getParent(); |
| else |
| return je; |
| default: |
| return findElementToSelect(je.getParent()); |
| } |
| } |
| |
| @Override |
| protected void setInput(Object input) { |
| // Don't allow to clear input for this view |
| if (input != null) |
| super.setInput(input); |
| else |
| getViewer().setSelection(null); |
| } |
| |
| @Override |
| protected void createActions() { |
| super.createActions(); |
| fActionGroups.addGroup(new ProjectActionGroup(this)); |
| } |
| |
| /** |
| * Handles selection of LogicalPackage in Packages view. |
| * |
| * @see org.eclipse.ui.ISelectionListener#selectionChanged(org.eclipse.ui.IWorkbenchPart, |
| * org.eclipse.jface.viewers.ISelection) |
| * @since 2.1 |
| */ |
| @Override |
| public void selectionChanged(IWorkbenchPart part, ISelection selection) { |
| if (!needsToProcessSelectionChanged(part, selection)) |
| return; |
| |
| if (selection instanceof IStructuredSelection) { |
| IStructuredSelection sel = (IStructuredSelection) selection; |
| Iterator iter = sel.iterator(); |
| while (iter.hasNext()) { |
| Object selectedElement = iter.next(); |
| if (selectedElement instanceof LogicalPackage) { |
| selection = new StructuredSelection( |
| ((LogicalPackage) selectedElement) |
| .getScriptProject()); |
| break; |
| } |
| } |
| } |
| super.selectionChanged(part, selection); |
| } |
| } |