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);
}
}