106 String createButtonText = null;
107
108 JFileChooser filechooser = null;
109
110 private MouseListener doubleClickListener = null;
111 private PropertyChangeListener propertyChangeListener = null;
112 private AncestorListener ancestorListener = null;
113 private DropTarget dragAndDropTarget = null;
114
115 private final AcceptAllFileFilter acceptAllFileFilter = new AcceptAllFileFilter();
116
117 private AquaFileSystemModel model;
118
119 final AquaFileView fileView = new AquaFileView(this);
120
121 boolean selectionInProgress = false;
122
123 // The accessoryPanel is a container to place the JFileChooser accessory component
124 private JPanel accessoryPanel = null;
125
126 //
127 // ComponentUI Interface Implementation methods
128 //
129 public static ComponentUI createUI(final JComponent c) {
130 return new AquaFileChooserUI((JFileChooser)c);
131 }
132
133 public AquaFileChooserUI(final JFileChooser filechooser) {
134 super();
135 }
136
137 public void installUI(final JComponent c) {
138 accessoryPanel = new JPanel(new BorderLayout());
139 filechooser = (JFileChooser)c;
140
141 createModel();
142
143 installDefaults(filechooser);
144 installComponents(filechooser);
145 installListeners(filechooser);
191 fc.setDropTarget(dragAndDropTarget);
192 }
193
194 protected void uninstallListeners(final JFileChooser fc) {
195 if (propertyChangeListener != null) {
196 fc.removePropertyChangeListener(propertyChangeListener);
197 }
198 fFileList.removeMouseListener(doubleClickListener);
199 fc.removePropertyChangeListener(model);
200 fc.unregisterKeyboardAction(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0));
201 fc.removeAncestorListener(ancestorListener);
202 fc.setDropTarget(null);
203 ancestorListener = null;
204 }
205
206 protected void installDefaults(final JFileChooser fc) {
207 installIcons(fc);
208 installStrings(fc);
209 setPackageIsTraversable(fc.getClientProperty(PACKAGE_TRAVERSABLE_PROPERTY));
210 setApplicationIsTraversable(fc.getClientProperty(APPLICATION_TRAVERSABLE_PROPERTY));
211 }
212
213 protected void installIcons(final JFileChooser fc) {
214 directoryIcon = UIManager.getIcon("FileView.directoryIcon");
215 fileIcon = UIManager.getIcon("FileView.fileIcon");
216 computerIcon = UIManager.getIcon("FileView.computerIcon");
217 hardDriveIcon = UIManager.getIcon("FileView.hardDriveIcon");
218 }
219
220 String getString(final String uiKey, final String fallback) {
221 final String result = UIManager.getString(uiKey);
222 return (result == null ? fallback : result);
223 }
224
225 protected void installStrings(final JFileChooser fc) {
226 // Exist in basic.properties (though we might want to override)
227 fileDescriptionText = UIManager.getString("FileChooser.fileDescriptionText");
228 directoryDescriptionText = UIManager.getString("FileChooser.directoryDescriptionText");
229 newFolderErrorText = getString("FileChooser.newFolderErrorText", "Error occurred during folder creation");
230
279 chooseFolderButtonToolTipText = UIManager.getString("FileChooser.chooseFolderButtonToolTipText");
280 openDirectoryButtonToolTipText = UIManager.getString("FileChooser.openDirectoryButtonToolTipText");
281
282 directoryComboBoxToolTipText = UIManager.getString("FileChooser.directoryComboBoxToolTipText");
283 filenameTextFieldToolTipText = UIManager.getString("FileChooser.filenameTextFieldToolTipText");
284 filterComboBoxToolTipText = UIManager.getString("FileChooser.filterComboBoxToolTipText");
285
286 cancelOpenButtonToolTipText = UIManager.getString("FileChooser.cancelOpenButtonToolTipText");
287 cancelSaveButtonToolTipText = UIManager.getString("FileChooser.cancelSaveButtonToolTipText");
288 cancelChooseButtonToolTipText = UIManager.getString("FileChooser.cancelChooseButtonToolTipText");
289 cancelNewFolderButtonToolTipText = UIManager.getString("FileChooser.cancelNewFolderButtonToolTipText");
290
291 newFolderTitleText = UIManager.getString("FileChooser.newFolderTitleText");
292 newFolderToolTipText = UIManager.getString("FileChooser.newFolderToolTipText");
293 newFolderAccessibleName = getString("FileChooser.newFolderAccessibleName", newFolderTitleText);
294 }
295
296 protected void uninstallDefaults(final JFileChooser fc) {
297 uninstallIcons(fc);
298 uninstallStrings(fc);
299 }
300
301 protected void uninstallIcons(final JFileChooser fc) {
302 directoryIcon = null;
303 fileIcon = null;
304 computerIcon = null;
305 hardDriveIcon = null;
306 floppyDriveIcon = null;
307
308 upFolderIcon = null;
309 homeFolderIcon = null;
310 detailsViewIcon = null;
311 listViewIcon = null;
312 }
313
314 protected void uninstallStrings(final JFileChooser fc) {
315 saveTitleText = null;
316 openTitleText = null;
317 newFolderTitleText = null;
318
1059 Rectangle paintIconR = new Rectangle();
1060 Rectangle paintTextR = new Rectangle();
1061
1062 final String clippedText = layoutCL(this, fm, text, icon, paintViewR, paintIconR, paintTextR);
1063
1064 if (icon != null) {
1065 icon.paintIcon(this, g, paintIconR.x + 5, paintIconR.y);
1066 }
1067
1068 if (text != null) {
1069 final int textX = paintTextR.x;
1070 final int textY = paintTextR.y + fm.getAscent() + 1;
1071 if (isEnabled()) {
1072 // Color background = fIsSelected ? getForeground() : getBackground();
1073 final Color background = getBackground();
1074
1075 g.setColor(background);
1076 g.fillRect(textX - 1, paintTextR.y, paintTextR.width + 2, fm.getAscent() + 2);
1077
1078 g.setColor(getForeground());
1079 SwingUtilities2.drawString(filechooser, g, clippedText, textX, textY);
1080 } else {
1081 final Color background = getBackground();
1082 g.setColor(background);
1083 g.fillRect(textX - 1, paintTextR.y, paintTextR.width + 2, fm.getAscent() + 2);
1084
1085 g.setColor(background.brighter());
1086 SwingUtilities2.drawString(filechooser, g, clippedText, textX, textY);
1087 g.setColor(background.darker());
1088 SwingUtilities2.drawString(filechooser, g, clippedText, textX + 1, textY + 1);
1089 }
1090 }
1091 }
1092
1093 }
1094
1095 @SuppressWarnings("serial") // Superclass is not serializable across versions
1096 protected class FileRenderer extends MacFCTableCellRenderer {
1097 public FileRenderer(final Font f) {
1098 super(f);
1099 }
1100
1101 public Component getTableCellRendererComponent(final JTable list,
1102 final Object value,
1103 final boolean isSelected,
1104 final boolean cellHasFocus,
1105 final int index,
1106 final int col) {
1107 super.getTableCellRendererComponent(list, value, isSelected, false,
1108 index,
|
106 String createButtonText = null;
107
108 JFileChooser filechooser = null;
109
110 private MouseListener doubleClickListener = null;
111 private PropertyChangeListener propertyChangeListener = null;
112 private AncestorListener ancestorListener = null;
113 private DropTarget dragAndDropTarget = null;
114
115 private final AcceptAllFileFilter acceptAllFileFilter = new AcceptAllFileFilter();
116
117 private AquaFileSystemModel model;
118
119 final AquaFileView fileView = new AquaFileView(this);
120
121 boolean selectionInProgress = false;
122
123 // The accessoryPanel is a container to place the JFileChooser accessory component
124 private JPanel accessoryPanel = null;
125
126 private TextUIDrawing textUIDrawing;
127
128 //
129 // ComponentUI Interface Implementation methods
130 //
131 public static ComponentUI createUI(final JComponent c) {
132 return new AquaFileChooserUI((JFileChooser)c);
133 }
134
135 public AquaFileChooserUI(final JFileChooser filechooser) {
136 super();
137 }
138
139 public void installUI(final JComponent c) {
140 accessoryPanel = new JPanel(new BorderLayout());
141 filechooser = (JFileChooser)c;
142
143 createModel();
144
145 installDefaults(filechooser);
146 installComponents(filechooser);
147 installListeners(filechooser);
193 fc.setDropTarget(dragAndDropTarget);
194 }
195
196 protected void uninstallListeners(final JFileChooser fc) {
197 if (propertyChangeListener != null) {
198 fc.removePropertyChangeListener(propertyChangeListener);
199 }
200 fFileList.removeMouseListener(doubleClickListener);
201 fc.removePropertyChangeListener(model);
202 fc.unregisterKeyboardAction(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0));
203 fc.removeAncestorListener(ancestorListener);
204 fc.setDropTarget(null);
205 ancestorListener = null;
206 }
207
208 protected void installDefaults(final JFileChooser fc) {
209 installIcons(fc);
210 installStrings(fc);
211 setPackageIsTraversable(fc.getClientProperty(PACKAGE_TRAVERSABLE_PROPERTY));
212 setApplicationIsTraversable(fc.getClientProperty(APPLICATION_TRAVERSABLE_PROPERTY));
213 textUIDrawing = SwingUtilities2.getTextUIDrawing(textUIDrawing);
214 }
215
216 protected void installIcons(final JFileChooser fc) {
217 directoryIcon = UIManager.getIcon("FileView.directoryIcon");
218 fileIcon = UIManager.getIcon("FileView.fileIcon");
219 computerIcon = UIManager.getIcon("FileView.computerIcon");
220 hardDriveIcon = UIManager.getIcon("FileView.hardDriveIcon");
221 }
222
223 String getString(final String uiKey, final String fallback) {
224 final String result = UIManager.getString(uiKey);
225 return (result == null ? fallback : result);
226 }
227
228 protected void installStrings(final JFileChooser fc) {
229 // Exist in basic.properties (though we might want to override)
230 fileDescriptionText = UIManager.getString("FileChooser.fileDescriptionText");
231 directoryDescriptionText = UIManager.getString("FileChooser.directoryDescriptionText");
232 newFolderErrorText = getString("FileChooser.newFolderErrorText", "Error occurred during folder creation");
233
282 chooseFolderButtonToolTipText = UIManager.getString("FileChooser.chooseFolderButtonToolTipText");
283 openDirectoryButtonToolTipText = UIManager.getString("FileChooser.openDirectoryButtonToolTipText");
284
285 directoryComboBoxToolTipText = UIManager.getString("FileChooser.directoryComboBoxToolTipText");
286 filenameTextFieldToolTipText = UIManager.getString("FileChooser.filenameTextFieldToolTipText");
287 filterComboBoxToolTipText = UIManager.getString("FileChooser.filterComboBoxToolTipText");
288
289 cancelOpenButtonToolTipText = UIManager.getString("FileChooser.cancelOpenButtonToolTipText");
290 cancelSaveButtonToolTipText = UIManager.getString("FileChooser.cancelSaveButtonToolTipText");
291 cancelChooseButtonToolTipText = UIManager.getString("FileChooser.cancelChooseButtonToolTipText");
292 cancelNewFolderButtonToolTipText = UIManager.getString("FileChooser.cancelNewFolderButtonToolTipText");
293
294 newFolderTitleText = UIManager.getString("FileChooser.newFolderTitleText");
295 newFolderToolTipText = UIManager.getString("FileChooser.newFolderToolTipText");
296 newFolderAccessibleName = getString("FileChooser.newFolderAccessibleName", newFolderTitleText);
297 }
298
299 protected void uninstallDefaults(final JFileChooser fc) {
300 uninstallIcons(fc);
301 uninstallStrings(fc);
302 if (textUIDrawing != SwingUtilities2.DEFAULT_UI_TEXT_DRAWING
303 && textUIDrawing instanceof UIResource) {
304 textUIDrawing = SwingUtilities2.DEFAULT_UI_TEXT_DRAWING;
305 }
306 }
307
308 protected void uninstallIcons(final JFileChooser fc) {
309 directoryIcon = null;
310 fileIcon = null;
311 computerIcon = null;
312 hardDriveIcon = null;
313 floppyDriveIcon = null;
314
315 upFolderIcon = null;
316 homeFolderIcon = null;
317 detailsViewIcon = null;
318 listViewIcon = null;
319 }
320
321 protected void uninstallStrings(final JFileChooser fc) {
322 saveTitleText = null;
323 openTitleText = null;
324 newFolderTitleText = null;
325
1066 Rectangle paintIconR = new Rectangle();
1067 Rectangle paintTextR = new Rectangle();
1068
1069 final String clippedText = layoutCL(this, fm, text, icon, paintViewR, paintIconR, paintTextR);
1070
1071 if (icon != null) {
1072 icon.paintIcon(this, g, paintIconR.x + 5, paintIconR.y);
1073 }
1074
1075 if (text != null) {
1076 final int textX = paintTextR.x;
1077 final int textY = paintTextR.y + fm.getAscent() + 1;
1078 if (isEnabled()) {
1079 // Color background = fIsSelected ? getForeground() : getBackground();
1080 final Color background = getBackground();
1081
1082 g.setColor(background);
1083 g.fillRect(textX - 1, paintTextR.y, paintTextR.width + 2, fm.getAscent() + 2);
1084
1085 g.setColor(getForeground());
1086 textUIDrawing.drawString(filechooser, g, clippedText, textX, textY);
1087 } else {
1088 final Color background = getBackground();
1089 g.setColor(background);
1090 g.fillRect(textX - 1, paintTextR.y, paintTextR.width + 2, fm.getAscent() + 2);
1091
1092 g.setColor(background.brighter());
1093 textUIDrawing.drawString(filechooser, g, clippedText, textX, textY);
1094 g.setColor(background.darker());
1095 textUIDrawing.drawString(filechooser, g, clippedText, textX + 1, textY + 1);
1096 }
1097 }
1098 }
1099
1100 }
1101
1102 @SuppressWarnings("serial") // Superclass is not serializable across versions
1103 protected class FileRenderer extends MacFCTableCellRenderer {
1104 public FileRenderer(final Font f) {
1105 super(f);
1106 }
1107
1108 public Component getTableCellRendererComponent(final JTable list,
1109 final Object value,
1110 final boolean isSelected,
1111 final boolean cellHasFocus,
1112 final int index,
1113 final int col) {
1114 super.getTableCellRendererComponent(list, value, isSelected, false,
1115 index,
|