From c63df32c688d139f14719544ab1036271d6dd6e1 Mon Sep 17 00:00:00 2001 From: "andrey.zaytsev" Date: Thu, 30 Aug 2012 21:22:13 +0400 Subject: [PATCH] breakpoints-ui. master breakpoint preview for XBreakpoints --- .../BreakpointPropertiesPanel.form | 159 +++++++++--------- .../BreakpointPropertiesPanel.java | 93 +--------- .../ui/breakpoints/JavaBreakpointItem.java | 4 +- .../intellij/ui/popup/util/DetailView.java | 4 +- .../ui/popup/util/DetailController.java | 2 +- .../ui/popup/util/DetailViewImpl.java | 4 +- .../src/messages/XDebuggerBundle.properties | 1 + .../xdebugger/impl/DebuggerSupport.java | 2 +- .../impl/breakpoints/XBreakpointItem.java | 18 +- .../breakpoints/ui}/BreakpointChooser.java | 75 ++++++--- .../breakpoints/ui/BreakpointNoneItem.java | 97 +++++++++++ .../ui/XLightBreakpointPropertiesPanel.java | 8 + .../ui/XMasterBreakpointPanel.form | 26 ++- .../ui/XMasterBreakpointPanel.java | 73 +++----- 14 files changed, 305 insertions(+), 261 deletions(-) rename {java/debugger/impl/src/com/intellij/debugger/ui/breakpoints => platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui}/BreakpointChooser.java (75%) create mode 100644 platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/BreakpointNoneItem.java diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointPropertiesPanel.form b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointPropertiesPanel.form index 5dd0a54ead5f..3f24242ac3fa 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointPropertiesPanel.form +++ b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointPropertiesPanel.form @@ -1,9 +1,9 @@
- + - + @@ -95,7 +95,7 @@ - + @@ -105,10 +105,10 @@ - + - + @@ -124,12 +124,7 @@ - - - - - - + @@ -173,74 +168,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -254,6 +181,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -413,6 +409,11 @@ + + + + + diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointPropertiesPanel.java b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointPropertiesPanel.java index 4ecb756a14ca..daffd5f71295 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointPropertiesPanel.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointPropertiesPanel.java @@ -20,7 +20,6 @@ */ package com.intellij.debugger.ui.breakpoints; -import com.intellij.debugger.DebuggerBundle; import com.intellij.debugger.DebuggerManagerEx; import com.intellij.debugger.InstanceFilter; import com.intellij.debugger.engine.evaluation.CodeFragmentKind; @@ -44,12 +43,13 @@ import com.intellij.psi.PsiClass; import com.intellij.psi.PsiElement; import com.intellij.ui.FieldPanel; import com.intellij.ui.MultiLineTooltipUI; -import com.intellij.ui.SimpleColoredComponent; import com.intellij.ui.components.JBCheckBox; import com.intellij.ui.popup.util.DetailView; import com.intellij.util.IJSwingUtilities; import com.intellij.xdebugger.impl.DebuggerSupport; +import com.intellij.xdebugger.impl.breakpoints.ui.BreakpointChooser; import com.intellij.xdebugger.impl.breakpoints.ui.BreakpointItem; +import com.intellij.xdebugger.impl.breakpoints.ui.BreakpointNoneItem; import com.intellij.xdebugger.impl.ui.DebuggerUIUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -390,102 +390,19 @@ public abstract class BreakpointPropertiesPanel { private List getBreakpointItemsExceptMy() { List items = new ArrayList(); - findJavaDebuggerSupport().getBreakpointPanelProvider().provideBreakpointItems(myProject, items); + final DebuggerSupport support = DebuggerSupport.getDebuggerSupport(JavaDebuggerSupport.class); + support.getBreakpointPanelProvider().provideBreakpointItems(myProject, items); for (BreakpointItem item : items) { if (item.getBreakpoint() == myBreakpoint) { items.remove(item); break; } } - items.add(new BreakpointItem() { - @Override - public Object getBreakpoint() { - return null; //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public boolean isEnabled() { - return false; //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public void setEnabled(boolean state) { - //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public boolean isDefaultBreakpoint() { - return true; - } - - @Override - protected void setupGenericRenderer(SimpleColoredComponent renderer, boolean plainView) { - renderer.clear(); - renderer.append(getDisplayText()); - } - - @Override - public Icon getIcon() { - return null; //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public String getDisplayText() { - return DebuggerBundle.message("value.none"); - } - - @Override - public boolean navigate() { - return false; //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public String speedSearchText() { - return null; //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public String footerText() { - return ""; - } - - @Override - protected void doUpdateDetailView(DetailView panel, boolean editorOnly) { - //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public boolean allowedToRemove() { - return false; //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public void removed(Project project) { - //To change body of implemented methods use File | Settings | File Templates. - } - - @Override - public int compareTo(BreakpointItem breakpointItem) { - return 1; - } - }); + items.add(new BreakpointNoneItem()); return items; } - private DebuggerSupport findJavaDebuggerSupport() { - DebuggerSupport[] supports = DebuggerSupport.getDebuggerSupports(); - DebuggerSupport support = null; - for (DebuggerSupport s : supports) { - if (s instanceof JavaDebuggerSupport) { - support = s; - } - } - return support; - } - private void saveMasterBreakpoint() { - - Breakpoint masterBreakpoint = (Breakpoint)myMasterBreakpointChooser.getSelectedBreakpoint(); if (masterBreakpoint == null) { getBreakpointManager(myProject).removeBreakpointRule(myBreakpoint); diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/JavaBreakpointItem.java b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/JavaBreakpointItem.java index 1e5f6d3fbd17..0d3692552362 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/JavaBreakpointItem.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/JavaBreakpointItem.java @@ -84,10 +84,10 @@ class JavaBreakpointItem extends BreakpointItem { breakpointPropertiesPanel.setDetailView(panel); final JPanel mainPanel = breakpointPropertiesPanel.getPanel(); - panel.setDetailPanel(mainPanel); + panel.setPropertiesPanel(mainPanel); } else { - panel.setDetailPanel(null); + panel.setPropertiesPanel(null); } } diff --git a/platform/lang-api/src/com/intellij/ui/popup/util/DetailView.java b/platform/lang-api/src/com/intellij/ui/popup/util/DetailView.java index 867fcf5a4733..a4e8b7f9dc7b 100644 --- a/platform/lang-api/src/com/intellij/ui/popup/util/DetailView.java +++ b/platform/lang-api/src/com/intellij/ui/popup/util/DetailView.java @@ -37,9 +37,9 @@ public interface DetailView extends UserDataHolder { void navigateInPreviewEditor(PreviewEditorState editorState); - JPanel getDetailPanel(); + JPanel getPropertiesPanel(); - void setDetailPanel(@Nullable JPanel panel); + void setPropertiesPanel(@Nullable JPanel panel); void clearEditor(); diff --git a/platform/lang-impl/src/com/intellij/ui/popup/util/DetailController.java b/platform/lang-impl/src/com/intellij/ui/popup/util/DetailController.java index c9187a5b8dbf..de7e6c22aa1a 100644 --- a/platform/lang-impl/src/com/intellij/ui/popup/util/DetailController.java +++ b/platform/lang-impl/src/com/intellij/ui/popup/util/DetailController.java @@ -40,7 +40,7 @@ public class DetailController implements TreeSelectionListener, ListSelectionLis } else { myDetailView.clearEditor(); - myDetailView.setDetailPanel(null); + myDetailView.setPropertiesPanel(null); myDetailView.setCurrentItem(null); } } 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 79e226da71c5..ba498473a21c 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 @@ -182,12 +182,12 @@ public class DetailViewImpl extends JPanel implements DetailView, UserDataHolder } @Override - public JPanel getDetailPanel() { + public JPanel getPropertiesPanel() { return myDetailPanel; } @Override - public void setDetailPanel(@Nullable final JPanel panel) { + public void setPropertiesPanel(@Nullable final JPanel panel) { if (panel == myDetailPanel) return; if (panel != null) { diff --git a/platform/platform-resources-en/src/messages/XDebuggerBundle.properties b/platform/platform-resources-en/src/messages/XDebuggerBundle.properties index d659517a20fc..db625d7beed4 100644 --- a/platform/platform-resources-en/src/messages/XDebuggerBundle.properties +++ b/platform/platform-resources-en/src/messages/XDebuggerBundle.properties @@ -39,6 +39,7 @@ xbreakpoint.label.after.breakpoint.was.hit=After breakpoint was hit: xbreakpoint.radio.disable.again=Disable again xbreakpoint.radio.leave.enabled=Leave enabled xbreakpoint.master.breakpoint.none= +xbreakpoint.master.breakpoint.description=Disabled until selected breakpoint is hit: rule.name.group.by.file=Group by file xbreakpoint.default.display.text=Line {0} in {1} diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/DebuggerSupport.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/DebuggerSupport.java index 1b173c310f9e..2593203ab9e1 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/DebuggerSupport.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/DebuggerSupport.java @@ -106,7 +106,7 @@ public abstract class DebuggerSupport { public abstract EditBreakpointActionHandler getEditBreakpointAction(); - @Nullable + @NotNull public static DebuggerSupport getDebuggerSupport(Class aClass) { for (DebuggerSupport support : getDebuggerSupports()) { if (support.getClass() == aClass) { diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XBreakpointItem.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XBreakpointItem.java index 4c51eee58513..52b7cf4f076e 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XBreakpointItem.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XBreakpointItem.java @@ -40,7 +40,7 @@ class XBreakpointItem extends BreakpointItem { @Override public void setupRenderer(ColoredListCellRenderer renderer, Project project, boolean selected) { - setupGenericRenderer(renderer, false); + setupGenericRenderer(renderer, true); } @Override @@ -77,12 +77,11 @@ class XBreakpointItem extends BreakpointItem { public void doUpdateDetailView(DetailView panel, boolean editorOnly) { Project project = ((XBreakpointBase)myBreakpoint).getProject(); + XLightBreakpointPropertiesPanel> propertiesPanel = null; if (!editorOnly) { + propertiesPanel = new XLightBreakpointPropertiesPanel>(project, getManager(), myBreakpoint, true); - XLightBreakpointPropertiesPanel> propertiesPanel = - new XLightBreakpointPropertiesPanel>(project, getManager(), myBreakpoint, true); - propertiesPanel.loadProperties(); - panel.setDetailPanel(propertiesPanel.getMainPanel()); + panel.setPropertiesPanel(propertiesPanel.getMainPanel()); } XSourcePosition sourcePosition = myBreakpoint.getSourcePosition(); @@ -92,7 +91,14 @@ class XBreakpointItem extends BreakpointItem { else { panel.clearEditor(); } - panel.getDetailPanel().revalidate(); + + if (propertiesPanel != null) { + propertiesPanel.setDetailView(panel); + propertiesPanel.loadProperties(); + propertiesPanel.getMainPanel().revalidate(); + + } + } @Override diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointChooser.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/BreakpointChooser.java similarity index 75% rename from java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointChooser.java rename to platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/BreakpointChooser.java index 459cfc06bcf6..d807e822cbb6 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointChooser.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/BreakpointChooser.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.intellij.debugger.ui.breakpoints; +package com.intellij.xdebugger.impl.breakpoints.ui; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; @@ -22,32 +22,31 @@ import com.intellij.openapi.util.Key; import com.intellij.openapi.util.Ref; import com.intellij.openapi.util.UserDataHolderBase; import com.intellij.ui.CollectionComboBoxModel; -import com.intellij.ui.components.JBList; import com.intellij.ui.popup.util.*; -import com.intellij.xdebugger.impl.breakpoints.ui.BreakpointItem; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; -import javax.swing.event.ListSelectionEvent; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.util.List; public class BreakpointChooser { - private DetailView myDetailView; + private DetailView myDetailViewDelegate; private Delegate myDelegate; private final ComboBox myComboBox; private DetailController myDetailController; - private JBList myList; + private final List myBreakpointItems; + private BreakpointChooser.MyDetailView myDetailView; public void setDetailView(DetailView detailView) { - myDetailView = detailView; - myDetailController.setDetailView(new MyDetailView(myDetailView.getEditorState())); + myDetailViewDelegate = detailView; + myDetailView = new MyDetailView(myDetailViewDelegate.getEditorState()); + myDetailController.setDetailView(myDetailView); } public Object getSelectedBreakpoint() { @@ -56,28 +55,28 @@ public class BreakpointChooser { private void pop(DetailView.PreviewEditorState pushed) { if (pushed.getFile() != null) { - myDetailView + myDetailViewDelegate .navigateInPreviewEditor( new DetailView.PreviewEditorState(pushed.getFile(), pushed.getNavigate(), pushed.getAttributes())); } else { - myDetailView.clearEditor(); + myDetailViewDelegate.clearEditor(); } } + + public void setSelectesBreakpoint(Object breakpoint) { + myComboBox.setSelectedItem(findItem(breakpoint, myBreakpointItems)); + } + public interface Delegate { void breakpointChosen(Project project, BreakpointItem breakpointItem); } - public BreakpointChooser(final Project project, Delegate delegate, Breakpoint baseBreakpoint, List breakpointItems) { + public BreakpointChooser(final Project project, Delegate delegate, Object baseBreakpoint, List breakpointItems) { myDelegate = delegate; + myBreakpointItems = breakpointItems; - BreakpointItem breakpointItem = null; - for (BreakpointItem item : breakpointItems) { - if (item.getBreakpoint() == baseBreakpoint) { - breakpointItem = item; - break; - } - } + BreakpointItem breakpointItem = findItem(baseBreakpoint, myBreakpointItems); final Ref hackedSelection = Ref.create(); myDetailController = new DetailController(new MasterController() { @@ -96,10 +95,18 @@ public class BreakpointChooser { } }); - final ItemWrapperListRenderer listRenderer = new ItemWrapperListRenderer(project, null); - - ComboBoxModel model = new CollectionComboBoxModel(breakpointItems, breakpointItem); - myComboBox = new ComboBox(model); + ComboBoxModel model = new CollectionComboBoxModel(myBreakpointItems, breakpointItem); + myComboBox = new ComboBox(model) { + @Override + public void setPopupVisible(boolean visible) { + super.setPopupVisible(visible); + if (!visible) { + if (myDetailView != null) { + myDetailView.clearEditor(); + } + } + } + }; myComboBox.setRenderer(new ItemWrapperListRenderer(project, null) { @Override protected void customizeCellRenderer(JList list, Object value, int index, boolean selected, boolean hasFocus) { @@ -122,6 +129,18 @@ public class BreakpointChooser { }); } + @Nullable + private static BreakpointItem findItem(Object baseBreakpoint, List breakpointItems) { + BreakpointItem breakpointItem = null; + for (BreakpointItem item : breakpointItems) { + if (item.getBreakpoint() == baseBreakpoint) { + breakpointItem = item; + break; + } + } + return breakpointItem; + } + public JComponent getComponent() { return myComboBox; } @@ -138,23 +157,23 @@ public class BreakpointChooser { @Override public Editor getEditor() { - return myDetailView.getEditor(); + return myDetailViewDelegate.getEditor(); } @Override public void navigateInPreviewEditor(PreviewEditorState editorState) { - if (myDetailView != null) { - myDetailView.navigateInPreviewEditor(editorState); + if (myDetailViewDelegate != null) { + myDetailViewDelegate.navigateInPreviewEditor(editorState); } } @Override - public JPanel getDetailPanel() { + public JPanel getPropertiesPanel() { return null; //To change body of implemented methods use File | Settings | File Templates. } @Override - public void setDetailPanel(@Nullable JPanel panel) { + public void setPropertiesPanel(@Nullable JPanel panel) { //To change body of implemented methods use File | Settings | File Templates. } @@ -165,7 +184,7 @@ public class BreakpointChooser { @Override public PreviewEditorState getEditorState() { - return myDetailView.getEditorState(); + return myDetailViewDelegate.getEditorState(); } public void setCurrentItem(ItemWrapper currentItem) { diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/BreakpointNoneItem.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/BreakpointNoneItem.java new file mode 100644 index 000000000000..ce17be708a3d --- /dev/null +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/BreakpointNoneItem.java @@ -0,0 +1,97 @@ +/* + * Copyright 2000-2012 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.xdebugger.impl.breakpoints.ui; + + +import com.intellij.openapi.project.Project; +import com.intellij.ui.SimpleColoredComponent; +import com.intellij.ui.popup.util.DetailView; +import com.intellij.xdebugger.XDebuggerBundle; + +import javax.swing.*; + +public class BreakpointNoneItem extends BreakpointItem { + @Override + public Object getBreakpoint() { + return null; + } + + @Override + public boolean isEnabled() { + return false; //To change body of implemented methods use File | Settings | File Templates. + } + + @Override + public void setEnabled(boolean state) { + //To change body of implemented methods use File | Settings | File Templates. + } + + @Override + public boolean isDefaultBreakpoint() { + return true; + } + + @Override + protected void setupGenericRenderer(SimpleColoredComponent renderer, boolean plainView) { + renderer.clear(); + renderer.append(getDisplayText()); + } + + @Override + public Icon getIcon() { + return null; //To change body of implemented methods use File | Settings | File Templates. + } + + @Override + public String getDisplayText() { + return XDebuggerBundle.message("xbreakpoint.master.breakpoint.none"); + } + + @Override + public boolean navigate() { + return false; //To change body of implemented methods use File | Settings | File Templates. + } + + @Override + public String speedSearchText() { + return null; //To change body of implemented methods use File | Settings | File Templates. + } + + @Override + public String footerText() { + return ""; + } + + @Override + protected void doUpdateDetailView(DetailView panel, boolean editorOnly) { + //To change body of implemented methods use File | Settings | File Templates. + } + + @Override + public boolean allowedToRemove() { + return false; //To change body of implemented methods use File | Settings | File Templates. + } + + @Override + public void removed(Project project) { + //To change body of implemented methods use File | Settings | File Templates. + } + + @Override + public int compareTo(BreakpointItem breakpointItem) { + return 1; + } +} diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/XLightBreakpointPropertiesPanel.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/XLightBreakpointPropertiesPanel.java index 651de3dcee0f..e67b7144fe1e 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/XLightBreakpointPropertiesPanel.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/XLightBreakpointPropertiesPanel.java @@ -18,6 +18,7 @@ package com.intellij.xdebugger.impl.breakpoints.ui; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.wm.IdeFocusManager; +import com.intellij.ui.popup.util.DetailView; import com.intellij.xdebugger.breakpoints.XBreakpoint; import com.intellij.xdebugger.breakpoints.XBreakpointManager; import com.intellij.xdebugger.breakpoints.XBreakpointType; @@ -43,6 +44,8 @@ import java.util.List; */ public class XLightBreakpointPropertiesPanel> implements XSuspendPolicyPanel.Delegate { + private DetailView myDetailView; + public boolean showMoreOptions() { return myShowMoreOptions; } @@ -98,6 +101,11 @@ public class XLightBreakpointPropertiesPanel> implement private B myBreakpoint; + public void setDetailView(DetailView detailView) { + myDetailView = detailView; + myMasterBreakpointPanel.setDetailView(detailView); + } + public XLightBreakpointPropertiesPanel(Project project, XBreakpointManager breakpointManager, B breakpoint, boolean showAllOptions) { myBreakpoint = breakpoint; XBreakpointType breakpointType = XBreakpointUtil.getType(breakpoint); diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/XMasterBreakpointPanel.form b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/XMasterBreakpointPanel.form index 7b68dae270cf..62d796144181 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/XMasterBreakpointPanel.form +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/XMasterBreakpointPanel.form @@ -3,34 +3,36 @@ - + - + - + - + - + - + + + - + @@ -67,6 +69,16 @@ + + + + + + + + + + diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/XMasterBreakpointPanel.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/XMasterBreakpointPanel.java index 0ab62bec4d86..6bfd585e3151 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/XMasterBreakpointPanel.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/ui/XMasterBreakpointPanel.java @@ -18,9 +18,12 @@ package com.intellij.xdebugger.impl.breakpoints.ui; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.ComboBox; import com.intellij.ui.GuiUtils; +import com.intellij.ui.popup.util.DetailView; import com.intellij.xdebugger.XDebuggerBundle; import com.intellij.xdebugger.breakpoints.XBreakpoint; import com.intellij.xdebugger.breakpoints.XBreakpointManager; +import com.intellij.xdebugger.impl.DebuggerSupport; +import com.intellij.xdebugger.impl.XDebuggerSupport; import com.intellij.xdebugger.impl.breakpoints.XBreakpointManagerImpl; import com.intellij.xdebugger.impl.breakpoints.XBreakpointUtil; import com.intellij.xdebugger.impl.breakpoints.XDependentBreakpointManager; @@ -28,16 +31,11 @@ import org.jetbrains.annotations.NotNull; import javax.swing.*; import java.awt.*; +import java.awt.List; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.util.*; -/** - * Created by IntelliJ IDEA. - * User: zajac - * Date: 16.06.11 - * Time: 21:26 - * To change this template use File | Settings | File Templates. - */ public class XMasterBreakpointPanel> extends XBreakpointPropertiesSubPanel { private JPanel myMasterBreakpointComboBoxPanel; private JPanel myAfterBreakpointHitPanel; @@ -45,42 +43,34 @@ public class XMasterBreakpointPanel> extends XBreakpoin private JPanel myContentPane; private JPanel myMainPanel; - private ComboBox myMasterBreakpointComboBox; + private BreakpointChooser myMasterBreakpointChooser; private XDependentBreakpointManager myDependentBreakpointManager; - private static class BreakpointsListCellRenderer> extends DefaultListCellRenderer { - public Component getListCellRendererComponent(final JList list, - final Object value, - final int index, - final boolean isSelected, - final boolean cellHasFocus) { - Component component = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); - if (value != null) { - B breakpoint = (B)value; - setText(XBreakpointUtil.getDisplayText(breakpoint)); - setIcon(breakpoint.getType().getEnabledIcon()); + private java.util.List getBreakpointItemsExceptMy() { + java.util.List items = new ArrayList(); + DebuggerSupport.getDebuggerSupport(XDebuggerSupport.class).getBreakpointPanelProvider().provideBreakpointItems(myProject, items); + for (BreakpointItem item : items) { + if (item.getBreakpoint() == myBreakpoint) { + items.remove(item); + break; } - else { - setText(XDebuggerBundle.message("xbreakpoint.master.breakpoint.none")); - setIcon(null); - } - return component; } + items.add(new BreakpointNoneItem()); + return items; } @Override public void init(Project project, XBreakpointManager breakpointManager, @NotNull B breakpoint) { super.init(project, breakpointManager, breakpoint); myDependentBreakpointManager = ((XBreakpointManagerImpl)breakpointManager).getDependentBreakpointManager(); - myMasterBreakpointComboBox = new ComboBox(300); - myMasterBreakpointComboBoxPanel.add(myMasterBreakpointComboBox, BorderLayout.CENTER); - myMasterBreakpointComboBox.addActionListener(new ActionListener() { - public void actionPerformed(final ActionEvent e) { + myMasterBreakpointChooser = new BreakpointChooser(project, new BreakpointChooser.Delegate() { + @Override + public void breakpointChosen(Project project, BreakpointItem breakpointItem) { updateAfterBreakpointHitPanel(); } - }); - myMasterBreakpointComboBox.setRenderer(new BreakpointsListCellRenderer()); - fillMasterBreakpointComboBox(); + }, null, getBreakpointItemsExceptMy()); + + myMasterBreakpointComboBoxPanel.add(myMasterBreakpointChooser.getComponent(), BorderLayout.CENTER); } @Override @@ -93,19 +83,8 @@ public class XMasterBreakpointPanel> extends XBreakpoin return false; } - private void fillMasterBreakpointComboBox() { - myMasterBreakpointComboBox.removeAllItems(); - myMasterBreakpointComboBox.addItem(null); - for (B breakpoint : myBreakpointManager.getBreakpoints(XBreakpointUtil.getType(myBreakpoint))) { - if (breakpoint != myBreakpoint) { - myMasterBreakpointComboBox.addItem(breakpoint); - } - } - } - - private void updateAfterBreakpointHitPanel() { - boolean enable = myMasterBreakpointComboBox.getSelectedItem() != null; + boolean enable = myMasterBreakpointChooser.getSelectedBreakpoint() != null; GuiUtils.enableChildren(enable, myAfterBreakpointHitPanel); } @@ -113,7 +92,7 @@ public class XMasterBreakpointPanel> extends XBreakpoin void loadProperties() { XBreakpoint masterBreakpoint = myDependentBreakpointManager.getMasterBreakpoint(myBreakpoint); if (masterBreakpoint != null) { - myMasterBreakpointComboBox.setSelectedItem(masterBreakpoint); + myMasterBreakpointChooser.setSelectesBreakpoint(masterBreakpoint); myLeaveEnabledRadioButton.setSelected(myDependentBreakpointManager.isLeaveEnabled(myBreakpoint)); } updateAfterBreakpointHitPanel(); @@ -122,7 +101,7 @@ public class XMasterBreakpointPanel> extends XBreakpoin @Override void saveProperties() { - XBreakpoint masterBreakpoint = (XBreakpoint)myMasterBreakpointComboBox.getSelectedItem(); + XBreakpoint masterBreakpoint = (XBreakpoint)myMasterBreakpointChooser.getSelectedBreakpoint(); if (masterBreakpoint == null) { myDependentBreakpointManager.clearMasterBreakpoint(myBreakpoint); } @@ -130,4 +109,8 @@ public class XMasterBreakpointPanel> extends XBreakpoin myDependentBreakpointManager.setMasterBreakpoint(myBreakpoint, masterBreakpoint, myLeaveEnabledRadioButton.isSelected()); } } + + public void setDetailView(DetailView detailView) { + myMasterBreakpointChooser.setDetailView(detailView); + } }