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 { } } }