All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.jtattoo.plaf.BaseFileChooserUI Maven / Gradle / Ivy

There is a newer version: 3.1
Show newest version
/*
* Copyright (c) 2002 and later by MH Software-Entwicklung. All Rights Reserved.
*  
* JTattoo is multiple licensed. If your are an open source developer you can use
* it under the terms and conditions of the GNU General Public License version 2.0
* or later as published by the Free Software Foundation.
*  
* see: gpl-2.0.txt
* 
* If you pay for a license you will become a registered user who could use the
* software under the terms and conditions of the GNU Lesser General Public License
* version 2.0 or later with classpath exception as published by the Free Software
* Foundation.
* 
* see: lgpl-2.0.txt
* see: classpath-exception.txt
* 
* Registered users could also use JTattoo under the terms and conditions of the 
* Apache License, Version 2.0 as published by the Apache Software Foundation.
*  
* see: APACHE-LICENSE-2.0.txt
*/

package com.jtattoo.plaf;

import java.awt.Dimension;
import java.awt.Window;
import java.io.File;

import javax.swing.Icon;
import javax.swing.JComponent;
import javax.swing.JFileChooser;
import javax.swing.SwingUtilities;
import javax.swing.event.AncestorEvent;
import javax.swing.event.AncestorListener;
import javax.swing.filechooser.FileView;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.metal.MetalFileChooserUI;

/**
 * @author Michael Hagen
 */
public class BaseFileChooserUI extends MetalFileChooserUI {

  private FileView               fileView         = null;

  // Preferred and Minimum sizes for the dialog box
  private static final int       PREF_WIDTH       = 580;
  private static final int       PREF_HEIGHT      = 340;
  private static final Dimension PREF_SIZE        = new Dimension(PREF_WIDTH, PREF_HEIGHT);

  private AncestorListener       ancestorListener = null;

  public BaseFileChooserUI(JFileChooser fileChooser) {
    super(fileChooser);
    fileView = new BaseFileView();
  }

  public static ComponentUI createUI(JComponent c) {
    return new BaseFileChooserUI((JFileChooser) c);
  }

  protected void installListeners(JFileChooser fc) {
    super.installListeners(fc);
    ancestorListener = new AncestorListener() {

      public void ancestorAdded(AncestorEvent event) {
        Window w = SwingUtilities.getWindowAncestor(getFileChooser());
        if (w != null) {
          w.setMinimumSize(getPreferredSize(getFileChooser()));
        }
      }

      public void ancestorRemoved(AncestorEvent event) {
      }

      public void ancestorMoved(AncestorEvent event) {
      }
    };

    fc.addAncestorListener(ancestorListener);
  }

  protected void uninstallListeners(JFileChooser fc) {
    super.uninstallListeners(fc);
    fc.removeAncestorListener(ancestorListener);
  }

  /**
   * Returns the preferred size of the specified JFileChooser. The preferred size is at least as large, in both height and width, as the
   * preferred size recommended by the file chooser's layout manager.
   *
   * @param c
   *          a JFileChooser
   * @return a Dimension specifying the preferred width and height of the file chooser
   */
  public Dimension getPreferredSize(JComponent c) {
    int prefWidth = PREF_SIZE.width;
    Dimension d = c.getLayout().preferredLayoutSize(c);
    if (d != null) {
      return new Dimension(d.width < prefWidth ? prefWidth : d.width, d.height < PREF_SIZE.height ? PREF_SIZE.height : d.height);
    }
    else {
      return new Dimension(prefWidth, PREF_SIZE.height);
    }
  }

  public FileView getFileView(JFileChooser fc) {
    if (JTattooUtilities.getJavaVersion() < 1.4) {
      return super.getFileView(fc);
    }
    else {
      return fileView;
    }
  }

  // ------------------------------------------------------------------------------
  protected class BaseFileView extends BasicFileView {

    public Icon getIcon(File f) {
      Icon icon = getCachedIcon(f);
      if (icon != null) {
        return icon;
      }
      if (f != null) {
        icon = getFileChooser().getFileSystemView().getSystemIcon(f);
      }
      if (icon == null) {
        icon = super.getIcon(f);
      }
      cacheIcon(f, icon);
      return icon;
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy