diff --git a/src/main/java/com/tagtraum/perf/gcviewer/action/OpenFile.java b/src/main/java/com/tagtraum/perf/gcviewer/action/OpenFile.java index 988c2156..3ce8085d 100644 --- a/src/main/java/com/tagtraum/perf/gcviewer/action/OpenFile.java +++ b/src/main/java/com/tagtraum/perf/gcviewer/action/OpenFile.java @@ -1,5 +1,6 @@ package com.tagtraum.perf.gcviewer.action; +import java.awt.FileDialog; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Toolkit; @@ -17,6 +18,7 @@ import com.tagtraum.perf.gcviewer.GCViewerGui; import com.tagtraum.perf.gcviewer.util.ExtensionFileFilter; import com.tagtraum.perf.gcviewer.util.LocalisationHelper; +import com.tagtraum.perf.gcviewer.util.OSXSupport; /** * @@ -59,6 +61,18 @@ public OpenFile(final GCViewerGui gcViewer) { } public void actionPerformed(final ActionEvent e) { + if(OSXSupport.isOSX()) { + // there is no way to show a checkbox on the native dialog so + // open a new window instead + FileDialog dialog = new FileDialog(gcViewer, LocalisationHelper.getString("fileopen_dialog_title"), FileDialog.LOAD); + dialog.setMultipleMode(true); + dialog.setVisible(true); + // dialog.setFilenameFilter doesn't do much on OSX + openFiles(dialog.getFiles(), false); + dialog.dispose(); + return; + } + final boolean aDocumentIsAlreadyOpen = gcViewer.getSelectedGCDocument() != null; addURLCheckBox.setVisible(aDocumentIsAlreadyOpen); addURLCheckBox.setEnabled(aDocumentIsAlreadyOpen); @@ -70,16 +84,24 @@ public void actionPerformed(final ActionEvent e) { } final int val = openDialog.showOpenDialog(gcViewer); if (val == JFileChooser.APPROVE_OPTION) { - lastSelectedFiles = openDialog.getSelectedFiles(); - if (addURLCheckBox.isSelected()) { - gcViewer.add(lastSelectedFiles); - } - else { - gcViewer.open(lastSelectedFiles); - } + openFiles(openDialog.getSelectedFiles(), addURLCheckBox.isSelected()); } } + private void openFiles(File[] files, boolean shouldAdd) { + if (files == null || files.length == 0) { + return; + } + lastSelectedFiles = files; + if (shouldAdd) { + gcViewer.add(lastSelectedFiles); + } + else { + gcViewer.open(lastSelectedFiles); + } + } + + public void setSelectedFile(final File file) { openDialog.setCurrentDirectory(file.getParentFile()); openDialog.setSelectedFile(file);