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

org.fernice.reflare.ui.FlareFileChooserUI Maven / Gradle / Ivy

The newest version!
/*
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 */

package org.fernice.reflare.ui;

import fernice.reflare.StyleHelper;
import fernice.reflare.StyledImageIcon;
import fernice.reflare.light.FButton;
import fernice.reflare.light.FComboBox;
import fernice.reflare.light.FLabel;
import fernice.reflare.light.FPanel;
import fernice.reflare.light.FTextField;
import fernice.reflare.light.FToggleButton;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.LayoutManager;
import java.awt.event.ActionEvent;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.MouseListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Arrays;
import java.util.Locale;
import java.util.Vector;
import javax.swing.AbstractAction;
import javax.swing.AbstractListModel;
import javax.swing.Action;
import javax.swing.ActionMap;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.ButtonGroup;
import javax.swing.ComboBoxModel;
import javax.swing.Icon;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.ListCellRenderer;
import javax.swing.UIManager;
import javax.swing.event.ListSelectionListener;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileSystemView;
import javax.swing.plaf.ActionMapUIResource;
import javax.swing.plaf.basic.BasicDirectoryModel;
import sun.awt.shell.ShellFolder;
import sun.swing.FilePane;
import sun.swing.FilePane.FileChooserUIAccessor;

public class FlareFileChooserUI extends FlareAbstractFileChooserUI {

    private FLabel lookInLabel;
    private FComboBox directoryComboBox;
    private DirectoryComboBoxModel directoryComboBoxModel;
    private Action directoryComboBoxAction = new DirectoryComboBoxAction();
    private FilterComboBoxModel filterComboBoxModel;
    private FTextField fileNameTextField;
    private FilePane filePane;
    private FToggleButton listViewButton;
    private FToggleButton detailsViewButton;
    private boolean readOnly;
    private FPanel buttonPanel;
    private FPanel bottomPanel;
    private FComboBox filterComboBox;
    private static final Dimension hstrut5 = new Dimension(5, 1);
    private static final Insets shrinkwrap = new Insets(0, 0, 0, 0);
    private static Dimension LIST_PREF_SIZE = new Dimension(405, 135);
    private int lookInLabelMnemonic = 0;
    private String lookInLabelText = null;
    private String saveInLabelText = null;
    private int fileNameLabelMnemonic = 0;
    private String fileNameLabelText = null;
    private int folderNameLabelMnemonic = 0;
    private String folderNameLabelText = null;
    private int filesOfTypeLabelMnemonic = 0;
    private String filesOfTypeLabelText = null;
    private String upFolderToolTipText = null;
    private String upFolderAccessibleName = null;
    private String homeFolderToolTipText = null;
    private String homeFolderAccessibleName = null;
    private String newFolderToolTipText = null;
    private String newFolderAccessibleName = null;
    private String listViewButtonToolTipText = null;
    private String listViewButtonAccessibleName = null;
    private String detailsViewButtonToolTipText = null;
    private String detailsViewButtonAccessibleName = null;
    private AlignedLabel fileNameLabel;
    private final PropertyChangeListener modeListener = var1 -> {
        if (fileNameLabel != null) {
            populateFileNameLabel();
        }
    };
    static final int space = 10;

    private void populateFileNameLabel() {
        if (this.getFileChooser().getFileSelectionMode() == 1) {
            this.fileNameLabel.setText(this.folderNameLabelText);
            this.fileNameLabel.setDisplayedMnemonic(this.folderNameLabelMnemonic);
        } else {
            this.fileNameLabel.setText(this.fileNameLabelText);
            this.fileNameLabel.setDisplayedMnemonic(this.fileNameLabelMnemonic);
        }

    }

    public FlareFileChooserUI(JFileChooser var1) {
        super(var1);
    }

    protected void installDefaults(JFileChooser var1) {
        super.installDefaults(var1);
        this.readOnly = UIManager.getBoolean("FileChooser.readOnly");
    }

    public void installComponents(JFileChooser var1) {
        super.installComponents(var1);
        var1.setLayout(new BorderLayout(0, 11));
        FPanel var3 = new FPanel(new BorderLayout(11, 0));
        FPanel var4 = new FPanel();
        var4.setLayout(new BoxLayout(var4, 2));
        var3.add(var4, "After");
        var1.add(var3, "North");
        this.lookInLabel = new FLabel(this.lookInLabelText);
        this.lookInLabel.setDisplayedMnemonic(this.lookInLabelMnemonic);
        this.lookInLabel.setText("Look in:");
        var3.add(this.lookInLabel, "Before");
        this.directoryComboBox = new FComboBox<>();
        this.directoryComboBox.getAccessibleContext().setAccessibleDescription(this.lookInLabelText);
        this.directoryComboBox.putClientProperty("JComboBox.isTableCellEditor", Boolean.TRUE);
        this.lookInLabel.setLabelFor(this.directoryComboBox);
        this.directoryComboBoxModel = this.createDirectoryComboBoxModel(var1);
        this.directoryComboBox.setModel(this.directoryComboBoxModel);
        this.directoryComboBox.addActionListener(this.directoryComboBoxAction);
        this.directoryComboBox.setRenderer(this.createDirectoryComboBoxRenderer(var1));
        this.directoryComboBox.setAlignmentX(0.0F);
        this.directoryComboBox.setAlignmentY(0.0F);
        this.directoryComboBox.setMaximumRowCount(8);
        var3.add(this.directoryComboBox, "Center");
        this.filePane = new FilePane(new SynthFileChooserUIAccessor());
        StyleHelper.getClasses(filePane).add("file-pane");

        var1.addPropertyChangeListener(this.filePane);
        JPopupMenu var5 = this.filePane.getComponentPopupMenu();
        if (var5 != null) {
            var5.insert(this.getChangeToParentDirectoryAction(), 0);
            if (File.separatorChar == '/') {
                var5.insert(this.getGoHomeAction(), 1);
            }
        }

        FileSystemView var6 = var1.getFileSystemView();
        FButton var7 = new FButton(this.getChangeToParentDirectoryAction());
        var7.setText((String) null);
        var7.setIcon(StyledImageIcon.fromResource("/reflare/icons/folder.png"));
        var7.setToolTipText(this.upFolderToolTipText);
        var7.getAccessibleContext().setAccessibleName(this.upFolderAccessibleName);
        var7.setAlignmentX(0.0F);
        var7.setAlignmentY(0.5F);
        var7.setMargin(shrinkwrap);
        var4.add(var7);
        var4.add(Box.createRigidArea(hstrut5));
        File var8 = var6.getHomeDirectory();
        String var9 = this.homeFolderToolTipText;
        if (var6.isRoot(var8)) {
            var9 = this.getFileView(var1).getName(var8);
        }

        FButton var10 = new FButton(this.homeFolderIcon);
        var10.setIcon(StyledImageIcon.fromResource("/reflare/icons/folder-home.png"));
        var10.setToolTipText(var9);
        var10.getAccessibleContext().setAccessibleName(this.homeFolderAccessibleName);
        var10.setAlignmentX(0.0F);
        var10.setAlignmentY(0.5F);
        var10.setMargin(shrinkwrap);
        var10.addActionListener(this.getGoHomeAction());
        var4.add(var10);
        var4.add(Box.createRigidArea(hstrut5));
        if (!this.readOnly) {
            var10 = new FButton(this.filePane.getNewFolderAction());
            var10.setIcon(this.newFolderIcon);
            var10.setIcon(StyledImageIcon.fromResource("/reflare/icons/folder-new.png"));
            var10.setText((String) null);
            var10.setToolTipText(this.newFolderToolTipText);
            var10.getAccessibleContext().setAccessibleName(this.newFolderAccessibleName);
            var10.setAlignmentX(0.0F);
            var10.setAlignmentY(0.5F);
            var10.setMargin(shrinkwrap);
            var4.add(var10);
            var4.add(Box.createRigidArea(hstrut5));
        }

        ButtonGroup var11 = new ButtonGroup();
        this.listViewButton = new FToggleButton(this.listViewIcon);
        this.listViewButton.setToolTipText(this.listViewButtonToolTipText);
        this.listViewButton.getAccessibleContext().setAccessibleName(this.listViewButtonAccessibleName);
        this.listViewButton.setSelected(true);
        this.listViewButton.setAlignmentX(0.0F);
        this.listViewButton.setAlignmentY(0.5F);
        this.listViewButton.setMargin(shrinkwrap);
        this.listViewButton.addActionListener(this.filePane.getViewTypeAction(0));
        var4.add(this.listViewButton);
        var11.add(this.listViewButton);
        this.detailsViewButton = new FToggleButton(this.detailsViewIcon);
        this.detailsViewButton.setToolTipText(this.detailsViewButtonToolTipText);
        this.detailsViewButton.getAccessibleContext().setAccessibleName(this.detailsViewButtonAccessibleName);
        this.detailsViewButton.setAlignmentX(0.0F);
        this.detailsViewButton.setAlignmentY(0.5F);
        this.detailsViewButton.setMargin(shrinkwrap);
        this.detailsViewButton.addActionListener(this.filePane.getViewTypeAction(1));
        var4.add(this.detailsViewButton);
        var11.add(this.detailsViewButton);
        this.filePane.addPropertyChangeListener(new PropertyChangeListener() {
            public void propertyChange(PropertyChangeEvent var1) {
                if ("viewType".equals(var1.getPropertyName())) {
                    int var2 = filePane.getViewType();
                    switch (var2) {
                        case 0:
                            listViewButton.setSelected(true);
                            break;
                        case 1:
                            detailsViewButton.setSelected(true);
                    }
                }

            }
        });
        var1.add(this.getAccessoryPanel(), "After");
        JComponent var12 = var1.getAccessory();
        if (var12 != null) {
            this.getAccessoryPanel().add(var12);
        }

        this.filePane.setPreferredSize(LIST_PREF_SIZE);
        var1.add(this.filePane, "Center");
        this.bottomPanel = new FPanel();
        this.bottomPanel.setLayout(new BoxLayout(this.bottomPanel, 1));
        var1.add(this.bottomPanel, "South");
        FPanel var13 = new FPanel();
        var13.setLayout(new BoxLayout(var13, 2));
        this.bottomPanel.add(var13);
        this.bottomPanel.add(Box.createRigidArea(new Dimension(1, 5)));
        this.fileNameLabel = new AlignedLabel();
        this.populateFileNameLabel();
        var13.add(this.fileNameLabel);
        this.fileNameTextField = new FTextField(35) {
            public Dimension getMaximumSize() {
                return new Dimension(32767, super.getPreferredSize().height);
            }
        };
        var13.add(this.fileNameTextField);
        this.fileNameLabel.setLabelFor(this.fileNameTextField);
        this.fileNameTextField.addFocusListener(new FocusAdapter() {
            public void focusGained(FocusEvent var1) {
                if (!FlareFileChooserUI.this.getFileChooser().isMultiSelectionEnabled()) {
                    FlareFileChooserUI.this.filePane.clearSelection();
                }
            }
        });
        if (var1.isMultiSelectionEnabled()) {
            this.setFileName(this.fileNameString(var1.getSelectedFiles()));
        } else {
            this.setFileName(this.fileNameString(var1.getSelectedFile()));
        }

        FPanel var14 = new FPanel();
        var14.setLayout(new BoxLayout(var14, 2));
        this.bottomPanel.add(var14);
        AlignedLabel var15 = new AlignedLabel(this.filesOfTypeLabelText);
        var15.setDisplayedMnemonic(this.filesOfTypeLabelMnemonic);
        var14.add(var15);
        this.filterComboBoxModel = this.createFilterComboBoxModel();
        var1.addPropertyChangeListener(this.filterComboBoxModel);
        this.filterComboBox = new FComboBox<>(this.filterComboBoxModel);
        this.filterComboBox.getAccessibleContext().setAccessibleDescription(this.filesOfTypeLabelText);
        var15.setLabelFor(this.filterComboBox);
        this.filterComboBox.setRenderer(this.createFilterComboBoxRenderer());
        var14.add(this.filterComboBox);
        this.buttonPanel = new FPanel();
        this.buttonPanel.setLayout(new ButtonAreaLayout());
        this.buttonPanel.add(this.getApproveButton(var1));
        this.buttonPanel.add(this.getCancelButton(var1));
        if (var1.getControlButtonsAreShown()) {
            this.addControlButtons();
        }

        groupLabels(new AlignedLabel[]{this.fileNameLabel, var15});

    }

    private Component findChildComponent(Container var1, Class var2) {
        int var3 = var1.getComponentCount();

        for (int var4 = 0; var4 < var3; ++var4) {
            Component var5 = var1.getComponent(var4);
            if (var2.isInstance(var5)) {
                return var5;
            }

            if (var5 instanceof Container) {
                Component var6 = this.findChildComponent((Container) var5, var2);
                if (var6 != null) {
                    return var6;
                }
            }
        }

        return null;
    }

    protected void installListeners(JFileChooser var1) {
        super.installListeners(var1);
        var1.addPropertyChangeListener("fileSelectionChanged", this.modeListener);
    }

    protected void uninstallListeners(JFileChooser var1) {
        var1.removePropertyChangeListener("fileSelectionChanged", this.modeListener);
        super.uninstallListeners(var1);
    }

    private String fileNameString(File var1) {
        if (var1 == null) {
            return null;
        } else {
            JFileChooser var2 = this.getFileChooser();
            return var2.isDirectorySelectionEnabled() && !var2.isFileSelectionEnabled() ? var1.getPath() : var1.getName();
        }
    }

    private String fileNameString(File[] var1) {
        StringBuffer var2 = new StringBuffer();

        for (int var3 = 0; var1 != null && var3 < var1.length; ++var3) {
            if (var3 > 0) {
                var2.append(" ");
            }

            if (var1.length > 1) {
                var2.append("\"");
            }

            var2.append(this.fileNameString(var1[var3]));
            if (var1.length > 1) {
                var2.append("\"");
            }
        }

        return var2.toString();
    }

    public void uninstallUI(JComponent var1) {
        var1.removePropertyChangeListener(this.filterComboBoxModel);
        var1.removePropertyChangeListener(this.filePane);
        if (this.filePane != null) {
            this.filePane.uninstallUI();
            this.filePane = null;
        }

        super.uninstallUI(var1);
    }

    protected void installStrings(JFileChooser var1) {
        super.installStrings(var1);
        Locale var2 = var1.getLocale();
        this.lookInLabelMnemonic = this.getMnemonic("FileChooser.lookInLabelMnemonic", var2);
        //        this.lookInLabelText = UIManager.getString("FileChooser.lookInLabelText", var2);
        this.lookInLabelText = "Look In";
        //        this.saveInLabelText = UIManager.getString("FileChooser.saveInLabelText", var2);
        this.saveInLabelText = "Save In";
        this.fileNameLabelMnemonic = this.getMnemonic("FileChooser.fileNameLabelMnemonic", var2);
        //        this.fileNameLabelText = UIManager.getString("FileChooser.fileNameLabelText", var2);
        this.fileNameLabelText = "File Name:";
        this.folderNameLabelMnemonic = this.getMnemonic("FileChooser.folderNameLabelMnemonic", var2);
        //        this.folderNameLabelText = UIManager.getString("FileChooser.folderNameLabelText", var2);
        this.folderNameLabelText = "Folder Name:";
        this.filesOfTypeLabelMnemonic = this.getMnemonic("FileChooser.filesOfTypeLabelMnemonic", var2);
        //this.filesOfTypeLabelText = UIManager.getString("FileChooser.filesOfTypeLabelText", var2);
        this.filesOfTypeLabelText = "Files of Type:";
        //        this.upFolderToolTipText = UIManager.getString("FileChooser.upFolderToolTipText", var2);
        this.upFolderToolTipText = "Traverse one folder up";
        this.upFolderAccessibleName = UIManager.getString("FileChooser.upFolderAccessibleName", var2);
        //        this.homeFolderToolTipText = UIManager.getString("FileChooser.homeFolderToolTipText", var2);
        this.homeFolderToolTipText = "Show home folder";
        this.homeFolderAccessibleName = UIManager.getString("FileChooser.homeFolderAccessibleName", var2);
        //        this.newFolderToolTipText = UIManager.getString("FileChooser.newFolderToolTipText", var2);
        this.newFolderToolTipText = "Create a new folder";
        this.newFolderAccessibleName = UIManager.getString("FileChooser.newFolderAccessibleName", var2);
        this.listViewButtonToolTipText = UIManager.getString("FileChooser.listViewButtonToolTipText", var2);
        this.listViewButtonAccessibleName = UIManager.getString("FileChooser.listViewButtonAccessibleName", var2);
        this.detailsViewButtonToolTipText = UIManager.getString("FileChooser.detailsViewButtonToolTipText", var2);
        this.detailsViewButtonAccessibleName = UIManager.getString("FileChooser.detailsViewButtonAccessibleName", var2);
    }

    private int getMnemonic(String var1, Locale var2) {
        return getUIDefaultsInt(var1, var2);
    }

    private static int getUIDefaultsInt(Object var0, Locale var1) {
        return getUIDefaultsInt(var0, var1, 0);
    }

    private static int getUIDefaultsInt(Object var0, int var1) {
        return getUIDefaultsInt(var0, null, var1);
    }

    private static int getUIDefaultsInt(Object var0, Locale var1, int var2) {
        Object var3 = UIManager.get(var0, var1);
        if (var3 instanceof Integer) {
            return (Integer) var3;
        } else {
            if (var3 instanceof String) {
                try {
                    return Integer.parseInt((String) var3);
                } catch (NumberFormatException var5) {
                }
            }

            return var2;
        }
    }

    public String getFileName() {
        return this.fileNameTextField != null ? this.fileNameTextField.getText() : null;
    }

    public void setFileName(String var1) {
        if (this.fileNameTextField != null) {
            this.fileNameTextField.setText(var1);
        }

    }

    public void rescanCurrentDirectory(JFileChooser var1) {
        this.filePane.rescanCurrentDirectory();
    }

    protected void doSelectedFileChanged(PropertyChangeEvent var1) {
        super.doSelectedFileChanged(var1);
        File var2 = (File) var1.getNewValue();
        JFileChooser var3 = this.getFileChooser();
        if (var2 != null && (var3.isFileSelectionEnabled() && !var2.isDirectory() || var2.isDirectory() && var3.isDirectorySelectionEnabled())) {
            this.setFileName(this.fileNameString(var2));
        }

    }

    protected void doSelectedFilesChanged(PropertyChangeEvent var1) {
        super.doSelectedFilesChanged(var1);
        File[] var2 = (File[]) ((File[]) var1.getNewValue());
        JFileChooser var3 = this.getFileChooser();
        if (var2 != null && var2.length > 0 && (var2.length > 1 || var3.isDirectorySelectionEnabled() || !var2[0].isDirectory())) {
            this.setFileName(this.fileNameString(var2));
        }

    }

    protected void doDirectoryChanged(PropertyChangeEvent var1) {
        super.doDirectoryChanged(var1);
        JFileChooser var2 = this.getFileChooser();
        FileSystemView var3 = var2.getFileSystemView();
        File var4 = var2.getCurrentDirectory();
        if (!this.readOnly && var4 != null) {
            this.getNewFolderAction().setEnabled(this.filePane.canWrite(var4));
        }

        if (var4 != null) {
            JComponent var5 = this.getDirectoryComboBox();
            if (var5 instanceof JComboBox) {
                ComboBoxModel var6 = ((JComboBox) var5).getModel();
                if (var6 instanceof DirectoryComboBoxModel) {
                    ((DirectoryComboBoxModel) var6).addItem(var4);
                }
            }

            if (var2.isDirectorySelectionEnabled() && !var2.isFileSelectionEnabled()) {
                if (var3.isFileSystem(var4)) {
                    this.setFileName(var4.getPath());
                } else {
                    this.setFileName((String) null);
                }
            }
        }

    }

    protected void doFileSelectionModeChanged(PropertyChangeEvent var1) {
        super.doFileSelectionModeChanged(var1);
        JFileChooser var2 = this.getFileChooser();
        File var3 = var2.getCurrentDirectory();
        if (var3 != null && var2.isDirectorySelectionEnabled() && !var2.isFileSelectionEnabled() && var2.getFileSystemView().isFileSystem(var3)) {
            this.setFileName(var3.getPath());
        } else {
            this.setFileName((String) null);
        }

    }

    protected void doAccessoryChanged(PropertyChangeEvent var1) {
        if (this.getAccessoryPanel() != null) {
            if (var1.getOldValue() != null) {
                this.getAccessoryPanel().remove((JComponent) var1.getOldValue());
            }

            JComponent var2 = (JComponent) var1.getNewValue();
            if (var2 != null) {
                this.getAccessoryPanel().add(var2, "Center");
            }
        }

    }

    protected void doControlButtonsChanged(PropertyChangeEvent var1) {
        super.doControlButtonsChanged(var1);
        if (this.getFileChooser().getControlButtonsAreShown()) {
            this.addControlButtons();
        } else {
            this.removeControlButtons();
        }

    }

    protected void addControlButtons() {
        if (this.bottomPanel != null) {
            this.bottomPanel.add(this.buttonPanel);
        }

    }

    protected void removeControlButtons() {
        if (this.bottomPanel != null) {
            this.bottomPanel.remove(this.buttonPanel);
        }

    }

    protected ActionMap createActionMap() {
        ActionMapUIResource var1 = new ActionMapUIResource();
        FilePane.addActionsToMap(var1, this.filePane.getActions());
        var1.put("fileNameCompletion", this.getFileNameCompletionAction());
        return var1;
    }

    protected JComponent getDirectoryComboBox() {
        return this.directoryComboBox;
    }

    protected Action getDirectoryComboBoxAction() {
        return this.directoryComboBoxAction;
    }

    protected DirectoryComboBoxRenderer createDirectoryComboBoxRenderer(JFileChooser var1) {
        return new DirectoryComboBoxRenderer(this.directoryComboBox.getRenderer());
    }

    protected DirectoryComboBoxModel createDirectoryComboBoxModel(JFileChooser var1) {
        return new DirectoryComboBoxModel();
    }

    protected FilterComboBoxRenderer createFilterComboBoxRenderer() {
        return new FilterComboBoxRenderer(this.filterComboBox.getRenderer());
    }

    protected FilterComboBoxModel createFilterComboBoxModel() {
        return new FilterComboBoxModel();
    }

    private static void groupLabels(AlignedLabel[] var0) {
        for (int var1 = 0; var1 < var0.length; ++var1) {
            var0[var1].group = var0;
        }

    }

    private class AlignedLabel extends FLabel {

        private AlignedLabel[] group;
        private int maxWidth = 0;

        AlignedLabel() {
            this.setAlignmentX(0.0F);
        }

        AlignedLabel(String var2) {
            super(var2);
            this.setAlignmentX(0.0F);
        }

        public Dimension getPreferredSize() {
            Dimension var1 = super.getPreferredSize();
            return new Dimension(this.getMaxWidth() + 11, var1.height);
        }

        private int getMaxWidth() {
            if (this.maxWidth == 0 && this.group != null) {
                int var1 = 0;

                int var2;
                for (var2 = 0; var2 < this.group.length; ++var2) {
                    var1 = Math.max(this.group[var2].getSuperPreferredWidth(), var1);
                }

                for (var2 = 0; var2 < this.group.length; ++var2) {
                    this.group[var2].maxWidth = var1;
                }
            }

            return this.maxWidth;
        }

        private int getSuperPreferredWidth() {
            return super.getPreferredSize().width;
        }
    }

    private static class ButtonAreaLayout implements LayoutManager {

        private int hGap;
        private int topMargin;

        private ButtonAreaLayout() {
            this.hGap = 5;
            this.topMargin = 17;
        }

        public void addLayoutComponent(String var1, Component var2) {
        }

        public void layoutContainer(Container var1) {
            Component[] var2 = var1.getComponents();
            if (var2 != null && var2.length > 0) {
                int var3 = var2.length;
                Dimension[] var4 = new Dimension[var3];
                Insets var5 = var1.getInsets();
                int var6 = var5.top + this.topMargin;
                int var7 = 0;

                int var8;
                for (var8 = 0; var8 < var3; ++var8) {
                    var4[var8] = var2[var8].getPreferredSize();
                    var7 = Math.max(var7, var4[var8].width);
                }

                int var9;
                if (var1.getComponentOrientation().isLeftToRight()) {
                    var8 = var1.getSize().width - var5.left - var7;
                    var9 = this.hGap + var7;
                } else {
                    var8 = var5.left;
                    var9 = -(this.hGap + var7);
                }

                for (int var10 = var3 - 1; var10 >= 0; --var10) {
                    var2[var10].setBounds(var8, var6, var7, var4[var10].height);
                    var8 -= var9;
                }
            }

        }

        public Dimension minimumLayoutSize(Container var1) {
            if (var1 != null) {
                Component[] var2 = var1.getComponents();
                if (var2 != null && var2.length > 0) {
                    int var3 = var2.length;
                    int var4 = 0;
                    Insets var5 = var1.getInsets();
                    int var6 = this.topMargin + var5.top + var5.bottom;
                    int var7 = var5.left + var5.right;
                    int var8 = 0;

                    for (int var9 = 0; var9 < var3; ++var9) {
                        Dimension var10 = var2[var9].getPreferredSize();
                        var4 = Math.max(var4, var10.height);
                        var8 = Math.max(var8, var10.width);
                    }

                    return new Dimension(var7 + var3 * var8 + (var3 - 1) * this.hGap, var6 + var4);
                }
            }

            return new Dimension(0, 0);
        }

        public Dimension preferredLayoutSize(Container var1) {
            return this.minimumLayoutSize(var1);
        }

        public void removeLayoutComponent(Component var1) {
        }
    }

    protected class FilterComboBoxModel extends AbstractListModel implements ComboBoxModel, PropertyChangeListener {

        protected FileFilter[] filters = FlareFileChooserUI.this.getFileChooser().getChoosableFileFilters();

        protected FilterComboBoxModel() {
        }

        public void propertyChange(PropertyChangeEvent var1) {
            String var2 = var1.getPropertyName();
            if (var2 == "ChoosableFileFilterChangedProperty") {
                this.filters = (FileFilter[]) ((FileFilter[]) var1.getNewValue());
                this.fireContentsChanged(this, -1, -1);
            } else if (var2 == "fileFilterChanged") {
                this.fireContentsChanged(this, -1, -1);
            }

        }

        public void setSelectedItem(Object var1) {
            if (var1 != null) {
                FlareFileChooserUI.this.getFileChooser().setFileFilter((FileFilter) var1);
                this.fireContentsChanged(this, -1, -1);
            }

        }

        public Object getSelectedItem() {
            FileFilter var1 = FlareFileChooserUI.this.getFileChooser().getFileFilter();
            boolean var2 = false;
            if (var1 != null) {
                FileFilter[] var3 = this.filters;
                int var4 = var3.length;

                for (int var5 = 0; var5 < var4; ++var5) {
                    FileFilter var6 = var3[var5];
                    if (var6 == var1) {
                        var2 = true;
                    }
                }

                if (!var2) {
                    FlareFileChooserUI.this.getFileChooser().addChoosableFileFilter(var1);
                }
            }

            return FlareFileChooserUI.this.getFileChooser().getFileFilter();
        }

        public int getSize() {
            return this.filters != null ? this.filters.length : 0;
        }

        public FileFilter getElementAt(int var1) {
            if (var1 > this.getSize() - 1) {
                return FlareFileChooserUI.this.getFileChooser().getFileFilter();
            } else {
                return this.filters != null ? this.filters[var1] : null;
            }
        }
    }

    public class FilterComboBoxRenderer implements ListCellRenderer {

        private ListCellRenderer delegate;

        private FilterComboBoxRenderer(ListCellRenderer var2) {
            this.delegate = var2;
        }

        public Component getListCellRendererComponent(JList var1, FileFilter var2, int var3, boolean var4, boolean var5) {
            Component var6 = this.delegate.getListCellRendererComponent(var1, var2, var3, var4, var5);
            String var7 = null;
            if (var2 != null) {
                var7 = var2.getDescription();
            }

            assert var6 instanceof JLabel;

            if (var7 != null) {
                ((JLabel) var6).setText(var7);
            }

            return var6;
        }
    }

    protected class DirectoryComboBoxAction extends AbstractAction {

        protected DirectoryComboBoxAction() {
            super("DirectoryComboBoxAction");
        }

        public void actionPerformed(ActionEvent var1) {
            FlareFileChooserUI.this.directoryComboBox.hidePopup();
            JComponent var2 = FlareFileChooserUI.this.getDirectoryComboBox();
            if (var2 instanceof JComboBox) {
                File var3 = (File) ((JComboBox) var2).getSelectedItem();
                FlareFileChooserUI.this.getFileChooser().setCurrentDirectory(var3);
            }

        }
    }

    protected class DirectoryComboBoxModel extends AbstractListModel implements ComboBoxModel {

        Vector directories = new Vector();
        int[] depths = null;
        File selectedDirectory = null;
        JFileChooser chooser = FlareFileChooserUI.this.getFileChooser();
        FileSystemView fsv;

        public DirectoryComboBoxModel() {
            this.fsv = this.chooser.getFileSystemView();
            File var2 = FlareFileChooserUI.this.getFileChooser().getCurrentDirectory();
            if (var2 != null) {
                this.addItem(var2);
            }

        }

        public void addItem(File var1) {
            if (var1 != null) {
                boolean var2 = FilePane.usesShellFolder(this.chooser);
                int var3 = this.directories.size();
                this.directories.clear();
                if (var3 > 0) {
                    this.fireIntervalRemoved(this, 0, var3);
                }

                File[] var4 = var2 ? (File[]) ((File[]) ShellFolder.get("fileChooserComboBoxFolders")) : this.fsv.getRoots();
                this.directories.addAll(Arrays.asList(var4));

                File var5;
                try {
                    var5 = ShellFolder.getNormalizedFile(var1);
                } catch (IOException var13) {
                    var5 = var1;
                }

                try {
                    File var6 = var2 ? ShellFolder.getShellFolder(var5) : var5;
                    File var7 = var6;
                    Vector var8 = new Vector<>(10);

                    do {
                        var8.addElement(var7);
                    } while ((var7 = (var7).getParentFile()) != null);

                    int var9 = var8.size();

                    label51:
                    for (int var10 = 0; var10 < var9; ++var10) {
                        File var15 = var8.get(var10);
                        if (this.directories.contains(var15)) {
                            int var11 = this.directories.indexOf(var15);
                            int var12 = var10 - 1;

                            while (true) {
                                if (var12 < 0) {
                                    break label51;
                                }

                                this.directories.insertElementAt(var8.get(var12), var11 + var10 - var12);
                                --var12;
                            }
                        }
                    }

                    this.calculateDepths();
                    this.setSelectedItem(var6);
                } catch (FileNotFoundException var14) {
                    this.calculateDepths();
                }

            }
        }

        private void calculateDepths() {
            this.depths = new int[this.directories.size()];

            for (int var1 = 0; var1 < this.depths.length; ++var1) {
                File var2 = this.directories.get(var1);
                File var3 = var2.getParentFile();
                this.depths[var1] = 0;
                if (var3 != null) {
                    for (int var4 = var1 - 1; var4 >= 0; --var4) {
                        if (var3.equals(this.directories.get(var4))) {
                            this.depths[var1] = this.depths[var4] + 1;
                            break;
                        }
                    }
                }
            }

        }

        public int getDepth(int var1) {
            return this.depths != null && var1 >= 0 && var1 < this.depths.length ? this.depths[var1] : 0;
        }

        public void setSelectedItem(Object var1) {
            this.selectedDirectory = (File) var1;
            this.fireContentsChanged(this, -1, -1);
        }

        public Object getSelectedItem() {
            return this.selectedDirectory;
        }

        public int getSize() {
            return this.directories.size();
        }

        public File getElementAt(int var1) {
            return (File) this.directories.elementAt(var1);
        }
    }

    class IndentIcon implements Icon {

        Icon icon = null;
        int depth = 0;

        IndentIcon() {
        }

        public void paintIcon(Component var1, Graphics var2, int var3, int var4) {
            if (this.icon != null) {
                if (var1.getComponentOrientation().isLeftToRight()) {
                    this.icon.paintIcon(var1, var2, var3 + this.depth * 10, var4);
                } else {
                    this.icon.paintIcon(var1, var2, var3, var4);
                }
            }

        }

        public int getIconWidth() {
            return (this.icon != null ? this.icon.getIconWidth() : 0) + this.depth * 10;
        }

        public int getIconHeight() {
            return this.icon != null ? this.icon.getIconHeight() : 0;
        }
    }

    private class DirectoryComboBoxRenderer implements ListCellRenderer {

        private ListCellRenderer delegate;
        IndentIcon ii;

        private DirectoryComboBoxRenderer(ListCellRenderer var2) {
            this.ii = new IndentIcon();
            this.delegate = var2;
        }

        public Component getListCellRendererComponent(JList var1, File var2, int var3, boolean var4, boolean var5) {
            Component var6 = this.delegate.getListCellRendererComponent(var1, var2, var3, var4, var5);

            assert var6 instanceof JLabel;

            JLabel var7 = (JLabel) var6;
            if (var2 == null) {
                var7.setText("");
                return var7;
            } else {
                var7.setText(FlareFileChooserUI.this.getFileChooser().getName(var2));
                Icon var8 = FlareFileChooserUI.this.getFileChooser().getIcon(var2);
                this.ii.icon = var8;
                this.ii.depth = FlareFileChooserUI.this.directoryComboBoxModel.getDepth(var3);
                var7.setIcon(this.ii);
                return var7;
            }
        }
    }

    private class SynthFileChooserUIAccessor implements FileChooserUIAccessor {

        private SynthFileChooserUIAccessor() {
        }

        public JFileChooser getFileChooser() {
            return FlareFileChooserUI.this.getFileChooser();
        }

        public BasicDirectoryModel getModel() {
            return FlareFileChooserUI.this.getModel();
        }

        public JPanel createList() {
            return null;
        }

        public JPanel createDetailsView() {
            return null;
        }

        public boolean isDirectorySelected() {
            return FlareFileChooserUI.this.isDirectorySelected();
        }

        public File getDirectory() {
            return FlareFileChooserUI.this.getDirectory();
        }

        public Action getChangeToParentDirectoryAction() {
            return FlareFileChooserUI.this.getChangeToParentDirectoryAction();
        }

        public Action getApproveSelectionAction() {
            return FlareFileChooserUI.this.getApproveSelectionAction();
        }

        public Action getNewFolderAction() {
            return FlareFileChooserUI.this.getNewFolderAction();
        }

        public MouseListener createDoubleClickListener(JList var1) {
            return FlareFileChooserUI.this.createDoubleClickListener(this.getFileChooser(), var1);
        }

        public ListSelectionListener createListSelectionListener() {
            return FlareFileChooserUI.this.createListSelectionListener(this.getFileChooser());
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy