|
What this is
Other links
The source code/* * FileCellRenderer.java - renders table cells for the VFS browser * :tabSize=8:indentSize=8:noTabs=false: * :folding=explicit:collapseFolds=1: * * Copyright (C) 1999 Jason Ginchereau * Portions copyright (C) 2001, 2003 Slava Pestov * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package org.gjt.sp.jedit.browser; //{{{ Imports import java.awt.*; import java.awt.font.*; import javax.swing.*; import javax.swing.border.*; import javax.swing.table.*; import org.gjt.sp.jedit.io.VFS; import org.gjt.sp.jedit.*; //}}} public class FileCellRenderer extends DefaultTableCellRenderer { public static Icon fileIcon = GUIUtilities.loadIcon("File.png"); public static Icon openFileIcon = GUIUtilities.loadIcon("OpenFile.png"); public static Icon dirIcon = GUIUtilities.loadIcon("Folder.png"); public static Icon openDirIcon = GUIUtilities.loadIcon("OpenFolder.png"); public static Icon filesystemIcon = GUIUtilities.loadIcon("DriveSmall.png"); public static Icon loadingIcon = GUIUtilities.loadIcon("ReloadSmall.png"); //{{{ FileCellRenderer constructor public FileCellRenderer() { plainFont = UIManager.getFont("Tree.font"); if(plainFont == null) plainFont = jEdit.getFontProperty("metal.secondary.font"); boldFont = plainFont.deriveFont(Font.BOLD); } //}}} //{{{ getTableCellRendererComponent() method public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { super.getTableCellRendererComponent(table,value,isSelected, hasFocus,row,column); if(value instanceof VFSDirectoryEntryTableModel.Entry) { VFSDirectoryEntryTableModel.Entry entry = (VFSDirectoryEntryTableModel.Entry)value; VFS.DirectoryEntry file = entry.dirEntry; setFont(file.type == VFS.DirectoryEntry.FILE ? plainFont : boldFont); this.isSelected = isSelected; this.file = file; if(column == 0) { // while its broken to have a null // symlinkPath, some older plugins // might... String path; if(file.symlinkPath == null) path = file.path; else path = file.symlinkPath; openBuffer = (jEdit._getBuffer(path) != null); setIcon(showIcons ? getIconForFile(file,entry.expanded, openBuffer) : null); setText(file.name); int state; if(file.type == VFS.DirectoryEntry.FILE) state = ExpansionToggleBorder.STATE_NONE; else if(entry.expanded) state = ExpansionToggleBorder.STATE_EXPANDED; else state = ExpansionToggleBorder.STATE_COLLAPSED; setBorder(new ExpansionToggleBorder( state,entry.level)); } else { VFSDirectoryEntryTableModel model = (VFSDirectoryEntryTableModel)table.getModel(); String extAttr = model.getExtendedAttribute(column - 1); openBuffer = false; setIcon(null); setText(file.getExtendedAttribute(extAttr)); setBorder(new EmptyBorder(1,1,1,1)); } } return this; } //}}} //{{{ paintComponent() method public void paintComponent(Graphics g) { if(!isSelected) { Color color = file.getColor(); setForeground(color == null ? UIManager.getColor("Tree.foreground") : color); } super.paintComponent(g); if(openBuffer) { Font font = getFont(); FontMetrics fm = getFontMetrics(font); int x, y; if(getIcon() == null) { x = 0; y = fm.getAscent() + 2; } else { x = getIcon().getIconWidth() + getIconTextGap(); y = Math.max(fm.getAscent() + 2,16); } Insets border = getBorder().getBorderInsets(this); x += border.left; g.setColor(getForeground()); g.drawLine(x,y,x + fm.stringWidth(getText()),y); } } //}}} //{{{ getIconForFile() method /** * @since jEdit 4.2pre7 */ public static Icon getIconForFile(VFS.DirectoryEntry file, boolean expanded) { return getIconForFile(file,expanded, jEdit._getBuffer(file.symlinkPath) != null); } //}}} //{{{ getIconForFile() method public static Icon getIconForFile(VFS.DirectoryEntry file, boolean expanded, boolean openBuffer) { if(file.type == VFS.DirectoryEntry.DIRECTORY) return (expanded ? openDirIcon : dirIcon); else if(file.type == VFS.DirectoryEntry.FILESYSTEM) return filesystemIcon; else if(openBuffer) return openFileIcon; else return fileIcon; } //}}} //{{{ Package-private members Font plainFont; Font boldFont; boolean showIcons; //{{{ propertiesChanged() method void propertiesChanged() { showIcons = jEdit.getBooleanProperty("vfs.browser.showIcons"); } //}}} //{{{ getEntryWidth() method int getEntryWidth(VFSDirectoryEntryTableModel.Entry entry, Font font, FontRenderContext fontRenderContext) { String name = entry.dirEntry.name; int width = (int)font.getStringBounds(name,fontRenderContext) .getWidth(); width += ExpansionToggleBorder.ICON_WIDTH + entry.level * ExpansionToggleBorder.LEVEL_WIDTH + 3; if(showIcons) { width += fileIcon.getIconWidth(); width += getIconTextGap(); } return width; } //}}} //}}} //{{{ Private members private boolean openBuffer; private boolean isSelected; private VFS.DirectoryEntry file; //}}} //{{{ ExpansionToggleBorder class static class ExpansionToggleBorder implements Border { static final Icon COLLAPSED_ICON; static final Icon EXPANDED_ICON; static final int ICON_WIDTH; static final int LEVEL_WIDTH = 15; static final int STATE_NONE = 0; static final int STATE_COLLAPSED = 1; static final int STATE_EXPANDED = 2; //{{{ ExpansionToggleBorder constructor public ExpansionToggleBorder(int state, int level) { this.state = state; this.level = level; } //}}} //{{{ paintBorder() method public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) { switch(state) { case STATE_COLLAPSED: COLLAPSED_ICON.paintIcon(c,g, x + level * LEVEL_WIDTH + 2, y + (height - COLLAPSED_ICON.getIconHeight()) / 2); break; case STATE_EXPANDED: EXPANDED_ICON.paintIcon(c,g, x + level * LEVEL_WIDTH + 2, y + 2 + (height - EXPANDED_ICON.getIconHeight()) / 2); break; } } //}}} //{{{ getBorderInsets() method public Insets getBorderInsets(Component c) { return new Insets(1,level * LEVEL_WIDTH + ICON_WIDTH + 4,1,1); } //}}} //{{{ isBorderOpaque() method public boolean isBorderOpaque() { return false; } //}}} //{{{ isExpansionToggle() method public static boolean isExpansionToggle(int level, int x) { return (x >= level * LEVEL_WIDTH) && (x <= level * LEVEL_WIDTH + ICON_WIDTH); } //}}} //{{{ Private members private int state; private int level; static { COLLAPSED_ICON = GUIUtilities.loadIcon("arrow1.png"); EXPANDED_ICON = GUIUtilities.loadIcon("arrow2.png"); ICON_WIDTH = Math.max(COLLAPSED_ICON.getIconWidth(), EXPANDED_ICON.getIconWidth()); } //}}} } //}}} } |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.