package jetbrains.mps.ide.actions;
/*Generated by MPS */
import javax.swing.JPanel;
import javax.swing.Icon;
import com.intellij.icons.AllIcons;
import jetbrains.mps.ide.findusages.view.UsagesView;
import jetbrains.mps.project.Project;
import java.awt.BorderLayout;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import jetbrains.mps.plugins.tool.BaseGeneratedTool;
import jetbrains.mps.ide.ThreadUtils;
import jetbrains.mps.ide.findusages.view.treeholder.treeview.ViewOptions;
import jetbrains.mps.project.MPSProject;
import com.intellij.openapi.actionSystem.AnAction;
import org.jetbrains.annotations.NotNull;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.ActionManager;
import com.intellij.openapi.actionSystem.IdeActions;
import jetbrains.mps.ide.findusages.view.FindUtils;
import jetbrains.mps.ide.findusages.model.SearchQuery;
import jetbrains.mps.ide.findusages.model.holders.GenericHolder;
import jetbrains.mps.ide.findusages.model.scopes.ProjectScope;
import com.intellij.openapi.actionSystem.ActionPlaces;
import jetbrains.mps.ide.findusages.view.treeholder.treeview.INodeRepresentator;
import org.jetbrains.mps.openapi.model.SNode;
import org.jetbrains.mps.openapi.model.SNodeAccessUtil;
import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory;
import jetbrains.mps.ide.findusages.view.treeholder.tree.TextOptions;
import jetbrains.mps.util.NameUtil;
import jetbrains.mps.ide.icons.IdeIcons;
import java.util.List;
import jetbrains.mps.ide.findusages.model.CategoryKind;
import java.util.Arrays;
import org.jdom.Element;
import jetbrains.mps.ide.findusages.CantLoadSomethingException;
import jetbrains.mps.ide.findusages.CantSaveSomethingException;
public class TodoViewer extends JPanel {
public static final Icon TODO_ICON = AllIcons.Toolwindows.ToolWindowTodo;
private UsagesView myUsagesView;
private Project myProject;
private TodoViewer_Tool myTool;
public TodoViewer(final Project project, TodoViewer_Tool tool) {
this.myTool = tool;
myProject = project;
setLayout(new BorderLayout());
final JLabel label = new JLabel("Click to find TODOs", SwingConstants.CENTER);
add(label, BorderLayout.CENTER);
addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
removeMouseListener(this);
remove(label);
refresh();
}
});
}
public void dispose() {
if (myUsagesView != null) {
myUsagesView.dispose();
}
}
private BaseGeneratedTool getTool() {
return this.myTool;
}
private Project getProject() {
return myProject;
}
private void refresh() {
ThreadUtils.assertEDT();
removeAll();
ViewOptions viewOptions = new ViewOptions(true, false, false, false, false);
com.intellij.openapi.project.Project project = ((MPSProject) getProject()).getProject();
myUsagesView = new UsagesView(project, viewOptions);
UsagesView.RerunAction searchTodoAction = new UsagesView.RerunAction(myUsagesView, "Search again");
myUsagesView.setActions(searchTodoAction, new UsagesView.RebuildAction(myUsagesView), new AnAction("Close", "", AllIcons.Actions.Cancel) {
public void actionPerformed(@NotNull AnActionEvent p0) {
getTool().makeUnavailableLater();
}
}, ActionManager.getInstance().getAction(IdeActions.ACTION_PIN_ACTIVE_TAB));
add(myUsagesView.getComponent(), BorderLayout.CENTER);
searchTodoAction.setRunOptions(FindUtils.makeProvider(new TodoFinder()), new SearchQuery(new GenericHolder<Project>(myProject), new ProjectScope(myProject)));
myUsagesView.setCustomNodeRepresentator(new TodoViewer.MyNodeRepresentator());
searchTodoAction.actionPerformed(AnActionEvent.createFromInputEvent(searchTodoAction, null, ActionPlaces.TODO_VIEW_TOOLBAR));
getTool().openToolLater(true);
}
public static class MyNodeRepresentator implements INodeRepresentator<SNode> {
public MyNodeRepresentator() {
}
@NotNull
@Override
public String getPresentation(SNode node) {
return "<font color=blue>" + SNodeAccessUtil.getProperty(node, MetaAdapterFactory.getProperty(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x57d533a7af15ed3dL, 0x57d533a7af15ed3eL, "text")) + "</font>";
}
@Override
public String getResultsText(TextOptions options) {
return "<strong>" + NameUtil.formatNumericalString(options.mySubresultsCount, "TODO item") + " found</strong>";
}
@Override
public Icon getResultsIcon() {
return TodoViewer.TODO_ICON;
}
@Override
public String getCategoryText(TextOptions options, String category, boolean isResultsSection) {
String counter = "";
if (options.myCounters && isResultsSection) {
int size = options.mySubresultsCount;
counter = " (" + size + ")";
}
return "<strong>TODO items" + counter + "</strong>";
}
@Override
public Icon getCategoryIcon(String category) {
return IdeIcons.CLOSED_FOLDER;
}
@Override
public List<CategoryKind> getCategoryKinds() {
return Arrays.asList(CategoryKind.DEFAULT_CATEGORY_KIND);
}
@Override
public void read(Element element, Project project) throws CantLoadSomethingException {
}
@Override
public void write(Element element, Project project) throws CantSaveSomethingException {
}
}
}