diff options
Diffstat (limited to 'src/share')
6 files changed, 320 insertions, 121 deletions
diff --git a/src/share/classes/com/sun/java/swing/plaf/gtk/GTKFileChooserUI.java b/src/share/classes/com/sun/java/swing/plaf/gtk/GTKFileChooserUI.java index 30ce79812..fb1afc8b7 100644 --- a/src/share/classes/com/sun/java/swing/plaf/gtk/GTKFileChooserUI.java +++ b/src/share/classes/com/sun/java/swing/plaf/gtk/GTKFileChooserUI.java @@ -41,7 +41,6 @@ import javax.swing.plaf.basic.BasicDirectoryModel; import javax.swing.table.*; import javax.accessibility.*; -import sun.swing.AbstractFilterComboBoxModel; import sun.swing.SwingUtilities2; import sun.swing.plaf.synth.*; @@ -1329,9 +1328,71 @@ class GTKFileChooserUI extends SynthFileChooserUI { /** * Data model for filter combo-box. */ - protected class FilterComboBoxModel extends AbstractFilterComboBoxModel { - protected JFileChooser getFileChooser() { - return GTKFileChooserUI.this.getFileChooser(); + protected class FilterComboBoxModel extends AbstractListModel + implements ComboBoxModel, PropertyChangeListener { + protected FileFilter[] filters; + + protected FilterComboBoxModel() { + super(); + filters = getFileChooser().getChoosableFileFilters(); + } + + public void propertyChange(PropertyChangeEvent e) { + String prop = e.getPropertyName(); + if (prop == JFileChooser.CHOOSABLE_FILE_FILTER_CHANGED_PROPERTY) { + filters = (FileFilter[]) e.getNewValue(); + fireContentsChanged(this, -1, -1); + } else if (prop == JFileChooser.FILE_FILTER_CHANGED_PROPERTY) { + fireContentsChanged(this, -1, -1); + } + } + + public void setSelectedItem(Object filter) { + if (filter != null) { + getFileChooser().setFileFilter((FileFilter) filter); + fireContentsChanged(this, -1, -1); + } + } + + public Object getSelectedItem() { + // Ensure that the current filter is in the list. + // NOTE: we shouldnt' have to do this, since JFileChooser adds + // the filter to the choosable filters list when the filter + // is set. Lets be paranoid just in case someone overrides + // setFileFilter in JFileChooser. + FileFilter currentFilter = getFileChooser().getFileFilter(); + boolean found = false; + if (currentFilter != null) { + for (FileFilter filter : filters) { + if (filter == currentFilter) { + found = true; + } + } + if (found == false) { + getFileChooser().addChoosableFileFilter(currentFilter); + } + } + return getFileChooser().getFileFilter(); + } + + public int getSize() { + if (filters != null) { + return filters.length; + } else { + return 0; + } + } + + public Object getElementAt(int index) { + if (index > getSize() - 1) { + // This shouldn't happen. Try to recover gracefully. + return getFileChooser().getFileFilter(); + } + if (filters != null) { + return filters[index]; + } else { + return null; + } } } } diff --git a/src/share/classes/com/sun/java/swing/plaf/motif/MotifFileChooserUI.java b/src/share/classes/com/sun/java/swing/plaf/motif/MotifFileChooserUI.java index 9d063f7c0..ae7baa53b 100644 --- a/src/share/classes/com/sun/java/swing/plaf/motif/MotifFileChooserUI.java +++ b/src/share/classes/com/sun/java/swing/plaf/motif/MotifFileChooserUI.java @@ -38,7 +38,6 @@ import java.io.File; import java.io.IOException; import java.util.*; import sun.awt.shell.ShellFolder; -import sun.swing.AbstractFilterComboBoxModel; import sun.swing.SwingUtilities2; /** @@ -778,9 +777,70 @@ public class MotifFileChooserUI extends BasicFileChooserUI { /** * Data model for a type-face selection combo-box. */ - protected class FilterComboBoxModel extends AbstractFilterComboBoxModel { - protected JFileChooser getFileChooser() { - return MotifFileChooserUI.this.getFileChooser(); + protected class FilterComboBoxModel extends AbstractListModel<FileFilter> implements ComboBoxModel<FileFilter>, + PropertyChangeListener { + protected FileFilter[] filters; + protected FilterComboBoxModel() { + super(); + filters = getFileChooser().getChoosableFileFilters(); + } + + public void propertyChange(PropertyChangeEvent e) { + String prop = e.getPropertyName(); + if(prop.equals(JFileChooser.CHOOSABLE_FILE_FILTER_CHANGED_PROPERTY)) { + filters = (FileFilter[]) e.getNewValue(); + fireContentsChanged(this, -1, -1); + } else if (prop.equals(JFileChooser.FILE_FILTER_CHANGED_PROPERTY)) { + fireContentsChanged(this, -1, -1); + } + } + + public void setSelectedItem(Object filter) { + if(filter != null) { + getFileChooser().setFileFilter((FileFilter) filter); + fireContentsChanged(this, -1, -1); + } + } + + public Object getSelectedItem() { + // Ensure that the current filter is in the list. + // NOTE: we shouldnt' have to do this, since JFileChooser adds + // the filter to the choosable filters list when the filter + // is set. Lets be paranoid just in case someone overrides + // setFileFilter in JFileChooser. + FileFilter currentFilter = getFileChooser().getFileFilter(); + boolean found = false; + if(currentFilter != null) { + for (FileFilter filter : filters) { + if (filter == currentFilter) { + found = true; + } + } + if (!found) { + getFileChooser().addChoosableFileFilter(currentFilter); + } + } + return getFileChooser().getFileFilter(); + } + + public int getSize() { + if(filters != null) { + return filters.length; + } else { + return 0; + } + } + + public FileFilter getElementAt(int index) { + if(index > getSize() - 1) { + // This shouldn't happen. Try to recover gracefully. + return getFileChooser().getFileFilter(); + } + if(filters != null) { + return filters[index]; + } else { + return null; + } } } diff --git a/src/share/classes/com/sun/java/swing/plaf/windows/WindowsFileChooserUI.java b/src/share/classes/com/sun/java/swing/plaf/windows/WindowsFileChooserUI.java index 7052aeb59..48b501094 100644 --- a/src/share/classes/com/sun/java/swing/plaf/windows/WindowsFileChooserUI.java +++ b/src/share/classes/com/sun/java/swing/plaf/windows/WindowsFileChooserUI.java @@ -1193,9 +1193,70 @@ public class WindowsFileChooserUI extends BasicFileChooserUI { /** * Data model for a type-face selection combo-box. */ - protected class FilterComboBoxModel extends AbstractFilterComboBoxModel { - protected JFileChooser getFileChooser() { - return WindowsFileChooserUI.this.getFileChooser(); + protected class FilterComboBoxModel extends AbstractListModel<FileFilter> implements ComboBoxModel<FileFilter>, + PropertyChangeListener { + protected FileFilter[] filters; + protected FilterComboBoxModel() { + super(); + filters = getFileChooser().getChoosableFileFilters(); + } + + public void propertyChange(PropertyChangeEvent e) { + String prop = e.getPropertyName(); + if(prop == JFileChooser.CHOOSABLE_FILE_FILTER_CHANGED_PROPERTY) { + filters = (FileFilter[]) e.getNewValue(); + fireContentsChanged(this, -1, -1); + } else if (prop == JFileChooser.FILE_FILTER_CHANGED_PROPERTY) { + fireContentsChanged(this, -1, -1); + } + } + + public void setSelectedItem(Object filter) { + if(filter != null) { + getFileChooser().setFileFilter((FileFilter) filter); + fireContentsChanged(this, -1, -1); + } + } + + public Object getSelectedItem() { + // Ensure that the current filter is in the list. + // NOTE: we shouldnt' have to do this, since JFileChooser adds + // the filter to the choosable filters list when the filter + // is set. Lets be paranoid just in case someone overrides + // setFileFilter in JFileChooser. + FileFilter currentFilter = getFileChooser().getFileFilter(); + boolean found = false; + if(currentFilter != null) { + for (FileFilter filter : filters) { + if (filter == currentFilter) { + found = true; + } + } + if(found == false) { + getFileChooser().addChoosableFileFilter(currentFilter); + } + } + return getFileChooser().getFileFilter(); + } + + public int getSize() { + if(filters != null) { + return filters.length; + } else { + return 0; + } + } + + public FileFilter getElementAt(int index) { + if(index > getSize() - 1) { + // This shouldn't happen. Try to recover gracefully. + return getFileChooser().getFileFilter(); + } + if(filters != null) { + return filters[index]; + } else { + return null; + } } } diff --git a/src/share/classes/javax/swing/plaf/metal/MetalFileChooserUI.java b/src/share/classes/javax/swing/plaf/metal/MetalFileChooserUI.java index f0d043b49..677d1f88c 100644 --- a/src/share/classes/javax/swing/plaf/metal/MetalFileChooserUI.java +++ b/src/share/classes/javax/swing/plaf/metal/MetalFileChooserUI.java @@ -1067,9 +1067,69 @@ public class MetalFileChooserUI extends BasicFileChooserUI { /** * Data model for a type-face selection combo-box. */ - protected class FilterComboBoxModel extends AbstractFilterComboBoxModel { - protected JFileChooser getFileChooser() { - return MetalFileChooserUI.this.getFileChooser(); + protected class FilterComboBoxModel extends AbstractListModel<Object> implements ComboBoxModel<Object>, PropertyChangeListener { + protected FileFilter[] filters; + protected FilterComboBoxModel() { + super(); + filters = getFileChooser().getChoosableFileFilters(); + } + + public void propertyChange(PropertyChangeEvent e) { + String prop = e.getPropertyName(); + if(prop == JFileChooser.CHOOSABLE_FILE_FILTER_CHANGED_PROPERTY) { + filters = (FileFilter[]) e.getNewValue(); + fireContentsChanged(this, -1, -1); + } else if (prop == JFileChooser.FILE_FILTER_CHANGED_PROPERTY) { + fireContentsChanged(this, -1, -1); + } + } + + public void setSelectedItem(Object filter) { + if(filter != null) { + getFileChooser().setFileFilter((FileFilter) filter); + fireContentsChanged(this, -1, -1); + } + } + + public Object getSelectedItem() { + // Ensure that the current filter is in the list. + // NOTE: we shouldnt' have to do this, since JFileChooser adds + // the filter to the choosable filters list when the filter + // is set. Lets be paranoid just in case someone overrides + // setFileFilter in JFileChooser. + FileFilter currentFilter = getFileChooser().getFileFilter(); + boolean found = false; + if(currentFilter != null) { + for (FileFilter filter : filters) { + if (filter == currentFilter) { + found = true; + } + } + if(found == false) { + getFileChooser().addChoosableFileFilter(currentFilter); + } + } + return getFileChooser().getFileFilter(); + } + + public int getSize() { + if(filters != null) { + return filters.length; + } else { + return 0; + } + } + + public Object getElementAt(int index) { + if(index > getSize() - 1) { + // This shouldn't happen. Try to recover gracefully. + return getFileChooser().getFileFilter(); + } + if(filters != null) { + return filters[index]; + } else { + return null; + } } } diff --git a/src/share/classes/sun/swing/AbstractFilterComboBoxModel.java b/src/share/classes/sun/swing/AbstractFilterComboBoxModel.java deleted file mode 100644 index 355d3ca89..000000000 --- a/src/share/classes/sun/swing/AbstractFilterComboBoxModel.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package sun.swing; - -import javax.swing.AbstractListModel; -import javax.swing.ComboBoxModel; -import javax.swing.JFileChooser; -import javax.swing.filechooser.FileFilter; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; - -/** - * Data model for a type-face selection combo-box. - */ -public abstract class AbstractFilterComboBoxModel - extends AbstractListModel<FileFilter> - implements ComboBoxModel<FileFilter>, PropertyChangeListener { - - protected FileFilter[] filters; - - protected AbstractFilterComboBoxModel() { - this.filters = getFileChooser().getChoosableFileFilters(); - } - - protected abstract JFileChooser getFileChooser(); - - @Override - public void propertyChange(PropertyChangeEvent event) { - String property = event.getPropertyName(); - if (property == JFileChooser.CHOOSABLE_FILE_FILTER_CHANGED_PROPERTY) { - this.filters = (FileFilter[]) event.getNewValue(); - fireContentsChanged(this, -1, -1); - } else if (property == JFileChooser.FILE_FILTER_CHANGED_PROPERTY) { - fireContentsChanged(this, -1, -1); - } - } - - @Override - public void setSelectedItem(Object filter) { - if (filter != null) { - getFileChooser().setFileFilter((FileFilter) filter); - fireContentsChanged(this, -1, -1); - } - } - - @Override - public Object getSelectedItem() { - // Ensure that the current filter is in the list. - // NOTE: we should not have to do this, since JFileChooser adds - // the filter to the choosable filters list when the filter - // is set. Lets be paranoid just in case someone overrides - // setFileFilter in JFileChooser. - FileFilter currentFilter = getFileChooser().getFileFilter(); - if (currentFilter != null) { - for (FileFilter filter : this.filters) { - if (filter == currentFilter) { - return currentFilter; - } - } - getFileChooser().addChoosableFileFilter(currentFilter); - } - return currentFilter; - } - - @Override - public int getSize() { - return (this.filters != null) - ? filters.length - : 0; - } - - @Override - public FileFilter getElementAt(int index) { - if (index >= getSize()) { - // This shouldn't happen. Try to recover gracefully. - return getFileChooser().getFileFilter(); - } - return (this.filters != null) - ? filters[index] - : null; - } -} diff --git a/src/share/classes/sun/swing/plaf/synth/SynthFileChooserUIImpl.java b/src/share/classes/sun/swing/plaf/synth/SynthFileChooserUIImpl.java index 206eaa632..37792070d 100644 --- a/src/share/classes/sun/swing/plaf/synth/SynthFileChooserUIImpl.java +++ b/src/share/classes/sun/swing/plaf/synth/SynthFileChooserUIImpl.java @@ -923,9 +923,70 @@ public class SynthFileChooserUIImpl extends SynthFileChooserUI { /** * Data model for a type-face selection combo-box. */ - protected class FilterComboBoxModel extends AbstractFilterComboBoxModel { - protected JFileChooser getFileChooser() { - return SynthFileChooserUIImpl.this.getFileChooser(); + protected class FilterComboBoxModel extends AbstractListModel<FileFilter> implements ComboBoxModel<FileFilter>, + PropertyChangeListener { + protected FileFilter[] filters; + protected FilterComboBoxModel() { + super(); + filters = getFileChooser().getChoosableFileFilters(); + } + + public void propertyChange(PropertyChangeEvent e) { + String prop = e.getPropertyName(); + if(prop == JFileChooser.CHOOSABLE_FILE_FILTER_CHANGED_PROPERTY) { + filters = (FileFilter[]) e.getNewValue(); + fireContentsChanged(this, -1, -1); + } else if (prop == JFileChooser.FILE_FILTER_CHANGED_PROPERTY) { + fireContentsChanged(this, -1, -1); + } + } + + public void setSelectedItem(Object filter) { + if(filter != null) { + getFileChooser().setFileFilter((FileFilter) filter); + fireContentsChanged(this, -1, -1); + } + } + + public Object getSelectedItem() { + // Ensure that the current filter is in the list. + // NOTE: we shouldnt' have to do this, since JFileChooser adds + // the filter to the choosable filters list when the filter + // is set. Lets be paranoid just in case someone overrides + // setFileFilter in JFileChooser. + FileFilter currentFilter = getFileChooser().getFileFilter(); + boolean found = false; + if(currentFilter != null) { + for (FileFilter filter : filters) { + if (filter == currentFilter) { + found = true; + } + } + if(found == false) { + getFileChooser().addChoosableFileFilter(currentFilter); + } + } + return getFileChooser().getFileFilter(); + } + + public int getSize() { + if(filters != null) { + return filters.length; + } else { + return 0; + } + } + + public FileFilter getElementAt(int index) { + if(index > getSize() - 1) { + // This shouldn't happen. Try to recover gracefully. + return getFileChooser().getFileFilter(); + } + if(filters != null) { + return filters[index]; + } else { + return null; + } } } |