diff options
| author | Simon Bernard | 2014-11-13 17:27:35 +0000 |
|---|---|---|
| committer | Simon Bernard | 2015-04-16 14:33:50 +0000 |
| commit | d473c2a75363ace72dc833bf66e60655cebd286b (patch) | |
| tree | c927c2683a7df58d5ceb622bcdbd7e2ffb4dc76f | |
| parent | cb64b0e8d9fb8f5554bd75488475e9f46df42ef8 (diff) | |
| download | org.eclipse.dltk.core-d473c2a75363ace72dc833bf66e60655cebd286b.tar.gz org.eclipse.dltk.core-d473c2a75363ace72dc833bf66e60655cebd286b.tar.xz org.eclipse.dltk.core-d473c2a75363ace72dc833bf66e60655cebd286b.zip | |
bug 413346: [outline] Support StyledText in outline
Change-Id: Iaf43e167906724e0d86db4116a860b14921f4d25
Signed-off-by: Simon Bernard <sbernard@sierrawireless.com>
18 files changed, 427 insertions, 84 deletions
diff --git a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/internal/ui/editor/ScriptOutlinePage.java b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/internal/ui/editor/ScriptOutlinePage.java index fea3a000e..a2b4f8b50 100644 --- a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/internal/ui/editor/ScriptOutlinePage.java +++ b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/internal/ui/editor/ScriptOutlinePage.java @@ -49,9 +49,9 @@ import org.eclipse.dltk.ui.actions.MemberFilterActionGroup; import org.eclipse.dltk.ui.actions.OpenViewActionGroup; import org.eclipse.dltk.ui.actions.SearchActionGroup; import org.eclipse.dltk.ui.viewsupport.AppearanceAwareLabelProvider; -import org.eclipse.dltk.ui.viewsupport.DecoratingModelLabelProvider; import org.eclipse.dltk.ui.viewsupport.SourcePositionSorter; import org.eclipse.dltk.ui.viewsupport.StatusBarUpdater; +import org.eclipse.dltk.ui.viewsupport.StyledDecoratingModelLabelProvider; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.GroupMarker; import org.eclipse.jface.action.IAction; @@ -673,7 +673,7 @@ public class ScriptOutlinePage extends Page implements IContentOutlinePage, fOutlineViewer = new ScriptOutlineViewer(tree); initDragAndDrop(); fOutlineViewer.setContentProvider(new ChildrenProvider()); - fOutlineViewer.setLabelProvider(new DecoratingModelLabelProvider( + fOutlineViewer.setLabelProvider(new StyledDecoratingModelLabelProvider( lprovider)); Object[] listeners = fSelectionChangedListeners.getListeners(); diff --git a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/internal/ui/navigator/ScriptExplorerLabelProvider.java b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/internal/ui/navigator/ScriptExplorerLabelProvider.java index 5896189ba..fc5a4f223 100644 --- a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/internal/ui/navigator/ScriptExplorerLabelProvider.java +++ b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/internal/ui/navigator/ScriptExplorerLabelProvider.java @@ -23,6 +23,8 @@ import org.eclipse.dltk.ui.ScriptElementLabels; import org.eclipse.dltk.ui.viewsupport.AppearanceAwareLabelProvider; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.jface.viewers.StyledCellLabelProvider; +import org.eclipse.jface.viewers.StyledString; import org.eclipse.swt.graphics.Image; import org.eclipse.ui.IWorkingSet; @@ -79,6 +81,19 @@ public class ScriptExplorerLabelProvider extends AppearanceAwareLabelProvider { return super.getText(element); } + public StyledString getStyledText(Object element) { + String text = getSpecificText(element); + if (text != null) { + String decorated = decorateText(text, element); + if (decorated != null) { + return StyledCellLabelProvider.styleDecoratedString(decorated, + StyledString.DECORATIONS_STYLER, + new StyledString(text)); + } + } + return super.getStyledText(element); + } + private String getNameDelta(IScriptFolder parent, IScriptFolder fragment) { String prefix = parent.getElementName() + IScriptFolder.PACKAGE_DELIMITER; diff --git a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/internal/ui/scriptview/ScriptExplorerPart.java b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/internal/ui/scriptview/ScriptExplorerPart.java index 04b402786..e366637e1 100644 --- a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/internal/ui/scriptview/ScriptExplorerPart.java +++ b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/internal/ui/scriptview/ScriptExplorerPart.java @@ -59,11 +59,11 @@ import org.eclipse.dltk.ui.PreferenceConstants; import org.eclipse.dltk.ui.ScriptElementLabels; import org.eclipse.dltk.ui.actions.CustomFiltersActionGroup; import org.eclipse.dltk.ui.viewsupport.AppearanceAwareLabelProvider; -import org.eclipse.dltk.ui.viewsupport.DecoratingModelLabelProvider; import org.eclipse.dltk.ui.viewsupport.FilterUpdater; import org.eclipse.dltk.ui.viewsupport.IViewPartInputProvider; import org.eclipse.dltk.ui.viewsupport.ProblemTreeViewer; import org.eclipse.dltk.ui.viewsupport.StatusBarUpdater; +import org.eclipse.dltk.ui.viewsupport.StyledDecoratingModelLabelProvider; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IStatusLineManager; @@ -174,7 +174,7 @@ public class ScriptExplorerPart extends ViewPart implements private WorkingSetModel fWorkingSetModel; private ScriptExplorerLabelProvider fLabelProvider; - private DecoratingModelLabelProvider fDecoratingLabelProvider; + private StyledDecoratingModelLabelProvider fDecoratingLabelProvider; private ScriptExplorerContentProvider fContentProvider; private FilterUpdater fFilterUpdater; @@ -746,7 +746,7 @@ public class ScriptExplorerPart extends ViewPart implements fLabelProvider = createLabelProvider(); fLabelProvider.setIsFlatLayout(fIsCurrentLayoutFlat); - fDecoratingLabelProvider = new DecoratingModelLabelProvider( + fDecoratingLabelProvider = new StyledDecoratingModelLabelProvider( fLabelProvider, false, fIsCurrentLayoutFlat); fViewer.setLabelProvider(fDecoratingLabelProvider); // problem decoration provided by PackageLabelProvider diff --git a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/internal/ui/typehierarchy/MethodsViewer.java b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/internal/ui/typehierarchy/MethodsViewer.java index da8d9a203..422370055 100644 --- a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/internal/ui/typehierarchy/MethodsViewer.java +++ b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/internal/ui/typehierarchy/MethodsViewer.java @@ -19,8 +19,8 @@ import org.eclipse.dltk.ui.DLTKUIPlugin; import org.eclipse.dltk.ui.ScriptElementLabels; import org.eclipse.dltk.ui.actions.MemberFilterActionGroup; import org.eclipse.dltk.ui.actions.OpenAction; -import org.eclipse.dltk.ui.viewsupport.DecoratingModelLabelProvider; import org.eclipse.dltk.ui.viewsupport.ProblemTableViewer; +import org.eclipse.dltk.ui.viewsupport.StyledDecoratingModelLabelProvider; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.MenuManager; @@ -66,7 +66,8 @@ public class MethodsViewer extends ProblemTableViewer { fLabelProvider= new MethodsLabelProvider(lifeCycle, this, store); - setLabelProvider(new DecoratingModelLabelProvider(fLabelProvider, true)); + setLabelProvider(new StyledDecoratingModelLabelProvider(fLabelProvider, + true)); setContentProvider(new MethodsContentProvider(lifeCycle)); HierarchyViewerSorter sorter= new HierarchyViewerSorter(lifeCycle); diff --git a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/internal/ui/typehierarchy/TypeHierarchyViewer.java b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/internal/ui/typehierarchy/TypeHierarchyViewer.java index 38c052e36..bff79d456 100644 --- a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/internal/ui/typehierarchy/TypeHierarchyViewer.java +++ b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/internal/ui/typehierarchy/TypeHierarchyViewer.java @@ -13,8 +13,8 @@ import org.eclipse.core.runtime.Assert; import org.eclipse.dltk.core.IMember; import org.eclipse.dltk.core.IType; import org.eclipse.dltk.ui.ScriptElementLabels; -import org.eclipse.dltk.ui.viewsupport.DecoratingModelLabelProvider; import org.eclipse.dltk.ui.viewsupport.ProblemTreeViewer; +import org.eclipse.dltk.ui.viewsupport.StyledDecoratingModelLabelProvider; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.MenuManager; @@ -42,7 +42,8 @@ public abstract class TypeHierarchyViewer extends ProblemTreeViewer { fLabelProvider = new HierarchyLabelProvider(lifeCycle, store); - setLabelProvider(new DecoratingModelLabelProvider(fLabelProvider, true)); + setLabelProvider(new StyledDecoratingModelLabelProvider(fLabelProvider, + true)); setUseHashlookup(true); setContentProvider(contentProvider); diff --git a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/internal/ui/wizards/buildpath/newsourcepage/DialogPackageExplorer.java b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/internal/ui/wizards/buildpath/newsourcepage/DialogPackageExplorer.java index 0a703c236..12ccbea89 100644 --- a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/internal/ui/wizards/buildpath/newsourcepage/DialogPackageExplorer.java +++ b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/internal/ui/wizards/buildpath/newsourcepage/DialogPackageExplorer.java @@ -42,7 +42,7 @@ import org.eclipse.dltk.ui.ModelElementSorter; import org.eclipse.dltk.ui.ScriptElementImageProvider; import org.eclipse.dltk.ui.ScriptElementLabels; import org.eclipse.dltk.ui.viewsupport.AppearanceAwareLabelProvider; -import org.eclipse.dltk.ui.viewsupport.DecoratingModelLabelProvider; +import org.eclipse.dltk.ui.viewsupport.StyledDecoratingModelLabelProvider; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.MenuManager; @@ -392,7 +392,7 @@ public abstract class DialogPackageExplorer implements IMenuListener, | ScriptElementImageProvider.SMALL_ICONS, getPreferenceStore()); fPackageViewer.setContentProvider(contentProvider); - fPackageViewer.setLabelProvider(new DecoratingModelLabelProvider( + fPackageViewer.setLabelProvider(new StyledDecoratingModelLabelProvider( labelProvider, false)); } diff --git a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/internal/ui/workingsets/ScriptWorkingSetPage.java b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/internal/ui/workingsets/ScriptWorkingSetPage.java index f51343957..77ee2fdfe 100644 --- a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/internal/ui/workingsets/ScriptWorkingSetPage.java +++ b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/internal/ui/workingsets/ScriptWorkingSetPage.java @@ -19,11 +19,11 @@ import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.Assert; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.dltk.core.DLTKCore; -import org.eclipse.dltk.core.IScriptProject; import org.eclipse.dltk.core.IModelElement; import org.eclipse.dltk.core.IProjectFragment; import org.eclipse.dltk.core.IScriptFolder; import org.eclipse.dltk.core.IScriptModel; +import org.eclipse.dltk.core.IScriptProject; import org.eclipse.dltk.core.ModelException; import org.eclipse.dltk.internal.ui.actions.SelectionConverter; import org.eclipse.dltk.internal.ui.util.SWTUtil; @@ -33,7 +33,7 @@ import org.eclipse.dltk.ui.ModelElementSorter; import org.eclipse.dltk.ui.ScriptElementImageProvider; import org.eclipse.dltk.ui.ScriptElementLabels; import org.eclipse.dltk.ui.viewsupport.AppearanceAwareLabelProvider; -import org.eclipse.dltk.ui.viewsupport.DecoratingModelLabelProvider; +import org.eclipse.dltk.ui.viewsupport.StyledDecoratingModelLabelProvider; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.viewers.CheckStateChangedEvent; import org.eclipse.jface.viewers.CheckboxTreeViewer; @@ -140,7 +140,8 @@ public class ScriptWorkingSetPage extends WizardPage implements IWorkingSetPage DLTKUIPlugin.getDefault().getPreferenceStore() ); - fTree.setLabelProvider(new DecoratingModelLabelProvider(fScriptElementLabelProvider)); + fTree.setLabelProvider(new StyledDecoratingModelLabelProvider( + fScriptElementLabelProvider)); fTree.setSorter(new ModelElementSorter()); if (DLTKCore.DEBUG) { System.err.println("Add empty inner package filter support here..."); //$NON-NLS-1$ diff --git a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/browsing/ScriptBrowsingPart.java b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/browsing/ScriptBrowsingPart.java index 1e2323ecb..95dfc2033 100644 --- a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/browsing/ScriptBrowsingPart.java +++ b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/browsing/ScriptBrowsingPart.java @@ -60,6 +60,7 @@ import org.eclipse.dltk.ui.viewsupport.IViewPartInputProvider; import org.eclipse.dltk.ui.viewsupport.ProblemTableViewer; import org.eclipse.dltk.ui.viewsupport.ScriptUILabelProvider; import org.eclipse.dltk.ui.viewsupport.StatusBarUpdater; +import org.eclipse.dltk.ui.viewsupport.StyledDecoratingModelLabelProvider; import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; @@ -335,7 +336,7 @@ public abstract class ScriptBrowsingPart extends ViewPart implements initDragAndDrop(); fLabelProvider = createLabelProvider(); - fViewer.setLabelProvider(createDecoratingLabelProvider(fLabelProvider)); + fViewer.setLabelProvider(createDelegatingLabelProvider(fLabelProvider)); fViewer.setComparator(createModelElementComparator()); fViewer.setUseHashlookup(true); @@ -418,13 +419,28 @@ public abstract class ScriptBrowsingPart extends ViewPart implements }; } + /** + * @since 5.2 + */ + protected ILabelProvider createDelegatingLabelProvider( + ScriptUILabelProvider provider) { + DecoratingModelLabelProvider labelprovider = createDecoratingLabelProvider(provider); + if (labelprovider != null) + return labelprovider; + return new StyledDecoratingModelLabelProvider(provider); + } + + /** + * @deprecated override + * org.eclipse.dltk.ui.browsing.ScriptBrowsingPart.createDelegatingLabelProvider (ScriptUILabelProvider) instead + */ protected DecoratingModelLabelProvider createDecoratingLabelProvider( ScriptUILabelProvider provider) { // XXX: Work in progress for problem decorator being a workbench // decorator// // return new ExcludingDecoratingLabelProvider(provider, decorationMgr, // "org.eclipse.jdt.ui.problem.decorator"); //$NON-NLS-1$ - return new DecoratingModelLabelProvider(provider); + return null; } protected ModelElementSorter createModelElementComparator() { diff --git a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/text/ScriptOutlineInformationControl.java b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/text/ScriptOutlineInformationControl.java index 446d39174..837fe6318 100644 --- a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/text/ScriptOutlineInformationControl.java +++ b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/text/ScriptOutlineInformationControl.java @@ -38,6 +38,7 @@ import org.eclipse.dltk.ui.ProblemsLabelDecorator; import org.eclipse.dltk.ui.ScriptElementLabels; import org.eclipse.dltk.ui.viewsupport.AppearanceAwareLabelProvider; import org.eclipse.dltk.ui.viewsupport.MemberFilter; +import org.eclipse.dltk.ui.viewsupport.StyledDecoratingModelLabelProvider; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.IMenuManager; @@ -533,7 +534,8 @@ public class ScriptOutlineInformationControl extends AbstractInformationControl * OverrideIndicatorLabelDecorator(null)); */ - treeViewer.setLabelProvider(fInnerLabelProvider); + treeViewer.setLabelProvider(new StyledDecoratingModelLabelProvider( + fInnerLabelProvider)); fLexicalSortingAction = new LexicalSortingAction(treeViewer); fSortByDefiningTypeAction = new SortByDefiningTypeAction(treeViewer); diff --git a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/text/ScriptSourceViewerConfiguration.java b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/text/ScriptSourceViewerConfiguration.java index 4594abddf..e691517d0 100644 --- a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/text/ScriptSourceViewerConfiguration.java +++ b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/text/ScriptSourceViewerConfiguration.java @@ -507,6 +507,8 @@ public abstract class ScriptSourceViewerConfiguration extends getContentAssistPreference().configure(assistant, fPreferenceStore); + assistant.enableColoredLabels(true); + return assistant; } diff --git a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/text/completion/AbstractScriptCompletionProposal.java b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/text/completion/AbstractScriptCompletionProposal.java index c33e604fa..54ea703db 100644 --- a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/text/completion/AbstractScriptCompletionProposal.java +++ b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/text/completion/AbstractScriptCompletionProposal.java @@ -48,6 +48,7 @@ import org.eclipse.jface.text.contentassist.ICompletionProposalExtension; import org.eclipse.jface.text.contentassist.ICompletionProposalExtension2; import org.eclipse.jface.text.contentassist.ICompletionProposalExtension3; import org.eclipse.jface.text.contentassist.ICompletionProposalExtension5; +import org.eclipse.jface.text.contentassist.ICompletionProposalExtension6; import org.eclipse.jface.text.contentassist.IContextInformation; import org.eclipse.jface.text.link.ILinkedModeListener; import org.eclipse.jface.text.link.LinkedModeModel; @@ -56,6 +57,7 @@ import org.eclipse.jface.text.link.LinkedModeUI.ExitFlags; import org.eclipse.jface.text.link.LinkedModeUI.IExitPolicy; import org.eclipse.jface.text.link.LinkedPosition; import org.eclipse.jface.text.link.LinkedPositionGroup; +import org.eclipse.jface.viewers.StyledString; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.StyleRange; import org.eclipse.swt.custom.StyledText; @@ -76,7 +78,7 @@ import org.osgi.framework.Bundle; public abstract class AbstractScriptCompletionProposal implements IScriptCompletionProposal, ICompletionProposalExtension, ICompletionProposalExtension2, ICompletionProposalExtension3, - ICompletionProposalExtension5 { + ICompletionProposalExtension5, ICompletionProposalExtension6 { /** * A class to simplify tracking a reference position in a document. @@ -178,7 +180,7 @@ public abstract class AbstractScriptCompletionProposal implements } - private String fDisplayString; + private StyledString fDisplayString; private String fReplacementString; private int fReplacementOffset; private int fReplacementLength; @@ -451,9 +453,25 @@ public abstract class AbstractScriptCompletionProposal implements * @see ICompletionProposal#getDisplayString() */ public String getDisplayString() { + if (fDisplayString != null) + return fDisplayString.toString(); + return null; + } + + /** + * @since 5.2 + */ + public StyledString getStyledDisplayString() { return fDisplayString; } + /** + * @since 5.2 + */ + public void setStyledDisplayString(StyledString text) { + fDisplayString = text; + } + /* * @see ICompletionProposal#getAdditionalProposalInfo() */ @@ -973,7 +991,7 @@ public abstract class AbstractScriptCompletionProposal implements } protected void setDisplayString(String string) { - fDisplayString = string; + fDisplayString = new StyledString(string); } @Override diff --git a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/text/completion/ICompletionProposalLabelProviderExtension.java b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/text/completion/ICompletionProposalLabelProviderExtension.java new file mode 100644 index 000000000..7f45adf8f --- /dev/null +++ b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/text/completion/ICompletionProposalLabelProviderExtension.java @@ -0,0 +1,29 @@ +/*******************************************************************************
+ * Copyright (c) 2015 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
+ *******************************************************************************/
+package org.eclipse.dltk.ui.text.completion;
+
+import org.eclipse.dltk.core.CompletionProposal;
+import org.eclipse.jface.viewers.StyledString;
+
+/**
+ * @since 5.2
+ */
+public interface ICompletionProposalLabelProviderExtension {
+
+ StyledString createStyledFieldProposalLabel(CompletionProposal proposal);
+
+ StyledString createStyledLabel(CompletionProposal fProposal);
+
+ StyledString createStyledKeywordLabel(CompletionProposal proposal);
+
+ StyledString createStyledSimpleLabel(CompletionProposal proposal);
+
+ StyledString createStyledTypeProposalLabel(CompletionProposal proposal);
+
+ StyledString createStyledSimpleLabelWithType(CompletionProposal proposal);
+}
diff --git a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/text/completion/LazyScriptCompletionProposal.java b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/text/completion/LazyScriptCompletionProposal.java index 43fae2a77..21ac22973 100644 --- a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/text/completion/LazyScriptCompletionProposal.java +++ b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/text/completion/LazyScriptCompletionProposal.java @@ -17,6 +17,7 @@ import org.eclipse.dltk.core.CompletionProposal; import org.eclipse.dltk.ui.DLTKUIPlugin; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.contentassist.IContextInformation; +import org.eclipse.jface.viewers.StyledString; import org.eclipse.swt.graphics.Image; public abstract class LazyScriptCompletionProposal extends @@ -48,6 +49,7 @@ public abstract class LazyScriptCompletionProposal extends * The invocation context of this completion proposal. */ protected final ScriptContentAssistInvocationContext fInvocationContext; + private boolean fDisplayStyledStringComputed; public LazyScriptCompletionProposal(CompletionProposal proposal, ScriptContentAssistInvocationContext context) { @@ -199,6 +201,33 @@ public abstract class LazyScriptCompletionProposal extends } @Override + public final StyledString getStyledDisplayString() { + if (!fDisplayStyledStringComputed) { + setStyledDisplayString(computeStyledDisplayString()); + } + return super.getStyledDisplayString(); + } + + @Override + public final void setStyledDisplayString(StyledString string) { + fDisplayStyledStringComputed = true; + super.setStyledDisplayString(string); + } + + /** + * @since 5.2 + */ + protected StyledString computeStyledDisplayString() { + CompletionProposalLabelProvider labelProvider = fInvocationContext + .getLabelProvider(); + if (labelProvider instanceof ICompletionProposalLabelProviderExtension) + return ((ICompletionProposalLabelProviderExtension) labelProvider) + .createStyledLabel(fProposal); + else + return new StyledString(labelProvider.createLabel(fProposal)); + } + + @Override public final String getAdditionalProposalInfo() { return super.getAdditionalProposalInfo(); } diff --git a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/text/completion/ScriptCompletionProposal.java b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/text/completion/ScriptCompletionProposal.java index 4cc967428..4ebddef3d 100644 --- a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/text/completion/ScriptCompletionProposal.java +++ b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/text/completion/ScriptCompletionProposal.java @@ -12,6 +12,7 @@ package org.eclipse.dltk.ui.text.completion; import org.eclipse.core.runtime.Assert; import org.eclipse.jface.text.IDocument; +import org.eclipse.jface.viewers.StyledString; import org.eclipse.swt.graphics.Image; public class ScriptCompletionProposal extends @@ -66,6 +67,36 @@ public class ScriptCompletionProposal extends public ScriptCompletionProposal(String replacementString, int replacementOffset, int replacementLength, Image image, String displayString, int relevance, boolean indoc) { + this(replacementString, replacementOffset, replacementLength, image, + new StyledString(displayString), relevance, false); + } + + /** + * Creates a new completion proposal. All fields are initialized based on + * the provided information. + * + * @param replacementString + * the actual string to be inserted into the document + * @param replacementOffset + * the offset of the text to be replaced + * @param replacementLength + * the length of the text to be replaced + * @param image + * the image to display for this proposal + * @param displayString + * the StyledString to be displayed for the proposal If set to + * <code>null</code>, the replacement string will be taken as + * display string. + * @param relevance + * the relevance + * @param indoc + * <code>true</code> for a javadoc proposal + * @since 5.2 + * + */ + public ScriptCompletionProposal(String replacementString, + int replacementOffset, int replacementLength, Image image, + StyledString displayString, int relevance, boolean indoc) { Assert.isNotNull(replacementString); Assert.isTrue(replacementOffset >= 0); Assert.isTrue(replacementLength >= 0); @@ -74,12 +105,14 @@ public class ScriptCompletionProposal extends setReplacementOffset(replacementOffset); setReplacementLength(replacementLength); setImage(image); - setDisplayString(displayString == null ? replacementString + setStyledDisplayString(displayString == null ? new StyledString( + replacementString) : displayString); setRelevance(relevance); setCursorPosition(replacementString.length()); setInDoc(indoc); - setSortString(displayString == null ? replacementString : displayString); + setSortString(displayString == null ? replacementString : displayString + .toString()); } @Override diff --git a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/text/completion/ScriptCompletionProposalCollector.java b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/text/completion/ScriptCompletionProposalCollector.java index 5ccaf61a8..88a195407 100644 --- a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/text/completion/ScriptCompletionProposalCollector.java +++ b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/text/completion/ScriptCompletionProposalCollector.java @@ -37,6 +37,7 @@ import org.eclipse.dltk.ui.DLTKUIPlugin; import org.eclipse.dltk.ui.viewsupport.ImageDescriptorRegistry; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.text.contentassist.IContextInformation; +import org.eclipse.jface.viewers.StyledString; import org.eclipse.swt.graphics.Image; /** @@ -655,6 +656,7 @@ public abstract class ScriptCompletionProposalCollector extends image, displayString, relevance, false); } + @Deprecated protected ScriptCompletionProposal createScriptCompletionProposal( String completion, int replaceStart, int length, Image image, String displayString, int relevance, boolean isInDoc) { @@ -662,6 +664,16 @@ public abstract class ScriptCompletionProposalCollector extends image, displayString, relevance, isInDoc); } + /** + * @since 5.2 + */ + protected ScriptCompletionProposal createScriptCompletionProposal( + String completion, int replaceStart, int length, Image image, + StyledString displayString, int relevance, boolean isInDoc) { + return new ScriptCompletionProposal(completion, replaceStart, length, + image, displayString, relevance, isInDoc); + } + protected ScriptCompletionProposal createOverrideCompletionProposal( IScriptProject scriptProject, ISourceModule compilationUnit, String name, String[] paramTypes, int start, int length, @@ -675,17 +687,27 @@ public abstract class ScriptCompletionProposalCollector extends String completion = String.valueOf(proposal.getCompletion()); int start = proposal.getReplaceStart(); int length = getLength(proposal); - String label = getLabelProvider().createFieldProposalLabel(proposal); + int relevance = computeRelevance(proposal); + + ScriptCompletionProposal scriptProposal; + + CompletionProposalLabelProvider labelProvider = getLabelProvider(); Image image = getImage(getLabelProvider().createFieldImageDescriptor( proposal)); - int relevance = computeRelevance(proposal); - // CompletionContext context = getContext(); - ScriptCompletionProposal scriptProposal = createScriptCompletionProposal( - completion, start, length, image, label, relevance, /* - * context - * .isInDoc - * () - */false); + + if (labelProvider instanceof ICompletionProposalLabelProviderExtension) { + + StyledString label = ((ICompletionProposalLabelProviderExtension) getLabelProvider()) + .createStyledFieldProposalLabel(proposal); + scriptProposal = createScriptCompletionProposal(completion, start, + length, image, label, relevance, false); + } else { + String label = getLabelProvider() + .createFieldProposalLabel(proposal); + scriptProposal = createScriptCompletionProposal(completion, start, + length, image, label, relevance, false); + } + if (fScriptProject != null) scriptProposal.setProposalInfo(new FieldProposalInfo( fScriptProject, proposal)); @@ -698,11 +720,25 @@ public abstract class ScriptCompletionProposalCollector extends String completion = String.valueOf(proposal.getCompletion()); int start = proposal.getReplaceStart(); int length = getLength(proposal); - String label = getLabelProvider().createKeywordLabel(proposal); - Image img = getImage(getLabelProvider().createImageDescriptor(proposal)); int relevance = computeRelevance(proposal); - ScriptCompletionProposal scriptProposal = createScriptCompletionProposal( - completion, start, length, img, label, relevance); + + ScriptCompletionProposal scriptProposal; + + CompletionProposalLabelProvider labelProvider = getLabelProvider(); + Image image = getImage(getLabelProvider().createImageDescriptor( + proposal)); + + if (labelProvider instanceof ICompletionProposalLabelProviderExtension) { + + StyledString label = ((ICompletionProposalLabelProviderExtension) getLabelProvider()) + .createStyledKeywordLabel(proposal); + scriptProposal = createScriptCompletionProposal(completion, start, + length, image, label, relevance, false); + } else { + String label = getLabelProvider().createKeywordLabel(proposal); + scriptProposal = createScriptCompletionProposal(completion, start, + length, image, label, relevance, false); + } if (fScriptProject != null) { scriptProposal.setProposalInfo(new ProposalInfo(fScriptProject, @@ -717,11 +753,27 @@ public abstract class ScriptCompletionProposalCollector extends String completion = String.valueOf(proposal.getCompletion()); int start = proposal.getReplaceStart(); int length = getLength(proposal); - String label = getLabelProvider().createSimpleLabel(proposal); int relevance = computeRelevance(proposal); - return createScriptCompletionProposal(completion, start, length, - getImage(getLabelProvider().createImageDescriptor(proposal)), - label, relevance); + + ScriptCompletionProposal scriptProposal; + + CompletionProposalLabelProvider labelProvider = getLabelProvider(); + Image image = getImage(getLabelProvider().createImageDescriptor( + proposal)); + + if (labelProvider instanceof ICompletionProposalLabelProviderExtension) { + + StyledString label = ((ICompletionProposalLabelProviderExtension) getLabelProvider()) + .createStyledSimpleLabel(proposal); + scriptProposal = createScriptCompletionProposal(completion, start, + length, image, label, relevance, false); + } else { + String label = getLabelProvider().createSimpleLabel(proposal); + scriptProposal = createScriptCompletionProposal(completion, start, + length, image, label, relevance, false); + } + + return scriptProposal; } private IScriptCompletionProposal createLabelProposal( @@ -729,11 +781,24 @@ public abstract class ScriptCompletionProposalCollector extends String completion = String.valueOf(proposal.getCompletion()); int start = proposal.getReplaceStart(); int length = getLength(proposal); - String label = getLabelProvider().createSimpleLabel(proposal); int relevance = computeRelevance(proposal); - return createScriptCompletionProposal(completion, start, length, null, - label, relevance); - // return null; + + ScriptCompletionProposal scriptProposal; + + CompletionProposalLabelProvider labelProvider = getLabelProvider(); + + if (labelProvider instanceof ICompletionProposalLabelProviderExtension) { + + StyledString label = ((ICompletionProposalLabelProviderExtension) getLabelProvider()) + .createStyledSimpleLabel(proposal); + scriptProposal = createScriptCompletionProposal(completion, start, + length, null, label, relevance, false); + } else { + String label = getLabelProvider().createSimpleLabel(proposal); + scriptProposal = createScriptCompletionProposal(completion, start, + length, null, label, relevance, false); + } + return scriptProposal; } private IScriptCompletionProposal createLocalVariableProposal( @@ -741,14 +806,29 @@ public abstract class ScriptCompletionProposalCollector extends String completion = String.valueOf(proposal.getCompletion()); int start = proposal.getReplaceStart(); int length = getLength(proposal); + int relevance = computeRelevance(proposal); + + ScriptCompletionProposal scriptProposal; + + CompletionProposalLabelProvider labelProvider = getLabelProvider(); Image image = getImage(getLabelProvider().createLocalImageDescriptor( proposal)); - String label = getLabelProvider().createSimpleLabelWithType(proposal); - int relevance = computeRelevance(proposal); - final ScriptCompletionProposal javaProposal = createScriptCompletionProposal( - completion, start, length, image, label, relevance); - javaProposal.setTriggerCharacters(getVarTrigger()); - return javaProposal; + + if (labelProvider instanceof ICompletionProposalLabelProviderExtension) { + + StyledString label = ((ICompletionProposalLabelProviderExtension) getLabelProvider()) + .createStyledSimpleLabelWithType(proposal); + scriptProposal = createScriptCompletionProposal(completion, start, + length, image, label, relevance, false); + } else { + String label = getLabelProvider().createSimpleLabelWithType( + proposal); + scriptProposal = createScriptCompletionProposal(completion, start, + length, image, label, relevance, false); + } + + scriptProposal.setTriggerCharacters(getVarTrigger()); + return scriptProposal; } /** @@ -815,24 +895,33 @@ public abstract class ScriptCompletionProposalCollector extends } protected IScriptCompletionProposal createTypeProposal( - CompletionProposal typeProposal) { + CompletionProposal proposal) { - String completion = typeProposal.getCompletion(); - int replaceStart = typeProposal.getReplaceStart(); - int length = typeProposal.getReplaceEnd() - - typeProposal.getReplaceStart(); - Image image = getImage(getLabelProvider().createTypeImageDescriptor( - typeProposal)); + String completion = proposal.getCompletion(); + int start = proposal.getReplaceStart(); + int length = proposal.getReplaceEnd() - proposal.getReplaceStart(); + int relevance = computeRelevance(proposal); - String displayString = getLabelProvider().createTypeProposalLabel( - typeProposal); + ScriptCompletionProposal scriptProposal; - ScriptCompletionProposal scriptProposal = createScriptCompletionProposal( - completion, replaceStart, length, image, displayString, 0); + CompletionProposalLabelProvider labelProvider = getLabelProvider(); + Image image = getImage(getLabelProvider().createTypeImageDescriptor( + proposal)); - scriptProposal.setRelevance(computeRelevance(typeProposal)); + if (labelProvider instanceof ICompletionProposalLabelProviderExtension) { + + StyledString label = ((ICompletionProposalLabelProviderExtension) getLabelProvider()) + .createStyledTypeProposalLabel(proposal); + scriptProposal = createScriptCompletionProposal(completion, start, + length, image, label, relevance, false); + } else { + String label = getLabelProvider().createTypeProposalLabel(proposal); + scriptProposal = createScriptCompletionProposal(completion, start, + length, image, label, relevance, false); + } scriptProposal.setProposalInfo(new TypeProposalInfo(fScriptProject, - typeProposal)); + proposal)); + return scriptProposal; } diff --git a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/viewsupport/DecoratingModelLabelProvider.java b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/viewsupport/DecoratingModelLabelProvider.java index 91de16276..e1baab600 100644 --- a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/viewsupport/DecoratingModelLabelProvider.java +++ b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/viewsupport/DecoratingModelLabelProvider.java @@ -16,6 +16,9 @@ import org.eclipse.jface.viewers.IColorProvider; import org.eclipse.swt.graphics.Color; import org.eclipse.ui.PlatformUI; +/** + * @deprecated use StyledDecoratingModelLabelProvider instead + */ public class DecoratingModelLabelProvider extends DecoratingLabelProvider implements IColorProvider { diff --git a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/viewsupport/ScriptUILabelProvider.java b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/viewsupport/ScriptUILabelProvider.java index 6c2b43e81..257b84650 100644 --- a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/viewsupport/ScriptUILabelProvider.java +++ b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/viewsupport/ScriptUILabelProvider.java @@ -24,17 +24,20 @@ import org.eclipse.dltk.ui.ScriptElementImageProvider; import org.eclipse.dltk.ui.ScriptElementLabels; import org.eclipse.jface.resource.CompositeImageDescriptor; import org.eclipse.jface.util.SafeRunnable; +import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider; import org.eclipse.jface.viewers.IColorProvider; import org.eclipse.jface.viewers.ILabelDecorator; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.LabelProviderChangedEvent; +import org.eclipse.jface.viewers.StyledCellLabelProvider; +import org.eclipse.jface.viewers.StyledString; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.ImageData; import org.eclipse.swt.graphics.Point; -public class ScriptUILabelProvider implements ILabelProvider, IColorProvider { +public class ScriptUILabelProvider implements ILabelProvider, IColorProvider, IStyledLabelProvider { protected ListenerList fListeners = new ListenerList(1); @@ -200,27 +203,10 @@ public class ScriptUILabelProvider implements ILabelProvider, IColorProvider { } public String getText(Object element) { - ILabelProvider[] providers = getProviders(element); - String result = null; - if (providers != null) { - for (int i = 0; i < providers.length; i++) { - String text = providers[i].getText(element); - if (text != null) { - result = text; - break; - } - } - } - if (result == null) { - result = ScriptElementLabels.getDefault().getTextLabel(element, - evaluateTextFlags(element)); - } - - if (result.length() == 0 && (element instanceof IStorage)) { - result = fStorageLabelProvider.getText(element); - } - - return decorateText(result, element); + StyledString styledText = getStyledText(element); + if (styledText != null) + return styledText.toString(); + return null; } private ILabelProvider[] getProviders(Object element) { @@ -337,4 +323,42 @@ public class ScriptUILabelProvider implements ILabelProvider, IColorProvider { } return text; } + + /** + * @since 5.2 + */ + public StyledString getStyledText(Object element) { + ILabelProvider[] providers = getProviders(element); + StyledString result = null; + if (providers != null) { + for (int i = 0; i < providers.length; i++) { + if (providers[i] instanceof IStyledLabelProvider) { + StyledString string = ((IStyledLabelProvider) providers[i]).getStyledText(element); + if (string != null) { + result = string; + break; + } + } else { + String text = providers[i].getText(element); + if (text != null) { + result = new StyledString(text); + break; + } + } + } + } + if (result == null) { + result = new StyledString(ScriptElementLabels.getDefault().getTextLabel(element, evaluateTextFlags(element))); + } + + if (result.length() == 0 && (element instanceof IStorage)) { + result = new StyledString(fStorageLabelProvider.getText(element)); + } + + String decorated = decorateText(result.getString(), element); + if (decorated != null) { + return StyledCellLabelProvider.styleDecoratedString(decorated, StyledString.DECORATIONS_STYLER, result); + } + return result; + } } diff --git a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/viewsupport/StyledDecoratingModelLabelProvider.java b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/viewsupport/StyledDecoratingModelLabelProvider.java new file mode 100644 index 000000000..ecb027a74 --- /dev/null +++ b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/viewsupport/StyledDecoratingModelLabelProvider.java @@ -0,0 +1,80 @@ +/******************************************************************************* + * Copyright (c) 2015 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 + * + *******************************************************************************/ +package org.eclipse.dltk.ui.viewsupport; + +import org.eclipse.dltk.ui.ProblemsLabelDecorator; +import org.eclipse.jface.viewers.DecoratingStyledCellLabelProvider; +import org.eclipse.jface.viewers.DecorationContext; +import org.eclipse.jface.viewers.ILabelProvider; +import org.eclipse.ui.PlatformUI; + +/** + * a DecoratingModelLabelProvider which support StyledText + * + * replace org.eclipse.dltk.ui.viewsupport.DecoratingModelLabelProvider + * + * @since 5.2 + */ +public class StyledDecoratingModelLabelProvider extends DecoratingStyledCellLabelProvider implements ILabelProvider { + + /** + * Decorating label provider for DLTK. Combines a ScriptUILabelProvider with + * problem and override indicuator with the workbench decorator (label + * decorator extension point). + */ + public StyledDecoratingModelLabelProvider(ScriptUILabelProvider labelProvider) { + this(labelProvider, true); + } + + /** + * Decorating label provider for dltk. Combines a ScriptUILabelProvider (if + * enabled with problem indicator) with the workbench decorator (label + * decorator extension point). + */ + public StyledDecoratingModelLabelProvider(ScriptUILabelProvider labelProvider, + boolean errorTick) { + this(labelProvider, errorTick, true); + } + + /** + * Decorating label provider for dltk. Combines a ScriptUILabelProvider (if + * enabled with problem indicator) with the workbench decorator (label + * decorator extension point). + */ + public StyledDecoratingModelLabelProvider(ScriptUILabelProvider labelProvider, + boolean errorTick, boolean flatPackageMode) { + super(labelProvider, PlatformUI.getWorkbench().getDecoratorManager() + .getLabelDecorator(),null); + + if (errorTick) { + labelProvider.addLabelDecorator(new ProblemsLabelDecorator(null)); + } + setFlatPackageMode(flatPackageMode); + } + + /** + * Tells the label decorator if the view presents packages flat or + * hierarchical. + * + * @param enable + * If set, packages are presented in flat mode. + */ + public void setFlatPackageMode(boolean enable) { + if (enable) { + setDecorationContext(DecorationContext.DEFAULT_CONTEXT); + } else { + setDecorationContext(DecorationContext.DEFAULT_CONTEXT); + // TODO setDecorationContext(HierarchicalDecorationContext.CONTEXT); + } + } + + public String getText(Object element) { + return getStyledText(element).toString(); + } +}
\ No newline at end of file |
