From 2fe69083d166a9af90937b575736e2f5ad98c31e Mon Sep 17 00:00:00 2001 From: Makhnev Petr <51853996+i582@users.noreply.github.com> Date: Tue, 24 May 2022 11:50:04 +0300 Subject: [PATCH] Add article and tutorial about Navigation Bar * add docs about navigation bar for Custom Language Support topic * add info in `topics/intro/content_updates.md` * renumber articles after the added tutorial * add `custom_language_tutorial_header` to `structure_aware_navbar.md` --- .../language/SimpleStructureAwareNavbar.java | 44 +++++++++++++++++++ .../language/SimpleStructureViewFactory.java | 4 +- .../language/SimpleStructureViewModel.java | 12 +++-- .../src/main/resources/META-INF/plugin.xml | 1 + 4 files changed, 56 insertions(+), 5 deletions(-) create mode 100644 simple_language_plugin/src/main/java/org/intellij/sdk/language/SimpleStructureAwareNavbar.java diff --git a/simple_language_plugin/src/main/java/org/intellij/sdk/language/SimpleStructureAwareNavbar.java b/simple_language_plugin/src/main/java/org/intellij/sdk/language/SimpleStructureAwareNavbar.java new file mode 100644 index 000000000..12ae99e1f --- /dev/null +++ b/simple_language_plugin/src/main/java/org/intellij/sdk/language/SimpleStructureAwareNavbar.java @@ -0,0 +1,44 @@ +// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. + +package org.intellij.sdk.language; + +import com.intellij.icons.AllIcons; +import com.intellij.ide.navigationToolbar.StructureAwareNavBarModelExtension; +import com.intellij.lang.Language; +import org.intellij.sdk.language.psi.SimpleFile; +import org.intellij.sdk.language.psi.SimpleProperty; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import javax.swing.Icon; + +public class SimpleStructureAwareNavbar extends StructureAwareNavBarModelExtension { + @NotNull + @Override + protected Language getLanguage() { + return SimpleLanguage.INSTANCE; + } + + @Override + public @Nullable String getPresentableText(Object object) { + if (object instanceof SimpleFile) { + return ((SimpleFile) object).getName(); + } + if (object instanceof SimpleProperty) { + return ((SimpleProperty) object).getName(); + } + + return null; + } + + @Override + @Nullable + public Icon getIcon(Object object) { + if (object instanceof SimpleProperty) { + return AllIcons.Nodes.Property; + } + + return null; + } + +} diff --git a/simple_language_plugin/src/main/java/org/intellij/sdk/language/SimpleStructureViewFactory.java b/simple_language_plugin/src/main/java/org/intellij/sdk/language/SimpleStructureViewFactory.java index 1ac21ceef..3a9114443 100644 --- a/simple_language_plugin/src/main/java/org/intellij/sdk/language/SimpleStructureViewFactory.java +++ b/simple_language_plugin/src/main/java/org/intellij/sdk/language/SimpleStructureViewFactory.java @@ -1,4 +1,4 @@ -// Copyright 2000-2022 JetBrains s.r.o. and other contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.intellij.sdk.language; @@ -20,7 +20,7 @@ public class SimpleStructureViewFactory implements PsiStructureViewFactory { @NotNull @Override public StructureViewModel createStructureViewModel(@Nullable Editor editor) { - return new SimpleStructureViewModel(psiFile); + return new SimpleStructureViewModel(editor, psiFile); } }; } diff --git a/simple_language_plugin/src/main/java/org/intellij/sdk/language/SimpleStructureViewModel.java b/simple_language_plugin/src/main/java/org/intellij/sdk/language/SimpleStructureViewModel.java index 25ec9a46f..43cd3684e 100644 --- a/simple_language_plugin/src/main/java/org/intellij/sdk/language/SimpleStructureViewModel.java +++ b/simple_language_plugin/src/main/java/org/intellij/sdk/language/SimpleStructureViewModel.java @@ -1,4 +1,4 @@ -// Copyright 2000-2022 JetBrains s.r.o. and other contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.intellij.sdk.language; @@ -6,15 +6,17 @@ import com.intellij.ide.structureView.StructureViewModel; import com.intellij.ide.structureView.StructureViewModelBase; import com.intellij.ide.structureView.StructureViewTreeElement; import com.intellij.ide.util.treeView.smartTree.Sorter; +import com.intellij.openapi.editor.Editor; import com.intellij.psi.PsiFile; import org.intellij.sdk.language.psi.SimpleProperty; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; public class SimpleStructureViewModel extends StructureViewModelBase implements StructureViewModel.ElementInfoProvider { - public SimpleStructureViewModel(PsiFile psiFile) { - super(psiFile, new SimpleStructureViewElement(psiFile)); + public SimpleStructureViewModel(@Nullable Editor editor, PsiFile psiFile) { + super(psiFile, editor, new SimpleStructureViewElement(psiFile)); } @NotNull @@ -33,4 +35,8 @@ public class SimpleStructureViewModel extends StructureViewModelBase implements return element.getValue() instanceof SimpleProperty; } + @Override + protected Class @NotNull [] getSuitableClasses() { + return new Class[]{SimpleProperty.class}; + } } diff --git a/simple_language_plugin/src/main/resources/META-INF/plugin.xml b/simple_language_plugin/src/main/resources/META-INF/plugin.xml index ad434bd8a..174c97ca1 100644 --- a/simple_language_plugin/src/main/resources/META-INF/plugin.xml +++ b/simple_language_plugin/src/main/resources/META-INF/plugin.xml @@ -63,6 +63,7 @@ +