mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
LeftRightRenderer: prefer composition over inheritance
GitOrigin-RevId: b03ef05a09c70c5828d1529c31d34ee9cb52c786
This commit is contained in:
committed by
intellij-monorepo-bot
parent
32c51f0e31
commit
08f7fd4202
+24
-34
@@ -1,4 +1,4 @@
|
||||
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
// Copyright 2000-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package com.intellij.codeInsight.hint;
|
||||
|
||||
import com.intellij.application.options.CodeStyle;
|
||||
@@ -253,43 +253,33 @@ public class ImplementationViewComponent extends JPanel {
|
||||
}
|
||||
|
||||
private static ListCellRenderer<FileDescriptor> createRenderer(Project project) {
|
||||
return new LeftRightRenderer<>() {
|
||||
@NotNull
|
||||
ListCellRenderer<FileDescriptor> mainRenderer = new ColoredListCellRenderer<>() {
|
||||
@Override
|
||||
protected ListCellRenderer<FileDescriptor> getMainRenderer() {
|
||||
return new ColoredListCellRenderer<>() {
|
||||
@Override
|
||||
protected void customizeCellRenderer(@NotNull JList<? extends FileDescriptor> list,
|
||||
FileDescriptor value, int index, boolean selected, boolean hasFocus) {
|
||||
if (value != null) {
|
||||
ImplementationViewElement element = value.myElement;
|
||||
setIcon(getIconForFile(value.myFile, project));
|
||||
append(element.getPresentableText());
|
||||
String presentation = element.getContainerPresentation();
|
||||
if (presentation != null) {
|
||||
append(" ");
|
||||
append(StringUtil.trimStart(StringUtil.trimEnd(presentation, ")"), "("), SimpleTextAttributes.GRAYED_ATTRIBUTES);
|
||||
}
|
||||
}
|
||||
protected void customizeCellRenderer(@NotNull JList<? extends FileDescriptor> list,
|
||||
FileDescriptor value, int index, boolean selected, boolean hasFocus) {
|
||||
if (value != null) {
|
||||
ImplementationViewElement element = value.myElement;
|
||||
setIcon(getIconForFile(value.myFile, project));
|
||||
append(element.getPresentableText());
|
||||
String presentation = element.getContainerPresentation();
|
||||
if (presentation != null) {
|
||||
append(" ");
|
||||
append(StringUtil.trimStart(StringUtil.trimEnd(presentation, ")"), "("), SimpleTextAttributes.GRAYED_ATTRIBUTES);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
protected ListCellRenderer<FileDescriptor> getRightRenderer() {
|
||||
return new SimpleListCellRenderer<>() {
|
||||
@Override
|
||||
public void customize(@NotNull JList<? extends FileDescriptor> list,
|
||||
FileDescriptor value, int index, boolean selected, boolean hasFocus) {
|
||||
if (value != null) {
|
||||
setText(value.myElement.getLocationText());
|
||||
setIcon(value.myElement.getLocationIcon());
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
};
|
||||
ListCellRenderer<FileDescriptor> rightRenderer = new SimpleListCellRenderer<>() {
|
||||
@Override
|
||||
public void customize(@NotNull JList<? extends FileDescriptor> list,
|
||||
FileDescriptor value, int index, boolean selected, boolean hasFocus) {
|
||||
if (value != null) {
|
||||
setText(value.myElement.getLocationText());
|
||||
setIcon(value.myElement.getLocationIcon());
|
||||
}
|
||||
}
|
||||
};
|
||||
return new LeftRightRenderer<>(mainRenderer, rightRenderer);
|
||||
}
|
||||
|
||||
@TestOnly
|
||||
|
||||
@@ -14,10 +14,10 @@ import javax.swing.ListCellRenderer
|
||||
* [mainRenderer] component is aligned to the left, [rightRenderer] component is aligned to the right.
|
||||
* This renderer uses background from [mainRenderer] component.
|
||||
*/
|
||||
abstract class LeftRightRenderer<T> : ListCellRenderer<T> {
|
||||
|
||||
protected abstract val mainRenderer: ListCellRenderer<T>
|
||||
protected abstract val rightRenderer: ListCellRenderer<T>
|
||||
class LeftRightRenderer<T>(
|
||||
private val mainRenderer: ListCellRenderer<T>,
|
||||
private val rightRenderer: ListCellRenderer<T>,
|
||||
) : ListCellRenderer<T> {
|
||||
|
||||
private val spacer = JPanel().apply {
|
||||
border = JBUI.Borders.empty(0, 2)
|
||||
@@ -25,11 +25,11 @@ abstract class LeftRightRenderer<T> : ListCellRenderer<T> {
|
||||
|
||||
private val component = JPanel(BorderLayout())
|
||||
|
||||
final override fun getListCellRendererComponent(list: JList<out T>,
|
||||
value: T,
|
||||
index: Int,
|
||||
isSelected: Boolean,
|
||||
cellHasFocus: Boolean): Component {
|
||||
override fun getListCellRendererComponent(list: JList<out T>,
|
||||
value: T,
|
||||
index: Int,
|
||||
isSelected: Boolean,
|
||||
cellHasFocus: Boolean): Component {
|
||||
val mainComponent = mainRenderer.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus)
|
||||
val rightComponent = rightRenderer.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus)
|
||||
mainComponent.background.let {
|
||||
|
||||
Reference in New Issue
Block a user