package de.janthomae.leiningenplugin.navigator; import com.intellij.openapi.actionSystem.*; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.SimpleToolWindowPanel; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.ui.treeStructure.SimpleTree; import de.janthomae.leiningenplugin.LeiningenDataKeys; import de.janthomae.leiningenplugin.project.LeiningenProject; import org.jetbrains.annotations.NonNls; import javax.swing.*; import java.util.ArrayList; import java.util.List; /** * @author <a href="janthomae@janthomae.de">Jan Thomä</a> * @version $Id:$ */ public class LeiningenProjectNavigatorPanel extends SimpleToolWindowPanel implements DataProvider { private Project myProject; private SimpleTree myTree; public LeiningenProjectNavigatorPanel(Project project, SimpleTree tree) { super(true, false); myProject = project; myTree = tree; final ActionManager actionManager = ActionManager.getInstance(); ActionToolbar actionToolbar = actionManager.createActionToolbar("Leiningen Navigator Toolbar", (DefaultActionGroup) actionManager .getAction("Leiningen.NavigatorActionsToolbar"), true); actionToolbar.setTargetComponent(tree); setToolbar(actionToolbar.getComponent()); setContent(new JScrollPane(myTree)); } public Object getData(@NonNls String dataId) { if (PlatformDataKeys.PROJECT.is(dataId)) return myProject; if (LeiningenDataKeys.LEININGEN_GOALS.is(dataId)) return extractGoals(); if (PlatformDataKeys.VIRTUAL_FILE.is(dataId)) return extractVirtualFile(); if (LeiningenDataKeys.LEININGEN_PROJECT.is(dataId)) return extractLeiningenProject(); return null; } private LeiningenProject extractLeiningenProject() { List<LeiningenProjectNode> projectNodes = LeiningenProjectStructure .getSelectedNodes(myTree, LeiningenProjectNode.class); if (!projectNodes.isEmpty()) { return projectNodes.get(0).getLeiningenProject(); } List<LeiningenGoalNode> goalNodes = LeiningenProjectStructure.getSelectedNodes(myTree, LeiningenGoalNode.class); if (!goalNodes.isEmpty()) { return goalNodes.get(0).getLeiningenProject(); } return null; } private List<String> extractGoals() { List<String> result = new ArrayList<String>(); List<LeiningenGoalNode> v = LeiningenProjectStructure.getSelectedNodes(myTree, LeiningenGoalNode.class); for (LeiningenGoalNode goalNode : v) { result.add(goalNode.getGoalName()); } return result; } private VirtualFile extractVirtualFile() { for (LeiningenProjectNode each : LeiningenProjectStructure .getSelectedNodes(myTree, LeiningenProjectNode.class)) { VirtualFile file = each.getVirtualFile(); if (file != null && file.isValid()) return file; } return null; } }