blob: 7b06cfab69fcf3bbf109184a6f4e2aee2d7917fd [file] [log] [blame]
/*
* Copyright 2000-2011 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.ui.debugger.extensions;
import com.intellij.icons.AllIcons;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.actionSystem.ex.AnActionListener;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.keymap.KeymapManager;
import com.intellij.ui.components.JBScrollPane;
import com.intellij.ui.debugger.UiDebuggerExtension;
import javax.swing.*;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import java.awt.*;
/**
* Created by IntelliJ IDEA.
* User: kirillk
* Date: 8/4/11
* Time: 7:52 PM
* To change this template use File | Settings | File Templates.
*/
public class ActionTracer implements UiDebuggerExtension, AnActionListener {
private final Logger LOG = Logger.getInstance("ActionTracer");
private JTextArea myText;
private JPanel myComponent;
@Override
public JComponent getComponent() {
if (myComponent == null) {
myText = new JTextArea();
final JBScrollPane log = new JBScrollPane(myText);
final AnAction clear = new AnAction("Clear", "Clear log", AllIcons.General.Reset) {
@Override
public void actionPerformed(AnActionEvent e) {
myText.setText(null);
}
};
myComponent = new JPanel(new BorderLayout());
final DefaultActionGroup group = new DefaultActionGroup();
group.add(clear);
myComponent.add(ActionManager.getInstance().createActionToolbar(ActionPlaces.UNKNOWN, group, true).getComponent(), BorderLayout.NORTH);
myComponent.add(log);
ActionManager.getInstance().addAnActionListener(this);
}
return myComponent;
}
@Override
public String getName() {
return "Actions";
}
@Override
public void beforeActionPerformed(AnAction action, DataContext dataContext, AnActionEvent event) {
}
@Override
public void afterActionPerformed(AnAction action, DataContext dataContext, AnActionEvent event) {
StringBuffer out = new StringBuffer();
final ActionManager actionManager = ActionManager.getInstance();
final String id = actionManager.getId(action);
out.append("id=" + id);
if (id != null) {
out.append(" shortcuts:");
final Shortcut[] shortcuts = KeymapManager.getInstance().getActiveKeymap().getShortcuts(id);
for (int i = 0; i < shortcuts.length; i++) {
Shortcut shortcut = shortcuts[i];
out.append(shortcut);
if (i < shortcuts.length - 1) {
out.append(",");
}
}
}
out.append("\n");
final Document doc = myText.getDocument();
try {
doc.insertString(doc.getLength(), out.toString(), null);
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
final int y = (int)myText.getBounds().getMaxY();
myText.scrollRectToVisible(new Rectangle(0, y, myText.getBounds().width, 0));
}
});
}
catch (BadLocationException e) {
LOG.error(e);
}
}
@Override
public void beforeEditorTyping(char c, DataContext dataContext) {
}
@Override
public void disposeUiResources() {
ActionManager.getInstance().removeAnActionListener(this);
myComponent = null;
myText = null;
}
}