package jetbrains.mps.debugger.api.ui.breakpoints; /*Generated by MPS */ import jetbrains.mps.debugger.core.breakpoints.BreakpointIconRenderrerEx; import jetbrains.mps.debug.api.breakpoints.ILocationBreakpoint; import jetbrains.mps.nodeEditor.EditorMessageIconRenderer; import java.awt.Component; import javax.swing.Icon; import jetbrains.mps.debugger.api.ui.DebugActionsUtil; import com.intellij.ide.DataManager; import jetbrains.mps.util.StringUtil; import org.jetbrains.mps.openapi.model.SNode; import org.jetbrains.mps.openapi.module.SRepository; import jetbrains.mps.ide.project.ProjectHelper; import jetbrains.mps.smodel.MPSModuleRepository; import jetbrains.mps.openapi.editor.cells.EditorCell; import javax.swing.JPopupMenu; import javax.swing.AbstractAction; import java.awt.event.ActionEvent; import jetbrains.mps.debug.api.BreakpointManagerComponent; import javax.swing.JSeparator; import org.jetbrains.annotations.NotNull; import jetbrains.mps.debug.api.breakpoints.IBreakpoint; import org.jetbrains.annotations.Nullable; import jetbrains.mps.debug.api.AbstractDebugSession; import jetbrains.mps.debugger.api.ui.icons.Icons; import jetbrains.mps.debug.api.breakpoints.IBreakpointsProvider; import jetbrains.mps.debug.api.breakpoints.BreakpointProvidersManager; /*package*/ class BreakpointIconRenderer extends BreakpointIconRenderrerEx<ILocationBreakpoint> implements EditorMessageIconRenderer { public BreakpointIconRenderer(ILocationBreakpoint breakpoint, Component component) { super(breakpoint, component); } @Override public Icon getIcon() { return BreakpointIconRenderer.getIconFor(myBreakpoint, DebugActionsUtil.getDebugSession(DataManager.getInstance().getDataContext(myComponent))); } @Override public String getTooltipText() { return "<html><body>" + StringUtil.escapeXml(myBreakpoint.getKind().getPresentation()) + "<br>" + StringUtil.escapeXml(myBreakpoint.getPresentation()) + ((myBreakpoint.isValid() ? "" : "<br><font color='red'>Invalid</br>")) + "</html></body>"; } @Override public SNode getNode() { SRepository repo = ProjectHelper.getProjectRepository(myBreakpoint.getProject()); if (repo == null) { // XXX friendly reminder to refactor EditorMessageIconProvider not to require SNode but SNodeReference // Usually, we've got smth to resolve ptr against in LeftEditorHighligher (or just need to match a renderer, ptr would suffice). repo = MPSModuleRepository.getInstance(); } return myBreakpoint.getLocation().getNodePointer().resolve(repo); } @Override public EditorCell getAnchorCell(EditorCell bigCell) { return BreakpointIconRenderer.getBreakpointIconAnchorCell(bigCell); } @Override public JPopupMenu getPopupMenu() { if (!(myBreakpoint.isValid())) { return null; } if (!(myBreakpoint.getKind().supportsDisable())) { return null; } JPopupMenu menu = new JPopupMenu(); menu.add(new AbstractAction((myBreakpoint.isEnabled() ? "Disable" : "Enable")) { @Override public void actionPerformed(ActionEvent e) { myBreakpoint.setEnabled(!(myBreakpoint.isEnabled())); } }); menu.add(new AbstractAction("Remove") { @Override public void actionPerformed(ActionEvent e) { BreakpointManagerComponent.getInstance(myBreakpoint.getProject()).removeBreakpoint(myBreakpoint); } }); menu.add(new JSeparator()); menu.add(new AbstractAction("Properties") { @Override public void actionPerformed(ActionEvent e) { BreakpointsUiComponent.getInstance(myBreakpoint.getProject()).editBreakpointProperties(myBreakpoint); } }); return menu; } public static Icon getIconFor(@NotNull IBreakpoint breakpoint) { return BreakpointIconRenderer.getIconFor(breakpoint, null); } private static Icon getIconFor(@NotNull IBreakpoint breakpoint, @Nullable AbstractDebugSession session) { if (session != null && session.isMute()) { return Icons.MUTED_BREAKPOINT; } IBreakpointsProvider provider = BreakpointProvidersManager.getInstance().getProvider(breakpoint.getKind()); if (provider != null) { Icon icon = provider.getIcon(breakpoint, session); if (icon != null) { return icon; } } return (breakpoint.isValid() ? ((breakpoint.isEnabled() ? Icons.BREAKPOINT : Icons.DISABLED_BREAKPOINT)) : Icons.INV_BREAKPOINT); } }