419 return null;
420 }
421
422 public void clearIconCache() {
423 fileView.clearIconCache();
424 }
425
426
427 // ********************************************
428 // ************ Create Listeners **************
429 // ********************************************
430
431 private Handler getHandler() {
432 if (handler == null) {
433 handler = new Handler();
434 }
435 return handler;
436 }
437
438 protected MouseListener createDoubleClickListener(JFileChooser fc,
439 JList list) {
440 return new Handler(list);
441 }
442
443 public ListSelectionListener createListSelectionListener(JFileChooser fc) {
444 return getHandler();
445 }
446
447 private class Handler implements MouseListener, ListSelectionListener {
448 JList list;
449
450 Handler() {
451 }
452
453 Handler(JList list) {
454 this.list = list;
455 }
456
457 public void mouseClicked(MouseEvent evt) {
458 // Note: we can't depend on evt.getSource() because of backward
459 // compatibility
460 if (list != null &&
461 SwingUtilities.isLeftMouseButton(evt) &&
462 (evt.getClickCount()%2 == 0)) {
463
464 int index = SwingUtilities2.loc2IndexFileList(list, evt.getPoint());
465 if (index >= 0) {
466 File f = (File)list.getModel().getElementAt(index);
467 try {
468 // Strip trailing ".."
469 f = ShellFolder.getNormalizedFile(f);
470 } catch (IOException ex) {
471 // That's ok, we'll use f as is
472 }
473 if(getFileChooser().isTraversable(f)) {
489 }
490 if (getFileChooser().getDragEnabled() != list.getDragEnabled()) {
491 list.setDragEnabled(getFileChooser().getDragEnabled());
492 }
493 }
494 }
495
496 public void mouseExited(MouseEvent evt) {
497 }
498
499 public void mousePressed(MouseEvent evt) {
500 }
501
502 public void mouseReleased(MouseEvent evt) {
503 }
504
505 public void valueChanged(ListSelectionEvent evt) {
506 if(!evt.getValueIsAdjusting()) {
507 JFileChooser chooser = getFileChooser();
508 FileSystemView fsv = chooser.getFileSystemView();
509 JList list = (JList)evt.getSource();
510
511 int fsm = chooser.getFileSelectionMode();
512 boolean useSetDirectory = usesSingleFilePane &&
513 (fsm == JFileChooser.FILES_ONLY);
514
515 if (chooser.isMultiSelectionEnabled()) {
516 File[] files = null;
517 Object[] objects = list.getSelectedValues();
518 if (objects != null) {
519 if (objects.length == 1
520 && ((File)objects[0]).isDirectory()
521 && chooser.isTraversable(((File)objects[0]))
522 && (useSetDirectory || !fsv.isFileSystem(((File)objects[0])))) {
523 setDirectorySelected(true);
524 setDirectory(((File)objects[0]));
525 } else {
526 ArrayList<File> fList = new ArrayList<File>(objects.length);
527 for (Object object : objects) {
528 File f = (File) object;
529 boolean isDir = f.isDirectory();
553 if (usesSingleFilePane) {
554 chooser.setSelectedFile(null);
555 }
556 } else {
557 setDirectorySelected(false);
558 if (file != null) {
559 chooser.setSelectedFile(file);
560 }
561 }
562 }
563 }
564 }
565 }
566
567 protected class DoubleClickListener extends MouseAdapter {
568 // NOTE: This class exists only for backward compatibility. All
569 // its functionality has been moved into Handler. If you need to add
570 // new functionality add it to the Handler, but make sure this
571 // class calls into the Handler.
572 Handler handler;
573 public DoubleClickListener(JList list) {
574 handler = new Handler(list);
575 }
576
577 /**
578 * The JList used for representing the files is created by subclasses, but the
579 * selection is monitored in this class. The TransferHandler installed in the
580 * JFileChooser is also installed in the file list as it is used as the actual
581 * transfer source. The list is updated on a mouse enter to reflect the current
582 * data transfer state of the file chooser.
583 */
584 public void mouseEntered(MouseEvent e) {
585 handler.mouseEntered(e);
586 }
587
588 public void mouseClicked(MouseEvent e) {
589 handler.mouseClicked(e);
590 }
591 }
592
593 protected class SelectionListener implements ListSelectionListener {
|
419 return null;
420 }
421
422 public void clearIconCache() {
423 fileView.clearIconCache();
424 }
425
426
427 // ********************************************
428 // ************ Create Listeners **************
429 // ********************************************
430
431 private Handler getHandler() {
432 if (handler == null) {
433 handler = new Handler();
434 }
435 return handler;
436 }
437
438 protected MouseListener createDoubleClickListener(JFileChooser fc,
439 JList<?> list) {
440 return new Handler(list);
441 }
442
443 public ListSelectionListener createListSelectionListener(JFileChooser fc) {
444 return getHandler();
445 }
446
447 private class Handler implements MouseListener, ListSelectionListener {
448 JList<?> list;
449
450 Handler() {
451 }
452
453 Handler(JList<?> list) {
454 this.list = list;
455 }
456
457 public void mouseClicked(MouseEvent evt) {
458 // Note: we can't depend on evt.getSource() because of backward
459 // compatibility
460 if (list != null &&
461 SwingUtilities.isLeftMouseButton(evt) &&
462 (evt.getClickCount()%2 == 0)) {
463
464 int index = SwingUtilities2.loc2IndexFileList(list, evt.getPoint());
465 if (index >= 0) {
466 File f = (File)list.getModel().getElementAt(index);
467 try {
468 // Strip trailing ".."
469 f = ShellFolder.getNormalizedFile(f);
470 } catch (IOException ex) {
471 // That's ok, we'll use f as is
472 }
473 if(getFileChooser().isTraversable(f)) {
489 }
490 if (getFileChooser().getDragEnabled() != list.getDragEnabled()) {
491 list.setDragEnabled(getFileChooser().getDragEnabled());
492 }
493 }
494 }
495
496 public void mouseExited(MouseEvent evt) {
497 }
498
499 public void mousePressed(MouseEvent evt) {
500 }
501
502 public void mouseReleased(MouseEvent evt) {
503 }
504
505 public void valueChanged(ListSelectionEvent evt) {
506 if(!evt.getValueIsAdjusting()) {
507 JFileChooser chooser = getFileChooser();
508 FileSystemView fsv = chooser.getFileSystemView();
509 @SuppressWarnings("unchecked")
510 JList<?> list = (JList)evt.getSource();
511
512 int fsm = chooser.getFileSelectionMode();
513 boolean useSetDirectory = usesSingleFilePane &&
514 (fsm == JFileChooser.FILES_ONLY);
515
516 if (chooser.isMultiSelectionEnabled()) {
517 File[] files = null;
518 Object[] objects = list.getSelectedValues();
519 if (objects != null) {
520 if (objects.length == 1
521 && ((File)objects[0]).isDirectory()
522 && chooser.isTraversable(((File)objects[0]))
523 && (useSetDirectory || !fsv.isFileSystem(((File)objects[0])))) {
524 setDirectorySelected(true);
525 setDirectory(((File)objects[0]));
526 } else {
527 ArrayList<File> fList = new ArrayList<File>(objects.length);
528 for (Object object : objects) {
529 File f = (File) object;
530 boolean isDir = f.isDirectory();
554 if (usesSingleFilePane) {
555 chooser.setSelectedFile(null);
556 }
557 } else {
558 setDirectorySelected(false);
559 if (file != null) {
560 chooser.setSelectedFile(file);
561 }
562 }
563 }
564 }
565 }
566 }
567
568 protected class DoubleClickListener extends MouseAdapter {
569 // NOTE: This class exists only for backward compatibility. All
570 // its functionality has been moved into Handler. If you need to add
571 // new functionality add it to the Handler, but make sure this
572 // class calls into the Handler.
573 Handler handler;
574 public DoubleClickListener(JList<?> list) {
575 handler = new Handler(list);
576 }
577
578 /**
579 * The JList used for representing the files is created by subclasses, but the
580 * selection is monitored in this class. The TransferHandler installed in the
581 * JFileChooser is also installed in the file list as it is used as the actual
582 * transfer source. The list is updated on a mouse enter to reflect the current
583 * data transfer state of the file chooser.
584 */
585 public void mouseEntered(MouseEvent e) {
586 handler.mouseEntered(e);
587 }
588
589 public void mouseClicked(MouseEvent e) {
590 handler.mouseClicked(e);
591 }
592 }
593
594 protected class SelectionListener implements ListSelectionListener {
|