/* * Copyright 2016 Igor Maznitsa. * * 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.igormaznitsa.sciareto.ui.tree; import java.awt.Component; import java.awt.Image; import java.util.Locale; import javax.annotation.Nonnull; import javax.annotation.Nullable; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JTree; import javax.swing.UIManager; import javax.swing.tree.DefaultTreeCellRenderer; import org.apache.commons.io.FilenameUtils; import com.igormaznitsa.meta.common.utils.GetUtils; import com.igormaznitsa.sciareto.ui.Icons; import com.igormaznitsa.sciareto.ui.UiUtils; import com.igormaznitsa.sciareto.ui.editors.PictureViewer; public class TreeCellRenderer extends DefaultTreeCellRenderer { private static final long serialVersionUID = -6283018126496160094L; private static final Image PROJECT_BADGE = UiUtils.loadIcon("project_badge.png"); //NOI18N private static final Image KF_BADGE = UiUtils.loadIcon("mmdbadge.png"); //NOI18N private static final Image READONLY_BADGE = UiUtils.loadIcon("ro.png"); //NOI18N private static final Icon ICON_IMAGE_RO; public static final Icon ICON_IMAGE = new ImageIcon(UiUtils.loadIcon("image16.png")); //NOI18N public static final Icon DEFAULT_FOLDER_CLOSED = new ImageIcon(UiUtils.loadIcon("folder16.gif")); //NOI18N public static final Icon DEFAULT_FOLDER_OPENED = new ImageIcon(UiUtils.loadIcon("folderOpen16.gif")); //NOI18N public static final Icon DEFAULT_FILE = new ImageIcon(UiUtils.loadIcon("document_empty16.png")); //NOI18N static { ICON_IMAGE_RO = new ImageIcon(UiUtils.makeBadgedRightTop(((ImageIcon) ICON_IMAGE).getImage(), READONLY_BADGE)); } private Icon PROJECT_CLOSED; private Icon PROJECT_OPENED; private Icon PROJECT_CLOSED_RO; private Icon PROJECT_OPENED_RO; private Icon LEAF; private Icon LEAF_RO; private Icon FOLDER_CLOSED; private Icon FOLDER_CLOSED_RO; private Icon FOLDER_KF_CLOSED; private Icon FOLDER_KF_CLOSED_RO; private Icon FOLDER_OPENED; private Icon FOLDER_OPENED_RO; private Icon FOLDER_KF_OPENED; private Icon FOLDER_KF_OPENED_RO; private Icon LEAF_MINDMAP; private Icon LEAF_MINDMAP_RO; public TreeCellRenderer() { super(); } private void ensureIcons(@Nonnull final JTree tree) { if (PROJECT_CLOSED == null) { PROJECT_CLOSED = new ImageIcon(UiUtils.makeBadgedRightBottom(UiUtils.iconToImage(tree, GetUtils.ensureNonNull(UIManager.getIcon("Tree.closedIcon"), DEFAULT_FOLDER_CLOSED)), PROJECT_BADGE)); //NOI18N PROJECT_CLOSED_RO = new ImageIcon(UiUtils.makeBadgedRightTop(((ImageIcon) PROJECT_CLOSED).getImage(), READONLY_BADGE)); } if (PROJECT_OPENED == null) { PROJECT_OPENED = new ImageIcon(UiUtils.makeBadgedRightBottom(UiUtils.iconToImage(tree, GetUtils.ensureNonNull(UIManager.getIcon("Tree.openIcon"), DEFAULT_FOLDER_OPENED)), PROJECT_BADGE)); //NOI18N PROJECT_OPENED_RO = new ImageIcon(UiUtils.makeBadgedRightTop(((ImageIcon) PROJECT_OPENED).getImage(), READONLY_BADGE)); } if (FOLDER_CLOSED == null) { FOLDER_CLOSED = new ImageIcon(UiUtils.iconToImage(tree, GetUtils.ensureNonNull(UIManager.getIcon("Tree.closedIcon"), DEFAULT_FOLDER_CLOSED))); //NOI18N FOLDER_CLOSED_RO = new ImageIcon(UiUtils.makeBadgedRightTop(((ImageIcon) FOLDER_CLOSED).getImage(), READONLY_BADGE)); } if (FOLDER_OPENED == null) { FOLDER_OPENED = new ImageIcon(UiUtils.iconToImage(tree, GetUtils.ensureNonNull(UIManager.getIcon("Tree.openIcon"), DEFAULT_FOLDER_OPENED))); //NOI18N FOLDER_OPENED_RO = new ImageIcon(UiUtils.makeBadgedRightTop(((ImageIcon) FOLDER_OPENED).getImage(), READONLY_BADGE)); } if (FOLDER_KF_CLOSED == null) { FOLDER_KF_CLOSED = new ImageIcon(UiUtils.makeBadgedRightBottom(UiUtils.iconToImage(tree, GetUtils.ensureNonNull(UIManager.getIcon("Tree.closedIcon"), DEFAULT_FOLDER_CLOSED)), KF_BADGE)); //NOI18N FOLDER_KF_CLOSED_RO = new ImageIcon(UiUtils.makeBadgedRightTop(((ImageIcon) FOLDER_KF_CLOSED).getImage(), READONLY_BADGE)); } if (FOLDER_KF_OPENED == null) { FOLDER_KF_OPENED = new ImageIcon(UiUtils.makeBadgedRightBottom(UiUtils.iconToImage(tree, GetUtils.ensureNonNull(UIManager.getIcon("Tree.openIcon"), DEFAULT_FOLDER_OPENED)), KF_BADGE)); //NOI18N FOLDER_KF_OPENED_RO = new ImageIcon(UiUtils.makeBadgedRightTop(((ImageIcon) FOLDER_KF_OPENED).getImage(), READONLY_BADGE)); } if (LEAF == null) { LEAF = new ImageIcon(UiUtils.iconToImage(tree, GetUtils.ensureNonNull(UIManager.getIcon("Tree.leafIcon"), DEFAULT_FILE))); //NOI18N LEAF_RO = new ImageIcon(UiUtils.makeBadgedRightTop(((ImageIcon) LEAF).getImage(), READONLY_BADGE)); } if (LEAF_MINDMAP == null) { LEAF_MINDMAP = Icons.DOCUMENT.getIcon(); LEAF_MINDMAP_RO = new ImageIcon(UiUtils.makeBadgedRightTop(Icons.DOCUMENT.getIcon().getImage(), READONLY_BADGE)); } } @Override @Nonnull public Component getTreeCellRendererComponent(@Nonnull final JTree tree, @Nullable final Object value, final boolean selected, final boolean expanded, final boolean leaf, final int row, final boolean hasFocus) { ensureIcons(tree); super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus); if (value != null) { if (value instanceof NodeFileOrFolder) { final NodeFileOrFolder node = (NodeFileOrFolder) value; if (node instanceof NodeProject) { if (node.isReadOnly()) { this.setIcon(expanded ? PROJECT_OPENED_RO : PROJECT_CLOSED_RO); } else { this.setIcon(expanded ? PROJECT_OPENED : PROJECT_CLOSED); } } else if (node.isLeaf()) { final String ext = FilenameUtils.getExtension(node.toString()).toLowerCase(Locale.ENGLISH); if (ext.equals("mmd")) { //NOI18N this.setIcon(node.isReadOnly() ? LEAF_MINDMAP_RO : LEAF_MINDMAP); } else if (PictureViewer.SUPPORTED_FORMATS.contains(ext)) { this.setIcon(node.isReadOnly() ? ICON_IMAGE_RO : ICON_IMAGE); } else { this.setIcon(node.isReadOnly() ? LEAF_RO : LEAF); } } else if (node.isProjectKnowledgeFolder()) { this.setText("Knowledge"); if (node.isReadOnly()) { this.setIcon(expanded ? FOLDER_KF_OPENED_RO : FOLDER_KF_CLOSED_RO); } else { this.setIcon(expanded ? FOLDER_KF_OPENED : FOLDER_KF_CLOSED); } } else if (node.isReadOnly()) { this.setIcon(expanded ? FOLDER_OPENED_RO : FOLDER_CLOSED_RO); } else { this.setIcon(expanded ? FOLDER_OPENED : FOLDER_CLOSED); } } } return this; } }