package jetbrains.mps.ide.devkit.actions; /*Generated by MPS */ import jetbrains.mps.plugins.tool.GeneratedTool; import javax.swing.Icon; import jetbrains.mps.icons.MPSIcons; import jetbrains.mps.ide.typesystem.trace.TypeSystemTracePanel; import com.intellij.util.messages.MessageBusConnection; import jetbrains.mps.nodeEditor.EditorComponent; import com.intellij.openapi.project.Project; import jetbrains.mps.ide.tools.BaseTool; import com.intellij.openapi.wm.ToolWindowAnchor; import com.intellij.openapi.wm.impl.ToolWindowImpl; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeEvent; import com.intellij.openapi.wm.ex.ToolWindowEx; import jetbrains.mps.nodeEditor.highlighter.EditorComponentCreateListener; import org.jetbrains.annotations.NotNull; import com.intellij.openapi.util.Disposer; import jetbrains.mps.project.MPSProject; import org.jetbrains.mps.openapi.model.SNode; import javax.swing.JComponent; public class TraceTool_Tool extends GeneratedTool { private static final Icon ICON = MPSIcons.ToolWindows.TypeTraceView; private TypeSystemTracePanel myPanel; private MessageBusConnection myBusConnection; private EditorComponent myEditorComponent; public TraceTool_Tool(Project project) { super(project, "Typesystem Trace", BaseTool.shortcutsFromNumber(5), ICON, ToolWindowAnchor.RIGHT, false); } public void init(Project project) { super.init(project); TraceTool_Tool.this.myPanel = new TypeSystemTracePanel(TraceTool_Tool.this); ((ToolWindowImpl) TraceTool_Tool.this.getToolWindow()).addPropertyChangeListener(new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent event) { if (ToolWindowEx.PROP_AVAILABLE.equals(event.getPropertyName()) && Boolean.FALSE.equals(event.getNewValue())) { TraceTool_Tool.this.myPanel.cleanUp(); } } }); TraceTool_Tool.this.myBusConnection = project.getMessageBus().connect(); TraceTool_Tool.this.myBusConnection.subscribe(EditorComponentCreateListener.EDITOR_COMPONENT_CREATION, new EditorComponentCreateListener() { public void editorComponentCreated(@NotNull EditorComponent ecomp) { } public void editorComponentDisposed(@NotNull EditorComponent ecomp) { if (ecomp == TraceTool_Tool.this.myEditorComponent) { TraceTool_Tool.this.myPanel.cleanUp(); TraceTool_Tool.this.myEditorComponent = null; } } }); } public void dispose() { Disposer.dispose(TraceTool_Tool.this.myPanel); TraceTool_Tool.this.myBusConnection.disconnect(); super.dispose(); } public void buildTrace(MPSProject mpsProject, SNode node, EditorComponent editorComponent) { TraceTool_Tool.this.myEditorComponent = editorComponent; TraceTool_Tool.this.myPanel.showTraceForNode(mpsProject, node, editorComponent); } public JComponent getComponent() { return TraceTool_Tool.this.myPanel; } }