2 * Copyright (c) 2000-2006 JetBrains s.r.o. All Rights Reserved.
5 package com
.intellij
.util
.xml
.highlighting
;
7 import com
.intellij
.util
.xml
.DomFileElement
;
8 import com
.intellij
.util
.xml
.DomChangeListener
;
9 import com
.intellij
.util
.xml
.DomElement
;
10 import com
.intellij
.util
.xml
.DomManager
;
11 import com
.intellij
.util
.xml
.ui
.CommittablePanel
;
12 import com
.intellij
.util
.Alarm
;
13 import com
.intellij
.openapi
.editor
.markup
.ErrorStripeRenderer
;
14 import com
.intellij
.openapi
.editor
.Document
;
15 import com
.intellij
.openapi
.editor
.ex
.EditorEx
;
16 import com
.intellij
.openapi
.project
.Project
;
17 import com
.intellij
.openapi
.util
.IconLoader
;
18 import com
.intellij
.openapi
.Disposable
;
19 import com
.intellij
.codeInsight
.daemon
.impl
.RefreshStatusRenderer
;
20 import com
.intellij
.codeInsight
.daemon
.impl
.DaemonCodeAnalyzerImpl
;
21 import com
.intellij
.codeInsight
.daemon
.impl
.HighlightInfo
;
22 import com
.intellij
.codeInsight
.daemon
.DaemonCodeAnalyzer
;
23 import com
.intellij
.codeInsight
.hint
.LineTooltipRenderer
;
24 import com
.intellij
.codeInsight
.hint
.TooltipController
;
25 import com
.intellij
.codeInsight
.hint
.HintManager
;
26 import com
.intellij
.psi
.PsiDocumentManager
;
27 import com
.intellij
.psi
.PsiFile
;
28 import com
.intellij
.psi
.xml
.XmlFile
;
29 import com
.intellij
.lang
.annotation
.HighlightSeverity
;
33 import java
.awt
.event
.MouseMotionListener
;
34 import java
.awt
.event
.MouseEvent
;
37 * User: Sergey.Vasiliev
39 public class DomElementsErrorPanel
extends JPanel
implements CommittablePanel
{
40 private static final Icon ERRORS_FOUND_ICON
= IconLoader
.getIcon("/general/errorsInProgress.png");
42 private static final int ALARM_PERIOD
= 241;
44 private DomElement
[] myDomElements
;
45 private DomManager myDomManager
;
47 private final DomChangeListener myDomChangeListener
;
48 private final DomElementsRefreshStatusRenderer myErrorStripeRenderer
;
50 private final Alarm myAlarm
= new Alarm();
52 public DomElementsErrorPanel(final DomElement domElement
) {
53 this(new DomElement
[]{domElement
}, domElement
.getManager(), domElement
.getRoot().getFile());
56 public DomElementsErrorPanel(final DomElement
[] domElements
, DomManager domManager
, PsiFile file
) {
57 myDomElements
= domElements
;
58 myDomManager
= domManager
;
60 final Document document
= PsiDocumentManager
.getInstance(myDomManager
.getProject()).getDocument(file
);
62 setPreferredSize(getDimention());
64 myErrorStripeRenderer
= new DomElementsRefreshStatusRenderer(myDomManager
.getProject(), document
, file
);
68 myDomChangeListener
= new DomChangeListener() {
69 protected void elementChanged(DomElement element
) {
74 myDomManager
.addDomEventListener(myDomChangeListener
);
77 private void updatePanel() {
78 myAlarm
.cancelAllRequests();
81 setToolTipText(myErrorStripeRenderer
.getTooltipMessage());
83 if (!myErrorStripeRenderer
.getDaemonCodeAnalyzerStatus().inspectionFinished
) {
88 private void addUpdateRequest() {
89 myAlarm
.addRequest(new Runnable() {
96 protected void paintComponent(Graphics g
) {
97 super.paintComponent(g
);
99 myErrorStripeRenderer
.paint(this, g
, new Rectangle(0, 0, getWidth(), getHeight()));
102 public ErrorStripeRenderer
getErrorStripeRenderer() {
103 return myErrorStripeRenderer
;
106 public void dispose() {
107 myDomManager
.removeDomEventListener(myDomChangeListener
);
110 public JComponent
getComponent() {
114 public void commit() {
118 public void reset() {
122 protected Dimension
getDimention() {
123 return new Dimension(ERRORS_FOUND_ICON
.getIconWidth() + 2, ERRORS_FOUND_ICON
.getIconHeight() + 2);
126 private class DomElementsRefreshStatusRenderer
extends RefreshStatusRenderer
{
127 public DomElementsRefreshStatusRenderer(final Project project
, final Document document
, final PsiFile xmlFile
) {
128 super(project
, (DaemonCodeAnalyzerImpl
)DaemonCodeAnalyzer
.getInstance(project
), document
, xmlFile
);
131 protected int getErrorsCount(final HighlightSeverity minSeverity
) {
133 for (DomElement element
: myDomElements
) {
134 sum
+= DomElementAnnotationsManager
.getInstance().getProblems(element
, true, true).size();
139 public DaemonCodeAnalyzerStatus
getDaemonCodeAnalyzerStatus() {
140 return super.getDaemonCodeAnalyzerStatus();
144 // private static class MyRefreshStatusRenderer extends RefreshStatusRenderer {
145 // public MyRefreshStatusRenderer(final Project project, final Document document, final XmlFile xmlFile) {
146 // super(project, (DaemonCodeAnalyzerImpl)DaemonCodeAnalyzer.getInstance(project), document, xmlFile);
149 // public DaemonCodeAnalyzerStatus getDaemonCodeAnalyzerStatus() {
150 // return super.getDaemonCodeAnalyzerStatus();