home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / sun / swing / FilePane.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  23.2 KB  |  1,010 lines

  1. package sun.swing;
  2.  
  3. import java.awt.BorderLayout;
  4. import java.awt.Color;
  5. import java.awt.Component;
  6. import java.awt.ComponentOrientation;
  7. import java.awt.Container;
  8. import java.awt.Cursor;
  9. import java.awt.Dimension;
  10. import java.awt.Font;
  11. import java.awt.Rectangle;
  12. import java.awt.event.FocusListener;
  13. import java.beans.PropertyChangeEvent;
  14. import java.beans.PropertyChangeListener;
  15. import java.io.File;
  16. import java.security.AccessControlException;
  17. import java.util.ArrayList;
  18. import java.util.Arrays;
  19. import java.util.Locale;
  20. import java.util.Set;
  21. import javax.swing.Action;
  22. import javax.swing.ActionMap;
  23. import javax.swing.ButtonGroup;
  24. import javax.swing.DefaultListSelectionModel;
  25. import javax.swing.JComponent;
  26. import javax.swing.JFileChooser;
  27. import javax.swing.JList;
  28. import javax.swing.JMenu;
  29. import javax.swing.JPanel;
  30. import javax.swing.JPopupMenu;
  31. import javax.swing.JRadioButtonMenuItem;
  32. import javax.swing.JScrollPane;
  33. import javax.swing.JTable;
  34. import javax.swing.JTextField;
  35. import javax.swing.ListSelectionModel;
  36. import javax.swing.LookAndFeel;
  37. import javax.swing.SwingUtilities;
  38. import javax.swing.UIManager;
  39. import javax.swing.border.Border;
  40. import javax.swing.event.ListSelectionListener;
  41. import javax.swing.filechooser.FileSystemView;
  42. import javax.swing.plaf.basic.BasicDirectoryModel;
  43. import javax.swing.table.DefaultTableColumnModel;
  44. import javax.swing.table.TableColumn;
  45. import sun.awt.shell.ShellFolderColumnInfo;
  46.  
  47. public class FilePane extends JPanel implements PropertyChangeListener {
  48.    public static final String ACTION_APPROVE_SELECTION = "approveSelection";
  49.    public static final String ACTION_CANCEL = "cancelSelection";
  50.    public static final String ACTION_EDIT_FILE_NAME = "editFileName";
  51.    public static final String ACTION_REFRESH = "refresh";
  52.    public static final String ACTION_CHANGE_TO_PARENT_DIRECTORY = "Go Up";
  53.    public static final String ACTION_NEW_FOLDER = "New Folder";
  54.    public static final String ACTION_VIEW_LIST = "viewTypeList";
  55.    public static final String ACTION_VIEW_DETAILS = "viewTypeDetails";
  56.    private Action[] actions;
  57.    public static final int VIEWTYPE_LIST = 0;
  58.    public static final int VIEWTYPE_DETAILS = 1;
  59.    private static final int VIEWTYPE_COUNT = 2;
  60.    private int viewType = -1;
  61.    private JPanel[] viewPanels = new JPanel[2];
  62.    private JPanel currentViewPanel;
  63.    private String[] viewTypeActionNames;
  64.    private JPopupMenu contextMenu;
  65.    private JMenu viewMenu;
  66.    private String viewMenuLabelText;
  67.    private String refreshActionLabelText;
  68.    private String newFolderActionLabelText;
  69.    private String kiloByteString;
  70.    private String megaByteString;
  71.    private String gigaByteString;
  72.    private static final Cursor waitCursor = Cursor.getPredefinedCursor(3);
  73.    private FocusListener editorFocusListener = new 1(this);
  74.    private static FocusListener repaintListener = new 2();
  75.    private boolean smallIconsView = false;
  76.    private Border listViewBorder;
  77.    private Color listViewBackground;
  78.    private boolean listViewWindowsStyle;
  79.    private boolean readOnly;
  80.    private ListSelectionModel listSelectionModel;
  81.    private JList list;
  82.    private JTable detailsTable;
  83.    private static final int COLUMN_FILENAME = 0;
  84.    private File newFolderFile;
  85.    private FileChooserUIAccessor fileChooserUIAccessor;
  86.    private DetailsTableModel detailsTableModel;
  87.    private DetailsTableRowSorter rowSorter;
  88.    private DetailsTableCellEditor tableCellEditor;
  89.    int lastIndex = -1;
  90.    File editFile = null;
  91.    int editX = 20;
  92.    JTextField editCell = null;
  93.    protected Action newFolderAction;
  94.    private Handler handler;
  95.  
  96.    public FilePane(FileChooserUIAccessor var1) {
  97.       super(new BorderLayout());
  98.       this.fileChooserUIAccessor = var1;
  99.       this.installDefaults();
  100.       this.createActionMap();
  101.    }
  102.  
  103.    public void uninstallUI() {
  104.       if (this.getModel() != null) {
  105.          this.getModel().removePropertyChangeListener(this);
  106.       }
  107.  
  108.    }
  109.  
  110.    protected JFileChooser getFileChooser() {
  111.       return this.fileChooserUIAccessor.getFileChooser();
  112.    }
  113.  
  114.    protected BasicDirectoryModel getModel() {
  115.       return this.fileChooserUIAccessor.getModel();
  116.    }
  117.  
  118.    public int getViewType() {
  119.       return this.viewType;
  120.    }
  121.  
  122.    public void setViewType(int var1) {
  123.       int var2 = this.viewType;
  124.       if (var1 != var2) {
  125.          this.viewType = var1;
  126.          switch (var1) {
  127.             case 0:
  128.                if (this.viewPanels[var1] == null) {
  129.                   JPanel var4 = this.fileChooserUIAccessor.createList();
  130.                   if (var4 == null) {
  131.                      var4 = this.createList();
  132.                   }
  133.  
  134.                   this.setViewPanel(var1, var4);
  135.                }
  136.  
  137.                this.list.setLayoutOrientation(1);
  138.                break;
  139.             case 1:
  140.                if (this.viewPanels[var1] == null) {
  141.                   JPanel var3 = this.fileChooserUIAccessor.createDetailsView();
  142.                   if (var3 == null) {
  143.                      var3 = this.createDetailsView();
  144.                   }
  145.  
  146.                   this.setViewPanel(var1, var3);
  147.                }
  148.          }
  149.  
  150.          JPanel var5 = this.currentViewPanel;
  151.          this.currentViewPanel = this.viewPanels[var1];
  152.          if (this.currentViewPanel != var5) {
  153.             if (var5 != null) {
  154.                this.remove(var5);
  155.             }
  156.  
  157.             this.add(this.currentViewPanel, "Center");
  158.             this.revalidate();
  159.             this.repaint();
  160.          }
  161.  
  162.          this.updateViewMenu();
  163.          this.firePropertyChange("viewType", var2, var1);
  164.       }
  165.    }
  166.  
  167.    public Action getViewTypeAction(int var1) {
  168.       return new ViewTypeAction(this, var1);
  169.    }
  170.  
  171.    private static void recursivelySetInheritsPopupMenu(Container var0, boolean var1) {
  172.       if (var0 instanceof JComponent) {
  173.          ((JComponent)var0).setInheritsPopupMenu(var1);
  174.       }
  175.  
  176.       int var2 = var0.getComponentCount();
  177.  
  178.       for(int var3 = 0; var3 < var2; ++var3) {
  179.          recursivelySetInheritsPopupMenu((Container)var0.getComponent(var3), var1);
  180.       }
  181.  
  182.    }
  183.  
  184.    public void setViewPanel(int var1, JPanel var2) {
  185.       this.viewPanels[var1] = var2;
  186.       recursivelySetInheritsPopupMenu(var2, true);
  187.       switch (var1) {
  188.          case 0:
  189.             this.list = (JList)this.findChildComponent(this.viewPanels[var1], JList.class);
  190.             if (this.listSelectionModel == null) {
  191.                this.listSelectionModel = this.list.getSelectionModel();
  192.                if (this.detailsTable != null) {
  193.                   this.detailsTable.setSelectionModel(this.listSelectionModel);
  194.                }
  195.             } else {
  196.                this.list.setSelectionModel(this.listSelectionModel);
  197.             }
  198.             break;
  199.          case 1:
  200.             this.detailsTable = (JTable)this.findChildComponent(this.viewPanels[var1], JTable.class);
  201.             this.detailsTable.setRowHeight(Math.max(this.detailsTable.getFont().getSize() + 4, 17));
  202.             if (this.listSelectionModel != null) {
  203.                this.detailsTable.setSelectionModel(this.listSelectionModel);
  204.             }
  205.       }
  206.  
  207.       if (this.viewType == var1) {
  208.          if (this.currentViewPanel != null) {
  209.             this.remove(this.currentViewPanel);
  210.          }
  211.  
  212.          this.currentViewPanel = var2;
  213.          this.add(this.currentViewPanel, "Center");
  214.          this.revalidate();
  215.          this.repaint();
  216.       }
  217.  
  218.    }
  219.  
  220.    protected void installDefaults() {
  221.       Locale var1 = this.getFileChooser().getLocale();
  222.       this.listViewBorder = UIManager.getBorder("FileChooser.listViewBorder");
  223.       this.listViewBackground = UIManager.getColor("FileChooser.listViewBackground");
  224.       this.listViewWindowsStyle = UIManager.getBoolean("FileChooser.listViewWindowsStyle");
  225.       this.readOnly = UIManager.getBoolean("FileChooser.readOnly");
  226.       this.viewMenuLabelText = UIManager.getString("FileChooser.viewMenuLabelText", var1);
  227.       this.refreshActionLabelText = UIManager.getString("FileChooser.refreshActionLabelText", var1);
  228.       this.newFolderActionLabelText = UIManager.getString("FileChooser.newFolderActionLabelText", var1);
  229.       this.viewTypeActionNames = new String[2];
  230.       this.viewTypeActionNames[0] = UIManager.getString("FileChooser.listViewActionLabelText", var1);
  231.       this.viewTypeActionNames[1] = UIManager.getString("FileChooser.detailsViewActionLabelText", var1);
  232.       this.kiloByteString = UIManager.getString("FileChooser.fileSizeKiloBytes", var1);
  233.       this.megaByteString = UIManager.getString("FileChooser.fileSizeMegaBytes", var1);
  234.       this.gigaByteString = UIManager.getString("FileChooser.fileSizeGigaBytes", var1);
  235.    }
  236.  
  237.    public Action[] getActions() {
  238.       if (this.actions == null) {
  239.          ArrayList var1 = new ArrayList(8);
  240.          var1.add(new 1FilePaneAction(this, "cancelSelection"));
  241.          var1.add(new 1FilePaneAction(this, "editFileName"));
  242.          var1.add(new 1FilePaneAction(this, this.refreshActionLabelText, "refresh"));
  243.          Action var2 = this.fileChooserUIAccessor.getApproveSelectionAction();
  244.          if (var2 != null) {
  245.             var1.add(var2);
  246.          }
  247.  
  248.          var2 = this.fileChooserUIAccessor.getChangeToParentDirectoryAction();
  249.          if (var2 != null) {
  250.             var1.add(var2);
  251.          }
  252.  
  253.          var2 = this.getNewFolderAction();
  254.          if (var2 != null) {
  255.             var1.add(var2);
  256.          }
  257.  
  258.          var2 = this.getViewTypeAction(0);
  259.          if (var2 != null) {
  260.             var1.add(var2);
  261.          }
  262.  
  263.          var2 = this.getViewTypeAction(1);
  264.          if (var2 != null) {
  265.             var1.add(var2);
  266.          }
  267.  
  268.          this.actions = (Action[])var1.toArray(new Action[var1.size()]);
  269.       }
  270.  
  271.       return this.actions;
  272.    }
  273.  
  274.    protected void createActionMap() {
  275.       addActionsToMap(super.getActionMap(), this.getActions());
  276.    }
  277.  
  278.    public static void addActionsToMap(ActionMap var0, Action[] var1) {
  279.       if (var0 != null && var1 != null) {
  280.          for(int var2 = 0; var2 < var1.length; ++var2) {
  281.             Action var3 = var1[var2];
  282.             String var4 = (String)var3.getValue("ActionCommandKey");
  283.             if (var4 == null) {
  284.                var4 = (String)var3.getValue("Name");
  285.             }
  286.  
  287.             var0.put(var4, var3);
  288.          }
  289.       }
  290.  
  291.    }
  292.  
  293.    private void updateListRowCount(JList var1) {
  294.       if (this.smallIconsView) {
  295.          var1.setVisibleRowCount(this.getModel().getSize() / 3);
  296.       } else {
  297.          var1.setVisibleRowCount(-1);
  298.       }
  299.  
  300.    }
  301.  
  302.    public JPanel createList() {
  303.       JPanel var1 = new JPanel(new BorderLayout());
  304.       JFileChooser var2 = this.getFileChooser();
  305.       3 var3 = new 3(this, var2);
  306.       ((JList)var3).setCellRenderer(new FileRenderer(this));
  307.       ((JList)var3).setLayoutOrientation(1);
  308.       ((JList)var3).putClientProperty("List.isFileList", Boolean.TRUE);
  309.       if (this.listViewWindowsStyle) {
  310.          ((JList)var3).addFocusListener(repaintListener);
  311.       }
  312.  
  313.       this.updateListRowCount(var3);
  314.       this.getModel().addListDataListener(new 4(this, var3));
  315.       this.getModel().addPropertyChangeListener(this);
  316.       if (var2.isMultiSelectionEnabled()) {
  317.          ((JList)var3).setSelectionMode(2);
  318.       } else {
  319.          ((JList)var3).setSelectionMode(0);
  320.       }
  321.  
  322.       ((JList)var3).setModel(new SortableListModel(this));
  323.       ((JList)var3).addListSelectionListener(this.createListSelectionListener());
  324.       ((JList)var3).addMouseListener(this.getMouseHandler());
  325.       JScrollPane var4 = new JScrollPane(var3);
  326.       if (this.listViewBackground != null) {
  327.          ((JList)var3).setBackground(this.listViewBackground);
  328.       }
  329.  
  330.       if (this.listViewBorder != null) {
  331.          var4.setBorder(this.listViewBorder);
  332.       }
  333.  
  334.       var1.add(var4, "Center");
  335.       return var1;
  336.    }
  337.  
  338.    private DetailsTableModel getDetailsTableModel() {
  339.       if (this.detailsTableModel == null) {
  340.          this.detailsTableModel = new DetailsTableModel(this, this.getFileChooser());
  341.       }
  342.  
  343.       return this.detailsTableModel;
  344.    }
  345.  
  346.    private void updateDetailsColumnModel(JTable var1) {
  347.       if (var1 != null) {
  348.          ShellFolderColumnInfo[] var2 = this.detailsTableModel.getColumns();
  349.          DefaultTableColumnModel var3 = new DefaultTableColumnModel();
  350.  
  351.          for(int var4 = 0; var4 < var2.length; ++var4) {
  352.             ShellFolderColumnInfo var5 = var2[var4];
  353.             TableColumn var6 = new TableColumn(var4);
  354.             String var7 = var5.getTitle();
  355.             if (var7 != null && var7.startsWith("FileChooser.") && var7.endsWith("HeaderText")) {
  356.                String var8 = UIManager.getString(var7, var1.getLocale());
  357.                if (var8 != null) {
  358.                   var7 = var8;
  359.                }
  360.             }
  361.  
  362.             var6.setHeaderValue(var7);
  363.             Integer var9 = var5.getWidth();
  364.             if (var9 != null) {
  365.                var6.setPreferredWidth(var9);
  366.             }
  367.  
  368.             var3.addColumn(var6);
  369.          }
  370.  
  371.          if (!this.readOnly && var3.getColumnCount() > 0) {
  372.             var3.getColumn(0).setCellEditor(this.getDetailsTableCellEditor());
  373.          }
  374.  
  375.          var1.setColumnModel(var3);
  376.       }
  377.  
  378.    }
  379.  
  380.    private DetailsTableRowSorter getRowSorter() {
  381.       if (this.rowSorter == null) {
  382.          this.rowSorter = new DetailsTableRowSorter(this);
  383.       }
  384.  
  385.       return this.rowSorter;
  386.    }
  387.  
  388.    private DetailsTableCellEditor getDetailsTableCellEditor() {
  389.       if (this.tableCellEditor == null) {
  390.          this.tableCellEditor = new DetailsTableCellEditor(this, new JTextField());
  391.       }
  392.  
  393.       return this.tableCellEditor;
  394.    }
  395.  
  396.    public JPanel createDetailsView() {
  397.       JFileChooser var1 = this.getFileChooser();
  398.       JPanel var2 = new JPanel(new BorderLayout());
  399.       5 var3 = new 5(this, this.getDetailsTableModel(), var1);
  400.       ((JTable)var3).setRowSorter(this.getRowSorter());
  401.       ((JTable)var3).setAutoCreateColumnsFromModel(false);
  402.       ((JTable)var3).setComponentOrientation(var1.getComponentOrientation());
  403.       ((JTable)var3).setAutoResizeMode(0);
  404.       ((JTable)var3).setShowGrid(false);
  405.       ((JTable)var3).putClientProperty("JTable.autoStartsEdit", Boolean.FALSE);
  406.       Font var4 = this.list.getFont();
  407.       ((JTable)var3).setFont(var4);
  408.       ((JTable)var3).setIntercellSpacing(new Dimension(0, 0));
  409.       AlignableTableHeaderRenderer var5 = new AlignableTableHeaderRenderer(this, ((JTable)var3).getTableHeader().getDefaultRenderer());
  410.       ((JTable)var3).getTableHeader().setDefaultRenderer(var5);
  411.       DetailsTableCellRenderer var6 = new DetailsTableCellRenderer(this, var1);
  412.       ((JTable)var3).setDefaultRenderer(Object.class, var6);
  413.       ((JTable)var3).getColumnModel().getSelectionModel().setSelectionMode(0);
  414.       ((JTable)var3).addMouseListener(this.getMouseHandler());
  415.       ((JTable)var3).putClientProperty("Table.isFileList", Boolean.TRUE);
  416.       if (this.listViewWindowsStyle) {
  417.          ((JTable)var3).addFocusListener(repaintListener);
  418.       }
  419.  
  420.       ActionMap var7 = SwingUtilities.getUIActionMap(var3);
  421.       var7.remove("selectNextRowCell");
  422.       var7.remove("selectPreviousRowCell");
  423.       var7.remove("selectNextColumnCell");
  424.       var7.remove("selectPreviousColumnCell");
  425.       ((JTable)var3).setFocusTraversalKeys(0, (Set)null);
  426.       ((JTable)var3).setFocusTraversalKeys(1, (Set)null);
  427.       JScrollPane var8 = new JScrollPane(var3);
  428.       var8.setComponentOrientation(var1.getComponentOrientation());
  429.       LookAndFeel.installColors(var8.getViewport(), "Table.background", "Table.foreground");
  430.       var8.addComponentListener(new 6(this));
  431.       var8.addMouseListener(new 7(this));
  432.       ((JTable)var3).setForeground(this.list.getForeground());
  433.       ((JTable)var3).setBackground(this.list.getBackground());
  434.       if (this.listViewBorder != null) {
  435.          var8.setBorder(this.listViewBorder);
  436.       }
  437.  
  438.       var2.add(var8, "Center");
  439.       this.detailsTableModel.fireTableStructureChanged();
  440.       return var2;
  441.    }
  442.  
  443.    private void fixNameColumnWidth(int var1) {
  444.       TableColumn var2 = this.detailsTable.getColumnModel().getColumn(0);
  445.       int var3 = this.detailsTable.getPreferredSize().width;
  446.       if (var3 < var1) {
  447.          var2.setPreferredWidth(var2.getPreferredWidth() + var1 - var3);
  448.       }
  449.  
  450.    }
  451.  
  452.    public ListSelectionListener createListSelectionListener() {
  453.       return this.fileChooserUIAccessor.createListSelectionListener();
  454.    }
  455.  
  456.    private int getEditIndex() {
  457.       return this.lastIndex;
  458.    }
  459.  
  460.    private void setEditIndex(int var1) {
  461.       this.lastIndex = var1;
  462.    }
  463.  
  464.    private void resetEditIndex() {
  465.       this.lastIndex = -1;
  466.    }
  467.  
  468.    private void cancelEdit() {
  469.       if (this.editFile != null) {
  470.          this.editFile = null;
  471.          this.list.remove(this.editCell);
  472.          this.repaint();
  473.       } else if (this.detailsTable != null && this.detailsTable.isEditing()) {
  474.          this.detailsTable.getCellEditor().cancelCellEditing();
  475.       }
  476.  
  477.    }
  478.  
  479.    private void editFileName(int var1) {
  480.       File var2 = this.getFileChooser().getCurrentDirectory();
  481.       if (!this.readOnly && canWrite(var2)) {
  482.          this.ensureIndexIsVisible(var1);
  483.          switch (this.viewType) {
  484.             case 0:
  485.                this.editFile = (File)this.getModel().getElementAt(this.getRowSorter().convertRowIndexToModel(var1));
  486.                Rectangle var3 = this.list.getCellBounds(var1, var1);
  487.                if (this.editCell == null) {
  488.                   this.editCell = new JTextField();
  489.                   this.editCell.addActionListener(new EditActionListener(this));
  490.                   this.editCell.addFocusListener(this.editorFocusListener);
  491.                   this.editCell.setNextFocusableComponent(this.list);
  492.                }
  493.  
  494.                this.list.add(this.editCell);
  495.                this.editCell.setText(this.getFileChooser().getName(this.editFile));
  496.                ComponentOrientation var4 = this.list.getComponentOrientation();
  497.                this.editCell.setComponentOrientation(var4);
  498.                if (var4.isLeftToRight()) {
  499.                   this.editCell.setBounds(this.editX + var3.x, var3.y, var3.width - this.editX, var3.height);
  500.                } else {
  501.                   this.editCell.setBounds(var3.x, var3.y, var3.width - this.editX, var3.height);
  502.                }
  503.  
  504.                this.editCell.requestFocus();
  505.                this.editCell.selectAll();
  506.                break;
  507.             case 1:
  508.                this.detailsTable.editCellAt(var1, 0);
  509.          }
  510.  
  511.       }
  512.    }
  513.  
  514.    private void applyEdit() {
  515.       if (this.editFile != null && this.editFile.exists()) {
  516.          JFileChooser var1 = this.getFileChooser();
  517.          String var2 = var1.getName(this.editFile);
  518.          String var3 = this.editFile.getName();
  519.          String var4 = this.editCell.getText().trim();
  520.          if (!var4.equals(var2)) {
  521.             String var5 = var4;
  522.             int var6 = var3.length();
  523.             int var7 = var2.length();
  524.             if (var6 > var7 && var3.charAt(var7) == '.') {
  525.                var5 = var4 + var3.substring(var7);
  526.             }
  527.  
  528.             FileSystemView var8 = var1.getFileSystemView();
  529.             File var9 = var8.createFileObject(this.editFile.getParentFile(), var5);
  530.             if (!var9.exists() && this.getModel().renameFile(this.editFile, var9) && var8.isParent(var1.getCurrentDirectory(), var9)) {
  531.                if (var1.isMultiSelectionEnabled()) {
  532.                   var1.setSelectedFiles(new File[]{var9});
  533.                } else {
  534.                   var1.setSelectedFile(var9);
  535.                }
  536.             }
  537.          }
  538.       }
  539.  
  540.       if (this.detailsTable != null && this.detailsTable.isEditing()) {
  541.          this.detailsTable.getCellEditor().stopCellEditing();
  542.       }
  543.  
  544.       this.cancelEdit();
  545.    }
  546.  
  547.    public Action getNewFolderAction() {
  548.       if (!this.readOnly && this.newFolderAction == null) {
  549.          this.newFolderAction = new 8(this, this.newFolderActionLabelText);
  550.       }
  551.  
  552.       return this.newFolderAction;
  553.    }
  554.  
  555.    void setFileSelected() {
  556.       if (this.getFileChooser().isMultiSelectionEnabled() && !this.isDirectorySelected()) {
  557.          File[] var11 = this.getFileChooser().getSelectedFiles();
  558.          Object[] var13 = this.list.getSelectedValues();
  559.          this.listSelectionModel.setValueIsAdjusting(true);
  560.  
  561.          try {
  562.             int var14 = this.listSelectionModel.getLeadSelectionIndex();
  563.             int var15 = this.listSelectionModel.getAnchorSelectionIndex();
  564.             Arrays.sort(var11);
  565.             Arrays.sort(var13);
  566.             int var5 = 0;
  567.             int var6 = 0;
  568.  
  569.             while(var5 < var11.length && var6 < var13.length) {
  570.                int var7 = var11[var5].compareTo((File)var13[var6]);
  571.                if (var7 < 0) {
  572.                   this.doSelectFile(var11[var5++]);
  573.                } else if (var7 > 0) {
  574.                   this.doDeselectFile(var13[var6++]);
  575.                } else {
  576.                   ++var5;
  577.                   ++var6;
  578.                }
  579.             }
  580.  
  581.             while(var5 < var11.length) {
  582.                this.doSelectFile(var11[var5++]);
  583.             }
  584.  
  585.             while(var6 < var13.length) {
  586.                this.doDeselectFile(var13[var6++]);
  587.             }
  588.  
  589.             if (this.listSelectionModel instanceof DefaultListSelectionModel) {
  590.                ((DefaultListSelectionModel)this.listSelectionModel).moveLeadSelectionIndex(var14);
  591.                ((DefaultListSelectionModel)this.listSelectionModel).setAnchorSelectionIndex(var15);
  592.             }
  593.          } finally {
  594.             this.listSelectionModel.setValueIsAdjusting(false);
  595.          }
  596.       } else {
  597.          JFileChooser var1 = this.getFileChooser();
  598.          Object var2 = null;
  599.          File var12;
  600.          if (this.isDirectorySelected()) {
  601.             var12 = this.getDirectory();
  602.          } else {
  603.             var12 = var1.getSelectedFile();
  604.          }
  605.  
  606.          int var3;
  607.          if (var12 != null && (var3 = this.getModel().indexOf(var12)) >= 0) {
  608.             int var4 = this.getRowSorter().convertRowIndexToView(var3);
  609.             this.listSelectionModel.setSelectionInterval(var4, var4);
  610.             this.ensureIndexIsVisible(var4);
  611.          } else {
  612.             this.clearSelection();
  613.          }
  614.       }
  615.  
  616.    }
  617.  
  618.    private void doSelectFile(File var1) {
  619.       int var2 = this.getModel().indexOf(var1);
  620.       if (var2 >= 0) {
  621.          var2 = this.getRowSorter().convertRowIndexToView(var2);
  622.          this.listSelectionModel.addSelectionInterval(var2, var2);
  623.       }
  624.  
  625.    }
  626.  
  627.    private void doDeselectFile(Object var1) {
  628.       int var2 = this.getRowSorter().convertRowIndexToView(this.getModel().indexOf(var1));
  629.       this.listSelectionModel.removeSelectionInterval(var2, var2);
  630.    }
  631.  
  632.    private void doSelectedFileChanged(PropertyChangeEvent var1) {
  633.       this.applyEdit();
  634.       File var2 = (File)var1.getNewValue();
  635.       JFileChooser var3 = this.getFileChooser();
  636.       if (var2 != null && (var3.isFileSelectionEnabled() && !var2.isDirectory() || var2.isDirectory() && var3.isDirectorySelectionEnabled())) {
  637.          this.setFileSelected();
  638.       }
  639.  
  640.    }
  641.  
  642.    private void doSelectedFilesChanged(PropertyChangeEvent var1) {
  643.       this.applyEdit();
  644.       File[] var2 = (File[])var1.getNewValue();
  645.       JFileChooser var3 = this.getFileChooser();
  646.       if (var2 != null && var2.length > 0 && (var2.length > 1 || var3.isDirectorySelectionEnabled() || !var2[0].isDirectory())) {
  647.          this.setFileSelected();
  648.       }
  649.  
  650.    }
  651.  
  652.    private void doDirectoryChanged(PropertyChangeEvent var1) {
  653.       JFileChooser var2 = this.getFileChooser();
  654.       FileSystemView var3 = var2.getFileSystemView();
  655.       this.applyEdit();
  656.       this.resetEditIndex();
  657.       this.ensureIndexIsVisible(0);
  658.       File var4 = var2.getCurrentDirectory();
  659.       if (var4 != null) {
  660.          if (!this.readOnly) {
  661.             this.getNewFolderAction().setEnabled(canWrite(var4));
  662.          }
  663.  
  664.          this.fileChooserUIAccessor.getChangeToParentDirectoryAction().setEnabled(!var3.isRoot(var4));
  665.       }
  666.  
  667.    }
  668.  
  669.    private void doFilterChanged(PropertyChangeEvent var1) {
  670.       this.applyEdit();
  671.       this.resetEditIndex();
  672.       this.clearSelection();
  673.    }
  674.  
  675.    private void doFileSelectionModeChanged(PropertyChangeEvent var1) {
  676.       this.applyEdit();
  677.       this.resetEditIndex();
  678.       this.clearSelection();
  679.    }
  680.  
  681.    private void doMultiSelectionChanged(PropertyChangeEvent var1) {
  682.       if (this.getFileChooser().isMultiSelectionEnabled()) {
  683.          this.listSelectionModel.setSelectionMode(2);
  684.       } else {
  685.          this.listSelectionModel.setSelectionMode(0);
  686.          this.clearSelection();
  687.          this.getFileChooser().setSelectedFiles((File[])null);
  688.       }
  689.  
  690.    }
  691.  
  692.    public void propertyChange(PropertyChangeEvent var1) {
  693.       if (this.viewType == -1) {
  694.          this.setViewType(0);
  695.       }
  696.  
  697.       String var2 = var1.getPropertyName();
  698.       if (var2.equals("SelectedFileChangedProperty")) {
  699.          this.doSelectedFileChanged(var1);
  700.       } else if (var2.equals("SelectedFilesChangedProperty")) {
  701.          this.doSelectedFilesChanged(var1);
  702.       } else if (var2.equals("directoryChanged")) {
  703.          this.doDirectoryChanged(var1);
  704.       } else if (var2.equals("fileFilterChanged")) {
  705.          this.doFilterChanged(var1);
  706.       } else if (var2.equals("fileSelectionChanged")) {
  707.          this.doFileSelectionModeChanged(var1);
  708.       } else if (var2.equals("MultiSelectionEnabledChangedProperty")) {
  709.          this.doMultiSelectionChanged(var1);
  710.       } else if (var2.equals("CancelSelection")) {
  711.          this.applyEdit();
  712.       } else if (var2.equals("busy")) {
  713.          this.setCursor((Boolean)var1.getNewValue() ? waitCursor : null);
  714.       } else if (var2.equals("componentOrientation")) {
  715.          ComponentOrientation var3 = (ComponentOrientation)var1.getNewValue();
  716.          JFileChooser var4 = (JFileChooser)var1.getSource();
  717.          if (var3 != (ComponentOrientation)var1.getOldValue()) {
  718.             var4.applyComponentOrientation(var3);
  719.          }
  720.  
  721.          if (this.detailsTable != null) {
  722.             this.detailsTable.setComponentOrientation(var3);
  723.             this.detailsTable.getParent().getParent().setComponentOrientation(var3);
  724.          }
  725.       }
  726.  
  727.    }
  728.  
  729.    private void ensureIndexIsVisible(int var1) {
  730.       if (var1 >= 0) {
  731.          if (this.list != null) {
  732.             this.list.ensureIndexIsVisible(var1);
  733.          }
  734.  
  735.          if (this.detailsTable != null) {
  736.             this.detailsTable.scrollRectToVisible(this.detailsTable.getCellRect(var1, 0, true));
  737.          }
  738.       }
  739.  
  740.    }
  741.  
  742.    public void ensureFileIsVisible(JFileChooser var1, File var2) {
  743.       int var3 = this.getModel().indexOf(var2);
  744.       if (var3 >= 0) {
  745.          this.ensureIndexIsVisible(this.getRowSorter().convertRowIndexToView(var3));
  746.       }
  747.  
  748.    }
  749.  
  750.    public void rescanCurrentDirectory() {
  751.       this.getModel().validateFileCache();
  752.    }
  753.  
  754.    public void clearSelection() {
  755.       if (this.listSelectionModel != null) {
  756.          this.listSelectionModel.clearSelection();
  757.          if (this.listSelectionModel instanceof DefaultListSelectionModel) {
  758.             ((DefaultListSelectionModel)this.listSelectionModel).moveLeadSelectionIndex(0);
  759.             ((DefaultListSelectionModel)this.listSelectionModel).setAnchorSelectionIndex(0);
  760.          }
  761.       }
  762.  
  763.    }
  764.  
  765.    public JMenu getViewMenu() {
  766.       if (this.viewMenu == null) {
  767.          this.viewMenu = new JMenu(this.viewMenuLabelText);
  768.          ButtonGroup var1 = new ButtonGroup();
  769.  
  770.          for(int var2 = 0; var2 < 2; ++var2) {
  771.             JRadioButtonMenuItem var3 = new JRadioButtonMenuItem(new ViewTypeAction(this, var2));
  772.             var1.add(var3);
  773.             this.viewMenu.add(var3);
  774.          }
  775.  
  776.          this.updateViewMenu();
  777.       }
  778.  
  779.       return this.viewMenu;
  780.    }
  781.  
  782.    private void updateViewMenu() {
  783.       if (this.viewMenu != null) {
  784.          Component[] var1 = this.viewMenu.getMenuComponents();
  785.  
  786.          for(int var2 = 0; var2 < var1.length; ++var2) {
  787.             if (var1[var2] instanceof JRadioButtonMenuItem) {
  788.                JRadioButtonMenuItem var3 = (JRadioButtonMenuItem)var1[var2];
  789.                if (sun.swing.FilePane.ViewTypeAction.access$2200((ViewTypeAction)var3.getAction()) == this.viewType) {
  790.                   var3.setSelected(true);
  791.                }
  792.             }
  793.          }
  794.       }
  795.  
  796.    }
  797.  
  798.    public JPopupMenu getComponentPopupMenu() {
  799.       JPopupMenu var1 = this.getFileChooser().getComponentPopupMenu();
  800.       if (var1 != null) {
  801.          return var1;
  802.       } else {
  803.          JMenu var2 = this.getViewMenu();
  804.          if (this.contextMenu == null) {
  805.             this.contextMenu = new JPopupMenu();
  806.             if (var2 != null) {
  807.                this.contextMenu.add(var2);
  808.                if (this.listViewWindowsStyle) {
  809.                   this.contextMenu.addSeparator();
  810.                }
  811.             }
  812.  
  813.             ActionMap var3 = this.getActionMap();
  814.             Action var4 = var3.get("refresh");
  815.             Action var5 = var3.get("New Folder");
  816.             if (var4 != null) {
  817.                this.contextMenu.add(var4);
  818.                if (this.listViewWindowsStyle && var5 != null) {
  819.                   this.contextMenu.addSeparator();
  820.                }
  821.             }
  822.  
  823.             if (var5 != null) {
  824.                this.contextMenu.add(var5);
  825.             }
  826.          }
  827.  
  828.          if (var2 != null) {
  829.             var2.getPopupMenu().setInvoker(var2);
  830.          }
  831.  
  832.          return this.contextMenu;
  833.       }
  834.    }
  835.  
  836.    protected Handler getMouseHandler() {
  837.       if (this.handler == null) {
  838.          this.handler = new Handler(this, (1)null);
  839.       }
  840.  
  841.       return this.handler;
  842.    }
  843.  
  844.    protected boolean isDirectorySelected() {
  845.       return this.fileChooserUIAccessor.isDirectorySelected();
  846.    }
  847.  
  848.    protected File getDirectory() {
  849.       return this.fileChooserUIAccessor.getDirectory();
  850.    }
  851.  
  852.    private Component findChildComponent(Container var1, Class var2) {
  853.       int var3 = var1.getComponentCount();
  854.  
  855.       for(int var4 = 0; var4 < var3; ++var4) {
  856.          Component var5 = var1.getComponent(var4);
  857.          if (var2.isInstance(var5)) {
  858.             return var5;
  859.          }
  860.  
  861.          if (var5 instanceof Container) {
  862.             Component var6 = this.findChildComponent((Container)var5, var2);
  863.             if (var6 != null) {
  864.                return var6;
  865.             }
  866.          }
  867.       }
  868.  
  869.       return null;
  870.    }
  871.  
  872.    public static boolean canWrite(File var0) {
  873.       boolean var1 = false;
  874.       if (var0 != null) {
  875.          try {
  876.             var1 = var0.canWrite();
  877.          } catch (AccessControlException var3) {
  878.             var1 = false;
  879.          }
  880.       }
  881.  
  882.       return var1;
  883.    }
  884.  
  885.    // $FF: synthetic method
  886.    static void access$000(FilePane var0) {
  887.       var0.applyEdit();
  888.    }
  889.  
  890.    // $FF: synthetic method
  891.    static String[] access$100(FilePane var0) {
  892.       return var0.viewTypeActionNames;
  893.    }
  894.  
  895.    // $FF: synthetic method
  896.    static void access$200(FilePane var0) {
  897.       var0.cancelEdit();
  898.    }
  899.  
  900.    // $FF: synthetic method
  901.    static ListSelectionModel access$300(FilePane var0) {
  902.       return var0.listSelectionModel;
  903.    }
  904.  
  905.    // $FF: synthetic method
  906.    static void access$400(FilePane var0, int var1) {
  907.       var0.editFileName(var1);
  908.    }
  909.  
  910.    // $FF: synthetic method
  911.    static boolean access$500(FilePane var0) {
  912.       return var0.readOnly;
  913.    }
  914.  
  915.    // $FF: synthetic method
  916.    static void access$600(FilePane var0, JList var1) {
  917.       var0.updateListRowCount(var1);
  918.    }
  919.  
  920.    // $FF: synthetic method
  921.    static DetailsTableModel access$700(FilePane var0) {
  922.       return var0.getDetailsTableModel();
  923.    }
  924.  
  925.    // $FF: synthetic method
  926.    static DetailsTableRowSorter access$800(FilePane var0) {
  927.       return var0.getRowSorter();
  928.    }
  929.  
  930.    // $FF: synthetic method
  931.    static DetailsTableRowSorter access$900(FilePane var0) {
  932.       return var0.rowSorter;
  933.    }
  934.  
  935.    // $FF: synthetic method
  936.    static File access$1000(FilePane var0) {
  937.       return var0.newFolderFile;
  938.    }
  939.  
  940.    // $FF: synthetic method
  941.    static File access$1002(FilePane var0, File var1) {
  942.       return var0.newFolderFile = var1;
  943.    }
  944.  
  945.    // $FF: synthetic method
  946.    static DetailsTableModel access$1200(FilePane var0) {
  947.       return var0.detailsTableModel;
  948.    }
  949.  
  950.    // $FF: synthetic method
  951.    static FocusListener access$1400(FilePane var0) {
  952.       return var0.editorFocusListener;
  953.    }
  954.  
  955.    // $FF: synthetic method
  956.    static boolean access$1500(FilePane var0) {
  957.       return var0.listViewWindowsStyle;
  958.    }
  959.  
  960.    // $FF: synthetic method
  961.    static String access$1600(FilePane var0) {
  962.       return var0.kiloByteString;
  963.    }
  964.  
  965.    // $FF: synthetic method
  966.    static String access$1700(FilePane var0) {
  967.       return var0.megaByteString;
  968.    }
  969.  
  970.    // $FF: synthetic method
  971.    static String access$1800(FilePane var0) {
  972.       return var0.gigaByteString;
  973.    }
  974.  
  975.    // $FF: synthetic method
  976.    static void access$1900(FilePane var0, JTable var1) {
  977.       var0.updateDetailsColumnModel(var1);
  978.    }
  979.  
  980.    // $FF: synthetic method
  981.    static void access$2000(FilePane var0, int var1) {
  982.       var0.fixNameColumnWidth(var1);
  983.    }
  984.  
  985.    // $FF: synthetic method
  986.    static FileChooserUIAccessor access$2100(FilePane var0) {
  987.       return var0.fileChooserUIAccessor;
  988.    }
  989.  
  990.    // $FF: synthetic method
  991.    static JList access$2400(FilePane var0) {
  992.       return var0.list;
  993.    }
  994.  
  995.    // $FF: synthetic method
  996.    static int access$2500(FilePane var0) {
  997.       return var0.getEditIndex();
  998.    }
  999.  
  1000.    // $FF: synthetic method
  1001.    static void access$2600(FilePane var0, int var1) {
  1002.       var0.setEditIndex(var1);
  1003.    }
  1004.  
  1005.    // $FF: synthetic method
  1006.    static void access$2700(FilePane var0) {
  1007.       var0.resetEditIndex();
  1008.    }
  1009. }
  1010.