package org.freeplane.plugin.workspace.nodes; import java.awt.Component; import java.net.URI; import java.util.Enumeration; import java.util.NoSuchElementException; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.tree.DefaultTreeCellRenderer; import javax.swing.tree.TreeNode; import org.freeplane.core.util.TextUtils; import org.freeplane.plugin.workspace.WorkspaceController; import org.freeplane.plugin.workspace.actions.NodeRefreshAction; import org.freeplane.plugin.workspace.actions.WorkspaceImportProjectAction; import org.freeplane.plugin.workspace.actions.WorkspaceNewProjectAction; import org.freeplane.plugin.workspace.components.menu.WorkspacePopupMenu; import org.freeplane.plugin.workspace.components.menu.WorkspacePopupMenuBuilder; import org.freeplane.plugin.workspace.event.IWorkspaceNodeActionListener; import org.freeplane.plugin.workspace.event.WorkspaceActionEvent; import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode; public class WorkspaceRootNode extends AFolderNode implements IWorkspaceNodeActionListener { private static final long serialVersionUID = 1L; private static Icon DEFAULT_ICON = new ImageIcon(FolderLinkNode.class.getResource("/images/16x16/preferences-desktop-filetype-association.png")); private static WorkspacePopupMenu popupMenu; public WorkspaceRootNode() { super(null); } public final String getTagName() { return null; } public void handleAction(WorkspaceActionEvent event) { if (event.getType() == WorkspaceActionEvent.MOUSE_RIGHT_CLICK) { showPopup((Component) event.getBaggage(), event.getX(), event.getY()); } } public boolean isSystem() { return true; } public boolean setIcons(DefaultTreeCellRenderer renderer) { renderer.setOpenIcon(DEFAULT_ICON); renderer.setClosedIcon(DEFAULT_ICON); renderer.setLeafIcon(DEFAULT_ICON); return true; } public void initializePopup() { if (popupMenu == null) { popupMenu = new WorkspacePopupMenu(); WorkspacePopupMenuBuilder.addActions(popupMenu, new String[] { WorkspaceNewProjectAction.KEY, WorkspaceImportProjectAction.KEY, WorkspacePopupMenuBuilder.SEPARATOR, "workspace.action.all.expand", "workspace.action.all.collapse", WorkspacePopupMenuBuilder.SEPARATOR, NodeRefreshAction.KEY }); } } protected AWorkspaceTreeNode clone(WorkspaceRootNode node) { return super.clone(node); } public AWorkspaceTreeNode clone() { WorkspaceRootNode node = new WorkspaceRootNode(); return clone(node); } public WorkspacePopupMenu getContextMenu() { if (popupMenu == null) { initializePopup(); } return popupMenu; } public String getName() { //WORKSPACE - todo: get name from somewhere or set it somehow return TextUtils.getText("workspace.node.root.name"); } public void refresh() { getModel().reload(this); } public URI getPath() { // not used for workspace root return null; } public boolean isLeaf() { return false; } public AWorkspaceTreeNode getChildAt(int childIndex) { AWorkspaceTreeNode node = null; int offset = super.getChildCount(); if(offset > 0) { node = super.getChildAt(childIndex); } if(node == null) { node = (AWorkspaceTreeNode) WorkspaceController.getCurrentModel().getChild(this, childIndex); } return node; } public int getChildCount() { int offset = super.getChildCount(); return WorkspaceController.getCurrentModel().getProjects().size()+offset; } public int getIndex(TreeNode node) { return WorkspaceController.getCurrentModel().getIndexOfChild(this, node); } public boolean getAllowsChildren() { return true; } public Enumeration<AWorkspaceTreeNode> children() { return new Enumeration<AWorkspaceTreeNode>() { int count = 0; public boolean hasMoreElements() { int max = (getChildCount()-WorkspaceController.getCurrentModel().getProjects().size()); return count < max; } public AWorkspaceTreeNode nextElement() { if (count < getChildCount()) { return getChildAt(count++); } throw new NoSuchElementException("WorkspaceRoot Enumeration"); } }; } }