001: /*
002: * Copyright (c) 2001-2007 JGoodies Karsten Lentzsch. All Rights Reserved.
003: *
004: * Redistribution and use in source and binary forms, with or without
005: * modification, are permitted provided that the following conditions are met:
006: *
007: * o Redistributions of source code must retain the above copyright notice,
008: * this list of conditions and the following disclaimer.
009: *
010: * o Redistributions in binary form must reproduce the above copyright notice,
011: * this list of conditions and the following disclaimer in the documentation
012: * and/or other materials provided with the distribution.
013: *
014: * o Neither the name of JGoodies Karsten Lentzsch nor the names of
015: * its contributors may be used to endorse or promote products derived
016: * from this software without specific prior written permission.
017: *
018: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
019: * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
020: * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
021: * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
022: * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
023: * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
024: * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
025: * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
026: * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
027: * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
028: * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
029: */
030:
031: package com.jgoodies.looks.plastic;
032:
033: import java.io.File;
034:
035: import javax.swing.Icon;
036: import javax.swing.JComponent;
037: import javax.swing.JFileChooser;
038: import javax.swing.UIManager;
039: import javax.swing.filechooser.FileSystemView;
040: import javax.swing.filechooser.FileView;
041: import javax.swing.plaf.ComponentUI;
042: import javax.swing.plaf.metal.MetalFileChooserUI;
043:
044: /**
045: * The JGoodies Plastic L&F implementation of <code>FileChooserUI</code>.
046: * Uses {@link FileSystemView#getSystemIcon(File)} to look up icons for files.
047: *
048: * @author Andrej Golovnin
049: * @author Karsten Lentzsch
050: * @version $Revision: 1.1 $
051: *
052: * @see FileSystemView#getSystemIcon(File)
053: */
054: public final class PlasticFileChooserUI extends MetalFileChooserUI {
055:
056: private final BasicFileView fileView = new SystemIconFileView();
057:
058: public static ComponentUI createUI(JComponent c) {
059: return new PlasticFileChooserUI((JFileChooser) c);
060: }
061:
062: public PlasticFileChooserUI(JFileChooser fileChooser) {
063: super (fileChooser);
064: }
065:
066: public void clearIconCache() {
067: fileView.clearIconCache();
068: }
069:
070: public FileView getFileView(JFileChooser fc) {
071: return fileView;
072: }
073:
074: /**
075: * Unlike its superclass, this class can look up and cache
076: * the system icon from the file chooser's file system view.
077: */
078: private final class SystemIconFileView extends BasicFileView {
079:
080: public Icon getIcon(File f) {
081: Icon icon = getCachedIcon(f);
082: if (icon != null) {
083: return icon;
084: }
085: if ((f != null)
086: && UIManager
087: .getBoolean("FileChooser.useSystemIcons")) {
088: icon = getFileChooser().getFileSystemView()
089: .getSystemIcon(f);
090: }
091: if (icon == null) {
092: return super.getIcon(f);
093: }
094: cacheIcon(f, icon);
095: return icon;
096: }
097:
098: }
099:
100: }
|