From 723ba25708d8fda29e4415b153336b55158f84c0 Mon Sep 17 00:00:00 2001 From: "andrey.zaytsev" Date: Mon, 28 May 2012 19:51:11 +0400 Subject: [PATCH] breakpoints ui. non-active breakpoints uses softer colors in preview-editor. --- .../BreakpointWithHighlighter.java | 1 + .../ui/popup/util/DetailViewImpl.java | 13 +-------- .../breakpoints/ui/BreakpointItem.java | 27 ++++++++++++++++++- .../intellij/xdebugger/ui/DebuggerColors.java | 3 +++ platform/xdebugger-api/xdebugger-api.iml | 1 + .../impl/breakpoints/XLineBreakpointImpl.java | 1 + .../BreakpointMasterDetailPopupBuilder.java | 4 --- 7 files changed, 33 insertions(+), 17 deletions(-) diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointWithHighlighter.java b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointWithHighlighter.java index 2e52109b5ae4..7ef5417ca915 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointWithHighlighter.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointWithHighlighter.java @@ -522,6 +522,7 @@ public abstract class BreakpointWithHighlighter extends Breakpoint { if (!highlighter.isValid()) { return null; } + highlighter.putUserData(DebuggerColors.BREAKPOINT_HIGHLIGHTER_KEY, Boolean.TRUE); highlighter.setErrorStripeTooltip(DebuggerBundle.message("breakpoint.tooltip.text", lineIndex + 1)); return highlighter; } diff --git a/platform/lang-impl/src/com/intellij/ui/popup/util/DetailViewImpl.java b/platform/lang-impl/src/com/intellij/ui/popup/util/DetailViewImpl.java index b230f482cad1..4327addc74c9 100644 --- a/platform/lang-impl/src/com/intellij/ui/popup/util/DetailViewImpl.java +++ b/platform/lang-impl/src/com/intellij/ui/popup/util/DetailViewImpl.java @@ -52,12 +52,6 @@ public class DetailViewImpl extends JPanel implements DetailView { private JLabel myNothingToShowInEditor = new JLabel("Nothing to show"); private RangeHighlighter myHighlighter; - public void setScheme(EditorColorsScheme scheme) { - myScheme = scheme; - } - - private EditorColorsScheme myScheme = EditorColorsManager.getInstance().getGlobalScheme(); - public DetailViewImpl(Project project) { super(new BorderLayout()); myProject = project; @@ -120,7 +114,7 @@ public class DetailViewImpl extends JPanel implements DetailView { remove(myNothingToShowInEditor); setEditor(EditorFactory.getInstance().createViewer(document, project)); - final EditorColorsScheme scheme = getScheme(); + final EditorColorsScheme scheme = EditorColorsManager.getInstance().getGlobalScheme(); EditorHighlighter highlighter = EditorHighlighterFactory.getInstance().createEditorHighlighter(file, scheme, project); @@ -155,11 +149,6 @@ public class DetailViewImpl extends JPanel implements DetailView { } } - public EditorColorsScheme getScheme() { - return myScheme; - } - - private void clearHightlighting() { if (myHighlighter != null) { diff --git a/platform/xdebugger-api/src/com/intellij/xdebugger/breakpoints/ui/BreakpointItem.java b/platform/xdebugger-api/src/com/intellij/xdebugger/breakpoints/ui/BreakpointItem.java index 3dbc5b0541a4..82abf3ad6522 100644 --- a/platform/xdebugger-api/src/com/intellij/xdebugger/breakpoints/ui/BreakpointItem.java +++ b/platform/xdebugger-api/src/com/intellij/xdebugger/breakpoints/ui/BreakpointItem.java @@ -15,8 +15,12 @@ */ package com.intellij.xdebugger.breakpoints.ui; +import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.LogicalPosition; import com.intellij.openapi.editor.colors.EditorColorsManager; +import com.intellij.openapi.editor.impl.DocumentMarkupModel; +import com.intellij.openapi.editor.markup.MarkupModel; +import com.intellij.openapi.editor.markup.RangeHighlighter; import com.intellij.openapi.editor.markup.TextAttributes; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.popup.JBPopup; @@ -46,7 +50,28 @@ public abstract class BreakpointItem implements ItemWrapper { public abstract void setEnabled(boolean state); protected void showInEditor(DetailView panel, VirtualFile virtualFile, int line) { - panel.navigateInPreviewEditor(virtualFile, new LogicalPosition(line, 0), null); + TextAttributes attributes = + EditorColorsManager.getInstance().getGlobalScheme().getAttributes(DebuggerColors.BREAKPOINT_ATTRIBUTES); + + panel.navigateInPreviewEditor(virtualFile, new LogicalPosition(line, 0), attributes); + + TextAttributes softerAttributes = attributes.clone(); + softerAttributes.setBackgroundColor(ColorUtil.softer(softerAttributes.getBackgroundColor())); + + final Editor editor = panel.getEditor(); + final MarkupModel editorModel = editor.getMarkupModel(); + final MarkupModel documentModel = + DocumentMarkupModel.forDocument(editor.getDocument(), editor.getProject(), false); + + for (RangeHighlighter highlighter : documentModel.getAllHighlighters()) { + if (highlighter.getUserData(DebuggerColors.BREAKPOINT_HIGHLIGHTER_KEY) == Boolean.TRUE) { + final int line1 = editor.offsetToLogicalPosition(highlighter.getStartOffset()).line; + if (line1 != line) { + editorModel.addLineHighlighter(line1, + DebuggerColors.BREAKPOINT_HIGHLIGHTER_LAYER + 1, softerAttributes); + } + } + } } @Override diff --git a/platform/xdebugger-api/src/com/intellij/xdebugger/ui/DebuggerColors.java b/platform/xdebugger-api/src/com/intellij/xdebugger/ui/DebuggerColors.java index 5c34a979f4f4..3ef5a2e88ee4 100644 --- a/platform/xdebugger-api/src/com/intellij/xdebugger/ui/DebuggerColors.java +++ b/platform/xdebugger-api/src/com/intellij/xdebugger/ui/DebuggerColors.java @@ -22,6 +22,7 @@ package com.intellij.xdebugger.ui; import com.intellij.openapi.editor.colors.ColorKey; import com.intellij.openapi.editor.colors.TextAttributesKey; import com.intellij.openapi.editor.markup.HighlighterLayer; +import com.intellij.openapi.util.Key; import java.awt.*; @@ -31,5 +32,7 @@ public interface DebuggerColors { ColorKey RECURSIVE_CALL_ATTRIBUTES = ColorKey.createColorKey("RECURSIVE_CALL_ATTRIBUTES", new Color(255, 255, 215)); int BREAKPOINT_HIGHLIGHTER_LAYER = HighlighterLayer.SYNTAX + 1; + + Key BREAKPOINT_HIGHLIGHTER_KEY = Key.create("BREAKPOINT_HIGHLIGHTER_KEY"); int EXECUTION_LINE_HIGHLIGHTERLAYER = HighlighterLayer.SELECTION - 1; } diff --git a/platform/xdebugger-api/xdebugger-api.iml b/platform/xdebugger-api/xdebugger-api.iml index 5e37d936a983..9b0209ca69aa 100644 --- a/platform/xdebugger-api/xdebugger-api.iml +++ b/platform/xdebugger-api/xdebugger-api.iml @@ -8,6 +8,7 @@ + diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XLineBreakpointImpl.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XLineBreakpointImpl.java index dfe161a81663..0528037a01af 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XLineBreakpointImpl.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XLineBreakpointImpl.java @@ -87,6 +87,7 @@ public class XLineBreakpointImpl

extends XBreak if (highlighter != null) { updateIcon(); highlighter.setGutterIconRenderer(createGutterIconRenderer()); + highlighter.putUserData(DebuggerColors.BREAKPOINT_HIGHLIGHTER_KEY, Boolean.TRUE); } myHighlighter = highlighter; } diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/BreakpointMasterDetailPopupBuilder.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/BreakpointMasterDetailPopupBuilder.java index 1900c8c81c58..fce09fb83953 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/BreakpointMasterDetailPopupBuilder.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/BreakpointMasterDetailPopupBuilder.java @@ -18,7 +18,6 @@ package com.intellij.xdebugger.impl.breakpoints.ui; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.DefaultActionGroup; -import com.intellij.openapi.actionSystem.ToggleAction; import com.intellij.openapi.actionSystem.ex.CheckboxAction; import com.intellij.openapi.editor.colors.EditorColorsManager; import com.intellij.openapi.editor.colors.EditorColorsScheme; @@ -32,7 +31,6 @@ import com.intellij.openapi.ui.popup.JBPopupFactory; import com.intellij.openapi.ui.popup.JBPopupListener; import com.intellij.openapi.ui.popup.LightweightWindowEvent; import com.intellij.ui.IdeBorderFactory; -import com.intellij.ui.ListUtil; import com.intellij.ui.popup.util.MasterDetailPopupBuilder; import com.intellij.util.IconUtil; import com.intellij.util.PlatformIcons; @@ -131,8 +129,6 @@ public class BreakpointMasterDetailPopupBuilder { myTree.setBorder(IdeBorderFactory.createBorder()); - myPopupBuilder.getDetailView().setScheme(createScheme()); - myTree.setDelegate(new BreakpointItemsTree.BreakpointItemsTreeDelegate() { @Override public void execute(BreakpointItem item) {