package com.cxplan.projection.ui.laf;

import com.alee.laf.filechooser.WebFileChooserPanel;
import com.alee.utils.FileUtils;

import javax.swing.*;
import javax.swing.filechooser.FileView;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.metal.MetalFileChooserUI;
import java.io.File;

/**
 * @author Kenny
 * created on 2018/11/8
 */
public class CXFileChooserUI extends MetalFileChooserUI {

    public static ComponentUI createUI(JComponent c) {
        return new CXFileChooserUI((JFileChooser) c);
    }
    /**
     * Special FileView for file chooser.
     */
    private CXFileView fileView;

    public CXFileChooserUI(JFileChooser filechooser) {
        super(filechooser);
    }

    @Override
    public void installUI ( final JComponent c ) {
        fileView = new CXFileView();
        ((JFileChooser)c).setFileView(fileView);
        super.installUI(c);
    }

    @Override
    public void installComponents(JFileChooser fc) {
        upFolderIcon = WebFileChooserPanel.FOLDER_UP_ICON;
        detailsViewIcon  = WebFileChooserPanel.VIEW_TABLE_ICON;
        listViewIcon     = WebFileChooserPanel.VIEW_TILES_ICON;
        homeFolderIcon = WebFileChooserPanel.FOLDER_HOME_ICON;
        newFolderIcon = WebFileChooserPanel.FOLDER_NEW_ICON;
        super.installComponents(fc);
    }
    @Override
    public FileView getFileView ( final JFileChooser fc )
    {
        return fileView;
    }

    /**
     * @param fileView
     */
    public void setFileView ( final CXFileView fileView )
    {
        this.fileView = fileView;
    }

    /**
     * Special FileView for file chooser.
     */
    protected class CXFileView extends FileView
    {
        /**
         * Constructs new WebFileView instance.
         */
        public CXFileView ()
        {
            super ();
        }

        /**
         * {@inheritDoc}
         */
        @Override
        public String getName ( final File f )
        {
            return FileUtils.getDisplayFileName ( f );
        }

        /**
         * {@inheritDoc}
         */
        @Override
        public String getDescription ( final File f )
        {
            return getTypeDescription ( f );
        }

        /**
         * {@inheritDoc}
         */
        @Override
        public String getTypeDescription ( final File f )
        {
            return FileUtils.getFileTypeDescription ( f );
        }

        /**
         * {@inheritDoc}
         */
        @Override
        public Icon getIcon ( final File f )
        {
            return CXFileUtils.getFileIcon ( f );
        }
    }
}