From 90b415257814d27111c2fffbf22d5e9fdf248bf9 Mon Sep 17 00:00:00 2001 From: "Egor.Ushakov" Date: Tue, 23 May 2017 19:39:02 +0300 Subject: [PATCH] leave icon when inplace editing a watch --- .../tree/render/CustomFieldInplaceEditor.java | 16 +++++++++++++++- .../impl/frame/WatchInplaceEditor.java | 17 ++++++++++++++++- .../ui/tree/XDebuggerTreeInplaceEditor.java | 17 ++++++++++++++++- 3 files changed, 47 insertions(+), 3 deletions(-) diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/CustomFieldInplaceEditor.java b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/CustomFieldInplaceEditor.java index 757df1460383..1af166d0c517 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/CustomFieldInplaceEditor.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/CustomFieldInplaceEditor.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2016 JetBrains s.r.o. + * Copyright 2000-2017 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -40,6 +40,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.tree.TreePath; +import java.awt.*; import java.util.List; /** @@ -139,4 +140,17 @@ public class CustomFieldInplaceEditor extends XDebuggerTreeInplaceEditor { } }).getPath(); } + + @Nullable + @Override + protected Rectangle getEditorBounds() { + Rectangle bounds = super.getEditorBounds(); + if (bounds == null) { + return null; + } + int afterIconX = getAfterIconX(); + bounds.x += afterIconX; + bounds.width -= afterIconX; + return bounds; + } } diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/WatchInplaceEditor.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/WatchInplaceEditor.java index 7d3ee6f2bee8..968b41a7453f 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/WatchInplaceEditor.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/WatchInplaceEditor.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2016 JetBrains s.r.o. + * Copyright 2000-2017 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -25,6 +25,8 @@ import com.intellij.xdebugger.impl.ui.tree.nodes.XDebuggerTreeNode; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.awt.*; + /** * @author nik */ @@ -65,4 +67,17 @@ public class WatchInplaceEditor extends XDebuggerTreeInplaceEditor { } TreeUtil.selectNode(myTree, myNode); } + + @Nullable + @Override + protected Rectangle getEditorBounds() { + Rectangle bounds = super.getEditorBounds(); + if (bounds == null) { + return null; + } + int afterIconX = getAfterIconX(); + bounds.x += afterIconX; + bounds.width -= afterIconX; + return bounds; + } } diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/XDebuggerTreeInplaceEditor.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/XDebuggerTreeInplaceEditor.java index fbe52710e785..42781e3fdcf7 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/XDebuggerTreeInplaceEditor.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/XDebuggerTreeInplaceEditor.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2016 JetBrains s.r.o. + * Copyright 2000-2017 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,6 +18,7 @@ package com.intellij.xdebugger.impl.ui.tree; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; import com.intellij.ui.AppUIUtil; +import com.intellij.ui.SimpleColoredComponent; import com.intellij.xdebugger.XDebugSession; import com.intellij.xdebugger.XDebugSessionListener; import com.intellij.xdebugger.XExpression; @@ -27,6 +28,7 @@ import com.intellij.xdebugger.impl.ui.tree.nodes.XDebuggerTreeNode; import org.jetbrains.annotations.NonNls; import javax.swing.*; +import javax.swing.border.Border; import javax.swing.plaf.basic.ComboPopup; import javax.swing.tree.TreePath; @@ -145,4 +147,17 @@ public abstract class XDebuggerTreeInplaceEditor extends TreeInplaceEditor { protected Project getProject() { return myNode.getTree().getProject(); } + + protected final int getAfterIconX() { + Icon icon = myNode.getIcon(); + if (icon != null) { + SimpleColoredComponent iconLabel = new SimpleColoredComponent(); + iconLabel.getIpad().right = 0; + iconLabel.getIpad().left = 0; + iconLabel.setIcon(myNode.getIcon()); + Border border = iconLabel.getMyBorder(); + return iconLabel.getPreferredSize().width - (border != null ? border.getBorderInsets(iconLabel).right : 0); + } + return 0; + } }